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

📄 rootimpl.cpp

📁 khtml在gtk上的移植版本
💻 CPP
字号:
/* * Copyright (c) 2004 Nokia. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * * Neither the name of Nokia nor the names of its contributors may be * used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */#include "rootimpl.h"#include "frameimpl.h"#include "osbimpl.h"#include "prefimpl.h"#include "NRCore/WebCoreSettings.h"class InternalHttpProtoDelegate  : public OSB::ProtocolDelegate{public:    void setProxy(const gchar* proxy) {	HttpFactory().setProxy("http://", proxy);    }    bool provides(const gchar* protocol) {	return HttpFactory().canProvide(protocol);    }};staticvoid setDefaultWebCoreSettings(WebCoreSettings* s){    s->setSerifFontFamily("serif");    s->setSansSerifFontFamily("sans");    s->setFixedFontFamily("fixed");    s->setStandardFontFamily("times");    s->setCursiveFontFamily("times");    s->setFantasyFontFamily("times");    s->setWillLoadImagesAutomatically(true);    s->setJavaScriptEnabled(true);    s->setJavaEnabled(false);    s->setPluginsEnabled(false);    s->setMinimumFontSize(6.0f);    s->setMinimumLogicalFontSize(6.0f);    s->setDefaultFontSize(14.0f);    s->setDefaultFixedFontSize(10.0f);	}struct FrameGroup{    FrameGroup(const gchar* n):mainFrames(0), name(g_strdup(n)) { setDefaultWebCoreSettings(&settings); }    void insert(BridgeImpl* mainFrame) { mainFrames = g_list_append(mainFrames, mainFrame);}    void remove(BridgeImpl* mainFrame) { mainFrames = g_list_remove(mainFrames, mainFrame);}    bool isEmpty() {return g_list_length(mainFrames);}    GList* mainFrames; // of BridgeImpl*    gchar* name;    URLCredentialStorageImpl credentials;    WebCoreSettings settings;};extern"C"{void dict_key_destr(gpointer data){    g_free((gchar*)data);}void dict_value_destr(gpointer data){    FrameGroup* fg = static_cast<FrameGroup*>(data);    delete fg;}}class FrameGroupHolder {    GHashTable* dict; // of FrameGroup*public:    FrameGroupHolder()     {	dict = g_hash_table_new_full(g_str_hash, g_str_equal,dict_key_destr, dict_value_destr);    }    FrameGroup* groupForName(const gchar* name)    {	FrameGroup *f = static_cast<FrameGroup*>(g_hash_table_lookup(dict,name));	if (!f) {	    f = new FrameGroup(name);	    g_hash_table_insert(dict, g_strdup(name), f);	}	return f;    }    void registerTo(FrameGroup* grp, BridgeImpl* target)     {	grp->insert(target);    }    void unregisterFrom(FrameGroup* grp, BridgeImpl *target)    {	grp->remove(target);	if (grp->isEmpty()) 	    g_hash_table_remove(dict, grp->name); // this deletes grp    }};FrameGroupHolder& groups(){    static FrameGroupHolder single;    return single;}RootImpl::RootImpl(OSB::Root* aiface, const gchar* frameName, const gchar* groupName)    :_iface(aiface),_textSizeMultiplier(1.0){    if (!groupName) groupName = "";    _currentGroup = groups().groupForName(groupName);    // create mainFrame    _mainFrame = new FrameImpl(this, 0);    groups().registerTo(_currentGroup, this->_mainFrame);    if (frameName) _mainFrame->setFrameName(frameName);    _mainFrame->loadEmptyDocumentSynchronously();}RootImpl::~RootImpl(){    groups().unregisterFrom(_currentGroup, this->_mainFrame);    delete _mainFrame;}void RootImpl::setGroup(const gchar* group){    groups().unregisterFrom(_currentGroup, _mainFrame);    _currentGroup = groups().groupForName(group);    groups().registerTo(_currentGroup, _mainFrame);    _mainFrame->changeSettingsDescendingToChildren(&_currentGroup->settings);}const gchar* RootImpl::group() {    return _currentGroup->name;}void RootImpl::setFrameLoadDelegate(OSB::FrameLoadDelegate* d){    _mainFrame->setFrameLoadDelegate(d);}void RootImpl::setPreferences(const OSB::Preferences& aprefs){    aprefs.d->copyToWebCoreSettings(&_currentGroup->settings);}OSB::Preferences* RootImpl::preferences(){    prefs.d->settings = &_currentGroup->settings;    return &prefs;}void RootImpl::setResourceLoadDelegate(OSB::ResourceLoadDelegate* d){    _mainFrame->setResourceLoadDelegate(d);}void RootImpl::setUIDelegate(OSB::UIDelegate* d){    _mainFrame->setUIDelegate(d);}void RootImpl::setTextSizeMultiplier(float multiplier){    _textSizeMultiplier = multiplier;    _mainFrame->setTextSizeMultiplier(multiplier);}float RootImpl::textSizeMultiplier(){    return _textSizeMultiplier;}FrameImpl* RootImpl::mainFrame(){    return _mainFrame;}bool RootImpl::searchFor(const gchar *string, bool forward, bool caseSensitive){    return _mainFrame->searchFor(string, forward, caseSensitive, false /*wrapFlag*/);}OSB::BackForwardList* RootImpl::backForwardList(){//    return &(_mainFrame->history());    return 0L;}OSB::URLCredentialStorage* RootImpl::credentialStorage() {    return _mainFrame->credentials();}void RootImpl::goBack(){    _mainFrame->goBack();}bool RootImpl::canGoBack(){    return _mainFrame->canGoBack();}void RootImpl::goForward(){    _mainFrame->goForward();}bool RootImpl::canGoForward(){    return _mainFrame->canGoForward();}OSB::ProtocolDelegate* RootImpl::protocolDelegateForURL(const gchar* url){    static InternalHttpProtoDelegate httpProv;    if (g_str_has_prefix(url, "http://"))	return &httpProv;    return 0;}void RootImpl::registerContentRepresentation(OSB::ContentRepresentationFactory* crf, const gchar* mimeType){    _mainFrame->addContentRepresentation(crf, mimeType);}GList* RootImpl::peers(){    return _currentGroup->mainFrames;}OSB::URLCredentialStorage* RootImpl::credentials(){    return &_currentGroup->credentials;}WebCoreSettings* RootImpl::sharedSettings(){    return &_currentGroup->settings;}

⌨️ 快捷键说明

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