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

📄 webkitgraphics.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
字号:
/* * Copyright (C) 2007 Apple 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: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. 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. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``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 APPLE COMPUTER, INC. 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 "WebKitGraphics.h"#include "WebKit.h"#include "WebKitDLL.h"#include "WebPreferences.h"#pragma warning(push, 0)#include <WebCore/CharacterNames.h>#include <WebCore/Font.h>#include <WebCore/FontDatabase.h>#include <WebCore/FontDescription.h>#include <WebCore/FontSelector.h>#include <WebCore/GraphicsContext.h>#include <WebCore/PlatformString.h>#include <WebCore/StringTruncator.h>#include <WebCore/WebCoreTextRenderer.h>#include <CoreGraphics/CoreGraphics.h>#pragma warning(pop)#include <WebKitSystemInterface/WebKitSystemInterface.h>using namespace WebCore;static Font makeFont(const WebFontDescription& description){    AtomicString::init();    populateFontDatabase();    String fontFamilyString(description.family, description.familyLength);    FontDescription f;    FontFamily family;    family.setFamily(fontFamilyString);    f.setFamily(family);    f.setSpecifiedSize(description.size);    f.setComputedSize(description.size);    f.setItalic(description.italic);    f.setWeight(description.bold ? FontWeightBold : FontWeightNormal);    f.setIsAbsoluteSize(true);    FontSmoothingType smoothingType;    if (SUCCEEDED(WebPreferences::sharedStandardPreferences()->fontSmoothing(&smoothingType)))        f.setRenderingMode(smoothingType == FontSmoothingTypeWindows ? AlternateRenderingMode : NormalRenderingMode);    Font font(f, 0, 0);    font.update(0);    return font;}// Text shadow is added post 3.1.1.  In order for nightlies to not break Safari 3.1.1, we should still allow// the old WebTextRenderInfo that has a smaller structSize than the current one with the new text shadow data members.struct WebTextRenderInfoWithoutShadow{    DWORD structSize;    CGContextRef cgContext;    LPCTSTR text;    int length;    POINT pt;    const WebFontDescription* description;    CGColorRef color;    int underlinedIndex;    bool drawAsPassword;    int overrideSmoothingLevel; // pass in -1 if caller does not want to override smoothing level};void WebDrawText(WebTextRenderInfo* info){    if (!info || info->structSize < sizeof(WebTextRenderInfoWithoutShadow) || !info->cgContext || !info->description)        return;    int oldFontSmoothingLevel = -1;    if (info->overrideSmoothingLevel >= 0) {        oldFontSmoothingLevel = wkGetFontSmoothingLevel();        wkSetFontSmoothingLevel(info->overrideSmoothingLevel);    }    {        GraphicsContext context(info->cgContext);        String drawString(info->text, info->length);        if (info->drawAsPassword)            drawString = drawString.impl()->secure(WebCore::bullet);        context.save();        // Set shadow setting        if (info->structSize == sizeof(WebTextRenderInfo) &&            (info->shadowOffset.cx || info->shadowOffset.cy || info->shadowBlur || info->shadowColor))            context.setShadow(info->shadowOffset, info->shadowBlur, info->shadowColor);        WebCoreDrawTextAtPoint(context, drawString, info->pt, makeFont(*(info->description)), info->color, info->underlinedIndex);        context.restore();    }    if (info->overrideSmoothingLevel >= 0)        wkSetFontSmoothingLevel(oldFontSmoothingLevel);}float TextFloatWidth(LPCTSTR text, int length, const WebFontDescription& description){    return WebCoreTextFloatWidth(String(text, length), makeFont(description));}void FontMetrics(const WebFontDescription& description, int* ascent, int* descent, int* lineSpacing){    if (!ascent && !descent && !lineSpacing)        return;    Font font(makeFont(description));    if (ascent)        *ascent = font.ascent();    if (descent)        *descent = font.descent();    if (lineSpacing)        *lineSpacing = font.lineSpacing();}unsigned CenterTruncateStringToWidth(LPCTSTR text, int length, const WebFontDescription& description, float width, WCHAR* buffer){    ASSERT(buffer);    String result = StringTruncator::centerTruncate(String(text, length), width, makeFont(description), false);    memcpy(buffer, result.characters(), result.length() * sizeof(UChar));    buffer[result.length()] = '\0';    return result.length();}unsigned RightTruncateStringToWidth(LPCTSTR text, int length, const WebFontDescription& description, float width, WCHAR* buffer){    ASSERT(buffer);    String result = StringTruncator::rightTruncate(String(text, length), width, makeFont(description), false);    memcpy(buffer, result.characters(), result.length() * sizeof(UChar));    buffer[result.length()] = '\0';    return result.length();}void WebKitSetShouldUseFontSmoothing(bool smooth){    WebCoreSetShouldUseFontSmoothing(smooth);}bool WebKitShouldUseFontSmoothing(){    return WebCoreShouldUseFontSmoothing();}

⌨️ 快捷键说明

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