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

📄 html_objectimpl.cpp

📁 khtml在gtk上的移植版本
💻 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 Stefan Schimanski (1Stein@gmx.de) * Copyright (C) 2004 Apple Computer, Inc. * * 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., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#include "html/html_objectimpl.h"#include "khtml_part.h"#include "dom/dom_string.h"#include "misc/htmlhashes.h"#include "khtmlview.h"#include <qstring.h>#include <qmap.h>#include <kdebug.h>#include "xml/dom_docimpl.h"#include "css/cssstyleselector.h"#include "css/csshelper.h"#include "css/cssproperties.h"#include "css/cssvalues.h"#include "rendering/render_applet.h"#include "rendering/render_frames.h"#include "rendering/render_image.h"#include "xml/dom2_eventsimpl.h"#ifndef Q_WS_QWS // We don't have Java in Qt Embedded#include "java/kjavaappletwidget.h"#include "java/kjavaappletcontext.h"#endif#if APPLE_CHANGES#include "KWQKHTMLPart.h"#endifusing namespace DOM;using namespace khtml;// -------------------------------------------------------------------------HTMLAppletElementImpl::HTMLAppletElementImpl(DocumentPtr *doc)  : HTMLElementImpl(doc){#if !KWIQ_NO_JAVA         appletInstance = 0;#endif}HTMLAppletElementImpl::~HTMLAppletElementImpl(){#if !KWIQ_NO_JAVA     delete appletInstance;#endif}NodeImpl::Id HTMLAppletElementImpl::id() const{    return ID_APPLET;}bool HTMLAppletElementImpl::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 HTMLAppletElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr){    switch (attr->id()) {    case ATTR_ALT:    case ATTR_ARCHIVE:    case ATTR_CODE:    case ATTR_CODEBASE:    case ATTR_MAYSCRIPT:    case ATTR_NAME:    case ATTR_OBJECT:        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_ALIGN:	addHTMLAlignment(attr);	break;    default:        HTMLElementImpl::parseHTMLAttribute(attr);    }}bool HTMLAppletElementImpl::rendererIsNeeded(RenderStyle *style){    return !getAttribute(ATTR_CODE).isNull();}RenderObject *HTMLAppletElementImpl::createRenderer(RenderArena *arena, RenderStyle *style){#if !defined(Q_WS_QWS) || !KWIQ_NO_APPLET // FIXME(E)? I don't think this is possible with Qt Embedded...    KHTMLPart *part = getDocument()->part();    if( part && part->javaEnabled() )    {	QMap<QString, QString> args;	args.insert( "code", getAttribute(ATTR_CODE).string());	DOMString codeBase = getAttribute(ATTR_CODEBASE);	if(!codeBase.isNull())	    args.insert( "codeBase", codeBase.string() );	DOMString name = getDocument()->htmlMode() != DocumentImpl::XHtml ?			 getAttribute(ATTR_NAME) : getAttribute(ATTR_ID);	if(!name.isNull())	    args.insert( "name", name.string() );	DOMString archive = getAttribute(ATTR_ARCHIVE);	if(!archive.isNull())	    args.insert( "archive", archive.string() );	args.insert( "baseURL", getDocument()->baseURL() );        DOMString mayScript = getAttribute(ATTR_MAYSCRIPT);        if (!mayScript.isNull())            args.insert("mayScript", mayScript.string());        // Other arguments (from <PARAM> tags) are added later.                return new (getDocument()->renderArena()) RenderApplet(this, args);    }    // ### remove me. we should never show an empty applet, instead    // render the alternative content given by the webpage    return new (getDocument()->renderArena()) RenderEmptyApplet(this);#else    return 0;#endif}bool HTMLAppletElementImpl::getMember(const QString & name, JType & type, QString & val) {#if APPLE_CHANGES    return false;#else#ifndef Q_WS_QWS // We don't have Java in Qt Embedded    if ( !m_render || !m_render->isApplet() )        return false;    KJavaAppletWidget *w = static_cast<KJavaAppletWidget*>(static_cast<RenderApplet*>(m_render)->widget());    return (w && w->applet() && w->applet()->getMember(name, type, val));#else    return false;#endif#endif}bool HTMLAppletElementImpl::callMember(const QString & name, const QStringList & args, JType & type, QString & val) {#if APPLE_CHANGES    return false;#else#ifndef Q_WS_QWS // We don't have Java in Qt Embedded    if ( !m_render || !m_render->isApplet() )        return false;    KJavaAppletWidget *w = static_cast<KJavaAppletWidget*>(static_cast<RenderApplet*>(m_render)->widget());    return (w && w->applet() && w->applet()->callMember(name, args, type, val));#else    return false;#endif#endif}#if APPLE_CHANGES && ! KWIQ_NO_JAVAKJS::Bindings::Instance *HTMLAppletElementImpl::getAppletInstance() const{    KHTMLPart* part = getDocument()->part();    if (!part || !part->javaEnabled())        return 0;    if (appletInstance)        return appletInstance;        RenderApplet *r = static_cast<RenderApplet*>(m_render);    if (r) {        r->createWidgetIfNecessary();        if (r->widget()){            // Call into the part (and over the bridge) to pull the Bindings::Instance            // from the guts of the Java VM.            void *_view = r->widget()->getView();            appletInstance = KWQ(part)->getAppletInstanceForView((NSView *)_view);        }    }    return appletInstance;}#endif// -------------------------------------------------------------------------HTMLEmbedElementImpl::HTMLEmbedElementImpl(DocumentPtr *doc)    : HTMLElementImpl(doc){}HTMLEmbedElementImpl::~HTMLEmbedElementImpl(){}NodeImpl::Id HTMLEmbedElementImpl::id() const{    return ID_EMBED;}#if APPLE_CHANGES && !KWIQ_NO_JAVAKJS::Bindings::Instance *HTMLEmbedElementImpl::getEmbedInstance() const{    KHTMLPart* part = getDocument()->part();    if (!part)        return 0;    if (embedInstance)        return embedInstance;        RenderPartObject *r = static_cast<RenderPartObject*>(m_render);    if (r) {        if (r->widget()){            // Call into the part (and over the bridge) to pull the Bindings::Instance            // from the guts of the Java VM.            void *_view = r->widget()->getView();            embedInstance = KWQ(part)->getEmbedInstanceForView((NSView *)_view);        }    }    return embedInstance;}#endifbool HTMLEmbedElementImpl::mapToEntry(NodeImpl::Id attr, MappedAttributeEntry& result) const{    switch (attr) {        case ATTR_WIDTH:        case ATTR_HEIGHT:        case ATTR_BORDER:        case ATTR_VSPACE:        case ATTR_HSPACE:        case ATTR_VALIGN:        case ATTR_HIDDEN:            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 HTMLEmbedElementImpl::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 );        break;     case ATTR_CODE:     case ATTR_SRC:         url = khtml::parseURL(attr->value()).string();

⌨️ 快捷键说明

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