diff options
Diffstat (limited to 'cc/layer_impl.cc')
-rw-r--r-- | cc/layer_impl.cc | 81 |
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 |