Index: cc/trees/draw_property_utils.cc |
diff --git a/cc/trees/draw_property_utils.cc b/cc/trees/draw_property_utils.cc |
index 0cd7b3c9dfe1df9749383160f4fa8309a60460b2..df4571c6616916f696b804b32901fbd1676a5bb9 100644 |
--- a/cc/trees/draw_property_utils.cc |
+++ b/cc/trees/draw_property_utils.cc |
@@ -167,9 +167,10 @@ void CalculateVisibleRects( |
} |
// The clip rect should be intersected with layer rect in target space. |
- gfx::Transform content_to_target = non_root_surfaces_enabled |
- ? transform_node->data.to_target |
- : transform_node->data.to_screen; |
+ gfx::Transform content_to_target = |
+ non_root_surfaces_enabled |
+ ? transform_tree.ToTarget(layer->transform_tree_index()) |
+ : transform_tree.ToScreen(layer->transform_tree_index()); |
content_to_target.Translate(layer->offset_to_transform_parent().x(), |
layer->offset_to_transform_parent().y()); |
@@ -252,7 +253,7 @@ static bool IsLayerBackFaceVisible(LayerType* layer, |
const TransformNode* node = tree.Node(transform_tree_index); |
return layer->use_local_transform_for_backface_visibility() |
? node->data.local.IsBackFaceVisible() |
- : node->data.to_target.IsBackFaceVisible(); |
+ : tree.ToTarget(transform_tree_index).IsBackFaceVisible(); |
} |
static inline bool TransformToScreenIsKnown(Layer* layer, |
@@ -485,7 +486,8 @@ void ComputeClips(ClipTree* clip_tree, |
if (clip_node->data.resets_clip && non_root_surfaces_enabled) { |
if (clip_node->data.applies_local_clip) { |
clip_node->data.clip_in_target_space = MathUtil::MapClippedRect( |
- transform_node->data.to_target, clip_node->data.clip); |
+ transform_tree.ToTarget(clip_node->data.transform_id), |
+ clip_node->data.clip); |
ResetIfHasNanCoordinate(&clip_node->data.clip_in_target_space); |
clip_node->data.combined_clip_in_target_space = |
gfx::IntersectRects(clip_node->data.clip_in_target_space, |
@@ -518,10 +520,12 @@ void ComputeClips(ClipTree* clip_tree, |
gfx::Transform source_to_target; |
if (!non_root_surfaces_enabled) { |
- source_to_target = transform_node->data.to_screen; |
+ source_to_target = |
+ transform_tree.ToScreen(clip_node->data.transform_id); |
} else if (transform_node->data.content_target_id == |
clip_node->data.target_id) { |
- source_to_target = transform_node->data.to_target; |
+ source_to_target = |
+ transform_tree.ToTarget(clip_node->data.transform_id); |
} else { |
success = transform_tree.ComputeTransformWithDestinationSublayerScale( |
transform_node->id, clip_node->data.target_id, &source_to_target); |
@@ -876,7 +880,7 @@ gfx::Transform DrawTransform(const LayerImpl* layer, |
if (!owns_non_root_surface) { |
// If you're not the root, or you don't own a surface, you need to apply |
// your local offset. |
- xform = node->data.to_target; |
+ xform = tree.ToTarget(layer->transform_tree_index()); |
if (layer->should_flatten_transform_from_property_tree()) |
xform.FlattenTo2d(); |
xform.Translate(layer->offset_to_transform_parent().x(), |
@@ -898,7 +902,7 @@ static void SetSurfaceDrawTransform(const TransformTree& tree, |
} |
gfx::Transform render_surface_transform; |
- const TransformNode* target_node = tree.Node(node->data.target_id); |
+ const TransformNode* target_node = tree.Node(tree.TargetId(node->id)); |
tree.ComputeTransformWithDestinationSublayerScale(node->id, target_node->id, |
&render_surface_transform); |
if (node->data.sublayer_scale.x() != 0.0 && |
@@ -926,7 +930,8 @@ static void SetSurfaceClipRect(const ClipNode* parent_clip_node, |
const TransformNode* transform_node = |
transform_tree.Node(render_surface->TransformTreeIndex()); |
- if (transform_node->data.target_id == parent_clip_node->data.target_id) { |
+ if (transform_tree.TargetId(transform_node->id) == |
+ parent_clip_node->data.target_id) { |
render_surface->SetClipRect( |
gfx::ToEnclosingRect(parent_clip_node->data.clip_in_target_space)); |
return; |
@@ -938,7 +943,8 @@ static void SetSurfaceClipRect(const ClipNode* parent_clip_node, |
gfx::Transform clip_parent_target_to_target; |
const bool success = |
transform_tree.ComputeTransformWithDestinationSublayerScale( |
- parent_clip_node->data.target_id, transform_node->data.target_id, |
+ parent_clip_node->data.target_id, |
+ transform_tree.TargetId(transform_node->id), |
&clip_parent_target_to_target); |
if (!success) { |
@@ -946,7 +952,8 @@ static void SetSurfaceClipRect(const ClipNode* parent_clip_node, |
return; |
} |
- DCHECK_LT(parent_clip_node->data.target_id, transform_node->data.target_id); |
+ DCHECK_LT(parent_clip_node->data.target_id, |
+ transform_tree.TargetId(transform_node->id)); |
render_surface->SetClipRect(gfx::ToEnclosingRect(MathUtil::ProjectClippedRect( |
clip_parent_target_to_target, |
parent_clip_node->data.clip_in_target_space))); |
@@ -954,10 +961,10 @@ static void SetSurfaceClipRect(const ClipNode* parent_clip_node, |
template <typename LayerType> |
static gfx::Transform ScreenSpaceTransformInternal(LayerType* layer, |
- const TransformNode* node) { |
+ const TransformTree& tree) { |
gfx::Transform xform(1, 0, 0, 1, layer->offset_to_transform_parent().x(), |
layer->offset_to_transform_parent().y()); |
- gfx::Transform ssxform = node->data.to_screen; |
+ gfx::Transform ssxform = tree.ToScreen(layer->transform_tree_index()); |
xform.ConcatTransform(ssxform); |
if (layer->should_flatten_transform_from_property_tree()) |
xform.FlattenTo2d(); |
@@ -966,14 +973,12 @@ static gfx::Transform ScreenSpaceTransformInternal(LayerType* layer, |
gfx::Transform ScreenSpaceTransform(const Layer* layer, |
const TransformTree& tree) { |
- return ScreenSpaceTransformInternal(layer, |
- tree.Node(layer->transform_tree_index())); |
+ return ScreenSpaceTransformInternal(layer, tree); |
} |
gfx::Transform ScreenSpaceTransform(const LayerImpl* layer, |
const TransformTree& tree) { |
- return ScreenSpaceTransformInternal(layer, |
- tree.Node(layer->transform_tree_index())); |
+ return ScreenSpaceTransformInternal(layer, tree); |
} |
static float LayerDrawOpacity(const LayerImpl* layer, const EffectTree& tree) { |
@@ -1081,7 +1086,7 @@ void ComputeLayerDrawProperties(LayerImpl* layer, |
property_trees->clip_tree.Node(layer->clip_tree_index()); |
layer->draw_properties().screen_space_transform = |
- ScreenSpaceTransformInternal(layer, transform_node); |
+ ScreenSpaceTransformInternal(layer, property_trees->transform_tree); |
if (property_trees->non_root_surfaces_enabled) { |
layer->draw_properties().target_space_transform = |
DrawTransform(layer, property_trees->transform_tree); |