Chromium Code Reviews| Index: ash/display/display_manager.cc |
| diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc |
| index 241f93c13adad4c334e6c7d07d82049453c26e43..a79a1f4c62188c8a2c198b268218a8368225951d 100644 |
| --- a/ash/display/display_manager.cc |
| +++ b/ash/display/display_manager.cc |
| @@ -8,6 +8,7 @@ |
| #include <cmath> |
| #include <set> |
| #include <string> |
| +#include <utility> |
| #include <vector> |
| #include "ash/ash_switches.h" |
| @@ -1114,11 +1115,17 @@ void DisplayManager::CreateSoftwareMirroringDisplayInfo( |
| // 1st Pass. Find the max size. |
| int max_height = std::numeric_limits<int>::min(); |
| - for (auto& info : *display_info_list) |
| - max_height = std::max(max_height, info.size_in_pixel().height()); |
| + float default_device_scale_factor = 1.0f; |
| + |
| + for (auto& info : *display_info_list) { |
| + if (max_height < info.size_in_pixel().height()) { |
| + max_height = info.size_in_pixel().height(); |
| + default_device_scale_factor = info.device_scale_factor(); |
|
Jun Mukai
2015/07/29 21:26:28
This means that if two displays are in the same he
oshima
2015/07/30 01:33:31
Per offline discussion, changed to use the 1st or
|
| + } |
| + } |
| std::vector<DisplayMode> display_mode_list; |
| - std::set<float> scales; |
| + std::set<std::pair<float, float>> dsf_scale_list; |
| // 2nd Pass. Compute the unified display size. |
| for (auto& info : *display_info_list) { |
| @@ -1131,14 +1138,17 @@ void DisplayManager::CreateSoftwareMirroringDisplayInfo( |
| info.id(), origin, 1.0f / scale); |
| unified_bounds.Union(display.bounds()); |
| - scales.insert(scale); |
| + dsf_scale_list.insert( |
| + std::make_pair(info.device_scale_factor(), scale)); |
|
Jun Mukai
2015/07/29 21:26:28
Also, can we add a case of dsf=1.0 as an option?
oshima
2015/07/30 01:33:32
Let's wait for user's feedback. My guess is that u
|
| } |
| DisplayInfo info(kUnifiedDisplayId, "Unified Desktop", false); |
| + info.set_device_scale_factor(default_device_scale_factor); |
| info.SetBounds(unified_bounds); |
| DisplayMode native_mode(unified_bounds.size(), 60.0f, false, true); |
| - info.SetDisplayModes(CreateUnifiedDisplayModeList(native_mode, scales)); |
| + info.SetDisplayModes( |
| + CreateUnifiedDisplayModeList(native_mode, dsf_scale_list)); |
| // Forget the configured resolution if the original unified |
| // desktop resolution has changed. |
| @@ -1153,7 +1163,7 @@ void DisplayManager::CreateSoftwareMirroringDisplayInfo( |
| DisplayMode mode; |
| if (GetSelectedModeForDisplayId(kUnifiedDisplayId, &mode) && |
| FindDisplayMode(info, mode) != info.display_modes().end()) { |
| - // TODO(oshima): device scale factor. |
| + info.set_device_scale_factor(mode.device_scale_factor); |
| info.SetBounds(gfx::Rect(mode.size)); |
| } else { |
| display_modes_.erase(kUnifiedDisplayId); |