Index: Source/WebCore/page/scrolling/ScrollingCoordinator.h |
diff --git a/Source/WebCore/page/scrolling/ScrollingCoordinator.h b/Source/WebCore/page/scrolling/ScrollingCoordinator.h |
index 2ecb46463b3cb1ef2c0756ce4ba6673fd8884988..382c6d7f20f43b97a9a29fe6dec18f1fe0ba377a 100644 |
--- a/Source/WebCore/page/scrolling/ScrollingCoordinator.h |
+++ b/Source/WebCore/page/scrolling/ScrollingCoordinator.h |
@@ -31,25 +31,15 @@ |
#include "PlatformWheelEvent.h" |
#include "RenderObject.h" |
#include "ScrollTypes.h" |
-#include "Timer.h" |
-#include <wtf/Forward.h> |
-#if ENABLE(THREADED_SCROLLING) |
-#include <wtf/HashMap.h> |
-#include <wtf/ThreadSafeRefCounted.h> |
-#include <wtf/Threading.h> |
-#endif |
- |
-#if PLATFORM(MAC) |
-#include <wtf/RetainPtr.h> |
-#endif |
+namespace WebKit { |
+class WebLayer; |
+class WebScrollbarLayer; |
+} |
namespace WebCore { |
typedef unsigned MainThreadScrollingReasons; |
-typedef uint64_t ScrollingNodeID; |
- |
-enum ScrollingNodeType { ScrollingNode, FixedNode, StickyNode }; |
class Document; |
class Frame; |
@@ -60,31 +50,18 @@ class Region; |
class ScrollableArea; |
class ViewportConstraints; |
-#if ENABLE(THREADED_SCROLLING) |
-class ScrollingTree; |
-#endif |
- |
-enum SetOrSyncScrollingLayerPosition { |
- SetScrollingLayerPosition, |
- SyncScrollingLayerPosition |
-}; |
- |
-class ScrollingCoordinator : public ThreadSafeRefCounted<ScrollingCoordinator> { |
+class ScrollingCoordinator : public RefCounted<ScrollingCoordinator> { |
public: |
static PassRefPtr<ScrollingCoordinator> create(Page*); |
- virtual ~ScrollingCoordinator(); |
- |
- virtual void pageDestroyed(); |
+ ~ScrollingCoordinator(); |
-#if ENABLE(THREADED_SCROLLING) |
- virtual ScrollingTree* scrollingTree() const { return 0; } |
-#endif |
+ void pageDestroyed(); |
// Return whether this scrolling coordinator handles scrolling for the given frame view. |
bool coordinatesScrollingForFrameView(FrameView*) const; |
// Should be called whenever the given frame view has been laid out. |
- virtual void frameViewLayoutUpdated(FrameView*) { } |
+ void frameViewLayoutUpdated(FrameView*); |
// Should be called whenever a wheel event handler is added or removed in the |
// frame view's underlying document. |
@@ -97,64 +74,33 @@ public: |
void frameViewFixedObjectsDidChange(FrameView*); |
// Should be called whenever the root layer for the given frame view changes. |
- virtual void frameViewRootLayerDidChange(FrameView*); |
+ void frameViewRootLayerDidChange(FrameView*); |
// Return whether this scrolling coordinator can keep fixed position layers fixed to their |
// containers while scrolling. |
- virtual bool supportsFixedPositionLayers() const { return false; } |
+ bool supportsFixedPositionLayers() const { return true; } |
-#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN)) |
+#if OS(DARWIN) |
// Dispatched by the scrolling tree during handleWheelEvent. This is required as long as scrollbars are painted on the main thread. |
void handleWheelEventPhase(PlatformWheelEventPhase); |
#endif |
- // Force all scroll layer position updates to happen on the main thread. |
- void setForceMainThreadScrollLayerPositionUpdates(bool); |
- |
- // These virtual functions are currently unique to the threaded scrolling architecture. |
- // Their meaningful implementations are in ScrollingCoordinatorMac. |
- virtual void commitTreeStateIfNeeded() { } |
- virtual bool requestScrollPositionUpdate(FrameView*, const IntPoint&) { return false; } |
- virtual bool handleWheelEvent(FrameView*, const PlatformWheelEvent&) { return true; } |
- virtual ScrollingNodeID attachToStateTree(ScrollingNodeType, ScrollingNodeID newNodeID, ScrollingNodeID /*parentID*/) { return newNodeID; } |
- virtual void detachFromStateTree(ScrollingNodeID) { } |
- virtual void clearStateTree() { } |
- virtual void updateViewportConstrainedNode(ScrollingNodeID, const ViewportConstraints&, GraphicsLayer*) { } |
- virtual void updateScrollingNode(ScrollingNodeID, GraphicsLayer* /*scrollLayer*/, GraphicsLayer* /*counterScrollingLayer*/) { } |
- virtual void syncChildPositions(const LayoutRect&) { } |
- virtual String scrollingStateTreeAsText() const; |
- virtual bool isRubberBandInProgress() const { return false; } |
- virtual bool rubberBandsAtBottom() const { return false; } |
- virtual void setRubberBandsAtBottom(bool) { } |
- virtual bool rubberBandsAtTop() const { return false; } |
- virtual void setRubberBandsAtTop(bool) { } |
- |
- // Generated a unique id for scroll layers. |
- ScrollingNodeID uniqueScrollLayerID(); |
- |
- // Dispatched by the scrolling tree whenever the main frame scroll position changes. |
- void scheduleUpdateMainFrameScrollPosition(const IntPoint&, bool programmaticScroll, SetOrSyncScrollingLayerPosition); |
- void updateMainFrameScrollPosition(const IntPoint&, bool programmaticScroll, SetOrSyncScrollingLayerPosition); |
- |
enum MainThreadScrollingReasonFlags { |
- ForcedOnMainThread = 1 << 0, |
- HasSlowRepaintObjects = 1 << 1, |
- HasViewportConstrainedObjectsWithoutSupportingFixedLayers = 1 << 2, |
- HasNonLayerViewportConstrainedObjects = 1 << 3, |
- IsImageDocument = 1 << 4 |
+ HasSlowRepaintObjects = 1 << 0, |
+ HasViewportConstrainedObjectsWithoutSupportingFixedLayers = 1 << 1, |
+ HasNonLayerViewportConstrainedObjects = 1 << 2, |
+ IsImageDocument = 1 << 3 |
}; |
MainThreadScrollingReasons mainThreadScrollingReasons() const; |
bool shouldUpdateScrollLayerPositionOnMainThread() const { return mainThreadScrollingReasons() != 0; } |
- // These virtual functions are currently unique to Chromium's WebLayer approach. Their meaningful |
- // implementations are in ScrollingCoordinatorChromium. |
- virtual void willDestroyScrollableArea(ScrollableArea*) { } |
- virtual void scrollableAreaScrollLayerDidChange(ScrollableArea*) { } |
- virtual void scrollableAreaScrollbarLayerDidChange(ScrollableArea*, ScrollbarOrientation) { } |
- virtual void setLayerIsContainerForFixedPositionLayers(GraphicsLayer*, bool) { } |
- virtual void updateLayerPositionConstraint(RenderLayer*) { } |
- virtual void touchEventTargetRectsDidChange(const Document*) { } |
+ void willDestroyScrollableArea(ScrollableArea*); |
+ void scrollableAreaScrollLayerDidChange(ScrollableArea*); |
+ void scrollableAreaScrollbarLayerDidChange(ScrollableArea*, ScrollbarOrientation); |
+ void setLayerIsContainerForFixedPositionLayers(GraphicsLayer*, bool); |
+ void updateLayerPositionConstraint(RenderLayer*); |
+ void touchEventTargetRectsDidChange(const Document*); |
#if ENABLE(TOUCH_EVENT_TRACKING) |
void computeAbsoluteTouchEventTargetRects(const Document*, Vector<IntRect>&); |
@@ -168,11 +114,9 @@ public: |
protected: |
explicit ScrollingCoordinator(Page*); |
-#if USE(ACCELERATED_COMPOSITING) |
static GraphicsLayer* scrollLayerForScrollableArea(ScrollableArea*); |
static GraphicsLayer* horizontalScrollbarLayerForScrollableArea(ScrollableArea*); |
static GraphicsLayer* verticalScrollbarLayerForScrollableArea(ScrollableArea*); |
-#endif |
unsigned computeCurrentWheelEventHandlerCount(); |
GraphicsLayer* scrollLayerForFrameView(FrameView*); |
@@ -181,20 +125,26 @@ protected: |
Page* m_page; |
private: |
- virtual void recomputeWheelEventHandlerCountForFrameView(FrameView*) { } |
- virtual void setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons) { } |
+ void recomputeWheelEventHandlerCountForFrameView(FrameView*); |
+ void setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons); |
- virtual bool hasVisibleSlowRepaintViewportConstrainedObjects(FrameView*) const; |
+ bool hasVisibleSlowRepaintViewportConstrainedObjects(FrameView*) const; |
void updateShouldUpdateScrollLayerPositionOnMainThread(); |
- void updateMainFrameScrollPositionTimerFired(Timer<ScrollingCoordinator>*); |
+ static WebKit::WebLayer* scrollingWebLayerForScrollableArea(ScrollableArea*); |
+ |
+ void setNonFastScrollableRegion(const Region&); |
+ void setTouchEventTargetRects(const Vector<IntRect>&); |
+ void setWheelEventHandlerCount(unsigned); |
+ |
+ WebKit::WebScrollbarLayer* addWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation, PassOwnPtr<WebKit::WebScrollbarLayer>); |
+ WebKit::WebScrollbarLayer* getWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation); |
+ void removeWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation); |
- Timer<ScrollingCoordinator> m_updateMainFrameScrollPositionTimer; |
- IntPoint m_scheduledUpdateScrollPosition; |
- bool m_scheduledUpdateIsProgrammaticScroll; |
- SetOrSyncScrollingLayerPosition m_scheduledScrollingLayerPositionAction; |
+ typedef HashMap<ScrollableArea*, OwnPtr<WebKit::WebScrollbarLayer> > ScrollbarMap; |
+ ScrollbarMap m_horizontalScrollbars; |
+ ScrollbarMap m_verticalScrollbars; |
- bool m_forceMainThreadScrollLayerPositionUpdates; |
}; |
} // namespace WebCore |