// Copyright (c) 2012 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 UI_AURA_DISPLAY_MANAGER_H_ #define UI_AURA_DISPLAY_MANAGER_H_ #include #include #include "base/basictypes.h" #include "base/observer_list.h" #include "ui/aura/aura_export.h" namespace gfx { class Display; class Point; class Rect; class Size; } namespace aura { class DisplayObserver; class RootWindow; class Window; // DisplayManager creates, deletes and updates Display objects when // display configuration changes, and notifies DisplayObservers about // the change. This is owned by Env and its lifetime is longer than // any windows. class AURA_EXPORT DisplayManager { public: static void set_use_fullscreen_host_window(bool use_fullscreen) { use_fullscreen_host_window_ = use_fullscreen; } static bool use_fullscreen_host_window() { return use_fullscreen_host_window_; } // Creates a display from string spec. 100+200-1440x800 creates display // whose size is 1440x800 at the location (100, 200) in screen's coordinates. // The location can be omitted and be just "1440x800", which creates // display at the origin of the screen. An empty string creates // the display with default size. // The device scale factor can be specified by "*", like "1280x780*2", // or will use the value of |gfx::Display::GetForcedDeviceScaleFactor()| if // --force-device-scale-factor is specified. static gfx::Display CreateDisplayFromSpec(const std::string& spec); // A utility function to create a root window for primary display. static RootWindow* CreateRootWindowForPrimaryDisplay(); DisplayManager(); virtual ~DisplayManager(); // Adds/removes DisplayObservers. void AddObserver(DisplayObserver* observer); void RemoveObserver(DisplayObserver* observer); // Called when display configuration has changed. The new display // configurations is passed as a vector of Display object, which // contains each display's new infomration. virtual void OnNativeDisplaysChanged( const std::vector& display) = 0; // Create a root window for given |display|. virtual RootWindow* CreateRootWindowForDisplay( const gfx::Display& display) = 0; // Returns the display at |index|. The display at 0 is considered "primary". virtual gfx::Display* GetDisplayAt(size_t index) = 0; virtual size_t GetNumDisplays() const = 0; // Returns the display object nearest given |window|. virtual const gfx::Display& GetDisplayNearestWindow( const Window* window) const = 0; // Returns the display object nearest given |point|. virtual const gfx::Display& GetDisplayNearestPoint( const gfx::Point& point) const = 0; // Returns the display that most closely intersects |match_rect|. virtual const gfx::Display& GetDisplayMatching( const gfx::Rect& match_rect) const = 0; protected: // Calls observers' OnDisplayBoundsChanged methods. void NotifyBoundsChanged(const gfx::Display& display); void NotifyDisplayAdded(const gfx::Display& display); void NotifyDisplayRemoved(const gfx::Display& display); private: // If set before the RootWindow is created, the host window will cover the // entire display. Note that this can still be overridden via the // switches::kAuraHostWindowSize flag. static bool use_fullscreen_host_window_; ObserverList observers_; DISALLOW_COPY_AND_ASSIGN(DisplayManager); }; } // namespace aura #endif // UI_AURA_DISPLAY_MANAGER_H_