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

Side by Side Diff: cc/math_util.cc

Issue 11189043: cc: Rename cc classes and members to match filenames (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 | Annotate | Revision Log
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 "CCMathUtil.h" 7 #include "CCMathUtil.h"
8 8
9 #include "FloatPoint.h" 9 #include "FloatPoint.h"
10 #include "FloatQuad.h" 10 #include "FloatQuad.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 ymin = std::min(p.y(), ymin); 88 ymin = std::min(p.y(), ymin);
89 ymax = std::max(p.y(), ymax); 89 ymax = std::max(p.y(), ymax);
90 } 90 }
91 91
92 static inline void addVertexToClippedQuad(const FloatPoint& newVertex, FloatPoin t clippedQuad[8], int& numVerticesInClippedQuad) 92 static inline void addVertexToClippedQuad(const FloatPoint& newVertex, FloatPoin t clippedQuad[8], int& numVerticesInClippedQuad)
93 { 93 {
94 clippedQuad[numVerticesInClippedQuad] = newVertex; 94 clippedQuad[numVerticesInClippedQuad] = newVertex;
95 numVerticesInClippedQuad++; 95 numVerticesInClippedQuad++;
96 } 96 }
97 97
98 IntRect CCMathUtil::mapClippedRect(const WebTransformationMatrix& transform, con st IntRect& srcRect) 98 IntRect MathUtil::mapClippedRect(const WebTransformationMatrix& transform, const IntRect& srcRect)
99 { 99 {
100 return enclosingIntRect(mapClippedRect(transform, FloatRect(srcRect))); 100 return enclosingIntRect(mapClippedRect(transform, FloatRect(srcRect)));
101 } 101 }
102 102
103 FloatRect CCMathUtil::mapClippedRect(const WebTransformationMatrix& transform, c onst FloatRect& srcRect) 103 FloatRect MathUtil::mapClippedRect(const WebTransformationMatrix& transform, con st FloatRect& srcRect)
104 { 104 {
105 if (transform.isIdentityOrTranslation()) { 105 if (transform.isIdentityOrTranslation()) {
106 FloatRect mappedRect(srcRect); 106 FloatRect mappedRect(srcRect);
107 mappedRect.move(static_cast<float>(transform.m41()), static_cast<float>( transform.m42())); 107 mappedRect.move(static_cast<float>(transform.m41()), static_cast<float>( transform.m42()));
108 return mappedRect; 108 return mappedRect;
109 } 109 }
110 110
111 // Apply the transform, but retain the result in homogeneous coordinates. 111 // Apply the transform, but retain the result in homogeneous coordinates.
112 FloatQuad q = FloatQuad(FloatRect(srcRect)); 112 FloatQuad q = FloatQuad(FloatRect(srcRect));
113 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, q.p1()); 113 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, q.p1());
114 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, q.p2()); 114 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, q.p2());
115 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, q.p3()); 115 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, q.p3());
116 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, q.p4()); 116 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, q.p4());
117 117
118 return computeEnclosingClippedRect(h1, h2, h3, h4); 118 return computeEnclosingClippedRect(h1, h2, h3, h4);
119 } 119 }
120 120
121 FloatRect CCMathUtil::projectClippedRect(const WebTransformationMatrix& transfor m, const FloatRect& srcRect) 121 FloatRect MathUtil::projectClippedRect(const WebTransformationMatrix& transform, const FloatRect& srcRect)
122 { 122 {
123 // Perform the projection, but retain the result in homogeneous coordinates. 123 // Perform the projection, but retain the result in homogeneous coordinates.
124 FloatQuad q = FloatQuad(FloatRect(srcRect)); 124 FloatQuad q = FloatQuad(FloatRect(srcRect));
125 HomogeneousCoordinate h1 = projectHomogeneousPoint(transform, q.p1()); 125 HomogeneousCoordinate h1 = projectHomogeneousPoint(transform, q.p1());
126 HomogeneousCoordinate h2 = projectHomogeneousPoint(transform, q.p2()); 126 HomogeneousCoordinate h2 = projectHomogeneousPoint(transform, q.p2());
127 HomogeneousCoordinate h3 = projectHomogeneousPoint(transform, q.p3()); 127 HomogeneousCoordinate h3 = projectHomogeneousPoint(transform, q.p3());
128 HomogeneousCoordinate h4 = projectHomogeneousPoint(transform, q.p4()); 128 HomogeneousCoordinate h4 = projectHomogeneousPoint(transform, q.p4());
129 129
130 return computeEnclosingClippedRect(h1, h2, h3, h4); 130 return computeEnclosingClippedRect(h1, h2, h3, h4);
131 } 131 }
132 132
133 void CCMathUtil::mapClippedQuad(const WebTransformationMatrix& transform, const FloatQuad& srcQuad, FloatPoint clippedQuad[8], int& numVerticesInClippedQuad) 133 void MathUtil::mapClippedQuad(const WebTransformationMatrix& transform, const Fl oatQuad& srcQuad, FloatPoint clippedQuad[8], int& numVerticesInClippedQuad)
134 { 134 {
135 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, srcQuad.p1()); 135 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, srcQuad.p1());
136 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, srcQuad.p2()); 136 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, srcQuad.p2());
137 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, srcQuad.p3()); 137 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, srcQuad.p3());
138 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, srcQuad.p4()); 138 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, srcQuad.p4());
139 139
140 // The order of adding the vertices to the array is chosen so that clockwise / counter-clockwise orientation is retained. 140 // The order of adding the vertices to the array is chosen so that clockwise / counter-clockwise orientation is retained.
141 141
142 numVerticesInClippedQuad = 0; 142 numVerticesInClippedQuad = 0;
143 143
(...skipping 17 matching lines...) Expand all
161 161
162 if (!h4.shouldBeClipped()) 162 if (!h4.shouldBeClipped())
163 addVertexToClippedQuad(h4.cartesianPoint2d(), clippedQuad, numVerticesIn ClippedQuad); 163 addVertexToClippedQuad(h4.cartesianPoint2d(), clippedQuad, numVerticesIn ClippedQuad);
164 164
165 if (h4.shouldBeClipped() ^ h1.shouldBeClipped()) 165 if (h4.shouldBeClipped() ^ h1.shouldBeClipped())
166 addVertexToClippedQuad(computeClippedPointForEdge(h4, h1).cartesianPoint 2d(), clippedQuad, numVerticesInClippedQuad); 166 addVertexToClippedQuad(computeClippedPointForEdge(h4, h1).cartesianPoint 2d(), clippedQuad, numVerticesInClippedQuad);
167 167
168 ASSERT(numVerticesInClippedQuad <= 8); 168 ASSERT(numVerticesInClippedQuad <= 8);
169 } 169 }
170 170
171 FloatRect CCMathUtil::computeEnclosingRectOfVertices(FloatPoint vertices[], int numVertices) 171 FloatRect MathUtil::computeEnclosingRectOfVertices(FloatPoint vertices[], int nu mVertices)
172 { 172 {
173 if (numVertices < 2) 173 if (numVertices < 2)
174 return FloatRect(); 174 return FloatRect();
175 175
176 float xmin = std::numeric_limits<float>::max(); 176 float xmin = std::numeric_limits<float>::max();
177 float xmax = -std::numeric_limits<float>::max(); 177 float xmax = -std::numeric_limits<float>::max();
178 float ymin = std::numeric_limits<float>::max(); 178 float ymin = std::numeric_limits<float>::max();
179 float ymax = -std::numeric_limits<float>::max(); 179 float ymax = -std::numeric_limits<float>::max();
180 180
181 for (int i = 0; i < numVertices; ++i) 181 for (int i = 0; i < numVertices; ++i)
182 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, vertices[i]); 182 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, vertices[i]);
183 183
184 return FloatRect(FloatPoint(xmin, ymin), FloatSize(xmax - xmin, ymax - ymin) ); 184 return FloatRect(FloatPoint(xmin, ymin), FloatSize(xmax - xmin, ymax - ymin) );
185 } 185 }
186 186
187 FloatRect CCMathUtil::computeEnclosingClippedRect(const HomogeneousCoordinate& h 1, const HomogeneousCoordinate& h2, const HomogeneousCoordinate& h3, const Homog eneousCoordinate& h4) 187 FloatRect MathUtil::computeEnclosingClippedRect(const HomogeneousCoordinate& h1, const HomogeneousCoordinate& h2, const HomogeneousCoordinate& h3, const Homogen eousCoordinate& h4)
188 { 188 {
189 // This function performs clipping as necessary and computes the enclosing 2 d 189 // This function performs clipping as necessary and computes the enclosing 2 d
190 // FloatRect of the vertices. Doing these two steps simultaneously allows us to avoid 190 // FloatRect of the vertices. Doing these two steps simultaneously allows us to avoid
191 // the overhead of storing an unknown number of clipped vertices. 191 // the overhead of storing an unknown number of clipped vertices.
192 192
193 // If no vertices on the quad are clipped, then we can simply return the enc losing rect directly. 193 // If no vertices on the quad are clipped, then we can simply return the enc losing rect directly.
194 bool somethingClipped = h1.shouldBeClipped() || h2.shouldBeClipped() || h3.s houldBeClipped() || h4.shouldBeClipped(); 194 bool somethingClipped = h1.shouldBeClipped() || h2.shouldBeClipped() || h3.s houldBeClipped() || h4.shouldBeClipped();
195 if (!somethingClipped) { 195 if (!somethingClipped) {
196 FloatQuad mappedQuad = FloatQuad(h1.cartesianPoint2d(), h2.cartesianPoin t2d(), h3.cartesianPoint2d(), h4.cartesianPoint2d()); 196 FloatQuad mappedQuad = FloatQuad(h1.cartesianPoint2d(), h2.cartesianPoin t2d(), h3.cartesianPoint2d(), h4.cartesianPoint2d());
197 return mappedQuad.boundingBox(); 197 return mappedQuad.boundingBox();
(...skipping 29 matching lines...) Expand all
227 227
228 if (!h4.shouldBeClipped()) 228 if (!h4.shouldBeClipped())
229 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, h4.cartesianPoint2d() ); 229 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, h4.cartesianPoint2d() );
230 230
231 if (h4.shouldBeClipped() ^ h1.shouldBeClipped()) 231 if (h4.shouldBeClipped() ^ h1.shouldBeClipped())
232 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, computeClippedPointFo rEdge(h4, h1).cartesianPoint2d()); 232 expandBoundsToIncludePoint(xmin, xmax, ymin, ymax, computeClippedPointFo rEdge(h4, h1).cartesianPoint2d());
233 233
234 return FloatRect(FloatPoint(xmin, ymin), FloatSize(xmax - xmin, ymax - ymin) ); 234 return FloatRect(FloatPoint(xmin, ymin), FloatSize(xmax - xmin, ymax - ymin) );
235 } 235 }
236 236
237 FloatQuad CCMathUtil::mapQuad(const WebTransformationMatrix& transform, const Fl oatQuad& q, bool& clipped) 237 FloatQuad MathUtil::mapQuad(const WebTransformationMatrix& transform, const Floa tQuad& q, bool& clipped)
238 { 238 {
239 if (transform.isIdentityOrTranslation()) { 239 if (transform.isIdentityOrTranslation()) {
240 FloatQuad mappedQuad(q); 240 FloatQuad mappedQuad(q);
241 mappedQuad.move(static_cast<float>(transform.m41()), static_cast<float>( transform.m42())); 241 mappedQuad.move(static_cast<float>(transform.m41()), static_cast<float>( transform.m42()));
242 clipped = false; 242 clipped = false;
243 return mappedQuad; 243 return mappedQuad;
244 } 244 }
245 245
246 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, q.p1()); 246 HomogeneousCoordinate h1 = mapHomogeneousPoint(transform, q.p1());
247 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, q.p2()); 247 HomogeneousCoordinate h2 = mapHomogeneousPoint(transform, q.p2());
248 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, q.p3()); 248 HomogeneousCoordinate h3 = mapHomogeneousPoint(transform, q.p3());
249 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, q.p4()); 249 HomogeneousCoordinate h4 = mapHomogeneousPoint(transform, q.p4());
250 250
251 clipped = h1.shouldBeClipped() || h2.shouldBeClipped() || h3.shouldBeClipped () || h4.shouldBeClipped(); 251 clipped = h1.shouldBeClipped() || h2.shouldBeClipped() || h3.shouldBeClipped () || h4.shouldBeClipped();
252 252
253 // Result will be invalid if clipped == true. But, compute it anyway just in case, to emulate existing behavior. 253 // Result will be invalid if clipped == true. But, compute it anyway just in case, to emulate existing behavior.
254 return FloatQuad(h1.cartesianPoint2d(), h2.cartesianPoint2d(), h3.cartesianP oint2d(), h4.cartesianPoint2d()); 254 return FloatQuad(h1.cartesianPoint2d(), h2.cartesianPoint2d(), h3.cartesianP oint2d(), h4.cartesianPoint2d());
255 } 255 }
256 256
257 FloatPoint CCMathUtil::mapPoint(const WebTransformationMatrix& transform, const FloatPoint& p, bool& clipped) 257 FloatPoint MathUtil::mapPoint(const WebTransformationMatrix& transform, const Fl oatPoint& p, bool& clipped)
258 { 258 {
259 HomogeneousCoordinate h = mapHomogeneousPoint(transform, p); 259 HomogeneousCoordinate h = mapHomogeneousPoint(transform, p);
260 260
261 if (h.w > 0) { 261 if (h.w > 0) {
262 clipped = false; 262 clipped = false;
263 return h.cartesianPoint2d(); 263 return h.cartesianPoint2d();
264 } 264 }
265 265
266 // The cartesian coordinates will be invalid after dividing by w. 266 // The cartesian coordinates will be invalid after dividing by w.
267 clipped = true; 267 clipped = true;
268 268
269 // Avoid dividing by w if w == 0. 269 // Avoid dividing by w if w == 0.
270 if (!h.w) 270 if (!h.w)
271 return FloatPoint(); 271 return FloatPoint();
272 272
273 // This return value will be invalid because clipped == true, but (1) users of this 273 // This return value will be invalid because clipped == true, but (1) users of this
274 // code should be ignoring the return value when clipped == true anyway, and (2) this 274 // code should be ignoring the return value when clipped == true anyway, and (2) this
275 // behavior is more consistent with existing behavior of WebKit transforms i f the user 275 // behavior is more consistent with existing behavior of WebKit transforms i f the user
276 // really does not ignore the return value. 276 // really does not ignore the return value.
277 return h.cartesianPoint2d(); 277 return h.cartesianPoint2d();
278 } 278 }
279 279
280 FloatPoint3D CCMathUtil::mapPoint(const WebTransformationMatrix& transform, cons t FloatPoint3D& p, bool& clipped) 280 FloatPoint3D MathUtil::mapPoint(const WebTransformationMatrix& transform, const FloatPoint3D& p, bool& clipped)
281 { 281 {
282 HomogeneousCoordinate h = mapHomogeneousPoint(transform, p); 282 HomogeneousCoordinate h = mapHomogeneousPoint(transform, p);
283 283
284 if (h.w > 0) { 284 if (h.w > 0) {
285 clipped = false; 285 clipped = false;
286 return h.cartesianPoint3d(); 286 return h.cartesianPoint3d();
287 } 287 }
288 288
289 // The cartesian coordinates will be invalid after dividing by w. 289 // The cartesian coordinates will be invalid after dividing by w.
290 clipped = true; 290 clipped = true;
291 291
292 // Avoid dividing by w if w == 0. 292 // Avoid dividing by w if w == 0.
293 if (!h.w) 293 if (!h.w)
294 return FloatPoint3D(); 294 return FloatPoint3D();
295 295
296 // This return value will be invalid because clipped == true, but (1) users of this 296 // This return value will be invalid because clipped == true, but (1) users of this
297 // code should be ignoring the return value when clipped == true anyway, and (2) this 297 // code should be ignoring the return value when clipped == true anyway, and (2) this
298 // behavior is more consistent with existing behavior of WebKit transforms i f the user 298 // behavior is more consistent with existing behavior of WebKit transforms i f the user
299 // really does not ignore the return value. 299 // really does not ignore the return value.
300 return h.cartesianPoint3d(); 300 return h.cartesianPoint3d();
301 } 301 }
302 302
303 FloatQuad CCMathUtil::projectQuad(const WebTransformationMatrix& transform, cons t FloatQuad& q, bool& clipped) 303 FloatQuad MathUtil::projectQuad(const WebTransformationMatrix& transform, const FloatQuad& q, bool& clipped)
304 { 304 {
305 FloatQuad projectedQuad; 305 FloatQuad projectedQuad;
306 bool clippedPoint; 306 bool clippedPoint;
307 projectedQuad.setP1(projectPoint(transform, q.p1(), clippedPoint)); 307 projectedQuad.setP1(projectPoint(transform, q.p1(), clippedPoint));
308 clipped = clippedPoint; 308 clipped = clippedPoint;
309 projectedQuad.setP2(projectPoint(transform, q.p2(), clippedPoint)); 309 projectedQuad.setP2(projectPoint(transform, q.p2(), clippedPoint));
310 clipped |= clippedPoint; 310 clipped |= clippedPoint;
311 projectedQuad.setP3(projectPoint(transform, q.p3(), clippedPoint)); 311 projectedQuad.setP3(projectPoint(transform, q.p3(), clippedPoint));
312 clipped |= clippedPoint; 312 clipped |= clippedPoint;
313 projectedQuad.setP4(projectPoint(transform, q.p4(), clippedPoint)); 313 projectedQuad.setP4(projectPoint(transform, q.p4(), clippedPoint));
314 clipped |= clippedPoint; 314 clipped |= clippedPoint;
315 315
316 return projectedQuad; 316 return projectedQuad;
317 } 317 }
318 318
319 FloatPoint CCMathUtil::projectPoint(const WebTransformationMatrix& transform, co nst FloatPoint& p, bool& clipped) 319 FloatPoint MathUtil::projectPoint(const WebTransformationMatrix& transform, cons t FloatPoint& p, bool& clipped)
320 { 320 {
321 HomogeneousCoordinate h = projectHomogeneousPoint(transform, p); 321 HomogeneousCoordinate h = projectHomogeneousPoint(transform, p);
322 322
323 if (h.w > 0) { 323 if (h.w > 0) {
324 // The cartesian coordinates will be valid in this case. 324 // The cartesian coordinates will be valid in this case.
325 clipped = false; 325 clipped = false;
326 return h.cartesianPoint2d(); 326 return h.cartesianPoint2d();
327 } 327 }
328 328
329 // The cartesian coordinates will be invalid after dividing by w. 329 // The cartesian coordinates will be invalid after dividing by w.
330 clipped = true; 330 clipped = true;
331 331
332 // Avoid dividing by w if w == 0. 332 // Avoid dividing by w if w == 0.
333 if (!h.w) 333 if (!h.w)
334 return FloatPoint(); 334 return FloatPoint();
335 335
336 // This return value will be invalid because clipped == true, but (1) users of this 336 // This return value will be invalid because clipped == true, but (1) users of this
337 // code should be ignoring the return value when clipped == true anyway, and (2) this 337 // code should be ignoring the return value when clipped == true anyway, and (2) this
338 // behavior is more consistent with existing behavior of WebKit transforms i f the user 338 // behavior is more consistent with existing behavior of WebKit transforms i f the user
339 // really does not ignore the return value. 339 // really does not ignore the return value.
340 return h.cartesianPoint2d(); 340 return h.cartesianPoint2d();
341 } 341 }
342 342
343 void CCMathUtil::flattenTransformTo2d(WebTransformationMatrix& transform) 343 void MathUtil::flattenTransformTo2d(WebTransformationMatrix& transform)
344 { 344 {
345 // Set both the 3rd row and 3rd column to (0, 0, 1, 0). 345 // Set both the 3rd row and 3rd column to (0, 0, 1, 0).
346 // 346 //
347 // One useful interpretation of doing this operation: 347 // One useful interpretation of doing this operation:
348 // - For x and y values, the new transform behaves effectively like an orth ographic 348 // - For x and y values, the new transform behaves effectively like an orth ographic
349 // projection was added to the matrix sequence. 349 // projection was added to the matrix sequence.
350 // - For z values, the new transform overrides any effect that the transfor m had on 350 // - For z values, the new transform overrides any effect that the transfor m had on
351 // z, and instead it preserves the z value for any points that are transf ormed. 351 // z, and instead it preserves the z value for any points that are transf ormed.
352 // - Because of linearity of transforms, this flattened transform also pres erves the 352 // - Because of linearity of transforms, this flattened transform also pres erves the
353 // effect that any subsequent (post-multiplied) transforms would have on z values. 353 // effect that any subsequent (post-multiplied) transforms would have on z values.
354 // 354 //
355 transform.setM13(0); 355 transform.setM13(0);
356 transform.setM23(0); 356 transform.setM23(0);
357 transform.setM31(0); 357 transform.setM31(0);
358 transform.setM32(0); 358 transform.setM32(0);
359 transform.setM33(1); 359 transform.setM33(1);
360 transform.setM34(0); 360 transform.setM34(0);
361 transform.setM43(0); 361 transform.setM43(0);
362 } 362 }
363 363
364 float CCMathUtil::smallestAngleBetweenVectors(const FloatSize& v1, const FloatSi ze& v2) 364 float MathUtil::smallestAngleBetweenVectors(const FloatSize& v1, const FloatSize & v2)
365 { 365 {
366 float dotProduct = (v1.width() * v2.width() + v1.height() * v2.height()) / ( v1.diagonalLength() * v2.diagonalLength()); 366 float dotProduct = (v1.width() * v2.width() + v1.height() * v2.height()) / ( v1.diagonalLength() * v2.diagonalLength());
367 // Clamp to compensate for rounding errors. 367 // Clamp to compensate for rounding errors.
368 dotProduct = std::max(-1.f, std::min(1.f, dotProduct)); 368 dotProduct = std::max(-1.f, std::min(1.f, dotProduct));
369 return rad2deg(acosf(dotProduct)); 369 return rad2deg(acosf(dotProduct));
370 } 370 }
371 371
372 FloatSize CCMathUtil::projectVector(const FloatSize& source, const FloatSize& de stination) 372 FloatSize MathUtil::projectVector(const FloatSize& source, const FloatSize& dest ination)
373 { 373 {
374 float sourceDotDestination = source.width() * destination.width() + source.h eight() * destination.height(); 374 float sourceDotDestination = source.width() * destination.width() + source.h eight() * destination.height();
375 float projectedLength = sourceDotDestination / destination.diagonalLengthSqu ared(); 375 float projectedLength = sourceDotDestination / destination.diagonalLengthSqu ared();
376 return FloatSize(projectedLength * destination.width(), projectedLength * de stination.height()); 376 return FloatSize(projectedLength * destination.width(), projectedLength * de stination.height());
377 } 377 }
378 378
379 } // namespace cc 379 } // namespace cc
OLDNEW
« cc/active_animation.h ('K') | « cc/math_util.h ('k') | cc/math_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698