Chromium Code Reviews| 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/draw_property_utils.h" | 5 #include "cc/trees/draw_property_utils.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 46 layer->effect_tree_index()); | 46 layer->effect_tree_index()); |
| 47 if (effect_node->owner_id != layer->id()) | 47 if (effect_node->owner_id != layer->id()) |
| 48 return; | 48 return; |
| 49 DCHECK_EQ(effect_node->data.mask_layer_id, -1) << "layer: " << layer->id(); | 49 DCHECK_EQ(effect_node->data.mask_layer_id, -1) << "layer: " << layer->id(); |
| 50 DCHECK_EQ(effect_node->data.replica_layer_id, -1) << "layer: " << layer->id(); | 50 DCHECK_EQ(effect_node->data.replica_layer_id, -1) << "layer: " << layer->id(); |
| 51 DCHECK(effect_node->data.background_filters.IsEmpty()); | 51 DCHECK(effect_node->data.background_filters.IsEmpty()); |
| 52 } | 52 } |
| 53 | 53 |
| 54 #endif | 54 #endif |
| 55 | 55 |
| 56 static void AddSublayerScaleToTransform(const int effect_node_id, | |
| 57 const EffectTree& effect_tree, | |
| 58 gfx::Transform* transform) { | |
| 59 const EffectNode* effect_node = effect_tree.Node(effect_node_id); | |
| 60 const EffectNode* target_effect_node = | |
| 61 effect_node->data.has_render_surface | |
| 62 ? effect_node | |
| 63 : effect_tree.Node(effect_node->data.target_id); | |
| 64 transform->matrix().postScale(target_effect_node->data.sublayer_scale.x(), | |
| 65 target_effect_node->data.sublayer_scale.y(), | |
| 66 1.f); | |
| 67 } | |
| 68 | |
| 69 #if DCHECK_IS_ON() | |
| 70 void VerifySublayerScalesMatch(const int effect_node_id, | |
| 71 const int target_transform_id, | |
| 72 const EffectTree& effect_tree, | |
| 73 const TransformTree& transform_tree) { | |
| 74 const TransformNode* target_transform_node = | |
| 75 transform_tree.Node(target_transform_id); | |
| 76 const EffectNode* effect_node = effect_tree.Node(effect_node_id); | |
| 77 const EffectNode* target_effect_node = | |
| 78 effect_node->data.has_render_surface | |
| 79 ? effect_node | |
| 80 : effect_tree.Node(effect_node->data.target_id); | |
| 81 DCHECK(target_transform_node->data.sublayer_scale == | |
| 82 target_effect_node->data.sublayer_scale) | |
| 83 << " sublayer scale from transform tree: " | |
| 84 << target_transform_node->data.sublayer_scale.ToString() | |
| 85 << " sublayer scale from effect tree: " | |
| 86 << target_effect_node->data.sublayer_scale.ToString(); | |
| 87 } | |
| 88 #endif | |
| 89 | |
| 56 template <typename LayerType> | 90 template <typename LayerType> |
| 57 bool ComputeClipRectInTargetSpace(const LayerType* layer, | 91 bool ComputeClipRectInTargetSpace(const LayerType* layer, |
| 58 const ClipNode* clip_node, | 92 const ClipNode* clip_node, |
| 59 const TransformTree& transform_tree, | 93 const TransformTree& transform_tree, |
| 94 const EffectTree& effect_tree, | |
| 60 int target_node_id, | 95 int target_node_id, |
| 61 gfx::RectF* clip_rect_in_target_space) { | 96 gfx::RectF* clip_rect_in_target_space) { |
| 62 DCHECK(layer->clip_tree_index() == clip_node->id); | 97 DCHECK(layer->clip_tree_index() == clip_node->id); |
| 63 DCHECK(clip_node->data.target_id != target_node_id); | 98 DCHECK(clip_node->data.target_id != target_node_id); |
| 64 | 99 |
| 65 gfx::Transform clip_to_target; | 100 gfx::Transform clip_to_target; |
| 66 if (clip_node->data.target_id > target_node_id) { | 101 if (clip_node->data.target_id > target_node_id) { |
| 67 // In this case, layer has a scroll parent. We need to keep the scale | 102 // In this case, layer has a scroll parent. We need to keep the scale |
| 68 // at the layer's target but remove the scale at the scroll parent's | 103 // at the layer's target but remove the scale at the scroll parent's |
| 69 // target. | 104 // target. |
| 70 if (transform_tree.ComputeTransformWithDestinationSublayerScale( | 105 if (transform_tree.ComputeTransform(clip_node->data.target_id, |
| 71 clip_node->data.target_id, target_node_id, &clip_to_target)) { | 106 target_node_id, &clip_to_target)) { |
| 107 // We don't have to apply sublayer scale when target is root. | |
| 108 if (target_node_id != 0) { | |
| 109 AddSublayerScaleToTransform(layer->effect_tree_index(), effect_tree, | |
| 110 &clip_to_target); | |
| 111 #if DCHECK_IS_ON() | |
| 112 VerifySublayerScalesMatch(layer->effect_tree_index(), target_node_id, | |
| 113 effect_tree, transform_tree); | |
| 114 #endif | |
| 115 } | |
| 116 | |
| 72 const TransformNode* source_node = | 117 const TransformNode* source_node = |
| 73 transform_tree.Node(clip_node->data.target_id); | 118 transform_tree.Node(clip_node->data.target_id); |
| 74 if (source_node->data.sublayer_scale.x() != 0.f && | 119 if (source_node->data.sublayer_scale.x() != 0.f && |
| 75 source_node->data.sublayer_scale.y() != 0.f) | 120 source_node->data.sublayer_scale.y() != 0.f) |
| 76 clip_to_target.Scale(1.0f / source_node->data.sublayer_scale.x(), | 121 clip_to_target.Scale(1.0f / source_node->data.sublayer_scale.x(), |
| 77 1.0f / source_node->data.sublayer_scale.y()); | 122 1.0f / source_node->data.sublayer_scale.y()); |
| 78 *clip_rect_in_target_space = MathUtil::MapClippedRect( | 123 *clip_rect_in_target_space = MathUtil::MapClippedRect( |
| 79 clip_to_target, clip_node->data.clip_in_target_space); | 124 clip_to_target, clip_node->data.clip_in_target_space); |
| 80 } else { | 125 } else { |
| 81 return false; | 126 return false; |
| 82 } | 127 } |
| 83 } else { | 128 } else { |
| 84 if (transform_tree.ComputeTransform(clip_node->data.target_id, | 129 if (transform_tree.ComputeTransform(clip_node->data.target_id, |
| 85 target_node_id, &clip_to_target)) { | 130 target_node_id, &clip_to_target)) { |
| 86 *clip_rect_in_target_space = MathUtil::ProjectClippedRect( | 131 *clip_rect_in_target_space = MathUtil::ProjectClippedRect( |
| 87 clip_to_target, clip_node->data.clip_in_target_space); | 132 clip_to_target, clip_node->data.clip_in_target_space); |
| 88 } else { | 133 } else { |
| 89 return false; | 134 return false; |
| 90 } | 135 } |
| 91 } | 136 } |
| 92 return true; | 137 return true; |
| 93 } | 138 } |
| 94 | 139 |
| 95 struct ConditionalClip { | 140 struct ConditionalClip { |
| 96 bool is_clipped; | 141 bool is_clipped; |
| 97 gfx::RectF clip_rect; | 142 gfx::RectF clip_rect; |
| 98 }; | 143 }; |
| 99 | 144 |
| 100 static ConditionalClip ComputeTargetRectInLocalSpace( | 145 static ConditionalClip ComputeTargetRectInLocalSpace( |
| 101 gfx::RectF rect, | 146 gfx::RectF rect, |
|
jaydasika
2016/07/06 18:52:31
Ah, forgot to upload immediately after rebasing. T
| |
| 102 const TransformTree& transform_tree, | 147 const TransformTree& transform_tree, |
| 103 int current_transform_id, | 148 int current_transform_id, |
| 104 int target_transform_id) { | 149 int target_transform_id) { |
| 105 gfx::Transform current_to_target; | 150 gfx::Transform current_to_target; |
| 106 if (!transform_tree.ComputeTransformWithSourceSublayerScale( | 151 if (!transform_tree.ComputeTransformWithSourceSublayerScale( |
| 107 current_transform_id, target_transform_id, ¤t_to_target)) | 152 current_transform_id, target_transform_id, ¤t_to_target)) |
| 108 // If transform is not invertible, cannot apply clip. | 153 // If transform is not invertible, cannot apply clip. |
| 109 return ConditionalClip{false, gfx::RectF()}; | 154 return ConditionalClip{false, gfx::RectF()}; |
| 110 | 155 |
| 111 if (current_transform_id > target_transform_id) | 156 if (current_transform_id > target_transform_id) |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 260 if (clip_node->data.target_id != target_node_id) { | 305 if (clip_node->data.target_id != target_node_id) { |
| 261 // In this case, layer has a clip parent or scroll parent (or shares the | 306 // In this case, layer has a clip parent or scroll parent (or shares the |
| 262 // target with an ancestor layer that has clip parent) and the clip | 307 // target with an ancestor layer that has clip parent) and the clip |
| 263 // parent's target is different from the layer's target. As the layer's | 308 // parent's target is different from the layer's target. As the layer's |
| 264 // target has unclippped descendants, it is unclippped. | 309 // target has unclippped descendants, it is unclippped. |
| 265 if (!clip_node->data.layers_are_clipped) | 310 if (!clip_node->data.layers_are_clipped) |
| 266 continue; | 311 continue; |
| 267 | 312 |
| 268 // Compute the clip rect in target space and store it. | 313 // Compute the clip rect in target space and store it. |
| 269 if (!ComputeClipRectInTargetSpace(layer, clip_node, transform_tree, | 314 if (!ComputeClipRectInTargetSpace(layer, clip_node, transform_tree, |
| 270 target_node_id, | 315 effect_tree, target_node_id, |
| 271 &clip_rect_in_target_space)) | 316 &clip_rect_in_target_space)) |
| 272 continue; | 317 continue; |
| 273 } | 318 } |
| 274 | 319 |
| 275 if (!clip_rect_in_target_space.IsEmpty()) { | 320 if (!clip_rect_in_target_space.IsEmpty()) { |
| 276 layer->set_clip_rect(gfx::ToEnclosingRect(clip_rect_in_target_space)); | 321 layer->set_clip_rect(gfx::ToEnclosingRect(clip_rect_in_target_space)); |
| 277 } else { | 322 } else { |
| 278 layer->set_clip_rect(gfx::Rect()); | 323 layer->set_clip_rect(gfx::Rect()); |
| 279 } | 324 } |
| 280 } | 325 } |
| 281 } | 326 } |
| 282 } | 327 } |
| 283 | 328 |
| 284 bool GetLayerClipRect(const scoped_refptr<Layer> layer, | 329 bool GetLayerClipRect(const scoped_refptr<Layer> layer, |
| 285 const ClipNode* clip_node, | 330 const ClipNode* clip_node, |
| 286 const TransformTree& transform_tree, | 331 const TransformTree& transform_tree, |
| 332 const EffectTree& effect_tree, | |
| 287 int target_node_id, | 333 int target_node_id, |
| 288 gfx::RectF* clip_rect_in_target_space) { | 334 gfx::RectF* clip_rect_in_target_space) { |
| 289 return ComputeClipRectInTargetSpace(layer.get(), clip_node, transform_tree, | 335 return ComputeClipRectInTargetSpace(layer.get(), clip_node, transform_tree, |
| 290 target_node_id, | 336 effect_tree, target_node_id, |
| 291 clip_rect_in_target_space); | 337 clip_rect_in_target_space); |
| 292 } | 338 } |
| 293 | 339 |
| 294 bool GetLayerClipRect(const LayerImpl* layer, | 340 bool GetLayerClipRect(const LayerImpl* layer, |
| 295 const ClipNode* clip_node, | 341 const ClipNode* clip_node, |
| 296 const TransformTree& transform_tree, | 342 const TransformTree& transform_tree, |
| 343 const EffectTree& effect_tree, | |
| 297 int target_node_id, | 344 int target_node_id, |
| 298 gfx::RectF* clip_rect_in_target_space) { | 345 gfx::RectF* clip_rect_in_target_space) { |
| 299 // This is equivalent of calling ComputeClipRectInTargetSpace. | 346 // This is equivalent of calling ComputeClipRectInTargetSpace. |
| 300 *clip_rect_in_target_space = gfx::RectF(layer->clip_rect()); | 347 *clip_rect_in_target_space = gfx::RectF(layer->clip_rect()); |
| 301 return transform_tree.Node(target_node_id)->data.ancestors_are_invertible; | 348 return transform_tree.Node(target_node_id)->data.ancestors_are_invertible; |
| 302 } | 349 } |
| 303 | 350 |
| 304 template <typename LayerType> | 351 template <typename LayerType> |
| 305 void CalculateVisibleRects( | 352 void CalculateVisibleRects( |
| 306 const typename LayerType::LayerListType& visible_layer_list, | 353 const typename LayerType::LayerListType& visible_layer_list, |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 396 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); | 443 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); |
| 397 continue; | 444 continue; |
| 398 } | 445 } |
| 399 | 446 |
| 400 // We use the clip node's clip_in_target_space (and not | 447 // We use the clip node's clip_in_target_space (and not |
| 401 // combined_clip_in_target_space) here because we want to clip | 448 // combined_clip_in_target_space) here because we want to clip |
| 402 // with respect to clip parent's local clip and not its combined clip as | 449 // with respect to clip parent's local clip and not its combined clip as |
| 403 // the combined clip has even the clip parent's target's clip baked into | 450 // the combined clip has even the clip parent's target's clip baked into |
| 404 // it and as our target is different, we don't want to use it in our | 451 // it and as our target is different, we don't want to use it in our |
| 405 // visible rect computation. | 452 // visible rect computation. |
| 406 if (!GetLayerClipRect(layer, clip_node, transform_tree, target_node_id, | 453 if (!GetLayerClipRect(layer, clip_node, transform_tree, effect_tree, |
| 454 target_node_id, | |
| 407 &combined_clip_rect_in_target_space)) { | 455 &combined_clip_rect_in_target_space)) { |
| 408 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); | 456 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); |
| 409 continue; | 457 continue; |
| 410 } | 458 } |
| 411 } else { | 459 } else { |
| 412 if (clip_node->data.target_is_clipped) { | 460 if (clip_node->data.target_is_clipped) { |
| 413 combined_clip_rect_in_target_space = | 461 combined_clip_rect_in_target_space = |
| 414 clip_node->data.combined_clip_in_target_space; | 462 clip_node->data.combined_clip_in_target_space; |
| 415 } else { | 463 } else { |
| 416 combined_clip_rect_in_target_space = | 464 combined_clip_rect_in_target_space = |
| (...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 910 return node->data.transform_id; | 958 return node->data.transform_id; |
| 911 node = effect_tree.Node(node->data.target_id); | 959 node = effect_tree.Node(node->data.target_id); |
| 912 return node->data.transform_id; | 960 return node->data.transform_id; |
| 913 } | 961 } |
| 914 | 962 |
| 915 static void VerifyDrawTransformsMatch(LayerImpl* layer, | 963 static void VerifyDrawTransformsMatch(LayerImpl* layer, |
| 916 PropertyTrees* property_trees) { | 964 PropertyTrees* property_trees) { |
| 917 const int source_id = layer->transform_tree_index(); | 965 const int source_id = layer->transform_tree_index(); |
| 918 int destination_id = FindTargetTransformTreeIndexFromEffectTree( | 966 int destination_id = FindTargetTransformTreeIndexFromEffectTree( |
| 919 property_trees->effect_tree, layer->effect_tree_index()); | 967 property_trees->effect_tree, layer->effect_tree_index()); |
| 920 // TODO(jaydasika) : Remove this after sorting out how sublayer scale works | |
| 921 // for these ids. | |
| 922 if (destination_id == 0 || destination_id == 1) | |
| 923 return; | |
| 924 gfx::Transform draw_transform; | 968 gfx::Transform draw_transform; |
| 925 property_trees->transform_tree.ComputeTransform(source_id, destination_id, | 969 property_trees->transform_tree.ComputeTransform(source_id, destination_id, |
| 926 &draw_transform); | 970 &draw_transform); |
| 927 TransformNode* target_node = | 971 // We don't have to apply sublayer scale when target is root. |
| 928 property_trees->transform_tree.Node(destination_id); | 972 if (destination_id != 0) { |
| 929 draw_transform.matrix().postScale(target_node->data.sublayer_scale.x(), | 973 AddSublayerScaleToTransform(layer->effect_tree_index(), |
| 930 target_node->data.sublayer_scale.y(), 1.f); | 974 property_trees->effect_tree, &draw_transform); |
| 975 VerifySublayerScalesMatch(layer->effect_tree_index(), destination_id, | |
| 976 property_trees->effect_tree, | |
| 977 property_trees->transform_tree); | |
| 978 } | |
| 931 if (layer->should_flatten_transform_from_property_tree()) | 979 if (layer->should_flatten_transform_from_property_tree()) |
| 932 draw_transform.FlattenTo2d(); | 980 draw_transform.FlattenTo2d(); |
| 933 draw_transform.Translate(layer->offset_to_transform_parent().x(), | 981 draw_transform.Translate(layer->offset_to_transform_parent().x(), |
| 934 layer->offset_to_transform_parent().y()); | 982 layer->offset_to_transform_parent().y()); |
| 935 DCHECK(draw_transform.ApproximatelyEqual( | 983 DCHECK(draw_transform.ApproximatelyEqual( |
| 936 DrawTransform(layer, property_trees->transform_tree))) | 984 DrawTransform(layer, property_trees->transform_tree))) |
| 937 << " layer: " << layer->id() << " source transform id: " << source_id | 985 << " layer: " << layer->id() << " source transform id: " << source_id |
| 938 << " destination transform id: " << destination_id | 986 << " destination transform id: " << destination_id |
| 939 << " draw transform from transform tree: " | 987 << " draw transform from transform tree: " |
| 940 << DrawTransform(layer, property_trees->transform_tree).ToString() | 988 << DrawTransform(layer, property_trees->transform_tree).ToString() |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1086 xform.FlattenTo2d(); | 1134 xform.FlattenTo2d(); |
| 1087 xform.Translate(layer->offset_to_transform_parent().x(), | 1135 xform.Translate(layer->offset_to_transform_parent().x(), |
| 1088 layer->offset_to_transform_parent().y()); | 1136 layer->offset_to_transform_parent().y()); |
| 1089 } else { | 1137 } else { |
| 1090 // Surfaces need to apply their sublayer scale. | 1138 // Surfaces need to apply their sublayer scale. |
| 1091 xform.Scale(node->data.sublayer_scale.x(), node->data.sublayer_scale.y()); | 1139 xform.Scale(node->data.sublayer_scale.x(), node->data.sublayer_scale.y()); |
| 1092 } | 1140 } |
| 1093 return xform; | 1141 return xform; |
| 1094 } | 1142 } |
| 1095 | 1143 |
| 1096 static void SetSurfaceDrawTransform(const TransformTree& tree, | 1144 static void SetSurfaceDrawTransform(const TransformTree& transform_tree, |
| 1145 const EffectTree& effect_tree, | |
| 1097 RenderSurfaceImpl* render_surface) { | 1146 RenderSurfaceImpl* render_surface) { |
| 1098 const TransformNode* node = tree.Node(render_surface->TransformTreeIndex()); | 1147 const TransformNode* transform_node = |
| 1148 transform_tree.Node(render_surface->TransformTreeIndex()); | |
| 1149 const EffectNode* effect_node = | |
| 1150 effect_tree.Node(render_surface->EffectTreeIndex()); | |
| 1099 // The draw transform of root render surface is identity tranform. | 1151 // The draw transform of root render surface is identity tranform. |
| 1100 if (node->id == 1) { | 1152 if (transform_node->id == 1) { |
| 1101 render_surface->SetDrawTransform(gfx::Transform()); | 1153 render_surface->SetDrawTransform(gfx::Transform()); |
| 1102 return; | 1154 return; |
| 1103 } | 1155 } |
| 1104 | 1156 |
| 1105 gfx::Transform render_surface_transform; | 1157 gfx::Transform render_surface_transform; |
| 1106 const TransformNode* target_node = tree.Node(tree.TargetId(node->id)); | 1158 const TransformNode* target_transform_node = |
| 1107 tree.ComputeTransformWithDestinationSublayerScale(node->id, target_node->id, | 1159 transform_tree.Node(transform_tree.TargetId(transform_node->id)); |
| 1108 &render_surface_transform); | 1160 transform_tree.ComputeTransform(transform_node->id, target_transform_node->id, |
| 1109 if (node->data.sublayer_scale.x() != 0.0 && | 1161 &render_surface_transform); |
| 1110 node->data.sublayer_scale.y() != 0.0) | 1162 // We don't have to apply sublayer scale when target is root. |
| 1111 render_surface_transform.Scale(1.0 / node->data.sublayer_scale.x(), | 1163 if (target_transform_node->id != 0) { |
| 1112 1.0 / node->data.sublayer_scale.y()); | 1164 AddSublayerScaleToTransform(effect_node->data.target_id, effect_tree, |
| 1165 &render_surface_transform); | |
| 1166 VerifySublayerScalesMatch(effect_node->data.target_id, | |
|
ajuma
2016/07/06 21:35:29
This should be called only if DCHECK_IS_ON.
jaydasika
2016/07/06 22:18:40
Done.
| |
| 1167 target_transform_node->id, effect_tree, | |
| 1168 transform_tree); | |
| 1169 } | |
| 1170 | |
| 1171 DCHECK(transform_node->data.sublayer_scale == | |
| 1172 effect_node->data.sublayer_scale); | |
| 1173 if (effect_node->data.sublayer_scale.x() != 0.0 && | |
| 1174 effect_node->data.sublayer_scale.y() != 0.0) | |
| 1175 render_surface_transform.Scale(1.0 / effect_node->data.sublayer_scale.x(), | |
| 1176 1.0 / effect_node->data.sublayer_scale.y()); | |
| 1113 render_surface->SetDrawTransform(render_surface_transform); | 1177 render_surface->SetDrawTransform(render_surface_transform); |
| 1114 } | 1178 } |
| 1115 | 1179 |
| 1116 static void SetSurfaceIsClipped(const ClipNode* clip_node, | 1180 static void SetSurfaceIsClipped(const ClipNode* clip_node, |
| 1117 RenderSurfaceImpl* render_surface) { | 1181 RenderSurfaceImpl* render_surface) { |
| 1118 DCHECK(render_surface->OwningLayerId() == clip_node->owner_id) | 1182 DCHECK(render_surface->OwningLayerId() == clip_node->owner_id) |
| 1119 << "we now create clip node for every render surface"; | 1183 << "we now create clip node for every render surface"; |
| 1120 | 1184 |
| 1121 render_surface->SetIsClipped(clip_node->data.target_is_clipped); | 1185 render_surface->SetIsClipped(clip_node->data.target_is_clipped); |
| 1122 } | 1186 } |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1296 gfx::Rect(mask_layer->bounds()); | 1360 gfx::Rect(mask_layer->bounds()); |
| 1297 } | 1361 } |
| 1298 | 1362 |
| 1299 void ComputeSurfaceDrawProperties(const PropertyTrees* property_trees, | 1363 void ComputeSurfaceDrawProperties(const PropertyTrees* property_trees, |
| 1300 RenderSurfaceImpl* render_surface) { | 1364 RenderSurfaceImpl* render_surface) { |
| 1301 const ClipNode* clip_node = | 1365 const ClipNode* clip_node = |
| 1302 property_trees->clip_tree.Node(render_surface->ClipTreeIndex()); | 1366 property_trees->clip_tree.Node(render_surface->ClipTreeIndex()); |
| 1303 | 1367 |
| 1304 SetSurfaceIsClipped(clip_node, render_surface); | 1368 SetSurfaceIsClipped(clip_node, render_surface); |
| 1305 SetSurfaceDrawOpacity(property_trees->effect_tree, render_surface); | 1369 SetSurfaceDrawOpacity(property_trees->effect_tree, render_surface); |
| 1306 SetSurfaceDrawTransform(property_trees->transform_tree, render_surface); | 1370 SetSurfaceDrawTransform(property_trees->transform_tree, |
| 1371 property_trees->effect_tree, render_surface); | |
| 1307 render_surface->SetScreenSpaceTransform( | 1372 render_surface->SetScreenSpaceTransform( |
| 1308 property_trees->transform_tree.ToScreenSpaceTransformWithoutSublayerScale( | 1373 property_trees->transform_tree.ToScreenSpaceTransformWithoutSublayerScale( |
| 1309 render_surface->TransformTreeIndex())); | 1374 render_surface->TransformTreeIndex())); |
| 1310 | 1375 |
| 1311 if (render_surface->HasReplica()) { | 1376 if (render_surface->HasReplica()) { |
| 1312 gfx::Transform replica_to_surface = ReplicaToSurfaceTransform( | 1377 gfx::Transform replica_to_surface = ReplicaToSurfaceTransform( |
| 1313 render_surface, property_trees->transform_tree); | 1378 render_surface, property_trees->transform_tree); |
| 1314 render_surface->SetReplicaDrawTransform(render_surface->draw_transform() * | 1379 render_surface->SetReplicaDrawTransform(render_surface->draw_transform() * |
| 1315 replica_to_surface); | 1380 replica_to_surface); |
| 1316 render_surface->SetReplicaScreenSpaceTransform( | 1381 render_surface->SetReplicaScreenSpaceTransform( |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1420 void UpdateElasticOverscroll(PropertyTrees* property_trees, | 1485 void UpdateElasticOverscroll(PropertyTrees* property_trees, |
| 1421 const Layer* overscroll_elasticity_layer, | 1486 const Layer* overscroll_elasticity_layer, |
| 1422 const gfx::Vector2dF& elastic_overscroll) { | 1487 const gfx::Vector2dF& elastic_overscroll) { |
| 1423 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, | 1488 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, |
| 1424 elastic_overscroll); | 1489 elastic_overscroll); |
| 1425 } | 1490 } |
| 1426 | 1491 |
| 1427 } // namespace draw_property_utils | 1492 } // namespace draw_property_utils |
| 1428 | 1493 |
| 1429 } // namespace cc | 1494 } // namespace cc |
| OLD | NEW |