Chromium Code Reviews| 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 | 57 // |
| 71 // bounds. Returns the component of the scroll that is un-applied due to this | 58 // implTransform = S[pageScaleFactor] * S[pageScaleDelta] |
| 72 // constraint. | 59 gfx::Transform ImplTransform(bool page_scale_pinch_zoom_enabled) const; |
|
wjmaclean
2013/01/22 16:56:39
Do we really need to keep an entire matrix around
danakj
2013/01/22 23:42:15
+1. Can we just use total_page_scale_factor?
wjmaclean
2013/01/23 16:27:02
Sorry to do this to you, but I now think this shou
| |
| 73 gfx::Vector2dF ApplyScroll(const gfx::Vector2dF); | |
| 74 | 60 |
| 75 // The implTransform goes from the origin of the unzoomedDeviceViewport to the | 61 gfx::SizeF LayoutSpaceViewportSize() const; |
|
danakj
2013/01/22 23:42:15
This is basically the same name as layout_viewport
| |
| 76 // origin of the zoomedDeviceViewport. | |
| 77 // | |
| 78 // implTransform = S[pageScale] * Tr[-zoomedDeviceViewportOffset] | |
| 79 gfx::Transform ImplTransform(bool page_scale_pinch_zoom_enabled) const; | |
| 80 | 62 |
| 81 private: | 63 private: |
| 82 float page_scale_factor_; | 64 float page_scale_factor_; |
| 83 float page_scale_delta_; | 65 float page_scale_delta_; |
| 84 float sent_page_scale_delta_; | 66 float sent_page_scale_delta_; |
| 85 float max_page_scale_factor_; | 67 float max_page_scale_factor_; |
| 86 float min_page_scale_factor_; | 68 float min_page_scale_factor_; |
| 87 float device_scale_factor_; | 69 float device_scale_factor_; |
| 88 | 70 |
| 89 gfx::Vector2dF zoomed_viewport_offset_; | |
| 90 gfx::SizeF layout_viewport_size_; | 71 gfx::SizeF layout_viewport_size_; |
| 91 gfx::SizeF device_viewport_size_; | 72 gfx::SizeF device_viewport_size_; |
| 92 }; | 73 }; |
| 93 | 74 |
| 94 } // namespace cc | 75 } // namespace cc |
| 95 | 76 |
| 96 #endif // CC_PINCH_ZOOM_VIEWPORT_H_ | 77 #endif // CC_PINCH_ZOOM_VIEWPORT_H_ |
| OLD | NEW |