 Chromium Code Reviews
 Chromium Code Reviews Issue 1153333005:
  Fix painting bounds calculations for ellipsis  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk
    
  
    Issue 1153333005:
  Fix painting bounds calculations for ellipsis  (Closed) 
  Base URL: svn://svn.chromium.org/blink/trunk| 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); | 
| } |