Index: ash/display/display_configuration_controller.h |
diff --git a/ash/display/display_configuration_controller.h b/ash/display/display_configuration_controller.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8003ae995071073862bb10626b6f8a1e4100e26c |
--- /dev/null |
+++ b/ash/display/display_configuration_controller.h |
@@ -0,0 +1,87 @@ |
+// Copyright 2016 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 ASH_DISPLAY_DISPLAY_CONFIGURATION_CONTROLLER_H_ |
+#define ASH_DISPLAY_DISPLAY_CONFIGURATION_CONTROLLER_H_ |
+ |
+// This class controls Display related configuration. Specifically it: |
+// * Handles animated transitions where appropriate. |
+// * Limits the frequency of certain operations. |
+// * Provides a single interface for UI and API classes. |
+// * TODO: Forwards display configuration changed events to UI and API classes. |
+ |
+#include "ash/ash_export.h" |
+#include "ash/display/window_tree_host_manager.h" |
+#include "base/macros.h" |
+#include "base/memory/weak_ptr.h" |
+#include "ui/gfx/display.h" |
+ |
+namespace ash { |
+ |
+namespace test { |
+class ShellTestApi; |
+} // namespace test |
+ |
+class DisplayAnimator; |
+class DisplayManager; |
+struct DisplayLayout; |
+ |
+class ASH_EXPORT DisplayConfigurationController |
+ : public WindowTreeHostManager::Observer { |
+ public: |
+ DisplayConfigurationController( |
+ DisplayManager* display_manager, |
+ WindowTreeHostManager* window_tree_host_manager); |
+ ~DisplayConfigurationController() override; |
+ |
+ // Sets the layout for |display_id| with a fade in/out animation. Currently |
+ // |display_id| is assumed to be the secondary display. |
+ // TODO(oshima/stevenjb): Support 3+ displays. |
+ void SetDisplayLayout(int64_t display_id, |
+ const DisplayLayout& layout, |
+ bool user_action); |
+ |
+ // Sets the mirror mode with a fade-in/fade-out animation. Affects all |
+ // displays. |
+ void SetMirrorMode(bool mirror, bool user_action); |
+ |
+ // Sets the display's rotation with animation if available. |
+ void SetDisplayRotation(int64_t display_id, |
+ gfx::Display::Rotation rotation, |
+ gfx::Display::RotationSource source, |
+ bool user_action); |
+ |
+ // Sets the primary display id. |
+ void SetPrimaryDisplayId(int64_t display_id, bool user_action); |
+ |
+ // WindowTreeHostManager::Observer |
+ void OnDisplayConfigurationChanged() override; |
+ |
+ protected: |
+ friend class ash::test::ShellTestApi; |
+ |
+ // Allow tests to skip animations. |
+ void ResetAnimatorForTest(); |
+ |
+ private: |
+ class DisplayChangeLimiter; |
+ |
+ bool IsLimited(); |
+ void SetDisplayLayoutImpl(int64_t display_id, const DisplayLayout& layout); |
+ void SetMirrorModeImpl(bool mirror); |
+ void SetPrimaryDisplayIdImpl(int64_t display_id); |
+ |
+ DisplayManager* display_manager_; // weak ptr |
+ WindowTreeHostManager* window_tree_host_manager_; // weak ptr |
+ scoped_ptr<DisplayAnimator> display_animator_; |
+ scoped_ptr<DisplayChangeLimiter> limiter_; |
+ |
+ base::WeakPtrFactory<DisplayConfigurationController> weak_ptr_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DisplayConfigurationController); |
+}; |
+ |
+} // namespace ash |
+ |
+#endif // ASH_DISPLAY_DISPLAY_CONFIGURATION_CONTROLLER_H_ |