Changeset 95097 in webkit


Ignore:
Timestamp:
Sep 14, 2011 10:04:12 AM (13 years ago)
Author:
reed@google.com
Message:

query SystemParametersInfo for GDI font smoothing settings
https://bugs.webkit.org/show_bug.cgi?id=68080

Reviewed by Stephen White.

No new tests. fixes antialiasing issues based on User settings

  • platform/graphics/skia/SkiaFontWin.cpp:

(WebCore::getDefaultGDITextFlags):
(WebCore::setupPaintForFont):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r95096 r95097  
     12011-09-14  Mike Reed  <reed@google.com>
     2
     3        query SystemParametersInfo for GDI font smoothing settings
     4        https://bugs.webkit.org/show_bug.cgi?id=68080
     5
     6        Reviewed by Stephen White.
     7
     8        No new tests. fixes antialiasing issues based on User settings
     9
     10        * platform/graphics/skia/SkiaFontWin.cpp:
     11        (WebCore::getDefaultGDITextFlags):
     12        (WebCore::setupPaintForFont):
     13
    1142011-09-13  David Hyatt  <hyatt@apple.com>
    215
  • trunk/Source/WebCore/platform/graphics/skia/SkiaFontWin.cpp

    r94589 r95097  
    100100}
    101101
     102// Lookup the current system settings for font smoothing.
     103// We cache these values for performance, but if the browser has away to be
     104// notified when these change, we could re-query them at that time.
     105static uint32_t getDefaultGDITextFlags()
     106{
     107    static bool gInited;
     108    static uint32_t gFlags;
     109    if (!gInited) {
     110        BOOL enabled;
     111        if (SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, &enabled, 0) && enabled) {
     112            gFlags |= SkPaint::kAntiAlias_Flag;
     113
     114            UINT smoothType;
     115            if (SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &smoothType, 0)) {
     116                if (FE_FONTSMOOTHINGCLEARTYPE == smoothType)
     117                    gFlags |= SkPaint::kLCDRenderText_Flag;
     118            }
     119        }
     120        gInited = true;
     121    }
     122    return gFlags;
     123}
     124
    102125static void setupPaintForFont(HFONT hfont, SkPaint* paint, PlatformContextSkia* pcs)
    103126{
     
    119142
    120143    uint32_t flags = paint->getFlags();
    121     // our defaults
    122     flags |= SkPaint::kAntiAlias_Flag;
     144    // clear our flags initially, and then selectively set them
     145    // based on the LOGFONT quality
     146    flags &= SkPaint::kAntiAlias_Flag;
     147    flags &= SkPaint::kLCDRenderText_Flag;
     148
     149    switch (info.lfQuality) {
     150    case NONANTIALIASED_QUALITY:
     151        break;
     152    case ANTIALIASED_QUALITY:
     153        flags |= SkPaint::kAntiAlias_Flag;
     154        break;
     155    case CLEARTYPE_QUALITY:
     156        flags |= SkPaint::kAntiAlias_Flag;
     157        flags |= SkPaint::kLCDRenderText_Flag;
     158        break;
     159    default:
     160        flags |= getDefaultGDITextFlags();
     161        break;
     162    }
     163
     164    // do this check after our switch on lfQuality
    123165    if (disableTextLCD(pcs))
    124166        flags &= ~SkPaint::kLCDRenderText_Flag;
    125     else
    126         flags |= SkPaint::kLCDRenderText_Flag;
    127 
    128     switch (info.lfQuality) {
    129     case NONANTIALIASED_QUALITY:
    130         flags &= ~SkPaint::kAntiAlias_Flag;
    131         flags &= ~SkPaint::kLCDRenderText_Flag;
    132         break;
    133     case ANTIALIASED_QUALITY:
    134         flags &= ~SkPaint::kLCDRenderText_Flag;
    135         break;
    136     default:
    137         break;
    138     }
     167
    139168    paint->setFlags(flags);
    140169}
Note: See TracChangeset for help on using the changeset viewer.