summaryrefslogtreecommitdiffstats
path: root/ash/display
diff options
context:
space:
mode:
Diffstat (limited to 'ash/display')
-rw-r--r--ash/display/display_change_observer_chromeos.cc15
1 files changed, 13 insertions, 2 deletions
diff --git a/ash/display/display_change_observer_chromeos.cc b/ash/display/display_change_observer_chromeos.cc
index 40a1a37..a7bb2e1 100644
--- a/ash/display/display_change_observer_chromeos.cc
+++ b/ash/display/display_change_observer_chromeos.cc
@@ -30,6 +30,13 @@ using ui::DisplayConfigurator;
namespace {
+// The DPI threshold to detect high density screen.
+// Higher DPI than this will use device_scale_factor=2.
+const unsigned int kHighDensityDPIThreshold = 170;
+
+// 1 inch in mm.
+const float kInchInMm = 25.4f;
+
// Display mode list is sorted by (in descending priority):
// * the area in pixels.
// * refresh rate.
@@ -126,8 +133,12 @@ void DisplayChangeObserver::OnDisplayModeChanged(
if (!mode_info)
continue;
- float device_scale_factor = ui::GetScaleFactor(
- state.display->physical_size(), mode_info->size());
+ float device_scale_factor = 1.0f;
+ if (!ui::IsDisplaySizeBlackListed(state.display->physical_size()) &&
+ (kInchInMm * mode_info->size().width() /
+ state.display->physical_size().width()) > kHighDensityDPIThreshold) {
+ device_scale_factor = 2.0f;
+ }
gfx::Rect display_bounds(state.display->origin(), mode_info->size());
std::vector<DisplayMode> display_modes = GetDisplayModeList(state);