| Index: cc/trees/property_tree.cc
|
| diff --git a/cc/trees/property_tree.cc b/cc/trees/property_tree.cc
|
| index acc34795448ed974e952394e018b5092d051f8e9..dddba3637390bb3f6c6a22b9cc5768d4935666ad 100644
|
| --- a/cc/trees/property_tree.cc
|
| +++ b/cc/trees/property_tree.cc
|
| @@ -607,11 +607,9 @@ void TransformTree::UpdateTargetSpaceTransform(TransformNode* node,
|
| // to the root of the transform tree in ComputeTransform.
|
| int target_id = target_node->id;
|
| ComputeTransform(node->id, target_id, &target_space_transform);
|
| - if (target_id != kRootNodeId) {
|
| - target_space_transform.matrix().postScale(
|
| - target_node->surface_contents_scale.x(),
|
| - target_node->surface_contents_scale.y(), 1.f);
|
| - }
|
| + target_space_transform.matrix().postScale(
|
| + target_node->surface_contents_scale.x(),
|
| + target_node->surface_contents_scale.y(), 1.f);
|
| }
|
|
|
| gfx::Transform from_target;
|
| @@ -707,15 +705,18 @@ void TransformTree::UpdateNodeAndAncestorsAreAnimatedOrInvertible(
|
|
|
| void TransformTree::SetDeviceTransform(const gfx::Transform& transform,
|
| gfx::PointF root_position) {
|
| - gfx::Transform root_post_local = transform;
|
| - TransformNode* node = Node(1);
|
| - root_post_local.Scale(node->post_local_scale_factor,
|
| - node->post_local_scale_factor);
|
| - root_post_local.Translate(root_position.x(), root_position.y());
|
| - if (node->post_local == root_post_local)
|
| + gfx::Vector2dF device_transform_scale_components =
|
| + MathUtil::ComputeTransform2dScaleComponents(transform, 1.f);
|
| + gfx::Transform post_local = transform;
|
| + post_local.matrix().postScale(1.f / device_transform_scale_components.x(),
|
| + 1.f / device_transform_scale_components.y(),
|
| + 1.f);
|
| + post_local.Translate(root_position.x(), root_position.y());
|
| +
|
| + TransformNode* node = Node(kContentsRootNodeId);
|
| + if (node->post_local == post_local)
|
| return;
|
| -
|
| - node->post_local = root_post_local;
|
| + node->post_local = post_local;
|
| node->needs_local_transform_update = true;
|
| set_needs_update(true);
|
| }
|
| @@ -731,6 +732,32 @@ void TransformTree::SetDeviceTransformScaleFactor(
|
| device_transform_scale_components.y());
|
| }
|
|
|
| +void TransformTree::SetScreenSpaceScale(float device_scale_factor,
|
| + float page_scale_factor_for_root,
|
| + gfx::Transform device_transform) {
|
| + gfx::Vector2dF device_transform_scale_components =
|
| + MathUtil::ComputeTransform2dScaleComponents(device_transform, 1.f);
|
| + gfx::Vector2dF screen_space_scale_components(
|
| + device_transform_scale_components.x() * device_scale_factor *
|
| + page_scale_factor_for_root,
|
| + device_transform_scale_components.y() * device_scale_factor *
|
| + page_scale_factor_for_root);
|
| + TransformNode* node = Node(kRootNodeId);
|
| + if (node->surface_contents_scale == screen_space_scale_components)
|
| + return;
|
| + node->needs_surface_contents_scale = true;
|
| + node->surface_contents_scale = screen_space_scale_components;
|
| + gfx::Transform to_screen;
|
| + to_screen.Scale(node->surface_contents_scale.x(),
|
| + node->surface_contents_scale.y());
|
| + SetToScreen(node->id, to_screen);
|
| + gfx::Transform from_screen;
|
| + if (!ToScreen(node->id).GetInverse(&from_screen))
|
| + node->ancestors_are_invertible = false;
|
| + SetFromScreen(node->id, from_screen);
|
| + set_needs_update(true);
|
| +}
|
| +
|
| void TransformTree::UpdateInnerViewportContainerBoundsDelta() {
|
| if (nodes_affected_by_inner_viewport_bounds_delta_.empty())
|
| return;
|
| @@ -1027,8 +1054,7 @@ void EffectTree::UpdateBackfaceVisibility(EffectNode* node,
|
| }
|
|
|
| void EffectTree::UpdateSurfaceContentsScale(EffectNode* effect_node) {
|
| - if (!effect_node->has_render_surface ||
|
| - effect_node->transform_id == kRootNodeId) {
|
| + if (!effect_node->has_render_surface) {
|
| effect_node->surface_contents_scale = gfx::Vector2dF(1.0f, 1.0f);
|
| return;
|
| }
|
| @@ -1148,11 +1174,8 @@ void EffectTree::TakeCopyRequestsAndTransformToSurface(
|
| gfx::Transform transform;
|
| property_trees()->transform_tree.ComputeTransform(source_id, destination_id,
|
| &transform);
|
| - if (effect_node->id != kContentsRootNodeId) {
|
| - transform.matrix().postScale(effect_node->surface_contents_scale.x(),
|
| - effect_node->surface_contents_scale.y(),
|
| - 1.f);
|
| - }
|
| + transform.matrix().postScale(effect_node->surface_contents_scale.x(),
|
| + effect_node->surface_contents_scale.y(), 1.f);
|
| it->set_area(MathUtil::MapEnclosingClippedRect(transform, it->area()));
|
| }
|
| }
|
|
|