| 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 |