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

Unified Diff: cc/trees/transform_node.h

Issue 2118993002: Detemplatize cc property nodes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months 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 side-by-side diff with in-line comments
Download patch
Index: cc/trees/transform_node.h
diff --git a/cc/trees/transform_node.h b/cc/trees/transform_node.h
new file mode 100644
index 0000000000000000000000000000000000000000..b128d4dd7075e63841dee422b887ae1e44e3d716
--- /dev/null
+++ b/cc/trees/transform_node.h
@@ -0,0 +1,168 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_TREES_TRANSFORM_NODE_H_
+#define CC_TREES_TRANSFORM_NODE_H_
+
+#include "cc/base/cc_export.h"
+#include "ui/gfx/geometry/point_f.h"
+#include "ui/gfx/geometry/scroll_offset.h"
+#include "ui/gfx/transform.h"
+
+namespace base {
+namespace trace_event {
+class TracedValue;
+} // namespace trace_event
+} // namespace base
+
+namespace cc {
+
+namespace proto {
+class TransformCachedNodeData;
+class TreeNode;
+} // namespace proto
+
+struct CC_EXPORT TransformNode {
+ TransformNode();
+ TransformNode(const TransformNode&);
+
+ int id;
+ int parent_id;
+ int owner_id;
+
+ // The local transform information is combined to form to_parent (ignoring
+ // snapping) as follows:
+ //
+ // to_parent = M_post_local * T_scroll * M_local * M_pre_local.
+ //
+ // The pre/post may seem odd when read LTR, but we multiply our points from
+ // the right, so the pre_local matrix affects the result "first". This lines
+ // up with the notions of pre/post used in skia and gfx::Transform.
+ //
+ // TODO(vollick): The values labeled with "will be moved..." take up a lot of
+ // space, but are only necessary for animated or scrolled nodes (otherwise
+ // we'll just use the baked to_parent). These values will be ultimately stored
+ // directly on the transform/scroll display list items when that's possible,
+ // or potentially in a scroll tree.
+ //
+ // TODO(vollick): will be moved when accelerated effects are implemented.
+ gfx::Transform pre_local;
+ gfx::Transform local;
+ gfx::Transform post_local;
+
+ gfx::Transform to_parent;
+
+ // This is the node with respect to which source_offset is defined. This will
+ // not be needed once layerization moves to cc, but is needed in order to
+ // efficiently update the transform tree for changes to position in the layer
+ // tree.
+ int source_node_id;
+
+ // This id determines which 3d rendering context the node is in. 0 is a
+ // special value and indicates that the node is not in any 3d rendering
+ // context.
+ int sorting_context_id;
+
+ // TODO(vollick): will be moved when accelerated effects are implemented.
+ bool needs_local_transform_update : 1;
+
+ bool node_and_ancestors_are_animated_or_invertible : 1;
+
+ bool is_invertible : 1;
+ bool ancestors_are_invertible : 1;
+
+ bool has_potential_animation : 1;
+ bool is_currently_animating : 1;
+ bool to_screen_is_potentially_animated : 1;
+ bool has_only_translation_animations : 1;
+
+ // Flattening, when needed, is only applied to a node's inherited transform,
+ // never to its local transform.
+ bool flattens_inherited_transform : 1;
+
+ // This is true if the to_parent transform at every node on the path to the
+ // root is flat.
+ bool node_and_ancestors_are_flat : 1;
+
+ // This is needed to know if a layer can use lcd text.
+ bool node_and_ancestors_have_only_integer_translation : 1;
+
+ bool scrolls : 1;
+
+ bool needs_sublayer_scale : 1;
+
+ // These are used to position nodes wrt the right or bottom of the inner or
+ // outer viewport.
+ bool affected_by_inner_viewport_bounds_delta_x : 1;
+ bool affected_by_inner_viewport_bounds_delta_y : 1;
+ bool affected_by_outer_viewport_bounds_delta_x : 1;
+ bool affected_by_outer_viewport_bounds_delta_y : 1;
+
+ // Layer scale factor is used as a fallback when we either cannot adjust
+ // raster scale or if the raster scale cannot be extracted from the screen
+ // space transform. For layers in the subtree of the page scale layer, the
+ // layer scale factor should include the page scale factor.
+ bool in_subtree_of_page_scale_layer : 1;
+
+ // We need to track changes to to_screen transform to compute the damage rect.
+ bool transform_changed : 1;
+
+ // TODO(vollick): will be moved when accelerated effects are implemented.
+ float post_local_scale_factor;
+
+ gfx::Vector2dF sublayer_scale;
+
+ // TODO(vollick): will be moved when accelerated effects are implemented.
+ gfx::ScrollOffset scroll_offset;
+
+ // We scroll snap where possible, but this means fixed-pos elements must be
+ // adjusted. This value stores the snapped amount for this purpose.
+ gfx::Vector2dF scroll_snap;
+
+ // TODO(vollick): will be moved when accelerated effects are implemented.
+ gfx::Vector2dF source_offset;
+ gfx::Vector2dF source_to_parent;
+
+ bool operator==(const TransformNode& other) const;
+
+ void set_to_parent(const gfx::Transform& transform) {
+ to_parent = transform;
+ is_invertible = to_parent.IsInvertible();
+ }
+
+ void update_pre_local_transform(const gfx::Point3F& transform_origin);
+
+ void update_post_local_transform(const gfx::PointF& position,
+ const gfx::Point3F& transform_origin);
+
+ void ToProtobuf(proto::TreeNode* proto) const;
+ void FromProtobuf(const proto::TreeNode& proto);
+
+ void AsValueInto(base::trace_event::TracedValue* value) const;
+};
+
+// TODO(sunxd): move this into PropertyTrees::cached_data_.
+struct CC_EXPORT TransformCachedNodeData {
+ TransformCachedNodeData();
+ TransformCachedNodeData(const TransformCachedNodeData& other);
+ ~TransformCachedNodeData();
+
+ gfx::Transform from_target;
+ gfx::Transform to_target;
+ gfx::Transform from_screen;
+ gfx::Transform to_screen;
+ int target_id;
+ // This id is used for all content that draws into a render surface associated
+ // with this transform node.
+ int content_target_id;
+
+ bool operator==(const TransformCachedNodeData& other) const;
+
+ void ToProtobuf(proto::TransformCachedNodeData* proto) const;
+ void FromProtobuf(const proto::TransformCachedNodeData& proto);
+};
+
+} // namespace cc
+
+#endif // CC_TREES_TRANSFORM_NODE_H_
« no previous file with comments | « cc/trees/scroll_node.cc ('k') | cc/trees/transform_node.cc » ('j') | ui/gfx/transform.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698