Chromium Code Reviews| 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; |