Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Unified Diff: ui/compositor/layer_animator.h

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/compositor/layer_animation_sequence_unittest.cc ('k') | ui/compositor/layer_animator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/compositor/layer_animator.h
diff --git a/ui/compositor/layer_animator.h b/ui/compositor/layer_animator.h
deleted file mode 100644
index 69744f8c46221f4e1c8db812db66ec27d9ab4ca0..0000000000000000000000000000000000000000
--- a/ui/compositor/layer_animator.h
+++ /dev/null
@@ -1,359 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_COMPOSITOR_LAYER_ANIMATOR_H_
-#define UI_COMPOSITOR_LAYER_ANIMATOR_H_
-
-#include <deque>
-#include <vector>
-
-#include "base/compiler_specific.h"
-#include "base/gtest_prod_util.h"
-#include "base/memory/linked_ptr.h"
-#include "base/memory/ref_counted.h"
-#include "base/observer_list.h"
-#include "base/time/time.h"
-#include "ui/compositor/compositor_export.h"
-#include "ui/compositor/layer_animation_element.h"
-#include "ui/gfx/animation/tween.h"
-
-namespace gfx {
-class Animation;
-class Rect;
-class Transform;
-}
-
-namespace ui {
-class Layer;
-class LayerAnimationSequence;
-class LayerAnimationDelegate;
-class LayerAnimationObserver;
-class LayerAnimatorCollection;
-class ScopedLayerAnimationSettings;
-
-// When a property of layer needs to be changed it is set by way of
-// LayerAnimator. This enables LayerAnimator to animate property changes.
-// NB: during many tests, set_disable_animations_for_test is used and causes
-// all animations to complete immediately. The layer animation is ref counted
-// so that if its owning layer is deleted (and the owning layer is only other
-// class that should ever hold a ref ptr to a LayerAnimator), the animator can
-// ensure that it is not disposed of until it finishes executing. It does this
-// by holding a reference to itself for the duration of methods for which it
-// must guarantee that |this| is valid.
-class COMPOSITOR_EXPORT LayerAnimator : public base::RefCounted<LayerAnimator> {
- public:
- enum PreemptionStrategy {
- IMMEDIATELY_SET_NEW_TARGET,
- IMMEDIATELY_ANIMATE_TO_NEW_TARGET,
- ENQUEUE_NEW_ANIMATION,
- REPLACE_QUEUED_ANIMATIONS,
- BLEND_WITH_CURRENT_ANIMATION
- };
-
- explicit LayerAnimator(base::TimeDelta transition_duration);
-
- // No implicit animations when properties are set.
- static LayerAnimator* CreateDefaultAnimator();
-
- // Implicitly animates when properties are set.
- static LayerAnimator* CreateImplicitAnimator();
-
- // Sets the transform on the delegate. May cause an implicit animation.
- virtual void SetTransform(const gfx::Transform& transform);
- gfx::Transform GetTargetTransform() const;
-
- // Sets the bounds on the delegate. May cause an implicit animation.
- virtual void SetBounds(const gfx::Rect& bounds);
- gfx::Rect GetTargetBounds() const;
-
- // Sets the opacity on the delegate. May cause an implicit animation.
- virtual void SetOpacity(float opacity);
- float GetTargetOpacity() const;
-
- // Sets the visibility of the delegate. May cause an implicit animation.
- virtual void SetVisibility(bool visibility);
- bool GetTargetVisibility() const;
-
- // Sets the brightness on the delegate. May cause an implicit animation.
- virtual void SetBrightness(float brightness);
- float GetTargetBrightness() const;
-
- // Sets the grayscale on the delegate. May cause an implicit animation.
- virtual void SetGrayscale(float grayscale);
- float GetTargetGrayscale() const;
-
- // Sets the color on the delegate. May cause an implicit animation.
- virtual void SetColor(SkColor color);
- SkColor GetTargetColor() const;
-
- // Returns the default length of animations, including adjustment for slow
- // animation mode if set.
- base::TimeDelta GetTransitionDuration() const;
-
- // Sets the layer animation delegate the animator is associated with. The
- // animator does not own the delegate. The layer animator expects a non-NULL
- // delegate for most of its operations, so do not call any methods without
- // a valid delegate installed.
- void SetDelegate(LayerAnimationDelegate* delegate);
-
- // Sets the animation preemption strategy. This determines the behaviour if
- // a property is set during an animation. The default is
- // IMMEDIATELY_SET_NEW_TARGET (see ImmediatelySetNewTarget below).
- void set_preemption_strategy(PreemptionStrategy strategy) {
- preemption_strategy_ = strategy;
- }
-
- PreemptionStrategy preemption_strategy() const {
- return preemption_strategy_;
- }
-
- // Start an animation sequence. If an animation for the same property is in
- // progress, it needs to be interrupted with the new animation. The animator
- // takes ownership of this animation sequence.
- void StartAnimation(LayerAnimationSequence* animation);
-
- // Schedule an animation to be run when possible. The animator takes ownership
- // of this animation sequence.
- void ScheduleAnimation(LayerAnimationSequence* animation);
-
- // Starts the animations to be run together, ensuring that the first elements
- // in these sequences have the same effective start time even when some of
- // them start on the compositor thread (but there is no such guarantee for
- // the effective start time of subsequent elements). Obviously will not work
- // if they animate any common properties. The animator takes ownership of the
- // animation sequences. Takes PreemptionStrategy into account.
- void StartTogether(const std::vector<LayerAnimationSequence*>& animations);
-
- // Schedules the animations to be run together, ensuring that the first
- // elements in these sequences have the same effective start time even when
- // some of them start on the compositor thread (but there is no such guarantee
- // for the effective start time of subsequent elements). Obviously will not
- // work if they animate any common properties. The animator takes ownership
- // of the animation sequences.
- void ScheduleTogether(const std::vector<LayerAnimationSequence*>& animations);
-
- // Schedules a pause for length |duration| of all the specified properties.
- // End the list with -1.
- void SchedulePauseForProperties(
- base::TimeDelta duration,
- LayerAnimationElement::AnimatableProperties properties_to_pause);
-
- // Returns true if there is an animation in the queue (animations remain in
- // the queue until they complete, so this includes running animations).
- bool is_animating() const { return !animation_queue_.empty(); }
-
- // Returns true if there is an animation in the queue that animates the given
- // property (animations remain in the queue until they complete, so this
- // includes running animations).
- bool IsAnimatingProperty(
- LayerAnimationElement::AnimatableProperty property) const;
-
- // Stops animating the given property. No effect if there is no running
- // animation for the given property. Skips to the final state of the
- // animation.
- void StopAnimatingProperty(
- LayerAnimationElement::AnimatableProperty property);
-
- // Stops all animation and clears any queued animations. This call progresses
- // animations to their end points and notifies all observers.
- void StopAnimating() { StopAnimatingInternal(false); }
-
- // This is similar to StopAnimating, but aborts rather than finishes the
- // animations and notifies all observers.
- void AbortAllAnimations() { StopAnimatingInternal(true); }
-
- // These functions are used for adding or removing observers from the observer
- // list. The observers are notified when animations end.
- void AddObserver(LayerAnimationObserver* observer);
- void RemoveObserver(LayerAnimationObserver* observer);
-
- // Called when a threaded animation is actually started.
- void OnThreadedAnimationStarted(const cc::AnimationEvent& event);
-
- // This determines how implicit animations will be tweened. This has no
- // effect on animations that are explicitly started or scheduled. The default
- // is Tween::LINEAR.
- void set_tween_type(gfx::Tween::Type tween_type) { tween_type_ = tween_type; }
- gfx::Tween::Type tween_type() const { return tween_type_; }
-
- // For testing purposes only.
- void set_disable_timer_for_test(bool disable_timer) {
- disable_timer_for_test_ = disable_timer;
- }
-
- void set_last_step_time(base::TimeTicks time) {
- last_step_time_ = time;
- }
- base::TimeTicks last_step_time() const { return last_step_time_; }
-
- void Step(base::TimeTicks time_now);
-
- void AddToCollection(LayerAnimatorCollection* collection);
- void RemoveFromCollection(LayerAnimatorCollection* collection);
-
- protected:
- virtual ~LayerAnimator();
-
- LayerAnimationDelegate* delegate() { return delegate_; }
- const LayerAnimationDelegate* delegate() const { return delegate_; }
-
- // Virtual for testing.
- virtual void ProgressAnimation(LayerAnimationSequence* sequence,
- base::TimeTicks now);
-
- void ProgressAnimationToEnd(LayerAnimationSequence* sequence);
-
- // Returns true if the sequence is owned by this animator.
- bool HasAnimation(LayerAnimationSequence* sequence) const;
-
- private:
- friend class base::RefCounted<LayerAnimator>;
- friend class ScopedLayerAnimationSettings;
- friend class LayerAnimatorTestController;
- FRIEND_TEST_ALL_PREFIXES(LayerAnimatorTest, AnimatorStartedCorrectly);
- FRIEND_TEST_ALL_PREFIXES(LayerAnimatorTest,
- AnimatorRemovedFromCollectionWhenLayerIsDestroyed);
-
- class RunningAnimation {
- public:
- RunningAnimation(const base::WeakPtr<LayerAnimationSequence>& sequence);
- ~RunningAnimation();
-
- bool is_sequence_alive() const { return !!sequence_.get(); }
- LayerAnimationSequence* sequence() const { return sequence_.get(); }
-
- private:
- base::WeakPtr<LayerAnimationSequence> sequence_;
-
- // Copy and assign are allowed.
- };
-
- typedef std::vector<RunningAnimation> RunningAnimations;
- typedef std::deque<linked_ptr<LayerAnimationSequence> > AnimationQueue;
-
- // Finishes all animations by either advancing them to their final state or by
- // aborting them.
- void StopAnimatingInternal(bool abort);
-
- // Starts or stops stepping depending on whether thare are running animations.
- void UpdateAnimationState();
-
- // Removes the sequences from both the running animations and the queue.
- // Returns a pointer to the removed animation, if any. NOTE: the caller is
- // responsible for deleting the returned pointer.
- LayerAnimationSequence* RemoveAnimation(
- LayerAnimationSequence* sequence) WARN_UNUSED_RESULT;
-
- // Progresses to the end of the sequence before removing it.
- void FinishAnimation(LayerAnimationSequence* sequence, bool abort);
-
- // Finishes any running animation with zero duration.
- void FinishAnyAnimationWithZeroDuration();
-
- // Clears the running animations and the queue. No sequences are progressed.
- void ClearAnimations();
-
- // Returns the running animation animating the given property, if any.
- RunningAnimation* GetRunningAnimation(
- LayerAnimationElement::AnimatableProperty property);
-
- // Checks if the sequence has already been added to the queue and adds it
- // to the front if note.
- void AddToQueueIfNotPresent(LayerAnimationSequence* sequence);
-
- // Any running or queued animation that affects a property in common with
- // |sequence| is either finished or aborted depending on |abort|.
- void RemoveAllAnimationsWithACommonProperty(LayerAnimationSequence* sequence,
- bool abort);
-
- // Preempts a running animation by progressing both the running animation and
- // the given sequence to the end.
- void ImmediatelySetNewTarget(LayerAnimationSequence* sequence);
-
- // Preempts by aborting the running animation, and starts the given animation.
- void ImmediatelyAnimateToNewTarget(LayerAnimationSequence* sequence);
-
- // Preempts by adding the new animation to the queue.
- void EnqueueNewAnimation(LayerAnimationSequence* sequence);
-
- // Preempts by wiping out any unstarted animation in the queue and then
- // enqueuing this animation.
- void ReplaceQueuedAnimations(LayerAnimationSequence* sequence);
-
- // If there's an animation in the queue that doesn't animate the same property
- // as a running animation, or an animation schedule to run before it, start it
- // up. Repeat until there are no such animations.
- void ProcessQueue();
-
- // Attempts to add the sequence to the list of running animations. Returns
- // false if there is an animation running that already animates one of the
- // properties affected by |sequence|.
- bool StartSequenceImmediately(LayerAnimationSequence* sequence);
-
- // Sets the value of target as if all the running and queued animations were
- // allowed to finish.
- void GetTargetValue(LayerAnimationElement::TargetValue* target) const;
-
- // Called whenever an animation is added to the animation queue. Either by
- // starting the animation or adding to the queue.
- void OnScheduled(LayerAnimationSequence* sequence);
-
- // Sets |transition_duration_| unless |is_transition_duration_locked_| is set.
- void SetTransitionDuration(base::TimeDelta duration);
-
- // Clears the animation queues and notifies any running animations that they
- // have been aborted.
- void ClearAnimationsInternal();
-
- // Cleans up any running animations that may have been deleted.
- void PurgeDeletedAnimations();
-
- LayerAnimatorCollection* GetLayerAnimatorCollection();
-
- // This is the queue of animations to run.
- AnimationQueue animation_queue_;
-
- // The target of all layer animations.
- LayerAnimationDelegate* delegate_;
-
- // The currently running animations.
- RunningAnimations running_animations_;
-
- // Determines how animations are replaced.
- PreemptionStrategy preemption_strategy_;
-
- // Whether the length of animations is locked. While it is locked
- // SetTransitionDuration does not set |transition_duration_|.
- bool is_transition_duration_locked_;
-
- // The default length of animations.
- base::TimeDelta transition_duration_;
-
- // The default tween type for implicit transitions
- gfx::Tween::Type tween_type_;
-
- // Used for coordinating the starting of animations.
- base::TimeTicks last_step_time_;
-
- // True if we are being stepped by our container.
- bool is_started_;
-
- // This prevents the animator from automatically stepping through animations
- // and allows for manual stepping.
- bool disable_timer_for_test_;
-
- // Prevents timer adjustments in case when we start multiple animations
- // with preemption strategies that discard previous animations.
- bool adding_animations_;
-
- // Observers are notified when layer animations end, are scheduled or are
- // aborted.
- ObserverList<LayerAnimationObserver> observers_;
-
- DISALLOW_COPY_AND_ASSIGN(LayerAnimator);
-};
-
-} // namespace ui
-
-#endif // UI_COMPOSITOR_LAYER_ANIMATOR_H_
« no previous file with comments | « ui/compositor/layer_animation_sequence_unittest.cc ('k') | ui/compositor/layer_animator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698