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

Unified Diff: ui/gfx/interpolated_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/interpolated_transform.h ('k') | ui/gfx/interpolated_transform_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/interpolated_transform.cc
diff --git a/ui/gfx/interpolated_transform.cc b/ui/gfx/interpolated_transform.cc
index 111f6217962bedb3e1cbb4319358b645d7a4bc5d..583c27f05b9988a7d011ddd7d67496fd1e5df126 100644
--- a/ui/gfx/interpolated_transform.cc
+++ b/ui/gfx/interpolated_transform.cc
@@ -104,62 +104,6 @@ void InterpolatedTransform::SetChild(InterpolatedTransform* child) {
child_.reset(child);
}
-bool InterpolatedTransform::FactorTRS(const gfx::Transform& transform,
- gfx::Point* translation,
- float* rotation,
- gfx::Point3F* scale) {
- const SkMatrix44& m = transform.matrix();
- double m00 = SkMScalarToDouble(m.get(0, 0));
- double m01 = SkMScalarToDouble(m.get(0, 1));
- double m10 = SkMScalarToDouble(m.get(1, 0));
- double m11 = SkMScalarToDouble(m.get(1, 1));
-
- // A factorable 2D TRS matrix must be of the form:
- // [ sx*cos_theta -(sy*sin_theta) 0 tx ]
- // [ sx*sin_theta sy*cos_theta 0 ty ]
- // [ 0 0 1 0 ]
- // [ 0 0 0 1 ]
- if (!IsApproximatelyZero(SkMScalarToDouble(m.get(0, 2))) ||
- !IsApproximatelyZero(SkMScalarToDouble(m.get(1, 2))) ||
- !IsApproximatelyZero(SkMScalarToDouble(m.get(2, 0))) ||
- !IsApproximatelyZero(SkMScalarToDouble(m.get(2, 1))) ||
- !IsApproximatelyZero(SkMScalarToDouble(m.get(2, 2)) - 1) ||
- !IsApproximatelyZero(SkMScalarToDouble(m.get(2, 3))) ||
- !IsApproximatelyZero(SkMScalarToDouble(m.get(3, 0))) ||
- !IsApproximatelyZero(SkMScalarToDouble(m.get(3, 1))) ||
- !IsApproximatelyZero(SkMScalarToDouble(m.get(3, 2))) ||
- !IsApproximatelyZero(SkMScalarToDouble(m.get(3, 3)) - 1)) {
- return false;
- }
-
- double scale_x = std::sqrt(m00 * m00 + m10 * m10);
- double scale_y = std::sqrt(m01 * m01 + m11 * m11);
-
- if (scale_x == 0 || scale_y == 0)
- return false;
-
- double cos_theta = m00 / scale_x;
- double sin_theta = m10 / scale_x;
-
- if (!IsApproximatelyZero(cos_theta - (m11 / scale_y)) ||
- !IsApproximatelyZero(sin_theta + (m01 / scale_y)) ||
- !IsApproximatelyZero(cos_theta*cos_theta + sin_theta*sin_theta - 1.0f))
- return false;
-
- double radians = std::atan2(sin_theta, cos_theta);
-
- if (translation)
- *translation = gfx::Point(SkMScalarToFloat(m.get(0, 3)),
- SkMScalarToFloat(m.get(1, 3)));
- if (rotation)
- *rotation = static_cast<float>(radians * 180.0 / M_PI);
- if (scale)
- *scale = gfx::Point3F(static_cast<float>(scale_x),
- static_cast<float>(scale_y),
- 1.0f);
- return true;
-}
-
inline float InterpolatedTransform::ValueBetween(float time,
float start_value,
float end_value) const {
@@ -209,7 +153,7 @@ InterpolatedRotation::~InterpolatedRotation() {}
gfx::Transform InterpolatedRotation::InterpolateButDoNotCompose(float t) const {
gfx::Transform result;
float interpolated_degrees = ValueBetween(t, start_degrees_, end_degrees_);
- result.SetRotate(interpolated_degrees);
+ result.Rotate(interpolated_degrees);
if (t == 0.0f || t == 1.0f)
MassageRotationIfMultipleOfNinetyDegrees(&result, interpolated_degrees);
return result;
@@ -220,7 +164,7 @@ gfx::Transform InterpolatedRotation::InterpolateButDoNotCompose(float t) const {
//
InterpolatedAxisAngleRotation::InterpolatedAxisAngleRotation(
- gfx::Point3F axis,
+ const gfx::Vector3dF& axis,
float start_degrees,
float end_degrees)
: InterpolatedTransform(),
@@ -230,7 +174,7 @@ InterpolatedAxisAngleRotation::InterpolatedAxisAngleRotation(
}
InterpolatedAxisAngleRotation::InterpolatedAxisAngleRotation(
- gfx::Point3F axis,
+ const gfx::Vector3dF& axis,
float start_degrees,
float end_degrees,
float start_time,
@@ -246,7 +190,7 @@ InterpolatedAxisAngleRotation::~InterpolatedAxisAngleRotation() {}
gfx::Transform
InterpolatedAxisAngleRotation::InterpolateButDoNotCompose(float t) const {
gfx::Transform result;
- result.SetRotateAbout(axis_, ValueBetween(t, start_degrees_, end_degrees_));
+ result.RotateAbout(axis_, ValueBetween(t, start_degrees_, end_degrees_));
return result;
}
@@ -290,7 +234,7 @@ gfx::Transform InterpolatedScale::InterpolateButDoNotCompose(float t) const {
float scale_x = ValueBetween(t, start_scale_.x(), end_scale_.x());
float scale_y = ValueBetween(t, start_scale_.y(), end_scale_.y());
// TODO(vollick) 3d xforms.
- result.SetScale(scale_x, scale_y);
+ result.Scale(scale_x, scale_y);
return result;
}
@@ -320,7 +264,7 @@ gfx::Transform
InterpolatedTranslation::InterpolateButDoNotCompose(float t) const {
gfx::Transform result;
// TODO(vollick) 3d xforms.
- result.SetTranslate(ValueBetween(t, start_pos_.x(), end_pos_.x()),
+ result.Translate(ValueBetween(t, start_pos_.x(), end_pos_.x()),
ValueBetween(t, start_pos_.y(), end_pos_.y()));
return result;
}
@@ -376,8 +320,8 @@ void InterpolatedTransformAboutPivot::Init(const gfx::Point& pivot,
InterpolatedTransform* xform) {
gfx::Transform to_pivot;
gfx::Transform from_pivot;
- to_pivot.SetTranslate(-pivot.x(), -pivot.y());
- from_pivot.SetTranslate(pivot.x(), pivot.y());
+ to_pivot.Translate(-pivot.x(), -pivot.y());
+ from_pivot.Translate(pivot.x(), pivot.y());
scoped_ptr<InterpolatedTransform> pre_transform(
new InterpolatedConstantTransform(to_pivot));
@@ -389,14 +333,14 @@ void InterpolatedTransformAboutPivot::Init(const gfx::Point& pivot,
transform_.reset(pre_transform.release());
}
-InterpolatedTRSTransform::InterpolatedTRSTransform(
+InterpolatedMatrixTransform::InterpolatedMatrixTransform(
const gfx::Transform& start_transform,
const gfx::Transform& end_transform)
: InterpolatedTransform() {
Init(start_transform, end_transform);
}
-InterpolatedTRSTransform::InterpolatedTRSTransform(
+InterpolatedMatrixTransform::InterpolatedMatrixTransform(
const gfx::Transform& start_transform,
const gfx::Transform& end_transform,
float start_time,
@@ -405,47 +349,25 @@ InterpolatedTRSTransform::InterpolatedTRSTransform(
Init(start_transform, end_transform);
}
-InterpolatedTRSTransform::~InterpolatedTRSTransform() {}
+InterpolatedMatrixTransform::~InterpolatedMatrixTransform() {}
gfx::Transform
-InterpolatedTRSTransform::InterpolateButDoNotCompose(float t) const {
- if (transform_.get()) {
- return transform_->Interpolate(t);
- }
- return gfx::Transform();
-}
-
-void InterpolatedTRSTransform::Init(const gfx::Transform& start_transform,
- const gfx::Transform& end_transform) {
- gfx::Point start_translation, end_translation;
- gfx::Point3F start_scale, end_scale;
- float start_degrees, end_degrees;
- if (FactorTRS(start_transform,
- &start_translation,
- &start_degrees,
- &start_scale) &&
- FactorTRS(end_transform,
- &end_translation,
- &end_degrees,
- &end_scale)) {
- scoped_ptr<InterpolatedTranslation> translation(
- new InterpolatedTranslation(start_translation, end_translation,
- start_time(), end_time()));
-
- scoped_ptr<InterpolatedScale> scale(
- new InterpolatedScale(start_scale, end_scale,
- start_time(), end_time()));
-
- scoped_ptr<InterpolatedRotation> rotation(
- new InterpolatedRotation(start_degrees, end_degrees,
- start_time(), end_time()));
-
- rotation->SetChild(translation.release());
- scale->SetChild(rotation.release());
- transform_.reset(scale.release());
- } else {
- transform_.reset(new InterpolatedConstantTransform(end_transform));
- }
+InterpolatedMatrixTransform::InterpolateButDoNotCompose(float t) const {
+ gfx::DecomposedTransform blended;
+ bool success = gfx::BlendDecomposedTransforms(&blended,
+ end_decomp_,
+ start_decomp_,
+ t);
+ DCHECK(success);
+ return gfx::ComposeTransform(blended);
+}
+
+void InterpolatedMatrixTransform::Init(const gfx::Transform& start_transform,
+ const gfx::Transform& end_transform) {
+ bool success = gfx::DecomposeTransform(&start_decomp_, start_transform);
+ DCHECK(success);
+ success = gfx::DecomposeTransform(&end_decomp_, end_transform);
+ DCHECK(success);
}
} // namespace ui
« no previous file with comments | « ui/gfx/interpolated_transform.h ('k') | ui/gfx/interpolated_transform_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698