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

Unified Diff: third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp

Issue 2599483002: Extract helper function. (Closed)
Patch Set: Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
diff --git a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
index 38a3dfd9277987a42d7a03d52558a98d161e7b9e..cb57b3186901f06f3867a0a00d08deba963baf2a 100644
--- a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
@@ -22,6 +22,20 @@
namespace blink {
+namespace {
+
+std::pair<unsigned, unsigned> GetMarkerPaintOffsets(
+ const DocumentMarker& marker,
+ const InlineTextBox& textBox) {
+ const unsigned startOffset = marker.startOffset() > textBox.start()
chrishtr 2016/12/23 20:57:19 Why not just use std::max like the code used to?
Andrey Kraynov 2016/12/23 22:27:47 But then it will look like |std::max(someUnsignedI
Andrey Kraynov 2016/12/23 22:31:00 Greater then or equal to 0, of course.
+ ? marker.startOffset() - textBox.start()
+ : 0U;
+ const unsigned endOffset =
+ std::min(marker.endOffset() - textBox.start(), textBox.len());
+ return std::make_pair(startOffset, endOffset);
+}
+}
+
static int computeUnderlineOffset(const TextUnderlinePosition underlinePosition,
const FontMetrics& fontMetrics,
const InlineTextBox* inlineTextBox,
@@ -736,11 +750,12 @@ void InlineTextBoxPainter::paintDocumentMarkers(
// text has been drawn. Note end() points at the last char, not one past it
// like endOffset and ranges do.
for (; markerIt != markers.end(); ++markerIt) {
- DocumentMarker* marker = *markerIt;
+ DCHECK(*markerIt);
+ const DocumentMarker& marker = **markerIt;
// Paint either the background markers or the foreground markers, but not
// both.
- switch (marker->type()) {
+ switch (marker.type()) {
case DocumentMarker::Grammar:
case DocumentMarker::Spelling:
if (markerPaintPhase == DocumentMarkerPaintPhase::Background)
@@ -753,19 +768,19 @@ void InlineTextBoxPainter::paintDocumentMarkers(
continue;
}
- if (marker->endOffset() <= m_inlineTextBox.start()) {
+ if (marker.endOffset() <= m_inlineTextBox.start()) {
// marker is completely before this run. This might be a marker that sits
// before the first run we draw, or markers that were within runs we
// skipped due to truncation.
continue;
}
- if (marker->startOffset() > m_inlineTextBox.end()) {
+ if (marker.startOffset() > m_inlineTextBox.end()) {
// marker is completely after this run, bail. A later run will paint it.
break;
}
// marker intersects this run. Paint it.
- switch (marker->type()) {
+ switch (marker.type()) {
case DocumentMarker::Spelling:
m_inlineTextBox.paintDocumentMarker(paintInfo.context, boxOrigin,
marker, style, font, false);
@@ -783,10 +798,9 @@ void InlineTextBoxPainter::paintDocumentMarkers(
marker, style, font);
break;
case DocumentMarker::Composition: {
- CompositionUnderline underline(
- marker->startOffset(), marker->endOffset(),
- marker->underlineColor(), marker->thick(),
- marker->backgroundColor());
+ CompositionUnderline underline(marker.startOffset(), marker.endOffset(),
+ marker.underlineColor(), marker.thick(),
+ marker.backgroundColor());
if (markerPaintPhase == DocumentMarkerPaintPhase::Background)
paintSingleCompositionBackgroundRun(
paintInfo.context, boxOrigin, style, font,
@@ -816,7 +830,7 @@ static GraphicsContext::DocumentMarkerLineStyle lineStyleForMarkerType(
void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext& context,
const LayoutPoint& boxOrigin,
- DocumentMarker* marker,
+ const DocumentMarker& marker,
const ComputedStyle& style,
const Font& font,
bool grammar) {
@@ -832,20 +846,18 @@ void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext& context,
// Determine whether we need to measure text
bool markerSpansWholeBox = true;
- if (m_inlineTextBox.start() <= marker->startOffset())
+ if (m_inlineTextBox.start() <= marker.startOffset())
markerSpansWholeBox = false;
if ((m_inlineTextBox.end() + 1) !=
- marker->endOffset()) // end points at the last char, not past it
+ marker.endOffset()) // end points at the last char, not past it
markerSpansWholeBox = false;
if (m_inlineTextBox.truncation() != cNoTruncation)
markerSpansWholeBox = false;
if (!markerSpansWholeBox || grammar) {
- int startPosition =
- std::max<int>(marker->startOffset() - m_inlineTextBox.start(), 0);
- int endPosition = std::min<int>(
- marker->endOffset() - static_cast<int>(m_inlineTextBox.start()),
- m_inlineTextBox.len());
+ int startPosition, endPosition;
+ std::tie(startPosition, endPosition) =
+ GetMarkerPaintOffsets(marker, m_inlineTextBox);
if (m_inlineTextBox.truncation() != cNoTruncation)
endPosition = std::min<int>(endPosition, m_inlineTextBox.truncation());
@@ -900,7 +912,7 @@ void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext& context,
context.drawLineForDocumentMarker(
FloatPoint((boxOrigin.x() + start).toFloat(),
(boxOrigin.y() + underlineOffset).toFloat()),
- width.toFloat(), lineStyleForMarkerType(marker->type()));
+ width.toFloat(), lineStyleForMarkerType(marker.type()));
}
template <InlineTextBoxPainter::PaintOptions options>
@@ -1206,22 +1218,17 @@ void InlineTextBoxPainter::paintCompositionUnderline(
void InlineTextBoxPainter::paintTextMatchMarkerForeground(
const PaintInfo& paintInfo,
const LayoutPoint& boxOrigin,
- DocumentMarker* marker,
+ const DocumentMarker& marker,
const ComputedStyle& style,
const Font& font) {
if (!inlineLayoutObject().frame()->editor().markedTextMatchesAreHighlighted())
return;
- // TODO(ramya.v): Extract this into a helper function and share many copies of
- // this code.
- int sPos =
- std::max(marker->startOffset() - m_inlineTextBox.start(), (unsigned)0);
Andrey Kraynov 2016/12/21 17:43:18 This is obviously pointless call to std::max() fun
- int ePos = std::min(marker->endOffset() - m_inlineTextBox.start(),
- m_inlineTextBox.len());
+ const auto paintOffsets = GetMarkerPaintOffsets(marker, m_inlineTextBox);
TextRun run = m_inlineTextBox.constructTextRun(style);
Color textColor =
- LayoutTheme::theme().platformTextSearchColor(marker->activeMatch());
+ LayoutTheme::theme().platformTextSearchColor(marker.activeMatch());
if (style.visitedDependentColor(CSSPropertyColor) == textColor)
return;
@@ -1243,13 +1250,14 @@ void InlineTextBoxPainter::paintTextMatchMarkerForeground(
TextPainter textPainter(paintInfo.context, font, run, textOrigin, boxRect,
m_inlineTextBox.isHorizontal());
- textPainter.paint(sPos, ePos, m_inlineTextBox.len(), textStyle, 0);
+ textPainter.paint(paintOffsets.first, paintOffsets.second,
+ m_inlineTextBox.len(), textStyle, 0);
}
void InlineTextBoxPainter::paintTextMatchMarkerBackground(
const PaintInfo& paintInfo,
const LayoutPoint& boxOrigin,
- DocumentMarker* marker,
+ const DocumentMarker& marker,
const ComputedStyle& style,
const Font& font) {
if (!LineLayoutAPIShim::layoutObjectFrom(m_inlineTextBox.getLineLayoutItem())
@@ -1258,14 +1266,11 @@ void InlineTextBoxPainter::paintTextMatchMarkerBackground(
.markedTextMatchesAreHighlighted())
return;
- int sPos =
- std::max(marker->startOffset() - m_inlineTextBox.start(), (unsigned)0);
- int ePos = std::min(marker->endOffset() - m_inlineTextBox.start(),
- m_inlineTextBox.len());
+ const auto paintOffsets = GetMarkerPaintOffsets(marker, m_inlineTextBox);
TextRun run = m_inlineTextBox.constructTextRun(style);
Color color = LayoutTheme::theme().platformTextSearchHighlightColor(
- marker->activeMatch());
+ marker.activeMatch());
GraphicsContext& context = paintInfo.context;
GraphicsContextStateSaver stateSaver(context);
@@ -1273,7 +1278,8 @@ void InlineTextBoxPainter::paintTextMatchMarkerBackground(
m_inlineTextBox.logicalHeight()));
context.clip(FloatRect(boxRect));
context.drawHighlightForText(font, run, FloatPoint(boxOrigin),
- boxRect.height().toInt(), color, sPos, ePos);
+ boxRect.height().toInt(), color,
+ paintOffsets.first, paintOffsets.second);
}
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698