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

Unified Diff: ui/gfx/transform.cc

Issue 11418040: gfx::Transform API clean-up (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/transform.h ('k') | ui/gfx/transform_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/transform.cc
diff --git a/ui/gfx/transform.cc b/ui/gfx/transform.cc
index 7815e8d16f9acd03dcb2a165867c25b7ee3a02d3..19b59dac2039be7debb9485a34d817392e79b978 100644
--- a/ui/gfx/transform.cc
+++ b/ui/gfx/transform.cc
@@ -45,225 +45,128 @@ bool Transform::operator!=(const Transform& rhs) const {
return !(*this == rhs);
}
-void Transform::SetRotate(double degree) {
- matrix_.setRotateDegreesAbout(SkDoubleToMScalar(0),
- SkDoubleToMScalar(0),
- SkDoubleToMScalar(1),
- SkDoubleToMScalar(degree));
+void Transform::MakeIdentity() {
+ matrix_.setIdentity();
}
-void Transform::SetRotateAbout(const Point3F& axis, double degree) {
- matrix_.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()),
- SkDoubleToMScalar(axis.y()),
- SkDoubleToMScalar(axis.z()),
- SkDoubleToMScalar(degree));
-}
-
-void Transform::SetScaleX(double x) {
- matrix_.setDouble(0, 0, x);
-}
-
-void Transform::SetScaleY(double y) {
- matrix_.setDouble(1, 1, y);
+void Transform::Rotate(double degree) {
+ if (matrix_.isIdentity()) {
+ matrix_.setRotateDegreesAbout(SkDoubleToMScalar(0),
+ SkDoubleToMScalar(0),
+ SkDoubleToMScalar(1),
+ SkDoubleToMScalar(degree));
+ } else {
+ SkMatrix44 rot;
+ rot.setRotateDegreesAbout(SkDoubleToMScalar(0),
+ SkDoubleToMScalar(0),
+ SkDoubleToMScalar(1),
+ SkDoubleToMScalar(degree));
+ matrix_.preConcat(rot);
+ }
}
-void Transform::SetScaleZ(double z) {
- matrix_.setDouble(2, 2, z);
+void Transform::RotateAbout(const Vector3dF& axis, double degree) {
+ if (matrix_.isIdentity()) {
+ matrix_.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()),
+ SkDoubleToMScalar(axis.y()),
+ SkDoubleToMScalar(axis.z()),
+ SkDoubleToMScalar(degree));
+ } else {
+ SkMatrix44 rot;
+ rot.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()),
+ SkDoubleToMScalar(axis.y()),
+ SkDoubleToMScalar(axis.z()),
+ SkDoubleToMScalar(degree));
+ matrix_.preConcat(rot);
+ }
}
-void Transform::SetScale(double x, double y) {
- matrix_.setScale(SkDoubleToMScalar(x),
+void Transform::Scale(double x, double y) {
+ if (matrix_.isIdentity()) {
+ matrix_.setScale(SkDoubleToMScalar(x),
+ SkDoubleToMScalar(y),
+ SkDoubleToMScalar(1));
+ } else {
+ SkMatrix44 scale;
+ scale.setScale(SkDoubleToMScalar(x),
SkDoubleToMScalar(y),
- matrix_.get(2, 2));
+ SkDoubleToMScalar(1));
+ matrix_.preConcat(scale);
+ }
}
-void Transform::SetScale3d(double x, double y, double z) {
- matrix_.setScale(SkDoubleToMScalar(x),
+void Transform::Scale3d(double x, double y, double z) {
+ if (matrix_.isIdentity()) {
+ matrix_.setScale(SkDoubleToMScalar(x),
+ SkDoubleToMScalar(y),
+ SkDoubleToMScalar(z));
+ } else {
+ SkMatrix44 scale;
+ scale.setScale(SkDoubleToMScalar(x),
SkDoubleToMScalar(y),
SkDoubleToMScalar(z));
+ matrix_.preConcat(scale);
+ }
}
-void Transform::SetTranslateX(double x) {
- matrix_.setDouble(0, 3, x);
-}
-
-void Transform::SetTranslateY(double y) {
- matrix_.setDouble(1, 3, y);
-}
-
-void Transform::SetTranslateZ(double z) {
- matrix_.setDouble(2, 3, z);
-}
-
-void Transform::SetTranslate(double x, double y) {
- matrix_.setTranslate(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- matrix_.get(2, 3));
-}
-
-void Transform::SetTranslate3d(double x, double y, double z) {
- matrix_.setTranslate(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- SkDoubleToMScalar(z));
-}
-
-void Transform::SetSkewX(double angle) {
- matrix_.setDouble(0, 1, TanDegrees(angle));
-}
-
-void Transform::SetSkewY(double angle) {
- matrix_.setDouble(1, 0, TanDegrees(angle));
-}
-
-void Transform::SetPerspectiveDepth(double depth) {
- if (depth == 0)
- return;
-
- SkMatrix44 m;
- m.setDouble(3, 2, -1.0 / depth);
- matrix_ = m;
-}
-
-void Transform::ConcatRotate(double degree) {
- SkMatrix44 rot;
- rot.setRotateDegreesAbout(SkDoubleToMScalar(0),
- SkDoubleToMScalar(0),
- SkDoubleToMScalar(1),
- SkDoubleToMScalar(degree));
- matrix_.postConcat(rot);
-}
-
-void Transform::ConcatRotateAbout(const Point3F& axis, double degree) {
- SkMatrix44 rot;
- rot.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()),
- SkDoubleToMScalar(axis.y()),
- SkDoubleToMScalar(axis.z()),
- SkDoubleToMScalar(degree));
- matrix_.postConcat(rot);
-}
-
-void Transform::ConcatScale(double x, double y) {
- SkMatrix44 scale;
- scale.setScale(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- SkDoubleToMScalar(1));
- matrix_.postConcat(scale);
-}
-
-void Transform::ConcatScale3d(double x, double y, double z) {
- SkMatrix44 scale;
- scale.setScale(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- SkDoubleToMScalar(z));
- matrix_.postConcat(scale);
-}
-
-void Transform::ConcatTranslate(double x, double y) {
- SkMatrix44 translate;
- translate.setTranslate(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- SkDoubleToMScalar(0));
- matrix_.postConcat(translate);
-}
-
-void Transform::ConcatTranslate3d(double x, double y, double z) {
- SkMatrix44 translate;
- translate.setTranslate(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- SkDoubleToMScalar(z));
- matrix_.postConcat(translate);
-}
-
-void Transform::ConcatSkewX(double angle_x) {
- Transform t;
- t.SetSkewX(angle_x);
- matrix_.postConcat(t.matrix_);
-}
-
-void Transform::ConcatSkewY(double angle_y) {
- Transform t;
- t.SetSkewY(angle_y);
- matrix_.postConcat(t.matrix_);
-}
-
-void Transform::ConcatPerspectiveDepth(double depth) {
- if (depth == 0)
- return;
-
- SkMatrix44 m;
- m.setDouble(3, 2, -1.0 / depth);
- matrix_.postConcat(m);
-}
-
-void Transform::PreconcatRotate(double degree) {
- SkMatrix44 rot;
- rot.setRotateDegreesAbout(SkDoubleToMScalar(0),
- SkDoubleToMScalar(0),
- SkDoubleToMScalar(1),
- SkDoubleToMScalar(degree));
- matrix_.preConcat(rot);
-}
-
-void Transform::PreconcatRotateAbout(const Point3F& axis, double degree) {
- SkMatrix44 rot;
- rot.setRotateDegreesAbout(SkDoubleToMScalar(axis.x()),
- SkDoubleToMScalar(axis.y()),
- SkDoubleToMScalar(axis.z()),
- SkDoubleToMScalar(degree));
- matrix_.preConcat(rot);
-}
-
-void Transform::PreconcatScale(double x, double y) {
- SkMatrix44 scale;
- scale.setScale(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- SkDoubleToMScalar(1));
- matrix_.preConcat(scale);
-}
-
-void Transform::PreconcatScale3d(double x, double y, double z) {
- SkMatrix44 scale;
- scale.setScale(SkDoubleToMScalar(x),
- SkDoubleToMScalar(y),
- SkDoubleToMScalar(z));
- matrix_.preConcat(scale);
-}
-
-void Transform::PreconcatTranslate(double x, double y) {
- SkMatrix44 translate;
- translate.setTranslate(SkDoubleToMScalar(x),
+void Transform::Translate(double x, double y) {
+ if (matrix_.isIdentity()) {
+ matrix_.setTranslate(SkDoubleToMScalar(x),
SkDoubleToMScalar(y),
SkDoubleToMScalar(0));
- matrix_.preConcat(translate);
+ } else {
+ SkMatrix44 translate;
+ translate.setTranslate(SkDoubleToMScalar(x),
+ SkDoubleToMScalar(y),
+ SkDoubleToMScalar(0));
+ matrix_.preConcat(translate);
+ }
}
-void Transform::PreconcatTranslate3d(double x, double y, double z) {
- SkMatrix44 translate;
- translate.setTranslate(SkDoubleToMScalar(x),
+void Transform::Translate3d(double x, double y, double z) {
+ if (matrix_.isIdentity()) {
+ matrix_.setTranslate(SkDoubleToMScalar(x),
SkDoubleToMScalar(y),
SkDoubleToMScalar(z));
- matrix_.preConcat(translate);
+ } else {
+ SkMatrix44 translate;
+ translate.setTranslate(SkDoubleToMScalar(x),
+ SkDoubleToMScalar(y),
+ SkDoubleToMScalar(z));
+ matrix_.preConcat(translate);
+ }
}
-void Transform::PreconcatSkewX(double angle_x) {
- Transform t;
- t.SetSkewX(angle_x);
- matrix_.preConcat(t.matrix_);
+void Transform::SkewX(double angle_x) {
+ if (matrix_.isIdentity())
+ matrix_.setDouble(0, 1, TanDegrees(angle_x));
+ else {
+ SkMatrix44 skew;
+ skew.setDouble(0, 1, TanDegrees(angle_x));
+ matrix_.preConcat(skew);
+ }
}
-void Transform::PreconcatSkewY(double angle_y) {
- Transform t;
- t.SetSkewY(angle_y);
- matrix_.preConcat(t.matrix_);
+void Transform::SkewY(double angle_y) {
+ if (matrix_.isIdentity())
+ matrix_.setDouble(1, 0, TanDegrees(angle_y));
+ else {
+ SkMatrix44 skew;
+ skew.setDouble(1, 0, TanDegrees(angle_y));
+ matrix_.preConcat(skew);
+ }
}
-void Transform::PreconcatPerspectiveDepth(double depth) {
+void Transform::ApplyPerspectiveDepth(double depth) {
if (depth == 0)
- return;
-
- SkMatrix44 m;
- m.setDouble(3, 2, -1.0 / depth);
- matrix_.preConcat(m);
+ return;
+ if (matrix_.isIdentity())
+ matrix_.setDouble(3, 2, -1.0 / depth);
+ else {
+ SkMatrix44 m;
+ m.setDouble(3, 2, -1.0 / depth);
+ matrix_.preConcat(m);
+ }
}
void Transform::PreconcatTransform(const Transform& transform) {
@@ -362,6 +265,17 @@ bool Transform::Blend(const Transform& from, double progress) {
return true;
}
+Transform Transform::operator*(const Transform& other) const {
+ Transform to_return;
+ to_return.matrix_.setConcat(matrix_, other.matrix_);
+ return to_return;
+}
+
+Transform& Transform::operator*=(const Transform& other) {
+ matrix_.preConcat(other.matrix_);
+ return *this;
+}
+
void Transform::TransformPointInternal(const SkMatrix44& xform,
Point3F& point) const {
SkMScalar p[4] = {
« 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