diff options
Diffstat (limited to 'ash/display/display_controller.h')
-rw-r--r-- | ash/display/display_controller.h | 60 |
1 files changed, 43 insertions, 17 deletions
diff --git a/ash/display/display_controller.h b/ash/display/display_controller.h index 324214f..d6e122e 100644 --- a/ash/display/display_controller.h +++ b/ash/display/display_controller.h @@ -19,22 +19,48 @@ class Display; class RootWindow; } +namespace base { +class Value; +template <typename T> class JSONValueConverter; +} + namespace ash { namespace internal { class RootWindowController; +} -// DisplayController owns and maintains RootWindows for each attached -// display, keeping them in sync with display configuration changes. -class ASH_EXPORT DisplayController : public aura::DisplayObserver { - public: +struct ASH_EXPORT DisplayLayout { // Layout options where the secondary display should be positioned. - enum SecondaryDisplayLayout { + enum Position { TOP, RIGHT, BOTTOM, LEFT }; + DisplayLayout(); + DisplayLayout(Position position, int offset); + + // Converter functions to/from base::Value. + static bool ConvertFromValue(const base::Value& value, DisplayLayout* layout); + static bool ConvertToValue(const DisplayLayout& layout, base::Value* value); + + // This method is used by base::JSONValueConverter, you don't need to call + // this directly. Instead consider using converter functions above. + static void RegisterJSONConverter( + base::JSONValueConverter<DisplayLayout>* converter); + + Position position; + + // The offset of the position of the secondary display. The offset is + // based on the top/left edge of the primary display. + int offset; +}; + +// DisplayController owns and maintains RootWindows for each attached +// display, keeping them in sync with display configuration changes. +class ASH_EXPORT DisplayController : public aura::DisplayObserver { + public: DisplayController(); virtual ~DisplayController(); @@ -61,15 +87,16 @@ class ASH_EXPORT DisplayController : public aura::DisplayObserver { // mode, this return a RootWindowController for the primary root window only. std::vector<internal::RootWindowController*> GetAllRootWindowControllers(); - SecondaryDisplayLayout secondary_display_layout() const { - return secondary_display_layout_; + const DisplayLayout& default_display_layout() const { + return default_display_layout_; } - void SetSecondaryDisplayLayout(SecondaryDisplayLayout layout); + void SetDefaultDisplayLayout(const DisplayLayout& layout); - int secondary_display_offset() const { - return secondary_display_offset_; - } - void SetSecondaryDisplayOffset(int offset); + // Sets/gets the display layout for the specified display name. Getter + // returns the default value in case it doesn't have its own layout yet. + void SetLayoutForDisplayName(const std::string& name, + const DisplayLayout& layout); + const DisplayLayout& GetLayoutForDisplayName(const std::string& name); // aura::DisplayObserver overrides: virtual void OnDisplayBoundsChanged( @@ -87,16 +114,15 @@ class ASH_EXPORT DisplayController : public aura::DisplayObserver { // The mapping from display ID to its root window. std::map<int64, aura::RootWindow*> root_windows_; - SecondaryDisplayLayout secondary_display_layout_; + // The default display layout. + DisplayLayout default_display_layout_; - // The offset of the position of the secondary display. The offset is - // based on the top/left edge of the primary display. - int secondary_display_offset_; + // Per-device display layout. + std::map<std::string, DisplayLayout> secondary_layouts_; DISALLOW_COPY_AND_ASSIGN(DisplayController); }; -} // namespace internal } // namespace ash #endif // ASH_DISPLAY_DISPLAY_CONTROLLER_H_ |