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 <cmath> | 7 #include <cmath> |
8 | 8 |
| 9 #include "base/memory/ptr_util.h" |
| 10 |
9 #ifndef M_PI | 11 #ifndef M_PI |
10 #define M_PI 3.14159265358979323846 | 12 #define M_PI 3.14159265358979323846 |
11 #endif | 13 #endif |
12 | 14 |
13 #include "base/logging.h" | 15 #include "base/logging.h" |
14 #include "ui/gfx/animation/tween.h" | 16 #include "ui/gfx/animation/tween.h" |
15 | 17 |
16 namespace { | 18 namespace { |
17 | 19 |
18 static const double EPSILON = 1e-6; | 20 static const double EPSILON = 1e-6; |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 gfx::Transform InterpolatedTransform::Interpolate(float t) const { | 91 gfx::Transform InterpolatedTransform::Interpolate(float t) const { |
90 if (reversed_) | 92 if (reversed_) |
91 t = 1.0f - t; | 93 t = 1.0f - t; |
92 gfx::Transform result = InterpolateButDoNotCompose(t); | 94 gfx::Transform result = InterpolateButDoNotCompose(t); |
93 if (child_.get()) { | 95 if (child_.get()) { |
94 result.ConcatTransform(child_->Interpolate(t)); | 96 result.ConcatTransform(child_->Interpolate(t)); |
95 } | 97 } |
96 return result; | 98 return result; |
97 } | 99 } |
98 | 100 |
99 void InterpolatedTransform::SetChild(InterpolatedTransform* child) { | 101 void InterpolatedTransform::SetChild( |
100 child_.reset(child); | 102 std::unique_ptr<InterpolatedTransform> child) { |
| 103 child_ = std::move(child); |
101 } | 104 } |
102 | 105 |
103 inline float InterpolatedTransform::ValueBetween(float time, | 106 inline float InterpolatedTransform::ValueBetween(float time, |
104 float start_value, | 107 float start_value, |
105 float end_value) const { | 108 float end_value) const { |
106 // can't handle NaN | 109 // can't handle NaN |
107 DCHECK(time == time && start_time_ == start_time_ && end_time_ == end_time_); | 110 DCHECK(time == time && start_time_ == start_time_ && end_time_ == end_time_); |
108 if (time != time || start_time_ != start_time_ || end_time_ != end_time_) | 111 if (time != time || start_time_ != start_time_ || end_time_ != end_time_) |
109 return start_value; | 112 return start_value; |
110 | 113 |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 return transform_; | 294 return transform_; |
292 } | 295 } |
293 | 296 |
294 InterpolatedConstantTransform::~InterpolatedConstantTransform() {} | 297 InterpolatedConstantTransform::~InterpolatedConstantTransform() {} |
295 | 298 |
296 /////////////////////////////////////////////////////////////////////////////// | 299 /////////////////////////////////////////////////////////////////////////////// |
297 // InterpolatedTransformAboutPivot | 300 // InterpolatedTransformAboutPivot |
298 // | 301 // |
299 | 302 |
300 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot( | 303 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot( |
301 const gfx::Point& pivot, | 304 const gfx::Point& pivot, |
302 InterpolatedTransform* transform) | 305 std::unique_ptr<InterpolatedTransform> transform) |
303 : InterpolatedTransform() { | 306 : InterpolatedTransform() { |
304 Init(pivot, transform); | 307 Init(pivot, std::move(transform)); |
305 } | 308 } |
306 | 309 |
307 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot( | 310 InterpolatedTransformAboutPivot::InterpolatedTransformAboutPivot( |
308 const gfx::Point& pivot, | 311 const gfx::Point& pivot, |
309 InterpolatedTransform* transform, | 312 std::unique_ptr<InterpolatedTransform> transform, |
310 float start_time, | 313 float start_time, |
311 float end_time) | 314 float end_time) |
312 : InterpolatedTransform() { | 315 : InterpolatedTransform() { |
313 Init(pivot, transform); | 316 Init(pivot, std::move(transform)); |
314 } | 317 } |
315 | 318 |
316 InterpolatedTransformAboutPivot::~InterpolatedTransformAboutPivot() {} | 319 InterpolatedTransformAboutPivot::~InterpolatedTransformAboutPivot() {} |
317 | 320 |
318 gfx::Transform | 321 gfx::Transform |
319 InterpolatedTransformAboutPivot::InterpolateButDoNotCompose(float t) const { | 322 InterpolatedTransformAboutPivot::InterpolateButDoNotCompose(float t) const { |
320 if (transform_.get()) { | 323 if (transform_.get()) { |
321 return transform_->Interpolate(t); | 324 return transform_->Interpolate(t); |
322 } | 325 } |
323 return gfx::Transform(); | 326 return gfx::Transform(); |
324 } | 327 } |
325 | 328 |
326 void InterpolatedTransformAboutPivot::Init(const gfx::Point& pivot, | 329 void InterpolatedTransformAboutPivot::Init( |
327 InterpolatedTransform* xform) { | 330 const gfx::Point& pivot, |
| 331 std::unique_ptr<InterpolatedTransform> xform) { |
328 gfx::Transform to_pivot; | 332 gfx::Transform to_pivot; |
329 gfx::Transform from_pivot; | 333 gfx::Transform from_pivot; |
330 to_pivot.Translate(SkIntToMScalar(-pivot.x()), SkIntToMScalar(-pivot.y())); | 334 to_pivot.Translate(SkIntToMScalar(-pivot.x()), SkIntToMScalar(-pivot.y())); |
331 from_pivot.Translate(SkIntToMScalar(pivot.x()), SkIntToMScalar(pivot.y())); | 335 from_pivot.Translate(SkIntToMScalar(pivot.x()), SkIntToMScalar(pivot.y())); |
332 | 336 |
333 std::unique_ptr<InterpolatedTransform> pre_transform( | 337 std::unique_ptr<InterpolatedTransform> pre_transform = |
334 new InterpolatedConstantTransform(to_pivot)); | 338 base::MakeUnique<InterpolatedConstantTransform>(to_pivot); |
335 std::unique_ptr<InterpolatedTransform> post_transform( | 339 std::unique_ptr<InterpolatedTransform> post_transform = |
336 new InterpolatedConstantTransform(from_pivot)); | 340 base::MakeUnique<InterpolatedConstantTransform>(from_pivot); |
337 | 341 |
338 pre_transform->SetChild(xform); | 342 xform->SetChild(std::move(post_transform)); |
339 xform->SetChild(post_transform.release()); | 343 pre_transform->SetChild(std::move(xform)); |
340 transform_ = std::move(pre_transform); | 344 transform_ = std::move(pre_transform); |
341 } | 345 } |
342 | 346 |
343 InterpolatedMatrixTransform::InterpolatedMatrixTransform( | 347 InterpolatedMatrixTransform::InterpolatedMatrixTransform( |
344 const gfx::Transform& start_transform, | 348 const gfx::Transform& start_transform, |
345 const gfx::Transform& end_transform) | 349 const gfx::Transform& end_transform) |
346 : InterpolatedTransform() { | 350 : InterpolatedTransform() { |
347 Init(start_transform, end_transform); | 351 Init(start_transform, end_transform); |
348 } | 352 } |
349 | 353 |
(...skipping 21 matching lines...) Expand all Loading... |
371 | 375 |
372 void InterpolatedMatrixTransform::Init(const gfx::Transform& start_transform, | 376 void InterpolatedMatrixTransform::Init(const gfx::Transform& start_transform, |
373 const gfx::Transform& end_transform) { | 377 const gfx::Transform& end_transform) { |
374 bool success = gfx::DecomposeTransform(&start_decomp_, start_transform); | 378 bool success = gfx::DecomposeTransform(&start_decomp_, start_transform); |
375 DCHECK(success); | 379 DCHECK(success); |
376 success = gfx::DecomposeTransform(&end_decomp_, end_transform); | 380 success = gfx::DecomposeTransform(&end_decomp_, end_transform); |
377 DCHECK(success); | 381 DCHECK(success); |
378 } | 382 } |
379 | 383 |
380 } // namespace ui | 384 } // namespace ui |
OLD | NEW |