Chromium Code Reviews| 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/compositor/layer_animator.h" | 5 #include "ui/compositor/layer_animator.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "ui/base/animation/animation_container.h" | 10 #include "ui/base/animation/animation_container.h" |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 38 // Returns the AnimationContainer we're added to. | 38 // Returns the AnimationContainer we're added to. |
| 39 ui::AnimationContainer* GetAnimationContainer() { | 39 ui::AnimationContainer* GetAnimationContainer() { |
| 40 static ui::AnimationContainer* container = NULL; | 40 static ui::AnimationContainer* container = NULL; |
| 41 if (!container) { | 41 if (!container) { |
| 42 container = new AnimationContainer(); | 42 container = new AnimationContainer(); |
| 43 container->AddRef(); | 43 container->AddRef(); |
| 44 } | 44 } |
| 45 return container; | 45 return container; |
| 46 } | 46 } |
| 47 | 47 |
| 48 class SuccessCallbackAnimationObserver : public LayerAnimationObserver { | |
| 49 public: | |
| 50 SuccessCallbackAnimationObserver(base::Closure callback) | |
| 51 : callback_(callback), | |
| 52 attached_(0) { | |
| 53 } | |
| 54 | |
| 55 virtual void OnLayerAnimationEnded(LayerAnimationSequence* sequence) { | |
| 56 callback_.Run(); | |
| 57 callback_.Reset(); | |
| 58 } | |
| 59 | |
| 60 virtual void OnLayerAnimationAborted( | |
| 61 LayerAnimationSequence* sequence) {} | |
| 62 | |
| 63 virtual void OnLayerAnimationScheduled( | |
| 64 LayerAnimationSequence* sequence) {} | |
| 65 | |
| 66 private: | |
| 67 virtual void OnAttachedToSequence(LayerAnimationSequence* sequence) { | |
| 68 attached_++; | |
| 69 } | |
| 70 | |
| 71 virtual void OnDetachedFromSequence(LayerAnimationSequence* sequence) { | |
| 72 attached_--; | |
| 73 if (attached_ == 0) | |
| 74 delete this; | |
| 75 } | |
| 76 | |
| 77 base::Closure callback_; | |
| 78 int attached_; | |
|
Daniel Erat
2012/11/27 18:32:11
nit: rename to num_attached_sequences_ or somethin
Ian Vollick
2012/11/27 18:35:07
DISALLOW_COPY_AND_ASSIGN
Denis Kuznetsov (DE-MUC)
2012/11/27 18:46:59
Done.
Denis Kuznetsov (DE-MUC)
2012/11/27 18:46:59
Done.
| |
| 79 }; | |
| 80 | |
| 48 } // namespace | 81 } // namespace |
| 49 | 82 |
| 50 // static | 83 // static |
| 51 bool LayerAnimator::disable_animations_for_test_ = false; | 84 bool LayerAnimator::disable_animations_for_test_ = false; |
| 52 // static | 85 // static |
| 53 bool LayerAnimator::slow_animation_mode_ = false; | 86 bool LayerAnimator::slow_animation_mode_ = false; |
| 54 // static | 87 // static |
| 55 int LayerAnimator::slow_animation_scale_factor_ = 4; | 88 int LayerAnimator::slow_animation_scale_factor_ = 4; |
| 56 | 89 |
| 57 // LayerAnimator public -------------------------------------------------------- | 90 // LayerAnimator public -------------------------------------------------------- |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 251 for (int p = static_cast<int>(property); p != -1; p = va_arg(marker, int)) { | 284 for (int p = static_cast<int>(property); p != -1; p = va_arg(marker, int)) { |
| 252 properties_to_pause.insert( | 285 properties_to_pause.insert( |
| 253 static_cast<LayerAnimationElement::AnimatableProperty>(p)); | 286 static_cast<LayerAnimationElement::AnimatableProperty>(p)); |
| 254 } | 287 } |
| 255 va_end(marker); | 288 va_end(marker); |
| 256 ScheduleAnimation(new ui::LayerAnimationSequence( | 289 ScheduleAnimation(new ui::LayerAnimationSequence( |
| 257 ui::LayerAnimationElement::CreatePauseElement( | 290 ui::LayerAnimationElement::CreatePauseElement( |
| 258 properties_to_pause, duration))); | 291 properties_to_pause, duration))); |
| 259 } | 292 } |
| 260 | 293 |
| 294 void LayerAnimator::ScheduleSuccessCallbackForProperties( | |
| 295 base::Closure& callback, | |
| 296 LayerAnimationElement::AnimatableProperty property, | |
| 297 ...) { | |
| 298 ui::LayerAnimationElement::AnimatableProperties properties_to_pause; | |
| 299 va_list marker; | |
| 300 va_start(marker, property); | |
| 301 for (int p = static_cast<int>(property); p != -1; p = va_arg(marker, int)) { | |
| 302 properties_to_pause.insert( | |
|
Daniel Erat
2012/11/27 18:32:11
pause?
Denis Kuznetsov (DE-MUC)
2012/11/27 18:46:59
We create PauseElement (one that does not change a
| |
| 303 static_cast<LayerAnimationElement::AnimatableProperty>(p)); | |
| 304 } | |
| 305 va_end(marker); | |
| 306 | |
| 307 ui::LayerAnimationSequence* sequence = new ui::LayerAnimationSequence( | |
| 308 ui::LayerAnimationElement::CreatePauseElement( | |
| 309 properties_to_pause, base::TimeDelta())); | |
| 310 | |
| 311 sequence->AddObserver(new SuccessCallbackAnimationObserver(callback)); | |
| 312 | |
| 313 ScheduleAnimation(sequence); | |
| 314 } | |
| 315 | |
|
Daniel Erat
2012/11/27 18:32:11
nit: delete extra blank line
Denis Kuznetsov (DE-MUC)
2012/11/27 18:46:59
Done.
| |
| 316 | |
| 261 bool LayerAnimator::IsAnimatingProperty( | 317 bool LayerAnimator::IsAnimatingProperty( |
| 262 LayerAnimationElement::AnimatableProperty property) const { | 318 LayerAnimationElement::AnimatableProperty property) const { |
| 263 for (AnimationQueue::const_iterator queue_iter = animation_queue_.begin(); | 319 for (AnimationQueue::const_iterator queue_iter = animation_queue_.begin(); |
| 264 queue_iter != animation_queue_.end(); ++queue_iter) { | 320 queue_iter != animation_queue_.end(); ++queue_iter) { |
| 265 if ((*queue_iter)->properties().find(property) != | 321 if ((*queue_iter)->properties().find(property) != |
| 266 (*queue_iter)->properties().end()) { | 322 (*queue_iter)->properties().end()) { |
| 267 return true; | 323 return true; |
| 268 } | 324 } |
| 269 } | 325 } |
| 270 return false; | 326 return false; |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 533 const bool abort = false; | 589 const bool abort = false; |
| 534 RemoveAllAnimationsWithACommonProperty(sequence, abort); | 590 RemoveAllAnimationsWithACommonProperty(sequence, abort); |
| 535 if (!weak_sequence_ptr) | 591 if (!weak_sequence_ptr) |
| 536 return; | 592 return; |
| 537 | 593 |
| 538 LayerAnimationSequence* removed = RemoveAnimation(sequence); | 594 LayerAnimationSequence* removed = RemoveAnimation(sequence); |
| 539 DCHECK(removed == NULL || removed == sequence); | 595 DCHECK(removed == NULL || removed == sequence); |
| 540 if (!weak_sequence_ptr) | 596 if (!weak_sequence_ptr) |
| 541 return; | 597 return; |
| 542 | 598 |
| 543 ProgressAnimation(sequence, sequence->duration()); | 599 ProgressAnimationToEnd(sequence); |
| 544 if (!weak_sequence_ptr) | 600 if (!weak_sequence_ptr) |
| 545 return; | 601 return; |
| 546 | 602 |
| 547 delete sequence; | 603 delete sequence; |
| 548 } | 604 } |
| 549 | 605 |
| 550 void LayerAnimator::ImmediatelyAnimateToNewTarget( | 606 void LayerAnimator::ImmediatelyAnimateToNewTarget( |
| 551 LayerAnimationSequence* sequence) { | 607 LayerAnimationSequence* sequence) { |
| 552 // Need to detect if our sequence gets destroyed. | 608 // Need to detect if our sequence gets destroyed. |
| 553 base::WeakPtr<LayerAnimationSequence> weak_sequence_ptr = | 609 base::WeakPtr<LayerAnimationSequence> weak_sequence_ptr = |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 749 LayerAnimator::RunningAnimation::RunningAnimation( | 805 LayerAnimator::RunningAnimation::RunningAnimation( |
| 750 const base::WeakPtr<LayerAnimationSequence>& sequence, | 806 const base::WeakPtr<LayerAnimationSequence>& sequence, |
| 751 base::TimeTicks start_time) | 807 base::TimeTicks start_time) |
| 752 : sequence_(sequence), | 808 : sequence_(sequence), |
| 753 start_time_(start_time) { | 809 start_time_(start_time) { |
| 754 } | 810 } |
| 755 | 811 |
| 756 LayerAnimator::RunningAnimation::~RunningAnimation() { } | 812 LayerAnimator::RunningAnimation::~RunningAnimation() { } |
| 757 | 813 |
| 758 } // namespace ui | 814 } // namespace ui |
| OLD | NEW |