| 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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 Animation::TRANSFORM); | 124 Animation::TRANSFORM); |
| 125 | 125 |
| 126 const bool has_surface = !!layer->render_surface(); | 126 const bool has_surface = !!layer->render_surface(); |
| 127 | 127 |
| 128 bool requires_node = is_root || is_scrollable || has_significant_transform || | 128 bool requires_node = is_root || is_scrollable || has_significant_transform || |
| 129 has_animated_transform || has_surface || | 129 has_animated_transform || has_surface || |
| 130 is_page_scale_application_layer; | 130 is_page_scale_application_layer; |
| 131 | 131 |
| 132 Layer* transform_parent = GetTransformParent(data_from_ancestor, layer); | 132 Layer* transform_parent = GetTransformParent(data_from_ancestor, layer); |
| 133 | 133 |
| 134 // May be non-zero if layer is fixed or has a scroll parent. | |
| 135 gfx::Vector2dF parent_offset; | 134 gfx::Vector2dF parent_offset; |
| 136 if (transform_parent) { | 135 if (transform_parent) { |
| 137 // TODO(vollick): This is to mimic existing bugs (crbug.com/441447). | 136 if (layer->scroll_parent()) { |
| 138 if (!is_fixed) { | 137 gfx::Transform to_parent; |
| 138 Layer* source = layer->parent(); |
| 139 parent_offset += source->offset_to_transform_parent(); |
| 140 data_from_ancestor.transform_tree->ComputeTransform( |
| 141 source->transform_tree_index(), |
| 142 transform_parent->transform_tree_index(), &to_parent); |
| 143 parent_offset += to_parent.To2dTranslation(); |
| 144 } else if (!is_fixed) { |
| 139 parent_offset = transform_parent->offset_to_transform_parent(); | 145 parent_offset = transform_parent->offset_to_transform_parent(); |
| 140 } else if (data_from_ancestor.transform_tree_parent != | 146 } else if (data_from_ancestor.transform_tree_parent != |
| 141 data_from_ancestor.transform_fixed_parent) { | 147 data_from_ancestor.transform_fixed_parent) { |
| 142 gfx::Vector2dF fixed_offset = data_from_ancestor.transform_tree_parent | 148 gfx::Vector2dF fixed_offset = data_from_ancestor.transform_tree_parent |
| 143 ->offset_to_transform_parent(); | 149 ->offset_to_transform_parent(); |
| 144 gfx::Transform parent_to_parent; | 150 gfx::Transform parent_to_parent; |
| 145 data_from_ancestor.transform_tree->ComputeTransform( | 151 data_from_ancestor.transform_tree->ComputeTransform( |
| 146 data_from_ancestor.transform_tree_parent->transform_tree_index(), | 152 data_from_ancestor.transform_tree_parent->transform_tree_index(), |
| 147 data_from_ancestor.transform_fixed_parent->transform_tree_index(), | 153 data_from_ancestor.transform_fixed_parent->transform_tree_index(), |
| 148 &parent_to_parent); | 154 &parent_to_parent); |
| 149 | 155 |
| 150 fixed_offset += parent_to_parent.To2dTranslation(); | 156 fixed_offset += parent_to_parent.To2dTranslation(); |
| 151 parent_offset += fixed_offset; | 157 parent_offset += fixed_offset; |
| 152 } | 158 } |
| 153 | |
| 154 gfx::Transform to_parent; | |
| 155 Layer* source = data_from_ancestor.transform_tree_parent; | |
| 156 if (layer->scroll_parent()) { | |
| 157 source = layer->parent(); | |
| 158 parent_offset += layer->parent()->offset_to_transform_parent(); | |
| 159 } | |
| 160 data_from_ancestor.transform_tree->ComputeTransform( | |
| 161 source->transform_tree_index(), | |
| 162 transform_parent->transform_tree_index(), &to_parent); | |
| 163 | |
| 164 parent_offset += to_parent.To2dTranslation(); | |
| 165 } | 159 } |
| 166 | 160 |
| 167 if (layer->IsContainerForFixedPositionLayers() || is_root) | 161 if (layer->IsContainerForFixedPositionLayers() || is_root) |
| 168 data_for_children->transform_fixed_parent = layer; | 162 data_for_children->transform_fixed_parent = layer; |
| 169 data_for_children->transform_tree_parent = layer; | 163 data_for_children->transform_tree_parent = layer; |
| 170 | 164 |
| 171 if (!requires_node) { | 165 if (!requires_node) { |
| 172 data_for_children->should_flatten |= layer->should_flatten_transform(); | 166 data_for_children->should_flatten |= layer->should_flatten_transform(); |
| 173 gfx::Vector2dF local_offset = layer->position().OffsetFromOrigin() + | 167 gfx::Vector2dF local_offset = layer->position().OffsetFromOrigin() + |
| 174 layer->transform().To2dTranslation(); | 168 layer->transform().To2dTranslation(); |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 data_for_recursion.device_transform = &device_transform; | 321 data_for_recursion.device_transform = &device_transform; |
| 328 | 322 |
| 329 ClipNode root_clip; | 323 ClipNode root_clip; |
| 330 root_clip.data.clip = viewport; | 324 root_clip.data.clip = viewport; |
| 331 root_clip.data.transform_id = 0; | 325 root_clip.data.transform_id = 0; |
| 332 data_for_recursion.clip_tree_parent = clip_tree->Insert(root_clip, 0); | 326 data_for_recursion.clip_tree_parent = clip_tree->Insert(root_clip, 0); |
| 333 BuildPropertyTreesInternal(root_layer, data_for_recursion); | 327 BuildPropertyTreesInternal(root_layer, data_for_recursion); |
| 334 } | 328 } |
| 335 | 329 |
| 336 } // namespace cc | 330 } // namespace cc |
| OLD | NEW |