| 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 1539441652f57ee2782bb63eda7347b136d3bed0..c38e8de6367fa8ced0c3b31eacfaa9566c72efcb 100644
|
| --- a/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp
|
| @@ -96,8 +96,9 @@ void InlineTextBoxPainter::paint(const PaintInfo& paintInfo,
|
| return;
|
| }
|
|
|
| - // The text clip phase already has a LayoutObjectDrawingRecorder. Text clips are initiated only in BoxPainter::paintFillLayer,
|
| - // which is already within a LayoutObjectDrawingRecorder.
|
| + // The text clip phase already has a LayoutObjectDrawingRecorder. Text clips
|
| + // are initiated only in BoxPainter::paintFillLayer, which is already within a
|
| + // LayoutObjectDrawingRecorder.
|
| Optional<DrawingRecorder> drawingRecorder;
|
| if (paintInfo.phase != PaintPhaseTextClip) {
|
| if (DrawingRecorder::useCachedDrawingIfPossible(
|
| @@ -188,8 +189,8 @@ void InlineTextBoxPainter::paint(const PaintInfo& paintInfo,
|
| LayoutPoint textOrigin(boxOrigin.x(),
|
| boxOrigin.y() + font.getFontMetrics().ascent());
|
|
|
| - // 1. Paint backgrounds behind text if needed. Examples of such backgrounds include selection
|
| - // and composition highlights.
|
| + // 1. Paint backgrounds behind text if needed. Examples of such backgrounds
|
| + // include selection and composition highlights.
|
| if (paintInfo.phase != PaintPhaseSelection &&
|
| paintInfo.phase != PaintPhaseTextClip && !isPrinting) {
|
| paintDocumentMarkers(paintInfo, boxOrigin, styleToUse, font,
|
| @@ -207,7 +208,8 @@ void InlineTextBoxPainter::paint(const PaintInfo& paintInfo,
|
| }
|
| }
|
|
|
| - // 2. Now paint the foreground, including text and decorations like underline/overline (in quirks mode only).
|
| + // 2. Now paint the foreground, including text and decorations like
|
| + // underline/overline (in quirks mode only).
|
| int selectionStart = 0;
|
| int selectionEnd = 0;
|
| if (paintSelectedTextOnly || paintSelectedTextSeparately)
|
| @@ -244,8 +246,9 @@ void InlineTextBoxPainter::paint(const PaintInfo& paintInfo,
|
| startOffset = selectionEnd;
|
| endOffset = selectionStart;
|
| }
|
| - // Where the text and its flow have opposite directions then our offset into the text given by |truncation| is at
|
| - // the start of the part that will be visible.
|
| + // Where the text and its flow have opposite directions then our offset into
|
| + // the text given by |truncation| is at the start of the part that will be
|
| + // visible.
|
| if (m_inlineTextBox.truncation() != cNoTruncation &&
|
| m_inlineTextBox.getLineLayoutItem()
|
| .containingBlock()
|
| @@ -402,12 +405,14 @@ void InlineTextBoxPainter::paintDocumentMarkers(
|
| m_inlineTextBox.getLineLayoutItem().node());
|
| DocumentMarkerVector::const_iterator markerIt = markers.begin();
|
|
|
| - // Give any document markers that touch this run a chance to draw before the text has been drawn.
|
| - // Note end() points at the last char, not one past it like endOffset and ranges do.
|
| + // Give any document markers that touch this run a chance to draw before the
|
| + // 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;
|
|
|
| - // Paint either the background markers or the foreground markers, but not both
|
| + // Paint either the background markers or the foreground markers, but not
|
| + // both.
|
| switch (marker->type()) {
|
| case DocumentMarker::Grammar:
|
| case DocumentMarker::Spelling:
|
| @@ -422,8 +427,9 @@ void InlineTextBoxPainter::paintDocumentMarkers(
|
| }
|
|
|
| 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.
|
| + // 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()) {
|
| @@ -537,12 +543,14 @@ void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext& context,
|
| width = LayoutUnit(markerRect.width());
|
| }
|
|
|
| - // IMPORTANT: The misspelling underline is not considered when calculating the text bounds, so we have to
|
| - // make sure to fit within those bounds. This means the top pixel(s) of the underline will overlap the
|
| - // bottom pixel(s) of the glyphs in smaller font sizes. The alternatives are to increase the line spacing (bad!!)
|
| - // or decrease the underline thickness. The overlap is actually the most useful, and matches what AppKit does.
|
| - // So, we generally place the underline at the bottom of the text, but in larger fonts that's not so good so
|
| - // we pin to two pixels under the baseline.
|
| + // IMPORTANT: The misspelling underline is not considered when calculating the
|
| + // text bounds, so we have to make sure to fit within those bounds. This
|
| + // means the top pixel(s) of the underline will overlap the bottom pixel(s) of
|
| + // the glyphs in smaller font sizes. The alternatives are to increase the
|
| + // line spacing (bad!!) or decrease the underline thickness. The overlap is
|
| + // actually the most useful, and matches what AppKit does. So, we generally
|
| + // place the underline at the bottom of the text, but in larger fonts that's
|
| + // not so good so we pin to two pixels under the baseline.
|
| int lineThickness = misspellingLineThickness;
|
| int baseline = m_inlineTextBox.getLineLayoutItem()
|
| .style(m_inlineTextBox.isFirstLineStyle())
|
| @@ -554,7 +562,8 @@ void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext& context,
|
| // Place the underline at the very bottom of the text in small/medium fonts.
|
| underlineOffset = (m_inlineTextBox.logicalHeight() - lineThickness).toInt();
|
| } else {
|
| - // In larger fonts, though, place the underline up near the baseline to prevent a big gap.
|
| + // In larger fonts, though, place the underline up near the baseline to
|
| + // prevent a big gap.
|
| underlineOffset = baseline + 2;
|
| }
|
| context.drawLineForDocumentMarker(
|
| @@ -580,8 +589,8 @@ void InlineTextBoxPainter::paintSelection(GraphicsContext& context,
|
| if (!c.alpha())
|
| return;
|
|
|
| - // If the text color ends up being the same as the selection background, invert the selection
|
| - // background.
|
| + // If the text color ends up being the same as the selection background,
|
| + // invert the selection background.
|
| if (textColor == c)
|
| c = Color(0xff - c.red(), 0xff - c.green(), 0xff - c.blue());
|
|
|
| @@ -615,7 +624,8 @@ void InlineTextBoxPainter::paintSelection(GraphicsContext& context,
|
|
|
| if (options == InlineTextBoxPainter::PaintOptions::CombinedText) {
|
| ASSERT(combinedText);
|
| - // We can't use the height of m_inlineTextBox because LayoutTextCombine's inlineTextBox is horizontal within vertical flow
|
| + // We can't use the height of m_inlineTextBox because LayoutTextCombine's
|
| + // inlineTextBox is horizontal within vertical flow
|
| combinedText->transformToInlineCoordinates(context, boxRect, true);
|
| context.drawHighlightForText(font, textRun, FloatPoint(boxRect.location()),
|
| boxRect.height().toInt(), c, sPos, ePos);
|
| @@ -636,7 +646,8 @@ void InlineTextBoxPainter::paintSelection(GraphicsContext& context,
|
| LayoutRect selectionRect = LayoutRect(
|
| font.selectionRectForText(textRun, localOrigin, selHeight, sPos, ePos));
|
| if (m_inlineTextBox.hasWrappedSelectionNewline()
|
| - // For line breaks, just painting a selection where the line break itself is rendered is sufficient.
|
| + // For line breaks, just painting a selection where the line break itself
|
| + // is rendered is sufficient.
|
| && !m_inlineTextBox.isLineBreak())
|
| expandToIncludeNewlineForSelection(selectionRect);
|
|
|
| @@ -676,8 +687,8 @@ static int computeUnderlineOffset(const TextUnderlinePosition underlinePosition,
|
| // Underline position of zero means draw underline on Baseline Position,
|
| // in Blink we need at least 1-pixel gap to adding following check.
|
| // Positive underline Position means underline should be drawn above baselin e
|
| - // and negative value means drawing below baseline, negating the value as in Blink
|
| - // downward Y-increases.
|
| + // and negative value means drawing below baseline, negating the value as in
|
| + // Blink downward Y-increases.
|
|
|
| if (fontMetrics.underlinePosition())
|
| gap = -fontMetrics.underlinePosition();
|
| @@ -690,7 +701,8 @@ static int computeUnderlineOffset(const TextUnderlinePosition underlinePosition,
|
| return fontMetrics.ascent() +
|
| gap; // Position underline near the alphabetic baseline.
|
| case TextUnderlinePositionUnder: {
|
| - // Position underline relative to the under edge of the lowest element's content box.
|
| + // Position underline relative to the under edge of the lowest element's
|
| + // content box.
|
| const LayoutUnit offset =
|
| inlineTextBox->root().maxLogicalTop() - inlineTextBox->logicalTop();
|
| if (offset > 0)
|
| @@ -760,9 +772,9 @@ static void adjustStepToDecorationLength(float& step,
|
| }
|
|
|
| /*
|
| - * Draw one cubic Bezier curve and repeat the same pattern long the the decoration's axis.
|
| - * The start point (p1), controlPoint1, controlPoint2 and end point (p2) of the Bezier curve
|
| - * form a diamond shape:
|
| + * Draw one cubic Bezier curve and repeat the same pattern long the the
|
| + * decoration's axis. The start point (p1), controlPoint1, controlPoint2 and
|
| + * end point (p2) of the Bezier curve form a diamond shape:
|
| *
|
| * step
|
| * |-----------|
|
| @@ -797,9 +809,10 @@ static void strokeWavyTextDecoration(GraphicsContext& context,
|
| path.moveTo(p1);
|
|
|
| // Distance between decoration's axis and Bezier curve's control points.
|
| - // The height of the curve is based on this distance. Use a minimum of 6 pixels distance since
|
| - // the actual curve passes approximately at half of that distance, that is 3 pixels.
|
| - // The minimum height of the curve is also approximately 3 pixels. Increases the curve's height
|
| + // The height of the curve is based on this distance. Use a minimum of 6
|
| + // pixels distance since the actual curve passes approximately at half of that
|
| + // distance, that is 3 pixels. The minimum height of the curve is also
|
| + // approximately 3 pixels. Increases the curve's height
|
| // as strockThickness increases to make the curve looks better.
|
| float controlPointDistance = 3 * std::max<float>(2, strokeThickness);
|
|
|
| @@ -942,10 +955,12 @@ void InlineTextBoxPainter::paintDecoration(const PaintInfo& paintInfo,
|
| textBoxLayoutObject.styleRef(m_inlineTextBox.isFirstLineStyle());
|
| float baseline = styleToUse.getFontMetrics().ascent();
|
|
|
| - // Set the thick of the line to be 10% (or something else ?)of the computed font size and not less than 1px.
|
| - // Using computedFontSize should take care of zoom as well.
|
| + // Set the thick of the line to be 10% (or something else ?)of the computed
|
| + // font size and not less than 1px. Using computedFontSize should take care
|
| + // of zoom as well.
|
|
|
| - // Update Underline thickness, in case we have Faulty Font Metrics calculating underline thickness by old method.
|
| + // Update Underline thickness, in case we have Faulty Font Metrics calculating
|
| + // underline thickness by old method.
|
| float textDecorationThickness =
|
| styleToUse.getFontMetrics().underlineThickness();
|
| int fontHeightInt = (int)(styleToUse.getFontMetrics().floatHeight() + 0.5);
|
| @@ -1026,16 +1041,17 @@ void InlineTextBoxPainter::paintCompositionUnderline(
|
| paintFrom, paintLength, LayoutUnit(m_inlineTextBox.textPos() + start),
|
| flowIsLTR ? LTR : RTL, m_inlineTextBox.isFirstLineStyle());
|
| }
|
| - // In RTL mode, start and width are computed from the right end of the text box:
|
| - // starting at |logicalWidth| - |start| and continuing left by |width| to
|
| - // |logicalWidth| - |start| - |width|. We will draw that line, but
|
| - // backwards: |logicalWidth| - |start| - |width| to |logicalWidth| - |start|.
|
| + // In RTL mode, start and width are computed from the right end of the text
|
| + // box: starting at |logicalWidth| - |start| and continuing left by |width| to
|
| + // |logicalWidth| - |start| - |width|. We will draw that line, but backwards:
|
| + // |logicalWidth| - |start| - |width| to |logicalWidth| - |start|.
|
| if (!flowIsLTR)
|
| start = m_inlineTextBox.logicalWidth().toFloat() - width - start;
|
|
|
| - // Thick marked text underlines are 2px thick as long as there is room for the 2px line under the baseline.
|
| - // All other marked text underlines are 1px thick.
|
| - // If there's not enough space the underline will touch or overlap characters.
|
| + // Thick marked text underlines are 2px thick as long as there is room for the
|
| + // 2px line under the baseline. All other marked text underlines are 1px
|
| + // thick. If there's not enough space the underline will touch or overlap
|
| + // characters.
|
| int lineThickness = 1;
|
| int baseline = m_inlineTextBox.getLineLayoutItem()
|
| .style(m_inlineTextBox.isFirstLineStyle())
|
| @@ -1044,8 +1060,10 @@ void InlineTextBoxPainter::paintCompositionUnderline(
|
| if (underline.thick() && m_inlineTextBox.logicalHeight() - baseline >= 2)
|
| lineThickness = 2;
|
|
|
| - // We need to have some space between underlines of subsequent clauses, because some input methods do not use different underline styles for those.
|
| - // We make each line shorter, which has a harmless side effect of shortening the first and last clauses, too.
|
| + // We need to have some space between underlines of subsequent clauses,
|
| + // because some input methods do not use different underline styles for those.
|
| + // We make each line shorter, which has a harmless side effect of shortening
|
| + // the first and last clauses, too.
|
| start += 1;
|
| width -= 2;
|
|
|
| @@ -1068,7 +1086,8 @@ void InlineTextBoxPainter::paintTextMatchMarkerForeground(
|
| if (!inlineLayoutObject().frame()->editor().markedTextMatchesAreHighlighted())
|
| return;
|
|
|
| - // TODO(ramya.v): Extract this into a helper function and share many copies of this code.
|
| + // 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);
|
| int ePos = std::min(marker->endOffset() - m_inlineTextBox.start(),
|
|
|