compositor_animation_runner.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright 2019 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef UI_VIEWS_ANIMATION_COMPOSITOR_ANIMATION_RUNNER_H_
  5. #define UI_VIEWS_ANIMATION_COMPOSITOR_ANIMATION_RUNNER_H_
  6. #include "base/location.h"
  7. #include "base/memory/raw_ptr.h"
  8. #include "base/time/time.h"
  9. #include "ui/compositor/compositor.h"
  10. #include "ui/compositor/compositor_animation_observer.h"
  11. #include "ui/compositor/compositor_observer.h"
  12. #include "ui/gfx/animation/animation_container.h"
  13. #include "ui/views/views_export.h"
  14. #include "ui/views/widget/widget_observer.h"
  15. namespace views {
  16. class Widget;
  17. // An animation runner based on ui::Compositor.
  18. class VIEWS_EXPORT CompositorAnimationRunner
  19. : public gfx::AnimationRunner,
  20. public ui::CompositorAnimationObserver,
  21. public WidgetObserver {
  22. public:
  23. explicit CompositorAnimationRunner(
  24. Widget* widget,
  25. const base::Location& location = FROM_HERE);
  26. CompositorAnimationRunner(CompositorAnimationRunner&) = delete;
  27. CompositorAnimationRunner& operator=(CompositorAnimationRunner&) = delete;
  28. ~CompositorAnimationRunner() override;
  29. // gfx::AnimationRunner:
  30. void Stop() override;
  31. // ui::CompositorAnimationObserver:
  32. void OnAnimationStep(base::TimeTicks timestamp) override;
  33. void OnCompositingShuttingDown(ui::Compositor* compositor) override;
  34. // WidgetObserver:
  35. void OnWidgetDestroying(Widget* widget) override;
  36. protected:
  37. // gfx::AnimationRunner:
  38. void OnStart(base::TimeDelta min_interval, base::TimeDelta elapsed) override;
  39. private:
  40. // Called when an animation is stopped, the compositor is shutting down, or
  41. // the widget is destroyed.
  42. void StopInternal();
  43. // When |widget_| is nullptr, it means the widget has been destroyed and
  44. // |compositor_| must also be nullptr.
  45. raw_ptr<Widget> widget_;
  46. // When |compositor_| is nullptr, it means either the animation is not
  47. // running, or the compositor or |widget_| associated with the compositor_ has
  48. // been destroyed during animation.
  49. raw_ptr<ui::Compositor> compositor_ = nullptr;
  50. base::TimeDelta min_interval_ = base::TimeDelta::Max();
  51. base::TimeTicks last_tick_;
  52. };
  53. } // namespace views
  54. #endif // UI_VIEWS_ANIMATION_COMPOSITOR_ANIMATION_RUNNER_H_