📄 html_baseimpl.cpp
字号:
RenderStyle* _style = getDocument()->styleSelector()->styleForElement(this); _style->ref(); if ( _style->display() != NONE ) { m_render = new (getDocument()->renderArena()) RenderFrame(this); m_render->setStyle(_style); parentNode()->renderer()->addChild(m_render, nextRenderer()); } _style->deref(); } NodeBaseImpl::attach(); if (!m_render) return; KHTMLView* w = getDocument()->view(); if (w) { // we need a unique name for every frame in the frameset. Hope that's unique enough. if(name.isEmpty() || w->part()->frameExists( name.string() ) ) name = DOMString(w->part()->requestFrameName()); // load the frame contents w->part()->requestFrame( static_cast<RenderFrame*>(m_render), url.string(), name.string() ); }}void HTMLFrameElementImpl::setLocation( const DOMString& str ){ if ( url == str ) return; url = str; if( !attached() ) return; if( !m_render ) { detach(); attach(); return; } if( !getDocument()->isURLAllowed(url.string()) ) return; // load the frame contents KHTMLView *w = getDocument()->view(); if (w) { KHTMLPart *part = w->part()->findFrame( name.string() ); if ( part ) { part->openURL( KURL( getDocument()->completeURL( url.string() ) ) ); } else { w->part()->requestFrame( static_cast<RenderFrame*>( m_render ), url.string(), name.string() ); } }}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{ if ( !m_render ) return 0; RenderPart* render = static_cast<RenderPart*>( m_render ); if(render->widget() && ::qt_cast<KHTMLView*>( render->widget()) ) return static_cast<KHTMLView*>( render->widget() )->part()->xmlDocImpl(); return 0;}// -------------------------------------------------------------------------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(){ delete [] m_rows; delete [] m_cols;}NodeImpl::Id HTMLFrameSetElementImpl::id() const{ return ID_FRAMESET;}void HTMLFrameSetElementImpl::parseAttribute(AttributeImpl *attr){ switch(attr->id()) { case ATTR_ROWS: if (!attr->val()) break; delete [] m_rows; m_rows = attr->val()->toLengthArray(m_totalRows); setChanged(); break; case ATTR_COLS: if (!attr->val()) break; delete [] m_cols; m_cols = attr->val()->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->val()->toInt(); if(!m_border) frameborder = false; break; case ATTR_ONLOAD: getDocument()->setHTMLEventListener(EventImpl::LOAD_EVENT, getDocument()->createHTMLEventListener(attr->value().string(), "onload", this)); break; case ATTR_ONUNLOAD: getDocument()->setHTMLEventListener(EventImpl::UNLOAD_EVENT, getDocument()->createHTMLEventListener(attr->value().string(), "onunload", this)); break; default: HTMLElementImpl::parseAttribute(attr); }}void HTMLFrameSetElementImpl::attach(){ assert(!attached() ); assert(parentNode()); // 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()); } // ignore display: none if ( parentNode()->renderer() ) { m_render = new (getDocument()->renderArena()) RenderFrameSet(this); m_render->setStyle(getDocument()->styleSelector()->styleForElement(this)); parentNode()->renderer()->addChild(m_render, nextRenderer()); } NodeBaseImpl::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 getDocument()->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 );}// -------------------------------------------------------------------------NodeImpl::Id HTMLHeadElementImpl::id() const{ return ID_HEAD;}// -------------------------------------------------------------------------NodeImpl::Id HTMLHtmlElementImpl::id() const{ return ID_HTML;}// -------------------------------------------------------------------------HTMLIFrameElementImpl::HTMLIFrameElementImpl(DocumentPtr *doc) : HTMLFrameElementImpl(doc){ frameBorder = false; marginWidth = 0; marginHeight = 0; needWidgetUpdate = false;}HTMLIFrameElementImpl::~HTMLIFrameElementImpl(){}NodeImpl::Id HTMLIFrameElementImpl::id() const{ return ID_IFRAME;}void HTMLIFrameElementImpl::parseAttribute(AttributeImpl *attr ){ switch ( attr->id() ) { case ATTR_WIDTH: if (!attr->value().isEmpty()) addCSSLength(CSS_PROP_WIDTH, attr->value()); else removeCSSProperty(CSS_PROP_WIDTH); break; case ATTR_HEIGHT: if (!attr->value().isEmpty()) addCSSLength(CSS_PROP_HEIGHT, attr->value()); else removeCSSProperty(CSS_PROP_HEIGHT); break; case ATTR_SRC: needWidgetUpdate = true; // ### do this for scrolling, margins etc? HTMLFrameElementImpl::parseAttribute( attr ); break; default: HTMLFrameElementImpl::parseAttribute( attr ); }}void HTMLIFrameElementImpl::attach(){ assert(!attached()); assert(!m_render); assert(parentNode()); name = getAttribute(ATTR_NAME); if (name.isNull()) name = getAttribute(ATTR_ID); RenderStyle* style = getDocument()->styleSelector()->styleForElement(this); style->ref(); if (getDocument()->isURLAllowed(url.string()) && parentNode()->renderer() && style->display() != NONE) { m_render = new (getDocument()->renderArena()) RenderPartObject(this); m_render->setStyle(style); parentNode()->renderer()->addChild(m_render, nextRenderer()); } style->deref(); NodeBaseImpl::attach(); if (m_render) { // we need a unique name for every frame in the frameset. Hope that's unique enough. KHTMLView* w = getDocument()->view(); if(w && (name.isEmpty() || w->part()->frameExists( name.string() ))) name = DOMString(w->part()->requestFrameName()); needWidgetUpdate = false; static_cast<RenderPartObject*>(m_render)->updateWidget(); }}void HTMLIFrameElementImpl::recalcStyle( StyleChange ch ){ if (needWidgetUpdate) { needWidgetUpdate = false; if(m_render) static_cast<RenderPartObject*>(m_render)->updateWidget(); } HTMLElementImpl::recalcStyle( ch );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -