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

Side by Side Diff: ui/display/win/screen_win.cc

Issue 2832823002: Update avatar button to MD (Closed)
Patch Set: Fix for --force-device-scale-factor, vector icon, review comments Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/display/win/screen_win.h" 5 #include "ui/display/win/screen_win.h"
6 6
7 #include <windows.h> 7 #include <windows.h>
8 #include <shellscalingapi.h> 8 #include <shellscalingapi.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 16 matching lines...) Expand all
27 27
28 namespace display { 28 namespace display {
29 namespace win { 29 namespace win {
30 namespace { 30 namespace {
31 31
32 // TODO(robliao): http://crbug.com/615514 Remove when ScreenWin usage is 32 // TODO(robliao): http://crbug.com/615514 Remove when ScreenWin usage is
33 // resolved with Desktop Aura and WindowTreeHost. 33 // resolved with Desktop Aura and WindowTreeHost.
34 ScreenWin* g_screen_win_instance = nullptr; 34 ScreenWin* g_screen_win_instance = nullptr;
35 35
36 float GetMonitorScaleFactor(HMONITOR monitor) { 36 float GetMonitorScaleFactor(HMONITOR monitor) {
37 DCHECK(monitor);
38 if (Display::HasForceDeviceScaleFactor()) 37 if (Display::HasForceDeviceScaleFactor())
39 return Display::GetForcedDeviceScaleFactor(); 38 return Display::GetForcedDeviceScaleFactor();
40 39 return ScreenWin::GetUnforcedMonitorScaleFactor(monitor);
41 if (base::win::IsProcessPerMonitorDpiAware()) {
42 static auto get_dpi_for_monitor_func = [](){
43 using GetDpiForMonitorPtr = decltype(::GetDpiForMonitor)*;
44 HMODULE shcore_dll = ::LoadLibrary(L"shcore.dll");
45 if (shcore_dll) {
46 return reinterpret_cast<GetDpiForMonitorPtr>(
47 ::GetProcAddress(shcore_dll, "GetDpiForMonitor"));
48 }
49 return static_cast<GetDpiForMonitorPtr>(nullptr);
50 }();
51
52 UINT dpi_x;
53 UINT dpi_y;
54 if (get_dpi_for_monitor_func &&
55 SUCCEEDED(get_dpi_for_monitor_func(monitor, MDT_EFFECTIVE_DPI,
56 &dpi_x, &dpi_y))) {
57 DCHECK_EQ(dpi_x, dpi_y);
58 return GetScalingFactorFromDPI(dpi_x);
59 }
60 }
61 return GetDPIScale();
62 } 40 }
63 41
64 std::vector<DisplayInfo> FindAndRemoveTouchingDisplayInfos( 42 std::vector<DisplayInfo> FindAndRemoveTouchingDisplayInfos(
65 const DisplayInfo& ref_display_info, 43 const DisplayInfo& ref_display_info,
66 std::vector<DisplayInfo>* display_infos) { 44 std::vector<DisplayInfo>* display_infos) {
67 std::vector<DisplayInfo> touching_display_infos; 45 std::vector<DisplayInfo> touching_display_infos;
68 display_infos->erase( 46 display_infos->erase(
69 std::remove_if(display_infos->begin(), display_infos->end(), 47 std::remove_if(display_infos->begin(), display_infos->end(),
70 [&touching_display_infos, ref_display_info]( 48 [&touching_display_infos, ref_display_info](
71 const DisplayInfo& display_info) { 49 const DisplayInfo& display_info) {
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 return ScreenWinDisplay().display().device_scale_factor(); 323 return ScreenWinDisplay().display().device_scale_factor();
346 324
347 DCHECK(hwnd); 325 DCHECK(hwnd);
348 HWND rootHwnd = g_screen_win_instance->GetRootWindow(hwnd); 326 HWND rootHwnd = g_screen_win_instance->GetRootWindow(hwnd);
349 ScreenWinDisplay screen_win_display = 327 ScreenWinDisplay screen_win_display =
350 g_screen_win_instance->GetScreenWinDisplayNearestHWND(rootHwnd); 328 g_screen_win_instance->GetScreenWinDisplayNearestHWND(rootHwnd);
351 return screen_win_display.display().device_scale_factor(); 329 return screen_win_display.display().device_scale_factor();
352 } 330 }
353 331
354 // static 332 // static
333 float ScreenWin::GetUnforcedMonitorScaleFactor(HMONITOR monitor) {
334 DCHECK(monitor);
335 if (base::win::IsProcessPerMonitorDpiAware()) {
336 static auto get_dpi_for_monitor_func = []() {
337 using GetDpiForMonitorPtr = decltype(::GetDpiForMonitor)*;
338 HMODULE shcore_dll = ::LoadLibrary(L"shcore.dll");
339 if (shcore_dll) {
340 return reinterpret_cast<GetDpiForMonitorPtr>(
341 ::GetProcAddress(shcore_dll, "GetDpiForMonitor"));
342 }
343 return static_cast<GetDpiForMonitorPtr>(nullptr);
344 }();
345
346 UINT dpi_x;
347 UINT dpi_y;
348 if (get_dpi_for_monitor_func &&
349 SUCCEEDED(get_dpi_for_monitor_func(monitor, MDT_EFFECTIVE_DPI, &dpi_x,
350 &dpi_y))) {
351 DCHECK_EQ(dpi_x, dpi_y);
352 return GetScalingFactorFromDPI(dpi_x);
353 }
354 }
355 return GetUnforcedDeviceScaleFactor();
356 }
357
358 // static
355 float ScreenWin::GetSystemScaleFactor() { 359 float ScreenWin::GetSystemScaleFactor() {
356 return GetUnforcedDeviceScaleFactor(); 360 return GetUnforcedDeviceScaleFactor();
357 } 361 }
358 362
359 HWND ScreenWin::GetHWNDFromNativeView(gfx::NativeView window) const { 363 HWND ScreenWin::GetHWNDFromNativeView(gfx::NativeView window) const {
360 NOTREACHED(); 364 NOTREACHED();
361 return nullptr; 365 return nullptr;
362 } 366 }
363 367
364 gfx::NativeWindow ScreenWin::GetNativeWindowFromHWND(HWND hwnd) const { 368 gfx::NativeWindow ScreenWin::GetNativeWindowFromHWND(HWND hwnd) const {
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 if (std::find(unique_scale_factors.begin(), unique_scale_factors.end(), 596 if (std::find(unique_scale_factors.begin(), unique_scale_factors.end(),
593 reported_scale) == unique_scale_factors.end()) { 597 reported_scale) == unique_scale_factors.end()) {
594 unique_scale_factors.push_back(reported_scale); 598 unique_scale_factors.push_back(reported_scale);
595 UMA_HISTOGRAM_SPARSE_SLOWLY("UI.DeviceScale", reported_scale); 599 UMA_HISTOGRAM_SPARSE_SLOWLY("UI.DeviceScale", reported_scale);
596 } 600 }
597 } 601 }
598 } 602 }
599 603
600 } // namespace win 604 } // namespace win
601 } // namespace display 605 } // namespace display
OLDNEW
« chrome/browser/ui/views/profiles/profile_chooser_view.cc ('K') | « ui/display/win/screen_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698