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

Side by Side Diff: ui/gfx/transform.cc

Issue 11774005: Migrate more functions from MathUtil to gfx::Transform (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: try to fix double/float conversion errors Created 7 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 | Annotate | Revision Log
« no previous file with comments | « ui/gfx/transform.h ('k') | ui/gfx/transform_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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 // MSVC++ requires this to be set before any other includes to get M_PI. 5 // MSVC++ requires this to be set before any other includes to get M_PI.
6 #define _USE_MATH_DEFINES 6 #define _USE_MATH_DEFINES
7 7
8 #include "ui/gfx/transform.h" 8 #include "ui/gfx/transform.h"
9 9
10 #include <cmath> 10 #include <cmath>
(...skipping 14 matching lines...) Expand all
25 // Taken from SkMatrix44. 25 // Taken from SkMatrix44.
26 const double kTooSmallForDeterminant = 1e-8; 26 const double kTooSmallForDeterminant = 1e-8;
27 27
28 double TanDegrees(double degrees) { 28 double TanDegrees(double degrees) {
29 double radians = degrees * M_PI / 180; 29 double radians = degrees * M_PI / 180;
30 return std::tan(radians); 30 return std::tan(radians);
31 } 31 }
32 32
33 } // namespace 33 } // namespace
34 34
35 Transform::Transform(
36 double col1row1, double col2row1, double col3row1, double col4row1,
37 double col1row2, double col2row2, double col3row2, double col4row2,
38 double col1row3, double col2row3, double col3row3, double col4row3,
39 double col1row4, double col2row4, double col3row4, double col4row4)
40 : matrix_(SkMatrix44::kUninitialized_Constructor)
41 {
42 matrix_.setDouble(0, 0, col1row1);
43 matrix_.setDouble(1, 0, col1row2);
44 matrix_.setDouble(2, 0, col1row3);
45 matrix_.setDouble(3, 0, col1row4);
46
47 matrix_.setDouble(0, 1, col2row1);
48 matrix_.setDouble(1, 1, col2row2);
49 matrix_.setDouble(2, 1, col2row3);
50 matrix_.setDouble(3, 1, col2row4);
51
52 matrix_.setDouble(0, 2, col3row1);
53 matrix_.setDouble(1, 2, col3row2);
54 matrix_.setDouble(2, 2, col3row3);
55 matrix_.setDouble(3, 2, col3row4);
56
57 matrix_.setDouble(0, 3, col4row1);
58 matrix_.setDouble(1, 3, col4row2);
59 matrix_.setDouble(2, 3, col4row3);
60 matrix_.setDouble(3, 3, col4row4);
61 }
62
63 Transform::Transform(
64 double col1row1, double col2row1,
65 double col1row2, double col2row2,
66 double x_translation, double y_translation)
67 : matrix_(SkMatrix44::kIdentity_Constructor)
68 {
69 matrix_.setDouble(0, 0, col1row1);
70 matrix_.setDouble(1, 0, col1row2);
71 matrix_.setDouble(0, 1, col2row1);
72 matrix_.setDouble(1, 1, col2row2);
73 matrix_.setDouble(0, 3, x_translation);
74 matrix_.setDouble(1, 3, y_translation);
75 }
76
35 void Transform::RotateAboutXAxis(double degrees) { 77 void Transform::RotateAboutXAxis(double degrees) {
36 double radians = degrees * M_PI / 180; 78 double radians = degrees * M_PI / 180;
37 double cosTheta = std::cos(radians); 79 double cosTheta = std::cos(radians);
38 double sinTheta = std::sin(radians); 80 double sinTheta = std::sin(radians);
39 if (matrix_.isIdentity()) { 81 if (matrix_.isIdentity()) {
40 matrix_.set3x3(1, 0, 0, 82 matrix_.set3x3(1, 0, 0,
41 0, cosTheta, sinTheta, 83 0, cosTheta, sinTheta,
42 0, -sinTheta, cosTheta); 84 0, -sinTheta, cosTheta);
43 } else { 85 } else {
44 SkMatrix44 rot; 86 SkMatrix44 rot;
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 return false; 294 return false;
253 } 295 }
254 296
255 return true; 297 return true;
256 } 298 }
257 299
258 void Transform::Transpose() { 300 void Transform::Transpose() {
259 matrix_.transpose(); 301 matrix_.transpose();
260 } 302 }
261 303
304 void Transform::FlattenTo2d() {
305 matrix_.setDouble(2, 0, 0.0);
306 matrix_.setDouble(2, 1, 0.0);
307 matrix_.setDouble(0, 2, 0.0);
308 matrix_.setDouble(1, 2, 0.0);
309 matrix_.setDouble(2, 2, 1.0);
310 matrix_.setDouble(3, 2, 0.0);
311 matrix_.setDouble(2, 3, 0.0);
312 }
313
262 void Transform::TransformPoint(Point& point) const { 314 void Transform::TransformPoint(Point& point) const {
263 TransformPointInternal(matrix_, point); 315 TransformPointInternal(matrix_, point);
264 } 316 }
265 317
266 void Transform::TransformPoint(Point3F& point) const { 318 void Transform::TransformPoint(Point3F& point) const {
267 TransformPointInternal(matrix_, point); 319 TransformPointInternal(matrix_, point);
268 } 320 }
269 321
270 bool Transform::TransformPointReverse(Point& point) const { 322 bool Transform::TransformPointReverse(Point& point) const {
271 // TODO(sad): Try to avoid trying to invert the matrix. 323 // TODO(sad): Try to avoid trying to invert the matrix.
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 matrix_.getDouble(2, 1), 442 matrix_.getDouble(2, 1),
391 matrix_.getDouble(2, 2), 443 matrix_.getDouble(2, 2),
392 matrix_.getDouble(2, 3), 444 matrix_.getDouble(2, 3),
393 matrix_.getDouble(3, 0), 445 matrix_.getDouble(3, 0),
394 matrix_.getDouble(3, 1), 446 matrix_.getDouble(3, 1),
395 matrix_.getDouble(3, 2), 447 matrix_.getDouble(3, 2),
396 matrix_.getDouble(3, 3)); 448 matrix_.getDouble(3, 3));
397 } 449 }
398 450
399 } // namespace gfx 451 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/transform.h ('k') | ui/gfx/transform_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698