Index: chrome/browser/window_sizer_win.cc |
=================================================================== |
--- chrome/browser/window_sizer_win.cc (revision 68008) |
+++ chrome/browser/window_sizer_win.cc (working copy) |
@@ -1,108 +0,0 @@ |
-// Copyright (c) 2009 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 "chrome/browser/window_sizer.h" |
- |
-#include "chrome/browser/browser_list.h" |
-#include "chrome/browser/browser_window.h" |
-#include "chrome/browser/ui/browser.h" |
- |
-// How much horizontal and vertical offset there is between newly |
-// opened windows. |
-const int WindowSizer::kWindowTilePixels = 10; |
- |
-// An implementation of WindowSizer::MonitorInfoProvider that gets the actual |
-// monitor information from Windows. |
-class DefaultMonitorInfoProvider : public WindowSizer::MonitorInfoProvider { |
- public: |
- DefaultMonitorInfoProvider() { } |
- |
- // Overridden from WindowSizer::MonitorInfoProvider: |
- virtual gfx::Rect GetPrimaryMonitorWorkArea() const { |
- return gfx::Rect(GetMonitorInfoForMonitor(MonitorFromWindow(NULL, |
- MONITOR_DEFAULTTOPRIMARY)).rcWork); |
- } |
- |
- virtual gfx::Rect GetPrimaryMonitorBounds() const { |
- return gfx::Rect(GetMonitorInfoForMonitor(MonitorFromWindow(NULL, |
- MONITOR_DEFAULTTOPRIMARY)).rcMonitor); |
- } |
- |
- virtual gfx::Rect GetMonitorWorkAreaMatching( |
- const gfx::Rect& match_rect) const { |
- RECT other_bounds_rect = match_rect.ToRECT(); |
- MONITORINFO monitor_info = GetMonitorInfoForMonitor(MonitorFromRect( |
- &other_bounds_rect, MONITOR_DEFAULTTONEAREST)); |
- return gfx::Rect(monitor_info.rcWork); |
- } |
- |
- virtual gfx::Point GetBoundsOffsetMatching( |
- const gfx::Rect& match_rect) const { |
- RECT other_bounds_rect = match_rect.ToRECT(); |
- MONITORINFO monitor_info = GetMonitorInfoForMonitor(MonitorFromRect( |
- &other_bounds_rect, MONITOR_DEFAULTTONEAREST)); |
- return gfx::Point(monitor_info.rcWork.left - monitor_info.rcMonitor.left, |
- monitor_info.rcWork.top - monitor_info.rcMonitor.top); |
- } |
- |
- void UpdateWorkAreas() { |
- work_areas_.clear(); |
- EnumDisplayMonitors(NULL, NULL, |
- &DefaultMonitorInfoProvider::MonitorEnumProc, |
- reinterpret_cast<LPARAM>(&work_areas_)); |
- } |
- |
- private: |
- // A callback for EnumDisplayMonitors that records the work area of the |
- // current monitor in the enumeration. |
- static BOOL CALLBACK MonitorEnumProc(HMONITOR monitor, |
- HDC monitor_dc, |
- LPRECT monitor_rect, |
- LPARAM data) { |
- reinterpret_cast<std::vector<gfx::Rect>*>(data)->push_back( |
- gfx::Rect(GetMonitorInfoForMonitor(monitor).rcWork)); |
- return TRUE; |
- } |
- |
- static MONITORINFO GetMonitorInfoForMonitor(HMONITOR monitor) { |
- MONITORINFO monitor_info = { 0 }; |
- monitor_info.cbSize = sizeof(monitor_info); |
- GetMonitorInfo(monitor, &monitor_info); |
- return monitor_info; |
- } |
- |
- DISALLOW_COPY_AND_ASSIGN(DefaultMonitorInfoProvider); |
-}; |
- |
-// static |
-WindowSizer::MonitorInfoProvider* |
-WindowSizer::CreateDefaultMonitorInfoProvider() { |
- return new DefaultMonitorInfoProvider(); |
-} |
- |
-// static |
-gfx::Point WindowSizer::GetDefaultPopupOrigin(const gfx::Size& size) { |
- RECT area; |
- SystemParametersInfo(SPI_GETWORKAREA, 0, &area, 0); |
- gfx::Point corner(area.left, area.top); |
- |
- if (Browser* b = BrowserList::GetLastActive()) { |
- RECT browser; |
- HWND window = reinterpret_cast<HWND>(b->window()->GetNativeHandle()); |
- if (GetWindowRect(window, &browser)) { |
- // Limit to not overflow the work area right and bottom edges. |
- gfx::Point limit( |
- std::min(browser.left + kWindowTilePixels, area.right-size.width()), |
- std::min(browser.top + kWindowTilePixels, area.bottom-size.height()) |
- ); |
- // Adjust corner to now overflow the work area left and top edges, so |
- // that if a popup does not fit the title-bar is remains visible. |
- corner = gfx::Point( |
- std::max(corner.x(), limit.x()), |
- std::max(corner.y(), limit.y()) |
- ); |
- } |
- } |
- return corner; |
-} |