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

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

Issue 11931017: Use explicit constructor-enums for SkMatrix44, either kUninitialized or kIdentity (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: 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 | « no previous file | ui/gfx/transform_util.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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 76
77 void Transform::RotateAboutXAxis(double degrees) { 77 void Transform::RotateAboutXAxis(double degrees) {
78 double radians = degrees * M_PI / 180; 78 double radians = degrees * M_PI / 180;
79 double cosTheta = std::cos(radians); 79 double cosTheta = std::cos(radians);
80 double sinTheta = std::sin(radians); 80 double sinTheta = std::sin(radians);
81 if (matrix_.isIdentity()) { 81 if (matrix_.isIdentity()) {
82 matrix_.set3x3(1, 0, 0, 82 matrix_.set3x3(1, 0, 0,
83 0, cosTheta, sinTheta, 83 0, cosTheta, sinTheta,
84 0, -sinTheta, cosTheta); 84 0, -sinTheta, cosTheta);
85 } else { 85 } else {
86 SkMatrix44 rot; 86 SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
87 rot.set3x3(1, 0, 0, 87 rot.set3x3(1, 0, 0,
88 0, cosTheta, sinTheta, 88 0, cosTheta, sinTheta,
89 0, -sinTheta, cosTheta); 89 0, -sinTheta, cosTheta);
90 matrix_.preConcat(rot); 90 matrix_.preConcat(rot);
91 } 91 }
92 } 92 }
93 93
94 void Transform::RotateAboutYAxis(double degrees) { 94 void Transform::RotateAboutYAxis(double degrees) {
95 double radians = degrees * M_PI / 180; 95 double radians = degrees * M_PI / 180;
96 double cosTheta = std::cos(radians); 96 double cosTheta = std::cos(radians);
97 double sinTheta = std::sin(radians); 97 double sinTheta = std::sin(radians);
98 if (matrix_.isIdentity()) { 98 if (matrix_.isIdentity()) {
99 // Note carefully the placement of the -sinTheta for rotation about 99 // Note carefully the placement of the -sinTheta for rotation about
100 // y-axis is different than rotation about x-axis or z-axis. 100 // y-axis is different than rotation about x-axis or z-axis.
101 matrix_.set3x3(cosTheta, 0, -sinTheta, 101 matrix_.set3x3(cosTheta, 0, -sinTheta,
102 0, 1, 0, 102 0, 1, 0,
103 sinTheta, 0, cosTheta); 103 sinTheta, 0, cosTheta);
104 } else { 104 } else {
105 SkMatrix44 rot; 105 SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
106 rot.set3x3(cosTheta, 0, -sinTheta, 106 rot.set3x3(cosTheta, 0, -sinTheta,
107 0, 1, 0, 107 0, 1, 0,
108 sinTheta, 0, cosTheta); 108 sinTheta, 0, cosTheta);
109 matrix_.preConcat(rot); 109 matrix_.preConcat(rot);
110 } 110 }
111 } 111 }
112 112
113 void Transform::RotateAboutZAxis(double degrees) { 113 void Transform::RotateAboutZAxis(double degrees) {
114 double radians = degrees * M_PI / 180; 114 double radians = degrees * M_PI / 180;
115 double cosTheta = std::cos(radians); 115 double cosTheta = std::cos(radians);
116 double sinTheta = std::sin(radians); 116 double sinTheta = std::sin(radians);
117 if (matrix_.isIdentity()) { 117 if (matrix_.isIdentity()) {
118 matrix_.set3x3(cosTheta, sinTheta, 0, 118 matrix_.set3x3(cosTheta, sinTheta, 0,
119 -sinTheta, cosTheta, 0, 119 -sinTheta, cosTheta, 0,
120 0, 0, 1); 120 0, 0, 1);
121 } else { 121 } else {
122 SkMatrix44 rot; 122 SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
123 rot.set3x3(cosTheta, sinTheta, 0, 123 rot.set3x3(cosTheta, sinTheta, 0,
124 -sinTheta, cosTheta, 0, 124 -sinTheta, cosTheta, 0,
125 0, 0, 1); 125 0, 0, 1);
126 matrix_.preConcat(rot); 126 matrix_.preConcat(rot);
127 } 127 }
128 } 128 }
129 129
130 void Transform::RotateAbout(const Vector3dF& axis, double degrees) { 130 void Transform::RotateAbout(const Vector3dF& axis, double degrees) {
131 if (matrix_.isIdentity()) { 131 if (matrix_.isIdentity()) {
132 matrix_.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()), 132 matrix_.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()),
133 SkDoubleToMScalar(axis.y()), 133 SkDoubleToMScalar(axis.y()),
134 SkDoubleToMScalar(axis.z()), 134 SkDoubleToMScalar(axis.z()),
135 SkDoubleToMScalar(degrees)); 135 SkDoubleToMScalar(degrees));
136 } else { 136 } else {
137 SkMatrix44 rot; 137 SkMatrix44 rot(SkMatrix44::kUninitialized_Constructor);
138 rot.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()), 138 rot.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()),
139 SkDoubleToMScalar(axis.y()), 139 SkDoubleToMScalar(axis.y()),
140 SkDoubleToMScalar(axis.z()), 140 SkDoubleToMScalar(axis.z()),
141 SkDoubleToMScalar(degrees)); 141 SkDoubleToMScalar(degrees));
142 matrix_.preConcat(rot); 142 matrix_.preConcat(rot);
143 } 143 }
144 } 144 }
145 145
146 void Transform::Scale(double x, double y) { 146 void Transform::Scale(double x, double y) {
147 matrix_.preScale(SkDoubleToMScalar(x), SkDoubleToMScalar(y), 1); 147 matrix_.preScale(SkDoubleToMScalar(x), SkDoubleToMScalar(y), 1);
(...skipping 12 matching lines...) Expand all
160 void Transform::Translate3d(double x, double y, double z) { 160 void Transform::Translate3d(double x, double y, double z) {
161 matrix_.preTranslate(SkDoubleToMScalar(x), 161 matrix_.preTranslate(SkDoubleToMScalar(x),
162 SkDoubleToMScalar(y), 162 SkDoubleToMScalar(y),
163 SkDoubleToMScalar(z)); 163 SkDoubleToMScalar(z));
164 } 164 }
165 165
166 void Transform::SkewX(double angle_x) { 166 void Transform::SkewX(double angle_x) {
167 if (matrix_.isIdentity()) 167 if (matrix_.isIdentity())
168 matrix_.setDouble(0, 1, TanDegrees(angle_x)); 168 matrix_.setDouble(0, 1, TanDegrees(angle_x));
169 else { 169 else {
170 SkMatrix44 skew; 170 SkMatrix44 skew(SkMatrix44::kIdentity_Constructor);
171 skew.setDouble(0, 1, TanDegrees(angle_x)); 171 skew.setDouble(0, 1, TanDegrees(angle_x));
172 matrix_.preConcat(skew); 172 matrix_.preConcat(skew);
173 } 173 }
174 } 174 }
175 175
176 void Transform::SkewY(double angle_y) { 176 void Transform::SkewY(double angle_y) {
177 if (matrix_.isIdentity()) 177 if (matrix_.isIdentity())
178 matrix_.setDouble(1, 0, TanDegrees(angle_y)); 178 matrix_.setDouble(1, 0, TanDegrees(angle_y));
179 else { 179 else {
180 SkMatrix44 skew; 180 SkMatrix44 skew(SkMatrix44::kIdentity_Constructor);
181 skew.setDouble(1, 0, TanDegrees(angle_y)); 181 skew.setDouble(1, 0, TanDegrees(angle_y));
182 matrix_.preConcat(skew); 182 matrix_.preConcat(skew);
183 } 183 }
184 } 184 }
185 185
186 void Transform::ApplyPerspectiveDepth(double depth) { 186 void Transform::ApplyPerspectiveDepth(double depth) {
187 if (depth == 0) 187 if (depth == 0)
188 return; 188 return;
189 if (matrix_.isIdentity()) 189 if (matrix_.isIdentity())
190 matrix_.setDouble(3, 2, -1.0 / depth); 190 matrix_.setDouble(3, 2, -1.0 / depth);
191 else { 191 else {
192 SkMatrix44 m; 192 SkMatrix44 m(SkMatrix44::kIdentity_Constructor);
193 m.setDouble(3, 2, -1.0 / depth); 193 m.setDouble(3, 2, -1.0 / depth);
194 matrix_.preConcat(m); 194 matrix_.preConcat(m);
195 } 195 }
196 } 196 }
197 197
198 void Transform::PreconcatTransform(const Transform& transform) { 198 void Transform::PreconcatTransform(const Transform& transform) {
199 matrix_.preConcat(transform.matrix_); 199 matrix_.preConcat(transform.matrix_);
200 } 200 }
201 201
202 void Transform::ConcatTransform(const Transform& transform) { 202 void Transform::ConcatTransform(const Transform& transform) {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 void Transform::TransformPoint(Point& point) const { 314 void Transform::TransformPoint(Point& point) const {
315 TransformPointInternal(matrix_, point); 315 TransformPointInternal(matrix_, point);
316 } 316 }
317 317
318 void Transform::TransformPoint(Point3F& point) const { 318 void Transform::TransformPoint(Point3F& point) const {
319 TransformPointInternal(matrix_, point); 319 TransformPointInternal(matrix_, point);
320 } 320 }
321 321
322 bool Transform::TransformPointReverse(Point& point) const { 322 bool Transform::TransformPointReverse(Point& point) const {
323 // TODO(sad): Try to avoid trying to invert the matrix. 323 // TODO(sad): Try to avoid trying to invert the matrix.
324 SkMatrix44 inverse; 324 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor);
325 if (!matrix_.invert(&inverse)) 325 if (!matrix_.invert(&inverse))
326 return false; 326 return false;
327 327
328 TransformPointInternal(inverse, point); 328 TransformPointInternal(inverse, point);
329 return true; 329 return true;
330 } 330 }
331 331
332 bool Transform::TransformPointReverse(Point3F& point) const { 332 bool Transform::TransformPointReverse(Point3F& point) const {
333 // TODO(sad): Try to avoid trying to invert the matrix. 333 // TODO(sad): Try to avoid trying to invert the matrix.
334 SkMatrix44 inverse; 334 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor);
335 if (!matrix_.invert(&inverse)) 335 if (!matrix_.invert(&inverse))
336 return false; 336 return false;
337 337
338 TransformPointInternal(inverse, point); 338 TransformPointInternal(inverse, point);
339 return true; 339 return true;
340 } 340 }
341 341
342 void Transform::TransformRect(RectF* rect) const { 342 void Transform::TransformRect(RectF* rect) const {
343 if (matrix_.isIdentity()) 343 if (matrix_.isIdentity())
344 return; 344 return;
345 345
346 SkRect src = RectFToSkRect(*rect); 346 SkRect src = RectFToSkRect(*rect);
347 const SkMatrix& matrix = matrix_; 347 const SkMatrix& matrix = matrix_;
348 matrix.mapRect(&src); 348 matrix.mapRect(&src);
349 *rect = SkRectToRectF(src); 349 *rect = SkRectToRectF(src);
350 } 350 }
351 351
352 bool Transform::TransformRectReverse(RectF* rect) const { 352 bool Transform::TransformRectReverse(RectF* rect) const {
353 if (matrix_.isIdentity()) 353 if (matrix_.isIdentity())
354 return true; 354 return true;
355 355
356 SkMatrix44 inverse; 356 SkMatrix44 inverse(SkMatrix44::kUninitialized_Constructor);
357 if (!matrix_.invert(&inverse)) 357 if (!matrix_.invert(&inverse))
358 return false; 358 return false;
359 359
360 const SkMatrix& matrix = inverse; 360 const SkMatrix& matrix = inverse;
361 SkRect src = RectFToSkRect(*rect); 361 SkRect src = RectFToSkRect(*rect);
362 matrix.mapRect(&src); 362 matrix.mapRect(&src);
363 *rect = SkRectToRectF(src); 363 *rect = SkRectToRectF(src);
364 return true; 364 return true;
365 } 365 }
366 366
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 matrix_.getDouble(2, 1), 442 matrix_.getDouble(2, 1),
443 matrix_.getDouble(2, 2), 443 matrix_.getDouble(2, 2),
444 matrix_.getDouble(2, 3), 444 matrix_.getDouble(2, 3),
445 matrix_.getDouble(3, 0), 445 matrix_.getDouble(3, 0),
446 matrix_.getDouble(3, 1), 446 matrix_.getDouble(3, 1),
447 matrix_.getDouble(3, 2), 447 matrix_.getDouble(3, 2),
448 matrix_.getDouble(3, 3)); 448 matrix_.getDouble(3, 3));
449 } 449 }
450 450
451 } // namespace gfx 451 } // namespace gfx
OLDNEW
« no previous file with comments | « no previous file | ui/gfx/transform_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698