Index: cc/layer_tree_host.cc |
diff --git a/cc/layer_tree_host.cc b/cc/layer_tree_host.cc |
index 76e75afdce340ace9855880a8e5ea71ff23a5d87..4696ff133c89ea97fb6b8435202fe64c2406a85a 100644 |
--- a/cc/layer_tree_host.cc |
+++ b/cc/layer_tree_host.cc |
@@ -28,6 +28,7 @@ |
#include "cc/switches.h" |
#include "cc/thread.h" |
#include "cc/thread_proxy.h" |
+#include "cc/top_controls_manager.h" |
#include "cc/tree_synchronizer.h" |
namespace { |
@@ -315,6 +316,9 @@ void LayerTreeHost::finishCommitOnImplThread(LayerTreeHostImpl* hostImpl) |
hostImpl->setPageScaleFactorAndLimits(m_pageScaleFactor, m_minPageScaleFactor, m_maxPageScaleFactor); |
hostImpl->setDebugState(m_debugState); |
+ if (m_settings.calculateTopControlsPosition && m_topControlsContentLayer && hostImpl->topControlsManager()) |
+ hostImpl->topControlsManager()->set_content_layer_id(m_topControlsContentLayer->id()); |
+ |
m_commitNumber++; |
} |
@@ -453,6 +457,8 @@ void LayerTreeHost::setRootLayer(scoped_refptr<Layer> rootLayer) |
if (m_hudLayer) |
m_hudLayer->removeFromParent(); |
+ if (m_topControlsContentLayer) |
+ m_topControlsContentLayer->removeFromParent(); |
setNeedsFullTreeSync(); |
} |
@@ -549,6 +555,22 @@ void LayerTreeHost::updateLayers(ResourceUpdateQueue& queue, size_t memoryAlloca |
if (memoryAllocationLimitBytes) |
m_contentsTextureManager->setMaxMemoryLimitBytes(memoryAllocationLimitBytes); |
+ if (m_settings.calculateTopControlsPosition) { |
+ if (!m_topControlsContentLayer) { |
+ m_topControlsContentLayer = Layer::create(); |
+ m_topControlsContentLayer->setIsDrawable(false); |
+ m_topControlsContentLayer->setDebugName("Top Controls Content"); |
+ } |
+ |
+ // Insert a layer that allows the top controls manager to move around |
+ // the content without clobbering/being clobbered by other transforms. |
+ if (!LayerTreeHostCommon::findLayerInSubtree(m_rootLayer.get(), m_topControlsContentLayer->id())) { |
+ m_topControlsContentLayer->setLayerTreeHost(m_rootLayer->layerTreeHost()); |
+ m_topControlsContentLayer->setChildren(m_rootLayer->children()); |
+ m_rootLayer->addChild(m_topControlsContentLayer); |
+ } |
+ } |
+ |
updateLayers(rootLayer(), queue); |
} |