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

Side by Side Diff: cc/math_util.cc

Issue 11364044: cc: Replace WebCore::FloatQuad with gfx::QuadF. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Reeebase. Created 8 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 | Annotate | Revision Log
« no previous file with comments | « cc/math_util.h ('k') | cc/occlusion_tracker.h » ('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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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 "config.h" 5 #include "config.h"
6 6
7 #include "cc/math_util.h" 7 #include "cc/math_util.h"
8 8
9 #include "FloatQuad.h"
10 #include "FloatSize.h" 9 #include "FloatSize.h"
10 #include "ui/gfx/quad_f.h"
11 #include "ui/gfx/rect.h" 11 #include "ui/gfx/rect.h"
12 #include "ui/gfx/rect_conversions.h" 12 #include "ui/gfx/rect_conversions.h"
13 #include "ui/gfx/rect_f.h" 13 #include "ui/gfx/rect_f.h"
14 #include <cmath> 14 #include <cmath>
15 #include <public/WebTransformationMatrix.h> 15 #include <public/WebTransformationMatrix.h>
16 16
17 using WebKit::WebTransformationMatrix; 17 using WebKit::WebTransformationMatrix;
18 18
19 namespace cc { 19 namespace cc {
20 20
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 105
106 gfx::RectF MathUtil::mapClippedRect(const WebTransformationMatrix& transform, co nst gfx::RectF& srcRect) 106 gfx::RectF MathUtil::mapClippedRect(const WebTransformationMatrix& transform, co nst gfx::RectF& srcRect)
107 { 107 {
108 if (transform.isIdentityOrTranslation()) { 108 if (transform.isIdentityOrTranslation()) {
109 gfx::RectF mappedRect(srcRect); 109 gfx::RectF mappedRect(srcRect);
110 mappedRect.Offset(static_cast<float>(transform.m41()), static_cast<float >(transform.m42())); 110 mappedRect.Offset(static_cast<float>(transform.m41()), static_cast<float >(transform.m42()));
111 return mappedRect; 111 return mappedRect;
112 } 112 }
113 113
114 // Apply the transform, but retain the result in homogeneous coordinates. 114 // Apply the transform, but retain the result in homogeneous coordinates.
115 FloatQuad q = FloatQuad(gfx::RectF(srcRect)); 115 gfx::QuadF q = gfx::QuadF(gfx::RectF(srcRect));
116 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, gfx::Point3F(q.p1( ))); 116 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, gfx::Point3F(q.p1( )));
117 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, gfx::Point3F(q.p2( ))); 117 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, gfx::Point3F(q.p2( )));
118 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, gfx::Point3F(q.p3( ))); 118 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, gfx::Point3F(q.p3( )));
119 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, gfx::Point3F(q.p4( ))); 119 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, gfx::Point3F(q.p4( )));
120 120
121 return computeEnclosingClippedRect(h1, h2, h3, h4); 121 return computeEnclosingClippedRect(h1, h2, h3, h4);
122 } 122 }
123 123
124 gfx::RectF MathUtil::projectClippedRect(const WebTransformationMatrix& transform , const gfx::RectF& srcRect) 124 gfx::RectF MathUtil::projectClippedRect(const WebTransformationMatrix& transform , const gfx::RectF& srcRect)
125 { 125 {
126 // Perform the projection, but retain the result in homogeneous coordinates. 126 // Perform the projection, but retain the result in homogeneous coordinates.
127 FloatQuad q = FloatQuad(gfx::RectF(srcRect)); 127 gfx::QuadF q = gfx::QuadF(gfx::RectF(srcRect));
128 HomogeneousCoordinate h1 = projectHomogeneousPoint(transform, q.p1()); 128 HomogeneousCoordinate h1 = projectHomogeneousPoint(transform, q.p1());
129 HomogeneousCoordinate h2 = projectHomogeneousPoint(transform, q.p2()); 129 HomogeneousCoordinate h2 = projectHomogeneousPoint(transform, q.p2());
130 HomogeneousCoordinate h3 = projectHomogeneousPoint(transform, q.p3()); 130 HomogeneousCoordinate h3 = projectHomogeneousPoint(transform, q.p3());
131 HomogeneousCoordinate h4 = projectHomogeneousPoint(transform, q.p4()); 131 HomogeneousCoordinate h4 = projectHomogeneousPoint(transform, q.p4());
132 132
133 return computeEnclosingClippedRect(h1, h2, h3, h4); 133 return computeEnclosingClippedRect(h1, h2, h3, h4);
134 } 134 }
135 135
136 void MathUtil::mapClippedQuad(const WebTransformationMatrix& transform, const Fl oatQuad& srcQuad, gfx::PointF clippedQuad[8], int& numVerticesInClippedQuad) 136 void MathUtil::mapClippedQuad(const WebTransformationMatrix& transform, const gf x::QuadF& srcQuad, gfx::PointF clippedQuad[8], int& numVerticesInClippedQuad)
137 { 137 {
138 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, gfx::Point3F(srcQu ad.p1())); 138 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, gfx::Point3F(srcQu ad.p1()));
139 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, gfx::Point3F(srcQu ad.p2())); 139 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, gfx::Point3F(srcQu ad.p2()));
140 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, gfx::Point3F(srcQu ad.p3())); 140 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, gfx::Point3F(srcQu ad.p3()));
141 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, gfx::Point3F(srcQu ad.p4())); 141 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, gfx::Point3F(srcQu ad.p4()));
142 142
143 // The order of adding the vertices to the array is chosen so that clockwise / counter-clockwise orientation is retained. 143 // The order of adding the vertices to the array is chosen so that clockwise / counter-clockwise orientation is retained.
144 144
145 numVerticesInClippedQuad = 0; 145 numVerticesInClippedQuad = 0;
146 146
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 gfx::RectF MathUtil::computeEnclosingClippedRect(const HomogeneousCoordinate& h1 , const HomogeneousCoordinate& h2, const HomogeneousCoordinate& h3, const Homoge neousCoordinate& h4) 190 gfx::RectF MathUtil::computeEnclosingClippedRect(const HomogeneousCoordinate& h1 , const HomogeneousCoordinate& h2, const HomogeneousCoordinate& h3, const Homoge neousCoordinate& h4)
191 { 191 {
192 // This function performs clipping as necessary and computes the enclosing 2 d 192 // This function performs clipping as necessary and computes the enclosing 2 d
193 // gfx::RectF of the vertices. Doing these two steps simultaneously allows u s to avoid 193 // gfx::RectF of the vertices. Doing these two steps simultaneously allows u s to avoid
194 // the overhead of storing an unknown number of clipped vertices. 194 // the overhead of storing an unknown number of clipped vertices.
195 195
196 // If no vertices on the quad are clipped, then we can simply return the enc losing rect directly. 196 // If no vertices on the quad are clipped, then we can simply return the enc losing rect directly.
197 bool somethingClipped = h1.shouldBeClipped() || h2.shouldBeClipped() || h3.s houldBeClipped() || h4.shouldBeClipped(); 197 bool somethingClipped = h1.shouldBeClipped() || h2.shouldBeClipped() || h3.s houldBeClipped() || h4.shouldBeClipped();
198 if (!somethingClipped) { 198 if (!somethingClipped) {
199 FloatQuad mappedQuad = FloatQuad(h1.cartesianPoint2d(), h2.cartesianPoin t2d(), h3.cartesianPoint2d(), h4.cartesianPoint2d()); 199 gfx::QuadF mappedQuad = gfx::QuadF(h1.cartesianPoint2d(), h2.cartesianPo int2d(), h3.cartesianPoint2d(), h4.cartesianPoint2d());
200 return mappedQuad.boundingBox(); 200 return mappedQuad.BoundingBox();
201 } 201 }
202 202
203 bool everythingClipped = h1.shouldBeClipped() && h2.shouldBeClipped() && h3. shouldBeClipped() && h4.shouldBeClipped(); 203 bool everythingClipped = h1.shouldBeClipped() && h2.shouldBeClipped() && h3. shouldBeClipped() && h4.shouldBeClipped();
204 if (everythingClipped) 204 if (everythingClipped)
205 return gfx::RectF(); 205 return gfx::RectF();
206 206
207 207
208 float xmin = std::numeric_limits<float>::max(); 208 float xmin = std::numeric_limits<float>::max();
209 float xmax = -std::numeric_limits<float>::max(); 209 float xmax = -std::numeric_limits<float>::max();
210 float ymin = std::numeric_limits<float>::max(); 210 float ymin = std::numeric_limits<float>::max();
(...skipping 19 matching lines...) Expand all
230 230
231 if (!h4.shouldBeClipped()) 231 if (!h4.shouldBeClipped())
232 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, h4.cartesianPoint2d() ); 232 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, h4.cartesianPoint2d() );
233 233
234 if (h4.shouldBeClipped() ^ h1.shouldBeClipped()) 234 if (h4.shouldBeClipped() ^ h1.shouldBeClipped())
235 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, computeClippedPointFo rEdge(h4, h1).cartesianPoint2d()); 235 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, computeClippedPointFo rEdge(h4, h1).cartesianPoint2d());
236 236
237 return gfx::RectF(gfx::PointF(xmin, ymin), gfx::SizeF(xmax - xmin, ymax - ym in)); 237 return gfx::RectF(gfx::PointF(xmin, ymin), gfx::SizeF(xmax - xmin, ymax - ym in));
238 } 238 }
239 239
240 FloatQuad MathUtil::mapQuad(const WebTransformationMatrix& transform, const Floa tQuad& q, bool& clipped) 240 gfx::QuadF MathUtil::mapQuad(const WebTransformationMatrix& transform, const gfx ::QuadF& q, bool& clipped)
241 { 241 {
242 if (transform.isIdentityOrTranslation()) { 242 if (transform.isIdentityOrTranslation()) {
243 FloatQuad mappedQuad(q); 243 gfx::QuadF mappedQuad(q);
244 mappedQuad.move(static_cast<float>(transform.m41()), static_cast<float>( transform.m42())); 244 mappedQuad += gfx::Vector2dF(static_cast<float>(transform.m41()), static _cast<float>(transform.m42()));
245 clipped = false; 245 clipped = false;
246 return mappedQuad; 246 return mappedQuad;
247 } 247 }
248 248
249 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, gfx::Point3F(q.p1( ))); 249 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, gfx::Point3F(q.p1( )));
250 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, gfx::Point3F(q.p2( ))); 250 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, gfx::Point3F(q.p2( )));
251 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, gfx::Point3F(q.p3( ))); 251 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, gfx::Point3F(q.p3( )));
252 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, gfx::Point3F(q.p4( ))); 252 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, gfx::Point3F(q.p4( )));
253 253
254 clipped = h1.shouldBeClipped() || h2.shouldBeClipped() || h3.shouldBeClipped () || h4.shouldBeClipped(); 254 clipped = h1.shouldBeClipped() || h2.shouldBeClipped() || h3.shouldBeClipped () || h4.shouldBeClipped();
255 255
256 // Result will be invalid if clipped == true. But, compute it anyway just in case, to emulate existing behavior. 256 // Result will be invalid if clipped == true. But, compute it anyway just in case, to emulate existing behavior.
257 return FloatQuad(h1.cartesianPoint2d(), h2.cartesianPoint2d(), h3.cartesianP oint2d(), h4.cartesianPoint2d()); 257 return gfx::QuadF(h1.cartesianPoint2d(), h2.cartesianPoint2d(), h3.cartesian Point2d(), h4.cartesianPoint2d());
258 } 258 }
259 259
260 gfx::PointF MathUtil::mapPoint(const WebTransformationMatrix& transform, const g fx::PointF& p, bool& clipped) 260 gfx::PointF MathUtil::mapPoint(const WebTransformationMatrix& transform, const g fx::PointF& p, bool& clipped)
261 { 261 {
262 HomogeneousCoordinate h = mapHomogeneousPoint(transform, gfx::Point3F(p)); 262 HomogeneousCoordinate h = mapHomogeneousPoint(transform, gfx::Point3F(p));
263 263
264 if (h.w > 0) { 264 if (h.w > 0) {
265 clipped = false; 265 clipped = false;
266 return h.cartesianPoint2d(); 266 return h.cartesianPoint2d();
267 } 267 }
(...skipping 28 matching lines...) Expand all
296 if (!h.w) 296 if (!h.w)
297 return gfx::Point3F(); 297 return gfx::Point3F();
298 298
299 // This return value will be invalid because clipped == true, but (1) users of this 299 // This return value will be invalid because clipped == true, but (1) users of this
300 // code should be ignoring the return value when clipped == true anyway, and (2) this 300 // code should be ignoring the return value when clipped == true anyway, and (2) this
301 // behavior is more consistent with existing behavior of WebKit transforms i f the user 301 // behavior is more consistent with existing behavior of WebKit transforms i f the user
302 // really does not ignore the return value. 302 // really does not ignore the return value.
303 return h.cartesianPoint3d(); 303 return h.cartesianPoint3d();
304 } 304 }
305 305
306 FloatQuad MathUtil::projectQuad(const WebTransformationMatrix& transform, const FloatQuad& q, bool& clipped) 306 gfx::QuadF MathUtil::projectQuad(const WebTransformationMatrix& transform, const gfx::QuadF& q, bool& clipped)
307 { 307 {
308 FloatQuad projectedQuad; 308 gfx::QuadF projectedQuad;
309 bool clippedPoint; 309 bool clippedPoint;
310 projectedQuad.setP1(projectPoint(transform, q.p1(), clippedPoint)); 310 projectedQuad.set_p1(projectPoint(transform, q.p1(), clippedPoint));
311 clipped = clippedPoint; 311 clipped = clippedPoint;
312 projectedQuad.setP2(projectPoint(transform, q.p2(), clippedPoint)); 312 projectedQuad.set_p2(projectPoint(transform, q.p2(), clippedPoint));
313 clipped |= clippedPoint; 313 clipped |= clippedPoint;
314 projectedQuad.setP3(projectPoint(transform, q.p3(), clippedPoint)); 314 projectedQuad.set_p3(projectPoint(transform, q.p3(), clippedPoint));
315 clipped |= clippedPoint; 315 clipped |= clippedPoint;
316 projectedQuad.setP4(projectPoint(transform, q.p4(), clippedPoint)); 316 projectedQuad.set_p4(projectPoint(transform, q.p4(), clippedPoint));
317 clipped |= clippedPoint; 317 clipped |= clippedPoint;
318 318
319 return projectedQuad; 319 return projectedQuad;
320 } 320 }
321 321
322 gfx::PointF MathUtil::projectPoint(const WebTransformationMatrix& transform, con st gfx::PointF& p, bool& clipped) 322 gfx::PointF MathUtil::projectPoint(const WebTransformationMatrix& transform, con st gfx::PointF& p, bool& clipped)
323 { 323 {
324 HomogeneousCoordinate h = projectHomogeneousPoint(transform, p); 324 HomogeneousCoordinate h = projectHomogeneousPoint(transform, p);
325 325
326 if (h.w > 0) { 326 if (h.w > 0) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 } 387 }
388 388
389 FloatSize MathUtil::projectVector(const FloatSize& source, const FloatSize& dest ination) 389 FloatSize MathUtil::projectVector(const FloatSize& source, const FloatSize& dest ination)
390 { 390 {
391 float sourceDotDestination = source.width() * destination.width() + source.h eight() * destination.height(); 391 float sourceDotDestination = source.width() * destination.width() + source.h eight() * destination.height();
392 float projectedLength = sourceDotDestination / destination.diagonalLengthSqu ared(); 392 float projectedLength = sourceDotDestination / destination.diagonalLengthSqu ared();
393 return FloatSize(projectedLength * destination.width(), projectedLength * de stination.height()); 393 return FloatSize(projectedLength * destination.width(), projectedLength * de stination.height());
394 } 394 }
395 395
396 } // namespace cc 396 } // namespace cc
OLDNEW
« no previous file with comments | « cc/math_util.h ('k') | cc/occlusion_tracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698