📄 html_objectimpl.cpp
字号:
break; case ATTR_WIDTH: addCSSLength( attr, CSS_PROP_WIDTH, attr->value() ); break; case ATTR_HEIGHT: addCSSLength( attr, CSS_PROP_HEIGHT, attr->value()); break; case ATTR_BORDER: addCSSLength(attr, CSS_PROP_BORDER_WIDTH, attr->value()); addCSSProperty( attr, CSS_PROP_BORDER_TOP_STYLE, CSS_VAL_SOLID ); addCSSProperty( attr, CSS_PROP_BORDER_RIGHT_STYLE, CSS_VAL_SOLID ); addCSSProperty( attr, CSS_PROP_BORDER_BOTTOM_STYLE, CSS_VAL_SOLID ); addCSSProperty( attr, CSS_PROP_BORDER_LEFT_STYLE, CSS_VAL_SOLID ); break; case ATTR_VSPACE: addCSSLength(attr, CSS_PROP_MARGIN_TOP, attr->value()); addCSSLength(attr, CSS_PROP_MARGIN_BOTTOM, attr->value()); break; case ATTR_HSPACE: addCSSLength(attr, CSS_PROP_MARGIN_LEFT, attr->value()); addCSSLength(attr, CSS_PROP_MARGIN_RIGHT, attr->value()); break; case ATTR_ALIGN: addHTMLAlignment(attr); break; case ATTR_VALIGN: addCSSProperty(attr, CSS_PROP_VERTICAL_ALIGN, attr->value()); break; case ATTR_PLUGINPAGE: case ATTR_PLUGINSPAGE: pluginPage = val; break; case ATTR_HIDDEN: if (val.lower()=="yes" || val.lower()=="true") { // FIXME: Not dynamic, but it's not really important that such a rarely-used // feature work dynamically. addCSSLength( attr, CSS_PROP_WIDTH, "0" ); addCSSLength( attr, CSS_PROP_HEIGHT, "0" ); } break; default: HTMLElementImpl::parseHTMLAttribute( attr ); }}bool HTMLEmbedElementImpl::rendererIsNeeded(RenderStyle *style){ KHTMLPart *part = getDocument()->part(); if (!part) return false; return part->pluginsEnabled() && parentNode()->id() != ID_OBJECT;}RenderObject *HTMLEmbedElementImpl::createRenderer(RenderArena *arena, RenderStyle *style){ return new (arena) RenderPartObject(this);}void HTMLEmbedElementImpl::attach(){ HTMLElementImpl::attach(); if (m_render) { static_cast<RenderPartObject*>(m_render)->updateWidget(); }}bool HTMLEmbedElementImpl::isURLAttribute(AttributeImpl *attr) const{ return attr->id() == ATTR_SRC;}// -------------------------------------------------------------------------HTMLObjectElementImpl::HTMLObjectElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc), m_imageLoader(0){ needWidgetUpdate = false;}HTMLObjectElementImpl::~HTMLObjectElementImpl(){ delete m_imageLoader;}NodeImpl::Id HTMLObjectElementImpl::id() const{ return ID_OBJECT;}HTMLFormElementImpl *HTMLObjectElementImpl::form() const{ return 0;}bool HTMLObjectElementImpl::mapToEntry(NodeImpl::Id attr, MappedAttributeEntry& result) const{ switch (attr) { case ATTR_WIDTH: case ATTR_HEIGHT: result = eUniversal; return false; default: break; } return HTMLElementImpl::mapToEntry(attr, result);}void HTMLObjectElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr){ QString val = attr->value().string(); int pos; switch ( attr->id() ) { case ATTR_TYPE: serviceType = val.lower(); pos = serviceType.find( ";" ); if ( pos!=-1 ) serviceType = serviceType.left( pos ); needWidgetUpdate = true; if (!canRenderImageType(serviceType) && m_imageLoader) { delete m_imageLoader; m_imageLoader = 0; } break; case ATTR_DATA: url = khtml::parseURL( val ).string(); needWidgetUpdate = true; if (m_render && canRenderImageType(serviceType)) { if (!m_imageLoader) m_imageLoader = new HTMLImageLoader(this); m_imageLoader->updateFromElement(); } break; case ATTR_WIDTH: addCSSLength( attr, CSS_PROP_WIDTH, attr->value()); break; case ATTR_HEIGHT: addCSSLength( attr, CSS_PROP_HEIGHT, attr->value()); break; case ATTR_CLASSID: classId = val; needWidgetUpdate = true; break; case ATTR_ONLOAD: // ### support load/unload on object elements 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 ); }}DocumentImpl* HTMLObjectElementImpl::contentDocument() const{ // ### return 0;}bool HTMLObjectElementImpl::rendererIsNeeded(RenderStyle *style){ if (canRenderImageType(serviceType)) { return HTMLElementImpl::rendererIsNeeded(style); } KHTMLPart* part = getDocument()->part(); if (!part || !part->pluginsEnabled()) { return false; }#if APPLE_CHANGES //FIXME:KWIQ: Is this neccessery or not? // Eventually we will merge with the better version of this check on the tip of tree. // Until then, just leave it out.#else KURL u = getDocument()->completeURL(url); for (KHTMLPart* part = w->part()->parentPart(); part; part = part->parentPart()) if (part->url() == u) { return false; }#endif return true;}RenderObject *HTMLObjectElementImpl::createRenderer(RenderArena *arena, RenderStyle *style){ if (canRenderImageType(serviceType)) { return new (arena) RenderImage(this); } return new (arena) RenderPartObject(this);}void HTMLObjectElementImpl::attach(){ HTMLElementImpl::attach(); if (m_render) { if (canRenderImageType(serviceType)) { if (!m_imageLoader) m_imageLoader = new HTMLImageLoader(this); m_imageLoader->updateFromElement(); if (renderer()) { RenderImage* imageObj = static_cast<RenderImage*>(renderer()); imageObj->setImage(m_imageLoader->image()); } } else { // If we are already cleared, then it means that we were attach()-ed previously // with no renderer. We will actually need to do an update in order to ensure // that the plugin shows up. This fix is necessary to work with async // render tree construction caused by stylesheet loads. -dwh needWidgetUpdate = false; } } // ### do this when we are actually finished loading instead if (m_render) dispatchHTMLEvent(EventImpl::LOAD_EVENT,false,false);}void HTMLObjectElementImpl::detach(){ // Only bother with an unload event if we had a render object. - dwh if (attached() && m_render) // ### do this when we are actualy removed from document instead dispatchHTMLEvent(EventImpl::UNLOAD_EVENT,false,false); HTMLElementImpl::detach();}void HTMLObjectElementImpl::recalcStyle( StyleChange ch ){ if (needWidgetUpdate) { if(m_render && strcmp( m_render->renderName(), "RenderPartObject" ) == 0 ) static_cast<RenderPartObject*>(m_render)->updateWidget(); needWidgetUpdate = false; } HTMLElementImpl::recalcStyle( ch );}bool HTMLObjectElementImpl::isURLAttribute(AttributeImpl *attr) const{ return (attr->id() == ATTR_DATA || (attr->id() == ATTR_USEMAP && attr->value().domString()[0] != '#'));}// -------------------------------------------------------------------------HTMLParamElementImpl::HTMLParamElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc){}HTMLParamElementImpl::~HTMLParamElementImpl(){}NodeImpl::Id HTMLParamElementImpl::id() const{ return ID_PARAM;}void HTMLParamElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr){ switch( attr->id() ) { case ATTR_ID: // Must call base class so that hasID bit gets set. HTMLElementImpl::parseHTMLAttribute(attr); if (getDocument()->htmlMode() != DocumentImpl::XHtml) break; // fall through case ATTR_NAME: m_name = attr->value(); break; case ATTR_VALUE: m_value = attr->value(); break; }}bool HTMLParamElementImpl::isURLAttribute(AttributeImpl *attr) const{ if (attr->id() == ATTR_VALUE) { AttributeImpl *attr = attributes()->getAttributeItem(ATTR_NAME); if (attr) { DOMString value = attr->value().string().lower(); if (value == "src" || value == "movie" || value == "data") { return true; } } } return false;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -