| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/display/multi_display_manager.h" | 5 #include "ash/display/multi_display_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "ash/display/display_controller.h" | 10 #include "ash/display/display_controller.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 46 gfx::Display::kInvalidDisplayID); | 46 gfx::Display::kInvalidDisplayID); |
| 47 | 47 |
| 48 MultiDisplayManager::MultiDisplayManager() { | 48 MultiDisplayManager::MultiDisplayManager() { |
| 49 Init(); | 49 Init(); |
| 50 } | 50 } |
| 51 | 51 |
| 52 MultiDisplayManager::~MultiDisplayManager() { | 52 MultiDisplayManager::~MultiDisplayManager() { |
| 53 } | 53 } |
| 54 | 54 |
| 55 // static | 55 // static |
| 56 void MultiDisplayManager::AddRemoveDisplay() { | |
| 57 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>( | |
| 58 aura::Env::GetInstance()->display_manager()); | |
| 59 manager->AddRemoveDisplayImpl(); | |
| 60 } | |
| 61 | |
| 62 void MultiDisplayManager::CycleDisplay() { | 56 void MultiDisplayManager::CycleDisplay() { |
| 63 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>( | 57 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>( |
| 64 aura::Env::GetInstance()->display_manager()); | 58 aura::Env::GetInstance()->display_manager()); |
| 65 manager->CycleDisplayImpl(); | 59 manager->CycleDisplayImpl(); |
| 66 } | 60 } |
| 67 | 61 |
| 62 // static |
| 68 void MultiDisplayManager::ToggleDisplayScale() { | 63 void MultiDisplayManager::ToggleDisplayScale() { |
| 69 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>( | 64 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>( |
| 70 aura::Env::GetInstance()->display_manager()); | 65 aura::Env::GetInstance()->display_manager()); |
| 71 manager->ScaleDisplayImpl(); | 66 manager->ScaleDisplayImpl(); |
| 72 } | 67 } |
| 73 | 68 |
| 74 bool MultiDisplayManager::UpdateWorkAreaOfDisplayNearestWindow( | 69 bool MultiDisplayManager::UpdateWorkAreaOfDisplayNearestWindow( |
| 75 const aura::Window* window, | 70 const aura::Window* window, |
| 76 const gfx::Insets& insets) { | 71 const gfx::Insets& insets) { |
| 77 const RootWindow* root = window->GetRootWindow(); | 72 const RootWindow* root = window->GetRootWindow(); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 } | 204 } |
| 210 #endif | 205 #endif |
| 211 | 206 |
| 212 return base::StringPrintf("Display %d", static_cast<int>(index + 1)); | 207 return base::StringPrintf("Display %d", static_cast<int>(index + 1)); |
| 213 } | 208 } |
| 214 | 209 |
| 215 void MultiDisplayManager::OnRootWindowResized(const aura::RootWindow* root, | 210 void MultiDisplayManager::OnRootWindowResized(const aura::RootWindow* root, |
| 216 const gfx::Size& old_size) { | 211 const gfx::Size& old_size) { |
| 217 if (!use_fullscreen_host_window()) { | 212 if (!use_fullscreen_host_window()) { |
| 218 gfx::Display& display = FindDisplayForRootWindow(root); | 213 gfx::Display& display = FindDisplayForRootWindow(root); |
| 219 display.SetSize(root->GetHostSize()); | 214 if (display.size() != root->GetHostSize()) { |
| 220 NotifyBoundsChanged(display); | 215 display.SetSize(root->GetHostSize()); |
| 216 NotifyBoundsChanged(display); |
| 217 } |
| 221 } | 218 } |
| 222 } | 219 } |
| 223 | 220 |
| 224 void MultiDisplayManager::Init() { | 221 void MultiDisplayManager::Init() { |
| 225 // TODO(oshima): Move this logic to DisplayChangeObserver. | 222 // TODO(oshima): Move this logic to DisplayChangeObserver. |
| 226 const string size_str = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 223 const string size_str = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
| 227 switches::kAuraHostWindowSize); | 224 switches::kAuraHostWindowSize); |
| 228 vector<string> parts; | 225 vector<string> parts; |
| 229 base::SplitString(size_str, ',', &parts); | 226 base::SplitString(size_str, ',', &parts); |
| 230 for (vector<string>::const_iterator iter = parts.begin(); | 227 for (vector<string>::const_iterator iter = parts.begin(); |
| 231 iter != parts.end(); ++iter) { | 228 iter != parts.end(); ++iter) { |
| 232 AddDisplayFromSpec(*iter); | 229 AddDisplayFromSpec(*iter); |
| 233 } | 230 } |
| 234 if (displays_.empty()) | 231 if (displays_.empty()) |
| 235 AddDisplayFromSpec(std::string() /* default */); | 232 AddDisplayFromSpec(std::string() /* default */); |
| 236 } | 233 } |
| 237 | 234 |
| 238 void MultiDisplayManager::AddRemoveDisplayImpl() { | 235 void MultiDisplayManager::CycleDisplayImpl() { |
| 239 std::vector<gfx::Display> new_displays; | 236 std::vector<gfx::Display> new_displays; |
| 240 if (displays_.size() > 1) { | 237 if (displays_.size() > 1) { |
| 241 // Remove if there is more than one display. | 238 // Remove if there is more than one display. |
| 242 int count = displays_.size() - 1; | 239 int count = displays_.size() - 1; |
| 243 for (Displays::const_iterator iter = displays_.begin(); count-- > 0; ++iter) | 240 for (Displays::const_iterator iter = displays_.begin(); count-- > 0; ++iter) |
| 244 new_displays.push_back(*iter); | 241 new_displays.push_back(*iter); |
| 245 } else { | 242 } else { |
| 246 // Add if there is only one display. | 243 // Add if there is only one display. |
| 247 new_displays.push_back(displays_[0]); | 244 new_displays.push_back(displays_[0]); |
| 248 new_displays.push_back(CreateDisplayFromSpec("50+50-1280x768")); | 245 new_displays.push_back(CreateDisplayFromSpec("50+50-1280x768")); |
| 249 } | 246 } |
| 250 if (new_displays.size()) | 247 if (new_displays.size()) |
| 251 OnNativeDisplaysChanged(new_displays); | 248 OnNativeDisplaysChanged(new_displays); |
| 252 } | 249 } |
| 253 | 250 |
| 254 void MultiDisplayManager::CycleDisplayImpl() { | |
| 255 if (displays_.size() > 1) { | |
| 256 std::vector<gfx::Display> new_displays; | |
| 257 for (Displays::const_iterator iter = displays_.begin() + 1; | |
| 258 iter != displays_.end(); ++iter) { | |
| 259 gfx::Display display = *iter; | |
| 260 new_displays.push_back(display); | |
| 261 } | |
| 262 new_displays.push_back(displays_.front()); | |
| 263 OnNativeDisplaysChanged(new_displays); | |
| 264 } | |
| 265 } | |
| 266 | |
| 267 void MultiDisplayManager::ScaleDisplayImpl() { | 251 void MultiDisplayManager::ScaleDisplayImpl() { |
| 268 if (displays_.size() > 0) { | 252 if (displays_.size() > 0) { |
| 269 std::vector<gfx::Display> new_displays; | 253 std::vector<gfx::Display> new_displays; |
| 270 for (Displays::const_iterator iter = displays_.begin(); | 254 for (Displays::const_iterator iter = displays_.begin(); |
| 271 iter != displays_.end(); ++iter) { | 255 iter != displays_.end(); ++iter) { |
| 272 gfx::Display display = *iter; | 256 gfx::Display display = *iter; |
| 273 float factor = display.device_scale_factor() == 1.0f ? 2.0f : 1.0f; | 257 float factor = display.device_scale_factor() == 1.0f ? 2.0f : 1.0f; |
| 274 display.SetScaleAndBounds( | 258 display.SetScaleAndBounds( |
| 275 factor, gfx::Rect(display.bounds_in_pixel().origin(), | 259 factor, gfx::Rect(display.bounds_in_pixel().origin(), |
| 276 display.size().Scale(factor))); | 260 display.size().Scale(factor))); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 297 | 281 |
| 298 const gfx::Insets insets = display.GetWorkAreaInsets(); | 282 const gfx::Insets insets = display.GetWorkAreaInsets(); |
| 299 const gfx::Rect& native_bounds = display.bounds_in_pixel(); | 283 const gfx::Rect& native_bounds = display.bounds_in_pixel(); |
| 300 display.SetScaleAndBounds(display.device_scale_factor(), native_bounds); | 284 display.SetScaleAndBounds(display.device_scale_factor(), native_bounds); |
| 301 display.UpdateWorkAreaFromInsets(insets); | 285 display.UpdateWorkAreaFromInsets(insets); |
| 302 displays_.push_back(display); | 286 displays_.push_back(display); |
| 303 } | 287 } |
| 304 | 288 |
| 305 } // namespace internal | 289 } // namespace internal |
| 306 } // namespace ash | 290 } // namespace ash |
| OLD | NEW |