WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-243611-20220805152632.patch (text/plain), 5.47 KB, created by
alan
on 2022-08-05 15:26:33 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
alan
Created:
2022-08-05 15:26:33 PDT
Size:
5.47 KB
patch
obsolete
>From 8853784fa8e9f1d06a247c372e2b8aaaecd7b755 Mon Sep 17 00:00:00 2001 >From: Alan Bujtas <zalan@apple.com> >Date: Fri, 5 Aug 2022 15:22:26 -0700 >Subject: [PATCH] [Painting] Underline thickness should be aligned with device > pixels https://bugs.webkit.org/show_bug.cgi?id=243611 > >Reviewed by NOBODY (OOPS!). > >Ceil the underline thickness to the nearest device pixel. It ensures that we always paint at least a hairline thick underline when applicable (i.e. 0.1px -> 0.5px on a 2x display). > >* Source/WebCore/rendering/TextDecorationPainter.cpp: >(WebCore::TextDecorationPainter::paintBackgroundDecorations): >(WebCore::TextDecorationPainter::paintForegroundDecorations): >(WebCore::TextDecorationPainter::paintLineThrough): >* Source/WebCore/rendering/TextDecorationPainter.h: >--- > Source/WebCore/rendering/TextDecorationPainter.cpp | 9 +++++---- > Source/WebCore/rendering/TextDecorationPainter.h | 5 +++-- > 2 files changed, 8 insertions(+), 6 deletions(-) > >diff --git a/Source/WebCore/rendering/TextDecorationPainter.cpp b/Source/WebCore/rendering/TextDecorationPainter.cpp >index f3932e5b91f8..c57791369952 100644 >--- a/Source/WebCore/rendering/TextDecorationPainter.cpp >+++ b/Source/WebCore/rendering/TextDecorationPainter.cpp >@@ -202,6 +202,7 @@ TextDecorationPainter::TextDecorationPainter(GraphicsContext& context, OptionSet > , m_shadowColorFilter(colorFilter) > , m_textBox(textBox) > , m_font { font } >+ , m_deviceScaleFactor(textBox->renderer().document().deviceScaleFactor()) > , m_styles { styles ? *WTFMove(styles) : stylesForRenderer(textBox->renderer(), decorations, isFirstLine, PseudoId::None) } > , m_lineStyle { isFirstLine ? textBox->renderer().firstLineStyle() : textBox->renderer().style() } > { >@@ -211,7 +212,7 @@ TextDecorationPainter::TextDecorationPainter(GraphicsContext& context, OptionSet > void TextDecorationPainter::paintBackgroundDecorations(const TextRun& textRun, const FloatPoint& textOrigin, const FloatPoint& boxOrigin) > { > const auto& fontMetrics = m_lineStyle.metricsOfPrimaryFont(); >- float textDecorationThickness = m_lineStyle.textDecorationThickness().resolve(m_lineStyle.computedFontSize(), fontMetrics); >+ auto textDecorationThickness = ceilToDevicePixel(m_lineStyle.textDecorationThickness().resolve(m_lineStyle.computedFontSize(), fontMetrics), m_deviceScaleFactor); > FloatPoint localOrigin = boxOrigin; > > auto paintDecoration = [&] (TextDecorationLine decoration, TextDecorationStyle style, const Color& color, const FloatRect& rect) { >@@ -297,7 +298,7 @@ void TextDecorationPainter::paintBackgroundDecorations(const TextRun& textRun, c > if (m_decorations.contains(TextDecorationLine::Overline)) { > float wavyOffset = m_styles.overlineStyle == TextDecorationStyle::Wavy ? m_wavyOffset : 0; > FloatRect rect(localOrigin, FloatSize(m_width, textDecorationThickness)); >- float autoTextDecorationThickness = TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics); >+ float autoTextDecorationThickness = ceilToDevicePixel(TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics), m_deviceScaleFactor); > rect.move(0, autoTextDecorationThickness - textDecorationThickness - wavyOffset); > paintDecoration(TextDecorationLine::Overline, m_styles.overlineStyle, m_styles.overlineColor, rect); > } >@@ -319,7 +320,7 @@ void TextDecorationPainter::paintForegroundDecorations(const FloatPoint& boxOrig > if (!m_decorations.contains(TextDecorationLine::LineThrough)) > return; > >- float textDecorationThickness = m_lineStyle.textDecorationThickness().resolve(m_lineStyle.computedFontSize(), m_lineStyle.metricsOfPrimaryFont()); >+ auto textDecorationThickness = ceilToDevicePixel(m_lineStyle.textDecorationThickness().resolve(m_lineStyle.computedFontSize(), m_lineStyle.metricsOfPrimaryFont()), m_deviceScaleFactor); > paintLineThrough(m_styles.linethroughColor, textDecorationThickness, boxOrigin); > } > >@@ -327,7 +328,7 @@ void TextDecorationPainter::paintLineThrough(const Color& color, float thickness > { > const auto& fontMetrics = m_lineStyle.metricsOfPrimaryFont(); > FloatRect rect(localOrigin, FloatSize(m_width, thickness)); >- float autoTextDecorationThickness = TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics); >+ auto autoTextDecorationThickness = ceilToDevicePixel(TextDecorationThickness::createWithAuto().resolve(m_lineStyle.computedFontSize(), fontMetrics), m_deviceScaleFactor); > auto center = 2 * fontMetrics.floatAscent() / 3 + autoTextDecorationThickness / 2; > rect.move(0, center - thickness / 2); > >diff --git a/Source/WebCore/rendering/TextDecorationPainter.h b/Source/WebCore/rendering/TextDecorationPainter.h >index cc943b1bc716..4da2e46381a5 100644 >--- a/Source/WebCore/rendering/TextDecorationPainter.h >+++ b/Source/WebCore/rendering/TextDecorationPainter.h >@@ -69,15 +69,16 @@ private: > > GraphicsContext& m_context; > OptionSet<TextDecorationLine> m_decorations; >- float m_wavyOffset; >+ float m_wavyOffset { 0 }; > float m_width { 0 }; > FloatPoint m_boxOrigin; >- bool m_isPrinting; >+ bool m_isPrinting { false }; > bool m_isHorizontal { true }; > const ShadowData* m_shadow { nullptr }; > const FilterOperations* m_shadowColorFilter { nullptr }; > InlineIterator::TextBoxIterator m_textBox; > const FontCascade& m_font; >+ float m_deviceScaleFactor { 0 }; > > Styles m_styles; > const RenderStyle& m_lineStyle;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 243611
:
461432
|
461433
|
461444