| Index: Source/core/platform/graphics/skia/SkiaFontWin.cpp
|
| diff --git a/Source/core/platform/graphics/skia/SkiaFontWin.cpp b/Source/core/platform/graphics/skia/SkiaFontWin.cpp
|
| index 6622321d65fc5dde3f6d145b9d86540d811a06b2..257959ee6a2f2131631f4caa7c0a68659a15c0e9 100644
|
| --- a/Source/core/platform/graphics/skia/SkiaFontWin.cpp
|
| +++ b/Source/core/platform/graphics/skia/SkiaFontWin.cpp
|
| @@ -85,53 +85,30 @@ static void skiaDrawText(GraphicsContext* context,
|
| }
|
| }
|
|
|
| -static void setupPaintForFont(SkPaint* paint, GraphicsContext* context,
|
| - SkTypeface* face, float size, uint32_t textFlags)
|
| -{
|
| - paint->setTextSize(SkFloatToScalar(size));
|
| - paint->setTypeface(face);
|
| -
|
| - if (!context->couldUseLCDRenderedText()) {
|
| - textFlags &= ~SkPaint::kLCDRenderText_Flag;
|
| - // If we *just* clear our request for LCD, then GDI seems to
|
| - // sometimes give us AA text, and sometimes give us BW text. Since the
|
| - // original intent was LCD, we want to force AA (rather than BW), so we
|
| - // add a special bit to tell Skia to do its best to avoid the BW: by
|
| - // drawing LCD offscreen and downsampling that to AA.
|
| - textFlags |= SkPaint::kGenA8FromLCD_Flag;
|
| - }
|
| -
|
| - static const uint32_t textFlagsMask = SkPaint::kAntiAlias_Flag |
|
| - SkPaint::kLCDRenderText_Flag |
|
| - SkPaint::kGenA8FromLCD_Flag;
|
| -
|
| - // now copy in just the text flags
|
| - SkASSERT(!(textFlags & ~textFlagsMask));
|
| - uint32_t flags = paint->getFlags();
|
| - flags &= ~textFlagsMask;
|
| - flags |= textFlags;
|
| - paint->setFlags(flags);
|
| -}
|
| -
|
| -static void paintSkiaText(GraphicsContext* context, HFONT hfont,
|
| - SkTypeface* face, float size, uint32_t textFlags,
|
| - int numGlyphs,
|
| - const WORD* glyphs,
|
| - const int* advances,
|
| - const GOFFSET* offsets,
|
| - const SkPoint& origin,
|
| - const SkRect& textRect)
|
| +static void paintSkiaText(GraphicsContext* context,
|
| + const FontPlatformData& data,
|
| + SkTypeface* face, float size, uint32_t textFlags,
|
| + int numGlyphs,
|
| + const WORD* glyphs,
|
| + const int* advances,
|
| + const GOFFSET* offsets,
|
| + const SkPoint& origin,
|
| + const SkRect& textRect)
|
| {
|
| TextDrawingModeFlags textMode = context->textDrawingMode();
|
| - // Ensure font load for printing, because PDF device needs it.
|
| - if (context->isPrintingDevice())
|
| - FontPlatformData::ensureFontLoaded(hfont);
|
|
|
| // Filling (if necessary). This is the common case.
|
| SkPaint paint;
|
| context->setupPaintForFilling(&paint);
|
| paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
|
| - setupPaintForFont(&paint, context, face, size, textFlags);
|
| + data.setupPaint(&paint, context);
|
| +
|
| + // FIXME: Only needed to support the HFONT based paintSkiaText
|
| + // version where a new typeface is created from the HFONT.
|
| + // As such it can go away once the direct-GDI code path is removed.
|
| +#if ENABLE(GDI_FONTS_ON_WINDOWS)
|
| + paint.setTypeface(face);
|
| +#endif
|
|
|
| bool didFill = false;
|
|
|
| @@ -148,7 +125,10 @@ static void paintSkiaText(GraphicsContext* context, HFONT hfont,
|
| paint.reset();
|
| context->setupPaintForStroking(&paint);
|
| paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
|
| - setupPaintForFont(&paint, context, face, size, textFlags);
|
| + data.setupPaint(&paint, context);
|
| +#if ENABLE(GDI_FONTS_ON_WINDOWS)
|
| + paint.setTypeface(face);
|
| +#endif
|
|
|
| if (didFill) {
|
| // If there is a shadow and we filled above, there will already be
|
| @@ -178,23 +158,29 @@ void paintSkiaText(GraphicsContext* context,
|
| const SkPoint& origin,
|
| const SkRect& textRect)
|
| {
|
| - paintSkiaText(context, data.hfont(), data.typeface(), data.size(), data.paintTextFlags(),
|
| + paintSkiaText(context, data, data.typeface(), data.size(), data.paintTextFlags(),
|
| numGlyphs, glyphs, advances, offsets, origin, textRect);
|
| }
|
|
|
| void paintSkiaText(GraphicsContext* context,
|
| - HFONT hfont,
|
| - int numGlyphs,
|
| - const WORD* glyphs,
|
| - const int* advances,
|
| - const GOFFSET* offsets,
|
| - const SkPoint& origin,
|
| - const SkRect& textRect)
|
| + const FontPlatformData& data,
|
| + HFONT hfont,
|
| + int numGlyphs,
|
| + const WORD* glyphs,
|
| + const int* advances,
|
| + const GOFFSET* offsets,
|
| + const SkPoint& origin,
|
| + const SkRect& textRect)
|
| {
|
| int size;
|
| int paintTextFlags;
|
| +
|
| + // Ensure font load for printing, because PDF device needs it.
|
| + if (context->isPrintingDevice())
|
| + FontPlatformData::ensureFontLoaded(hfont);
|
| +
|
| RefPtr<SkTypeface> face = CreateTypefaceFromHFont(hfont, &size, &paintTextFlags);
|
| - paintSkiaText(context, hfont, face.get(), size, paintTextFlags, numGlyphs, glyphs, advances, offsets, origin, textRect);
|
| + paintSkiaText(context, data, face.get(), size, paintTextFlags, numGlyphs, glyphs, advances, offsets, origin, textRect);
|
| }
|
|
|
| } // namespace WebCore
|
|
|