📄 html_baseimpl.cpp
字号:
}}bool HTMLFrameElementImpl::rendererIsNeeded(RenderStyle *style){ // Ignore display: none. return isURLAllowed(url);}RenderObject *HTMLFrameElementImpl::createRenderer(RenderArena *arena, RenderStyle *style){ return new (arena) RenderFrame(this);}void HTMLFrameElementImpl::attach(){ // we should first look up via id, then via name. // this shortterm hack fixes the ugly case. ### rewrite needed for next release name = getAttribute(ATTR_NAME); if (name.isNull()) name = getAttribute(ATTR_ID); // inherit default settings from parent frameset HTMLElementImpl* node = static_cast<HTMLElementImpl*>(parentNode()); while(node) { if(node->id() == ID_FRAMESET) { HTMLFrameSetElementImpl* frameset = static_cast<HTMLFrameSetElementImpl*>(node); if(!frameBorderSet) frameBorder = frameset->frameBorder(); if(!noresize) noresize = frameset->noResize(); break; } node = static_cast<HTMLElementImpl*>(node->parentNode()); } HTMLElementImpl::attach(); if (!m_render) return; KHTMLPart *part = getDocument()->part(); if (!part) return; part->incrementFrameCount(); AtomicString relativeURL = url; if (relativeURL.isEmpty()) { relativeURL = "about:blank"; } // we need a unique name for every frame in the frameset. Hope that's unique enough. if (name.isEmpty() || part->frameExists( name.string() ) ) name = AtomicString(part->requestFrameName()); // load the frame contents part->requestFrame( static_cast<RenderFrame*>(m_render), relativeURL.string(), name.string() );}void HTMLFrameElementImpl::detach(){ KHTMLPart *part = getDocument()->part(); if (m_render && part) { part->decrementFrameCount(); KHTMLPart *framePart = part->findFrame( name.string() ); if (framePart) framePart->frameDetached(); } HTMLElementImpl::detach();}void HTMLFrameElementImpl::setLocation( const DOMString& str ){ if (url == str) return; url = AtomicString(str); updateForNewURL();}bool HTMLFrameElementImpl::isFocusable() const{ return m_render!=0;}void HTMLFrameElementImpl::setFocus(bool received){ HTMLElementImpl::setFocus(received); khtml::RenderFrame *renderFrame = static_cast<khtml::RenderFrame *>(m_render); if (!renderFrame || !renderFrame->widget()) return; if (received) renderFrame->widget()->setFocus(); else renderFrame->widget()->clearFocus();}DocumentImpl* HTMLFrameElementImpl::contentDocument() const{ KHTMLPart* p = getDocument()->part(); if (p) { KHTMLPart *part = p->findFrame( name.string() ); if (part) { return part->xmlDocImpl(); } } return 0;}bool HTMLFrameElementImpl::isURLAttribute(AttributeImpl *attr) const{ return attr->id() == ATTR_SRC;}// -------------------------------------------------------------------------HTMLFrameSetElementImpl::HTMLFrameSetElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc){ // default value for rows and cols... m_totalRows = 1; m_totalCols = 1; m_rows = m_cols = 0; frameborder = true; frameBorderSet = false; m_border = 4; noresize = false; m_resizing = false;}HTMLFrameSetElementImpl::~HTMLFrameSetElementImpl(){ if (m_rows) delete [] m_rows; if (m_cols) delete [] m_cols;}NodeImpl::Id HTMLFrameSetElementImpl::id() const{ return ID_FRAMESET;}void HTMLFrameSetElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr){ switch(attr->id()) { case ATTR_ROWS: if (attr->isNull()) break; if (m_rows) delete [] m_rows; m_rows = attr->value().toLengthArray(m_totalRows); setChanged(); break; case ATTR_COLS: if (attr->isNull()) break; delete [] m_cols; m_cols = attr->value().toLengthArray(m_totalCols); setChanged(); break; case ATTR_FRAMEBORDER: // false or "no" or "0".. if ( attr->value().toInt() == 0 ) { frameborder = false; m_border = 0; } frameBorderSet = true; break; case ATTR_NORESIZE: noresize = true; break; case ATTR_BORDER: m_border = attr->value().toInt(); if(!m_border) frameborder = false; break; case ATTR_ONLOAD: setHTMLEventListener(EventImpl::LOAD_EVENT, getDocument()->createHTMLEventListener(attr->value().string())); break; case ATTR_ONUNLOAD: setHTMLEventListener(EventImpl::UNLOAD_EVENT, getDocument()->createHTMLEventListener(attr->value().string())); break; default: HTMLElementImpl::parseHTMLAttribute(attr); }}bool HTMLFrameSetElementImpl::rendererIsNeeded(RenderStyle *style){ // Ignore display: none but do pay attention if a stylesheet has caused us to delay our loading. return style->isStyleAvailable();}RenderObject *HTMLFrameSetElementImpl::createRenderer(RenderArena *arena, RenderStyle *style){ return new (arena) RenderFrameSet(this);}void HTMLFrameSetElementImpl::attach(){ // inherit default settings from parent frameset HTMLElementImpl* node = static_cast<HTMLElementImpl*>(parentNode()); while(node) { if(node->id() == ID_FRAMESET) { HTMLFrameSetElementImpl* frameset = static_cast<HTMLFrameSetElementImpl*>(node); if(!frameBorderSet) frameborder = frameset->frameBorder(); if(!noresize) noresize = frameset->noResize(); break; } node = static_cast<HTMLElementImpl*>(node->parentNode()); } HTMLElementImpl::attach();}void HTMLFrameSetElementImpl::defaultEventHandler(EventImpl *evt){ if (evt->isMouseEvent() && !noresize && m_render) { static_cast<khtml::RenderFrameSet *>(m_render)->userResize(static_cast<MouseEventImpl*>(evt)); evt->setDefaultHandled(); } HTMLElementImpl::defaultEventHandler(evt);}void HTMLFrameSetElementImpl::detach(){ if(attached()) // ### send the event when we actually get removed from the doc instead of here dispatchHTMLEvent(EventImpl::UNLOAD_EVENT,false,false); HTMLElementImpl::detach();}void HTMLFrameSetElementImpl::recalcStyle( StyleChange ch ){ if (changed() && m_render) { m_render->setNeedsLayout(true);// m_render->layout(); setChanged(false); } HTMLElementImpl::recalcStyle( ch );}// -------------------------------------------------------------------------HTMLHeadElementImpl::HTMLHeadElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc){}HTMLHeadElementImpl::~HTMLHeadElementImpl(){}NodeImpl::Id HTMLHeadElementImpl::id() const{ return ID_HEAD;}// -------------------------------------------------------------------------HTMLHtmlElementImpl::HTMLHtmlElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc){}HTMLHtmlElementImpl::~HTMLHtmlElementImpl(){}NodeImpl::Id HTMLHtmlElementImpl::id() const{ return ID_HTML;}// -------------------------------------------------------------------------HTMLIFrameElementImpl::HTMLIFrameElementImpl(DocumentPtr *doc) : HTMLFrameElementImpl(doc){ frameBorder = false; marginWidth = -1; marginHeight = -1; needWidgetUpdate = false;}HTMLIFrameElementImpl::~HTMLIFrameElementImpl(){}NodeImpl::Id HTMLIFrameElementImpl::id() const{ return ID_IFRAME;}bool HTMLIFrameElementImpl::mapToEntry(NodeImpl::Id attr, MappedAttributeEntry& result) const{ switch (attr) { case ATTR_WIDTH: case ATTR_HEIGHT: result = eUniversal; return false; case ATTR_ALIGN: result = eReplaced; // Share with <img> since the alignment behavior is the same. return false; default: break; } return HTMLElementImpl::mapToEntry(attr, result);}void HTMLIFrameElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr ){ switch ( attr->id() ) { case ATTR_WIDTH: addCSSLength( attr, CSS_PROP_WIDTH, attr->value()); break; case ATTR_HEIGHT: addCSSLength( attr, CSS_PROP_HEIGHT, attr->value() ); break; case ATTR_ALIGN: addHTMLAlignment( attr ); break; default: HTMLFrameElementImpl::parseHTMLAttribute( attr ); }}bool HTMLIFrameElementImpl::rendererIsNeeded(RenderStyle *style){ // Don't ignore display: none the way frame does. return isURLAllowed(url) && style->display() != NONE;}RenderObject *HTMLIFrameElementImpl::createRenderer(RenderArena *arena, RenderStyle *style){ return new (arena) RenderPartObject(this);}void HTMLIFrameElementImpl::attach(){ HTMLElementImpl::attach(); KHTMLPart *part = getDocument()->part(); if (m_render && part) { // we need a unique name for every frame in the frameset. Hope that's unique enough. part->incrementFrameCount(); if(name.isEmpty() || part->frameExists( name.string() )) name = AtomicString(part->requestFrameName()); static_cast<RenderPartObject*>(m_render)->updateWidget(); needWidgetUpdate = false; }}void HTMLIFrameElementImpl::recalcStyle( StyleChange ch ){ if (needWidgetUpdate) { if(m_render) static_cast<RenderPartObject*>(m_render)->updateWidget(); needWidgetUpdate = false; } HTMLElementImpl::recalcStyle( ch );}void HTMLIFrameElementImpl::openURL(){ needWidgetUpdate = true; setChanged();}bool HTMLIFrameElementImpl::isURLAttribute(AttributeImpl *attr) const{ return attr->id() == ATTR_SRC;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -