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); |