| Index: cc/page_scale_animation.h
|
| diff --git a/cc/page_scale_animation.h b/cc/page_scale_animation.h
|
| index c4c2940b7456c922dd84662f23f4b49cf3c0b3d3..2d8f6d568705dfc05c8e2762f853dd8c330e7639 100644
|
| --- a/cc/page_scale_animation.h
|
| +++ b/cc/page_scale_animation.h
|
| @@ -7,7 +7,7 @@
|
|
|
| #include "base/memory/scoped_ptr.h"
|
| #include "ui/gfx/size.h"
|
| -#include "ui/gfx/vector2d.h"
|
| +#include "ui/gfx/vector2d_f.h"
|
|
|
| namespace cc {
|
|
|
| @@ -15,30 +15,32 @@ namespace cc {
|
| // double-tap zoom. Initialize it with starting and ending scroll/page scale
|
| // positions and an animation length time, then call ...AtTime() at every frame
|
| // to obtain the current interpolated position.
|
| +//
|
| +// All sizes and vectors in this class's public methods are in the root scroll
|
| +// layer's coordinate space.
|
| class PageScaleAnimation {
|
| public:
|
| - // Construct with the starting page scale and scroll offset (which is in
|
| - // pageScaleStart space). The window size is the user-viewable area
|
| - // in pixels.
|
| - static scoped_ptr<PageScaleAnimation> create(gfx::Vector2d scrollStart, float pageScaleStart, const gfx::Size& windowSize, const gfx::Size& contentSize, double startTime);
|
| + // Construct with the state at the beginning of the animation.
|
| + static scoped_ptr<PageScaleAnimation> create(const gfx::Vector2dF& startScrollOffset, float startPageScaleFactor, const gfx::SizeF& viewportSize, const gfx::SizeF& rootLayerSize, double startTime);
|
| +
|
| ~PageScaleAnimation();
|
|
|
| // The following methods initialize the animation. Call one of them
|
| // immediately after construction to set the final scroll and page scale.
|
|
|
| - // Zoom while explicitly specifying the top-left scroll position. The
|
| - // scroll offset is in finalPageScale coordinates.
|
| - void zoomTo(gfx::Vector2d finalScroll, float finalPageScale, double duration);
|
| + // Zoom while explicitly specifying the top-left scroll position.
|
| + void zoomTo(const gfx::Vector2dF& targetScrollOffset, float targetPageScaleFactor, double duration);
|
|
|
| - // Zoom based on a specified onscreen anchor, which will remain at the same
|
| - // position on the screen throughout the animation. The anchor is in local
|
| - // space relative to scrollStart.
|
| - void zoomWithAnchor(gfx::Vector2d anchor, float finalPageScale, double duration);
|
| + // Zoom based on a specified anchor. The animator will attempt to keep it
|
| + // at the same position on the physical display throughout the animation,
|
| + // unless the edges of the root layer are hit. The anchor is specified
|
| + // as an offset from the content layer.
|
| + void zoomWithAnchor(const gfx::Vector2dF& anchor, float targetPageScaleFactor, double duration);
|
|
|
| // Call these functions while the animation is in progress to output the
|
| // current state.
|
| - gfx::Vector2d scrollOffsetAtTime(double time) const;
|
| - float pageScaleAtTime(double time) const;
|
| + gfx::Vector2dF scrollOffsetAtTime(double time) const;
|
| + float pageScaleFactorAtTime(double time) const;
|
| bool isAnimationCompleteAtTime(double time) const;
|
|
|
| // The following methods return state which is invariant throughout the
|
| @@ -46,26 +48,34 @@ public:
|
| double startTime() const { return m_startTime; }
|
| double duration() const { return m_duration; }
|
| double endTime() const { return m_startTime + m_duration; }
|
| - gfx::Vector2d finalScrollOffset() const { return m_scrollEnd; }
|
| - float finalPageScale() const { return m_pageScaleEnd; }
|
| + const gfx::Vector2dF& targetScrollOffset() const { return m_targetScrollOffset; }
|
| + float targetPageScaleFactor() const { return m_targetPageScaleFactor; }
|
|
|
| protected:
|
| - PageScaleAnimation(gfx::Vector2d scrollStart, float pageScaleStart, const gfx::Size& windowSize, const gfx::Size& contentSize, double startTime);
|
| + PageScaleAnimation(const gfx::Vector2dF& startScrollOffset, float startPageScaleFactor, const gfx::SizeF& viewportSize, const gfx::SizeF& rootLayerSize, double startTime);
|
|
|
| private:
|
| - float progressRatioForTime(double time) const;
|
| - gfx::Vector2d scrollOffsetAtRatio(float ratio) const;
|
| - float pageScaleAtRatio(float ratio) const;
|
| -
|
| - gfx::Vector2d m_scrollStart;
|
| - float m_pageScaleStart;
|
| - gfx::Size m_windowSize;
|
| - gfx::Size m_contentSize;
|
| -
|
| - bool m_anchorMode;
|
| - gfx::Vector2d m_anchor;
|
| - gfx::Vector2d m_scrollEnd;
|
| - float m_pageScaleEnd;
|
| + void clampTargetScrollOffset();
|
| + void inferTargetScrollOffsetFromStartAnchor();
|
| + void inferTargetAnchorFromScrollOffsets();
|
| + gfx::SizeF viewportSizeAtScale(float pageScaleFactor) const;
|
| +
|
| + float interpAtTime(double time) const;
|
| + gfx::Vector2dF scrollOffsetAt(float interp) const;
|
| + gfx::Vector2dF anchorAt(float interp) const;
|
| + gfx::Vector2dF viewportRelativeAnchorAt(float interp) const;
|
| + float pageScaleFactorAt(float interp) const;
|
| +
|
| + float m_startPageScaleFactor;
|
| + float m_targetPageScaleFactor;
|
| + gfx::Vector2dF m_startScrollOffset;
|
| + gfx::Vector2dF m_targetScrollOffset;
|
| +
|
| + gfx::Vector2dF m_startAnchor;
|
| + gfx::Vector2dF m_targetAnchor;
|
| +
|
| + gfx::SizeF m_viewportSize;
|
| + gfx::SizeF m_rootLayerSize;
|
|
|
| double m_startTime;
|
| double m_duration;
|
|
|