| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/layer_impl.h" | 5 #include "cc/layer_impl.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
| 9 #include "cc/debug_border_draw_quad.h" | 9 #include "cc/debug_border_draw_quad.h" |
| 10 #include "cc/debug_colors.h" | 10 #include "cc/debug_colors.h" |
| 11 #include "cc/layer_tree_host_impl.h" | 11 #include "cc/layer_tree_host_impl.h" |
| 12 #include "cc/math_util.h" | 12 #include "cc/math_util.h" |
| 13 #include "cc/proxy.h" | 13 #include "cc/proxy.h" |
| 14 #include "cc/quad_sink.h" | 14 #include "cc/quad_sink.h" |
| 15 #include "cc/scrollbar_animation_controller.h" | 15 #include "cc/scrollbar_animation_controller.h" |
| 16 #include "ui/gfx/point_conversions.h" | 16 #include "ui/gfx/point_conversions.h" |
| 17 #include "ui/gfx/rect_conversions.h" | 17 #include "ui/gfx/rect_conversions.h" |
| 18 | 18 |
| 19 namespace cc { | 19 namespace cc { |
| 20 | 20 |
| 21 LayerImpl::LayerImpl(int id) | 21 LayerImpl::LayerImpl(LayerTreeHostImpl* hostImpl, int id) |
| 22 : m_parent(0) | 22 : m_parent(0) |
| 23 , m_maskLayerId(-1) | 23 , m_maskLayerId(-1) |
| 24 , m_replicaLayerId(-1) | 24 , m_replicaLayerId(-1) |
| 25 , m_layerId(id) | 25 , m_layerId(id) |
| 26 , m_layerTreeHostImpl(0) | 26 , m_layerTreeHostImpl(hostImpl) |
| 27 , m_anchorPoint(0.5, 0.5) | 27 , m_anchorPoint(0.5, 0.5) |
| 28 , m_anchorPointZ(0) | 28 , m_anchorPointZ(0) |
| 29 , m_contentsScaleX(1.0) | 29 , m_contentsScaleX(1.0) |
| 30 , m_contentsScaleY(1.0) | 30 , m_contentsScaleY(1.0) |
| 31 , m_scrollable(false) | 31 , m_scrollable(false) |
| 32 , m_shouldScrollOnMainThread(false) | 32 , m_shouldScrollOnMainThread(false) |
| 33 , m_haveWheelEventHandlers(false) | 33 , m_haveWheelEventHandlers(false) |
| 34 , m_backgroundColor(0) | 34 , m_backgroundColor(0) |
| 35 , m_doubleSided(true) | 35 , m_doubleSided(true) |
| 36 , m_layerPropertyChanged(false) | 36 , m_layerPropertyChanged(false) |
| 37 , m_layerSurfacePropertyChanged(false) | 37 , m_layerSurfacePropertyChanged(false) |
| 38 , m_masksToBounds(false) | 38 , m_masksToBounds(false) |
| 39 , m_contentsOpaque(false) | 39 , m_contentsOpaque(false) |
| 40 , m_preserves3D(false) | 40 , m_preserves3D(false) |
| 41 , m_useParentBackfaceVisibility(false) | 41 , m_useParentBackfaceVisibility(false) |
| 42 , m_drawCheckerboardForMissingTiles(false) | 42 , m_drawCheckerboardForMissingTiles(false) |
| 43 , m_useLCDText(false) | 43 , m_useLCDText(false) |
| 44 , m_drawsContent(false) | 44 , m_drawsContent(false) |
| 45 , m_forceRenderSurface(false) | 45 , m_forceRenderSurface(false) |
| 46 , m_isContainerForFixedPositionLayers(false) | 46 , m_isContainerForFixedPositionLayers(false) |
| 47 , m_fixedToContainerLayer(false) | 47 , m_fixedToContainerLayer(false) |
| 48 , m_drawDepth(0) | 48 , m_drawDepth(0) |
| 49 #ifndef NDEBUG | 49 #ifndef NDEBUG |
| 50 , m_betweenWillDrawAndDidDraw(false) | 50 , m_betweenWillDrawAndDidDraw(false) |
| 51 #endif | 51 #endif |
| 52 , m_layerAnimationController(LayerAnimationController::create()) | 52 , m_layerAnimationController(LayerAnimationController::create()) |
| 53 { | 53 { |
| 54 DCHECK(m_layerId > 0); | 54 DCHECK(m_layerId > 0); |
| 55 DCHECK(m_layerTreeHostImpl); |
| 55 m_layerAnimationController->setId(m_layerId); | 56 m_layerAnimationController->setId(m_layerId); |
| 57 m_layerAnimationController->setAnimationRegistrar(hostImpl); |
| 56 } | 58 } |
| 57 | 59 |
| 58 LayerImpl::~LayerImpl() | 60 LayerImpl::~LayerImpl() |
| 59 { | 61 { |
| 60 #ifndef NDEBUG | 62 #ifndef NDEBUG |
| 61 DCHECK(!m_betweenWillDrawAndDidDraw); | 63 DCHECK(!m_betweenWillDrawAndDidDraw); |
| 62 #endif | 64 #endif |
| 63 } | 65 } |
| 64 | 66 |
| 65 void LayerImpl::addChild(scoped_ptr<LayerImpl> child) | 67 void LayerImpl::addChild(scoped_ptr<LayerImpl> child) |
| 66 { | 68 { |
| 67 child->setParent(this); | 69 child->setParent(this); |
| 70 DCHECK_EQ(layerTreeHostImpl(), child->layerTreeHostImpl()); |
| 68 m_children.append(child.Pass()); | 71 m_children.append(child.Pass()); |
| 69 } | 72 } |
| 70 | 73 |
| 71 void LayerImpl::removeFromParent() | 74 void LayerImpl::removeFromParent() |
| 72 { | 75 { |
| 73 if (!m_parent) | 76 if (!m_parent) |
| 74 return; | 77 return; |
| 75 | 78 |
| 76 LayerImpl* parent = m_parent; | 79 LayerImpl* parent = m_parent; |
| 77 m_parent = 0; | 80 m_parent = 0; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 108 for (size_t i = 0; i < m_children.size(); ++i) { | 111 for (size_t i = 0; i < m_children.size(); ++i) { |
| 109 if (m_children[i]->drawsContent()) | 112 if (m_children[i]->drawsContent()) |
| 110 ++result; | 113 ++result; |
| 111 result += m_children[i]->descendantsDrawContent(); | 114 result += m_children[i]->descendantsDrawContent(); |
| 112 if (result > 1) | 115 if (result > 1) |
| 113 return result; | 116 return result; |
| 114 } | 117 } |
| 115 return result; | 118 return result; |
| 116 } | 119 } |
| 117 | 120 |
| 118 void LayerImpl::setLayerTreeHostImpl(LayerTreeHostImpl* hostImpl) | |
| 119 { | |
| 120 m_layerTreeHostImpl = hostImpl; | |
| 121 m_layerAnimationController->setAnimationRegistrar(hostImpl); | |
| 122 } | |
| 123 | |
| 124 scoped_ptr<SharedQuadState> LayerImpl::createSharedQuadState() const | 121 scoped_ptr<SharedQuadState> LayerImpl::createSharedQuadState() const |
| 125 { | 122 { |
| 126 scoped_ptr<SharedQuadState> state = SharedQuadState::Create(); | 123 scoped_ptr<SharedQuadState> state = SharedQuadState::Create(); |
| 127 state->SetAll(m_drawProperties.target_space_transform, | 124 state->SetAll(m_drawProperties.target_space_transform, |
| 128 m_drawProperties.visible_content_rect, | 125 m_drawProperties.visible_content_rect, |
| 129 m_drawProperties.drawable_content_rect, | 126 m_drawProperties.drawable_content_rect, |
| 130 m_drawProperties.clip_rect, | 127 m_drawProperties.clip_rect, |
| 131 m_drawProperties.is_clipped, | 128 m_drawProperties.is_clipped, |
| 132 m_drawProperties.opacity); | 129 m_drawProperties.opacity); |
| 133 return state.Pass(); | 130 return state.Pass(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 145 void LayerImpl::didDraw(ResourceProvider*) | 142 void LayerImpl::didDraw(ResourceProvider*) |
| 146 { | 143 { |
| 147 #ifndef NDEBUG | 144 #ifndef NDEBUG |
| 148 DCHECK(m_betweenWillDrawAndDidDraw); | 145 DCHECK(m_betweenWillDrawAndDidDraw); |
| 149 m_betweenWillDrawAndDidDraw = false; | 146 m_betweenWillDrawAndDidDraw = false; |
| 150 #endif | 147 #endif |
| 151 } | 148 } |
| 152 | 149 |
| 153 bool LayerImpl::showDebugBorders() const | 150 bool LayerImpl::showDebugBorders() const |
| 154 { | 151 { |
| 155 if (!m_layerTreeHostImpl) | |
| 156 return false; | |
| 157 return m_layerTreeHostImpl->debugState().showDebugBorders; | 152 return m_layerTreeHostImpl->debugState().showDebugBorders; |
| 158 } | 153 } |
| 159 | 154 |
| 160 void LayerImpl::getDebugBorderProperties(SkColor* color, float* width) const | 155 void LayerImpl::getDebugBorderProperties(SkColor* color, float* width) const |
| 161 { | 156 { |
| 162 if (m_drawsContent) { | 157 if (m_drawsContent) { |
| 163 *color = DebugColors::ContentLayerBorderColor(); | 158 *color = DebugColors::ContentLayerBorderColor(); |
| 164 *width = DebugColors::ContentLayerBorderWidth(m_layerTreeHostImpl); | 159 *width = DebugColors::ContentLayerBorderWidth(m_layerTreeHostImpl); |
| 165 return; | 160 return; |
| 166 } | 161 } |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 m_bounds = bounds; | 424 m_bounds = bounds; |
| 430 | 425 |
| 431 if (masksToBounds()) | 426 if (masksToBounds()) |
| 432 noteLayerPropertyChangedForSubtree(); | 427 noteLayerPropertyChangedForSubtree(); |
| 433 else | 428 else |
| 434 m_layerPropertyChanged = true; | 429 m_layerPropertyChanged = true; |
| 435 } | 430 } |
| 436 | 431 |
| 437 void LayerImpl::setMaskLayer(scoped_ptr<LayerImpl> maskLayer) | 432 void LayerImpl::setMaskLayer(scoped_ptr<LayerImpl> maskLayer) |
| 438 { | 433 { |
| 434 if (maskLayer) |
| 435 DCHECK_EQ(layerTreeHostImpl(), maskLayer->layerTreeHostImpl()); |
| 439 m_maskLayer = maskLayer.Pass(); | 436 m_maskLayer = maskLayer.Pass(); |
| 440 | 437 |
| 441 int newLayerId = m_maskLayer ? m_maskLayer->id() : -1; | 438 int newLayerId = m_maskLayer ? m_maskLayer->id() : -1; |
| 442 if (newLayerId == m_maskLayerId) | 439 if (newLayerId == m_maskLayerId) |
| 443 return; | 440 return; |
| 444 | 441 |
| 445 m_maskLayerId = newLayerId; | 442 m_maskLayerId = newLayerId; |
| 446 noteLayerPropertyChangedForSubtree(); | 443 noteLayerPropertyChangedForSubtree(); |
| 447 } | 444 } |
| 448 | 445 |
| 449 void LayerImpl::setReplicaLayer(scoped_ptr<LayerImpl> replicaLayer) | 446 void LayerImpl::setReplicaLayer(scoped_ptr<LayerImpl> replicaLayer) |
| 450 { | 447 { |
| 448 if (replicaLayer) |
| 449 DCHECK_EQ(layerTreeHostImpl(), replicaLayer->layerTreeHostImpl()); |
| 451 m_replicaLayer = replicaLayer.Pass(); | 450 m_replicaLayer = replicaLayer.Pass(); |
| 452 | 451 |
| 453 int newLayerId = m_replicaLayer ? m_replicaLayer->id() : -1; | 452 int newLayerId = m_replicaLayer ? m_replicaLayer->id() : -1; |
| 454 if (newLayerId == m_replicaLayerId) | 453 if (newLayerId == m_replicaLayerId) |
| 455 return; | 454 return; |
| 456 | 455 |
| 457 m_replicaLayerId = newLayerId; | 456 m_replicaLayerId = newLayerId; |
| 458 noteLayerPropertyChangedForSubtree(); | 457 noteLayerPropertyChangedForSubtree(); |
| 459 } | 458 } |
| 460 | 459 |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 | 707 |
| 709 void LayerImpl::setVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbarLayer) | 708 void LayerImpl::setVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbarLayer) |
| 710 { | 709 { |
| 711 if (!m_scrollbarAnimationController) | 710 if (!m_scrollbarAnimationController) |
| 712 m_scrollbarAnimationController = ScrollbarAnimationController::create(th
is); | 711 m_scrollbarAnimationController = ScrollbarAnimationController::create(th
is); |
| 713 m_scrollbarAnimationController->setVerticalScrollbarLayer(scrollbarLayer); | 712 m_scrollbarAnimationController->setVerticalScrollbarLayer(scrollbarLayer); |
| 714 m_scrollbarAnimationController->updateScrollOffset(this); | 713 m_scrollbarAnimationController->updateScrollOffset(this); |
| 715 } | 714 } |
| 716 | 715 |
| 717 } // namespace cc | 716 } // namespace cc |
| OLD | NEW |