Index: Source/core/frame/FrameView.cpp |
diff --git a/Source/core/frame/FrameView.cpp b/Source/core/frame/FrameView.cpp |
index 55a282301363347d3cfa190398315f57102a9a30..688416573eea5465d9a770a00b5eb6194e3ccc8c 100644 |
--- a/Source/core/frame/FrameView.cpp |
+++ b/Source/core/frame/FrameView.cpp |
@@ -1058,29 +1058,33 @@ void FrameView::repaintTree(RenderObject* root) |
const LayoutRect& oldRepaintRect = renderer->oldRepaintRect(); |
const LayoutRect& newRepaintRect = renderer->newRepaintRect(); |
+ LayoutRect oldOutlineRect; |
+ LayoutRect newOutlineRect; |
- LayoutRect oldOutlineRect = oldRepaintRect; |
- oldOutlineRect.inflate(renderView()->oldMaximalOutlineSize()); |
+ if (renderer->hasOutline()) { |
+ newOutlineRect = renderer->newOutlineRect(); |
+ oldOutlineRect = renderer->oldOutlineRect(); |
+ } |
- LayoutRect newOutlineRect = newRepaintRect; |
- newOutlineRect.inflate(renderView()->maximalOutlineSize()); |
+ if (renderer->shouldDoFullRepaintIfSelfPaintingLayer() |
+ && renderer->hasLayer() |
+ && toRenderLayerModelObject(renderer)->layer()->isSelfPaintingLayer()) |
+ renderer->setShouldDoFullRepaintAfterLayout(true); |
// FIXME: Currently renderers with layers will get repainted when we call updateLayerPositionsAfterLayout. |
// That call should be broken apart to position the layers be done before |
// the repaintTree call so this will repaint everything. |
bool didFullRepaint = false; |
- if (!renderer->hasLayer()) { |
- if (!renderer->layoutDidGetCalled()) { |
- if (renderer->shouldDoFullRepaintAfterLayout()) { |
- renderer->repaint(); |
- didFullRepaint = true; |
- } |
- |
- } else { |
- didFullRepaint = renderer->repaintAfterLayoutIfNeeded(renderer->containerForRepaint(), |
- renderer->shouldDoFullRepaintAfterLayout(), oldRepaintRect, oldOutlineRect, |
- &newRepaintRect, &newOutlineRect); |
+ if (!renderer->layoutDidGetCalled()) { |
+ if (renderer->shouldDoFullRepaintAfterLayout()) { |
+ renderer->repaint(); |
+ didFullRepaint = true; |
} |
+ |
+ } else { |
+ didFullRepaint = renderer->repaintAfterLayoutIfNeeded(renderer->containerForRepaint(), |
+ renderer->shouldDoFullRepaintAfterLayout(), oldRepaintRect, oldOutlineRect, |
+ &newRepaintRect, &newOutlineRect); |
} |
if (!didFullRepaint && renderer->shouldRepaintOverflowIfNeeded()) |
@@ -1102,7 +1106,7 @@ void FrameView::repaintTree(RenderObject* root) |
listBox->repaintScrollbarIfNeeded(); |
} |
- renderer->clearRepaintRects(); |
+ renderer->clearRepaintState(); |
} |
renderView()->setOldMaximalOutlineSize(0); |