Index: cc/layer_tree_host.cc |
diff --git a/cc/layer_tree_host.cc b/cc/layer_tree_host.cc |
index fbd6e6ac14d03fae7346f95edaab1614b976cbaf..f77e806bf37e67843c39e133e790a479184380fa 100644 |
--- a/cc/layer_tree_host.cc |
+++ b/cc/layer_tree_host.cc |
@@ -21,6 +21,8 @@ |
#include "cc/math_util.h" |
#include "cc/occlusion_tracker.h" |
#include "cc/overdraw_metrics.h" |
+#include "cc/pinch_zoom_scrollbar_layer.h" |
+#include "cc/scrollbar_layer_impl.h" |
#include "cc/single_thread_proxy.h" |
#include "cc/switches.h" |
#include "cc/thread.h" |
@@ -92,6 +94,11 @@ LayerTreeHost::LayerTreeHost(LayerTreeHostClient* client, const LayerTreeSetting |
, m_partialTextureUpdateRequests(0) |
{ |
numLayerTreeInstances++; |
+ |
+ if (m_settings.pageScalePinchZoomEnabled) { |
+ m_pinchZoomScrollbarVertical = PinchZoomScrollbarLayer::create(); |
+ m_pinchZoomScrollbarHorizontal = PinchZoomScrollbarLayer::create(); |
+ } |
} |
bool LayerTreeHost::initialize(scoped_ptr<Thread> implThread) |
@@ -280,6 +287,16 @@ void LayerTreeHost::finishCommitOnImplThread(LayerTreeHostImpl* hostImpl) |
else |
hostImpl->activeTree()->set_hud_layer(0); |
+ if (m_rootLayer && m_pinchZoomScrollbarVertical) |
+ hostImpl->activeTree()->set_pinch_zoom_scrollbar_vertical(static_cast<ScrollbarLayerImpl*>(LayerTreeHostCommon::findLayerInSubtree(hostImpl->rootLayer(), m_pinchZoomScrollbarVertical->id()))); |
+ else |
+ hostImpl->activeTree()->set_pinch_zoom_scrollbar_vertical(0); |
+ |
+ if (m_rootLayer && m_pinchZoomScrollbarHorizontal) |
+ hostImpl->activeTree()->set_pinch_zoom_scrollbar_horizontal(static_cast<ScrollbarLayerImpl*>(LayerTreeHostCommon::findLayerInSubtree(hostImpl->rootLayer(), m_pinchZoomScrollbarHorizontal->id()))); |
+ else |
+ hostImpl->activeTree()->set_pinch_zoom_scrollbar_horizontal(0); |
+ |
// We may have added an animation during the tree sync. This will cause both layer tree hosts |
// to visit their controllers. |
if (rootLayer() && m_needsAnimateLayers) |
@@ -313,6 +330,16 @@ void LayerTreeHost::willCommit() |
m_hudLayer->removeFromParent(); |
m_hudLayer = 0; |
} |
+ |
+ if (m_settings.pageScalePinchZoomEnabled && m_rootLayer) { |
+ DCHECK(m_pinchZoomScrollbarVertical); |
+ if (m_pinchZoomScrollbarVertical && !m_pinchZoomScrollbarVertical->parent()) |
+ m_rootLayer->addChild(m_pinchZoomScrollbarVertical); |
+ |
+ DCHECK(m_pinchZoomScrollbarHorizontal); |
+ if (m_pinchZoomScrollbarHorizontal && !m_pinchZoomScrollbarHorizontal->parent()) |
+ m_rootLayer->addChild(m_pinchZoomScrollbarHorizontal); |
+ } |
} |
void LayerTreeHost::commitComplete() |
@@ -438,6 +465,12 @@ void LayerTreeHost::setRootLayer(scoped_refptr<Layer> rootLayer) |
if (m_hudLayer) |
m_hudLayer->removeFromParent(); |
+ if (m_pinchZoomScrollbarVertical) |
+ m_pinchZoomScrollbarVertical->removeFromParent(); |
+ |
+ if (m_pinchZoomScrollbarHorizontal) |
+ m_pinchZoomScrollbarHorizontal->removeFromParent(); |
+ |
setNeedsFullTreeSync(); |
} |
@@ -568,9 +601,13 @@ void LayerTreeHost::updateLayers(Layer* rootLayer, ResourceUpdateQueue& queue) |
{ |
if (m_settings.pageScalePinchZoomEnabled) { |
- Layer* rootScroll = findFirstScrollableLayer(rootLayer); |
- if (rootScroll) |
- rootScroll->setImplTransform(m_implTransform); |
+ const LayerList& children = m_rootLayer->children(); |
+ for (size_t i = 0; i < children.size(); ++i) { |
+ Layer* layer = children[i].get(); |
+ if (layer != m_pinchZoomScrollbarVertical.get() |
+ && layer != m_pinchZoomScrollbarHorizontal.get()) |
+ layer->setImplTransform(m_implTransform); |
+ } |
} |
TRACE_EVENT0("cc", "LayerTreeHost::updateLayers::calcDrawEtc"); |