Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Side by Side Diff: cc/trees/property_tree_builder.cc

Issue 1013463003: Update from https://crrev.com/320931 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/property_tree.cc ('k') | cc/trees/property_tree_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/trees/property_tree_builder.h" 5 #include "cc/trees/property_tree_builder.h"
6 6
7 #include <map> 7 #include <map>
8 #include <set> 8 #include <set>
9 9
10 #include "cc/base/math_util.h" 10 #include "cc/base/math_util.h"
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 166
167 if (layer->IsContainerForFixedPositionLayers() || is_root) 167 if (layer->IsContainerForFixedPositionLayers() || is_root)
168 data_for_children->transform_fixed_parent = layer; 168 data_for_children->transform_fixed_parent = layer;
169 data_for_children->transform_tree_parent = layer; 169 data_for_children->transform_tree_parent = layer;
170 170
171 if (!requires_node) { 171 if (!requires_node) {
172 data_for_children->should_flatten |= layer->should_flatten_transform(); 172 data_for_children->should_flatten |= layer->should_flatten_transform();
173 gfx::Vector2dF local_offset = layer->position().OffsetFromOrigin() + 173 gfx::Vector2dF local_offset = layer->position().OffsetFromOrigin() +
174 layer->transform().To2dTranslation(); 174 layer->transform().To2dTranslation();
175 layer->set_offset_to_transform_parent(parent_offset + local_offset); 175 layer->set_offset_to_transform_parent(parent_offset + local_offset);
176 layer->set_should_flatten_transform_from_property_tree(
177 data_from_ancestor.should_flatten);
176 layer->set_transform_tree_index(transform_parent->transform_tree_index()); 178 layer->set_transform_tree_index(transform_parent->transform_tree_index());
177 return; 179 return;
178 } 180 }
179 181
180 int parent_index = 0; 182 int parent_index = 0;
181 if (transform_parent) 183 if (transform_parent)
182 parent_index = transform_parent->transform_tree_index(); 184 parent_index = transform_parent->transform_tree_index();
183 185
184 data_for_children->transform_tree->Insert(TransformNode(), parent_index); 186 data_for_children->transform_tree->Insert(TransformNode(), parent_index);
185 187
186 TransformNode* node = data_for_children->transform_tree->back(); 188 TransformNode* node = data_for_children->transform_tree->back();
187 layer->set_transform_tree_index(node->id); 189 layer->set_transform_tree_index(node->id);
188 190
189 node->data.scrolls = is_scrollable; 191 node->data.scrolls = is_scrollable;
190 node->data.flattens_inherited_transform = data_for_children->should_flatten; 192 node->data.flattens_inherited_transform = data_for_children->should_flatten;
191 node->data.flattens_local_transform = layer->should_flatten_transform(); 193
192 data_for_children->should_flatten = false; 194 // Surfaces inherently flatten transforms.
195 data_for_children->should_flatten =
196 layer->should_flatten_transform() || has_surface;
193 node->data.target_id = 197 node->data.target_id =
194 data_from_ancestor.render_target->transform_tree_index(); 198 data_from_ancestor.render_target->transform_tree_index();
195 node->data.content_target_id = 199 node->data.content_target_id =
196 data_for_children->render_target->transform_tree_index(); 200 data_for_children->render_target->transform_tree_index();
197 DCHECK_NE(node->data.target_id, -1); 201 DCHECK_NE(node->data.target_id, -1);
198 node->data.is_animated = layer->TransformIsAnimating(); 202 node->data.is_animated = layer->TransformIsAnimating();
199 203
200 float scale_factors = 1.0f; 204 float scale_factors = 1.0f;
201 if (is_root) { 205 if (is_root) {
202 node->data.post_local = *data_from_ancestor.device_transform; 206 node->data.post_local = *data_from_ancestor.device_transform;
(...skipping 23 matching lines...) Expand all
226 230
227 node->data.local = layer->transform(); 231 node->data.local = layer->transform();
228 node->data.pre_local.Translate3d(-layer->transform_origin().x(), 232 node->data.pre_local.Translate3d(-layer->transform_origin().x(),
229 -layer->transform_origin().y(), 233 -layer->transform_origin().y(),
230 -layer->transform_origin().z()); 234 -layer->transform_origin().z());
231 235
232 node->data.needs_local_transform_update = true; 236 node->data.needs_local_transform_update = true;
233 data_from_ancestor.transform_tree->UpdateTransforms(node->id); 237 data_from_ancestor.transform_tree->UpdateTransforms(node->id);
234 238
235 layer->set_offset_to_transform_parent(gfx::Vector2dF()); 239 layer->set_offset_to_transform_parent(gfx::Vector2dF());
240
241 // Flattening (if needed) will be handled by |node|.
242 layer->set_should_flatten_transform_from_property_tree(false);
236 } 243 }
237 244
238 void AddOpacityNodeIfNeeded(const DataForRecursion& data_from_ancestor, 245 void AddOpacityNodeIfNeeded(const DataForRecursion& data_from_ancestor,
239 Layer* layer, 246 Layer* layer,
240 DataForRecursion* data_for_children) { 247 DataForRecursion* data_for_children) {
241 const bool is_root = !layer->parent(); 248 const bool is_root = !layer->parent();
242 const bool has_transparency = layer->opacity() != 1.f; 249 const bool has_transparency = layer->opacity() != 1.f;
243 const bool has_animated_opacity = 250 const bool has_animated_opacity =
244 layer->layer_animation_controller()->IsAnimatingProperty( 251 layer->layer_animation_controller()->IsAnimatingProperty(
245 Animation::OPACITY) || 252 Animation::OPACITY) ||
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 data_for_recursion.device_transform = &device_transform; 327 data_for_recursion.device_transform = &device_transform;
321 328
322 ClipNode root_clip; 329 ClipNode root_clip;
323 root_clip.data.clip = viewport; 330 root_clip.data.clip = viewport;
324 root_clip.data.transform_id = 0; 331 root_clip.data.transform_id = 0;
325 data_for_recursion.clip_tree_parent = clip_tree->Insert(root_clip, 0); 332 data_for_recursion.clip_tree_parent = clip_tree->Insert(root_clip, 0);
326 BuildPropertyTreesInternal(root_layer, data_for_recursion); 333 BuildPropertyTreesInternal(root_layer, data_for_recursion);
327 } 334 }
328 335
329 } // namespace cc 336 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.cc ('k') | cc/trees/property_tree_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698