Text-shadow with (0, 0) offset and radius = 0 is ugly
[WebKit-https.git] / Source / WebCore / rendering / TextPainter.cpp
index af34257ae0a31efff9c91e07fcc3190769eb6192..78e73e196ceae7ee679e3ac7ef39bdd3c52917d0 100644 (file)
@@ -60,6 +60,13 @@ static void drawTextOrEmphasisMarks(GraphicsContext& context, const Font& font,
         context.drawEmphasisMarks(font, textRun, emphasisMark, point + IntSize(0, emphasisMarkOffset), from, to);
 }
 
+static bool isEmptyShadow(const ShadowData* shadowPtr)
+{
+    if (!shadowPtr)
+        return true;
+    return shadow->location() == IntPoint() && !shadow->radius();
+}
+
 static void paintTextWithShadows(GraphicsContext* context, const Font& font, const TextRun& textRun, const AtomicString& emphasisMark,
     int emphasisMarkOffset, int startOffset, int endOffset, int truncationPoint, const FloatPoint& textOrigin, const FloatRect& boxRect,
     const ShadowData* shadow, bool stroked, bool horizontal)
@@ -72,7 +79,8 @@ static void paintTextWithShadows(GraphicsContext* context, const Font& font, con
 
     do {
         IntSize extraOffset;
-        if (shadow)
+        bool shadowIsEmpty = isEmptyShadow(shadow);
+        if (!shadowIsEmpty)
             extraOffset = roundedIntSize(InlineTextBox::applyShadowToGraphicsContext(context, shadow, boxRect, stroked, opaque, horizontal));
         else if (!opaque)
             context->setFillColor(fillColor, fillColorSpace);
@@ -91,7 +99,7 @@ static void paintTextWithShadows(GraphicsContext* context, const Font& font, con
 
         if (shadow->next() || stroked || !opaque)
             context->restore();
-        else
+        else if (!shadowIsEmpty)
             context->clearShadow();
 
         shadow = shadow->next();