From 574c2b7015543e951499c261fb8c105c57116b06 Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Thu, 21 Nov 2013 14:12:28 -0800 Subject: [PATCH] Bug 941327 - Match scale to scroll offset during zoom animation [r=botond] --- gfx/layers/ipc/AsyncPanZoomController.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gfx/layers/ipc/AsyncPanZoomController.cpp b/gfx/layers/ipc/AsyncPanZoomController.cpp index ba3d0a0a2b3..244f81a0aaf 100644 --- a/gfx/layers/ipc/AsyncPanZoomController.cpp +++ b/gfx/layers/ipc/AsyncPanZoomController.cpp @@ -1199,9 +1199,11 @@ bool AsyncPanZoomController::SampleContentTransformForFrame(const TimeStamp& aSa // will affect the final computed resolution. double sampledPosition = gComputedTimingFunction->GetValue(animPosition); - mFrameMetrics.mZoom = CSSToScreenScale( - mEndZoomToMetrics.mZoom.scale * sampledPosition + - mStartZoomToMetrics.mZoom.scale * (1 - sampledPosition)); + // We scale the scrollOffset linearly with sampledPosition, so the zoom + // needs to scale inversely to match. + mFrameMetrics.mZoom = CSSToScreenScale(1 / + (sampledPosition / mEndZoomToMetrics.mZoom.scale + + (1 - sampledPosition) / mStartZoomToMetrics.mZoom.scale)); mFrameMetrics.mScrollOffset = CSSPoint::FromUnknownPoint(gfx::Point( mEndZoomToMetrics.mScrollOffset.x * sampledPosition +