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

📄 fontlinux.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
字号:
/* * Copyright (c) 2007, 2008, 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 "Font.h"#include "FloatRect.h"#include "GlyphBuffer.h"#include "GraphicsContext.h"#include "NotImplemented.h"#include "PlatformContextSkia.h"#include "SimpleFontData.h"#include "SkCanvas.h"#include "SkPaint.h"#include "SkTemplates.h"#include "SkTypeface.h"#include "SkUtils.h"namespace WebCore {void Font::drawGlyphs(GraphicsContext* gc, const SimpleFontData* font,                      const GlyphBuffer& glyphBuffer,  int from, int numGlyphs,                      const FloatPoint& point) const {    SkASSERT(sizeof(GlyphBufferGlyph) == sizeof(uint16_t));  // compile-time assert    const GlyphBufferGlyph* glyphs = glyphBuffer.glyphs(from);    SkScalar x = SkFloatToScalar(point.x());    SkScalar y = SkFloatToScalar(point.y());    // FIXME: text rendering speed:    // Android has code in their WebCore fork to special case when the    // GlyphBuffer has no advances other than the defaults. In that case the    // text drawing can proceed faster. However, it's unclear when those    // patches may be upstreamed to WebKit so we always use the slower path    // here.    const GlyphBufferAdvance* adv = glyphBuffer.advances(from);    SkAutoSTMalloc<32, SkPoint> storage(numGlyphs);    SkPoint* pos = storage.get();    for (int i = 0; i < numGlyphs; i++) {        pos[i].set(x, y);        x += SkFloatToScalar(adv[i].width());        y += SkFloatToScalar(adv[i].height());    }    SkCanvas* canvas = gc->platformContext()->canvas();    int textMode = gc->platformContext()->getTextDrawingMode();    // We draw text up to two times (once for fill, once for stroke).    if (textMode & cTextFill) {        SkPaint paint;        gc->platformContext()->setupPaintForFilling(&paint);        font->platformData().setupPaint(&paint);        paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);        paint.setColor(gc->fillColor().rgb());        canvas->drawPosText(glyphs, numGlyphs << 1, pos, paint);    }    if ((textMode & cTextStroke)        && gc->platformContext()->getStrokeStyle() != NoStroke        && gc->platformContext()->getStrokeThickness() > 0) {        SkPaint paint;        gc->platformContext()->setupPaintForStroking(&paint, 0, 0);        font->platformData().setupPaint(&paint);        paint.setFlags(SkPaint::kAntiAlias_Flag);        paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);        paint.setColor(gc->strokeColor().rgb());        if (textMode & cTextFill) {            // If we also filled, we don't want to draw shadows twice.            // See comment in FontChromiumWin.cpp::paintSkiaText() for more details.            paint.setLooper(0)->safeUnref();        }        canvas->drawPosText(glyphs, numGlyphs << 1, pos, paint);    }}void Font::drawComplexText(GraphicsContext* context, const TextRun& run,                           const FloatPoint& point, int from, int to) const{    notImplemented();}float Font::floatWidthForComplexText(const TextRun& run) const{    notImplemented();    return 0;}int Font::offsetForPositionForComplexText(const TextRun& run, int x,                                          bool includePartialGlyphs) const{    notImplemented();    return 0;}FloatRect Font::selectionRectForComplexText(const TextRun& run,                                            const IntPoint& point, int h,                                            int from, int to) const{    notImplemented();    return FloatRect();}}  // namespace WebCore

⌨️ 快捷键说明

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