OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CC_PINCH_ZOOM_VIEWPORT_H_ | 5 #ifndef CC_PINCH_ZOOM_VIEWPORT_H_ |
6 #define CC_PINCH_ZOOM_VIEWPORT_H_ | 6 #define CC_PINCH_ZOOM_VIEWPORT_H_ |
7 | 7 |
8 #include "cc/cc_export.h" | 8 #include "cc/cc_export.h" |
9 #include "ui/gfx/rect.h" | 9 #include "ui/gfx/rect.h" |
10 #include "ui/gfx/transform.h" | 10 #include "ui/gfx/transform.h" |
11 | 11 |
12 namespace cc { | 12 namespace cc { |
13 | 13 |
14 // PinchZoomViewport models the bounds and offset of the viewport that is used | |
15 // during a pinch-zoom operation. It tracks the layout-space dimensions of the | |
16 // viewport before any applied scale, and then tracks the layout-space | |
17 // coordinates of the viewport respecting the pinch settings. | |
18 class CC_EXPORT PinchZoomViewport { | 14 class CC_EXPORT PinchZoomViewport { |
19 public: | 15 public: |
20 PinchZoomViewport(); | 16 PinchZoomViewport(); |
21 | 17 |
22 float total_page_scale_factor() const { | 18 float total_page_scale_factor() const { |
23 return page_scale_factor_ * page_scale_delta_; | 19 return page_scale_factor_ * page_scale_delta_; |
24 } | 20 } |
25 | 21 |
26 void set_page_scale_factor(float factor) { page_scale_factor_ = factor; } | 22 void set_page_scale_factor(float factor) { page_scale_factor_ = factor; } |
27 float page_scale_factor() const { return page_scale_factor_; } | 23 float page_scale_factor() const { return page_scale_factor_; } |
(...skipping 12 matching lines...) Expand all Loading... |
40 | 36 |
41 void set_device_scale_factor(float factor) { device_scale_factor_ = factor; } | 37 void set_device_scale_factor(float factor) { device_scale_factor_ = factor; } |
42 float device_scale_factor() const { return device_scale_factor_; } | 38 float device_scale_factor() const { return device_scale_factor_; } |
43 | 39 |
44 // Returns true if the passed parameters were different from those previously | 40 // Returns true if the passed parameters were different from those previously |
45 // cached. | 41 // cached. |
46 bool SetPageScaleFactorAndLimits(float page_scale_factor, | 42 bool SetPageScaleFactorAndLimits(float page_scale_factor, |
47 float min_page_scale_factor, | 43 float min_page_scale_factor, |
48 float max_page_scale_factor); | 44 float max_page_scale_factor); |
49 | 45 |
50 // Returns the zoomed viewport in layout space. The rect's position is an | |
51 // offset from the root layer's scroll position (therefore, zero if fully | |
52 // zoomed out). | |
53 gfx::RectF ZoomedViewport() const; | |
54 | |
55 const gfx::Vector2dF& zoomed_viewport_offset() const { | |
56 return zoomed_viewport_offset_; | |
57 } | |
58 | |
59 void set_layout_viewport_size(const gfx::SizeF& size) { | 46 void set_layout_viewport_size(const gfx::SizeF& size) { |
60 layout_viewport_size_ = size; | 47 layout_viewport_size_ = size; |
61 } | 48 } |
62 // We need to store device_viewport_size separately because in mobile | 49 // We need to store device_viewport_size separately because in mobile |
63 // fixed-layout mode, there is not necessarily a simple mapping between layout | 50 // fixed-layout mode, there is not necessarily a simple mapping between layout |
64 // viewport size and device viewport size. | 51 // viewport size and device viewport size. |
65 void set_device_viewport_size(const gfx::SizeF& size) { | 52 void set_device_viewport_size(const gfx::SizeF& size) { |
66 device_viewport_size_ = size; | 53 device_viewport_size_ = size; |
67 } | 54 } |
68 | 55 |
69 // Apply the scroll offset in layout space to the offset of the pinch-zoom | 56 // The implTransform applies the page scale transformation. |
70 // viewport. The viewport cannot be scrolled outside of the layout viewport | |
71 // bounds. Returns the component of the scroll that is un-applied due to this | |
72 // constraint. | |
73 gfx::Vector2dF ApplyScroll(const gfx::Vector2dF); | |
74 | |
75 // The implTransform goes from the origin of the unzoomedDeviceViewport to the | |
76 // origin of the zoomedDeviceViewport. | |
77 // | 57 // |
78 // implTransform = S[pageScale] * Tr[-zoomedDeviceViewportOffset] | 58 // implTransform = S[pageScaleFactor] * S[pageScaleDelta] |
79 gfx::Transform ImplTransform(bool page_scale_pinch_zoom_enabled) const; | 59 gfx::Transform ImplTransform(bool page_scale_pinch_zoom_enabled) const; |
80 | 60 |
81 private: | 61 private: |
82 float page_scale_factor_; | 62 float page_scale_factor_; |
83 float page_scale_delta_; | 63 float page_scale_delta_; |
84 float sent_page_scale_delta_; | 64 float sent_page_scale_delta_; |
85 float max_page_scale_factor_; | 65 float max_page_scale_factor_; |
86 float min_page_scale_factor_; | 66 float min_page_scale_factor_; |
87 float device_scale_factor_; | 67 float device_scale_factor_; |
88 | 68 |
89 gfx::Vector2dF zoomed_viewport_offset_; | |
90 gfx::SizeF layout_viewport_size_; | 69 gfx::SizeF layout_viewport_size_; |
91 gfx::SizeF device_viewport_size_; | 70 gfx::SizeF device_viewport_size_; |
92 }; | 71 }; |
93 | 72 |
94 } // namespace cc | 73 } // namespace cc |
95 | 74 |
96 #endif // CC_PINCH_ZOOM_VIEWPORT_H_ | 75 #endif // CC_PINCH_ZOOM_VIEWPORT_H_ |
OLD | NEW |