summaryrefslogtreecommitdiff
path: root/core/fxcrt/fx_coordinates_unittest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxcrt/fx_coordinates_unittest.cpp')
-rw-r--r--core/fxcrt/fx_coordinates_unittest.cpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/core/fxcrt/fx_coordinates_unittest.cpp b/core/fxcrt/fx_coordinates_unittest.cpp
index 3368a40e18..6fec10ecac 100644
--- a/core/fxcrt/fx_coordinates_unittest.cpp
+++ b/core/fxcrt/fx_coordinates_unittest.cpp
@@ -289,3 +289,67 @@ TEST(CFX_Matrix, ReverseCR714187) {
EXPECT_FLOAT_EQ(expected.x, result.x);
EXPECT_FLOAT_EQ(expected.y, result.y);
}
+
+TEST(CFX_Matrix, RotateAt) {
+ CFX_Matrix m;
+ m.RotateAt(FX_PI, 10, 20);
+
+ // 180 degree rotation
+ CFX_PointF p(27, 19);
+ CFX_PointF new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(-7, new_p.x);
+ EXPECT_FLOAT_EQ(21, new_p.y);
+
+ p = CFX_PointF(10, 20);
+ new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(10, new_p.x);
+ EXPECT_FLOAT_EQ(20, new_p.y);
+
+ p = CFX_PointF(0, 0);
+ new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(20, new_p.x);
+ EXPECT_FLOAT_EQ(40, new_p.y);
+
+ // 90 degree rotation
+ m.SetIdentity();
+ m.RotateAt(FX_PI / 2, 10, 20);
+
+ p = CFX_PointF(6, 17);
+ new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(13, new_p.x);
+ EXPECT_FLOAT_EQ(16, new_p.y);
+
+ p = CFX_PointF(10, 20);
+ new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(10, new_p.x);
+ EXPECT_FLOAT_EQ(20, new_p.y);
+
+ p = CFX_PointF(0, 0);
+ new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(30, new_p.x);
+ EXPECT_FLOAT_EQ(10, new_p.y);
+
+ // 60 degree rotation
+ m.SetIdentity();
+ m.RotateAt(FX_PI / 3, 10, 20);
+
+ p = CFX_PointF(20, 20);
+ new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(15, new_p.x);
+ EXPECT_FLOAT_EQ(28.660254f, new_p.y);
+
+ p = CFX_PointF(10, 20);
+ new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(10, new_p.x);
+ EXPECT_FLOAT_EQ(20, new_p.y);
+
+ p = CFX_PointF(0, 0);
+ new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(22.320509f, new_p.x);
+ EXPECT_FLOAT_EQ(1.3397465f, new_p.y);
+
+ p = CFX_PointF(10, -80);
+ new_p = m.Transform(p);
+ EXPECT_FLOAT_EQ(96.602540f, new_p.x);
+ EXPECT_FLOAT_EQ(-30, new_p.y);
+}