Title: [95097] trunk/Source/WebCore
Revision
95097
Author
r...@google.com
Date
2011-09-14 10:04:12 -0700 (Wed, 14 Sep 2011)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (95096 => 95097)


--- trunk/Source/WebCore/ChangeLog	2011-09-14 16:45:23 UTC (rev 95096)
+++ trunk/Source/WebCore/ChangeLog	2011-09-14 17:04:12 UTC (rev 95097)
@@ -1,3 +1,16 @@
+2011-09-14  Mike Reed  <r...@google.com>
+
+        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):
+
 2011-09-13  David Hyatt  <hy...@apple.com>
 
         https://bugs.webkit.org/show_bug.cgi?id=68050

Modified: trunk/Source/WebCore/platform/graphics/skia/SkiaFontWin.cpp (95096 => 95097)


--- trunk/Source/WebCore/platform/graphics/skia/SkiaFontWin.cpp	2011-09-14 16:45:23 UTC (rev 95096)
+++ trunk/Source/WebCore/platform/graphics/skia/SkiaFontWin.cpp	2011-09-14 17:04:12 UTC (rev 95097)
@@ -99,6 +99,29 @@
            || skiaContext->isDrawingToImageBuffer();
 }
 
+// Lookup the current system settings for font smoothing.
+// We cache these values for performance, but if the browser has away to be
+// notified when these change, we could re-query them at that time.
+static uint32_t getDefaultGDITextFlags()
+{
+    static bool gInited;
+    static uint32_t gFlags;
+    if (!gInited) {
+        BOOL enabled;
+        if (SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, &enabled, 0) && enabled) {
+            gFlags |= SkPaint::kAntiAlias_Flag;
+
+            UINT smoothType;
+            if (SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &smoothType, 0)) {
+                if (FE_FONTSMOOTHINGCLEARTYPE == smoothType)
+                    gFlags |= SkPaint::kLCDRenderText_Flag;
+            }
+        }
+        gInited = true;
+    }
+    return gFlags;
+}
+
 static void setupPaintForFont(HFONT hfont, SkPaint* paint, PlatformContextSkia* pcs)
 {
     //  FIXME:
@@ -118,24 +141,30 @@
     SkSafeUnref(face);
 
     uint32_t flags = paint->getFlags();
-    // our defaults
-    flags |= SkPaint::kAntiAlias_Flag;
-    if (disableTextLCD(pcs))
-        flags &= ~SkPaint::kLCDRenderText_Flag;
-    else
-        flags |= SkPaint::kLCDRenderText_Flag;
+    // clear our flags initially, and then selectively set them
+    // based on the LOGFONT quality
+    flags &= SkPaint::kAntiAlias_Flag;
+    flags &= SkPaint::kLCDRenderText_Flag;
 
     switch (info.lfQuality) {
     case NONANTIALIASED_QUALITY:
-        flags &= ~SkPaint::kAntiAlias_Flag;
-        flags &= ~SkPaint::kLCDRenderText_Flag;
         break;
     case ANTIALIASED_QUALITY:
-        flags &= ~SkPaint::kLCDRenderText_Flag;
+        flags |= SkPaint::kAntiAlias_Flag;
         break;
+    case CLEARTYPE_QUALITY:
+        flags |= SkPaint::kAntiAlias_Flag;
+        flags |= SkPaint::kLCDRenderText_Flag;
+        break;
     default:
+        flags |= getDefaultGDITextFlags();
         break;
     }
+
+    // do this check after our switch on lfQuality
+    if (disableTextLCD(pcs))
+        flags &= ~SkPaint::kLCDRenderText_Flag;
+
     paint->setFlags(flags);
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to