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