Index: remoting/client/desktop_viewport_unittest.cc |
diff --git a/remoting/client/desktop_viewport_unittest.cc b/remoting/client/desktop_viewport_unittest.cc |
index 8e12230233e591171c310d9e0941e4b2ba06966e..2c1999849ef96ede56e6b4e46ff9e036c6a20065 100644 |
--- a/remoting/client/desktop_viewport_unittest.cc |
+++ b/remoting/client/desktop_viewport_unittest.cc |
@@ -28,6 +28,8 @@ class DesktopViewportTest : public testing::Test { |
float offset_x, |
float offset_y); |
+ ViewMatrix ReleaseReceivedTransformation(); |
+ |
DesktopViewport viewport_; |
private: |
@@ -74,6 +76,13 @@ void DesktopViewportTest::AssertTransformationReceived( |
received_transformation_ = ViewMatrix(); |
} |
+ViewMatrix DesktopViewportTest::ReleaseReceivedTransformation() { |
+ EXPECT_FALSE(received_transformation_.IsEmpty()); |
+ ViewMatrix out = received_transformation_; |
+ received_transformation_ = ViewMatrix(); |
+ return out; |
+} |
+ |
void DesktopViewportTest::OnTransformationChanged(const ViewMatrix& matrix) { |
ASSERT_TRUE(received_transformation_.IsEmpty()) |
<< "Previous matrix has not been asserted."; |
@@ -251,4 +260,36 @@ TEST_F(DesktopViewportTest, TestSetViewportCenter) { |
AssertTransformationReceived(FROM_HERE, 1.25f, -8.f, -4.5f); |
} |
+TEST_F(DesktopViewportTest, TestScaleDesktop) { |
+ // Number in surface coordinate. |
+ // |
+ // +====+------+ |
+ // | VP | DP | |
+ // | | | 3 |
+ // +====+------+ |
+ // 4 |
+ viewport_.SetDesktopSize(8, 6); |
+ viewport_.SetSurfaceSize(2, 3); |
+ AssertTransformationReceived(FROM_HERE, 0.5f, 0.f, 0.f); |
+ |
+ ViewMatrix old_transformation(0.5f, {0.f, 0.f}); |
+ |
+ ViewMatrix::Point surface_point = old_transformation.MapPoint({1.2f, 1.3f}); |
+ |
+ // Scale a little bit at a pivot point. |
+ viewport_.ScaleDesktop(surface_point.x, surface_point.y, 1.1f); |
+ |
+ ViewMatrix new_transformation = ReleaseReceivedTransformation(); |
+ |
+ // Verify the pivot point is fixed. |
+ ViewMatrix::Point new_surface_point = |
+ new_transformation.MapPoint({1.2f, 1.3f}); |
+ ASSERT_FLOAT_EQ(surface_point.x, new_surface_point.x); |
+ ASSERT_FLOAT_EQ(surface_point.y, new_surface_point.y); |
+ |
+ // Verify the scale is correct. |
+ ASSERT_FLOAT_EQ(old_transformation.GetScale() * 1.1f, |
+ new_transformation.GetScale()); |
+} |
+ |
} // namespace remoting |