| Index: Source/core/paint/ScrollableAreaPainter.cpp
|
| diff --git a/Source/core/paint/ScrollableAreaPainter.cpp b/Source/core/paint/ScrollableAreaPainter.cpp
|
| index d9c630b71396400373c57a44b747d0b1480786ef..ea07ed722a1bfdf38d6401a660a34617a468884d 100644
|
| --- a/Source/core/paint/ScrollableAreaPainter.cpp
|
| +++ b/Source/core/paint/ScrollableAreaPainter.cpp
|
| @@ -11,6 +11,7 @@
|
| #include "core/layout/PaintInfo.h"
|
| #include "core/page/Page.h"
|
| #include "core/paint/ScrollbarPainter.h"
|
| +#include "core/paint/TransformRecorder.h"
|
| #include "platform/graphics/GraphicsContext.h"
|
| #include "platform/graphics/GraphicsContextStateSaver.h"
|
| #include "platform/graphics/paint/DrawingRecorder.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;
|
|
|
| LayoutView* layoutView = 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()));
|
| + 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;
|
|
|