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 |