screen_ash.h revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef ASH_DISPLAY_SCREEN_ASH_H_
6#define ASH_DISPLAY_SCREEN_ASH_H_
7
8#include "ash/ash_export.h"
9#include "base/compiler_specific.h"
10#include "base/observer_list.h"
11#include "ui/gfx/screen.h"
12
13namespace gfx {
14class Rect;
15}
16
17namespace ash {
18namespace  internal {
19class DisplayManager;
20}
21
22// Aura implementation of gfx::Screen. Implemented here to avoid circular
23// dependencies.
24class ASH_EXPORT ScreenAsh : public gfx::Screen {
25 public:
26  ScreenAsh();
27  virtual ~ScreenAsh();
28
29  // Finds the display that contains |point| in screeen coordinates.
30  // Returns invalid display if there is no display that can satisfy
31  // the condition.
32  static gfx::Display FindDisplayContainingPoint(const gfx::Point& point);
33
34  // Returns the bounds for maximized windows in parent coordinates.
35  // Maximized windows trigger auto-hiding the shelf.
36  static gfx::Rect GetMaximizedWindowBoundsInParent(aura::Window* window);
37
38  // Returns the display bounds in parent coordinates.
39  static gfx::Rect GetDisplayBoundsInParent(aura::Window* window);
40
41  // Returns the display's work area bounds in parent coordinates.
42  static gfx::Rect GetDisplayWorkAreaBoundsInParent(aura::Window* window);
43
44  // Converts |rect| from |window|'s coordinates to the virtual screen
45  // coordinates.
46  static gfx::Rect ConvertRectToScreen(aura::Window* window,
47                                       const gfx::Rect& rect);
48
49  // Converts |rect| from virtual screen coordinates to the |window|'s
50  // coordinates.
51  static gfx::Rect ConvertRectFromScreen(aura::Window* window,
52                                         const gfx::Rect& rect);
53
54  // Returns a gfx::Display object for secondary display. Returns
55  // invalid display if there is no secondary display connected.
56  static const gfx::Display& GetSecondaryDisplay();
57
58  // Returns a gfx::Display object for the specified id.  Returns
59  // invalid display if no such display is connected.
60  static const gfx::Display& GetDisplayForId(int64 display_id);
61
62  // gfx::Screen overrides:
63  virtual bool IsDIPEnabled() OVERRIDE;
64  virtual gfx::Point GetCursorScreenPoint() OVERRIDE;
65  virtual gfx::NativeWindow GetWindowUnderCursor() OVERRIDE;
66  virtual gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point)
67      OVERRIDE;
68  virtual int GetNumDisplays() const OVERRIDE;
69  virtual std::vector<gfx::Display> GetAllDisplays() const OVERRIDE;
70  virtual gfx::Display GetDisplayNearestWindow(
71      gfx::NativeView view) const OVERRIDE;
72  virtual gfx::Display GetDisplayNearestPoint(
73      const gfx::Point& point) const OVERRIDE;
74  virtual gfx::Display GetDisplayMatching(
75      const gfx::Rect& match_rect) const OVERRIDE;
76  virtual gfx::Display GetPrimaryDisplay() const OVERRIDE;
77  virtual void AddObserver(gfx::DisplayObserver* observer) OVERRIDE;
78  virtual void RemoveObserver(gfx::DisplayObserver* observer) OVERRIDE;
79
80 private:
81  friend class internal::DisplayManager;
82
83  // Notifies observers of display configuration changes.
84  void NotifyBoundsChanged(const gfx::Display& display);
85  void NotifyDisplayAdded(const gfx::Display& display);
86  void NotifyDisplayRemoved(const gfx::Display& display);
87
88  // Creates a screen that can be used during shutdown.
89  // It simply has a copy of the displays.
90  gfx::Screen* CloneForShutdown();
91
92  ObserverList<gfx::DisplayObserver> observers_;
93
94  DISALLOW_COPY_AND_ASSIGN(ScreenAsh);
95};
96
97}  // namespace ash
98
99#endif  // ASH_DISPLAY_SCREEN_ASH_H_
100