OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/interpolated_transform.h" | 5 #include "ui/gfx/interpolated_transform.h" |
6 | 6 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 #include "ui/gfx/geometry/rect.h" | 8 #include "ui/gfx/geometry/rect.h" |
9 | 9 |
10 namespace { | 10 namespace { |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 break; | 133 break; |
134 case -90: | 134 case -90: |
135 new_pivot = gfx::Point(0, height); | 135 new_pivot = gfx::Point(0, height); |
136 break; | 136 break; |
137 case 180: | 137 case 180: |
138 case 360: | 138 case 360: |
139 new_pivot = old_pivot = gfx::Point(width / 2, height / 2); | 139 new_pivot = old_pivot = gfx::Point(width / 2, height / 2); |
140 break; | 140 break; |
141 } | 141 } |
142 | 142 |
143 scoped_ptr<ui::InterpolatedTransform> rotation( | 143 std::unique_ptr<ui::InterpolatedTransform> rotation( |
144 new ui::InterpolatedTransformAboutPivot( | 144 new ui::InterpolatedTransformAboutPivot( |
145 old_pivot, | 145 old_pivot, new ui::InterpolatedRotation(reversed ? degrees : 0, |
146 new ui::InterpolatedRotation(reversed ? degrees : 0, | 146 reversed ? 0 : degrees))); |
147 reversed ? 0 : degrees))); | |
148 | 147 |
149 scoped_ptr<ui::InterpolatedTransform> translation( | 148 std::unique_ptr<ui::InterpolatedTransform> translation( |
150 new ui::InterpolatedTranslation( | 149 new ui::InterpolatedTranslation( |
151 gfx::PointF(), gfx::PointF(new_pivot.x() - old_pivot.x(), | 150 gfx::PointF(), gfx::PointF(new_pivot.x() - old_pivot.x(), |
152 new_pivot.y() - old_pivot.y()))); | 151 new_pivot.y() - old_pivot.y()))); |
153 | 152 |
154 float scale_factor = 0.9f; | 153 float scale_factor = 0.9f; |
155 scoped_ptr<ui::InterpolatedTransform> scale_down( | 154 std::unique_ptr<ui::InterpolatedTransform> scale_down( |
156 new ui::InterpolatedScale(1.0f, scale_factor, 0.0f, 0.5f)); | 155 new ui::InterpolatedScale(1.0f, scale_factor, 0.0f, 0.5f)); |
157 | 156 |
158 scoped_ptr<ui::InterpolatedTransform> scale_up( | 157 std::unique_ptr<ui::InterpolatedTransform> scale_up( |
159 new ui::InterpolatedScale(1.0f, 1.0f / scale_factor, 0.5f, 1.0f)); | 158 new ui::InterpolatedScale(1.0f, 1.0f / scale_factor, 0.5f, 1.0f)); |
160 | 159 |
161 scoped_ptr<ui::InterpolatedTransform> to_return( | 160 std::unique_ptr<ui::InterpolatedTransform> to_return( |
162 new ui::InterpolatedConstantTransform(gfx::Transform())); | 161 new ui::InterpolatedConstantTransform(gfx::Transform())); |
163 | 162 |
164 scale_up->SetChild(scale_down.release()); | 163 scale_up->SetChild(scale_down.release()); |
165 translation->SetChild(scale_up.release()); | 164 translation->SetChild(scale_up.release()); |
166 rotation->SetChild(translation.release()); | 165 rotation->SetChild(translation.release()); |
167 to_return->SetChild(rotation.release()); | 166 to_return->SetChild(rotation.release()); |
168 to_return->SetReversed(reversed); | 167 to_return->SetReversed(reversed); |
169 | 168 |
170 return to_return.release(); | 169 return to_return.release(); |
171 } | 170 } |
172 | 171 |
173 TEST(InterpolatedTransformTest, ScreenRotationEndsCleanly) { | 172 TEST(InterpolatedTransformTest, ScreenRotationEndsCleanly) { |
174 for (int i = 0; i < 2; ++i) { | 173 for (int i = 0; i < 2; ++i) { |
175 for (int degrees = -360; degrees <= 360; degrees += 90) { | 174 for (int degrees = -360; degrees <= 360; degrees += 90) { |
176 const bool reversed = i == 1; | 175 const bool reversed = i == 1; |
177 scoped_ptr<ui::InterpolatedTransform> screen_rotation( | 176 std::unique_ptr<ui::InterpolatedTransform> screen_rotation( |
178 GetScreenRotation(degrees, reversed)); | 177 GetScreenRotation(degrees, reversed)); |
179 gfx::Transform interpolated = screen_rotation->Interpolate(1.0f); | 178 gfx::Transform interpolated = screen_rotation->Interpolate(1.0f); |
180 SkMatrix44& m = interpolated.matrix(); | 179 SkMatrix44& m = interpolated.matrix(); |
181 // Upper-left 3x3 matrix should all be 0, 1 or -1. | 180 // Upper-left 3x3 matrix should all be 0, 1 or -1. |
182 for (int row = 0; row < 3; ++row) { | 181 for (int row = 0; row < 3; ++row) { |
183 for (int col = 0; col < 3; ++col) { | 182 for (int col = 0; col < 3; ++col) { |
184 float entry = m.get(row, col); | 183 float entry = m.get(row, col); |
185 EXPECT_TRUE(entry == 0 || entry == 1 || entry == -1); | 184 EXPECT_TRUE(entry == 0 || entry == 1 || entry == -1); |
186 } | 185 } |
187 } | 186 } |
188 } | 187 } |
189 } | 188 } |
190 } | 189 } |
191 | 190 |
192 ui::InterpolatedTransform* GetMaximize() { | 191 ui::InterpolatedTransform* GetMaximize() { |
193 gfx::Rect target_bounds(0, 0, 1920, 1080); | 192 gfx::Rect target_bounds(0, 0, 1920, 1080); |
194 gfx::Rect initial_bounds(30, 1000, 192, 108); | 193 gfx::Rect initial_bounds(30, 1000, 192, 108); |
195 | 194 |
196 float scale_x = static_cast<float>( | 195 float scale_x = static_cast<float>( |
197 target_bounds.height()) / initial_bounds.width(); | 196 target_bounds.height()) / initial_bounds.width(); |
198 float scale_y = static_cast<float>( | 197 float scale_y = static_cast<float>( |
199 target_bounds.width()) / initial_bounds.height(); | 198 target_bounds.width()) / initial_bounds.height(); |
200 | 199 |
201 scoped_ptr<ui::InterpolatedTransform> scale( | 200 std::unique_ptr<ui::InterpolatedTransform> scale(new ui::InterpolatedScale( |
202 new ui::InterpolatedScale(gfx::Point3F(1, 1, 1), | 201 gfx::Point3F(1, 1, 1), gfx::Point3F(scale_x, scale_y, 1))); |
203 gfx::Point3F(scale_x, scale_y, 1))); | |
204 | 202 |
205 scoped_ptr<ui::InterpolatedTransform> translation( | 203 std::unique_ptr<ui::InterpolatedTransform> translation( |
206 new ui::InterpolatedTranslation( | 204 new ui::InterpolatedTranslation( |
207 gfx::PointF(), gfx::PointF(target_bounds.x() - initial_bounds.x(), | 205 gfx::PointF(), gfx::PointF(target_bounds.x() - initial_bounds.x(), |
208 target_bounds.y() - initial_bounds.y()))); | 206 target_bounds.y() - initial_bounds.y()))); |
209 | 207 |
210 scoped_ptr<ui::InterpolatedTransform> rotation( | 208 std::unique_ptr<ui::InterpolatedTransform> rotation( |
211 new ui::InterpolatedRotation(0, 4.0f)); | 209 new ui::InterpolatedRotation(0, 4.0f)); |
212 | 210 |
213 scoped_ptr<ui::InterpolatedTransform> rotation_about_pivot( | 211 std::unique_ptr<ui::InterpolatedTransform> rotation_about_pivot( |
214 new ui::InterpolatedTransformAboutPivot( | 212 new ui::InterpolatedTransformAboutPivot( |
215 gfx::Point(initial_bounds.width() * 0.5, | 213 gfx::Point(initial_bounds.width() * 0.5, |
216 initial_bounds.height() * 0.5), | 214 initial_bounds.height() * 0.5), |
217 rotation.release())); | 215 rotation.release())); |
218 | 216 |
219 scale->SetChild(translation.release()); | 217 scale->SetChild(translation.release()); |
220 rotation_about_pivot->SetChild(scale.release()); | 218 rotation_about_pivot->SetChild(scale.release()); |
221 | 219 |
222 rotation_about_pivot->SetReversed(true); | 220 rotation_about_pivot->SetReversed(true); |
223 | 221 |
224 return rotation_about_pivot.release(); | 222 return rotation_about_pivot.release(); |
225 } | 223 } |
226 | 224 |
227 TEST(InterpolatedTransformTest, MaximizeEndsCleanly) { | 225 TEST(InterpolatedTransformTest, MaximizeEndsCleanly) { |
228 scoped_ptr<ui::InterpolatedTransform> maximize(GetMaximize()); | 226 std::unique_ptr<ui::InterpolatedTransform> maximize(GetMaximize()); |
229 gfx::Transform interpolated = maximize->Interpolate(1.0f); | 227 gfx::Transform interpolated = maximize->Interpolate(1.0f); |
230 SkMatrix44& m = interpolated.matrix(); | 228 SkMatrix44& m = interpolated.matrix(); |
231 // Upper-left 3x3 matrix should all be 0, 1 or -1. | 229 // Upper-left 3x3 matrix should all be 0, 1 or -1. |
232 for (int row = 0; row < 3; ++row) { | 230 for (int row = 0; row < 3; ++row) { |
233 for (int col = 0; col < 3; ++col) { | 231 for (int col = 0; col < 3; ++col) { |
234 float entry = m.get(row, col); | 232 float entry = m.get(row, col); |
235 EXPECT_TRUE(entry == 0 || entry == 1 || entry == -1); | 233 EXPECT_TRUE(entry == 0 || entry == 1 || entry == -1); |
236 } | 234 } |
237 } | 235 } |
238 } | 236 } |
OLD | NEW |