| Index: cc/layer_tree_host_impl.cc
|
| diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
|
| index b5b488d00958a9fe58f852071c69b5d26ebb3133..36c8d6738bf0de19f6cfe0da05694c025b583a5b 100644
|
| --- a/cc/layer_tree_host_impl.cc
|
| +++ b/cc/layer_tree_host_impl.cc
|
| @@ -265,13 +265,13 @@ void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool
|
| gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollLayer()->scrollDelta();
|
| gfx::SizeF scaledScrollableSize = activeTree()->ScrollableSize();
|
| if (!m_settings.pageScalePinchZoomEnabled) {
|
| - scrollTotal.Scale(1 / m_pinchZoomViewport.page_scale_factor());
|
| - scaledScrollableSize.Scale(1 / m_pinchZoomViewport.page_scale_factor());
|
| + scrollTotal.Scale(1 / activeTree()->page_scale_factor());
|
| + scaledScrollableSize.Scale(1 / activeTree()->page_scale_factor());
|
| }
|
| gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceScaleFactor);
|
|
|
| double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF();
|
| - m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomViewport.total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeSeconds);
|
| + m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, activeTree()->total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeSeconds);
|
|
|
| if (anchorPoint) {
|
| gfx::Vector2dF anchor(targetOffset);
|
| @@ -754,11 +754,11 @@ void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*)
|
| CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const
|
| {
|
| CompositorFrameMetadata metadata;
|
| - metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor();
|
| + metadata.page_scale_factor = activeTree()->total_page_scale_factor();
|
| metadata.viewport_size = activeTree()->ScrollableViewportSize();
|
| metadata.root_layer_size = activeTree()->ScrollableSize();
|
| - metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor();
|
| - metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor();
|
| + metadata.min_page_scale_factor = activeTree()->min_page_scale_factor();
|
| + metadata.max_page_scale_factor = activeTree()->max_page_scale_factor();
|
| if (m_topControlsManager) {
|
| metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager->controls_top_offset());
|
| metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topControlsManager->content_top_offset());
|
| @@ -769,7 +769,7 @@ CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const
|
|
|
| metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScrollLayer()->scrollDelta();
|
| if (!m_settings.pageScalePinchZoomEnabled)
|
| - metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_factor());
|
| + metadata.root_scroll_offset.Scale(1 / activeTree()->page_scale_factor());
|
|
|
| return metadata;
|
| }
|
| @@ -984,19 +984,7 @@ void LayerTreeHostImpl::activatePendingTree()
|
| TreeSynchronizer::pushProperties(m_pendingTree->RootLayer(), m_activeTree->RootLayer());
|
| DCHECK(!m_recycleTree);
|
|
|
| - // This should match the property synchronization in
|
| - // LayerTreeHost::finishCommitOnImplThread().
|
| - m_activeTree->set_source_frame_number(m_pendingTree->source_frame_number());
|
| - m_activeTree->set_background_color(m_pendingTree->background_color());
|
| - m_activeTree->set_has_transparent_background(m_pendingTree->has_transparent_background());
|
| - if (m_pendingTree->ContentsTexturesPurged())
|
| - m_activeTree->SetContentsTexturesPurged();
|
| - else
|
| - m_activeTree->ResetContentsTexturesPurged();
|
| - if (m_pendingTree->hud_layer())
|
| - m_activeTree->set_hud_layer(static_cast<HeadsUpDisplayLayerImpl*>(LayerTreeHostCommon::findLayerInSubtree(m_activeTree->RootLayer(), m_pendingTree->hud_layer()->id())));
|
| - else
|
| - m_activeTree->set_hud_layer(NULL);
|
| + m_pendingTree->pushPropertiesTo(m_activeTree.get());
|
|
|
| // Now that we've synced everything from the pending tree to the active
|
| // tree, rename the pending tree the recycle tree so we can reuse it on the
|
| @@ -1094,9 +1082,6 @@ void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con
|
| m_layoutViewportSize = layoutViewportSize;
|
| m_deviceViewportSize = deviceViewportSize;
|
|
|
| - m_pinchZoomViewport.set_layout_viewport_size(layoutViewportSize);
|
| - m_pinchZoomViewport.set_device_viewport_size(deviceViewportSize);
|
| -
|
| updateMaxScrollOffset();
|
|
|
| if (m_renderer)
|
| @@ -1126,43 +1111,8 @@ void LayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor)
|
| if (deviceScaleFactor == m_deviceScaleFactor)
|
| return;
|
| m_deviceScaleFactor = deviceScaleFactor;
|
| - m_pinchZoomViewport.set_device_scale_factor(m_deviceScaleFactor);
|
| -
|
| - updateMaxScrollOffset();
|
| -}
|
| -
|
| -float LayerTreeHostImpl::pageScaleFactor() const
|
| -{
|
| - return m_pinchZoomViewport.page_scale_factor();
|
| -}
|
| -
|
| -void LayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor)
|
| -{
|
| - if (!pageScaleFactor)
|
| - return;
|
| -
|
| - float pageScaleChange = pageScaleFactor / m_pinchZoomViewport.page_scale_factor();
|
| - m_pinchZoomViewport.SetPageScaleFactorAndLimits(pageScaleFactor, minPageScaleFactor, maxPageScaleFactor);
|
| -
|
| - if (!m_settings.pageScalePinchZoomEnabled && pageScaleChange != 1)
|
| - adjustScrollsForPageScaleChange(rootScrollLayer(), pageScaleChange);
|
| -
|
| - // Clamp delta to limits and refresh display matrix.
|
| - setPageScaleDelta(m_pinchZoomViewport.page_scale_delta() / m_pinchZoomViewport.sent_page_scale_delta());
|
| - m_pinchZoomViewport.set_sent_page_scale_delta(1);
|
| -}
|
| -
|
| -void LayerTreeHostImpl::setPageScaleDelta(float delta)
|
| -{
|
| - if (m_pinchZoomViewport.page_scale_delta() == delta)
|
| - return;
|
| -
|
| - m_pinchZoomViewport.set_page_scale_delta(delta);
|
|
|
| updateMaxScrollOffset();
|
| - activeTree()->set_needs_update_draw_properties();
|
| - if (pendingTree())
|
| - pendingTree()->set_needs_update_draw_properties();
|
| }
|
|
|
| void LayerTreeHostImpl::updateMaxScrollOffset()
|
| @@ -1385,19 +1335,17 @@ void LayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta, gfx::Point anchor
|
|
|
| // Keep the center-of-pinch anchor specified by (x, y) in a stable
|
| // position over the course of the magnify.
|
| - float pageScaleDelta = m_pinchZoomViewport.page_scale_delta();
|
| + float pageScaleDelta = activeTree()->page_scale_delta();
|
| gfx::PointF previousScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta);
|
| - setPageScaleDelta(pageScaleDelta * magnifyDelta);
|
| - pageScaleDelta = m_pinchZoomViewport.page_scale_delta();
|
| + activeTree()->SetPageScaleDelta(pageScaleDelta * magnifyDelta);
|
| + pageScaleDelta = activeTree()->page_scale_delta();
|
| gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta);
|
| gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor;
|
|
|
| m_previousPinchAnchor = anchor;
|
|
|
| - if (m_settings.pageScalePinchZoomEnabled) {
|
| - // Compute the application of the delta with respect to the current page zoom of the page.
|
| - move.Scale(1 / m_pinchZoomViewport.page_scale_factor());
|
| - }
|
| + if (m_settings.pageScalePinchZoomEnabled)
|
| + move.Scale(1 / activeTree()->page_scale_factor());
|
|
|
| rootScrollLayer()->scrollBy(move);
|
|
|
| @@ -1423,7 +1371,7 @@ void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo
|
| {
|
| gfx::Vector2dF scaledScrollOffset = m_pageScaleAnimation->targetScrollOffset();
|
| if (!m_settings.pageScalePinchZoomEnabled)
|
| - scaledScrollOffset.Scale(m_pinchZoomViewport.page_scale_factor());
|
| + scaledScrollOffset.Scale(activeTree()->page_scale_factor());
|
| makeScrollAndScaleSet(scrollInfo, ToFlooredVector2d(scaledScrollOffset), m_pageScaleAnimation->targetPageScaleFactor());
|
| }
|
|
|
| @@ -1436,41 +1384,27 @@ void LayerTreeHostImpl::computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo)
|
| // significant amount. This also ensures only one fake delta set will be
|
| // sent.
|
| const float pinchZoomOutSensitivity = 0.95f;
|
| - if (m_pinchZoomViewport.page_scale_delta() > pinchZoomOutSensitivity)
|
| + if (activeTree()->page_scale_delta() > pinchZoomOutSensitivity)
|
| return;
|
|
|
| // Compute where the scroll offset/page scale would be if fully pinch-zoomed
|
| // out from the anchor point.
|
| gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollLayer()->scrollDelta();
|
| - scrollBegin.Scale(m_pinchZoomViewport.page_scale_delta());
|
| - float scaleBegin = m_pinchZoomViewport.total_page_scale_factor();
|
| - float pageScaleDeltaToSend = m_pinchZoomViewport.min_page_scale_factor() / m_pinchZoomViewport.page_scale_factor();
|
| + scrollBegin.Scale(activeTree()->page_scale_delta());
|
| + float scaleBegin = activeTree()->total_page_scale_factor();
|
| + float pageScaleDeltaToSend = activeTree()->min_page_scale_factor() / activeTree()->page_scale_factor();
|
| gfx::SizeF scaledScrollableSize = gfx::ScaleSize(activeTree()->ScrollableSize(), pageScaleDeltaToSend);
|
|
|
| gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin();
|
| gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset;
|
| - scrollEnd.Scale(m_pinchZoomViewport.min_page_scale_factor() / scaleBegin);
|
| + scrollEnd.Scale(activeTree()->min_page_scale_factor() / scaleBegin);
|
| scrollEnd -= anchorOffset;
|
| scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx::Rect(m_deviceViewportSize).bottom_right());
|
| scrollEnd.ClampToMin(gfx::Vector2d());
|
| scrollEnd.Scale(1 / pageScaleDeltaToSend);
|
| scrollEnd.Scale(m_deviceScaleFactor);
|
|
|
| - makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), m_pinchZoomViewport.min_page_scale_factor());
|
| -}
|
| -
|
| -void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx::Vector2d scrollOffset, float pageScale)
|
| -{
|
| - if (!rootScrollLayer())
|
| - return;
|
| -
|
| - LayerTreeHostCommon::ScrollUpdateInfo scroll;
|
| - scroll.layerId = rootScrollLayer()->id();
|
| - scroll.scrollDelta = scrollOffset - rootScrollLayer()->scrollOffset();
|
| - scrollInfo->scrolls.push_back(scroll);
|
| - activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta);
|
| - scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.page_scale_factor();
|
| - m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta);
|
| + makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), activeTree()->min_page_scale_factor());
|
| }
|
|
|
| static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerImpl)
|
| @@ -1491,13 +1425,27 @@ static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI
|
| collectScrollDeltas(scrollInfo, layerImpl->children()[i]);
|
| }
|
|
|
| +void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx::Vector2d scrollOffset, float pageScale)
|
| +{
|
| + if (!rootScrollLayer())
|
| + return;
|
| +
|
| + LayerTreeHostCommon::ScrollUpdateInfo scroll;
|
| + scroll.layerId = rootScrollLayer()->id();
|
| + scroll.scrollDelta = scrollOffset - rootScrollLayer()->scrollOffset();
|
| + scrollInfo->scrolls.push_back(scroll);
|
| + activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta);
|
| + scrollInfo->pageScaleDelta = pageScale / activeTree()->page_scale_factor();
|
| + activeTree()->set_sent_page_scale_delta(scrollInfo->pageScaleDelta);
|
| +}
|
| +
|
| scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas()
|
| {
|
| scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet());
|
|
|
| if (!m_settings.pageScalePinchZoomEnabled && (m_pinchGestureActive || m_pageScaleAnimation)) {
|
| scrollInfo->pageScaleDelta = 1;
|
| - m_pinchZoomViewport.set_sent_page_scale_delta(1);
|
| + activeTree()->set_sent_page_scale_delta(1);
|
| if (m_pinchGestureActive)
|
| computePinchZoomDeltas(scrollInfo.get());
|
| else if (m_pageScaleAnimation.get())
|
| @@ -1506,17 +1454,12 @@ scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas()
|
| }
|
|
|
| collectScrollDeltas(scrollInfo.get(), rootLayer());
|
| - scrollInfo->pageScaleDelta = m_pinchZoomViewport.page_scale_delta();
|
| - m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta);
|
| + scrollInfo->pageScaleDelta = activeTree()->page_scale_delta();
|
| + activeTree()->set_sent_page_scale_delta(scrollInfo->pageScaleDelta);
|
|
|
| return scrollInfo.Pass();
|
| }
|
|
|
| -gfx::Transform LayerTreeHostImpl::implTransform() const
|
| -{
|
| - return m_pinchZoomViewport.ImplTransform(m_settings.pageScalePinchZoomEnabled);
|
| -}
|
| -
|
| void LayerTreeHostImpl::setFullRootLayerDamage()
|
| {
|
| if (rootLayer()) {
|
| @@ -1534,11 +1477,11 @@ void LayerTreeHostImpl::animatePageScale(base::TimeTicks time)
|
| double monotonicTime = (time - base::TimeTicks()).InSecondsF();
|
| gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollLayer()->scrollDelta();
|
|
|
| - setPageScaleDelta(m_pageScaleAnimation->pageScaleFactorAtTime(monotonicTime) / m_pinchZoomViewport.page_scale_factor());
|
| + activeTree()->SetPageScaleDelta(m_pageScaleAnimation->pageScaleFactorAtTime(monotonicTime) / activeTree()->page_scale_factor());
|
| gfx::Vector2dF nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monotonicTime);
|
|
|
| if (!m_settings.pageScalePinchZoomEnabled)
|
| - nextScroll.Scale(m_pinchZoomViewport.page_scale_factor());
|
| + nextScroll.Scale(activeTree()->page_scale_factor());
|
| rootScrollLayer()->scrollBy(nextScroll - scrollTotal);
|
| m_client->setNeedsRedrawOnImplThread();
|
|
|
|
|