| 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 << target_transform_node->surface_contents_scale.ToString() | 74 << target_transform_node->surface_contents_scale.ToString() |
| 75 << " surface contents scale from effect tree: " | 75 << " surface contents scale from effect tree: " |
| 76 << target_effect_node->surface_contents_scale.ToString(); | 76 << target_effect_node->surface_contents_scale.ToString(); |
| 77 } | 77 } |
| 78 #endif | 78 #endif |
| 79 | 79 |
| 80 static const EffectNode* ContentsTargetEffectNode( | 80 static const EffectNode* ContentsTargetEffectNode( |
| 81 const int effect_tree_index, | 81 const int effect_tree_index, |
| 82 const EffectTree& effect_tree) { | 82 const EffectTree& effect_tree) { |
| 83 const EffectNode* effect_node = effect_tree.Node(effect_tree_index); | 83 const EffectNode* effect_node = effect_tree.Node(effect_tree_index); |
| 84 return effect_node->has_render_surface | 84 return effect_node->render_surface ? effect_node |
| 85 ? effect_node | 85 : effect_tree.Node(effect_node->target_id); |
| 86 : effect_tree.Node(effect_node->target_id); | |
| 87 } | 86 } |
| 88 | 87 |
| 89 template <typename LayerType> | 88 template <typename LayerType> |
| 90 bool ComputeClipRectInTargetSpace(const LayerType* layer, | 89 bool ComputeClipRectInTargetSpace(const LayerType* layer, |
| 91 const ClipNode* clip_node, | 90 const ClipNode* clip_node, |
| 92 const PropertyTrees* property_trees, | 91 const PropertyTrees* property_trees, |
| 93 int target_node_id, | 92 int target_node_id, |
| 94 gfx::RectF* clip_rect_in_target_space) { | 93 gfx::RectF* clip_rect_in_target_space) { |
| 95 DCHECK(layer->clip_tree_index() == clip_node->id); | 94 DCHECK(layer->clip_tree_index() == clip_node->id); |
| 96 DCHECK(clip_node->target_transform_id != target_node_id); | 95 DCHECK(clip_node->target_transform_id != target_node_id); |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 ContentsTargetEffectNode(layer->effect_tree_index(), effect_tree); | 523 ContentsTargetEffectNode(layer->effect_tree_index(), effect_tree); |
| 525 bool success = property_trees->ComputeTransformFromTarget( | 524 bool success = property_trees->ComputeTransformFromTarget( |
| 526 transform_node->id, target_effect_node->id, &target_to_layer); | 525 transform_node->id, target_effect_node->id, &target_to_layer); |
| 527 if (!success) { | 526 if (!success) { |
| 528 // An animated singular transform may become non-singular during the | 527 // An animated singular transform may become non-singular during the |
| 529 // animation, so we still need to compute a visible rect. In this | 528 // animation, so we still need to compute a visible rect. In this |
| 530 // situation, we treat the entire layer as visible. | 529 // situation, we treat the entire layer as visible. |
| 531 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); | 530 layer->set_visible_layer_rect(gfx::Rect(layer_bounds)); |
| 532 continue; | 531 continue; |
| 533 } | 532 } |
| 534 if (target_effect_node->id != EffectTree::kContentsRootNodeId) { | 533 if (target_effect_node->id > EffectTree::kContentsRootNodeId) { |
| 535 ConcatInverseSurfaceContentsScale(target_effect_node, &target_to_layer); | 534 ConcatInverseSurfaceContentsScale(target_effect_node, &target_to_layer); |
| 536 #if DCHECK_IS_ON() | 535 #if DCHECK_IS_ON() |
| 537 VerifySurfaceContentsScalesMatch(target_effect_node->id, target_node_id, | 536 VerifySurfaceContentsScalesMatch(target_effect_node->id, target_node_id, |
| 538 effect_tree, transform_tree); | 537 effect_tree, transform_tree); |
| 539 #endif | 538 #endif |
| 540 } | 539 } |
| 541 } | 540 } |
| 542 gfx::Transform target_to_content; | 541 gfx::Transform target_to_content; |
| 543 target_to_content.Translate(-layer->offset_to_transform_parent().x(), | 542 target_to_content.Translate(-layer->offset_to_transform_parent().x(), |
| 544 -layer->offset_to_transform_parent().y()); | 543 -layer->offset_to_transform_parent().y()); |
| (...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1200 bool layer_is_drawn, | 1199 bool layer_is_drawn, |
| 1201 const TransformTree& tree) { | 1200 const TransformTree& tree) { |
| 1202 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree); | 1201 return LayerNeedsUpdateInternal(layer, layer_is_drawn, tree); |
| 1203 } | 1202 } |
| 1204 | 1203 |
| 1205 gfx::Transform DrawTransform(const LayerImpl* layer, | 1204 gfx::Transform DrawTransform(const LayerImpl* layer, |
| 1206 const TransformTree& transform_tree, | 1205 const TransformTree& transform_tree, |
| 1207 const EffectTree& effect_tree) { | 1206 const EffectTree& effect_tree) { |
| 1208 gfx::Transform xform; | 1207 gfx::Transform xform; |
| 1209 const bool owns_non_root_surface = | 1208 const bool owns_non_root_surface = |
| 1210 !IsRootLayer(layer) && layer->has_render_surface(); | 1209 !IsRootLayer(layer) && layer->render_surface(); |
| 1211 if (!owns_non_root_surface) { | 1210 if (!owns_non_root_surface) { |
| 1212 // If you're not the root, or you don't own a surface, you need to apply | 1211 // If you're not the root, or you don't own a surface, you need to apply |
| 1213 // your local offset. | 1212 // your local offset. |
| 1214 xform = transform_tree.ToTarget(layer->transform_tree_index(), | 1213 xform = |
| 1215 layer->render_target_effect_tree_index()); | 1214 transform_tree.property_trees()->non_root_surfaces_enabled |
| 1215 ? transform_tree.ToTarget(layer->transform_tree_index(), |
| 1216 layer->render_target_effect_tree_index()) |
| 1217 : transform_tree.ToScreen(layer->transform_tree_index()); |
| 1216 if (layer->should_flatten_transform_from_property_tree()) | 1218 if (layer->should_flatten_transform_from_property_tree()) |
| 1217 xform.FlattenTo2d(); | 1219 xform.FlattenTo2d(); |
| 1218 xform.Translate(layer->offset_to_transform_parent().x(), | 1220 xform.Translate(layer->offset_to_transform_parent().x(), |
| 1219 layer->offset_to_transform_parent().y()); | 1221 layer->offset_to_transform_parent().y()); |
| 1220 } else { | 1222 } else { |
| 1221 // Surfaces need to apply their surface contents scale. | 1223 // Surfaces need to apply their surface contents scale. |
| 1222 const EffectNode* effect_node = | 1224 const EffectNode* effect_node = |
| 1223 effect_tree.Node(layer->effect_tree_index()); | 1225 effect_tree.Node(layer->effect_tree_index()); |
| 1224 xform.Scale(effect_node->surface_contents_scale.x(), | 1226 xform.Scale(effect_node->surface_contents_scale.x(), |
| 1225 effect_node->surface_contents_scale.y()); | 1227 effect_node->surface_contents_scale.y()); |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1435 | 1437 |
| 1436 void ComputeLayerDrawProperties(LayerImpl* layer, | 1438 void ComputeLayerDrawProperties(LayerImpl* layer, |
| 1437 const PropertyTrees* property_trees) { | 1439 const PropertyTrees* property_trees) { |
| 1438 const TransformNode* transform_node = | 1440 const TransformNode* transform_node = |
| 1439 property_trees->transform_tree.Node(layer->transform_tree_index()); | 1441 property_trees->transform_tree.Node(layer->transform_tree_index()); |
| 1440 const ClipNode* clip_node = | 1442 const ClipNode* clip_node = |
| 1441 property_trees->clip_tree.Node(layer->clip_tree_index()); | 1443 property_trees->clip_tree.Node(layer->clip_tree_index()); |
| 1442 | 1444 |
| 1443 layer->draw_properties().screen_space_transform = | 1445 layer->draw_properties().screen_space_transform = |
| 1444 ScreenSpaceTransformInternal(layer, property_trees->transform_tree); | 1446 ScreenSpaceTransformInternal(layer, property_trees->transform_tree); |
| 1445 if (property_trees->non_root_surfaces_enabled) { | 1447 layer->draw_properties().target_space_transform = DrawTransform( |
| 1446 layer->draw_properties().target_space_transform = DrawTransform( | 1448 layer, property_trees->transform_tree, property_trees->effect_tree); |
| 1447 layer, property_trees->transform_tree, property_trees->effect_tree); | |
| 1448 } else { | |
| 1449 layer->draw_properties().target_space_transform = | |
| 1450 layer->draw_properties().screen_space_transform; | |
| 1451 } | |
| 1452 layer->draw_properties().screen_space_transform_is_animating = | 1449 layer->draw_properties().screen_space_transform_is_animating = |
| 1453 transform_node->to_screen_is_potentially_animated; | 1450 transform_node->to_screen_is_potentially_animated; |
| 1454 | 1451 |
| 1455 layer->draw_properties().opacity = | 1452 layer->draw_properties().opacity = |
| 1456 LayerDrawOpacity(layer, property_trees->effect_tree); | 1453 LayerDrawOpacity(layer, property_trees->effect_tree); |
| 1457 if (property_trees->non_root_surfaces_enabled) { | 1454 if (property_trees->non_root_surfaces_enabled) { |
| 1458 layer->draw_properties().is_clipped = clip_node->layers_are_clipped; | 1455 layer->draw_properties().is_clipped = clip_node->layers_are_clipped; |
| 1459 } else { | 1456 } else { |
| 1460 layer->draw_properties().is_clipped = | 1457 layer->draw_properties().is_clipped = |
| 1461 clip_node->layers_are_clipped_when_surfaces_disabled; | 1458 clip_node->layers_are_clipped_when_surfaces_disabled; |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1604 void UpdateElasticOverscroll(PropertyTrees* property_trees, | 1601 void UpdateElasticOverscroll(PropertyTrees* property_trees, |
| 1605 const Layer* overscroll_elasticity_layer, | 1602 const Layer* overscroll_elasticity_layer, |
| 1606 const gfx::Vector2dF& elastic_overscroll) { | 1603 const gfx::Vector2dF& elastic_overscroll) { |
| 1607 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, | 1604 UpdateElasticOverscrollInternal(property_trees, overscroll_elasticity_layer, |
| 1608 elastic_overscroll); | 1605 elastic_overscroll); |
| 1609 } | 1606 } |
| 1610 | 1607 |
| 1611 } // namespace draw_property_utils | 1608 } // namespace draw_property_utils |
| 1612 | 1609 |
| 1613 } // namespace cc | 1610 } // namespace cc |
| OLD | NEW |