Index: ash/display/display_manager.cc |
diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc |
index 07d44155fa6ccdd1ad4a6e89b7d7939a69455f5e..b7538e7ac896674c4b67ac7df7f5162015b156ca 100644 |
--- a/ash/display/display_manager.cc |
+++ b/ash/display/display_manager.cc |
@@ -4,6 +4,7 @@ |
#include "ash/display/display_manager.h" |
+#include <algorithm> |
#include <cmath> |
#include <set> |
#include <string> |
@@ -472,6 +473,50 @@ void DisplayManager::SetDisplayResolution(int64 display_id, |
#endif |
} |
+void DisplayManager::SetDisplayMode(int64 display_id, |
+ const DisplayMode& display_mode) { |
+ if (IsInternalDisplayId(display_id)) { |
+ SetDisplayUIScale(display_id, display_mode.ui_scale); |
+ return; |
+ } |
+ |
+ DisplayInfoList display_info_list; |
+ bool display_property_changed = false; |
+ bool resolution_changed = false; |
+ for (DisplayList::const_iterator iter = displays_.begin(); |
+ iter != displays_.end(); ++iter) { |
+ DisplayInfo info = GetDisplayInfo(iter->id()); |
+ if (info.id() == display_id) { |
+ if (info.bounds_in_native().size() != display_mode.size) { |
+ const std::vector<DisplayMode>& modes = info.display_modes(); |
+ std::vector<DisplayMode>::const_iterator iter = |
+ std::find_if(modes.begin(), modes.end(), |
+ DisplayModeMatcher(display_mode.size)); |
+ if (iter == modes.end()) { |
+ LOG(WARNING) << "Unsupported resolution was requested:" |
+ << display_mode.size.ToString(); |
+ return; |
+ } |
+ display_modes_[display_id] = *iter; |
+ resolution_changed = true; |
+ } |
+ if (info.device_scale_factor() != display_mode.device_scale_factor) { |
+ info.set_device_scale_factor(display_mode.device_scale_factor); |
+ display_property_changed = true; |
+ } |
+ } |
+ display_info_list.push_back(info); |
+ } |
+ if (display_property_changed) { |
+ AddMirrorDisplayInfoIfAny(&display_info_list); |
+ UpdateDisplays(display_info_list); |
+ } |
+#if defined(OS_CHROMEOS) |
+ if (resolution_changed && base::SysInfo::IsRunningOnChromeOS()) |
+ Shell::GetInstance()->display_configurator()->OnConfigurationChanged(); |
+#endif |
+} |
+ |
void DisplayManager::RegisterDisplayProperty( |
int64 display_id, |
gfx::Display::Rotation rotation, |