Index: Source/WebCore/page/scrolling/ScrollingCoordinator.cpp |
diff --git a/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp b/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp |
index 37587ac45dece47d28c8d321526aec930b268f1c..b0fe6878aebcef7a337ecd758ca4540aea95367a 100644 |
--- a/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp |
+++ b/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp |
@@ -31,70 +31,303 @@ |
#include "Frame.h" |
#include "FrameView.h" |
#include "GraphicsLayer.h" |
+#include "GraphicsLayerChromium.h" |
#include "IntRect.h" |
#include "Page.h" |
#include "PlatformWheelEvent.h" |
#include "PluginViewBase.h" |
#include "Region.h" |
+#include "RenderLayerBacking.h" |
+#include "RenderLayerCompositor.h" |
#include "RenderView.h" |
#include "ScrollAnimator.h" |
-#include <wtf/MainThread.h> |
+#include "ScrollbarThemeComposite.h" |
+#include "WebScrollbarImpl.h" |
+#include "WebScrollbarThemeGeometryNative.h" |
+#include <public/Platform.h> |
+#include <public/WebCompositorSupport.h> |
+#include <public/WebLayerPositionConstraint.h> |
+#include <public/WebScrollbar.h> |
+#include <public/WebScrollbarLayer.h> |
+#include <public/WebScrollbarThemeGeometry.h> |
+#include <public/WebScrollbarThemePainter.h> |
+ |
+using WebKit::WebLayer; |
+using WebKit::WebLayerPositionConstraint; |
+using WebKit::WebRect; |
+using WebKit::WebScrollbarLayer; |
+using WebKit::WebVector; |
-#if USE(ACCELERATED_COMPOSITING) |
-#include "RenderLayerCompositor.h" |
-#endif |
-#if ENABLE(THREADED_SCROLLING) |
-#include "ScrollingCoordinatorMac.h" |
-#endif |
+namespace WebCore { |
-#if PLATFORM(CHROMIUM) |
-#include "ScrollingCoordinatorChromium.h" |
-#endif |
+static WebLayer* scrollingWebLayerForGraphicsLayer(GraphicsLayer* layer) |
+{ |
+ return layer->platformLayer(); |
+} |
-#if USE(COORDINATED_GRAPHICS) |
-#include "ScrollingCoordinatorCoordinatedGraphics.h" |
-#endif |
+WebLayer* ScrollingCoordinator::scrollingWebLayerForScrollableArea(ScrollableArea* scrollableArea) |
+{ |
+ GraphicsLayer* graphicsLayer = scrollLayerForScrollableArea(scrollableArea); |
+ return graphicsLayer ? scrollingWebLayerForGraphicsLayer(graphicsLayer) : 0; |
+} |
-#if PLATFORM(BLACKBERRY) |
-#include "ScrollingCoordinatorBlackBerry.h" |
-#endif |
+PassRefPtr<ScrollingCoordinator> ScrollingCoordinator::create(Page* page) |
+{ |
+ return adoptRef(new ScrollingCoordinator(page)); |
+} |
-namespace WebCore { |
+ScrollingCoordinator::ScrollingCoordinator(Page* page) |
+ : m_page(page) |
+{ |
+} |
-PassRefPtr<ScrollingCoordinator> ScrollingCoordinator::create(Page* page) |
+ScrollingCoordinator::~ScrollingCoordinator() |
{ |
-#if USE(ACCELERATED_COMPOSITING) && ENABLE(THREADED_SCROLLING) |
- return adoptRef(new ScrollingCoordinatorMac(page)); |
-#endif |
+ ASSERT(!m_page); |
+ for (ScrollbarMap::iterator it = m_horizontalScrollbars.begin(); it != m_horizontalScrollbars.end(); ++it) |
+ GraphicsLayerChromium::unregisterContentsLayer(it->value->layer()); |
+ for (ScrollbarMap::iterator it = m_verticalScrollbars.begin(); it != m_verticalScrollbars.end(); ++it) |
+ GraphicsLayerChromium::unregisterContentsLayer(it->value->layer()); |
+ |
+} |
+ |
+void ScrollingCoordinator::setNonFastScrollableRegion(const Region& region) |
+{ |
+ if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(m_page->mainFrame()->view())) { |
+ Vector<IntRect> rects = region.rects(); |
+ WebVector<WebRect> webRects(rects.size()); |
+ for (size_t i = 0; i < rects.size(); ++i) |
+ webRects[i] = rects[i]; |
+ scrollLayer->setNonFastScrollableRegion(webRects); |
+ } |
+} |
-#if PLATFORM(CHROMIUM) |
- return adoptRef(new ScrollingCoordinatorChromium(page)); |
+void ScrollingCoordinator::frameViewLayoutUpdated(FrameView* frameView) |
+{ |
+ ASSERT(m_page); |
+ |
+ // Compute the region of the page that we can't do fast scrolling for. This currently includes |
+ // all scrollable areas, such as subframes, overflow divs and list boxes, whose composited |
+ // scrolling are not enabled. We need to do this even if the frame view whose layout was updated |
+ // is not the main frame. |
+ Region nonFastScrollableRegion = computeNonFastScrollableRegion(m_page->mainFrame(), IntPoint()); |
+ setNonFastScrollableRegion(nonFastScrollableRegion); |
+#if ENABLE(TOUCH_EVENT_TRACKING) |
+ Vector<IntRect> touchEventTargetRects; |
+ computeAbsoluteTouchEventTargetRects(m_page->mainFrame()->document(), touchEventTargetRects); |
+ setTouchEventTargetRects(touchEventTargetRects); |
#endif |
+ if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(frameView)) |
+ scrollLayer->setBounds(frameView->contentsSize()); |
+} |
+ |
+void ScrollingCoordinator::setLayerIsContainerForFixedPositionLayers(GraphicsLayer* layer, bool enable) |
+{ |
+ if (WebLayer* scrollableLayer = scrollingWebLayerForGraphicsLayer(layer)) |
+ scrollableLayer->setIsContainerForFixedPositionLayers(enable); |
+} |
+ |
+static void clearPositionConstraintExceptForLayer(GraphicsLayer* layer, GraphicsLayer* except) |
+{ |
+ if (layer && layer != except && scrollingWebLayerForGraphicsLayer(layer)) |
+ scrollingWebLayerForGraphicsLayer(layer)->setPositionConstraint(WebLayerPositionConstraint()); |
+} |
+ |
+static WebLayerPositionConstraint computePositionConstraint(const RenderLayer* layer) |
+{ |
+ ASSERT(layer->isComposited()); |
+ do { |
+ if (layer->renderer()->style()->position() == FixedPosition) { |
+ const RenderObject* fixedPositionObject = layer->renderer(); |
+ bool fixedToRight = !fixedPositionObject->style()->right().isAuto(); |
+ bool fixedToBottom = !fixedPositionObject->style()->bottom().isAuto(); |
+ return WebLayerPositionConstraint::fixedPosition(fixedToRight, fixedToBottom); |
+ } |
+ |
+ layer = layer->parent(); |
+ } while (layer && !layer->isComposited()); |
+ return WebLayerPositionConstraint(); |
+} |
+ |
+void ScrollingCoordinator::updateLayerPositionConstraint(RenderLayer* layer) |
+{ |
+ ASSERT(layer->backing()); |
+ RenderLayerBacking* backing = layer->backing(); |
+ GraphicsLayer* mainLayer = backing->childForSuperlayers(); |
+ |
+ // Avoid unnecessary commits |
+ clearPositionConstraintExceptForLayer(backing->ancestorClippingLayer(), mainLayer); |
+ clearPositionConstraintExceptForLayer(backing->contentsContainmentLayer(), mainLayer); |
+ clearPositionConstraintExceptForLayer(backing->graphicsLayer(), mainLayer); |
+ |
+ if (WebLayer* scrollableLayer = scrollingWebLayerForGraphicsLayer(mainLayer)) |
+ scrollableLayer->setPositionConstraint(computePositionConstraint(layer)); |
+} |
-#if USE(COORDINATED_GRAPHICS) |
- return adoptRef(new ScrollingCoordinatorCoordinatedGraphics(page)); |
+void ScrollingCoordinator::willDestroyScrollableArea(ScrollableArea* scrollableArea) |
+{ |
+ removeWebScrollbarLayer(scrollableArea, HorizontalScrollbar); |
+ removeWebScrollbarLayer(scrollableArea, VerticalScrollbar); |
+} |
+ |
+void ScrollingCoordinator::removeWebScrollbarLayer(ScrollableArea* scrollableArea, ScrollbarOrientation orientation) |
+{ |
+ ScrollbarMap& scrollbars = orientation == HorizontalScrollbar ? m_horizontalScrollbars : m_verticalScrollbars; |
+ if (OwnPtr<WebScrollbarLayer> scrollbarLayer = scrollbars.take(scrollableArea)) |
+ GraphicsLayerChromium::unregisterContentsLayer(scrollbarLayer->layer()); |
+} |
+ |
+static PassOwnPtr<WebScrollbarLayer> createScrollbarLayer(Scrollbar* scrollbar) |
+{ |
+ // All Chromium scrollbar themes derive from ScrollbarThemeComposite. |
+ ScrollbarThemeComposite* themeComposite = static_cast<ScrollbarThemeComposite*>(scrollbar->theme()); |
+ WebKit::WebScrollbarThemePainter painter(themeComposite, scrollbar); |
+ OwnPtr<WebKit::WebScrollbarThemeGeometry> geometry(WebKit::WebScrollbarThemeGeometryNative::create(themeComposite)); |
+ |
+ OwnPtr<WebScrollbarLayer> scrollbarLayer = adoptPtr(WebKit::Platform::current()->compositorSupport()->createScrollbarLayer(new WebKit::WebScrollbarImpl(scrollbar), painter, geometry.leakPtr())); |
+ GraphicsLayerChromium::registerContentsLayer(scrollbarLayer->layer()); |
+ return scrollbarLayer.release(); |
+} |
+ |
+static void detachScrollbarLayer(GraphicsLayer* scrollbarGraphicsLayer) |
+{ |
+ ASSERT(scrollbarGraphicsLayer); |
+ |
+ scrollbarGraphicsLayer->setContentsToPlatformLayer(0); |
+ scrollbarGraphicsLayer->setDrawsContent(true); |
+} |
+ |
+static void setupScrollbarLayer(GraphicsLayer* scrollbarGraphicsLayer, WebScrollbarLayer* scrollbarLayer, WebLayer* scrollLayer) |
+{ |
+ ASSERT(scrollbarGraphicsLayer); |
+ ASSERT(scrollbarLayer); |
+ |
+ if (!scrollLayer) { |
+ detachScrollbarLayer(scrollbarGraphicsLayer); |
+ return; |
+ } |
+ scrollbarLayer->setScrollLayer(scrollLayer); |
+ scrollbarGraphicsLayer->setContentsToPlatformLayer(scrollbarLayer->layer()); |
+ scrollbarGraphicsLayer->setDrawsContent(false); |
+} |
+ |
+WebScrollbarLayer* ScrollingCoordinator::addWebScrollbarLayer(ScrollableArea* scrollableArea, ScrollbarOrientation orientation, PassOwnPtr<WebKit::WebScrollbarLayer> scrollbarLayer) |
+{ |
+ ScrollbarMap& scrollbars = orientation == HorizontalScrollbar ? m_horizontalScrollbars : m_verticalScrollbars; |
+ return scrollbars.add(scrollableArea, scrollbarLayer).iterator->value.get(); |
+} |
+ |
+WebScrollbarLayer* ScrollingCoordinator::getWebScrollbarLayer(ScrollableArea* scrollableArea, ScrollbarOrientation orientation) |
+{ |
+ ScrollbarMap& scrollbars = orientation == HorizontalScrollbar ? m_horizontalScrollbars : m_verticalScrollbars; |
+ return scrollbars.get(scrollableArea); |
+} |
+ |
+void ScrollingCoordinator::scrollableAreaScrollbarLayerDidChange(ScrollableArea* scrollableArea, ScrollbarOrientation orientation) |
+{ |
+#if OS(DARWIN) |
+ static const bool platformSupportsCoordinatedScrollbar = false; |
+ static const bool platformSupportsMainFrameOnly = false; // Don't care. |
+#elif OS(WINDOWS) |
+ static const bool platformSupportsCoordinatedScrollbar = true; |
+ static const bool platformSupportsMainFrameOnly = true; |
+#else |
+ static const bool platformSupportsCoordinatedScrollbar = true; |
+ static const bool platformSupportsMainFrameOnly = false; |
#endif |
+ if (!platformSupportsCoordinatedScrollbar) |
+ return; |
+ |
+ bool isMainFrame = (scrollableArea == static_cast<ScrollableArea*>(m_page->mainFrame()->view())); |
+ if (!isMainFrame && platformSupportsMainFrameOnly) |
+ return; |
-#if PLATFORM(BLACKBERRY) |
- return adoptRef(new ScrollingCoordinatorBlackBerry(page)); |
+ GraphicsLayer* scrollbarGraphicsLayer = orientation == HorizontalScrollbar ? horizontalScrollbarLayerForScrollableArea(scrollableArea) : verticalScrollbarLayerForScrollableArea(scrollableArea); |
+ if (scrollbarGraphicsLayer) { |
+ Scrollbar* scrollbar = orientation == HorizontalScrollbar ? scrollableArea->horizontalScrollbar() : scrollableArea->verticalScrollbar(); |
+ if (scrollbar->isCustomScrollbar()) { |
+ detachScrollbarLayer(scrollbarGraphicsLayer); |
+ return; |
+ } |
+ |
+ WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea, orientation); |
+ if (!scrollbarLayer) |
+ scrollbarLayer = addWebScrollbarLayer(scrollableArea, orientation, createScrollbarLayer(scrollbar)); |
+ |
+ // Root layer non-overlay scrollbars should be marked opaque to disable |
+ // blending. |
+ bool isOpaqueScrollbar = !scrollbar->isOverlayScrollbar(); |
+ if (!scrollbarGraphicsLayer->contentsOpaque()) |
+ scrollbarGraphicsLayer->setContentsOpaque(isMainFrame && isOpaqueScrollbar); |
+ scrollbarLayer->layer()->setOpaque(scrollbarGraphicsLayer->contentsOpaque()); |
+ |
+ setupScrollbarLayer(scrollbarGraphicsLayer, scrollbarLayer, scrollingWebLayerForScrollableArea(scrollableArea)); |
+ } else |
+ removeWebScrollbarLayer(scrollableArea, orientation); |
+} |
+ |
+void ScrollingCoordinator::scrollableAreaScrollLayerDidChange(ScrollableArea* scrollableArea) |
+{ |
+ GraphicsLayerChromium* scrollLayer = static_cast<GraphicsLayerChromium*>(scrollLayerForScrollableArea(scrollableArea)); |
+ if (scrollLayer) |
+ scrollLayer->setScrollableArea(scrollableArea); |
+ |
+ WebLayer* webLayer = scrollingWebLayerForScrollableArea(scrollableArea); |
+ if (webLayer) { |
+ webLayer->setScrollable(true); |
+ webLayer->setScrollPosition(IntPoint(scrollableArea->scrollPosition() - scrollableArea->minimumScrollPosition())); |
+ webLayer->setMaxScrollPosition(IntSize(scrollableArea->scrollSize(HorizontalScrollbar), scrollableArea->scrollSize(VerticalScrollbar))); |
+ } |
+ if (WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea, HorizontalScrollbar)) |
+ setupScrollbarLayer(horizontalScrollbarLayerForScrollableArea(scrollableArea), scrollbarLayer, webLayer); |
+ if (WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea, VerticalScrollbar)) |
+ setupScrollbarLayer(verticalScrollbarLayerForScrollableArea(scrollableArea), scrollbarLayer, webLayer); |
+} |
+ |
+void ScrollingCoordinator::setTouchEventTargetRects(const Vector<IntRect>& absoluteHitTestRects) |
+{ |
+ if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(m_page->mainFrame()->view())) { |
+ WebVector<WebRect> webRects(absoluteHitTestRects.size()); |
+ for (size_t i = 0; i < absoluteHitTestRects.size(); ++i) |
+ webRects[i] = absoluteHitTestRects[i]; |
+ scrollLayer->setTouchEventHandlerRegion(webRects); |
+ } |
+} |
+ |
+void ScrollingCoordinator::touchEventTargetRectsDidChange(const Document*) |
+{ |
+#if ENABLE(TOUCH_EVENT_TRACKING) |
+ // The rects are always evaluated and used in the main frame coordinates. |
+ FrameView* frameView = m_page->mainFrame()->view(); |
+ Document* document = m_page->mainFrame()->document(); |
+ |
+ // Wait until after layout to update. |
+ if (frameView->needsLayout() || !document) |
+ return; |
+ |
+ Vector<IntRect> touchEventTargetRects; |
+ computeAbsoluteTouchEventTargetRects(document, touchEventTargetRects); |
+ setTouchEventTargetRects(touchEventTargetRects); |
#endif |
+} |
- return adoptRef(new ScrollingCoordinator(page)); |
+void ScrollingCoordinator::setWheelEventHandlerCount(unsigned count) |
+{ |
+ if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(m_page->mainFrame()->view())) |
+ scrollLayer->setHaveWheelEventHandlers(count > 0); |
} |
-ScrollingCoordinator::ScrollingCoordinator(Page* page) |
- : m_page(page) |
- , m_updateMainFrameScrollPositionTimer(this, &ScrollingCoordinator::updateMainFrameScrollPositionTimerFired) |
- , m_scheduledUpdateIsProgrammaticScroll(false) |
- , m_scheduledScrollingLayerPositionAction(SyncScrollingLayerPosition) |
- , m_forceMainThreadScrollLayerPositionUpdates(false) |
+void ScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView(FrameView* frameView) |
{ |
+ UNUSED_PARAM(frameView); |
+ setWheelEventHandlerCount(computeCurrentWheelEventHandlerCount()); |
} |
-ScrollingCoordinator::~ScrollingCoordinator() |
+void ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons reasons) |
{ |
- ASSERT(!m_page); |
+ if (WebLayer* scrollLayer = scrollingWebLayerForScrollableArea(m_page->mainFrame()->view())) |
+ scrollLayer->setShouldScrollOnMainThread(reasons); |
} |
void ScrollingCoordinator::pageDestroyed() |
@@ -113,14 +346,10 @@ bool ScrollingCoordinator::coordinatesScrollingForFrameView(FrameView* frameView |
return false; |
// We currently only support composited mode. |
-#if USE(ACCELERATED_COMPOSITING) |
RenderView* renderView = m_page->mainFrame()->contentRenderer(); |
if (!renderView) |
return false; |
return renderView->usesCompositing(); |
-#else |
- return false; |
-#endif |
} |
Region ScrollingCoordinator::computeNonFastScrollableRegion(const Frame* frame, const IntPoint& frameLocation) const |
@@ -136,11 +365,9 @@ Region ScrollingCoordinator::computeNonFastScrollableRegion(const Frame* frame, |
if (const FrameView::ScrollableAreaSet* scrollableAreas = frameView->scrollableAreas()) { |
for (FrameView::ScrollableAreaSet::const_iterator it = scrollableAreas->begin(), end = scrollableAreas->end(); it != end; ++it) { |
ScrollableArea* scrollableArea = *it; |
-#if USE(ACCELERATED_COMPOSITING) |
// Composited scrollable areas can be scrolled off the main thread. |
if (scrollableArea->usesCompositedScrolling()) |
continue; |
-#endif |
IntRect box = scrollableArea->scrollableAreaBoundingBox(); |
box.moveBy(offset); |
nonFastScrollableRegion.unite(box); |
@@ -280,7 +507,6 @@ void ScrollingCoordinator::frameViewFixedObjectsDidChange(FrameView* frameView) |
updateShouldUpdateScrollLayerPositionOnMainThread(); |
} |
-#if USE(ACCELERATED_COMPOSITING) |
GraphicsLayer* ScrollingCoordinator::scrollLayerForScrollableArea(ScrollableArea* scrollableArea) |
{ |
return scrollableArea->layerForScrolling(); |
@@ -295,11 +521,9 @@ GraphicsLayer* ScrollingCoordinator::verticalScrollbarLayerForScrollableArea(Scr |
{ |
return scrollableArea->layerForVerticalScrollbar(); |
} |
-#endif |
GraphicsLayer* ScrollingCoordinator::scrollLayerForFrameView(FrameView* frameView) |
{ |
-#if USE(ACCELERATED_COMPOSITING) |
Frame* frame = frameView->frame(); |
if (!frame) |
return 0; |
@@ -308,15 +532,10 @@ GraphicsLayer* ScrollingCoordinator::scrollLayerForFrameView(FrameView* frameVie |
if (!renderView) |
return 0; |
return renderView->compositor()->scrollLayer(); |
-#else |
- UNUSED_PARAM(frameView); |
- return 0; |
-#endif |
} |
GraphicsLayer* ScrollingCoordinator::counterScrollingLayerForFrameView(FrameView* frameView) |
{ |
-#if USE(ACCELERATED_COMPOSITING) |
Frame* frame = frameView->frame(); |
if (!frame) |
return 0; |
@@ -325,10 +544,6 @@ GraphicsLayer* ScrollingCoordinator::counterScrollingLayerForFrameView(FrameView |
if (!renderView) |
return 0; |
return renderView->compositor()->fixedRootBackgroundLayer(); |
-#else |
- UNUSED_PARAM(frameView); |
- return 0; |
-#endif |
} |
void ScrollingCoordinator::frameViewRootLayerDidChange(FrameView* frameView) |
@@ -344,75 +559,7 @@ void ScrollingCoordinator::frameViewRootLayerDidChange(FrameView* frameView) |
updateShouldUpdateScrollLayerPositionOnMainThread(); |
} |
-void ScrollingCoordinator::scheduleUpdateMainFrameScrollPosition(const IntPoint& scrollPosition, bool programmaticScroll, SetOrSyncScrollingLayerPosition scrollingLayerPositionAction) |
-{ |
- if (m_updateMainFrameScrollPositionTimer.isActive()) { |
- if (m_scheduledUpdateIsProgrammaticScroll == programmaticScroll |
- && m_scheduledScrollingLayerPositionAction == scrollingLayerPositionAction) { |
- m_scheduledUpdateScrollPosition = scrollPosition; |
- return; |
- } |
- |
- // If the parameters don't match what was previosly scheduled, dispatch immediately. |
- m_updateMainFrameScrollPositionTimer.stop(); |
- updateMainFrameScrollPosition(m_scheduledUpdateScrollPosition, m_scheduledUpdateIsProgrammaticScroll, m_scheduledScrollingLayerPositionAction); |
- updateMainFrameScrollPosition(scrollPosition, programmaticScroll, scrollingLayerPositionAction); |
- return; |
- } |
- |
- m_scheduledUpdateScrollPosition = scrollPosition; |
- m_scheduledUpdateIsProgrammaticScroll = programmaticScroll; |
- m_scheduledScrollingLayerPositionAction = scrollingLayerPositionAction; |
- m_updateMainFrameScrollPositionTimer.startOneShot(0); |
-} |
- |
-void ScrollingCoordinator::updateMainFrameScrollPositionTimerFired(Timer<ScrollingCoordinator>*) |
-{ |
- updateMainFrameScrollPosition(m_scheduledUpdateScrollPosition, m_scheduledUpdateIsProgrammaticScroll, m_scheduledScrollingLayerPositionAction); |
-} |
- |
-void ScrollingCoordinator::updateMainFrameScrollPosition(const IntPoint& scrollPosition, bool programmaticScroll, SetOrSyncScrollingLayerPosition scrollingLayerPositionAction) |
-{ |
- ASSERT(isMainThread()); |
- |
- if (!m_page) |
- return; |
- |
- FrameView* frameView = m_page->mainFrame()->view(); |
- if (!frameView) |
- return; |
- |
- bool oldProgrammaticScroll = frameView->inProgrammaticScroll(); |
- frameView->setInProgrammaticScroll(programmaticScroll); |
- |
- frameView->setConstrainsScrollingToContentEdge(false); |
- frameView->notifyScrollPositionChanged(scrollPosition); |
- frameView->setConstrainsScrollingToContentEdge(true); |
- |
- frameView->setInProgrammaticScroll(oldProgrammaticScroll); |
- |
-#if USE(ACCELERATED_COMPOSITING) |
- if (GraphicsLayer* scrollLayer = scrollLayerForFrameView(frameView)) { |
- GraphicsLayer* counterScrollingLayer = counterScrollingLayerForFrameView(frameView); |
- if (programmaticScroll || scrollingLayerPositionAction == SetScrollingLayerPosition) { |
- scrollLayer->setPosition(-frameView->scrollPosition()); |
- if (counterScrollingLayer) |
- counterScrollingLayer->setPosition(IntPoint(frameView->scrollOffsetForFixedPosition())); |
- } else { |
- scrollLayer->syncPosition(-frameView->scrollPosition()); |
- if (counterScrollingLayer) |
- counterScrollingLayer->syncPosition(IntPoint(frameView->scrollOffsetForFixedPosition())); |
- |
- LayoutRect viewportRect = frameView->viewportConstrainedVisibleContentRect(); |
- syncChildPositions(viewportRect); |
- } |
- } |
-#else |
- UNUSED_PARAM(scrollingLayerPositionAction); |
-#endif |
-} |
- |
-#if PLATFORM(MAC) || (PLATFORM(CHROMIUM) && OS(DARWIN)) |
+#if OS(DARWIN) |
void ScrollingCoordinator::handleWheelEventPhase(PlatformWheelEventPhase phase) |
{ |
ASSERT(isMainThread()); |
@@ -434,7 +581,6 @@ bool ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects(Frame |
if (!viewportConstrainedObjects) |
return false; |
-#if USE(ACCELERATED_COMPOSITING) |
for (FrameView::ViewportConstrainedObjectSet::const_iterator it = viewportConstrainedObjects->begin(), end = viewportConstrainedObjects->end(); it != end; ++it) { |
RenderObject* viewportConstrainedObject = *it; |
if (!viewportConstrainedObject->isBoxModelObject() || !viewportConstrainedObject->hasLayer()) |
@@ -445,9 +591,6 @@ bool ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects(Frame |
return true; |
} |
return false; |
-#else |
- return viewportConstrainedObjects->size(); |
-#endif |
} |
MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() const |
@@ -458,8 +601,6 @@ MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co |
MainThreadScrollingReasons mainThreadScrollingReasons = (MainThreadScrollingReasons)0; |
- if (m_forceMainThreadScrollLayerPositionUpdates) |
- mainThreadScrollingReasons |= ForcedOnMainThread; |
if (frameView->hasSlowRepaintObjects()) |
mainThreadScrollingReasons |= HasSlowRepaintObjects; |
if (!supportsFixedPositionLayers() && frameView->hasViewportConstrainedObjects()) |
@@ -477,32 +618,10 @@ void ScrollingCoordinator::updateShouldUpdateScrollLayerPositionOnMainThread() |
setShouldUpdateScrollLayerPositionOnMainThread(mainThreadScrollingReasons()); |
} |
-void ScrollingCoordinator::setForceMainThreadScrollLayerPositionUpdates(bool forceMainThreadScrollLayerPositionUpdates) |
-{ |
- if (m_forceMainThreadScrollLayerPositionUpdates == forceMainThreadScrollLayerPositionUpdates) |
- return; |
- |
- m_forceMainThreadScrollLayerPositionUpdates = forceMainThreadScrollLayerPositionUpdates; |
- updateShouldUpdateScrollLayerPositionOnMainThread(); |
-} |
- |
-ScrollingNodeID ScrollingCoordinator::uniqueScrollLayerID() |
-{ |
- static ScrollingNodeID uniqueScrollLayerID = 1; |
- return uniqueScrollLayerID++; |
-} |
- |
-String ScrollingCoordinator::scrollingStateTreeAsText() const |
-{ |
- return String(); |
-} |
- |
String ScrollingCoordinator::mainThreadScrollingReasonsAsText(MainThreadScrollingReasons reasons) |
{ |
StringBuilder stringBuilder; |
- if (reasons & ScrollingCoordinator::ForcedOnMainThread) |
- stringBuilder.append("Forced on main thread, "); |
if (reasons & ScrollingCoordinator::HasSlowRepaintObjects) |
stringBuilder.append("Has slow repaint objects, "); |
if (reasons & ScrollingCoordinator::HasViewportConstrainedObjectsWithoutSupportingFixedLayers) |