// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_VIEWS_ANIMATION_ANIMATION_BUILDER_H_ #define UI_VIEWS_ANIMATION_ANIMATION_BUILDER_H_ #include <map> #include <memory> #include <optional> #include <vector> #include "base/functional/callback.h" #include "base/location.h" #include "base/memory/raw_ptr.h" #include "base/time/time.h" #include "base/types/pass_key.h" #include "ui/compositor/layer_animation_observer.h" #include "ui/compositor/layer_animation_sequence.h" #include "ui/compositor/layer_animator.h" #include "ui/views/animation/animation_key.h" #include "ui/views/animation/animation_sequence_block.h" #include "ui/views/views_export.h" namespace ui { class Layer; } namespace views { class AnimationAbortHandle; // Provides an unfinalized animation sequence block if any to build animations. // Usage notes for callbacks set on AnimationBuilder: // When setting callbacks for the animations note that the AnimationBuilder’s // observer that calls these callbacks may outlive the callback's parameters. // The OnEnded callback runs when all animations created on the AnimationBuilder // have finished. The OnAborted callback runs when any one animation created on // the AnimationBuilder has been aborted. Therefore, these callbacks and every // object the callback accesses needs to outlive all the Layers/LayerOwners // being animated on since the Layers ultimately own the objects that run the // animation. Otherwise, developers may need to use weak pointers or force // animations to be cancelled in the object’s destructor to prevent accessing // destroyed objects. Note that aborted notifications can be sent during the // destruction process. Therefore subclasses that own the Layers may actually be // destroyed before the OnAborted callback is run. class VIEWS_EXPORT AnimationBuilder { … }; } // namespace views #endif // UI_VIEWS_ANIMATION_ANIMATION_BUILDER_H_