summaryrefslogtreecommitdiffstats
path: root/cc/layer_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/layer_impl.cc')
-rw-r--r--cc/layer_impl.cc81
1 files changed, 79 insertions, 2 deletions
diff --git a/cc/layer_impl.cc b/cc/layer_impl.cc
index c3aa793..f9102eb 100644
--- a/cc/layer_impl.cc
+++ b/cc/layer_impl.cc
@@ -36,6 +36,7 @@ LayerImpl::LayerImpl(LayerTreeImpl* treeImpl, int id)
, m_shouldScrollOnMainThread(false)
, m_haveWheelEventHandlers(false)
, m_backgroundColor(0)
+ , m_stackingOrderChanged(false)
, m_doubleSided(true)
, m_layerPropertyChanged(false)
, m_layerSurfacePropertyChanged(false)
@@ -81,6 +82,12 @@ void LayerImpl::addChild(scoped_ptr<LayerImpl> child)
layerTreeImpl()->SetNeedsUpdateDrawProperties();
}
+LayerImpl* LayerImpl::childAt(size_t index) const
+{
+ DCHECK_LT(index, m_children.size());
+ return m_children[index];
+}
+
scoped_ptr<LayerImpl> LayerImpl::removeChild(LayerImpl* child)
{
for (ScopedPtrVector<LayerImpl>::iterator it = m_children.begin(); it != m_children.end(); ++it) {
@@ -304,6 +311,66 @@ bool LayerImpl::areVisibleResourcesReady() const
return true;
}
+scoped_ptr<LayerImpl> LayerImpl::createLayerImpl(LayerTreeImpl* treeImpl)
+{
+ return LayerImpl::create(treeImpl, m_layerId);
+}
+
+void LayerImpl::pushPropertiesTo(LayerImpl* layer)
+{
+ layer->setAnchorPoint(m_anchorPoint);
+ layer->setAnchorPointZ(m_anchorPointZ);
+ layer->setBackgroundColor(m_backgroundColor);
+ layer->setBounds(m_bounds);
+ layer->setContentBounds(contentBounds());
+ layer->setContentsScale(contentsScaleX(), contentsScaleY());
+ layer->setDebugName(m_debugName);
+ layer->setDoubleSided(m_doubleSided);
+ layer->setDrawCheckerboardForMissingTiles(m_drawCheckerboardForMissingTiles);
+ layer->setForceRenderSurface(m_forceRenderSurface);
+ layer->setDrawsContent(drawsContent());
+ layer->setFilters(filters());
+ layer->setFilter(filter());
+ layer->setBackgroundFilters(backgroundFilters());
+ layer->setMasksToBounds(m_masksToBounds);
+ layer->setShouldScrollOnMainThread(m_shouldScrollOnMainThread);
+ layer->setHaveWheelEventHandlers(m_haveWheelEventHandlers);
+ layer->setNonFastScrollableRegion(m_nonFastScrollableRegion);
+ layer->setTouchEventHandlerRegion(m_touchEventHandlerRegion);
+ layer->setContentsOpaque(m_contentsOpaque);
+ if (!opacityIsAnimating())
+ layer->setOpacity(m_opacity);
+ layer->setPosition(m_position);
+ layer->setIsContainerForFixedPositionLayers(m_isContainerForFixedPositionLayers);
+ layer->setFixedToContainerLayer(m_fixedToContainerLayer);
+ layer->setPreserves3D(preserves3D());
+ layer->setUseParentBackfaceVisibility(m_useParentBackfaceVisibility);
+ layer->setSublayerTransform(m_sublayerTransform);
+ if (!transformIsAnimating())
+ layer->setTransform(m_transform);
+
+ layer->setScrollable(m_scrollable);
+ layer->setScrollOffset(m_scrollOffset);
+ layer->setMaxScrollOffset(m_maxScrollOffset);
+
+ // If the main thread commits multiple times before the impl thread actually draws, then damage tracking
+ // will become incorrect if we simply clobber the updateRect here. The LayerImpl's updateRect needs to
+ // accumulate (i.e. union) any update changes that have occurred on the main thread.
+ m_updateRect.Union(layer->updateRect());
+ layer->setUpdateRect(m_updateRect);
+
+ layer->setScrollDelta(layer->scrollDelta() - layer->sentScrollDelta());
+ layer->setSentScrollDelta(gfx::Vector2d());
+
+ layer->setStackingOrderChanged(m_stackingOrderChanged);
+
+ m_layerAnimationController->pushAnimationUpdatesTo(layer->layerAnimationController());
+
+ // Reset any state that should be cleared for the next update.
+ m_stackingOrderChanged = false;
+ m_updateRect = gfx::RectF();
+}
+
std::string LayerImpl::indentString(int indent)
{
std::string str;
@@ -407,9 +474,10 @@ base::DictionaryValue* LayerImpl::layerTreeAsJson() const
void LayerImpl::setStackingOrderChanged(bool stackingOrderChanged)
{
- // We don't need to store this flag; we only need to track that the change occurred.
- if (stackingOrderChanged)
+ if (stackingOrderChanged) {
+ m_stackingOrderChanged = true;
noteLayerPropertyChangedForSubtree();
+ }
}
bool LayerImpl::layerSurfacePropertyChanged() const
@@ -562,6 +630,11 @@ scoped_ptr<LayerImpl> LayerImpl::takeReplicaLayer()
return m_replicaLayer.Pass();
}
+ScrollbarLayerImpl* LayerImpl::toScrollbarLayer()
+{
+ return 0;
+}
+
void LayerImpl::setDrawsContent(bool drawsContent)
{
if (m_drawsContent == drawsContent)
@@ -877,11 +950,15 @@ void LayerImpl::didBecomeActive()
void LayerImpl::setHorizontalScrollbarLayer(ScrollbarLayerImpl* scrollbarLayer)
{
m_horizontalScrollbarLayer = scrollbarLayer;
+ if (m_horizontalScrollbarLayer)
+ m_horizontalScrollbarLayer->setScrollLayerId(id());
}
void LayerImpl::setVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbarLayer)
{
m_verticalScrollbarLayer = scrollbarLayer;
+ if (m_verticalScrollbarLayer)
+ m_verticalScrollbarLayer->setScrollLayerId(id());
}
} // namespace cc