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 |