Index: Source/core/paint/ScrollableAreaPainter.cpp |
diff --git a/Source/core/paint/ScrollableAreaPainter.cpp b/Source/core/paint/ScrollableAreaPainter.cpp |
index 4ab2939f93a9c21359cf66b3fea7546445d4deef..ca7f24e437ba8f1af7b93ce36b0e9b90f60ad22a 100644 |
--- a/Source/core/paint/ScrollableAreaPainter.cpp |
+++ b/Source/core/paint/ScrollableAreaPainter.cpp |
@@ -10,6 +10,7 @@ |
#include "core/layout/PaintInfo.h" |
#include "core/page/Page.h" |
#include "core/paint/ScrollbarPainter.h" |
+#include "core/paint/TransformRecorder.h" |
#include "core/rendering/RenderView.h" |
#include "platform/graphics/GraphicsContext.h" |
#include "platform/graphics/GraphicsContextStateSaver.h" |
@@ -91,12 +92,8 @@ void ScrollableAreaPainter::paintOverflowControls(GraphicsContext* context, cons |
if (paintingOverlayControls) |
adjustedPaintOffset = m_renderLayerScrollableArea.cachedOverlayScrollbarOffset(); |
- // Move the scrollbar widgets if necessary. We normally move and resize widgets during layout, |
- // but sometimes widgets can move without layout occurring (most notably when you scroll a |
- // document that contains fixed positioned elements). |
- |
- // FIXME: this code should not be necessary. |
- m_renderLayerScrollableArea.positionOverflowControls(toIntSize(adjustedPaintOffset)); |
+ IntRect localDamageRect = damageRect; |
+ localDamageRect.moveBy(-adjustedPaintOffset); |
// Overlay scrollbars paint in a second pass through the layer tree so that they will paint |
// on top of everything else. If this is the normal painting pass, paintingOverlayControls |
@@ -109,9 +106,7 @@ void ScrollableAreaPainter::paintOverflowControls(GraphicsContext* context, cons |
// It's not necessary to do the second pass if the scrollbars paint into layers. |
if ((m_renderLayerScrollableArea.horizontalScrollbar() && m_renderLayerScrollableArea.layerForHorizontalScrollbar()) || (m_renderLayerScrollableArea.verticalScrollbar() && m_renderLayerScrollableArea.layerForVerticalScrollbar())) |
return; |
- IntRect localDamgeRect = damageRect; |
- localDamgeRect.moveBy(-paintOffset); |
- if (!overflowControlsIntersectRect(localDamgeRect)) |
+ if (!overflowControlsIntersectRect(localDamageRect)) |
return; |
RenderView* renderView = m_renderLayerScrollableArea.box().view(); |
@@ -128,11 +123,13 @@ void ScrollableAreaPainter::paintOverflowControls(GraphicsContext* context, cons |
if (paintingOverlayControls && !m_renderLayerScrollableArea.hasOverlayScrollbars()) |
return; |
- // Now that we're sure the scrollbars are in the right place, paint them. |
- if (m_renderLayerScrollableArea.horizontalScrollbar() && !m_renderLayerScrollableArea.layerForHorizontalScrollbar()) |
- m_renderLayerScrollableArea.horizontalScrollbar()->paint(context, damageRect); |
- if (m_renderLayerScrollableArea.verticalScrollbar() && !m_renderLayerScrollableArea.layerForVerticalScrollbar()) |
- m_renderLayerScrollableArea.verticalScrollbar()->paint(context, damageRect); |
+ { |
+ TransformRecorder translateRecorder(*context, m_renderLayerScrollableArea.displayItemClient(), AffineTransform::translation(adjustedPaintOffset.x(), adjustedPaintOffset.y())); |
Julien - ping for review
2015/02/25 01:43:36
Ideally we would want this scope to extend to the
Xianzhu
2015/02/25 01:57:09
Agreed. Tried this but found that paintScrollCorne
|
+ if (m_renderLayerScrollableArea.horizontalScrollbar() && !m_renderLayerScrollableArea.layerForHorizontalScrollbar()) |
+ m_renderLayerScrollableArea.horizontalScrollbar()->paint(context, localDamageRect); |
+ if (m_renderLayerScrollableArea.verticalScrollbar() && !m_renderLayerScrollableArea.layerForVerticalScrollbar()) |
+ m_renderLayerScrollableArea.verticalScrollbar()->paint(context, localDamageRect); |
+ } |
if (m_renderLayerScrollableArea.layerForScrollCorner()) |
return; |