Index: ash/monitor/multi_monitor_manager.cc |
diff --git a/ash/monitor/multi_monitor_manager.cc b/ash/monitor/multi_monitor_manager.cc |
index 874f22408018b9891e0c04315312e5c451b3781b..e7ace3732c958a1fef4ab6de1cb0105cf7de1ae0 100644 |
--- a/ash/monitor/multi_monitor_manager.cc |
+++ b/ash/monitor/multi_monitor_manager.cc |
@@ -57,6 +57,12 @@ void MultiMonitorManager::CycleMonitor() { |
manager->CycleMonitorImpl(); |
} |
+ void MultiMonitorManager::ToggleMonitorScale() { |
+ MultiMonitorManager* manager = static_cast<MultiMonitorManager*>( |
+ aura::Env::GetInstance()->monitor_manager()); |
+ manager->ScaleMonitorImpl(); |
+} |
+ |
void MultiMonitorManager::OnNativeMonitorsChanged( |
const std::vector<Monitor>& new_monitors) { |
size_t min = std::min(monitors_.size(), new_monitors.size()); |
@@ -204,6 +210,22 @@ void MultiMonitorManager::CycleMonitorImpl() { |
} |
} |
+void MultiMonitorManager::ScaleMonitorImpl() { |
+ if (monitors_.size() > 0) { |
+ std::vector<Monitor> new_monitors; |
+ for (Monitors::const_iterator iter = monitors_.begin(); |
+ iter != monitors_.end(); ++iter) { |
+ gfx::Monitor monitor = *iter; |
+ float factor = monitor.device_scale_factor() == 1.0f ? 2.0f : 1.0f; |
+ monitor.SetScaleAndBounds( |
+ factor, gfx::Rect(monitor.bounds_in_pixel().origin(), |
+ monitor.size().Scale(factor))); |
+ new_monitors.push_back(monitor); |
+ } |
+ OnNativeMonitorsChanged(new_monitors); |
+ } |
+} |
+ |
gfx::Monitor& MultiMonitorManager::FindMonitorById(int id) { |
for (Monitors::iterator iter = monitors_.begin(); |
iter != monitors_.end(); ++iter) { |