SynchronousScrollingReasons ScrollingCoordinator::synchronousScrollingReasons(FrameView* frameView) const { if (!frameView) return static_cast<SynchronousScrollingReasons>(0); SynchronousScrollingReasons synchronousScrollingReasons = (SynchronousScrollingReasons)0; if (m_forceSynchronousScrollLayerPositionUpdates) synchronousScrollingReasons |= ForcedOnMainThread; #if ENABLE(WEB_REPLAY) InputCursor& cursor = m_page->replayController().activeInputCursor(); if (cursor.isCapturing() || cursor.isReplaying()) synchronousScrollingReasons |= ForcedOnMainThread; #endif if (frameView->hasSlowRepaintObjects()) synchronousScrollingReasons |= HasSlowRepaintObjects; if (!supportsFixedPositionLayers() && frameView->hasViewportConstrainedObjects()) synchronousScrollingReasons |= HasViewportConstrainedObjectsWithoutSupportingFixedLayers; if (supportsFixedPositionLayers() && hasVisibleSlowRepaintViewportConstrainedObjects(frameView)) synchronousScrollingReasons |= HasNonLayerViewportConstrainedObjects; if (frameView->frame().mainFrame().document() && frameView->frame().document()->isImageDocument()) synchronousScrollingReasons |= IsImageDocument; return synchronousScrollingReasons; }
MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() const { FrameView* frameView = m_page->mainFrame()->view(); MainThreadScrollingReasons mainThreadScrollingReasons = (MainThreadScrollingReasons)0; if (m_forceMainThreadScrollLayerPositionUpdates) mainThreadScrollingReasons |= ForcedOnMainThread; if (frameView->hasSlowRepaintObjects()) mainThreadScrollingReasons |= HasSlowRepaintObjects; if (!supportsFixedPositionLayers() && frameView->hasViewportConstrainedObjects()) mainThreadScrollingReasons |= HasViewportConstrainedObjectsWithoutSupportingFixedLayers; if (supportsFixedPositionLayers() && hasNonLayerFixedObjects(frameView)) mainThreadScrollingReasons |= HasNonLayerFixedObjects; if (m_page->mainFrame()->document()->isImageDocument()) mainThreadScrollingReasons |= IsImageDocument; return mainThreadScrollingReasons; }
SynchronousScrollingReasons ScrollingCoordinator::synchronousScrollingReasons() const { FrameView* frameView = m_page->mainFrame().view(); if (!frameView) return static_cast<SynchronousScrollingReasons>(0); SynchronousScrollingReasons synchronousScrollingReasons = (SynchronousScrollingReasons)0; if (m_forceSynchronousScrollLayerPositionUpdates) synchronousScrollingReasons |= ForcedOnMainThread; if (frameView->hasSlowRepaintObjects()) synchronousScrollingReasons |= HasSlowRepaintObjects; if (!supportsFixedPositionLayers() && frameView->hasViewportConstrainedObjects()) synchronousScrollingReasons |= HasViewportConstrainedObjectsWithoutSupportingFixedLayers; if (supportsFixedPositionLayers() && hasVisibleSlowRepaintViewportConstrainedObjects(frameView)) synchronousScrollingReasons |= HasNonLayerViewportConstrainedObjects; if (m_page->mainFrame().document() && m_page->mainFrame().document()->isImageDocument()) synchronousScrollingReasons |= IsImageDocument; return synchronousScrollingReasons; }
void ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode(ScrollingNodeID nodeID, const ViewportConstraints& constraints, GraphicsLayer* graphicsLayer) { ASSERT(supportsFixedPositionLayers()); ScrollingStateNode* node = m_scrollingStateTree->stateNodeForID(nodeID); if (!node) return; switch (constraints.constraintType()) { case ViewportConstraints::FixedPositionConstraint: { toCoordinatedGraphicsLayer(graphicsLayer)->setFixedToViewport(true); // FIXME : Use constraints! downcast<ScrollingStateFixedNode>(*node).setLayer(graphicsLayer); break; } case ViewportConstraints::StickyPositionConstraint: break; // FIXME : Support sticky elements. default: ASSERT_NOT_REACHED(); } }
void AsyncScrollingCoordinator::updateViewportConstrainedNode(ScrollingNodeID nodeID, const ViewportConstraints& constraints, GraphicsLayer* graphicsLayer) { ASSERT(supportsFixedPositionLayers()); ScrollingStateNode* node = m_scrollingStateTree->stateNodeForID(nodeID); if (!node) return; switch (constraints.constraintType()) { case ViewportConstraints::FixedPositionConstraint: { ScrollingStateFixedNode& fixedNode = downcast<ScrollingStateFixedNode>(*node); fixedNode.setLayer(graphicsLayer); fixedNode.updateConstraints((const FixedPositionViewportConstraints&)constraints); break; } case ViewportConstraints::StickyPositionConstraint: { ScrollingStateStickyNode& stickyNode = downcast<ScrollingStateStickyNode>(*node); stickyNode.setLayer(graphicsLayer); stickyNode.updateConstraints((const StickyPositionViewportConstraints&)constraints); break; } } }