| Index: ui/gfx/transform_util_unittest.cc
|
| diff --git a/ui/gfx/transform_util_unittest.cc b/ui/gfx/transform_util_unittest.cc
|
| index 94195c29bb92f90641e8eecdfb87ae3bcb966b27..41bfc40783a805caa8ce78fc0cd36b29c034b7b1 100644
|
| --- a/ui/gfx/transform_util_unittest.cc
|
| +++ b/ui/gfx/transform_util_unittest.cc
|
| @@ -6,6 +6,8 @@
|
|
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "ui/gfx/point.h"
|
| +#include "ui/gfx/point3_f.h"
|
| +#include "ui/gfx/rect.h"
|
|
|
| namespace gfx {
|
| namespace {
|
| @@ -30,5 +32,149 @@ TEST(TransformUtilTest, GetScaleTransform) {
|
| }
|
| }
|
|
|
| +TEST(TransformUtilTest, SnapRotation) {
|
| + Transform result(Transform::kSkipInitialization);
|
| + Transform transform;
|
| + transform.RotateAboutZAxis(89.99);
|
| +
|
| + Rect viewport(1920, 1200);
|
| + bool snapped = SnapTransform(&result, transform, viewport);
|
| +
|
| + EXPECT_TRUE(snapped) << "Viewport should snap for this rotation.";
|
| +}
|
| +
|
| +TEST(TransformUtilTest, SnapRotationDistantViewport) {
|
| + const int kOffset = 5000;
|
| + Transform result(Transform::kSkipInitialization);
|
| + Transform transform;
|
| +
|
| + transform.RotateAboutZAxis(89.99);
|
| +
|
| + Rect viewport(kOffset, kOffset, 1920, 1200);
|
| + bool snapped = SnapTransform(&result, transform, viewport);
|
| +
|
| + EXPECT_FALSE(snapped) << "Distant viewport shouldn't snap by more than 1px.";
|
| +}
|
| +
|
| +TEST(TransformUtilTest, NoSnapRotation) {
|
| + Transform result(Transform::kSkipInitialization);
|
| + Transform transform;
|
| + const int kOffset = 5000;
|
| +
|
| + transform.RotateAboutZAxis(89.9);
|
| +
|
| + Rect viewport(kOffset, kOffset, 1920, 1200);
|
| + bool snapped = SnapTransform(&result, transform, viewport);
|
| +
|
| + EXPECT_FALSE(snapped) << "Viewport should not snap for this rotation.";
|
| +}
|
| +
|
| +// Translations should always be snappable, the most we would move is 0.5
|
| +// pixels towards either direction to the nearest value in each component.
|
| +TEST(TransformUtilTest, SnapTranslation) {
|
| + Transform result(Transform::kSkipInitialization);
|
| + Transform transform;
|
| +
|
| + transform.Translate3d(
|
| + SkDoubleToMScalar(1.01), SkDoubleToMScalar(1.99), SkDoubleToMScalar(3.0));
|
| +
|
| + Rect viewport(1920, 1200);
|
| + bool snapped = SnapTransform(&result, transform, viewport);
|
| +
|
| + EXPECT_TRUE(snapped) << "Viewport should snap for this translation.";
|
| +}
|
| +
|
| +TEST(TransformUtilTest, SnapTranslationDistantViewport) {
|
| + Transform result(Transform::kSkipInitialization);
|
| + Transform transform;
|
| + const int kOffset = 5000;
|
| +
|
| + transform.Translate3d(
|
| + SkDoubleToMScalar(1.01), SkDoubleToMScalar(1.99), SkDoubleToMScalar(3.0));
|
| +
|
| + Rect viewport(kOffset, kOffset, 1920, 1200);
|
| + bool snapped = SnapTransform(&result, transform, viewport);
|
| +
|
| + EXPECT_TRUE(snapped)
|
| + << "Distant viewport should still snap by less than 1px.";
|
| +}
|
| +
|
| +TEST(TransformUtilTest, SnapScale) {
|
| + Transform result(Transform::kSkipInitialization);
|
| + Transform transform;
|
| +
|
| + transform.Scale3d(SkDoubleToMScalar(5.0),
|
| + SkDoubleToMScalar(2.00001),
|
| + SkDoubleToMScalar(1.0));
|
| + Rect viewport(1920, 1200);
|
| + bool snapped = SnapTransform(&result, transform, viewport);
|
| +
|
| + EXPECT_TRUE(snapped) << "Viewport should snap for this scaling.";
|
| +}
|
| +
|
| +TEST(TransformUtilTest, NoSnapScale) {
|
| + Transform result(Transform::kSkipInitialization);
|
| + Transform transform;
|
| +
|
| + transform.Scale3d(
|
| + SkDoubleToMScalar(5.0), SkDoubleToMScalar(2.1), SkDoubleToMScalar(1.0));
|
| + Rect viewport(1920, 1200);
|
| + bool snapped = SnapTransform(&result, transform, viewport);
|
| +
|
| + EXPECT_FALSE(snapped) << "Viewport shouldn't snap for this scaling.";
|
| +}
|
| +
|
| +TEST(TransformUtilTest, SnapCompositeTransform) {
|
| + Transform result(Transform::kSkipInitialization);
|
| + Transform transform;
|
| +
|
| + transform.Translate3d(SkDoubleToMScalar(30.5), SkDoubleToMScalar(20.0),
|
| + SkDoubleToMScalar(10.1));
|
| + transform.RotateAboutZAxis(89.99);
|
| + transform.Scale3d(SkDoubleToMScalar(1.0),
|
| + SkDoubleToMScalar(3.00001),
|
| + SkDoubleToMScalar(2.0));
|
| +
|
| + Rect viewport(1920, 1200);
|
| + bool snapped = SnapTransform(&result, transform, viewport);
|
| + ASSERT_TRUE(snapped) << "Viewport should snap all components.";
|
| +
|
| + Point3F point;
|
| +
|
| + point = Point3F(viewport.origin());
|
| + result.TransformPoint(&point);
|
| + EXPECT_EQ(Point3F(31.f, 20.f, 10.f), point) << "Transformed origin";
|
| +
|
| + point = Point3F(viewport.top_right());
|
| + result.TransformPoint(&point);
|
| + EXPECT_EQ(Point3F(31.f, 1940.f, 10.f), point) << "Transformed top-right";
|
| +
|
| + point = Point3F(viewport.bottom_left());
|
| + result.TransformPoint(&point);
|
| + EXPECT_EQ(Point3F(-3569.f, 20.f, 10.f), point) << "Transformed bottom-left";
|
| +
|
| + point = Point3F(viewport.bottom_right());
|
| + result.TransformPoint(&point);
|
| + EXPECT_EQ(Point3F(-3569.f, 1940.f, 10.f), point)
|
| + << "Transformed bottom-right";
|
| +}
|
| +
|
| +TEST(TransformUtilTest, NoSnapSkewedCompositeTransform) {
|
| + Transform result(Transform::kSkipInitialization);
|
| + Transform transform;
|
| +
|
| +
|
| + transform.RotateAboutZAxis(89.99);
|
| + transform.Scale3d(SkDoubleToMScalar(1.0),
|
| + SkDoubleToMScalar(3.00001),
|
| + SkDoubleToMScalar(2.0));
|
| + transform.Translate3d(SkDoubleToMScalar(30.5), SkDoubleToMScalar(20.0),
|
| + SkDoubleToMScalar(10.1));
|
| + transform.SkewX(20.0);
|
| + Rect viewport(1920, 1200);
|
| + bool snapped = SnapTransform(&result, transform, viewport);
|
| + EXPECT_FALSE(snapped) << "Skewed viewport should not snap.";
|
| +}
|
| +
|
| } // namespace
|
| } // namespace gfx
|
|
|