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 UI_GFX_SCREEN_H_ 6 #define UI_GFX_SCREEN_H_ 7 8 #include <vector> 9 10 #include "base/basictypes.h" 11 #include "ui/gfx/display.h" 12 #include "ui/gfx/gfx_export.h" 13 #include "ui/gfx/native_widget_types.h" 14 #include "ui/gfx/point.h" 15 #include "ui/gfx/screen_type_delegate.h" 16 17 namespace gfx { 18 class DisplayObserver; 19 class Rect; 20 21 // A utility class for getting various info about screen size, displays, 22 // cursor position, etc. 23 // 24 // Note that this class does not represent an individual display connected to a 25 // computer -- see the Display class for that. A single Screen object exists on 26 // most operating systems regardless of the number of connected displays. On 27 // Windows 8, two Screens exist: one for Metro UI and another for the desktop. 28 class GFX_EXPORT Screen { 29 public: 30 // Retrieves the Screen that the specified NativeView belongs to. A value of 31 // NULL is treated as |SCREEN_TYPE_NATIVE|. 32 static Screen* GetScreenFor(NativeView view); 33 34 // Returns the SCREEN_TYPE_NATIVE Screen. This should be used with caution, 35 // as it is likely to be incorrect for code that runs on Windows. 36 static Screen* GetNativeScreen(); 37 38 // Sets the global screen for a particular screen type. Only the _NATIVE 39 // ScreenType must be provided. 40 static void SetScreenInstance(ScreenType type, Screen* instance); 41 42 // Returns the global screen for a particular type. Types other than _NATIVE 43 // may be NULL. 44 static Screen* GetScreenByType(ScreenType type); 45 46 // Sets the global ScreenTypeDelegate. May be left unset if the platform 47 // uses only the _NATIVE ScreenType. 48 static void SetScreenTypeDelegate(ScreenTypeDelegate* delegate); 49 50 Screen(); 51 virtual ~Screen(); 52 53 // Returns true if DIP is enabled. 54 virtual bool IsDIPEnabled() = 0; 55 56 // Returns the current absolute position of the mouse pointer. 57 virtual gfx::Point GetCursorScreenPoint() = 0; 58 59 // Returns the window under the cursor. 60 virtual gfx::NativeWindow GetWindowUnderCursor() = 0; 61 62 // Returns the window at the given screen coordinate |point|. 63 virtual gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) = 0; 64 65 // Returns the number of displays. 66 // Mirrored displays are excluded; this method is intended to return the 67 // number of distinct, usable displays. 68 virtual int GetNumDisplays() const = 0; 69 70 // Returns the list of displays that are currently available. 71 virtual std::vector<gfx::Display> GetAllDisplays() const = 0; 72 73 // Returns the display nearest the specified window. 74 virtual gfx::Display GetDisplayNearestWindow(NativeView view) const = 0; 75 76 // Returns the display nearest the specified point. 77 virtual gfx::Display GetDisplayNearestPoint( 78 const gfx::Point& point) const = 0; 79 80 // Returns the display that most closely intersects the provided bounds. 81 virtual gfx::Display GetDisplayMatching( 82 const gfx::Rect& match_rect) const = 0; 83 84 // Returns the primary display. 85 virtual gfx::Display GetPrimaryDisplay() const = 0; 86 87 // Adds/Removes display observers. 88 virtual void AddObserver(DisplayObserver* observer) = 0; 89 virtual void RemoveObserver(DisplayObserver* observer) = 0; 90 91 private: 92 DISALLOW_COPY_AND_ASSIGN(Screen); 93 }; 94 95 Screen* CreateNativeScreen(); 96 97 } // namespace gfx 98 99 #endif // UI_GFX_SCREEN_H_ 100