⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 html_objectimpl.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 2 页
字号:
         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 + -