diff options
Diffstat (limited to 'ui/gfx/screen_win.cc')
-rw-r--r-- | ui/gfx/screen_win.cc | 85 |
1 files changed, 34 insertions, 51 deletions
diff --git a/ui/gfx/screen_win.cc b/ui/gfx/screen_win.cc index ea74c82..4487c61 100644 --- a/ui/gfx/screen_win.cc +++ b/ui/gfx/screen_win.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -6,6 +6,9 @@ #include <windows.h> +#include "base/logging.h" +#include "ui/gfx/monitor.h" + namespace { MONITORINFO GetMonitorInfoForMonitor(HMONITOR monitor) { @@ -15,6 +18,13 @@ MONITORINFO GetMonitorInfoForMonitor(HMONITOR monitor) { return monitor_info; } +gfx::Monitor GetMonitor(MONITORINFO& monitor_info) { + // TODO(oshima): Implement ID and Observer. + gfx::Monitor monitor(0, gfx::Rect(monitor_info.rcMonitor)); + monitor.set_work_area(gfx::Rect(monitor_info.rcWork)); + return monitor; +} + } // namespace namespace gfx { @@ -27,79 +37,52 @@ gfx::Point Screen::GetCursorScreenPoint() { } // static -gfx::Rect Screen::GetMonitorWorkAreaNearestWindow(gfx::NativeWindow window) { - MONITORINFO monitor_info; - monitor_info.cbSize = sizeof(monitor_info); - GetMonitorInfo(MonitorFromWindow(window, MONITOR_DEFAULTTONEAREST), - &monitor_info); - return gfx::Rect(monitor_info.rcWork); +gfx::NativeWindow Screen::GetWindowAtCursorScreenPoint() { + POINT location; + return GetCursorPos(&location) ? WindowFromPoint(location) : NULL; } // static -gfx::Rect Screen::GetMonitorAreaNearestWindow(gfx::NativeWindow window) { +int Screen::GetNumMonitors() { + return GetSystemMetrics(SM_CMONITORS); +} + +// static +gfx::Monitor Screen::GetMonitorNearestWindow(gfx::NativeWindow window) { MONITORINFO monitor_info; monitor_info.cbSize = sizeof(monitor_info); GetMonitorInfo(MonitorFromWindow(window, MONITOR_DEFAULTTONEAREST), &monitor_info); - return gfx::Rect(monitor_info.rcMonitor); + return GetMonitor(monitor_info); } -static gfx::Rect GetMonitorAreaOrWorkAreaNearestPoint(const gfx::Point& point, - bool work_area) { +// static +gfx::Monitor Screen::GetMonitorNearestPoint(const gfx::Point& point) { POINT initial_loc = { point.x(), point.y() }; HMONITOR monitor = MonitorFromPoint(initial_loc, MONITOR_DEFAULTTONEAREST); MONITORINFO mi = {0}; mi.cbSize = sizeof(mi); if (monitor && GetMonitorInfo(monitor, &mi)) - return gfx::Rect(work_area ? mi.rcWork : mi.rcMonitor); - return gfx::Rect(); + return GetMonitor(mi); + return gfx::Monitor(); } // static -gfx::Rect Screen::GetMonitorWorkAreaNearestPoint(const gfx::Point& point) { - return GetMonitorAreaOrWorkAreaNearestPoint(point, true); +gfx::Monitor Screen::GetPrimaryMonitor() { + MONITORINFO mi = GetMonitorInfoForMonitor( + MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY)); + gfx::Monitor monitor = GetMonitor(mi); + DCHECK_EQ(GetSystemMetrics(SM_CXSCREEN), monitor.size().width()); + DCHECK_EQ(GetSystemMetrics(SM_CYSCREEN), monitor.size().height()); + return monitor; } // static -gfx::Rect Screen::GetMonitorAreaNearestPoint(const gfx::Point& point) { - return GetMonitorAreaOrWorkAreaNearestPoint(point, false); -} - -// static -gfx::Rect Screen::GetPrimaryMonitorWorkArea() { - return gfx::Rect(GetMonitorInfoForMonitor(MonitorFromWindow(NULL, - MONITOR_DEFAULTTOPRIMARY)).rcWork); -} - -// static -gfx::Rect Screen::GetPrimaryMonitorBounds() { - return gfx::Rect(GetMonitorInfoForMonitor(MonitorFromWindow(NULL, - MONITOR_DEFAULTTOPRIMARY)).rcMonitor); -} - -// static -gfx::Rect Screen::GetMonitorWorkAreaMatching(const gfx::Rect& match_rect) { +gfx::Monitor Screen::GetMonitorMatching(const gfx::Rect& match_rect) { RECT other_bounds_rect = match_rect.ToRECT(); MONITORINFO monitor_info = GetMonitorInfoForMonitor(MonitorFromRect( &other_bounds_rect, MONITOR_DEFAULTTONEAREST)); - return gfx::Rect(monitor_info.rcWork); -} - -// static -gfx::NativeWindow Screen::GetWindowAtCursorScreenPoint() { - POINT location; - return GetCursorPos(&location) ? WindowFromPoint(location) : NULL; -} - -// static -gfx::Size Screen::GetPrimaryMonitorSize() { - return gfx::Size(GetSystemMetrics(SM_CXSCREEN), - GetSystemMetrics(SM_CYSCREEN)); -} - -// static -int Screen::GetNumMonitors() { - return GetSystemMetrics(SM_CMONITORS); + return GetMonitor(monitor_info); } } // namespace gfx |