summaryrefslogtreecommitdiffstats
path: root/ui/gfx/interpolated_transform_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ui/gfx/interpolated_transform_unittest.cc')
-rw-r--r--ui/gfx/interpolated_transform_unittest.cc42
1 files changed, 39 insertions, 3 deletions
diff --git a/ui/gfx/interpolated_transform_unittest.cc b/ui/gfx/interpolated_transform_unittest.cc
index fa5debc..6c5627e 100644
--- a/ui/gfx/interpolated_transform_unittest.cc
+++ b/ui/gfx/interpolated_transform_unittest.cc
@@ -18,6 +18,16 @@ void CheckApproximatelyEqual(const ui::Transform& lhs,
}
}
+float NormalizeAngle(float angle) {
+ while (angle < 0.0f) {
+ angle += 360.0f;
+ }
+ while (angle > 360.0f) {
+ angle -= 360.0f;
+ }
+ return angle;
+}
+
} // namespace
TEST(InterpolatedTransformTest, InterpolatedRotation) {
@@ -36,9 +46,10 @@ TEST(InterpolatedTransformTest, InterpolatedRotation) {
}
TEST(InterpolatedTransformTest, InterpolatedScale) {
- ui::InterpolatedScale interpolated_scale(0, 100);
+ ui::InterpolatedScale interpolated_scale(gfx::Point3f(0, 0, 0),
+ gfx::Point3f(100, 100, 100));
ui::InterpolatedScale interpolated_scale_diff_start_end(
- 0, 100, 100, 200);
+ gfx::Point3f(0, 0, 0), gfx::Point3f(100, 100, 100), 100, 200);
for (int i = 0; i <= 100; ++i) {
ui::Transform scale;
@@ -90,7 +101,7 @@ TEST(InterpolatedTransformTest, InterpolatedScaleAboutPivot) {
gfx::Point above_pivot(100, 200);
ui::InterpolatedTransformAboutPivot interpolated_xform(
pivot,
- new ui::InterpolatedScale(1, 2));
+ new ui::InterpolatedScale(gfx::Point3f(1, 1, 1), gfx::Point3f(2, 2, 2)));
ui::Transform result = interpolated_xform.Interpolate(0.0f);
CheckApproximatelyEqual(ui::Transform(), result);
result = interpolated_xform.Interpolate(1.0f);
@@ -101,3 +112,28 @@ TEST(InterpolatedTransformTest, InterpolatedScaleAboutPivot) {
result.TransformPoint(above_pivot);
EXPECT_EQ(expected_result, above_pivot);
}
+
+TEST(InterpolatedTransformTest, FactorTRS) {
+ for (int degrees = 0; degrees < 360; ++degrees) {
+ // build a transformation matrix.
+ ui::Transform transform;
+ transform.SetScale(degrees + 1, 2 * degrees + 1);
+ transform.ConcatRotate(degrees);
+ transform.ConcatTranslate(degrees * 2, -degrees * 3);
+
+ // factor the matrix
+ gfx::Point translation;
+ float rotation;
+ gfx::Point3f scale;
+ bool success = ui::InterpolatedTransform::FactorTRS(transform,
+ &translation,
+ &rotation,
+ &scale);
+ EXPECT_TRUE(success);
+ EXPECT_FLOAT_EQ(translation.x(), degrees * 2);
+ EXPECT_FLOAT_EQ(translation.y(), -degrees * 3);
+ EXPECT_FLOAT_EQ(NormalizeAngle(rotation), degrees);
+ EXPECT_FLOAT_EQ(scale.x(), degrees + 1);
+ EXPECT_FLOAT_EQ(scale.y(), 2 * degrees + 1);
+ }
+}