• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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_SCREEN_ASH_H_
6 #define ASH_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 
13 namespace gfx {
14 class Rect;
15 }
16 
17 namespace ash {
18 
19 // Aura implementation of gfx::Screen. Implemented here to avoid circular
20 // dependencies.
21 class ASH_EXPORT ScreenAsh : public gfx::Screen {
22  public:
23   ScreenAsh();
24   virtual ~ScreenAsh();
25 
26   // Finds the display that contains |point| in screeen coordinates.
27   // Returns invalid display if there is no display that can satisfy
28   // the condition.
29   static gfx::Display FindDisplayContainingPoint(const gfx::Point& point);
30 
31   // Returns the bounds for maximized windows in parent coordinates.
32   // Maximized windows trigger auto-hiding the shelf.
33   static gfx::Rect GetMaximizedWindowBoundsInParent(aura::Window* window);
34 
35   // Returns the display bounds in parent coordinates.
36   static gfx::Rect GetDisplayBoundsInParent(aura::Window* window);
37 
38   // Returns the display's work area bounds in parent coordinates.
39   static gfx::Rect GetDisplayWorkAreaBoundsInParent(aura::Window* window);
40 
41   // Converts |rect| from |window|'s coordinates to the virtual screen
42   // coordinates.
43   static gfx::Rect ConvertRectToScreen(aura::Window* window,
44                                        const gfx::Rect& rect);
45 
46   // Converts |rect| from virtual screen coordinates to the |window|'s
47   // coordinates.
48   static gfx::Rect ConvertRectFromScreen(aura::Window* window,
49                                          const gfx::Rect& rect);
50 
51   // Returns a gfx::Display object for secondary display. Returns
52   // invalid display if there is no secondary display connected.
53   static const gfx::Display& GetSecondaryDisplay();
54 
55   // Returns a gfx::Display object for the specified id.  Returns
56   // invalid display if no such display is connected.
57   static const gfx::Display& GetDisplayForId(int64 display_id);
58 
59   // Notifies observers of display configuration changes.
60   void NotifyBoundsChanged(const gfx::Display& display);
61   void NotifyDisplayAdded(const gfx::Display& display);
62   void NotifyDisplayRemoved(const gfx::Display& display);
63 
64  protected:
65   // gfx::Screen overrides:
66   virtual bool IsDIPEnabled() OVERRIDE;
67   virtual gfx::Point GetCursorScreenPoint() OVERRIDE;
68   virtual gfx::NativeWindow GetWindowUnderCursor() OVERRIDE;
69   virtual gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point)
70       OVERRIDE;
71   virtual int GetNumDisplays() const OVERRIDE;
72   virtual std::vector<gfx::Display> GetAllDisplays() const OVERRIDE;
73   virtual gfx::Display GetDisplayNearestWindow(
74       gfx::NativeView view) const OVERRIDE;
75   virtual gfx::Display GetDisplayNearestPoint(
76       const gfx::Point& point) const OVERRIDE;
77   virtual gfx::Display GetDisplayMatching(
78       const gfx::Rect& match_rect) const OVERRIDE;
79   virtual gfx::Display GetPrimaryDisplay() const OVERRIDE;
80   virtual void AddObserver(gfx::DisplayObserver* observer) OVERRIDE;
81   virtual void RemoveObserver(gfx::DisplayObserver* observer) OVERRIDE;
82 
83  private:
84   ObserverList<gfx::DisplayObserver> observers_;
85 
86   DISALLOW_COPY_AND_ASSIGN(ScreenAsh);
87 };
88 
89 }  // namespace ash
90 
91 #endif  // ASH_SCREEN_ASH_H_
92