Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Side by Side Diff: cc/pinch_zoom_viewport.cc

Issue 11550035: Implement pinch-zoom scaling for main-frame scrollbars and pinch-zoom overlay scrollbars. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Refactor for cleaner state/scrollbar split. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
OLDNEW
« cc/pinch_zoom_scrollbar_layer_impl.h ('K') | « cc/pinch_zoom_viewport.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698