CCInputHandlerClient::ScrollStatus CCLayerImpl::tryScroll(const IntPoint& viewportPoint, CCInputHandlerClient::ScrollInputType type) const { if (shouldScrollOnMainThread()) { TRACE_EVENT("tryScroll Failed shouldScrollOnMainThread", this, 0); return CCInputHandlerClient::ScrollFailed; } if (!screenSpaceTransform().isInvertible()) { TRACE_EVENT("tryScroll Failed nonInvertibleTransform", this, 0); return CCInputHandlerClient::ScrollIgnored; } IntPoint contentPoint(screenSpaceTransform().inverse().mapPoint(viewportPoint)); if (nonFastScrollableRegion().contains(contentPoint)) { TRACE_EVENT("tryScroll Failed nonFastScrollableRegion", this, 0); return CCInputHandlerClient::ScrollFailed; } if (type == CCInputHandlerClient::Wheel && haveWheelEventHandlers()) { TRACE_EVENT("tryScroll Failed wheelEventHandlers", this, 0); return CCInputHandlerClient::ScrollFailed; } if (!scrollable()) { TRACE_EVENT("tryScroll Ignored not scrollable", this, 0); return CCInputHandlerClient::ScrollIgnored; } return CCInputHandlerClient::ScrollStarted; }
CCInputHandlerClient::ScrollStatus CCLayerImpl::tryScroll(const IntPoint& viewportPoint, CCInputHandlerClient::ScrollInputType type) const { if (shouldScrollOnMainThread()) { TRACE_EVENT0("cc", "CCLayerImpl::tryScroll: Failed shouldScrollOnMainThread"); return CCInputHandlerClient::ScrollOnMainThread; } if (!screenSpaceTransform().isInvertible()) { TRACE_EVENT0("cc", "CCLayerImpl::tryScroll: Ignored nonInvertibleTransform"); return CCInputHandlerClient::ScrollIgnored; } if (!nonFastScrollableRegion().isEmpty()) { bool clipped = false; FloatPoint hitTestPointInLocalSpace = CCMathUtil::projectPoint(screenSpaceTransform().inverse(), FloatPoint(viewportPoint), clipped); if (!clipped && nonFastScrollableRegion().contains(flooredIntPoint(hitTestPointInLocalSpace))) { TRACE_EVENT0("cc", "CCLayerImpl::tryScroll: Failed nonFastScrollableRegion"); return CCInputHandlerClient::ScrollOnMainThread; } } if (type == CCInputHandlerClient::Wheel && haveWheelEventHandlers()) { TRACE_EVENT0("cc", "CCLayerImpl::tryScroll: Failed wheelEventHandlers"); return CCInputHandlerClient::ScrollOnMainThread; } if (!scrollable()) { TRACE_EVENT0("cc", "CCLayerImpl::tryScroll: Ignored not scrollable"); return CCInputHandlerClient::ScrollIgnored; } return CCInputHandlerClient::ScrollStarted; }