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

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

Issue 1043643002: Switch line layout to LayoutUnit. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: More TestExpectations tweaks Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/paint/InlineTextBoxPainter.h ('k') | Source/core/paint/SVGInlineTextBoxPainter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/paint/InlineTextBoxPainter.cpp
diff --git a/Source/core/paint/InlineTextBoxPainter.cpp b/Source/core/paint/InlineTextBoxPainter.cpp
index f288e7cba5170d2934f8954a49f5a5a84ec9cd07..1d6d04079b4ca0a47f6d45018a1c93331421caa9 100644
--- a/Source/core/paint/InlineTextBoxPainter.cpp
+++ b/Source/core/paint/InlineTextBoxPainter.cpp
@@ -114,9 +114,9 @@ void InlineTextBoxPainter::paint(const PaintInfo& paintInfo, const LayoutPoint&
GraphicsContext* context = paintInfo.context;
const ComputedStyle& styleToUse = m_inlineTextBox.layoutObject().styleRef(m_inlineTextBox.isFirstLineStyle());
- FloatPoint boxOrigin = m_inlineTextBox.locationIncludingFlipping().toFloatPoint();
- boxOrigin.move(adjustedPaintOffset.x().toFloat(), adjustedPaintOffset.y().toFloat());
- FloatRect boxRect(boxOrigin, FloatSize(m_inlineTextBox.logicalWidth(), m_inlineTextBox.logicalHeight()));
+ LayoutPoint boxOrigin(m_inlineTextBox.locationIncludingFlipping());
+ boxOrigin.move(adjustedPaintOffset.x(), adjustedPaintOffset.y());
+ LayoutRect boxRect(boxOrigin, LayoutSize(m_inlineTextBox.logicalWidth(), m_inlineTextBox.logicalHeight()));
bool shouldRotate = false;
LayoutTextCombine* combinedText = nullptr;
@@ -144,7 +144,7 @@ void InlineTextBoxPainter::paint(const PaintInfo& paintInfo, const LayoutPoint&
// Set our font.
const Font& font = styleToUse.font();
- FloatPoint textOrigin = FloatPoint(boxOrigin.x(), boxOrigin.y() + font.fontMetrics().ascent());
+ LayoutPoint textOrigin(boxOrigin.x(), boxOrigin.y() + font.fontMetrics().ascent());
// 1. Paint backgrounds behind text if needed. Examples of such backgrounds include selection
// and composition highlights.
@@ -271,7 +271,7 @@ unsigned InlineTextBoxPainter::underlinePaintEnd(const CompositionUnderline& und
return paintEnd;
}
-void InlineTextBoxPainter::paintCompositionBackgrounds(GraphicsContext* pt, const FloatPoint& boxOrigin, const ComputedStyle& style, const Font& font, bool useCustomUnderlines)
+void InlineTextBoxPainter::paintCompositionBackgrounds(GraphicsContext* pt, const LayoutPoint& boxOrigin, const ComputedStyle& style, const Font& font, bool useCustomUnderlines)
{
if (useCustomUnderlines) {
// Paint custom background highlights for compositions.
@@ -290,7 +290,7 @@ void InlineTextBoxPainter::paintCompositionBackgrounds(GraphicsContext* pt, cons
}
}
-void InlineTextBoxPainter::paintSingleCompositionBackgroundRun(GraphicsContext* context, const FloatPoint& boxOrigin, const ComputedStyle& style, const Font& font, Color backgroundColor, int startPos, int endPos)
+void InlineTextBoxPainter::paintSingleCompositionBackgroundRun(GraphicsContext* context, const LayoutPoint& boxOrigin, const ComputedStyle& style, const Font& font, Color backgroundColor, int startPos, int endPos)
{
int sPos = std::max(startPos - static_cast<int>(m_inlineTextBox.start()), 0);
int ePos = std::min(endPos - static_cast<int>(m_inlineTextBox.start()), static_cast<int>(m_inlineTextBox.len()));
@@ -299,11 +299,11 @@ void InlineTextBoxPainter::paintSingleCompositionBackgroundRun(GraphicsContext*
int deltaY = m_inlineTextBox.layoutObject().style()->isFlippedLinesWritingMode() ? m_inlineTextBox.root().selectionBottom() - m_inlineTextBox.logicalBottom() : m_inlineTextBox.logicalTop() - m_inlineTextBox.root().selectionTop();
int selHeight = m_inlineTextBox.root().selectionHeight();
- FloatPoint localOrigin(boxOrigin.x(), boxOrigin.y() - deltaY);
+ FloatPoint localOrigin(boxOrigin.x().toFloat(), boxOrigin.y().toFloat() - deltaY);
context->drawHighlightForText(font, m_inlineTextBox.constructTextRun(style, font), localOrigin, selHeight, backgroundColor, sPos, ePos);
}
-void InlineTextBoxPainter::paintDocumentMarkers(GraphicsContext* pt, const FloatPoint& boxOrigin, const ComputedStyle& style, const Font& font, bool background)
+void InlineTextBoxPainter::paintDocumentMarkers(GraphicsContext* pt, const LayoutPoint& boxOrigin, const ComputedStyle& style, const Font& font, bool background)
{
if (!m_inlineTextBox.layoutObject().node())
return;
@@ -344,13 +344,13 @@ void InlineTextBoxPainter::paintDocumentMarkers(GraphicsContext* pt, const Float
// marker intersects this run. Paint it.
switch (marker->type()) {
case DocumentMarker::Spelling:
- m_inlineTextBox.paintDocumentMarker(pt, FloatPointWillBeLayoutPoint(boxOrigin), marker, style, font, false);
+ m_inlineTextBox.paintDocumentMarker(pt, boxOrigin, marker, style, font, false);
break;
case DocumentMarker::Grammar:
- m_inlineTextBox.paintDocumentMarker(pt, FloatPointWillBeLayoutPoint(boxOrigin), marker, style, font, true);
+ m_inlineTextBox.paintDocumentMarker(pt, boxOrigin, marker, style, font, true);
break;
case DocumentMarker::TextMatch:
- m_inlineTextBox.paintTextMatchMarker(pt, FloatPointWillBeLayoutPoint(boxOrigin), marker, style, font);
+ m_inlineTextBox.paintTextMatchMarker(pt, boxOrigin, marker, style, font);
break;
default:
ASSERT_NOT_REACHED();
@@ -371,7 +371,7 @@ static GraphicsContext::DocumentMarkerLineStyle lineStyleForMarkerType(DocumentM
}
}
-void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext* pt, const FloatPoint& boxOrigin, DocumentMarker* marker, const ComputedStyle& style, const Font& font, bool grammar)
+void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext* pt, const LayoutPoint& boxOrigin, DocumentMarker* marker, const ComputedStyle& style, const Font& font, bool grammar)
{
// Never print spelling/grammar markers (5327887)
if (m_inlineTextBox.layoutObject().document().printing())
@@ -380,8 +380,8 @@ void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext* pt, const FloatP
if (m_inlineTextBox.truncation() == cFullTruncation)
return;
- float start = 0; // start of line to draw, relative to tx
- float width = m_inlineTextBox.logicalWidth(); // how much line to draw
+ LayoutUnit start = 0; // start of line to draw, relative to tx
+ LayoutUnit width = m_inlineTextBox.logicalWidth(); // how much line to draw
// Determine whether we need to measure text
bool markerSpansWholeBox = true;
@@ -402,11 +402,11 @@ void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext* pt, const FloatP
// Calculate start & width
int deltaY = m_inlineTextBox.layoutObject().style()->isFlippedLinesWritingMode() ? m_inlineTextBox.root().selectionBottom() - m_inlineTextBox.logicalBottom() : m_inlineTextBox.logicalTop() - m_inlineTextBox.root().selectionTop();
int selHeight = m_inlineTextBox.root().selectionHeight();
- FloatPoint startPoint(boxOrigin.x(), boxOrigin.y() - deltaY);
+ LayoutPoint startPoint(boxOrigin.x(), boxOrigin.y() - deltaY);
TextRun run = m_inlineTextBox.constructTextRun(style, font);
// FIXME: Convert the document markers to float rects.
- IntRect markerRect = enclosingIntRect(font.selectionRectForText(run, startPoint, selHeight, startPosition, endPosition));
+ IntRect markerRect = enclosingIntRect(font.selectionRectForText(run, FloatPoint(startPoint), selHeight, startPosition, endPosition));
start = markerRect.x() - startPoint.x();
width = markerRect.width();
}
@@ -421,18 +421,18 @@ void InlineTextBoxPainter::paintDocumentMarker(GraphicsContext* pt, const FloatP
int baseline = m_inlineTextBox.layoutObject().style(m_inlineTextBox.isFirstLineStyle())->fontMetrics().ascent();
int descent = m_inlineTextBox.logicalHeight() - baseline;
int underlineOffset;
- if (descent <= (2 + lineThickness)) {
+ if (descent <= (lineThickness + 2)) {
// Place the underline at the very bottom of the text in small/medium fonts.
underlineOffset = m_inlineTextBox.logicalHeight() - lineThickness;
} else {
// In larger fonts, though, place the underline up near the baseline to prevent a big gap.
underlineOffset = baseline + 2;
}
- pt->drawLineForDocumentMarker(FloatPoint(boxOrigin.x() + start, boxOrigin.y() + underlineOffset), width, lineStyleForMarkerType(marker->type()));
+ pt->drawLineForDocumentMarker(FloatPoint((boxOrigin.x() + start).toFloat(), (boxOrigin.y() + underlineOffset).toFloat()), width.toFloat(), lineStyleForMarkerType(marker->type()));
}
template <InlineTextBoxPainter::PaintOptions options>
-void InlineTextBoxPainter::paintSelection(GraphicsContext* context, const FloatRect& boxRect, const ComputedStyle& style, const Font& font, Color textColor, LayoutTextCombine* combinedText)
+void InlineTextBoxPainter::paintSelection(GraphicsContext* context, const LayoutRect& boxRect, const ComputedStyle& style, const Font& font, Color textColor, LayoutTextCombine* combinedText)
{
// See if we have a selection to paint at all.
int sPos, ePos;
@@ -468,11 +468,11 @@ void InlineTextBoxPainter::paintSelection(GraphicsContext* context, const FloatR
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
- FloatRect clipRect = boxRect;
+ LayoutRect clipRect(boxRect);
combinedText->transformLayoutRect(clipRect);
- context->clip(clipRect);
+ context->clip(FloatRect(clipRect));
combinedText->transformToInlineCoordinates(*context, boxRect);
- context->drawHighlightForText(font, textRun, boxRect.location(), boxRect.height(), c, sPos, ePos);
+ context->drawHighlightForText(font, textRun, FloatPoint(boxRect.location()), boxRect.height(), c, sPos, ePos);
return;
}
@@ -482,8 +482,8 @@ void InlineTextBoxPainter::paintSelection(GraphicsContext* context, const FloatR
int deltaY = roundToInt(m_inlineTextBox.layoutObject().style()->isFlippedLinesWritingMode() ? selectionBottom - m_inlineTextBox.logicalBottom() : m_inlineTextBox.logicalTop() - selectionTop);
int selHeight = std::max(0, roundToInt(selectionBottom - selectionTop));
- FloatPoint localOrigin(boxRect.x(), boxRect.y() - deltaY);
- FloatRect clipRect(localOrigin, FloatSize(m_inlineTextBox.logicalWidth(), selHeight));
+ FloatPoint localOrigin(boxRect.x().toFloat(), (boxRect.y() - deltaY).toFloat());
+ FloatRect clipRect(localOrigin, FloatSize(m_inlineTextBox.logicalWidth().toFloat(), selHeight));
context->clip(clipRect);
context->drawHighlightForText(font, textRun, localOrigin, selHeight, c, sPos, ePos);
@@ -512,7 +512,7 @@ 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.
- const float offset = inlineTextBox->root().maxLogicalTop() - inlineTextBox->logicalTop();
+ const LayoutUnit offset = inlineTextBox->root().maxLogicalTop() - inlineTextBox->logicalTop();
if (offset > 0)
return inlineTextBox->logicalHeight() + gap + offset;
return inlineTextBox->logicalHeight() + gap;
@@ -694,23 +694,23 @@ static void paintAppliedDecoration(GraphicsContext* context, FloatPoint start, f
context->setShouldAntialias(antialiasDecoration);
// Fall through
default:
- context->drawLineForText(start, width, isPrinting);
+ context->drawLineForText(FloatPoint(start), width, isPrinting);
if (decoration.style == TextDecorationStyleDouble)
context->drawLineForText(start + FloatPoint(0, doubleOffset), width, isPrinting);
}
}
-void InlineTextBoxPainter::paintDecoration(GraphicsContext* context, const FloatPoint& boxOrigin, TextDecoration deco)
+void InlineTextBoxPainter::paintDecoration(GraphicsContext* context, const LayoutPoint& boxOrigin, TextDecoration deco)
{
GraphicsContextStateSaver stateSaver(*context);
if (m_inlineTextBox.truncation() == cFullTruncation)
return;
- FloatPoint localOrigin = boxOrigin;
+ LayoutPoint localOrigin(boxOrigin);
- float width = m_inlineTextBox.logicalWidth();
+ LayoutUnit width = m_inlineTextBox.logicalWidth();
if (m_inlineTextBox.truncation() != cNoTruncation) {
width = m_inlineTextBox.layoutObject().width(m_inlineTextBox.start(), m_inlineTextBox.truncation(), m_inlineTextBox.textPos(), m_inlineTextBox.isLeftToRightDirection() ? LTR : RTL, m_inlineTextBox.isFirstLineStyle());
if (!m_inlineTextBox.isLeftToRightDirection())
@@ -727,7 +727,7 @@ void InlineTextBoxPainter::paintDecoration(GraphicsContext* context, const Float
bool isPrinting = m_inlineTextBox.layoutObject().document().printing();
const ComputedStyle& styleToUse = m_inlineTextBox.layoutObject().styleRef(m_inlineTextBox.isFirstLineStyle());
- int baseline = styleToUse.fontMetrics().ascent();
+ float baseline = styleToUse.fontMetrics().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.
@@ -748,18 +748,18 @@ void InlineTextBoxPainter::paintDecoration(GraphicsContext* context, const Float
if (deco & TextDecorationUnderline) {
const int underlineOffset = computeUnderlineOffset(styleToUse.textUnderlinePosition(), styleToUse.fontMetrics(), &m_inlineTextBox, textDecorationThickness);
- paintAppliedDecoration(context, localOrigin + FloatPoint(0, underlineOffset), width, doubleOffset, 1, underline, textDecorationThickness, antialiasDecoration, isPrinting);
+ paintAppliedDecoration(context, FloatPoint(localOrigin) + FloatPoint(0, underlineOffset), width.toFloat(), doubleOffset, 1, underline, textDecorationThickness, antialiasDecoration, isPrinting);
}
if (deco & TextDecorationOverline) {
- paintAppliedDecoration(context, localOrigin, width, -doubleOffset, 1, overline, textDecorationThickness, antialiasDecoration, isPrinting);
+ paintAppliedDecoration(context, FloatPoint(localOrigin), width.toFloat(), -doubleOffset, 1, overline, textDecorationThickness, antialiasDecoration, isPrinting);
}
if (deco & TextDecorationLineThrough) {
const float lineThroughOffset = 2 * baseline / 3;
- paintAppliedDecoration(context, localOrigin + FloatPoint(0, lineThroughOffset), width, doubleOffset, 0, linethrough, textDecorationThickness, antialiasDecoration, isPrinting);
+ paintAppliedDecoration(context, FloatPoint(localOrigin) + FloatPoint(0, lineThroughOffset), width.toFloat(), doubleOffset, 0, linethrough, textDecorationThickness, antialiasDecoration, isPrinting);
}
}
-void InlineTextBoxPainter::paintCompositionUnderline(GraphicsContext* ctx, const FloatPoint& boxOrigin, const CompositionUnderline& underline)
+void InlineTextBoxPainter::paintCompositionUnderline(GraphicsContext* ctx, const LayoutPoint& boxOrigin, const CompositionUnderline& underline)
{
if (m_inlineTextBox.truncation() == cFullTruncation)
return;
@@ -789,10 +789,10 @@ void InlineTextBoxPainter::paintCompositionUnderline(GraphicsContext* ctx, const
ctx->setStrokeColor(underline.color);
ctx->setStrokeThickness(lineThickness);
- ctx->drawLineForText(FloatPoint(boxOrigin.x() + start, boxOrigin.y() + m_inlineTextBox.logicalHeight() - lineThickness), width, m_inlineTextBox.layoutObject().document().printing());
+ ctx->drawLineForText(FloatPoint(boxOrigin.x() + start, (boxOrigin.y() + m_inlineTextBox.logicalHeight() - lineThickness).toFloat()), width, m_inlineTextBox.layoutObject().document().printing());
}
-void InlineTextBoxPainter::paintTextMatchMarker(GraphicsContext* pt, const FloatPoint& boxOrigin, DocumentMarker* marker, const ComputedStyle& style, const Font& font)
+void InlineTextBoxPainter::paintTextMatchMarker(GraphicsContext* pt, const LayoutPoint& boxOrigin, DocumentMarker* marker, const ComputedStyle& style, const Font& font)
{
// Use same y positioning and height as for selection, so that when the selection and this highlight are on
// the same word there are no pieces sticking out.
@@ -809,8 +809,8 @@ void InlineTextBoxPainter::paintTextMatchMarker(GraphicsContext* pt, const Float
LayoutTheme::theme().platformActiveTextSearchHighlightColor() :
LayoutTheme::theme().platformInactiveTextSearchHighlightColor();
GraphicsContextStateSaver stateSaver(*pt);
- pt->clip(FloatRect(boxOrigin.x(), boxOrigin.y() - deltaY, m_inlineTextBox.logicalWidth(), selHeight));
- pt->drawHighlightForText(font, run, FloatPoint(boxOrigin.x(), boxOrigin.y() - deltaY), selHeight, color, sPos, ePos);
+ pt->clip(FloatRect(boxOrigin.x().toFloat(), (boxOrigin.y() - deltaY).toFloat(), m_inlineTextBox.logicalWidth().toFloat(), selHeight));
+ pt->drawHighlightForText(font, run, FloatPoint(boxOrigin.x().toFloat(), (boxOrigin.y() - deltaY).toFloat()), selHeight, color, sPos, ePos);
}
}
« no previous file with comments | « Source/core/paint/InlineTextBoxPainter.h ('k') | Source/core/paint/SVGInlineTextBoxPainter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698