| Index: Source/core/rendering/InlineTextBox.cpp
|
| diff --git a/Source/core/rendering/InlineTextBox.cpp b/Source/core/rendering/InlineTextBox.cpp
|
| index 29f3200b70f10f7f0f6ca246a4c3b1a49dea286d..7b55b5fc55c662ae9ab3a7e9b769ff4178c5d5a2 100644
|
| --- a/Source/core/rendering/InlineTextBox.cpp
|
| +++ b/Source/core/rendering/InlineTextBox.cpp
|
| @@ -984,7 +984,7 @@ static void adjustStepToDecorationLength(float& step, float& controlPointDistanc
|
| * |-----------|
|
| * step
|
| */
|
| -static void strokeWavyTextDecoration(GraphicsContext* context, FloatPoint& p1, FloatPoint& p2, float strokeThickness)
|
| +static void strokeWavyTextDecoration(GraphicsContext* context, FloatPoint p1, FloatPoint p2, float strokeThickness)
|
| {
|
| context->adjustLineToPixelBoundaries(p1, p2, strokeThickness, context->strokeStyle());
|
|
|
| @@ -1071,6 +1071,28 @@ static bool shouldSetDecorationAntialias(TextDecorationStyle underline, TextDeco
|
| return shouldSetDecorationAntialias(underline) || shouldSetDecorationAntialias(overline) || shouldSetDecorationAntialias(linethrough);
|
| }
|
|
|
| +static void paintAppliedDecoration(GraphicsContext* context, FloatPoint start, float width, float doubleOffset, int wavyOffsetFactor,
|
| + RenderObject::AppliedTextDecoration decoration, float thickness, bool antialiasDecoration, bool isPrinting)
|
| +{
|
| + context->setStrokeStyle(textDecorationStyleToStrokeStyle(decoration.style));
|
| + context->setStrokeColor(decoration.color);
|
| +
|
| + switch (decoration.style) {
|
| + case TextDecorationStyleWavy:
|
| + strokeWavyTextDecoration(context, start + FloatPoint(0, doubleOffset * wavyOffsetFactor), start + FloatPoint(width, doubleOffset * wavyOffsetFactor), thickness);
|
| + break;
|
| + case TextDecorationStyleDotted:
|
| + case TextDecorationStyleDashed:
|
| + context->setShouldAntialias(antialiasDecoration);
|
| + // Fall through
|
| + default:
|
| + context->drawLineForText(start, width, isPrinting);
|
| +
|
| + if (decoration.style == TextDecorationStyleDouble)
|
| + context->drawLineForText(start + FloatPoint(0, doubleOffset), width, isPrinting);
|
| + }
|
| +}
|
| +
|
| void InlineTextBox::paintDecoration(GraphicsContext* context, const FloatPoint& boxOrigin, TextDecoration deco, const ShadowList* shadowList)
|
| {
|
| GraphicsContextStateSaver stateSaver(*context);
|
| @@ -1153,68 +1175,15 @@ void InlineTextBox::paintDecoration(GraphicsContext* context, const FloatPoint&
|
| float doubleOffset = textDecorationThickness + 1.f;
|
|
|
| if (deco & TextDecorationUnderline) {
|
| - context->setStrokeStyle(textDecorationStyleToStrokeStyle(underline.style));
|
| - context->setStrokeColor(underline.color);
|
| const int underlineOffset = computeUnderlineOffset(styleToUse->textUnderlinePosition(), styleToUse->fontMetrics(), this, textDecorationThickness);
|
| - switch (underline.style) {
|
| - case TextDecorationStyleWavy: {
|
| - FloatPoint start(localOrigin.x(), localOrigin.y() + underlineOffset + doubleOffset);
|
| - FloatPoint end(localOrigin.x() + width, localOrigin.y() + underlineOffset + doubleOffset);
|
| - strokeWavyTextDecoration(context, start, end, textDecorationThickness);
|
| - break;
|
| - }
|
| - case TextDecorationStyleDotted:
|
| - case TextDecorationStyleDashed:
|
| - context->setShouldAntialias(antialiasDecoration);
|
| - // Fall through
|
| - case TextDecorationStyleDouble:
|
| - context->drawLineForText(FloatPoint(localOrigin.x(), localOrigin.y() + underlineOffset + doubleOffset), width, isPrinting);
|
| - // Fall through
|
| - default:
|
| - context->drawLineForText(FloatPoint(localOrigin.x(), localOrigin.y() + underlineOffset), width, isPrinting);
|
| - }
|
| + paintAppliedDecoration(context, localOrigin + FloatPoint(0, underlineOffset), width, doubleOffset, 1, underline, textDecorationThickness, antialiasDecoration, isPrinting);
|
| }
|
| if (deco & TextDecorationOverline) {
|
| - context->setStrokeStyle(textDecorationStyleToStrokeStyle(overline.style));
|
| - context->setStrokeColor(overline.color);
|
| - switch (overline.style) {
|
| - case TextDecorationStyleWavy: {
|
| - FloatPoint start(localOrigin.x(), localOrigin.y() - doubleOffset);
|
| - FloatPoint end(localOrigin.x() + width, localOrigin.y() - doubleOffset);
|
| - strokeWavyTextDecoration(context, start, end, textDecorationThickness);
|
| - break;
|
| - }
|
| - case TextDecorationStyleDotted:
|
| - case TextDecorationStyleDashed:
|
| - context->setShouldAntialias(antialiasDecoration);
|
| - // Fall through
|
| - case TextDecorationStyleDouble:
|
| - context->drawLineForText(FloatPoint(localOrigin.x(), localOrigin.y() - doubleOffset), width, isPrinting);
|
| - // Fall through
|
| - default:
|
| - context->drawLineForText(localOrigin, width, isPrinting);
|
| - }
|
| + paintAppliedDecoration(context, localOrigin, width, -doubleOffset, 1, overline, textDecorationThickness, antialiasDecoration, isPrinting);
|
| }
|
| if (deco & TextDecorationLineThrough) {
|
| - context->setStrokeStyle(textDecorationStyleToStrokeStyle(linethrough.style));
|
| - context->setStrokeColor(linethrough.color);
|
| - switch (linethrough.style) {
|
| - case TextDecorationStyleWavy: {
|
| - FloatPoint start(localOrigin.x(), localOrigin.y() + 2 * baseline / 3);
|
| - FloatPoint end(localOrigin.x() + width, localOrigin.y() + 2 * baseline / 3);
|
| - strokeWavyTextDecoration(context, start, end, textDecorationThickness);
|
| - break;
|
| - }
|
| - case TextDecorationStyleDotted:
|
| - case TextDecorationStyleDashed:
|
| - context->setShouldAntialias(antialiasDecoration);
|
| - // Fall through
|
| - case TextDecorationStyleDouble:
|
| - context->drawLineForText(FloatPoint(localOrigin.x(), localOrigin.y() + doubleOffset + 2 * baseline / 3), width, isPrinting);
|
| - // Fall through
|
| - default:
|
| - context->drawLineForText(FloatPoint(localOrigin.x(), localOrigin.y() + 2 * baseline / 3), width, isPrinting);
|
| - }
|
| + const float lineThroughOffset = 2 * baseline / 3;
|
| + paintAppliedDecoration(context, localOrigin + FloatPoint(0, lineThroughOffset), width, doubleOffset, 0, linethrough, textDecorationThickness, antialiasDecoration, isPrinting);
|
| }
|
| }
|
| }
|
|
|