Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(233)

Unified Diff: ui/base/win/hwnd_util.cc

Issue 23769011: Move a bunch of windows stuff from ui/base/win to ui/gfx/win (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Moar bustage. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/base/win/hwnd_util.h ('k') | ui/base/win/mouse_wheel_util.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/win/hwnd_util.cc
diff --git a/ui/base/win/hwnd_util.cc b/ui/base/win/hwnd_util.cc
deleted file mode 100644
index 0a8dfb26cc9f6e79d49e68cc1c025fa3cfa648f1..0000000000000000000000000000000000000000
--- a/ui/base/win/hwnd_util.cc
+++ /dev/null
@@ -1,214 +0,0 @@
-// 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.
-
-#include "ui/base/win/hwnd_util.h"
-
-#include "base/i18n/rtl.h"
-#include "base/strings/string_util.h"
-#include "base/win/metro.h"
-#include "base/win/win_util.h"
-#include "ui/gfx/point.h"
-#include "ui/gfx/rect.h"
-#include "ui/gfx/size.h"
-
-namespace ui {
-
-namespace {
-
-// Adjust the window to fit.
-void AdjustWindowToFit(HWND hwnd, const RECT& bounds, bool fit_to_monitor) {
- if (fit_to_monitor) {
- // Get the monitor.
- HMONITOR hmon = MonitorFromRect(&bounds, MONITOR_DEFAULTTONEAREST);
- if (hmon) {
- MONITORINFO mi;
- mi.cbSize = sizeof(mi);
- base::win::GetMonitorInfoWrapper(hmon, &mi);
- gfx::Rect window_rect(bounds);
- gfx::Rect monitor_rect(mi.rcWork);
- gfx::Rect new_window_rect = window_rect;
- new_window_rect.AdjustToFit(monitor_rect);
- if (new_window_rect != window_rect) {
- // Window doesn't fit on monitor, move and possibly resize.
- SetWindowPos(hwnd, 0, new_window_rect.x(), new_window_rect.y(),
- new_window_rect.width(), new_window_rect.height(),
- SWP_NOACTIVATE | SWP_NOZORDER);
- return;
- }
- // Else fall through.
- } else {
- NOTREACHED() << "Unable to find default monitor";
- // Fall through.
- }
- } // Else fall through.
-
- // The window is not being fit to monitor, or the window fits on the monitor
- // as is, or we have no monitor info; reset the bounds.
- ::SetWindowPos(hwnd, 0, bounds.left, bounds.top,
- bounds.right - bounds.left, bounds.bottom - bounds.top,
- SWP_NOACTIVATE | SWP_NOZORDER);
-}
-
-} // namespace
-
-string16 GetClassName(HWND window) {
- // GetClassNameW will return a truncated result (properly null terminated) if
- // the given buffer is not large enough. So, it is not possible to determine
- // that we got the entire class name if the result is exactly equal to the
- // size of the buffer minus one.
- DWORD buffer_size = MAX_PATH;
- while (true) {
- std::wstring output;
- DWORD size_ret =
- GetClassNameW(window, WriteInto(&output, buffer_size), buffer_size);
- if (size_ret == 0)
- break;
- if (size_ret < (buffer_size - 1)) {
- output.resize(size_ret);
- return output;
- }
- buffer_size *= 2;
- }
- return std::wstring(); // error
-}
-
-#pragma warning(push)
-#pragma warning(disable:4312 4244)
-
-WNDPROC SetWindowProc(HWND hwnd, WNDPROC proc) {
- // The reason we don't return the SetwindowLongPtr() value is that it returns
- // the orignal window procedure and not the current one. I don't know if it is
- // a bug or an intended feature.
- WNDPROC oldwindow_proc =
- reinterpret_cast<WNDPROC>(GetWindowLongPtr(hwnd, GWLP_WNDPROC));
- SetWindowLongPtr(hwnd, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(proc));
- return oldwindow_proc;
-}
-
-void* SetWindowUserData(HWND hwnd, void* user_data) {
- return
- reinterpret_cast<void*>(SetWindowLongPtr(hwnd, GWLP_USERDATA,
- reinterpret_cast<LONG_PTR>(user_data)));
-}
-
-void* GetWindowUserData(HWND hwnd) {
- DWORD process_id = 0;
- DWORD thread_id = GetWindowThreadProcessId(hwnd, &process_id);
- // A window outside the current process needs to be ignored.
- if (process_id != ::GetCurrentProcessId())
- return NULL;
- return reinterpret_cast<void*>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
-}
-
-#pragma warning(pop)
-
-bool DoesWindowBelongToActiveWindow(HWND window) {
- DCHECK(window);
- HWND top_window = ::GetAncestor(window, GA_ROOT);
- if (!top_window)
- return false;
-
- HWND active_top_window = ::GetAncestor(::GetForegroundWindow(), GA_ROOT);
- return (top_window == active_top_window);
-}
-
-void CenterAndSizeWindow(HWND parent,
- HWND window,
- const gfx::Size& pref) {
- DCHECK(window && pref.width() > 0 && pref.height() > 0);
-
- // Calculate the ideal bounds.
- RECT window_bounds;
- RECT center_bounds = {0};
- if (parent) {
- // If there is a parent, center over the parents bounds.
- ::GetWindowRect(parent, &center_bounds);
- }
-
- if (::IsRectEmpty(&center_bounds)) {
- // No parent or no parent rect. Center over the monitor the window is on.
- HMONITOR monitor = MonitorFromWindow(window, MONITOR_DEFAULTTONEAREST);
- if (monitor) {
- MONITORINFO mi = {0};
- mi.cbSize = sizeof(mi);
- base::win::GetMonitorInfoWrapper(monitor, &mi);
- center_bounds = mi.rcWork;
- } else {
- NOTREACHED() << "Unable to get default monitor";
- }
- }
-
- window_bounds.left = center_bounds.left;
- if (pref.width() < (center_bounds.right - center_bounds.left)) {
- window_bounds.left +=
- (center_bounds.right - center_bounds.left - pref.width()) / 2;
- }
- window_bounds.right = window_bounds.left + pref.width();
-
- window_bounds.top = center_bounds.top;
- if (pref.height() < (center_bounds.bottom - center_bounds.top)) {
- window_bounds.top +=
- (center_bounds.bottom - center_bounds.top - pref.height()) / 2;
- }
- window_bounds.bottom = window_bounds.top + pref.height();
-
- // If we're centering a child window, we are positioning in client
- // coordinates, and as such we need to offset the target rectangle by the
- // position of the parent window.
- if (::GetWindowLong(window, GWL_STYLE) & WS_CHILD) {
- DCHECK(parent && ::GetParent(window) == parent);
- POINT topleft = { window_bounds.left, window_bounds.top };
- ::MapWindowPoints(HWND_DESKTOP, parent, &topleft, 1);
- window_bounds.left = topleft.x;
- window_bounds.top = topleft.y;
- window_bounds.right = window_bounds.left + pref.width();
- window_bounds.bottom = window_bounds.top + pref.height();
- }
-
- AdjustWindowToFit(window, window_bounds, !parent);
-}
-
-void CheckWindowCreated(HWND hwnd) {
- if (!hwnd)
- LOG_GETLASTERROR(FATAL);
-}
-
-void ShowSystemMenu(HWND window) {
- RECT rect;
- GetWindowRect(window, &rect);
- gfx::Point point = gfx::Point(rect.left, rect.top);
- static const int kSystemMenuOffset = 10;
- point.Offset(kSystemMenuOffset, kSystemMenuOffset);
- ShowSystemMenuAtPoint(window, point);
-}
-
-void ShowSystemMenuAtPoint(HWND window, const gfx::Point& point) {
- // In the Metro process, we never want to show the system menu.
- if (base::win::IsMetroProcess())
- return;
- UINT flags = TPM_LEFTBUTTON | TPM_RIGHTBUTTON | TPM_RETURNCMD;
- if (base::i18n::IsRTL())
- flags |= TPM_RIGHTALIGN;
- HMENU menu = GetSystemMenu(window, FALSE);
- const int command =
- TrackPopupMenu(menu, flags, point.x(), point.y(), 0, window, NULL);
- if (command)
- SendMessage(window, WM_SYSCOMMAND, command, 0);
-}
-
-extern "C" {
- typedef HWND (*RootWindow)();
-}
-
-HWND GetWindowToParentTo(bool get_real_hwnd) {
- HMODULE metro = base::win::GetMetroModule();
- if (!metro)
- return get_real_hwnd ? ::GetDesktopWindow() : HWND_DESKTOP;
- // In windows 8 metro-mode the root window is not the desktop.
- RootWindow root_window =
- reinterpret_cast<RootWindow>(::GetProcAddress(metro, "GetRootWindow"));
- return root_window();
-}
-
-} // namespace ui
« no previous file with comments | « ui/base/win/hwnd_util.h ('k') | ui/base/win/mouse_wheel_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698