|
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 |
|