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

Unified 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 side-by-side diff with in-line comments
Download patch
« cc/pinch_zoom_scrollbar_layer_impl.h ('K') | « cc/pinch_zoom_viewport.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/pinch_zoom_viewport.cc
diff --git a/cc/pinch_zoom_viewport.cc b/cc/pinch_zoom_viewport.cc
index dab6c9ca823cc57b18ef53eb3c503f41a5948813..1fd24343f0c32a4fa31ac567bda8d6d62e28d669 100644
--- a/cc/pinch_zoom_viewport.cc
+++ b/cc/pinch_zoom_viewport.cc
@@ -5,18 +5,26 @@
#include "cc/pinch_zoom_viewport.h"
#include "base/logging.h"
+#include "cc/layer_tree_host_impl.h"
+#include "cc/layer_tree_impl.h"
namespace cc {
-PinchZoomViewport::PinchZoomViewport()
+PinchZoomViewport::PinchZoomViewport(LayerTreeHostImpl* owner)
: page_scale_factor_(1),
page_scale_delta_(1),
sent_page_scale_delta_(1),
min_page_scale_factor_(0),
max_page_scale_factor_(0),
- device_scale_factor_(1) {
+ device_scale_factor_(1),
+ vertical_scrollbar_client_(WebKit::WebScrollbar::Vertical, this),
+ horizontal_scrollbar_client_(WebKit::WebScrollbar::Horizontal, this),
+ owner_(owner) {
+ DCHECK(owner_);
}
+PinchZoomViewport::~PinchZoomViewport() {}
+
void PinchZoomViewport::set_page_scale_delta(float delta) {
// Clamp to the current min/max limits.
float totalPageScaleFactor = page_scale_factor_ * delta;
@@ -107,4 +115,47 @@ gfx::Transform PinchZoomViewport::ImplTransform(
return transform;
}
+// Implement here to avoid having to include LayerTreeHostImpl.h
+// in PinchZoomViewport.h.
+LayerImpl* PinchZoomViewport::root_scroll_layer() {
+ return owner_->rootScrollLayer();
+}
+
+LayerImpl* PinchZoomViewport::currently_scrolling_layer() const {
+ return owner_->currentlyScrollingLayer();
+}
+
+void PinchZoomViewport::AddPinchZoomScrollbarsToTree(LayerTreeImpl* tree_impl) {
+ DCHECK(tree_impl);
+ LayerImpl* root = tree_impl->RootLayer();
+
+ // TODO(wjmaclean) - I was told that TreeSynchronizer would kill any impl-side layer
+ // that does not have a matching main-thread layer, but this seems not to be the case
+ // as the pinch-zoom scrollbar layers seem to be surviving the sync.
+ // Note: the survival of the pinch-zoom scrollbars can be leveraged, by only re-creating
+ // them when (if ever) they get clobbered. Although PinchZoomScrollbarLayerImpl is
+ // meant to be a lighweight wrapper, it is still derived from LayerImpl and thus has
+ // some overhead.
+ for (int id = -1; id >= -2; --id)
+ if (LayerImpl* layer = tree_impl->LayerById(id))
+ root->removeChild(layer);
+
+ // WJM - set bounds & geomtery & drawsContent ...
+ scoped_ptr<PinchZoomScrollbarLayerImpl> vertical_scrollbar =
+ PinchZoomScrollbarLayerImpl::create(
+ tree_impl, -1, &vertical_scrollbar_client_);
+ vertical_scrollbar->setDrawsContent(true);
+ vertical_scrollbar_client_.RefreshSizeAndPosition(vertical_scrollbar.get());
+
+ root->addChild(vertical_scrollbar.PassAs<LayerImpl>());
+
+ scoped_ptr<PinchZoomScrollbarLayerImpl> horizontal_scrollbar =
+ PinchZoomScrollbarLayerImpl::create(
+ tree_impl, -2, &horizontal_scrollbar_client_);
+ horizontal_scrollbar->setDrawsContent(true);
+ horizontal_scrollbar_client_.RefreshSizeAndPosition(horizontal_scrollbar.get());
+
+ root->addChild(horizontal_scrollbar.PassAs<LayerImpl>());
+}
+
} // namespace cc
« 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