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

Unified Diff: app/win/hwnd_util.cc

Issue 6254011: Move UI-relevant Windows files to ui/base. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 | « app/win/hwnd_util.h ('k') | app/win/window_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: app/win/hwnd_util.cc
===================================================================
--- app/win/hwnd_util.cc (revision 71828)
+++ app/win/hwnd_util.cc (working copy)
@@ -1,183 +0,0 @@
-// Copyright (c) 2010 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 "app/win/hwnd_util.h"
-
-#include <dwmapi.h>
-
-#include "base/string_util.h"
-#include "base/win/windows_version.h"
-#include "gfx/rect.h"
-#include "gfx/size.h"
-
-#pragma comment(lib, "dwmapi.lib")
-
-namespace app {
-namespace win {
-
-namespace {
-
-// Adjust the window to fit, returning true if the window was resized or moved.
-bool AdjustWindowToFit(HWND hwnd, const RECT& bounds) {
- // Get the monitor.
- HMONITOR hmon = MonitorFromRect(&bounds, MONITOR_DEFAULTTONEAREST);
- if (!hmon) {
- NOTREACHED() << "Unable to find default monitor";
- // No monitor available.
- return false;
- }
-
- MONITORINFO mi;
- mi.cbSize = sizeof(mi);
- GetMonitorInfo(hmon, &mi);
- gfx::Rect window_rect(bounds);
- gfx::Rect monitor_rect(mi.rcWork);
- gfx::Rect new_window_rect = window_rect.AdjustToFit(monitor_rect);
- if (!new_window_rect.Equals(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 true;
- } else {
- return false;
- }
-}
-
-} // 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) {
- 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,
- bool pref_is_client) {
- 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);
- } else {
- // No parent. Center over the monitor the window is on.
- HMONITOR monitor = MonitorFromWindow(window, MONITOR_DEFAULTTONEAREST);
- if (monitor) {
- MONITORINFO mi = {0};
- mi.cbSize = sizeof(mi);
- GetMonitorInfo(monitor, &mi);
- center_bounds = mi.rcWork;
- } else {
- NOTREACHED() << "Unable to get default monitor";
- }
- }
- window_bounds.left = center_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 +
- (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();
- }
-
- // Get the WINDOWINFO for window. We need the style to calculate the size
- // for the window.
- WINDOWINFO win_info = {0};
- win_info.cbSize = sizeof(WINDOWINFO);
- GetWindowInfo(window, &win_info);
-
- // Calculate the window size needed for the content size.
-
- if (!pref_is_client ||
- AdjustWindowRectEx(&window_bounds, win_info.dwStyle, FALSE,
- win_info.dwExStyle)) {
- if (!AdjustWindowToFit(window, window_bounds)) {
- // The window fits, reset the bounds.
- SetWindowPos(window, 0, window_bounds.left, window_bounds.top,
- window_bounds.right - window_bounds.left,
- window_bounds.bottom - window_bounds.top,
- SWP_NOACTIVATE | SWP_NOZORDER);
- } // else case, AdjustWindowToFit set the bounds for us.
- } else {
- NOTREACHED() << "Unable to adjust window to fit";
- }
-}
-
-bool ShouldUseVistaFrame() {
- if (base::win::GetVersion() < base::win::VERSION_VISTA)
- return false;
- // If composition is not enabled, we behave like on XP.
- BOOL f;
- DwmIsCompositionEnabled(&f);
- return !!f;
-}
-
-} // namespace win
-} // namespace app
« no previous file with comments | « app/win/hwnd_util.h ('k') | app/win/window_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698