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

Unified Diff: chrome/app/chrome_exe_main_win.cc

Issue 672673005: Remove IsHighDPIEnabled, move EnableHighDPISupport to only place it's used (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dpi-cleanup-5
Patch Set: rebase-6 Created 6 years, 2 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 | « ash/display/display_info.cc ('k') | ui/base/layout.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/app/chrome_exe_main_win.cc
diff --git a/chrome/app/chrome_exe_main_win.cc b/chrome/app/chrome_exe_main_win.cc
index 67115ea492add3a5d4b1585bce196e9427445ea4..f1f5fc46801ae9e9f16f973983c310259cec88a5 100644
--- a/chrome/app/chrome_exe_main_win.cc
+++ b/chrome/app/chrome_exe_main_win.cc
@@ -10,6 +10,7 @@
#include "base/at_exit.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
+#include "base/logging.h"
#include "base/win/windows_version.h"
#include "chrome/app/client_util.h"
#include "chrome/browser/chrome_process_finder_win.h"
@@ -78,6 +79,59 @@ bool AttemptFastNotify(const CommandLine& command_line) {
chrome::NOTIFY_SUCCESS;
}
+// Duplicated from Win8.1 SDK ShellScalingApi.h
+typedef enum PROCESS_DPI_AWARENESS {
+ PROCESS_DPI_UNAWARE = 0,
+ PROCESS_SYSTEM_DPI_AWARE = 1,
+ PROCESS_PER_MONITOR_DPI_AWARE = 2
+} PROCESS_DPI_AWARENESS;
+
+typedef enum MONITOR_DPI_TYPE {
+ MDT_EFFECTIVE_DPI = 0,
+ MDT_ANGULAR_DPI = 1,
+ MDT_RAW_DPI = 2,
+ MDT_DEFAULT = MDT_EFFECTIVE_DPI
+} MONITOR_DPI_TYPE;
+
+// Win8.1 supports monitor-specific DPI scaling.
+bool SetProcessDpiAwarenessWrapper(PROCESS_DPI_AWARENESS value) {
+ typedef BOOL(WINAPI *SetProcessDpiAwarenessPtr)(PROCESS_DPI_AWARENESS);
+ SetProcessDpiAwarenessPtr set_process_dpi_awareness_func =
+ reinterpret_cast<SetProcessDpiAwarenessPtr>(
+ GetProcAddress(GetModuleHandleA("user32.dll"),
+ "SetProcessDpiAwarenessInternal"));
+ if (set_process_dpi_awareness_func) {
+ HRESULT hr = set_process_dpi_awareness_func(value);
+ if (SUCCEEDED(hr)) {
+ VLOG(1) << "SetProcessDpiAwareness succeeded.";
+ return true;
+ } else if (hr == E_ACCESSDENIED) {
+ LOG(ERROR) << "Access denied error from SetProcessDpiAwareness. "
+ "Function called twice, or manifest was used.";
+ }
+ }
+ return false;
+}
+
+// This function works for Windows Vista through Win8. Win8.1 must use
+// SetProcessDpiAwareness[Wrapper]
+BOOL SetProcessDPIAwareWrapper() {
+ typedef BOOL(WINAPI *SetProcessDPIAwarePtr)(VOID);
+ SetProcessDPIAwarePtr set_process_dpi_aware_func =
+ reinterpret_cast<SetProcessDPIAwarePtr>(
+ GetProcAddress(GetModuleHandleA("user32.dll"),
+ "SetProcessDPIAware"));
+ return set_process_dpi_aware_func &&
+ set_process_dpi_aware_func();
+}
+
+
+void EnableHighDPISupport() {
+ if (!SetProcessDpiAwarenessWrapper(PROCESS_SYSTEM_DPI_AWARE)) {
+ SetProcessDPIAwareWrapper();
+ }
+}
+
} // namespace
#if !defined(ADDRESS_SANITIZER)
@@ -102,7 +156,7 @@ int main() {
// DirectWrite there. GDI fonts are kerned very badly, so better to leave
// DPI-unaware and at effective 1.0. See also ShouldUseDirectWrite().
if (base::win::GetVersion() > base::win::VERSION_VISTA)
- gfx::EnableHighDPISupport();
+ EnableHighDPISupport();
if (AttemptFastNotify(*CommandLine::ForCurrentProcess()))
return 0;
« no previous file with comments | « ash/display/display_info.cc ('k') | ui/base/layout.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698