summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorhbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-15 05:24:32 +0000
committerhbono@chromium.org <hbono@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-15 05:24:32 +0000
commitb566416e9c7c69492c3955bb9153cb0caba4cd11 (patch)
treeec811a4216abaa266b0e75cb8aecb2b58d5c200c /app
parentf7842695cb7bd1cbcba372881a9fc7e96e2d282d (diff)
downloadchromium_src-b566416e9c7c69492c3955bb9153cb0caba4cd11.zip
chromium_src-b566416e9c7c69492c3955bb9153cb0caba4cd11.tar.gz
chromium_src-b566416e9c7c69492c3955bb9153cb0caba4cd11.tar.bz2
Supports High DPI mode.
When launching an application on the text size larger than 120 DPI, Windows runs the application on the DPI-virtualization mode to hide the text size from it. Unfortunately, this virtualization mode causes some problems when using a custom frame, such as we cannot click system buttons. To fix this issue, this change disables the DPI-virtualization mode on Vista or later. BUG=1715,36939 TEST=Run chrome.exe on the screen resolution higher than 120 DPI. Review URL: http://codereview.chromium.org/2867031 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52446 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'app')
-rw-r--r--app/win_util.cc15
-rw-r--r--app/win_util.h7
2 files changed, 22 insertions, 0 deletions
diff --git a/app/win_util.cc b/app/win_util.cc
index b043db3..46a4f92 100644
--- a/app/win_util.cc
+++ b/app/win_util.cc
@@ -23,6 +23,7 @@
#include "base/scoped_comptr_win.h"
#include "base/scoped_handle.h"
#include "base/scoped_handle_win.h"
+#include "base/scoped_native_library.h"
#include "base/string_util.h"
#include "base/win_util.h"
#include "gfx/codec/png_codec.h"
@@ -582,4 +583,18 @@ void SetAppIdForWindow(const std::wstring& app_id, HWND hwnd) {
base::UnloadNativeLibrary(shell32_library);
}
+void CallSetProcessDPIAware() {
+ // This functionality is only available on Vista or later.
+ if (win_util::GetWinVersion() < win_util::WINVERSION_VISTA)
+ return;
+
+ base::ScopedNativeLibrary user32(
+ FilePath(base::GetNativeLibraryName(L"user32")));
+ typedef BOOL (*SetProcessDPIAwareFunc)();
+ SetProcessDPIAwareFunc set_process_dpi_aware =
+ (SetProcessDPIAwareFunc)user32.GetFunctionPointer("SetProcessDPIAware");
+ if (set_process_dpi_aware)
+ set_process_dpi_aware();
+}
+
} // namespace win_util
diff --git a/app/win_util.h b/app/win_util.h
index 6e2812e..9d745eb 100644
--- a/app/win_util.h
+++ b/app/win_util.h
@@ -215,6 +215,13 @@ extern const int kAutoHideTaskbarThicknessPx;
// do not group together on the Win7 task bar.
void SetAppIdForWindow(const std::wstring& app_id, HWND hwnd);
+// Calls SetProcessDPIAware() to declare this application is DPI-aware and to
+// disable the DPI virtualization of Windows. Unfortunately, calling this
+// function after creating a window confuses some APIs, i.e. some APIs still
+// have the DPI virtualization enabled after calling SetProcessDPIAware().
+// Therefore, we need to call this function before creating the first window.
+void CallSetProcessDPIAware();
+
} // namespace win_util
#endif // APP_WIN_UTIL_H_