| Index: ui/gfx/screen_win.cc
|
| diff --git a/ui/gfx/screen_win.cc b/ui/gfx/screen_win.cc
|
| index ea74c8245f742ce70071d8520827b85a56d92830..d5f057a577bf7136db35a7724a75ccc9cf40de2a 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,16 @@ MONITORINFO GetMonitorInfoForMonitor(HMONITOR monitor) {
|
| return monitor_info;
|
| }
|
|
|
| +void EmptyMonitor(gfx::Monitor* monitor_out) {
|
| + monitor_out->set_bounds(gfx::Rect());
|
| + monitor_out->set_work_area(gfx::Rect());
|
| +}
|
| +
|
| +void CopyMonitor(MONITORINFO& monitor_info, gfx::Monitor* monitor_out) {
|
| + monitor_out->set_bounds(gfx::Rect(monitor_info.rcMonitor));
|
| + monitor_out->set_work_area(gfx::Rect(monitor_info.rcWork));
|
| +}
|
| +
|
| } // namespace
|
|
|
| namespace gfx {
|
| @@ -27,79 +40,55 @@ 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
|
| +int Screen::GetNumMonitors() {
|
| + return GetSystemMetrics(SM_CMONITORS);
|
| }
|
|
|
| // static
|
| -gfx::Rect Screen::GetMonitorAreaNearestWindow(gfx::NativeWindow window) {
|
| +void Screen::GetMonitorNearestWindow(gfx::NativeWindow window,
|
| + gfx::Monitor* monitor_out) {
|
| MONITORINFO monitor_info;
|
| monitor_info.cbSize = sizeof(monitor_info);
|
| GetMonitorInfo(MonitorFromWindow(window, MONITOR_DEFAULTTONEAREST),
|
| &monitor_info);
|
| - return gfx::Rect(monitor_info.rcMonitor);
|
| + CopyMonitor(monitor_info, monitor_out);
|
| }
|
|
|
| -static gfx::Rect GetMonitorAreaOrWorkAreaNearestPoint(const gfx::Point& point,
|
| - bool work_area) {
|
| +// static
|
| +void Screen::GetMonitorNearestPoint(const gfx::Point& point,
|
| + gfx::Monitor* monitor_out) {
|
| 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();
|
| -}
|
| -
|
| -// static
|
| -gfx::Rect Screen::GetMonitorWorkAreaNearestPoint(const gfx::Point& point) {
|
| - return GetMonitorAreaOrWorkAreaNearestPoint(point, true);
|
| + CopyMonitor(mi, monitor_out);
|
| + else
|
| + EmptyMonitor(monitor_out);
|
| }
|
|
|
| // static
|
| -gfx::Rect Screen::GetMonitorAreaNearestPoint(const gfx::Point& point) {
|
| - return GetMonitorAreaOrWorkAreaNearestPoint(point, false);
|
| +void Screen::GetPrimaryMonitor(gfx::Monitor* monitor_out) {
|
| + MONITORINFO mi = GetMonitorInfoForMonitor(
|
| + MonitorFromWindow(NULL, MONITOR_DEFAULTTOPRIMARY));
|
| + CopyMonitor(mi, monitor_out);
|
| + DCHECK_EQ(GetSystemMetrics(SM_CXSCREEN), monitor_out->size().width());
|
| + DCHECK_EQ(GetSystemMetrics(SM_CYSCREEN), monitor_out->size().height());
|
| }
|
|
|
| // 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) {
|
| +void Screen::GetMonitorMatching(const gfx::Rect& match_rect,
|
| + gfx::Monitor* monitor_out) {
|
| 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);
|
| + CopyMonitor(monitor_info, monitor_out);
|
| }
|
|
|
| } // namespace gfx
|
|
|