Chromium Code Reviews| Index: cc/layer_tree_host_impl.cc |
| diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc |
| index 5675aba5d41e0d1de80352007ae649aba787fe42..c507c106d0914b57f344b4a3b92bc4be466ac524 100644 |
| --- a/cc/layer_tree_host_impl.cc |
| +++ b/cc/layer_tree_host_impl.cc |
| @@ -292,26 +292,34 @@ void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl |
| animateScrollbars(monotonicTime); |
| } |
| -void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta duration) |
| +void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetPosition, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta duration) |
|
danakj
2012/11/09 05:06:49
call it targetOffset, or change the type to a Poin
|
| { |
| if (!m_rootScrollLayerImpl) |
| return; |
| gfx::Vector2dF scrollTotal = m_rootScrollLayerImpl->scrollOffset() + m_rootScrollLayerImpl->scrollDelta(); |
| - scrollTotal.Scale(m_pinchZoomViewport.pageScaleDelta()); |
| - float scaleTotal = m_pinchZoomViewport.totalPageScaleFactor(); |
| - gfx::Size scaledContentSize = gfx::ToFlooredSize(contentSize().Scale(m_pinchZoomViewport.pageScaleDelta())); |
| + gfx::SizeF scaledContentSize = contentSize(); |
| + if (!Settings::pageScalePinchZoomEnabled()) { |
| + scrollTotal.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); |
| + scaledContentSize = scaledContentSize.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); |
| + } |
| + gfx::SizeF viewportSize = m_deviceViewportSize; |
| + viewportSize = viewportSize.Scale(1 / m_deviceScaleFactor); |
|
danakj
2012/11/09 05:06:49
Just use m_layoutViewportSize ?
|
| double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); |
| - m_pageScaleAnimation = PageScaleAnimation::create(gfx::ToFlooredVector2d(scrollTotal), scaleTotal, m_deviceViewportSize, scaledContentSize, startTimeSeconds); |
| + m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomViewport.totalPageScaleFactor(), viewportSize, scaledContentSize, startTimeSeconds); |
| if (anchorPoint) { |
| - gfx::Vector2dF windowAnchor = targetOffset; |
| - windowAnchor.Scale(scaleTotal / pageScale); |
| - windowAnchor -= scrollTotal; |
| - m_pageScaleAnimation->zoomWithAnchor(gfx::ToFlooredVector2d(windowAnchor), pageScale, duration.InSecondsF()); |
| - } else |
| - m_pageScaleAnimation->zoomTo(targetOffset, pageScale, duration.InSecondsF()); |
| + gfx::Vector2dF anchor(targetPosition); |
| + if (!Settings::pageScalePinchZoomEnabled()) |
| + anchor.Scale(1 / pageScale); |
| + m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecondsF()); |
| + } else { |
| + gfx::Vector2dF scaledTargetPosition = targetPosition; |
|
danakj
2012/11/09 05:06:49
scaledTargetOffset
|
| + if (!Settings::pageScalePinchZoomEnabled()) |
| + scaledTargetPosition.Scale(1 / pageScale); |
| + m_pageScaleAnimation->zoomTo(scaledTargetPosition, pageScale, duration.InSecondsF()); |
| + } |
| m_client->setNeedsRedrawOnImplThread(); |
| m_client->setNeedsCommitOnImplThread(); |
| @@ -1246,10 +1254,10 @@ void LayerTreeHostImpl::pinchGestureEnd() |
| void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo) |
| { |
| - float pageScale = m_pageScaleAnimation->finalPageScale(); |
| - gfx::Vector2dF scrollOffset = m_pageScaleAnimation->finalScrollOffset(); |
| - scrollOffset.Scale(m_pinchZoomViewport.pageScaleFactor() / pageScale); |
| - makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollOffset), pageScale); |
| + gfx::Vector2dF scaledScrollOffset = m_pageScaleAnimation->targetScrollOffset(); |
| + if (!Settings::pageScalePinchZoomEnabled()) |
| + scaledScrollOffset.Scale(m_pinchZoomViewport.pageScaleFactor()); |
| + makeScrollAndScaleSet(scrollInfo, ToFlooredVector2d(scaledScrollOffset), m_pageScaleAnimation->targetPageScaleFactor()); |
| } |
| void LayerTreeHostImpl::computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo) |
| @@ -1323,14 +1331,12 @@ scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() |
| if (m_pinchGestureActive || m_pageScaleAnimation) { |
| scrollInfo->pageScaleDelta = 1; |
| m_pinchZoomViewport.setSentPageScaleDelta(1); |
| - // FIXME(aelias): Make these painting optimizations compatible with |
| + // FIXME(aelias): Make pinch-zoom painting optimization compatible with |
| // compositor-side scaling. |
| - if (!Settings::pageScalePinchZoomEnabled()) { |
| - if (m_pinchGestureActive) |
| - computePinchZoomDeltas(scrollInfo.get()); |
| - else if (m_pageScaleAnimation.get()) |
| - computeDoubleTapZoomDeltas(scrollInfo.get()); |
| - } |
| + if (!Settings::pageScalePinchZoomEnabled() && m_pinchGestureActive) |
| + computePinchZoomDeltas(scrollInfo.get()); |
| + else if (m_pageScaleAnimation.get()) |
| + computeDoubleTapZoomDeltas(scrollInfo.get()); |
| return scrollInfo.Pass(); |
| } |
| @@ -1363,9 +1369,11 @@ void LayerTreeHostImpl::animatePageScale(base::TimeTicks time) |
| double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
| gfx::Vector2dF scrollTotal = m_rootScrollLayerImpl->scrollOffset() + m_rootScrollLayerImpl->scrollDelta(); |
| - setPageScaleDelta(m_pageScaleAnimation->pageScaleAtTime(monotonicTime) / m_pinchZoomViewport.pageScaleFactor()); |
| + setPageScaleDelta(m_pageScaleAnimation->pageScaleFactorAtTime(monotonicTime) / m_pinchZoomViewport.pageScaleFactor()); |
| gfx::Vector2dF nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monotonicTime); |
| - nextScroll.Scale(1 / m_pinchZoomViewport.pageScaleDelta()); |
| + |
| + if (!Settings::pageScalePinchZoomEnabled()) |
| + nextScroll.Scale(m_pinchZoomViewport.pageScaleFactor()); |
| m_rootScrollLayerImpl->scrollBy(nextScroll - scrollTotal); |
| m_client->setNeedsRedrawOnImplThread(); |