Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(625)

Side by Side Diff: cc/trees/property_tree.cc

Issue 2452303003: Revert of cc : Move screen space scale factor to root transform node (Closed)
Patch Set: resolve merge conflicts Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/property_tree.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 bool is_invertible = node->is_invertible; 661 bool is_invertible = node->is_invertible;
662 // Even when the current node's transform and the parent's screen space 662 // Even when the current node's transform and the parent's screen space
663 // transform are invertible, the current node's screen space transform can 663 // transform are invertible, the current node's screen space transform can
664 // become uninvertible due to floating-point arithmetic. 664 // become uninvertible due to floating-point arithmetic.
665 if (!node->ancestors_are_invertible && parent_node->ancestors_are_invertible) 665 if (!node->ancestors_are_invertible && parent_node->ancestors_are_invertible)
666 is_invertible = false; 666 is_invertible = false;
667 node->node_and_ancestors_are_animated_or_invertible = 667 node->node_and_ancestors_are_animated_or_invertible =
668 node->has_potential_animation || is_invertible; 668 node->has_potential_animation || is_invertible;
669 } 669 }
670 670
671 void TransformTree::SetContentsRootPostLocalTransform( 671 void TransformTree::SetDeviceTransform(const gfx::Transform& transform,
672 const gfx::Transform& transform, 672 gfx::PointF root_position) {
673 gfx::PointF root_position) { 673 gfx::Transform root_post_local = transform;
674 // The post local transform of the contents root node is set to the device 674 TransformNode* node = Node(1);
675 // transform with scale removed and is also offset by the root layer's 675 root_post_local.Scale(node->post_local_scale_factor,
676 // position. The scale part of the device transform goes into the screen space 676 node->post_local_scale_factor);
677 // scale stored on the root node. 677 root_post_local.Translate(root_position.x(), root_position.y());
678 gfx::Transform post_local = transform; 678 if (node->post_local == root_post_local)
679 post_local.Translate(root_position.x(), root_position.y()); 679 return;
680 680
681 TransformNode* node = Node(kContentsRootNodeId); 681 node->post_local = root_post_local;
682 if (node->post_local == post_local)
683 return;
684 node->post_local = post_local;
685 node->needs_local_transform_update = true; 682 node->needs_local_transform_update = true;
686 set_needs_update(true); 683 set_needs_update(true);
687 } 684 }
688 685
689 void TransformTree::SetScreenSpaceScaleOnRootNode( 686 void TransformTree::SetDeviceTransformScaleFactor(
690 gfx::Vector2dF screen_space_scale_components) { 687 const gfx::Transform& transform) {
691 TransformNode* node = Node(kRootNodeId);
692 gfx::Transform to_screen;
693 to_screen.Scale(screen_space_scale_components.x(),
694 screen_space_scale_components.y());
695 if (ToScreen(node->id) == to_screen)
696 return;
697 SetToScreen(node->id, to_screen);
698 gfx::Transform from_screen;
699 if (!ToScreen(node->id).GetInverse(&from_screen))
700 node->ancestors_are_invertible = false;
701 SetFromScreen(node->id, from_screen);
702 set_needs_update(true);
703 }
704
705 void TransformTree::SetRootTransformsAndScales(
706 float device_scale_factor,
707 float page_scale_factor_for_root,
708 const gfx::Transform& device_transform,
709 gfx::PointF root_position) {
710 gfx::Vector2dF device_transform_scale_components = 688 gfx::Vector2dF device_transform_scale_components =
711 MathUtil::ComputeTransform2dScaleComponents(device_transform, 1.f); 689 MathUtil::ComputeTransform2dScaleComponents(transform, 1.f);
712 690
713 // Not handling the rare case of different x and y device scale. 691 // Not handling the rare case of different x and y device scale.
714 device_transform_scale_factor_ = 692 device_transform_scale_factor_ =
715 std::max(device_transform_scale_components.x(), 693 std::max(device_transform_scale_components.x(),
716 device_transform_scale_components.y()); 694 device_transform_scale_components.y());
717 gfx::Transform device_transform_without_scale = device_transform;
718 device_transform_without_scale.matrix().postScale(
719 1.f / device_transform_scale_components.x(),
720 1.f / device_transform_scale_components.y(), 1.f);
721 SetContentsRootPostLocalTransform(device_transform_without_scale,
722 root_position);
723
724 gfx::Vector2dF screen_space_scale_components(
725 device_transform_scale_components.x() * device_scale_factor *
726 page_scale_factor_for_root,
727 device_transform_scale_components.y() * device_scale_factor *
728 page_scale_factor_for_root);
729 SetScreenSpaceScaleOnRootNode(screen_space_scale_components);
730 } 695 }
731 696
732 void TransformTree::UpdateInnerViewportContainerBoundsDelta() { 697 void TransformTree::UpdateInnerViewportContainerBoundsDelta() {
733 if (nodes_affected_by_inner_viewport_bounds_delta_.empty()) 698 if (nodes_affected_by_inner_viewport_bounds_delta_.empty())
734 return; 699 return;
735 700
736 set_needs_update(true); 701 set_needs_update(true);
737 for (int i : nodes_affected_by_inner_viewport_bounds_delta_) 702 for (int i : nodes_affected_by_inner_viewport_bounds_delta_)
738 Node(i)->needs_local_transform_update = true; 703 Node(i)->needs_local_transform_update = true;
739 } 704 }
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
980 transform_node->local.IsBackFaceVisible(); 945 transform_node->local.IsBackFaceVisible();
981 } 946 }
982 return; 947 return;
983 } 948 }
984 } 949 }
985 } 950 }
986 node->hidden_by_backface_visibility = false; 951 node->hidden_by_backface_visibility = false;
987 } 952 }
988 953
989 void EffectTree::UpdateSurfaceContentsScale(EffectNode* effect_node) { 954 void EffectTree::UpdateSurfaceContentsScale(EffectNode* effect_node) {
990 if (!effect_node->has_render_surface) { 955 if (!effect_node->has_render_surface ||
956 effect_node->transform_id == kRootNodeId) {
991 effect_node->surface_contents_scale = gfx::Vector2dF(1.0f, 1.0f); 957 effect_node->surface_contents_scale = gfx::Vector2dF(1.0f, 1.0f);
992 return; 958 return;
993 } 959 }
994 960
995 TransformTree& transform_tree = property_trees()->transform_tree; 961 TransformTree& transform_tree = property_trees()->transform_tree;
996 float layer_scale_factor = transform_tree.device_scale_factor() * 962 float layer_scale_factor = transform_tree.device_scale_factor() *
997 transform_tree.device_transform_scale_factor(); 963 transform_tree.device_transform_scale_factor();
998 TransformNode* transform_node = 964 TransformNode* transform_node =
999 transform_tree.Node(effect_node->transform_id); 965 transform_tree.Node(effect_node->transform_id);
1000 if (transform_node->in_subtree_of_page_scale_layer) 966 if (transform_node->in_subtree_of_page_scale_layer)
(...skipping 1204 matching lines...) Expand 10 before | Expand all | Expand 10 after
2205 gfx::Transform from_target; 2171 gfx::Transform from_target;
2206 bool already_computed_inverse = false; 2172 bool already_computed_inverse = false;
2207 if (transform_id == dest_id) { 2173 if (transform_id == dest_id) {
2208 target_space_transform.Scale(effect_node->surface_contents_scale.x(), 2174 target_space_transform.Scale(effect_node->surface_contents_scale.x(),
2209 effect_node->surface_contents_scale.y()); 2175 effect_node->surface_contents_scale.y());
2210 data.transforms.to_valid = true; 2176 data.transforms.to_valid = true;
2211 data.transforms.from_valid = false; 2177 data.transforms.from_valid = false;
2212 } else if (transform_id > dest_id) { 2178 } else if (transform_id > dest_id) {
2213 transform_tree.CombineTransformsBetween(transform_id, dest_id, 2179 transform_tree.CombineTransformsBetween(transform_id, dest_id,
2214 &target_space_transform); 2180 &target_space_transform);
2215 target_space_transform.matrix().postScale( 2181 if (dest_id != TransformTree::kRootNodeId)
2216 effect_node->surface_contents_scale.x(), 2182 target_space_transform.matrix().postScale(
2217 effect_node->surface_contents_scale.y(), 1.f); 2183 effect_node->surface_contents_scale.x(),
2184 effect_node->surface_contents_scale.y(), 1.f);
2218 data.transforms.to_valid = true; 2185 data.transforms.to_valid = true;
2219 data.transforms.from_valid = false; 2186 data.transforms.from_valid = false;
2220 data.transforms.might_be_invertible = true; 2187 data.transforms.might_be_invertible = true;
2221 } else { 2188 } else {
2222 gfx::Transform combined_transform; 2189 gfx::Transform combined_transform;
2223 transform_tree.CombineTransformsBetween(dest_id, transform_id, 2190 transform_tree.CombineTransformsBetween(dest_id, transform_id,
2224 &combined_transform); 2191 &combined_transform);
2225 if (effect_node->surface_contents_scale.x() != 0.f && 2192 if (effect_node->surface_contents_scale.x() != 0.f &&
2226 effect_node->surface_contents_scale.y() != 0.f) 2193 effect_node->surface_contents_scale.y() != 0.f)
2227 combined_transform.Scale(1.0f / effect_node->surface_contents_scale.x(), 2194 combined_transform.Scale(1.0f / effect_node->surface_contents_scale.x(),
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
2282 2249
2283 const EffectNode* effect_node = effect_tree.Node(effect_id); 2250 const EffectNode* effect_node = effect_tree.Node(effect_id);
2284 2251
2285 bool success = GetFromTarget(transform_id, effect_id, transform); 2252 bool success = GetFromTarget(transform_id, effect_id, transform);
2286 transform->Scale(effect_node->surface_contents_scale.x(), 2253 transform->Scale(effect_node->surface_contents_scale.x(),
2287 effect_node->surface_contents_scale.y()); 2254 effect_node->surface_contents_scale.y());
2288 return success; 2255 return success;
2289 } 2256 }
2290 2257
2291 } // namespace cc 2258 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/property_tree.h ('k') | cc/trees/property_tree_builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698