summaryrefslogtreecommitdiffstats
path: root/ui/aura/display_manager.h
blob: 796c6cf16303f3babfe38e8033a9117c2c1926bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// 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;

  // Obsoleted: Do not use in new code.
  // Returns the display at |index|. The display at 0 is
  // no longer 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;

  // Returns the human-readable name for the display specified by |display|.
  virtual std::string GetDisplayNameFor(const gfx::Display& display) = 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_