Index: cc/layer_impl.cc |
diff --git a/cc/layer_impl.cc b/cc/layer_impl.cc |
index c3aa7930a9f38aa0a0a39b5209729469b13befd3..f9102eba0562bd11117489d322e5b5c6338c3c67 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 |