Chromium Code Reviews| Index: Source/core/paint/ObjectPainter.cpp |
| diff --git a/Source/core/paint/ObjectPainter.cpp b/Source/core/paint/ObjectPainter.cpp |
| index 2d43a1d15aa113439344e85312e0f0589606f9b2..8f7f42051639d0cccf2da6459c536dec9f932ae2 100644 |
| --- a/Source/core/paint/ObjectPainter.cpp |
| +++ b/Source/core/paint/ObjectPainter.cpp |
| @@ -16,9 +16,10 @@ |
| namespace blink { |
| -LayoutRect ObjectPainter::outlineBounds(const LayoutRect& objectBounds, const ComputedStyle& style) |
| +// TODO(pdr): This adjustment should be made to LayoutObject::paintInvalidationRectInLocalCoordinates. |
| +LayoutRect ObjectPainter::outlineRectForSVG(const LayoutSize& size, const ComputedStyle& style) |
|
chrishtr
2015/08/27 04:20:41
This seems like an odd method to have, even tempor
pdr.
2015/08/27 05:00:17
SVG's paint invalidation rect concept needs a big
fs
2015/08/27 10:23:17
I can look into this if you like. I assume we want
|
| { |
| - LayoutRect outlineBounds(objectBounds); |
| + LayoutRect outlineBounds(LayoutPoint(), size); |
| outlineBounds.inflate(style.outlineOutsetExtent()); |
| return outlineBounds; |
| } |
| @@ -32,7 +33,7 @@ void ObjectPainter::paintFocusRing(const PaintInfo& paintInfo, const ComputedSty |
| paintInfo.context->drawFocusRing(focusRingIntRects, style.outlineWidth(), style.outlineOffset(), m_layoutObject.resolveColor(style, CSSPropertyOutlineColor)); |
| } |
| -void ObjectPainter::paintOutline(const PaintInfo& paintInfo, const LayoutRect& objectBounds, const LayoutRect& visualOverflowBounds) |
| +void ObjectPainter::paintOutline(const PaintInfo& paintInfo, const LayoutRect& visualOverflowRect, const LayoutSize& objectSize, const LayoutPoint& paintOffset) |
| { |
| const ComputedStyle& styleToUse = m_layoutObject.styleRef(); |
| if (!styleToUse.hasOutline()) |
| @@ -41,13 +42,15 @@ void ObjectPainter::paintOutline(const PaintInfo& paintInfo, const LayoutRect& o |
| if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(*paintInfo.context, m_layoutObject, paintInfo.phase)) |
| return; |
| + LayoutRect visualOverflowBounds(visualOverflowRect); |
| + visualOverflowBounds.moveBy(paintOffset); |
| LayoutObjectDrawingRecorder recorder(*paintInfo.context, m_layoutObject, paintInfo.phase, visualOverflowBounds); |
| if (styleToUse.outlineStyleIsAuto()) { |
| if (LayoutTheme::theme().shouldDrawDefaultFocusRing(&m_layoutObject)) { |
| // Only paint the focus ring by hand if the theme isn't able to draw the focus ring. |
| Vector<LayoutRect> focusRingRects; |
| - m_layoutObject.addOutlineRects(focusRingRects, objectBounds.location()); |
| + m_layoutObject.addOutlineRects(focusRingRects, paintOffset); |
| paintFocusRing(paintInfo, styleToUse, focusRingRects); |
| } |
| return; |
| @@ -56,7 +59,8 @@ void ObjectPainter::paintOutline(const PaintInfo& paintInfo, const LayoutRect& o |
| if (styleToUse.outlineStyle() == BNONE) |
| return; |
| - LayoutRect inner(pixelSnappedIntRect(objectBounds)); |
| + LayoutRect inner(paintOffset, objectSize); |
| + inner = LayoutRect(pixelSnappedIntRect(inner)); |
| inner.inflate(styleToUse.outlineOffset()); |
| LayoutRect outer(inner); |