Chromium Code Reviews| Index: ash/display/display_configuration_controller.h |
| diff --git a/ash/display/display_configuration_controller.h b/ash/display/display_configuration_controller.h |
| index 03563a28a6624c93b9b9db3f0fe70452fbee9e02..4bbac9e9d2e87c574b854c14a348c830308c1f7f 100644 |
| --- a/ash/display/display_configuration_controller.h |
| +++ b/ash/display/display_configuration_controller.h |
| @@ -9,6 +9,7 @@ |
| #include "ash/ash_export.h" |
| #include "ash/display/window_tree_host_manager.h" |
| +#include "ash/rotator/screen_rotation_animator_observer.h" |
| #include "base/macros.h" |
| #include "base/memory/weak_ptr.h" |
| #include "ui/display/display.h" |
| @@ -21,10 +22,11 @@ class DisplayManager; |
| namespace ash { |
| namespace test { |
| -class ShellTestApi; |
| +class DisplayConfigurationControllerTestApi; |
| } // namespace test |
| class DisplayAnimator; |
| +class ScreenRotationAnimator; |
| // This class controls Display related configuration. Specifically it: |
| // * Handles animated transitions where appropriate. |
| @@ -32,7 +34,8 @@ class DisplayAnimator; |
| // * Provides a single interface for UI and API classes. |
| // * TODO: Forwards display configuration changed events to UI and API classes. |
| class ASH_EXPORT DisplayConfigurationController |
| - : public WindowTreeHostManager::Observer { |
| + : public WindowTreeHostManager::Observer, |
| + public ScreenRotationAnimatorObserver { |
| public: |
| DisplayConfigurationController( |
| display::DisplayManager* display_manager, |
| @@ -59,8 +62,13 @@ class ASH_EXPORT DisplayConfigurationController |
| // WindowTreeHostManager::Observer |
| void OnDisplayConfigurationChanged() override; |
| + // ScreenRotationAnimatorObserver |
| + // This will be called when the animation is ended or aborted. |
| + void OnScreenRotationAnimationFinished( |
| + ScreenRotationAnimator* animator) override; |
| + |
| protected: |
| - friend class ash::test::ShellTestApi; |
| + friend class ash::test::DisplayConfigurationControllerTestApi; |
| // Allow tests to skip animations. |
| void ResetAnimatorForTest(); |
| @@ -76,11 +84,32 @@ class ASH_EXPORT DisplayConfigurationController |
| void SetMirrorModeImpl(bool mirror); |
| void SetPrimaryDisplayIdImpl(int64_t display_id); |
| + // Returns the currently active rotation for the display with |display_id|. If |
| + // an animation is in progress, the target rotation will be returned. |
| + display::Display::Rotation GetCurrentScreenRotation( |
| + int64_t display_id) const { |
| + return display_manager_->GetDisplayInfo(display_id).GetActiveRotation(); |
|
oshima
2017/03/17 19:41:59
this looks simple enough to do this in .cc file?
wutao
2017/03/17 20:35:00
Removed.
|
| + } |
| + |
| + // Returns the ScreenRotationAnimator associated with the |display_id|. If |
| + // there is no existing ScreenRotationAnimator for |display_id|, it will make |
| + // one and store the pair in the |rotation_animator_map_|. |
| + ScreenRotationAnimator* GetScreenRotationAnimatorForDisplay( |
| + int64_t display_id); |
| + |
| display::DisplayManager* display_manager_; // weak ptr |
| WindowTreeHostManager* window_tree_host_manager_; // weak ptr |
| std::unique_ptr<DisplayAnimator> display_animator_; |
| std::unique_ptr<DisplayChangeLimiter> limiter_; |
| + // Tracks |display_id| to ScreenRotationAnimator mappings. The |
| + // |rotation_animator_map_| is populated on demand the first time a |
| + // ScreenRotationAnimator is needed for a given |display_id|. |
| + // On animation ended or aborted, the animator may be deleted if there is no |
| + // more pending rotation request. |
| + std::unordered_map<int64_t, std::unique_ptr<ScreenRotationAnimator>> |
| + rotation_animator_map_; |
| + |
| base::WeakPtrFactory<DisplayConfigurationController> weak_ptr_factory_; |
| DISALLOW_COPY_AND_ASSIGN(DisplayConfigurationController); |