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

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

Issue 1153333005: Fix painting bounds calculations for ellipsis (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 6 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/paint/EllipsisBoxPainter.cpp
diff --git a/Source/core/paint/EllipsisBoxPainter.cpp b/Source/core/paint/EllipsisBoxPainter.cpp
index 360fe40ffe27916d298d26fe2530cf42c901f335..8d9f87b35962936f67a9e21c179f7f1c863cd437 100644
--- a/Source/core/paint/EllipsisBoxPainter.cpp
+++ b/Source/core/paint/EllipsisBoxPainter.cpp
@@ -23,23 +23,29 @@ void EllipsisBoxPainter::paint(const PaintInfo& paintInfo, const LayoutPoint& pa
void EllipsisBoxPainter::paintEllipsis(const PaintInfo& paintInfo, const LayoutPoint& paintOffset, LayoutUnit lineTop, LayoutUnit lineBottom, const ComputedStyle& style)
{
+ bool isPrinting = m_ellipsisBox.layoutObject().document().printing();
chrishtr 2015/06/05 16:46:06 EllipsisBox inherits from InlineBox. Can you lever
fs 2015/06/05 17:14:03 I don't see how I could - InlineBox (this CL) vs.
+ bool haveSelection = !isPrinting && paintInfo.phase != PaintPhaseTextClip && m_ellipsisBox.selectionState() != LayoutObject::SelectionNone;
+
+ LayoutRect paintRect(m_ellipsisBox.logicalFrameRect());
+ if (haveSelection)
+ paintRect.unite(LayoutRect(m_ellipsisBox.selectionRect()));
+ paintRect = m_ellipsisBox.logicalRectToPhysicalRect(paintRect);
+ paintRect.moveBy(paintOffset);
+
GraphicsContext* context = paintInfo.context;
+ DrawingRecorder recorder(*context, m_ellipsisBox, DisplayItem::paintPhaseToDrawingType(paintInfo.phase), paintRect);
+ if (recorder.canUseCachedDrawing())
+ return;
+
LayoutPoint boxOrigin = m_ellipsisBox.locationIncludingFlipping();
boxOrigin.moveBy(paintOffset);
LayoutRect boxRect(boxOrigin, LayoutSize(m_ellipsisBox.logicalWidth(), m_ellipsisBox.virtualLogicalHeight()));
- DrawingRecorder recorder(*context, m_ellipsisBox, DisplayItem::paintPhaseToDrawingType(paintInfo.phase), boxRect);
- if (recorder.canUseCachedDrawing())
- return;
-
GraphicsContextStateSaver stateSaver(*context);
if (!m_ellipsisBox.isHorizontal())
context->concatCTM(TextPainter::rotation(boxRect, TextPainter::Clockwise));
- const Font& font = style.font();
- LayoutPoint textOrigin(boxOrigin.x(), boxOrigin.y() + font.fontMetrics().ascent());
- bool isPrinting = m_ellipsisBox.layoutObject().document().printing();
- bool haveSelection = !isPrinting && paintInfo.phase != PaintPhaseTextClip && m_ellipsisBox.selectionState() != LayoutObject::SelectionNone;
+ const Font& font = style.font();
if (haveSelection)
paintSelection(context, boxOrigin, style, font);
@@ -51,6 +57,7 @@ void EllipsisBoxPainter::paintEllipsis(const PaintInfo& paintInfo, const LayoutP
textStyle = TextPainter::selectionPaintingStyle(m_ellipsisBox.layoutObject(), true, paintInfo.forceBlackText(), isPrinting, textStyle);
TextRun textRun = constructTextRun(&m_ellipsisBox.layoutObject(), font, m_ellipsisBox.ellipsisStr(), style, TextRun::AllowTrailingExpansion);
+ LayoutPoint textOrigin(boxOrigin.x(), boxOrigin.y() + font.fontMetrics().ascent());
TextPainter textPainter(context, font, textRun, textOrigin, boxRect, m_ellipsisBox.isHorizontal());
textPainter.paint(0, m_ellipsisBox.ellipsisStr().length(), m_ellipsisBox.ellipsisStr().length(), textStyle);
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698