diff options
Diffstat (limited to 'views/widget/monitor_win.cc')
-rw-r--r-- | views/widget/monitor_win.cc | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/views/widget/monitor_win.cc b/views/widget/monitor_win.cc new file mode 100644 index 0000000..d840893 --- /dev/null +++ b/views/widget/monitor_win.cc @@ -0,0 +1,37 @@ +// Copyright (c) 2011 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. + +#include "views/widget/monitor_win.h" + +#include <shellapi.h> + +#include "base/logging.h" +#include "ui/gfx/rect.h" + +namespace views { + +gfx::Rect GetMonitorBoundsForRect(const gfx::Rect& rect) { + RECT p_rect = rect.ToRECT(); + HMONITOR monitor = MonitorFromRect(&p_rect, MONITOR_DEFAULTTONEAREST); + if (monitor) { + MONITORINFO mi = {0}; + mi.cbSize = sizeof(mi); + GetMonitorInfo(monitor, &mi); + return gfx::Rect(mi.rcWork); + } + NOTREACHED(); + return gfx::Rect(); +} + +HWND GetTopmostAutoHideTaskbarForEdge(UINT edge, HMONITOR monitor) { + APPBARDATA taskbar_data = { sizeof APPBARDATA, NULL, 0, edge }; + HWND taskbar = reinterpret_cast<HWND>(SHAppBarMessage(ABM_GETAUTOHIDEBAR, + &taskbar_data)); + return (::IsWindow(taskbar) && (monitor != NULL) && + (MonitorFromWindow(taskbar, MONITOR_DEFAULTTONULL) == monitor) && + (GetWindowLong(taskbar, GWL_EXSTYLE) & WS_EX_TOPMOST)) ? + taskbar : NULL; +} + +} // namespace views |