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

Side by Side Diff: cc/math_util.cc

Issue 11367080: cc: Remove all remaining use of WebCore Rect/Point/Size types from the compositor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase 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/math_util_unittest.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 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 "FloatSize.h" 9 #include <cmath>
10 #include <limits>
11
10 #include "ui/gfx/quad_f.h" 12 #include "ui/gfx/quad_f.h"
11 #include "ui/gfx/rect.h" 13 #include "ui/gfx/rect.h"
12 #include "ui/gfx/rect_conversions.h" 14 #include "ui/gfx/rect_conversions.h"
13 #include "ui/gfx/rect_f.h" 15 #include "ui/gfx/rect_f.h"
14 #include <cmath> 16 #include "ui/gfx/vector2d_f.h"
15 #include <public/WebTransformationMatrix.h> 17 #include <public/WebTransformationMatrix.h>
16 18
17 using WebKit::WebTransformationMatrix; 19 using WebKit::WebTransformationMatrix;
18 20
19 namespace cc { 21 namespace cc {
20 22
21 static HomogeneousCoordinate projectHomogeneousPoint(const WebTransformationMatr ix& transform, const gfx::PointF& p) 23 static HomogeneousCoordinate projectHomogeneousPoint(const WebTransformationMatr ix& transform, const gfx::PointF& p)
22 { 24 {
23 // In this case, the layer we are trying to project onto is perpendicular to ray 25 // In this case, the layer we are trying to project onto is perpendicular to ray
24 // (point p and z-axis direction) that we are trying to project. This happen s when the 26 // (point p and z-axis direction) that we are trying to project. This happen s when the
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 373
372 gfx::Vector2dF MathUtil::computeTransform2dScaleComponents(const WebTransformati onMatrix& transform) 374 gfx::Vector2dF MathUtil::computeTransform2dScaleComponents(const WebTransformati onMatrix& transform)
373 { 375 {
374 if (transform.hasPerspective()) 376 if (transform.hasPerspective())
375 return gfx::Vector2dF(1, 1); 377 return gfx::Vector2dF(1, 1);
376 float xScale = scaleOnAxis(transform.m11(), transform.m12(), transform.m13() ); 378 float xScale = scaleOnAxis(transform.m11(), transform.m12(), transform.m13() );
377 float yScale = scaleOnAxis(transform.m21(), transform.m22(), transform.m23() ); 379 float yScale = scaleOnAxis(transform.m21(), transform.m22(), transform.m23() );
378 return gfx::Vector2dF(xScale, yScale); 380 return gfx::Vector2dF(xScale, yScale);
379 } 381 }
380 382
381 float MathUtil::smallestAngleBetweenVectors(const FloatSize& v1, const FloatSize & v2) 383 static inline double rad2deg(double r)
382 { 384 {
383 float dotProduct = (v1.width() * v2.width() + v1.height() * v2.height()) / ( v1.diagonalLength() * v2.diagonalLength()); 385 double pi = 3.14159265358979323846;
384 // Clamp to compensate for rounding errors. 386 return r * 180.0 / pi;
385 dotProduct = std::max(-1.f, std::min(1.f, dotProduct));
386 return rad2deg(acosf(dotProduct));
387 } 387 }
388 388
389 FloatSize MathUtil::projectVector(const FloatSize& source, const FloatSize& dest ination) 389 float MathUtil::smallestAngleBetweenVectors(gfx::Vector2dF v1, gfx::Vector2dF v2 )
390 { 390 {
391 float sourceDotDestination = source.width() * destination.width() + source.h eight() * destination.height(); 391 double dotProduct = gfx::DotProduct(v1, v2) / v1.Length() / v2.Length();
392 float projectedLength = sourceDotDestination / destination.diagonalLengthSqu ared(); 392 // Clamp to compensate for rounding errors.
393 return FloatSize(projectedLength * destination.width(), projectedLength * de stination.height()); 393 dotProduct = std::max(-1.0, std::min(1.0, dotProduct));
394 return static_cast<float>(rad2deg(std::acos(dotProduct)));
395 }
396
397 gfx::Vector2dF MathUtil::projectVector(gfx::Vector2dF source, gfx::Vector2dF des tination)
398 {
399 float projectedLength = gfx::DotProduct(source, destination) / destination.L engthSquared();
400 return gfx::Vector2dF(projectedLength * destination.x(), projectedLength * d estination.y());
394 } 401 }
395 402
396 } // namespace cc 403 } // namespace cc
OLDNEW
« no previous file with comments | « 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