diff options
Diffstat (limited to 'ash/display')
-rw-r--r-- | ash/display/display_change_observer_chromeos.cc | 15 |
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); |