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; |