Index: ui/gfx/win/dpi.cc |
diff --git a/ui/gfx/win/dpi.cc b/ui/gfx/win/dpi.cc |
index c0c44d612b80a91e736f6d9eedcd2ba2a7a33fb3..8a4e4d606b1921d9c488338958de83adc6ced671 100644 |
--- a/ui/gfx/win/dpi.cc |
+++ b/ui/gfx/win/dpi.cc |
@@ -10,6 +10,7 @@ |
#include "ui/gfx/geometry/point_conversions.h" |
#include "ui/gfx/geometry/rect_conversions.h" |
#include "ui/gfx/geometry/size_conversions.h" |
+#include "ui/gfx/screen.h" |
namespace { |
@@ -17,15 +18,6 @@ int kDefaultDPI = 96; |
float g_device_scale_factor = 0.0f; |
-float GetUnforcedDeviceScaleFactor() { |
- // If the global device scale factor is initialized use it. This is to ensure |
- // we use the same scale factor across all callsites. |
- if (g_device_scale_factor) |
- return g_device_scale_factor; |
- return static_cast<float>(gfx::GetDPI().width()) / |
- static_cast<float>(kDefaultDPI); |
-} |
- |
} // namespace |
namespace gfx { |
@@ -35,70 +27,35 @@ void InitDeviceScaleFactor(float scale) { |
g_device_scale_factor = scale; |
} |
-Size GetDPI() { |
- static int dpi_x = 0; |
- static int dpi_y = 0; |
- static bool should_initialize = true; |
- |
- if (should_initialize) { |
- should_initialize = false; |
- base::win::ScopedGetDC screen_dc(NULL); |
- // This value is safe to cache for the life time of the app since the |
- // user must logout to change the DPI setting. This value also applies |
- // to all screens. |
- dpi_x = GetDeviceCaps(screen_dc, LOGPIXELSX); |
- dpi_y = GetDeviceCaps(screen_dc, LOGPIXELSY); |
- } |
- return Size(dpi_x, dpi_y); |
+int GetDPIFromScalingFactor(float device_scaling_factor) { |
+ return static_cast<float>(kDefaultDPI) * device_scaling_factor; |
} |
float GetDPIScale() { |
if (gfx::Display::HasForceDeviceScaleFactor()) |
return gfx::Display::GetForcedDeviceScaleFactor(); |
- float dpi_scale = GetUnforcedDeviceScaleFactor(); |
- if (dpi_scale <= 1.25) { |
- // Force 125% and below to 100% scale. We do this to maintain previous |
- // (non-DPI-aware) behavior where only the font size was boosted. |
- dpi_scale = 1.0; |
- } |
- return dpi_scale; |
-} |
-namespace win { |
- |
-Point ScreenToDIPPoint(const Point& pixel_point) { |
- return ScaleToFlooredPoint(pixel_point, 1.0f / GetDPIScale()); |
-} |
- |
-Point DIPToScreenPoint(const Point& dip_point) { |
- return ScaleToFlooredPoint(dip_point, GetDPIScale()); |
-} |
- |
-Rect ScreenToDIPRect(const Rect& pixel_bounds) { |
- // It's important we scale the origin and size separately. If we instead |
- // calculated the size from the floored origin and ceiled right the size could |
- // vary depending upon where the two points land. That would cause problems |
- // for the places this code is used (in particular mapping from native window |
- // bounds to DIPs). |
- return Rect(ScreenToDIPPoint(pixel_bounds.origin()), |
- ScreenToDIPSize(pixel_bounds.size())); |
-} |
+ if (g_device_scale_factor) |
+ return g_device_scale_factor; |
-Rect DIPToScreenRect(const Rect& dip_bounds) { |
- // See comment in ScreenToDIPRect for why we calculate size like this. |
- return Rect(DIPToScreenPoint(dip_bounds.origin()), |
- DIPToScreenSize(dip_bounds.size())); |
-} |
+ static float device_scale_factor = 0.0f; |
+ if (!device_scale_factor) { |
+ base::win::ScopedGetDC screen_dc(NULL); |
+ int dpi_x = GetDeviceCaps(screen_dc, LOGPIXELSX); |
+ DCHECK(dpi_x == GetDeviceCaps(screen_dc, LOGPIXELSX)); |
+ device_scale_factor = |
+ static_cast<float>(dpi_x) / static_cast<float>(kDefaultDPI); |
+ if (device_scale_factor <= 1.25) { |
+ // Force 125% and below to 100% scale. We do this to maintain previous |
+ // (non-DPI-aware) behavior where only the font size was boosted. |
+ device_scale_factor = 1.0; |
+ } |
+ } |
-Size ScreenToDIPSize(const Size& size_in_pixels) { |
- // Always ceil sizes. Otherwise we may be leaving off part of the bounds. |
- return ScaleToCeiledSize(size_in_pixels, 1.0f / GetDPIScale()); |
+ return device_scale_factor; |
} |
-Size DIPToScreenSize(const Size& dip_size) { |
- // Always ceil sizes. Otherwise we may be leaving off part of the bounds. |
- return ScaleToCeiledSize(dip_size, GetDPIScale()); |
-} |
+namespace win { |
int GetSystemMetricsInDIP(int metric) { |
return static_cast<int>(GetSystemMetrics(metric) / GetDPIScale() + 0.5); |