Index: third_party/WebKit/Source/platform/scroll/ScrollableArea.h |
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollableArea.h b/third_party/WebKit/Source/platform/scroll/ScrollableArea.h |
index bc261b77f4d9b0381eccf2bf36d5478dd6b6bae6..26b8fb97111dd14c8030be7744b14c9a21c29066 100644 |
--- a/third_party/WebKit/Source/platform/scroll/ScrollableArea.h |
+++ b/third_party/WebKit/Source/platform/scroll/ScrollableArea.h |
@@ -147,10 +147,10 @@ |
virtual bool isActive() const = 0; |
virtual int scrollSize(ScrollbarOrientation) const = 0; |
- void setScrollbarNeedsPaintInvalidation(Scrollbar*); |
+ virtual void invalidateScrollbar(Scrollbar*, const IntRect&); |
virtual bool isScrollCornerVisible() const = 0; |
virtual IntRect scrollCornerRect() const = 0; |
- void setScrollCornerNeedsPaintInvalidation(); |
+ virtual void invalidateScrollCorner(const IntRect&); |
virtual void getTickmarks(Vector<IntRect>&) const { } |
// Convert points and rects between the scrollbar and its containing view. |
@@ -235,6 +235,25 @@ |
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_verticalBarDamage.isEmpty(); } |
+ bool hasHorizontalBarDamage() const { return !m_horizontalBarDamage.isEmpty(); } |
+ const IntRect& verticalBarDamage() const { return m_verticalBarDamage; } |
+ const IntRect& horizontalBarDamage() const { return m_horizontalBarDamage; } |
+ |
+ void addScrollbarDamage(Scrollbar* scrollbar, const IntRect& rect) |
+ { |
+ if (scrollbar == horizontalScrollbar()) |
+ m_horizontalBarDamage.unite(rect); |
+ else |
+ m_verticalBarDamage.unite(rect); |
+ } |
+ |
+ void resetScrollbarDamage() |
+ { |
+ m_verticalBarDamage = IntRect(); |
+ m_horizontalBarDamage = IntRect(); |
+ } |
+ |
virtual GraphicsLayer* layerForContainer() const; |
virtual GraphicsLayer* layerForScrolling() const { return 0; } |
virtual GraphicsLayer* layerForHorizontalScrollbar() const { return 0; } |
@@ -251,8 +270,8 @@ |
virtual ~ScrollableArea(); |
- // Called when any of horizontal scrollbar, vertical scrollbar and scroll corner is setNeedsPaintInvalidation. |
- virtual void scrollControlWasSetNeedsPaintInvalidation() = 0; |
+ virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&) = 0; |
+ virtual void invalidateScrollCornerRect(const IntRect&) = 0; |
// Returns the default scroll style this area should scroll with when not |
// explicitly specified. E.g. The scrolling behavior of an element can be |
@@ -292,16 +311,6 @@ |
void scrollPositionChanged(const DoublePoint&, ScrollType); |
void clearScrollAnimators(); |
- |
- bool horizontalScrollbarNeedsPaintInvalidation() const { return m_horizontalScrollbarNeedsPaintInvalidation; } |
- bool verticalScrollbarNeedsPaintInvalidation() const { return m_verticalScrollbarNeedsPaintInvalidation; } |
- bool scrollCornerNeedsPaintInvalidation() const { return m_scrollCornerNeedsPaintInvalidation; } |
- void clearNeedsPaintInvalidationForScrollControls() |
- { |
- m_horizontalScrollbarNeedsPaintInvalidation = false; |
- m_verticalScrollbarNeedsPaintInvalidation = false; |
- m_scrollCornerNeedsPaintInvalidation = false; |
- } |
private: |
void programmaticScrollHelper(const DoublePoint&, ScrollBehavior); |
@@ -325,6 +334,10 @@ |
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<ScrollAnimatorBase> scrollAnimator; |
OwnPtr<ProgrammaticScrollAnimator> programmaticScrollAnimator; |
@@ -337,10 +350,6 @@ |
unsigned m_scrollbarOverlayStyle : 2; // ScrollbarOverlayStyle |
unsigned m_scrollOriginChanged : 1; |
- |
- unsigned m_horizontalScrollbarNeedsPaintInvalidation : 1; |
- unsigned m_verticalScrollbarNeedsPaintInvalidation : 1; |
- unsigned m_scrollCornerNeedsPaintInvalidation : 1; |
// There are 8 possible combinations of writing mode and direction. Scroll origin will be non-zero in the x or y axis |
// if there is any reversed direction or writing-mode. The combinations are: |