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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/GeometryMapper.h

Issue 2623823002: Rename and change parameter type of some GeometryMapper methods (Closed)
Patch Set: Swap local and ancestor parameters in ancestorToLocalRect(). Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 #ifndef GeometryMapper_h 5 #ifndef GeometryMapper_h
6 #define GeometryMapper_h 6 #define GeometryMapper_h
7 7
8 #include "platform/geometry/FloatRect.h" 8 #include "platform/geometry/FloatRect.h"
9 #include "platform/graphics/paint/PropertyTreeState.h" 9 #include "platform/graphics/paint/PropertyTreeState.h"
10 #include "platform/transforms/TransformationMatrix.h" 10 #include "platform/transforms/TransformationMatrix.h"
(...skipping 27 matching lines...) Expand all
38 // NOTE: A GeometryMapper object is only valid for property trees that do not 38 // NOTE: A GeometryMapper object is only valid for property trees that do not
39 // change. If any mutation occurs, a new GeometryMapper object must be allocated 39 // change. If any mutation occurs, a new GeometryMapper object must be allocated
40 // corresponding to the new state. 40 // corresponding to the new state.
41 // 41 //
42 // Design document: http://bit.ly/28P4FDA 42 // Design document: http://bit.ly/28P4FDA
43 // 43 //
44 // TODO(chrishtr): take effect tree into account. 44 // TODO(chrishtr): take effect tree into account.
45 class PLATFORM_EXPORT GeometryMapper { 45 class PLATFORM_EXPORT GeometryMapper {
46 public: 46 public:
47 GeometryMapper() {} 47 GeometryMapper() {}
48 // The runtime of m calls among localToVisualRectInAncestorSpace, 48 // The runtime of m calls among localToAncestorVisualRect, localToAncestorRect
49 // localToAncestorRect or ancestorToLocalRect with the same |ancestorState| 49 // or ancestorToLocalRect with the same |ancestorState| parameter is
50 // parameter is guaranteed to be O(n + m), where n is the number of transform 50 // guaranteed to be O(n + m), where n is the number of transform and clip
51 // and clip nodes in their respective property trees. 51 // nodes in their respective property trees.
52 52
53 // If the clips and transforms of |sourceState| are equal to or descendants of 53 // If the clips and transforms of |sourceState| are equal to or descendants of
54 // those of |destinationState|, returns the same value as 54 // those of |destinationState|, returns the same value as
55 // localToVisualRectInAncestorSpace. Otherwise, maps the input rect to the 55 // localToAncestorVisualRect. Otherwise, maps the input rect to the
56 // transform state which is the least common ancestor of 56 // transform state which is the least common ancestor of
57 // |sourceState.transform| and |destinationState.transform|, then multiplies 57 // |sourceState.transform| and |destinationState.transform|, then multiplies
58 // it by the the inverse transform mapping from the least common ancestor to 58 // it by the the inverse transform mapping from the least common ancestor to
59 // |destinationState.transform|. 59 // |destinationState.transform|.
60 // 60 //
61 // Sets |success| to whether that inverse transform is invertible. If it is 61 // Sets |success| to whether that inverse transform is invertible. If it is
62 // not, returns the input rect. 62 // not, returns the input rect.
63 FloatRect mapToVisualRectInDestinationSpace( 63 FloatRect sourceToDestinationVisualRect(
64 const FloatRect&, 64 const FloatRect&,
65 const PropertyTreeState& sourceState, 65 const PropertyTreeState& sourceState,
66 const PropertyTreeState& destinationState, 66 const PropertyTreeState& destinationState,
67 bool& success); 67 bool& success);
68 68
69 // Same as mapToVisualRectInDestinationSpace() except that *no* clip is 69 // Same as sourceToDestinationVisualRect() except that only transforms are
70 // applied. 70 // applied.
71 FloatRect mapRectToDestinationSpace(const FloatRect&, 71 FloatRect sourceToDestinationRect(
72 const PropertyTreeState& sourceState, 72 const FloatRect&,
73 const PropertyTreeState& destinationState, 73 const TransformPaintPropertyNode* sourceTransformNode,
chrishtr 2017/01/11 22:23:08 Curious: what is the new call site you're planning
Xianzhu 2017/01/11 22:51:32 I will use this for handle geometry effects of fil
74 bool& success); 74 const TransformPaintPropertyNode* destinationTransformNode,
75 bool& success);
75 76
76 // Maps from a rect in |localTransformSpace| to its visual rect in 77 // Maps from a rect in |localTransformSpace| to its visual rect in
77 // |ancestorState|. This is computed by multiplying the rect by its combined 78 // |ancestorState|. This is computed by multiplying the rect by its combined
78 // transform between |localTransformSpace| and |ancestorSpace|, then 79 // transform between |localTransformSpace| and |ancestorSpace|, then
79 // flattening into 2D space, then intersecting by the "clip visual rect" for 80 // flattening into 2D space, then intersecting by the "clip visual rect" for
80 // |localTransformState|'s clips. See above for the definition of "clip visual 81 // |localTransformState|'s clips. See above for the definition of "clip visual
81 // rect". 82 // rect".
82 // 83 //
83 // Note that the clip of |ancestorState| is *not* applied. 84 // Note that the clip of |ancestorState| is *not* applied.
84 // 85 //
85 // If any of the paint property tree nodes in |localTransformState| are not 86 // If any of the paint property tree nodes in |localTransformState| are not
86 // equal to or a descendant of that in |ancestorState|, returns the passed-in 87 // equal to or a descendant of that in |ancestorState|, returns the passed-in
87 // rect and sets |success| to false. Otherwise, sets |success| to true. 88 // rect and sets |success| to false. Otherwise, sets |success| to true.
88 FloatRect localToVisualRectInAncestorSpace( 89 FloatRect localToAncestorVisualRect(
89 const FloatRect&, 90 const FloatRect&,
90 const PropertyTreeState& localTransformState, 91 const PropertyTreeState& localTransformState,
91 const PropertyTreeState& ancestorState, 92 const PropertyTreeState& ancestorState,
92 bool& success); 93 bool& success);
93 94
94 // Maps from a rect in |localTransformSpace| to its transformed rect in 95 // Maps from a rect in |localTransformNode| space to its transformed rect in
95 // |ancestorSpace|. This is computed by multiplying the rect by the combined 96 // |ancestorTransformNode| space. This is computed by multiplying the rect by
96 // transform between |localTransformState| and |ancestorState|, then 97 // the combined transform between |localTransformNode| and
97 // flattening into 2D space. 98 // |ancestorTransformNode|, then flattening into 2D space.
98 // 99 //
99 // If any of the paint property tree nodes in |localTransformState| are not 100 // If |localTransformNode| is not equal to or a descendant of
100 // equal to or a descendant of that in |ancestorState|, returns the passed-in 101 // |ancestorTransformNode|, returns the passed-in rec and sets |success| to
101 // rec and sets |success| to false. Otherwise, sets |success| to true. 102 // false. Otherwise, sets |success| to true.
102 FloatRect localToAncestorRect(const FloatRect&, 103 FloatRect localToAncestorRect(
103 const PropertyTreeState& localTransformState, 104 const FloatRect&,
104 const PropertyTreeState& ancestorState, 105 const TransformPaintPropertyNode* localTransformNode,
105 bool& success); 106 const TransformPaintPropertyNode* ancestorTransformNode,
107 bool& success);
106 108
107 // Maps from a rect in |ancestorSpace| to its transformed rect in 109 // Maps from a rect in |ancestorTransformNode| space to its transformed rect
108 // |localTransformSpace|. This is computed by multiplying the rect by the 110 // in |localTransformNode| space. This is computed by multiplying the rect by
109 // inverse combined transform between |localTransformState| and 111 // the inverse combined transform between |localTransformNode| and
110 // |ancestorState|, if the transform is invertible. 112 // |ancestorTransformNode|, if the transform is invertible.
111 // 113 //
112 // If any of the paint property tree nodes in |localTransformState| are not 114 // If the combined transform is not invertible, or |localTransformNode| is not
113 // equal to or a descendant of that in |ancestorState|, returns the passed-in 115 // equal to or a descendant of |ancestorTransformNode|, returns the passed-in
114 // rect and sets |success| to false. Otherwise, sets |success| to true. 116 // rect and sets |success| to false. Otherwise, sets |success| to true.
115 FloatRect ancestorToLocalRect(const FloatRect&, 117 FloatRect ancestorToLocalRect(
116 const PropertyTreeState& localTransformState, 118 const FloatRect&,
117 const PropertyTreeState& ancestorState, 119 const TransformPaintPropertyNode* ancestorTransformNode,
118 bool& success); 120 const TransformPaintPropertyNode* localTransformNode,
121 bool& success);
119 122
120 // Returns the matrix used in |LocalToAncestorRect|. Sets |success| to false 123 // Returns the matrix used in |LocalToAncestorRect|. Sets |success| to false
121 // iff |localTransformNode| is not equal to or a descendant of 124 // iff |localTransformNode| is not equal to or a descendant of
122 // |ancestorState.transform|. 125 // |ancestorTransformNode|.
123 const TransformationMatrix& localToAncestorMatrix( 126 const TransformationMatrix& localToAncestorMatrix(
124 const TransformPaintPropertyNode* localTransformNode, 127 const TransformPaintPropertyNode* localTransformNode,
125 const PropertyTreeState& ancestorState, 128 const TransformPaintPropertyNode* ancestorTransformNode,
126 bool& success); 129 bool& success);
127 130
128 // Returns the "clip visual rect" between |localTransformState| and 131 // Returns the "clip visual rect" between |localTransformState| and
129 // |ancestorState|. See above for the definition of "clip visual rect". 132 // |ancestorState|. See above for the definition of "clip visual rect".
130 FloatRect localToAncestorClipRect( 133 FloatRect localToAncestorClipRect(
131 const PropertyTreeState& localTransformState, 134 const PropertyTreeState& localTransformState,
132 const PropertyTreeState& ancestorState, 135 const PropertyTreeState& ancestorState,
133 bool& success); 136 bool& success);
134 137
135 private: 138 private:
136 // Used by mapToVisualRectInDestinationSpace() after fast mapping (assuming 139 // Used by sourceToDestinationVisualRect() after fast mapping (assuming
137 // destination is an ancestor of source) failed. 140 // destination is an ancestor of source) failed.
138 FloatRect slowMapToVisualRectInDestinationSpace( 141 FloatRect slowSourceToDestinationVisualRect(
139 const FloatRect&, 142 const FloatRect&,
140 const PropertyTreeState& sourceState, 143 const PropertyTreeState& sourceState,
141 const PropertyTreeState& destinationState, 144 const PropertyTreeState& destinationState,
142 bool& success); 145 bool& success);
143 146
144 // Used by mapRectToDestinationSpace() after fast mapping (assuming 147 // Used by sourceToDestinationRect() after fast mapping (assuming destination
145 // destination is an ancestor of source) failed. 148 // is an ancestor of source) failed.
146 FloatRect slowMapRectToDestinationSpace( 149 FloatRect slowSourceToDestinationRect(
147 const FloatRect&, 150 const FloatRect&,
148 const PropertyTreeState& sourceState, 151 const TransformPaintPropertyNode* sourceTransformNode,
149 const PropertyTreeState& destinationState, 152 const TransformPaintPropertyNode* destinationTransformNode,
150 bool& success); 153 bool& success);
151 154
152 // Returns the precomputed data if already set, or adds and memoizes a new 155 // Returns the precomputed data if already set, or adds and memoizes a new
153 // PrecomputedDataForAncestor otherwise. 156 // PrecomputedDataForAncestor otherwise.
154 PrecomputedDataForAncestor& getPrecomputedDataForAncestor( 157 PrecomputedDataForAncestor& getPrecomputedDataForAncestor(
155 const PropertyTreeState&); 158 const TransformPaintPropertyNode*);
156 159
157 // Returns the least common ancestor in the transform tree. 160 // Returns the least common ancestor in the transform tree.
158 static const TransformPaintPropertyNode* leastCommonAncestor( 161 static const TransformPaintPropertyNode* leastCommonAncestor(
159 const TransformPaintPropertyNode*, 162 const TransformPaintPropertyNode*,
160 const TransformPaintPropertyNode*); 163 const TransformPaintPropertyNode*);
161 164
162 friend class GeometryMapperTest; 165 friend class GeometryMapperTest;
163 166
164 HashMap<const TransformPaintPropertyNode*, 167 HashMap<const TransformPaintPropertyNode*,
165 std::unique_ptr<PrecomputedDataForAncestor>> 168 std::unique_ptr<PrecomputedDataForAncestor>>
166 m_data; 169 m_data;
167 170
168 const TransformationMatrix m_identity; 171 const TransformationMatrix m_identity;
169 172
170 DISALLOW_COPY_AND_ASSIGN(GeometryMapper); 173 DISALLOW_COPY_AND_ASSIGN(GeometryMapper);
171 }; 174 };
172 175
173 } // namespace blink 176 } // namespace blink
174 177
175 #endif // GeometryMapper_h 178 #endif // GeometryMapper_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698