Changeset 238838 in webkit


Ignore:
Timestamp:
Dec 3, 2018 7:54:49 PM (5 years ago)
Author:
mmaxfield@apple.com
Message:

Thick overlines and line-throughs grow in the wrong direction
https://bugs.webkit.org/show_bug.cgi?id=192264

Reviewed by Dean Jackson.

Source/WebCore:

Overlines should grow upward, and line-throughs should stay centered.

Test: fast/css3-text/css3-text-decoration/text-decoration-thicknes-overline-grow-direction.html

  • rendering/TextDecorationPainter.cpp:

(WebCore::TextDecorationPainter::paintTextDecoration):

  • style/InlineTextBoxStyle.cpp:

(WebCore::visualOverflowForDecorations):

LayoutTests:

I can't figure out a way to test the line-through, so this just tests the overline.

  • fast/css3-text/css3-text-decoration/text-decoration-thicknes-overline-grow-direction-expected.html: Added.
  • fast/css3-text/css3-text-decoration/text-decoration-thicknes-overline-grow-direction.html: Added.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r238830 r238838  
     12018-12-03  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Thick overlines and line-throughs grow in the wrong direction
     4        https://bugs.webkit.org/show_bug.cgi?id=192264
     5
     6        Reviewed by Dean Jackson.
     7
     8        I can't figure out a way to test the line-through, so this just tests the overline.
     9
     10        * fast/css3-text/css3-text-decoration/text-decoration-thicknes-overline-grow-direction-expected.html: Added.
     11        * fast/css3-text/css3-text-decoration/text-decoration-thicknes-overline-grow-direction.html: Added.
     12
    1132018-12-03  Ryan Haddad  <ryanhaddad@apple.com>
    214
  • trunk/Source/WebCore/ChangeLog

    r238837 r238838  
     12018-12-03  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Thick overlines and line-throughs grow in the wrong direction
     4        https://bugs.webkit.org/show_bug.cgi?id=192264
     5
     6        Reviewed by Dean Jackson.
     7
     8        Overlines should grow upward, and line-throughs should stay centered.
     9
     10        Test: fast/css3-text/css3-text-decoration/text-decoration-thicknes-overline-grow-direction.html
     11
     12        * rendering/TextDecorationPainter.cpp:
     13        (WebCore::TextDecorationPainter::paintTextDecoration):
     14        * style/InlineTextBoxStyle.cpp:
     15        (WebCore::visualOverflowForDecorations):
     16
    1172018-12-03  Simon Fraser  <simon.fraser@apple.com>
    218
  • trunk/Source/WebCore/rendering/TextDecorationPainter.cpp

    r238075 r238838  
    297297            float wavyOffset = m_styles.overlineStyle == TextDecorationStyle::Wavy ? m_wavyOffset : 0;
    298298            FloatRect rect(localOrigin, FloatSize(m_width, textDecorationThickness));
    299             rect.move(0, -wavyOffset);
     299            float autoTextDecorationThickness = TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics);
     300            rect.move(0, autoTextDecorationThickness - textDecorationThickness - wavyOffset);
    300301            paintDecoration(TextDecoration::Overline, m_styles.overlineStyle, m_styles.overlineColor, rect);
    301302        }
    302303        if (m_decorations.contains(TextDecoration::LineThrough)) {
    303304            FloatRect rect(localOrigin, FloatSize(m_width, textDecorationThickness));
    304             rect.move(0, 2 * fontMetrics.floatAscent() / 3);
     305            float autoTextDecorationThickness = TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics);
     306            auto center = 2 * fontMetrics.floatAscent() / 3 + autoTextDecorationThickness / 2;
     307            rect.move(0, center - textDecorationThickness / 2);
    305308            paintDecoration(TextDecoration::LineThrough, m_styles.linethroughStyle, m_styles.linethroughColor, rect);
    306309        }
  • trunk/Source/WebCore/style/InlineTextBoxStyle.cpp

    r238075 r238838  
    126126
    127127    // These metrics must match where underlines get drawn.
     128    // FIXME: Share the code in TextDecorationPainter::paintTextDecoration() so we can just query it for the painted geometry.
    128129    if (decoration & TextDecoration::Underline) {
    129130        // Compensate for the integral ceiling in GraphicsContext::computeLineBoundsAndAntialiasingModeForText()
     
    141142    }
    142143    if (decoration & TextDecoration::Overline) {
     144        FloatRect rect(FloatPoint(), FloatSize(1, strokeThickness));
     145        float autoTextDecorationThickness = TextDecorationThickness::createWithAuto().resolve(lineStyle.computedFontSize(), lineStyle.fontMetrics());
     146        rect.move(0, autoTextDecorationThickness - strokeThickness - wavyOffset);
    143147        if (decorationStyle == TextDecorationStyle::Wavy) {
    144             extendIntToFloat(overflowResult.bottom, -wavyOffset + wavyStrokeParameters.controlPointDistance + strokeThickness - height);
    145             extendIntToFloat(overflowResult.top, wavyOffset + wavyStrokeParameters.controlPointDistance + strokeThickness);
    146         } else {
    147             extendIntToFloat(overflowResult.bottom, strokeThickness - height);
    148             // top is untouched
     148            FloatBoxExtent wavyExpansion;
     149            wavyExpansion.setTop(wavyStrokeParameters.controlPointDistance);
     150            wavyExpansion.setBottom(wavyStrokeParameters.controlPointDistance);
     151            rect.expand(wavyExpansion);
    149152        }
     153        extendIntToFloat(overflowResult.top, -rect.y());
     154        extendIntToFloat(overflowResult.bottom, rect.maxY() - height);
    150155    }
    151156    if (decoration & TextDecoration::LineThrough) {
    152         float baseline = lineStyle.fontMetrics().floatAscent();
     157        FloatRect rect(FloatPoint(), FloatSize(1, strokeThickness));
     158        float autoTextDecorationThickness = TextDecorationThickness::createWithAuto().resolve(lineStyle.computedFontSize(), lineStyle.fontMetrics());
     159        auto center = 2 * lineStyle.fontMetrics().floatAscent() / 3 + autoTextDecorationThickness / 2;
     160        rect.move(0, center - strokeThickness / 2);
    153161        if (decorationStyle == TextDecorationStyle::Wavy) {
    154             extendIntToFloat(overflowResult.bottom, 2 * baseline / 3 + wavyStrokeParameters.controlPointDistance + strokeThickness - height);
    155             extendIntToFloat(overflowResult.top, -(2 * baseline / 3 - wavyStrokeParameters.controlPointDistance - strokeThickness));
    156         } else {
    157             extendIntToFloat(overflowResult.bottom, 2 * baseline / 3 + strokeThickness - height);
    158             extendIntToFloat(overflowResult.top, -(2 * baseline / 3));
     162            FloatBoxExtent wavyExpansion;
     163            wavyExpansion.setTop(wavyStrokeParameters.controlPointDistance);
     164            wavyExpansion.setBottom(wavyStrokeParameters.controlPointDistance);
     165            rect.expand(wavyExpansion);
    159166        }
     167        extendIntToFloat(overflowResult.top, -rect.y());
     168        extendIntToFloat(overflowResult.bottom, rect.maxY() - height);
    160169    }
    161170    return overflowResult;
Note: See TracChangeset for help on using the changeset viewer.