2009-02-13 Scott Violet <sky@google.com>
authordglazkov@chromium.org <dglazkov@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Feb 2009 19:04:03 +0000 (19:04 +0000)
committerdglazkov@chromium.org <dglazkov@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 13 Feb 2009 19:04:03 +0000 (19:04 +0000)
        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=23934
        Skia platform doesn't render text decoration shadows.

        Makes Skia render text decoration shadows correctly. We weren't
        preparing the SkPaint correctly and didn't have a couple of checks
        CG has. Additionally makes the fillColor/strokeColor methods
        consistent.

        This behavior is covered by existing layout tests (see bug for list).

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::effectiveFillColor):
        (PlatformContextSkia::effectiveStrokeColor):
        * platform/graphics/skia/PlatformContextSkia.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@40982 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/platform/graphics/chromium/FontChromiumWin.cpp
WebCore/platform/graphics/skia/GraphicsContextSkia.cpp
WebCore/platform/graphics/skia/PlatformContextSkia.cpp
WebCore/platform/graphics/skia/PlatformContextSkia.h

index 48d686dcfc72dc8675e19451355d02e8fb8a2a2f..0f35ce952940f32812d41e335e4fa933fe094781 100644 (file)
@@ -1,3 +1,27 @@
+2009-02-13  Scott Violet  <sky@google.com>
+
+        Reviewed by Eric Seidel.
+
+        https://bugs.webkit.org/show_bug.cgi?id=23934
+        Skia platform doesn't render text decoration shadows.
+
+        Makes Skia render text decoration shadows correctly. We weren't
+        preparing the SkPaint correctly and didn't have a couple of checks
+        CG has. Additionally makes the fillColor/strokeColor methods
+        consistent.
+
+        This behavior is covered by existing layout tests (see bug for list).
+
+        * platform/graphics/chromium/FontChromiumWin.cpp:
+        (WebCore::Font::drawGlyphs):
+        (WebCore::Font::drawComplexText):
+        * platform/graphics/skia/GraphicsContextSkia.cpp:
+        (WebCore::GraphicsContext::drawLineForText):
+        * platform/graphics/skia/PlatformContextSkia.cpp:
+        (PlatformContextSkia::effectiveFillColor):
+        (PlatformContextSkia::effectiveStrokeColor):
+        * platform/graphics/skia/PlatformContextSkia.h:
+
 2009-02-12  Darin Fisher  <darin@chromium.org>
 
         Reviewed by Eric Seidel.
index 50b4af7f4fc823d7c8a0c1917473872160ffe370..d5626a44b56ddcd1acbd0ee8fb931469991139c9 100644 (file)
@@ -75,7 +75,7 @@ void Font::drawGlyphs(GraphicsContext* graphicsContext,
     // Default size for the buffer. It should be enough for most of cases.
     const int kDefaultBufferLength = 256;
 
-    SkColor color = context->fillColor();
+    SkColor color = context->effectiveFillColor();
     unsigned char alpha = SkColorGetA(color);
     // Skip 100% transparent text; no need to draw anything.
     if (!alpha && context->getStrokeStyle() == NoStroke)
@@ -183,7 +183,7 @@ void Font::drawComplexText(GraphicsContext* graphicsContext,
     PlatformGraphicsContext* context = graphicsContext->platformContext();
     UniscribeHelperTextRun state(run, *this);
 
-    SkColor color = context->fillColor();
+    SkColor color = context->effectiveFillColor();
     unsigned char alpha = SkColorGetA(color);
     // Skip 100% transparent text; no need to draw anything.
     if (!alpha)
index d3864e37373b11cee2f6e63adeb4593a54fcca5a..b5987e9bf816072cd4eb557c92cd6908c074d1d6 100644 (file)
@@ -647,6 +647,9 @@ void GraphicsContext::drawLineForText(const IntPoint& pt,
     if (paintingDisabled())
         return;
 
+    if (width <= 0)
+        return;
+
     int thickness = SkMax32(static_cast<int>(strokeThickness()), 1);
     SkRect r;
     r.fLeft = SkIntToScalar(pt.x());
@@ -655,7 +658,9 @@ void GraphicsContext::drawLineForText(const IntPoint& pt,
     r.fBottom = r.fTop + SkIntToScalar(thickness);
 
     SkPaint paint;
-    paint.setColor(strokeColor().rgb());
+    platformContext()->setupPaintForFilling(&paint);
+    // Text lines are drawn using the stroke color.
+    paint.setColor(platformContext()->effectiveStrokeColor());
     platformContext()->canvas()->drawRect(r, paint);
 }
 
index 73256a22d3c7448168a2e32390d66d50d1e8fae6..54d6f379e6cb757969b092498dfd5ec2e6726ab7 100644 (file)
@@ -451,9 +451,14 @@ void PlatformContextSkia::setUseAntialiasing(bool enable)
     m_state->m_useAntialiasing = enable;
 }
 
-SkColor PlatformContextSkia::fillColor() const
+SkColor PlatformContextSkia::effectiveFillColor() const
 {
-    return m_state->m_fillColor;
+    return m_state->applyAlpha(m_state->m_fillColor);
+}
+
+SkColor PlatformContextSkia::effectiveStrokeColor() const
+{
+    return m_state->applyAlpha(m_state->m_strokeColor);
 }
 
 void PlatformContextSkia::beginPath()
index 8e3693487132f90c6628693b82fb3f7334d400ef..23d1629368781fcee3f1c31f15b83ffa9e2aa7f6 100644 (file)
@@ -137,7 +137,13 @@ public:
     void addPath(const SkPath&);
     const SkPath* currentPath() const { return &m_path; }
 
-    SkColor fillColor() const;
+    // Returns the fill color. The returned color has it's alpha adjusted
+    // by the current alpha.
+    SkColor effectiveFillColor() const;
+
+    // Returns the stroke color. The returned color has it's alpha adjusted
+    // by the current alpha.
+    SkColor effectiveStrokeColor() const;
 
     skia::PlatformCanvas* canvas() { return m_canvas; }