blob: 707d8c2c31fbda3d12ce5cae4fd3d4cfaabfbd8b [file] [log] [blame]
// 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 <string>
#include <vector>
#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<gfx::Display>& 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<DisplayObserver> observers_;
DISALLOW_COPY_AND_ASSIGN(DisplayManager);
};
} // namespace aura
#endif // UI_AURA_DISPLAY_MANAGER_H_