Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Unified Diff: Source/core/paint/ScrollableAreaPainter.cpp

Issue 949303002: Fix invalidation during painting of scrollbars (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: TestExpectations Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698