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

Unified Diff: Source/platform/scroll/ScrollableArea.h

Issue 418483004: Fix scrollbar damage accumulation issue (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: NeedsRebaseline Created 6 years, 5 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
« no previous file with comments | « Source/core/rendering/RenderLayerScrollableArea.cpp ('k') | Source/platform/scroll/ScrollableArea.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/scroll/ScrollableArea.h
diff --git a/Source/platform/scroll/ScrollableArea.h b/Source/platform/scroll/ScrollableArea.h
index 24e65351c7c8628e261d839f18ad546b3760c8ea..4315b1e010bd1c4486eb7caa53fcee7d6456eefb 100644
--- a/Source/platform/scroll/ScrollableArea.h
+++ b/Source/platform/scroll/ScrollableArea.h
@@ -204,26 +204,25 @@ public:
int maximumScrollPosition(ScrollbarOrientation orientation) { return orientation == HorizontalScrollbar ? maximumScrollPosition().x() : maximumScrollPosition().y(); }
int clampScrollPosition(ScrollbarOrientation orientation, int pos) { return std::max(std::min(pos, maximumScrollPosition(orientation)), minimumScrollPosition(orientation)); }
- bool hasVerticalBarDamage() const { return m_hasVerticalBarDamage; }
- bool hasHorizontalBarDamage() const { return m_hasHorizontalBarDamage; }
+ bool hasVerticalBarDamage() const { return !m_verticalBarDamage.isEmpty(); }
+ bool hasHorizontalBarDamage() const { return !m_horizontalBarDamage.isEmpty(); }
+ const IntRect& verticalBarDamage() const { return m_verticalBarDamage; }
+ const IntRect& horizontalBarDamage() const { return m_horizontalBarDamage; }
- const IntRect& verticalBarDamage() const
+ void addScrollbarDamage(Scrollbar* scrollbar, const IntRect& rect)
{
- ASSERT(m_hasVerticalBarDamage);
- return m_verticalBarDamage;
- }
-
- const IntRect& horizontalBarDamage() const
- {
- ASSERT(m_hasHorizontalBarDamage);
- return m_horizontalBarDamage;
+ if (scrollbar == horizontalScrollbar())
+ m_horizontalBarDamage.unite(rect);
+ else
+ m_verticalBarDamage.unite(rect);
}
void resetScrollbarDamage()
{
- m_hasVerticalBarDamage = false;
- m_hasHorizontalBarDamage = false;
+ m_verticalBarDamage = IntRect();
+ m_horizontalBarDamage = IntRect();
}
+
virtual GraphicsLayer* layerForContainer() const;
virtual GraphicsLayer* layerForScrolling() const { return 0; }
virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; }
@@ -245,13 +244,6 @@ protected:
virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) = 0;
virtual void invalidateScrollCornerRect(const IntRect&) = 0;
- // For repaint after layout, stores the damage to be repainted for the
- // scrollbars.
- unsigned m_hasHorizontalBarDamage : 1;
- unsigned m_hasVerticalBarDamage : 1;
- IntRect m_horizontalBarDamage;
- IntRect m_verticalBarDamage;
-
private:
void scrollPositionChanged(const IntPoint&);
@@ -268,6 +260,10 @@ private:
virtual int documentStep(ScrollbarOrientation) const;
virtual float pixelStep(ScrollbarOrientation) const;
+ // Stores the paint invalidations for the scrollbars during layout.
+ IntRect m_horizontalBarDamage;
+ IntRect m_verticalBarDamage;
+
struct ScrollableAreaAnimators {
OwnPtr<ScrollAnimator> scrollAnimator;
OwnPtr<ProgrammaticScrollAnimator> programmaticScrollAnimator;
« no previous file with comments | « Source/core/rendering/RenderLayerScrollableArea.cpp ('k') | Source/platform/scroll/ScrollableArea.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698