| OLD | NEW |
| 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 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 Animation::TRANSFORM); | 178 Animation::TRANSFORM); |
| 179 | 179 |
| 180 const bool has_surface = !!layer->render_surface(); | 180 const bool has_surface = !!layer->render_surface(); |
| 181 | 181 |
| 182 bool requires_node = is_root || is_scrollable || has_significant_transform || | 182 bool requires_node = is_root || is_scrollable || has_significant_transform || |
| 183 has_potentially_animated_transform || has_surface || | 183 has_potentially_animated_transform || has_surface || |
| 184 is_page_scale_application_layer; | 184 is_page_scale_application_layer; |
| 185 | 185 |
| 186 LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer); | 186 LayerType* transform_parent = GetTransformParent(data_from_ancestor, layer); |
| 187 | 187 |
| 188 gfx::Vector2dF parent_offset; | 188 int parent_index = 0; |
| 189 if (transform_parent) |
| 190 parent_index = transform_parent->transform_tree_index(); |
| 191 |
| 192 int source_index = parent_index; |
| 193 |
| 194 gfx::Vector2dF source_offset; |
| 189 if (transform_parent) { | 195 if (transform_parent) { |
| 190 if (layer->scroll_parent()) { | 196 if (layer->scroll_parent()) { |
| 191 gfx::Transform to_parent; | |
| 192 LayerType* source = layer->parent(); | 197 LayerType* source = layer->parent(); |
| 193 parent_offset += source->offset_to_transform_parent(); | 198 source_offset += source->offset_to_transform_parent(); |
| 194 data_from_ancestor.transform_tree->ComputeTransform( | 199 source_index = source->transform_tree_index(); |
| 195 source->transform_tree_index(), | |
| 196 transform_parent->transform_tree_index(), &to_parent); | |
| 197 parent_offset += to_parent.To2dTranslation(); | |
| 198 } else if (!is_fixed) { | 200 } else if (!is_fixed) { |
| 199 parent_offset = transform_parent->offset_to_transform_parent(); | 201 source_offset = transform_parent->offset_to_transform_parent(); |
| 200 } else { | 202 } else { |
| 201 if (data_from_ancestor.transform_tree_parent != | 203 if (data_from_ancestor.transform_tree_parent != |
| 202 data_from_ancestor.transform_fixed_parent) { | 204 data_from_ancestor.transform_fixed_parent) { |
| 203 gfx::Vector2dF fixed_offset = data_from_ancestor.transform_tree_parent | 205 source_offset = data_from_ancestor.transform_tree_parent |
| 204 ->offset_to_transform_parent(); | 206 ->offset_to_transform_parent(); |
| 205 gfx::Transform parent_to_parent; | 207 source_index = |
| 206 data_from_ancestor.transform_tree->ComputeTransform( | 208 data_from_ancestor.transform_tree_parent->transform_tree_index(); |
| 207 data_from_ancestor.transform_tree_parent->transform_tree_index(), | |
| 208 data_from_ancestor.transform_fixed_parent->transform_tree_index(), | |
| 209 &parent_to_parent); | |
| 210 | |
| 211 fixed_offset += parent_to_parent.To2dTranslation(); | |
| 212 parent_offset += fixed_offset; | |
| 213 } | 209 } |
| 214 parent_offset += data_from_ancestor.scroll_compensation_adjustment; | 210 source_offset += data_from_ancestor.scroll_compensation_adjustment; |
| 215 } | 211 } |
| 216 } | 212 } |
| 217 | 213 |
| 218 if (layer->IsContainerForFixedPositionLayers() || is_root) | 214 if (layer->IsContainerForFixedPositionLayers() || is_root) |
| 219 data_for_children->transform_fixed_parent = layer; | 215 data_for_children->transform_fixed_parent = layer; |
| 220 data_for_children->transform_tree_parent = layer; | 216 data_for_children->transform_tree_parent = layer; |
| 221 | 217 |
| 222 if (layer->IsContainerForFixedPositionLayers() || is_fixed) | 218 if (layer->IsContainerForFixedPositionLayers() || is_fixed) |
| 223 data_for_children->scroll_compensation_adjustment = gfx::Vector2dF(); | 219 data_for_children->scroll_compensation_adjustment = gfx::Vector2dF(); |
| 224 | 220 |
| 225 if (!requires_node) { | 221 if (!requires_node) { |
| 226 data_for_children->should_flatten |= layer->should_flatten_transform(); | 222 data_for_children->should_flatten |= layer->should_flatten_transform(); |
| 227 gfx::Vector2dF local_offset = layer->position().OffsetFromOrigin() + | 223 gfx::Vector2dF local_offset = layer->position().OffsetFromOrigin() + |
| 228 layer->transform().To2dTranslation(); | 224 layer->transform().To2dTranslation(); |
| 229 layer->set_offset_to_transform_parent(parent_offset + local_offset); | 225 gfx::Vector2dF source_to_parent; |
| 226 if (source_index != parent_index) { |
| 227 gfx::Transform to_parent; |
| 228 data_from_ancestor.transform_tree->ComputeTransform( |
| 229 source_index, parent_index, &to_parent); |
| 230 source_to_parent = to_parent.To2dTranslation(); |
| 231 } |
| 232 layer->set_offset_to_transform_parent(source_offset + source_to_parent + |
| 233 local_offset); |
| 230 layer->set_should_flatten_transform_from_property_tree( | 234 layer->set_should_flatten_transform_from_property_tree( |
| 231 data_from_ancestor.should_flatten); | 235 data_from_ancestor.should_flatten); |
| 232 layer->set_transform_tree_index(transform_parent->transform_tree_index()); | 236 layer->set_transform_tree_index(parent_index); |
| 233 return false; | 237 return false; |
| 234 } | 238 } |
| 235 | 239 |
| 236 int parent_index = 0; | |
| 237 if (transform_parent) | |
| 238 parent_index = transform_parent->transform_tree_index(); | |
| 239 | |
| 240 data_for_children->transform_tree->Insert(TransformNode(), parent_index); | 240 data_for_children->transform_tree->Insert(TransformNode(), parent_index); |
| 241 | 241 |
| 242 TransformNode* node = data_for_children->transform_tree->back(); | 242 TransformNode* node = data_for_children->transform_tree->back(); |
| 243 layer->set_transform_tree_index(node->id); | 243 layer->set_transform_tree_index(node->id); |
| 244 | 244 |
| 245 node->data.scrolls = is_scrollable; | 245 node->data.scrolls = is_scrollable; |
| 246 node->data.flattens_inherited_transform = data_for_children->should_flatten; | 246 node->data.flattens_inherited_transform = data_for_children->should_flatten; |
| 247 | 247 |
| 248 // Surfaces inherently flatten transforms. | 248 // Surfaces inherently flatten transforms. |
| 249 data_for_children->should_flatten = | 249 data_for_children->should_flatten = |
| (...skipping 19 matching lines...) Expand all Loading... |
| 269 node->data.layer_scale_factor = data_from_ancestor.device_scale_factor; | 269 node->data.layer_scale_factor = data_from_ancestor.device_scale_factor; |
| 270 if (data_from_ancestor.in_subtree_of_page_scale_application_layer) | 270 if (data_from_ancestor.in_subtree_of_page_scale_application_layer) |
| 271 node->data.layer_scale_factor *= data_from_ancestor.page_scale_factor; | 271 node->data.layer_scale_factor *= data_from_ancestor.page_scale_factor; |
| 272 } | 272 } |
| 273 | 273 |
| 274 if (is_root) { | 274 if (is_root) { |
| 275 node->data.post_local.Scale(post_local_scale_factor, | 275 node->data.post_local.Scale(post_local_scale_factor, |
| 276 post_local_scale_factor); | 276 post_local_scale_factor); |
| 277 } else { | 277 } else { |
| 278 node->data.post_local_scale_factor = post_local_scale_factor; | 278 node->data.post_local_scale_factor = post_local_scale_factor; |
| 279 node->data.parent_offset = parent_offset; | 279 node->data.source_offset = source_offset; |
| 280 node->data.source_node_id = source_index; |
| 280 node->data.update_post_local_transform(layer->position(), | 281 node->data.update_post_local_transform(layer->position(), |
| 281 layer->transform_origin()); | 282 layer->transform_origin()); |
| 282 } | 283 } |
| 283 | 284 |
| 284 if (!layer->scroll_parent()) { | 285 if (!layer->scroll_parent()) { |
| 285 node->data.scroll_offset = | 286 node->data.scroll_offset = |
| 286 gfx::ScrollOffsetToVector2dF(layer->CurrentScrollOffset()); | 287 gfx::ScrollOffsetToVector2dF(layer->CurrentScrollOffset()); |
| 287 } | 288 } |
| 288 | 289 |
| 289 node->data.local = layer->transform(); | 290 node->data.local = layer->transform(); |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 float device_scale_factor, | 445 float device_scale_factor, |
| 445 const gfx::Rect& viewport, | 446 const gfx::Rect& viewport, |
| 446 const gfx::Transform& device_transform, | 447 const gfx::Transform& device_transform, |
| 447 PropertyTrees* property_trees) { | 448 PropertyTrees* property_trees) { |
| 448 BuildPropertyTreesTopLevelInternal( | 449 BuildPropertyTreesTopLevelInternal( |
| 449 root_layer, page_scale_layer, page_scale_factor, device_scale_factor, | 450 root_layer, page_scale_layer, page_scale_factor, device_scale_factor, |
| 450 viewport, device_transform, property_trees); | 451 viewport, device_transform, property_trees); |
| 451 } | 452 } |
| 452 | 453 |
| 453 } // namespace cc | 454 } // namespace cc |
| OLD | NEW |