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

📄 fontcachelinux.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
字号:
/* * Copyright (c) 2006, 2007, 2008, 2009 Google Inc. 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 Google Inc. 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 "config.h"#include "FontCache.h"#include <fontconfig/fontconfig.h>#include "AtomicString.h"#include "CString.h"#include "Font.h"#include "FontDescription.h"#include "FontPlatformData.h"#include "Logging.h"#include "NotImplemented.h"#include "SimpleFontData.h"#include "SkPaint.h"#include "SkTypeface.h"#include "SkUtils.h"namespace WebCore {void FontCache::platformInit(){}const SimpleFontData* FontCache::getFontDataForCharacters(const Font& font,                                                          const UChar* characters,                                                          int length){    FcCharSet* cset = FcCharSetCreate();    for (int i = 0; i < length; ++i)        FcCharSetAddChar(cset, characters[i]);    FcPattern* pattern = FcPatternCreate();    FcValue fcvalue;    fcvalue.type = FcTypeCharSet;    fcvalue.u.c = cset;    FcPatternAdd(pattern, FC_CHARSET, fcvalue, 0);    FcConfigSubstitute(0, pattern, FcMatchPattern);    FcDefaultSubstitute(pattern);    FcResult result;    FcPattern* match = FcFontMatch(0, pattern, &result);    FcPatternDestroy(pattern);    SimpleFontData* ret = 0;    if (match) {        FcChar8* family;        if (FcPatternGetString(match, FC_FAMILY, 0, &family) == FcResultMatch) {            FontPlatformData* fpd =                createFontPlatformData(font.fontDescription(), AtomicString((char*) family));            ret = new SimpleFontData(*fpd);        }        FcPatternDestroy(match);    }    FcCharSetDestroy(cset);    return ret;}FontPlatformData* FontCache::getSimilarFontPlatformData(const Font& font){    return 0;}FontPlatformData* FontCache::getLastResortFallbackFont(const FontDescription& description){    static AtomicString arialStr("Arial");    return getCachedFontPlatformData(description, arialStr);}void FontCache::getTraitsInFamily(const AtomicString& familyName,                                  Vector<unsigned>& traitsMasks){    notImplemented();}FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontDescription,                                                    const AtomicString& family){    const char* name = 0;    CString s;    if (family.length() == 0) {        static const struct {            FontDescription::GenericFamilyType mType;            const char* mName;        } fontDescriptions[] = {            { FontDescription::SerifFamily, "serif" },            { FontDescription::SansSerifFamily, "sans-serif" },            { FontDescription::MonospaceFamily, "monospace" },            { FontDescription::CursiveFamily, "cursive" },            { FontDescription::FantasyFamily, "fantasy" }        };        FontDescription::GenericFamilyType type = fontDescription.genericFamily();        for (unsigned i = 0; i < SK_ARRAY_COUNT(fontDescriptions); i++) {            if (type == fontDescriptions[i].mType) {                name = fontDescriptions[i].mName;                break;            }        }        // if we fall out of the loop, it's ok for name to still be 0    }    else {    // convert the name to utf8        s = family.string().utf8();        name = s.data();    }    int style = SkTypeface::kNormal;    if (fontDescription.weight() >= FontWeightBold)        style |= SkTypeface::kBold;    if (fontDescription.italic())        style |= SkTypeface::kItalic;    SkTypeface* tf = SkTypeface::Create(name, static_cast<SkTypeface::Style>(style));    if (!tf)        return 0;    FontPlatformData* result =        new FontPlatformData(tf,                             fontDescription.computedSize(),                             (style & SkTypeface::kBold) && !tf->isBold(),                             (style & SkTypeface::kItalic) && !tf->isItalic());    tf->unref();    return result;}AtomicString FontCache::getGenericFontForScript(UScriptCode script,                                                const FontDescription& descript){    notImplemented();    return AtomicString();}}  // namespace WebCore

⌨️ 快捷键说明

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