| Differences between
and this patch
- a/Source/WebCore/rendering/TextDecorationPainter.cpp -4 / +5 lines
Lines 202-207 TextDecorationPainter::TextDecorationPainter(GraphicsContext& context, OptionSet a/Source/WebCore/rendering/TextDecorationPainter.cpp_sec1
202
    , m_shadowColorFilter(colorFilter)
202
    , m_shadowColorFilter(colorFilter)
203
    , m_textBox(textBox)
203
    , m_textBox(textBox)
204
    , m_font { font }
204
    , m_font { font }
205
    , m_deviceScaleFactor(textBox->renderer().document().deviceScaleFactor())
205
    , m_styles { styles ? *WTFMove(styles) : stylesForRenderer(textBox->renderer(), decorations, isFirstLine, PseudoId::None) }
206
    , m_styles { styles ? *WTFMove(styles) : stylesForRenderer(textBox->renderer(), decorations, isFirstLine, PseudoId::None) }
206
    , m_lineStyle { isFirstLine ? textBox->renderer().firstLineStyle() : textBox->renderer().style() }
207
    , m_lineStyle { isFirstLine ? textBox->renderer().firstLineStyle() : textBox->renderer().style() }
207
{
208
{
Lines 211-217 TextDecorationPainter::TextDecorationPainter(GraphicsContext& context, OptionSet a/Source/WebCore/rendering/TextDecorationPainter.cpp_sec2
211
void TextDecorationPainter::paintBackgroundDecorations(const TextRun& textRun, const FloatPoint& textOrigin, const FloatPoint& boxOrigin)
212
void TextDecorationPainter::paintBackgroundDecorations(const TextRun& textRun, const FloatPoint& textOrigin, const FloatPoint& boxOrigin)
212
{
213
{
213
    const auto& fontMetrics = m_lineStyle.metricsOfPrimaryFont();
214
    const auto& fontMetrics = m_lineStyle.metricsOfPrimaryFont();
214
    float textDecorationThickness = m_lineStyle.textDecorationThickness().resolve(m_lineStyle.computedFontSize(), fontMetrics);
215
    auto textDecorationThickness = ceilToDevicePixel(m_lineStyle.textDecorationThickness().resolve(m_lineStyle.computedFontSize(), fontMetrics), m_deviceScaleFactor);
215
    FloatPoint localOrigin = boxOrigin;
216
    FloatPoint localOrigin = boxOrigin;
216
217
217
    auto paintDecoration = [&] (TextDecorationLine decoration, TextDecorationStyle style, const Color& color, const FloatRect& rect) {
218
    auto paintDecoration = [&] (TextDecorationLine decoration, TextDecorationStyle style, const Color& color, const FloatRect& rect) {
Lines 297-303 void TextDecorationPainter::paintBackgroundDecorations(const TextRun& textRun, c a/Source/WebCore/rendering/TextDecorationPainter.cpp_sec3
297
        if (m_decorations.contains(TextDecorationLine::Overline)) {
298
        if (m_decorations.contains(TextDecorationLine::Overline)) {
298
            float wavyOffset = m_styles.overlineStyle == TextDecorationStyle::Wavy ? m_wavyOffset : 0;
299
            float wavyOffset = m_styles.overlineStyle == TextDecorationStyle::Wavy ? m_wavyOffset : 0;
299
            FloatRect rect(localOrigin, FloatSize(m_width, textDecorationThickness));
300
            FloatRect rect(localOrigin, FloatSize(m_width, textDecorationThickness));
300
            float autoTextDecorationThickness = TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics);
301
            float autoTextDecorationThickness = ceilToDevicePixel(TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics), m_deviceScaleFactor);
301
            rect.move(0, autoTextDecorationThickness - textDecorationThickness - wavyOffset);
302
            rect.move(0, autoTextDecorationThickness - textDecorationThickness - wavyOffset);
302
            paintDecoration(TextDecorationLine::Overline, m_styles.overlineStyle, m_styles.overlineColor, rect);
303
            paintDecoration(TextDecorationLine::Overline, m_styles.overlineStyle, m_styles.overlineColor, rect);
303
        }
304
        }
Lines 319-325 void TextDecorationPainter::paintForegroundDecorations(const FloatPoint& boxOrig a/Source/WebCore/rendering/TextDecorationPainter.cpp_sec4
319
    if (!m_decorations.contains(TextDecorationLine::LineThrough))
320
    if (!m_decorations.contains(TextDecorationLine::LineThrough))
320
        return;
321
        return;
321
322
322
    float textDecorationThickness = m_lineStyle.textDecorationThickness().resolve(m_lineStyle.computedFontSize(), m_lineStyle.metricsOfPrimaryFont());
323
    auto textDecorationThickness = ceilToDevicePixel(m_lineStyle.textDecorationThickness().resolve(m_lineStyle.computedFontSize(), m_lineStyle.metricsOfPrimaryFont()), m_deviceScaleFactor);
323
    paintLineThrough(m_styles.linethroughColor, textDecorationThickness, boxOrigin);
324
    paintLineThrough(m_styles.linethroughColor, textDecorationThickness, boxOrigin);
324
}
325
}
325
326
Lines 327-333 void TextDecorationPainter::paintLineThrough(const Color& color, float thickness a/Source/WebCore/rendering/TextDecorationPainter.cpp_sec5
327
{
328
{
328
    const auto& fontMetrics = m_lineStyle.metricsOfPrimaryFont();
329
    const auto& fontMetrics = m_lineStyle.metricsOfPrimaryFont();
329
    FloatRect rect(localOrigin, FloatSize(m_width, thickness));
330
    FloatRect rect(localOrigin, FloatSize(m_width, thickness));
330
    float autoTextDecorationThickness = TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics);
331
    auto autoTextDecorationThickness = ceilToDevicePixel(TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics), m_deviceScaleFactor);
331
    auto center = 2 * fontMetrics.floatAscent() / 3 + autoTextDecorationThickness / 2;
332
    auto center = 2 * fontMetrics.floatAscent() / 3 + autoTextDecorationThickness / 2;
332
    rect.move(0, center - thickness / 2);
333
    rect.move(0, center - thickness / 2);
333
334
- a/Source/WebCore/rendering/TextDecorationPainter.h -2 / +3 lines
Lines 69-83 private: a/Source/WebCore/rendering/TextDecorationPainter.h_sec1
69
69
70
    GraphicsContext& m_context;
70
    GraphicsContext& m_context;
71
    OptionSet<TextDecorationLine> m_decorations;
71
    OptionSet<TextDecorationLine> m_decorations;
72
    float m_wavyOffset;
72
    float m_wavyOffset { 0 };
73
    float m_width { 0 };
73
    float m_width { 0 };
74
    FloatPoint m_boxOrigin;
74
    FloatPoint m_boxOrigin;
75
    bool m_isPrinting;
75
    bool m_isPrinting { false };
76
    bool m_isHorizontal { true };
76
    bool m_isHorizontal { true };
77
    const ShadowData* m_shadow { nullptr };
77
    const ShadowData* m_shadow { nullptr };
78
    const FilterOperations* m_shadowColorFilter { nullptr };
78
    const FilterOperations* m_shadowColorFilter { nullptr };
79
    InlineIterator::TextBoxIterator m_textBox;
79
    InlineIterator::TextBoxIterator m_textBox;
80
    const FontCascade& m_font;
80
    const FontCascade& m_font;
81
    float m_deviceScaleFactor { 0 };
81
82
82
    Styles m_styles;
83
    Styles m_styles;
83
    const RenderStyle& m_lineStyle;
84
    const RenderStyle& m_lineStyle;

Return to Bug 243611