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

📄 html_baseimpl.cpp

📁 konqueror3 embedded版本, KDE环境下的当家浏览器的嵌入式版本源码包.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/** * This file is part of the DOM implementation for KDE. * * Copyright (C) 1999 Lars Knoll (knoll@kde.org) *           (C) 1999 Antti Koivisto (koivisto@kde.org) *           (C) 2000 Simon Hausmann (hausmann@kde.org) *           (C) 2001-2003 Dirk Mueller (mueller@kde.org) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB.  If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */// -------------------------------------------------------------------------#include "html/html_baseimpl.h"#include "html/html_documentimpl.h"#include "khtmlview.h"#include "khtml_part.h"#include "rendering/render_frames.h"#include "rendering/render_body.h"#include "css/cssstyleselector.h"#include "css/css_stylesheetimpl.h"#include "css/cssproperties.h"#include "css/cssvalues.h"#include "css/csshelper.h"#include "misc/loader.h"#include "misc/htmlhashes.h"#include "dom/dom_string.h"#include "dom/dom_doc.h"#include "xml/dom2_eventsimpl.h"#include <kurl.h>#include <kdebug.h>using namespace DOM;using namespace khtml;HTMLBodyElementImpl::HTMLBodyElementImpl(DocumentPtr *doc)    : HTMLElementImpl(doc),    m_bgSet( false ), m_fgSet( false ){    m_styleSheet = 0;}HTMLBodyElementImpl::~HTMLBodyElementImpl(){    if(m_styleSheet) m_styleSheet->deref();}NodeImpl::Id HTMLBodyElementImpl::id() const{    return ID_BODY;}void HTMLBodyElementImpl::parseAttribute(AttributeImpl *attr){    switch(attr->id())    {    case ATTR_BACKGROUND:    {        QString url = khtml::parseURL( attr->value() ).string();        if (!url.isEmpty()) {            url = getDocument()->completeURL( url );            addCSSProperty(CSS_PROP_BACKGROUND_IMAGE, "url('"+url+"')" );            m_bgSet = true;        }        else {             removeCSSProperty(CSS_PROP_BACKGROUND_IMAGE);             m_bgSet = false;         }        break;    }    case ATTR_MARGINWIDTH: {	KHTMLView* w = getDocument()->view();	if (w)	    w->setMarginWidth( -1 ); // unset this, so it doesn't override the setting here        addCSSLength(CSS_PROP_MARGIN_RIGHT, attr->value() );    }        /* nobreak; */    case ATTR_LEFTMARGIN:        addCSSLength(CSS_PROP_MARGIN_LEFT, attr->value() );        break;    case ATTR_MARGINHEIGHT: {	KHTMLView* w = getDocument()->view();	if (w)	    w->setMarginHeight( -1 ); // unset this, so it doesn't override the setting here        addCSSLength(CSS_PROP_MARGIN_BOTTOM, attr->value());    }        /* nobreak */    case ATTR_TOPMARGIN:        addCSSLength(CSS_PROP_MARGIN_TOP, attr->value());        break;    case ATTR_BGCOLOR:        addHTMLColor(CSS_PROP_BACKGROUND_COLOR, attr->value());        m_bgSet = !attr->value().isNull();        break;    case ATTR_TEXT:        addHTMLColor(CSS_PROP_COLOR, attr->value());        m_fgSet = !attr->value().isNull();        break;    case ATTR_BGPROPERTIES:        if ( strcasecmp( attr->value(), "fixed" ) == 0)            addCSSProperty(CSS_PROP_BACKGROUND_ATTACHMENT, CSS_VAL_FIXED);        break;    case ATTR_VLINK:    case ATTR_ALINK:    case ATTR_LINK:    {        if(!m_styleSheet) {            m_styleSheet = new CSSStyleSheetImpl(this,DOMString(),true);            m_styleSheet->ref();        }        QString aStr;	if ( attr->id() == ATTR_LINK )	    aStr = "a:link";	else if ( attr->id() == ATTR_VLINK )	    aStr = "a:visited";	else if ( attr->id() == ATTR_ALINK )	    aStr = "a:active";	aStr += " { color: " + attr->value().string() + "; }";        m_styleSheet->parseString(aStr, !getDocument()->inCompatMode());        m_styleSheet->setNonCSSHints();        if (attached())            getDocument()->updateStyleSelector();        break;    }    case ATTR_ONLOAD:        getDocument()->setHTMLWindowEventListener(EventImpl::LOAD_EVENT,	    getDocument()->createHTMLEventListener(attr->value().string(), "onload", NULL));        break;    case ATTR_ONUNLOAD:        getDocument()->setHTMLWindowEventListener(EventImpl::UNLOAD_EVENT,	    getDocument()->createHTMLEventListener(attr->value().string(), "onunload", NULL));        break;    case ATTR_ONBLUR:        getDocument()->setHTMLWindowEventListener(EventImpl::BLUR_EVENT,	    getDocument()->createHTMLEventListener(attr->value().string(), "onblur", NULL));        break;    case ATTR_ONFOCUS:        getDocument()->setHTMLWindowEventListener(EventImpl::FOCUS_EVENT,	    getDocument()->createHTMLEventListener(attr->value().string(), "onfocus", NULL));        break;    case ATTR_ONRESIZE:        getDocument()->setHTMLWindowEventListener(EventImpl::RESIZE_EVENT,	    getDocument()->createHTMLEventListener(attr->value().string(), "onresize", NULL));        break;    case ATTR_NOSAVE:	break;    default:        HTMLElementImpl::parseAttribute(attr);    }}void HTMLBodyElementImpl::insertedIntoDocument(){    HTMLElementImpl::insertedIntoDocument();    KHTMLView* w = getDocument()->view();    if(w && w->marginWidth() != -1) {        QString s;        s.sprintf( "%d", w->marginWidth() );        addCSSLength(CSS_PROP_MARGIN_LEFT, s);        addCSSLength(CSS_PROP_MARGIN_RIGHT, s);    }    if(w && w->marginHeight() != -1) {        QString s;        s.sprintf( "%d", w->marginHeight() );        addCSSLength(CSS_PROP_MARGIN_TOP, s);        addCSSLength(CSS_PROP_MARGIN_BOTTOM, s);    }    if ( m_bgSet && !m_fgSet )        addCSSProperty(CSS_PROP_COLOR, CSS_VAL_BLACK);    if (m_styleSheet)        getDocument()->updateStyleSelector();}void HTMLBodyElementImpl::removedFromDocument(){    HTMLElementImpl::removedFromDocument();    if (m_styleSheet)        getDocument()->updateStyleSelector();}void HTMLBodyElementImpl::attach(){    assert(!m_render);    assert(parentNode());    RenderStyle* style = getDocument()->styleSelector()->styleForElement(this);    style->ref();    if (parentNode()->renderer() && style->display() != NONE) {        if (style->display() == BLOCK)            // only use the quirky class for block display            m_render = new (getDocument()->renderArena()) RenderBody(this);        else            m_render = RenderObject::createObject(this, style);        m_render->setStyle(style);        parentNode()->renderer()->addChild(m_render, nextRenderer());    }    style->deref();    NodeBaseImpl::attach();}// -------------------------------------------------------------------------HTMLFrameElementImpl::HTMLFrameElementImpl(DocumentPtr *doc)    : HTMLElementImpl(doc){    frameBorder = true;    frameBorderSet = false;    marginWidth = -1;    marginHeight = -1;    scrolling = QScrollView::Auto;    noresize = false;    url = "about:blank";}HTMLFrameElementImpl::~HTMLFrameElementImpl(){}NodeImpl::Id HTMLFrameElementImpl::id() const{    return ID_FRAME;}void HTMLFrameElementImpl::parseAttribute(AttributeImpl *attr){    switch(attr->id())    {    case ATTR_SRC:        setLocation(khtml::parseURL(attr->val()));        break;    case ATTR_FRAMEBORDER:    {        frameBorder = attr->value().toInt();        frameBorderSet = ( attr->val() != 0 );        // FIXME: when attached, has no effect    }    break;    case ATTR_MARGINWIDTH:        marginWidth = attr->val()->toInt();        // FIXME: when attached, has no effect        break;    case ATTR_MARGINHEIGHT:        marginHeight = attr->val()->toInt();        // FIXME: when attached, has no effect        break;    case ATTR_NORESIZE:        noresize = true;        // FIXME: when attached, has no effect        break;    case ATTR_SCROLLING:        if( strcasecmp( attr->value(), "auto" ) == 0 )            scrolling = QScrollView::Auto;        else if( strcasecmp( attr->value(), "yes" ) == 0 )            scrolling = QScrollView::AlwaysOn;        else if( strcasecmp( attr->value(), "no" ) == 0 )            scrolling = QScrollView::AlwaysOff;        // when attached, has no effect        break;    case ATTR_ONLOAD:        setHTMLEventListener(EventImpl::LOAD_EVENT,            getDocument()->createHTMLEventListener(attr->value().string(), "onload", this));        break;    case ATTR_ONUNLOAD:        setHTMLEventListener(EventImpl::UNLOAD_EVENT,            getDocument()->createHTMLEventListener(attr->value().string(), "onunload", this));        break;    case ATTR_ID:    case ATTR_NAME:        // FIXME: if already attached, doesn't change the frame name        // FIXME: frame name conflicts, no unique frame name anymore        name = attr->value();        //fallthrough intentional, let the base handle it    default:        HTMLElementImpl::parseAttribute(attr);    }}void HTMLFrameElementImpl::attach(){    assert(!attached());    assert(parentNode());    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());    }    if (parentNode()->renderer() && getDocument()->isURLAllowed(url.string()))  {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -