OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "base/auto_reset.h" | 5 #include "base/auto_reset.h" |
6 #include "cc/animation/animation_host.h" | 6 #include "cc/animation/animation_host.h" |
7 #include "cc/layers/layer.h" | 7 #include "cc/layers/layer.h" |
8 #include "cc/proto/layer_tree.pb.h" | 8 #include "cc/proto/layer_tree.pb.h" |
9 #include "cc/trees/layer_tree.h" | 9 #include "cc/trees/layer_tree.h" |
| 10 #include "cc/trees/layer_tree_host.h" |
10 | 11 |
11 namespace cc { | 12 namespace cc { |
12 | 13 |
13 LayerTree::LayerTree(std::unique_ptr<AnimationHost> animation_host) | 14 LayerTree::LayerTree(std::unique_ptr<AnimationHost> animation_host, |
| 15 LayerTreeHost* layer_tree_host) |
14 : in_paint_layer_contents_(false), | 16 : in_paint_layer_contents_(false), |
15 animation_host_(std::move(animation_host)) { | 17 animation_host_(std::move(animation_host)), |
| 18 layer_tree_host_(layer_tree_host) { |
16 DCHECK(animation_host_); | 19 DCHECK(animation_host_); |
| 20 DCHECK(layer_tree_host_); |
| 21 animation_host_->SetMutatorHostClient(this); |
17 } | 22 } |
18 | 23 |
19 LayerTree::~LayerTree() {} | 24 LayerTree::~LayerTree() {} |
20 | 25 |
21 void LayerTree::RegisterLayer(Layer* layer) { | 26 void LayerTree::RegisterLayer(Layer* layer) { |
22 DCHECK(!LayerById(layer->id())); | 27 DCHECK(!LayerById(layer->id())); |
23 DCHECK(!in_paint_layer_contents_); | 28 DCHECK(!in_paint_layer_contents_); |
24 layer_id_map_[layer->id()] = layer; | 29 layer_id_map_[layer->id()] = layer; |
25 if (layer->element_id()) { | 30 if (layer->element_id()) { |
26 animation_host_->RegisterElement(layer->element_id(), | 31 animation_host_->RegisterElement(layer->element_id(), |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 proto->set_in_paint_layer_contents(in_paint_layer_contents()); | 84 proto->set_in_paint_layer_contents(in_paint_layer_contents()); |
80 } | 85 } |
81 | 86 |
82 void LayerTree::FromProtobuf(const proto::LayerTree& proto) { | 87 void LayerTree::FromProtobuf(const proto::LayerTree& proto) { |
83 for (auto layer_id : proto.layers_that_should_push_properties()) { | 88 for (auto layer_id : proto.layers_that_should_push_properties()) { |
84 AddLayerShouldPushProperties(layer_id_map_[layer_id]); | 89 AddLayerShouldPushProperties(layer_id_map_[layer_id]); |
85 } | 90 } |
86 in_paint_layer_contents_ = proto.in_paint_layer_contents(); | 91 in_paint_layer_contents_ = proto.in_paint_layer_contents(); |
87 } | 92 } |
88 | 93 |
| 94 Layer* LayerTree::LayerByElementId(ElementId element_id) const { |
| 95 ElementLayersMap::const_iterator iter = element_layers_map_.find(element_id); |
| 96 return iter != element_layers_map_.end() ? iter->second : nullptr; |
| 97 } |
| 98 |
| 99 void LayerTree::AddToElementMap(Layer* layer) { |
| 100 if (!layer->element_id()) |
| 101 return; |
| 102 |
| 103 element_layers_map_[layer->element_id()] = layer; |
| 104 } |
| 105 |
| 106 void LayerTree::RemoveFromElementMap(Layer* layer) { |
| 107 if (!layer->element_id()) |
| 108 return; |
| 109 |
| 110 element_layers_map_.erase(layer->element_id()); |
| 111 } |
| 112 |
| 113 bool LayerTree::IsElementInList(ElementId element_id, |
| 114 ElementListType list_type) const { |
| 115 return list_type == ElementListType::ACTIVE && LayerByElementId(element_id); |
| 116 } |
| 117 |
| 118 void LayerTree::SetMutatorsNeedCommit() { |
| 119 layer_tree_host_->SetNeedsCommit(); |
| 120 } |
| 121 |
| 122 void LayerTree::SetMutatorsNeedRebuildPropertyTrees() { |
| 123 layer_tree_host_->property_trees()->needs_rebuild = true; |
| 124 } |
| 125 |
| 126 void LayerTree::SetElementFilterMutated(ElementId element_id, |
| 127 ElementListType list_type, |
| 128 const FilterOperations& filters) { |
| 129 Layer* layer = LayerByElementId(element_id); |
| 130 DCHECK(layer); |
| 131 layer->OnFilterAnimated(filters); |
| 132 } |
| 133 |
| 134 void LayerTree::SetElementOpacityMutated(ElementId element_id, |
| 135 ElementListType list_type, |
| 136 float opacity) { |
| 137 Layer* layer = LayerByElementId(element_id); |
| 138 DCHECK(layer); |
| 139 layer->OnOpacityAnimated(opacity); |
| 140 } |
| 141 |
| 142 void LayerTree::SetElementTransformMutated(ElementId element_id, |
| 143 ElementListType list_type, |
| 144 const gfx::Transform& transform) { |
| 145 Layer* layer = LayerByElementId(element_id); |
| 146 DCHECK(layer); |
| 147 layer->OnTransformAnimated(transform); |
| 148 } |
| 149 |
| 150 void LayerTree::SetElementScrollOffsetMutated( |
| 151 ElementId element_id, |
| 152 ElementListType list_type, |
| 153 const gfx::ScrollOffset& scroll_offset) { |
| 154 Layer* layer = LayerByElementId(element_id); |
| 155 DCHECK(layer); |
| 156 layer->OnScrollOffsetAnimated(scroll_offset); |
| 157 } |
| 158 |
| 159 void LayerTree::ElementTransformIsAnimatingChanged( |
| 160 ElementId element_id, |
| 161 ElementListType list_type, |
| 162 AnimationChangeType change_type, |
| 163 bool is_animating) { |
| 164 Layer* layer = LayerByElementId(element_id); |
| 165 if (layer) { |
| 166 switch (change_type) { |
| 167 case AnimationChangeType::POTENTIAL: |
| 168 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); |
| 169 break; |
| 170 case AnimationChangeType::RUNNING: |
| 171 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); |
| 172 break; |
| 173 case AnimationChangeType::BOTH: |
| 174 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); |
| 175 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); |
| 176 break; |
| 177 } |
| 178 } |
| 179 } |
| 180 |
| 181 void LayerTree::ElementOpacityIsAnimatingChanged( |
| 182 ElementId element_id, |
| 183 ElementListType list_type, |
| 184 AnimationChangeType change_type, |
| 185 bool is_animating) { |
| 186 Layer* layer = LayerByElementId(element_id); |
| 187 if (layer) { |
| 188 switch (change_type) { |
| 189 case AnimationChangeType::POTENTIAL: |
| 190 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); |
| 191 break; |
| 192 case AnimationChangeType::RUNNING: |
| 193 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); |
| 194 break; |
| 195 case AnimationChangeType::BOTH: |
| 196 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); |
| 197 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); |
| 198 break; |
| 199 } |
| 200 } |
| 201 } |
| 202 |
| 203 void LayerTree::ElementFilterIsAnimatingChanged(ElementId element_id, |
| 204 ElementListType list_type, |
| 205 AnimationChangeType change_type, |
| 206 bool is_animating) { |
| 207 Layer* layer = LayerByElementId(element_id); |
| 208 if (layer) { |
| 209 switch (change_type) { |
| 210 case AnimationChangeType::POTENTIAL: |
| 211 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating); |
| 212 break; |
| 213 case AnimationChangeType::RUNNING: |
| 214 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating); |
| 215 break; |
| 216 case AnimationChangeType::BOTH: |
| 217 layer->OnFilterIsPotentiallyAnimatingChanged(is_animating); |
| 218 layer->OnFilterIsCurrentlyAnimatingChanged(is_animating); |
| 219 break; |
| 220 } |
| 221 } |
| 222 } |
| 223 |
| 224 gfx::ScrollOffset LayerTree::GetScrollOffsetForAnimation( |
| 225 ElementId element_id) const { |
| 226 Layer* layer = LayerByElementId(element_id); |
| 227 DCHECK(layer); |
| 228 return layer->ScrollOffsetForAnimation(); |
| 229 } |
| 230 |
89 } // namespace cc | 231 } // namespace cc |
OLD | NEW |