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 #include "cc/pinch_zoom_viewport.h" | 5 #include "cc/pinch_zoom_viewport.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "cc/layer_tree_host_impl.h" |
| 9 #include "cc/layer_tree_impl.h" |
8 | 10 |
9 namespace cc { | 11 namespace cc { |
10 | 12 |
11 PinchZoomViewport::PinchZoomViewport() | 13 PinchZoomViewport::PinchZoomViewport(LayerTreeHostImpl* owner) |
12 : page_scale_factor_(1), | 14 : page_scale_factor_(1), |
13 page_scale_delta_(1), | 15 page_scale_delta_(1), |
14 sent_page_scale_delta_(1), | 16 sent_page_scale_delta_(1), |
15 min_page_scale_factor_(0), | 17 min_page_scale_factor_(0), |
16 max_page_scale_factor_(0), | 18 max_page_scale_factor_(0), |
17 device_scale_factor_(1) { | 19 device_scale_factor_(1), |
| 20 vertical_scrollbar_client_(WebKit::WebScrollbar::Vertical, this), |
| 21 horizontal_scrollbar_client_(WebKit::WebScrollbar::Horizontal, this), |
| 22 owner_(owner) { |
| 23 DCHECK(owner_); |
18 } | 24 } |
19 | 25 |
| 26 PinchZoomViewport::~PinchZoomViewport() {} |
| 27 |
20 void PinchZoomViewport::set_page_scale_delta(float delta) { | 28 void PinchZoomViewport::set_page_scale_delta(float delta) { |
21 // Clamp to the current min/max limits. | 29 // Clamp to the current min/max limits. |
22 float totalPageScaleFactor = page_scale_factor_ * delta; | 30 float totalPageScaleFactor = page_scale_factor_ * delta; |
23 if (min_page_scale_factor_ && totalPageScaleFactor < min_page_scale_factor_) | 31 if (min_page_scale_factor_ && totalPageScaleFactor < min_page_scale_factor_) |
24 delta = min_page_scale_factor_ / page_scale_factor_; | 32 delta = min_page_scale_factor_ / page_scale_factor_; |
25 else if (max_page_scale_factor_ && | 33 else if (max_page_scale_factor_ && |
26 totalPageScaleFactor > max_page_scale_factor_) | 34 totalPageScaleFactor > max_page_scale_factor_) |
27 delta = max_page_scale_factor_ / page_scale_factor_; | 35 delta = max_page_scale_factor_ / page_scale_factor_; |
28 | 36 |
29 if (delta == page_scale_delta_) | 37 if (delta == page_scale_delta_) |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 // needs to work with physical pixels. | 108 // needs to work with physical pixels. |
101 gfx::Vector2dF zoomed_device_viewport_offset | 109 gfx::Vector2dF zoomed_device_viewport_offset |
102 = gfx::ScaleVector2d(zoomed_viewport_offset_, device_scale_factor_); | 110 = gfx::ScaleVector2d(zoomed_viewport_offset_, device_scale_factor_); |
103 transform.Translate(-zoomed_device_viewport_offset.x(), | 111 transform.Translate(-zoomed_device_viewport_offset.x(), |
104 -zoomed_device_viewport_offset.y()); | 112 -zoomed_device_viewport_offset.y()); |
105 } | 113 } |
106 | 114 |
107 return transform; | 115 return transform; |
108 } | 116 } |
109 | 117 |
| 118 // Implement here to avoid having to include LayerTreeHostImpl.h |
| 119 // in PinchZoomViewport.h. |
| 120 LayerImpl* PinchZoomViewport::root_scroll_layer() { |
| 121 return owner_->rootScrollLayer(); |
| 122 } |
| 123 |
| 124 LayerImpl* PinchZoomViewport::currently_scrolling_layer() const { |
| 125 return owner_->currentlyScrollingLayer(); |
| 126 } |
| 127 |
| 128 void PinchZoomViewport::AddPinchZoomScrollbarsToTree(LayerTreeImpl* tree_impl) { |
| 129 DCHECK(tree_impl); |
| 130 LayerImpl* root = tree_impl->RootLayer(); |
| 131 |
| 132 // TODO(wjmaclean) - I was told that TreeSynchronizer would kill any impl-side
layer |
| 133 // that does not have a matching main-thread layer, but this seems not to be t
he case |
| 134 // as the pinch-zoom scrollbar layers seem to be surviving the sync. |
| 135 // Note: the survival of the pinch-zoom scrollbars can be leveraged, by only r
e-creating |
| 136 // them when (if ever) they get clobbered. Although PinchZoomScrollbarLayerImp
l is |
| 137 // meant to be a lighweight wrapper, it is still derived from LayerImpl and th
us has |
| 138 // some overhead. |
| 139 for (int id = -1; id >= -2; --id) |
| 140 if (LayerImpl* layer = tree_impl->LayerById(id)) |
| 141 root->removeChild(layer); |
| 142 |
| 143 // WJM - set bounds & geomtery & drawsContent ... |
| 144 scoped_ptr<PinchZoomScrollbarLayerImpl> vertical_scrollbar = |
| 145 PinchZoomScrollbarLayerImpl::create( |
| 146 tree_impl, -1, &vertical_scrollbar_client_); |
| 147 vertical_scrollbar->setDrawsContent(true); |
| 148 vertical_scrollbar_client_.RefreshSizeAndPosition(vertical_scrollbar.get()); |
| 149 |
| 150 root->addChild(vertical_scrollbar.PassAs<LayerImpl>()); |
| 151 |
| 152 scoped_ptr<PinchZoomScrollbarLayerImpl> horizontal_scrollbar = |
| 153 PinchZoomScrollbarLayerImpl::create( |
| 154 tree_impl, -2, &horizontal_scrollbar_client_); |
| 155 horizontal_scrollbar->setDrawsContent(true); |
| 156 horizontal_scrollbar_client_.RefreshSizeAndPosition(horizontal_scrollbar.get()
); |
| 157 |
| 158 root->addChild(horizontal_scrollbar.PassAs<LayerImpl>()); |
| 159 } |
| 160 |
110 } // namespace cc | 161 } // namespace cc |
OLD | NEW |