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

Unified Diff: ash/display/display_configuration_controller.h

Issue 1594683002: Introduce DisplayConfigurationController (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@issue_576375_display1b1
Patch Set: Rebase Created 4 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 | « ash/display/display_animator_chromeos.cc ('k') | ash/display/display_configuration_controller.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « ash/display/display_animator_chromeos.cc ('k') | ash/display/display_configuration_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698