Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Side by Side Diff: third_party/WebKit/Source/core/paint/TextPainter.cpp

Issue 2416993002: Introduce support for text-decoration-skip: ink (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/paint/TextPainter.h" 5 #include "core/paint/TextPainter.h"
6 6
7 #include "core/CSSPropertyNames.h" 7 #include "core/CSSPropertyNames.h"
8 #include "core/frame/Settings.h" 8 #include "core/frame/Settings.h"
9 #include "core/layout/LayoutObject.h" 9 #include "core/layout/LayoutObject.h"
10 #include "core/layout/LayoutTextCombine.h" 10 #include "core/layout/LayoutTextCombine.h"
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 textRunPaintInfo.cachedTextBlob = cachedTextBlob; 245 textRunPaintInfo.cachedTextBlob = cachedTextBlob;
246 paintInternalRun<Step>(textRunPaintInfo, startOffset, endOffset); 246 paintInternalRun<Step>(textRunPaintInfo, startOffset, endOffset);
247 } else { 247 } else {
248 if (endOffset > 0) 248 if (endOffset > 0)
249 paintInternalRun<Step>(textRunPaintInfo, 0, endOffset); 249 paintInternalRun<Step>(textRunPaintInfo, 0, endOffset);
250 if (startOffset < truncationPoint) 250 if (startOffset < truncationPoint)
251 paintInternalRun<Step>(textRunPaintInfo, startOffset, truncationPoint); 251 paintInternalRun<Step>(textRunPaintInfo, startOffset, truncationPoint);
252 } 252 }
253 } 253 }
254 254
255 void TextPainter::clipDecorationsStripe(float upper,
256 float stripeWidth,
257 float dilation) {
258 TextRunPaintInfo textRunPaintInfo(m_run);
259
260 if (!m_run.length())
261 return;
262
263 SkScalar lineBounds[] = {upper, upper + stripeWidth};
264 const int numIntervals = m_graphicsContext.getTextIntercepts(
265 m_font, textRunPaintInfo, lineBounds, nullptr);
266 SkScalar intervals[numIntervals];
267 m_graphicsContext.getTextIntercepts(m_font, textRunPaintInfo, lineBounds,
268 intervals);
269
270 for (int i = 0; i < numIntervals; i += 2) {
eae 2016/10/13 18:18:54 Do we want to assert that the number of intervals
drott 2016/10/13 18:39:29 Makes sense, adding an assert.
271 FloatPoint clipOrigin(m_textOrigin);
272 FloatRect clipRect(clipOrigin + FloatPoint(intervals[i], upper),
273 FloatSize(intervals[i + 1] - intervals[i], stripeWidth));
274 clipRect.inflateX(dilation);
275 clipRect = enclosingIntRect(clipRect);
276 m_graphicsContext.setFillColor(Color(127, 0, 0, 127));
eae 2016/10/13 18:18:54 Hard coded color? This is temporary, right?
drott 2016/10/13 18:39:29 Yep, the whole paintRect can go, and no color sett
277 FloatRect paintClipRect(clipRect);
278 paintClipRect.inflateX(clipRect.width() * -0.25);
eae 2016/10/13 18:18:54 Please add a comment explaining the 0.25 value.
279 // m_graphicsContext.fillRect(paintClipRect);
280 m_graphicsContext.clipOut(clipRect);
281 }
282 }
283
255 void TextPainter::paintEmphasisMarkForCombinedText() { 284 void TextPainter::paintEmphasisMarkForCombinedText() {
256 ASSERT(m_combinedText); 285 ASSERT(m_combinedText);
257 TextRun placeholderTextRun(&ideographicFullStopCharacter, 1); 286 TextRun placeholderTextRun(&ideographicFullStopCharacter, 1);
258 FloatPoint emphasisMarkTextOrigin(m_textBounds.x().toFloat(), 287 FloatPoint emphasisMarkTextOrigin(m_textBounds.x().toFloat(),
259 m_textBounds.y().toFloat() + 288 m_textBounds.y().toFloat() +
260 m_font.getFontMetrics().ascent() + 289 m_font.getFontMetrics().ascent() +
261 m_emphasisMarkOffset); 290 m_emphasisMarkOffset);
262 TextRunPaintInfo textRunPaintInfo(placeholderTextRun); 291 TextRunPaintInfo textRunPaintInfo(placeholderTextRun);
263 textRunPaintInfo.bounds = FloatRect(m_textBounds); 292 textRunPaintInfo.bounds = FloatRect(m_textBounds);
264 m_graphicsContext.concatCTM(rotation(m_textBounds, Clockwise)); 293 m_graphicsContext.concatCTM(rotation(m_textBounds, Clockwise));
265 m_graphicsContext.drawEmphasisMarks(m_combinedText->originalFont(), 294 m_graphicsContext.drawEmphasisMarks(m_combinedText->originalFont(),
266 textRunPaintInfo, m_emphasisMark, 295 textRunPaintInfo, m_emphasisMark,
267 emphasisMarkTextOrigin); 296 emphasisMarkTextOrigin);
268 m_graphicsContext.concatCTM(rotation(m_textBounds, Counterclockwise)); 297 m_graphicsContext.concatCTM(rotation(m_textBounds, Counterclockwise));
269 } 298 }
270 299
271 } // namespace blink 300 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698