Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(126)

Side by Side Diff: ash/display/multi_display_manager.cc

Issue 10909043: Cancel drag if display configuration changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ash/display/multi_display_manager.h ('k') | ash/display/multi_display_manager_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 52
53 MultiDisplayManager::MultiDisplayManager() : 53 MultiDisplayManager::MultiDisplayManager() :
54 internal_display_id_(gfx::Display::kInvalidDisplayID) { 54 internal_display_id_(gfx::Display::kInvalidDisplayID) {
55 Init(); 55 Init();
56 } 56 }
57 57
58 MultiDisplayManager::~MultiDisplayManager() { 58 MultiDisplayManager::~MultiDisplayManager() {
59 } 59 }
60 60
61 // static 61 // static
62 void MultiDisplayManager::AddRemoveDisplay() {
63 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>(
64 aura::Env::GetInstance()->display_manager());
65 manager->AddRemoveDisplayImpl();
66 }
67
68 void MultiDisplayManager::CycleDisplay() { 62 void MultiDisplayManager::CycleDisplay() {
69 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>( 63 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>(
70 aura::Env::GetInstance()->display_manager()); 64 aura::Env::GetInstance()->display_manager());
71 manager->CycleDisplayImpl(); 65 manager->CycleDisplayImpl();
72 } 66 }
73 67
68 // static
74 void MultiDisplayManager::ToggleDisplayScale() { 69 void MultiDisplayManager::ToggleDisplayScale() {
75 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>( 70 MultiDisplayManager* manager = static_cast<MultiDisplayManager*>(
76 aura::Env::GetInstance()->display_manager()); 71 aura::Env::GetInstance()->display_manager());
77 manager->ScaleDisplayImpl(); 72 manager->ScaleDisplayImpl();
78 } 73 }
79 74
80 void MultiDisplayManager::InitInternalDisplayInfo() { 75 void MultiDisplayManager::InitInternalDisplayInfo() {
81 #if defined(OS_CHROMEOS) 76 #if defined(OS_CHROMEOS)
82 if (!base::chromeos::IsRunningOnChromeOS()) 77 if (!base::chromeos::IsRunningOnChromeOS())
83 return; 78 return;
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 } 270 }
276 #endif 271 #endif
277 272
278 return base::StringPrintf("Display %d", static_cast<int>(index + 1)); 273 return base::StringPrintf("Display %d", static_cast<int>(index + 1));
279 } 274 }
280 275
281 void MultiDisplayManager::OnRootWindowResized(const aura::RootWindow* root, 276 void MultiDisplayManager::OnRootWindowResized(const aura::RootWindow* root,
282 const gfx::Size& old_size) { 277 const gfx::Size& old_size) {
283 if (!use_fullscreen_host_window()) { 278 if (!use_fullscreen_host_window()) {
284 gfx::Display& display = FindDisplayForRootWindow(root); 279 gfx::Display& display = FindDisplayForRootWindow(root);
285 display.SetSize(root->GetHostSize()); 280 if (display.size() != root->GetHostSize()) {
286 NotifyBoundsChanged(display); 281 display.SetSize(root->GetHostSize());
282 NotifyBoundsChanged(display);
283 }
287 } 284 }
288 } 285 }
289 286
290 void MultiDisplayManager::Init() { 287 void MultiDisplayManager::Init() {
291 // TODO(oshima): Move this logic to DisplayChangeObserver. 288 // TODO(oshima): Move this logic to DisplayChangeObserver.
292 const string size_str = CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 289 const string size_str = CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
293 switches::kAuraHostWindowSize); 290 switches::kAuraHostWindowSize);
294 vector<string> parts; 291 vector<string> parts;
295 base::SplitString(size_str, ',', &parts); 292 base::SplitString(size_str, ',', &parts);
296 for (vector<string>::const_iterator iter = parts.begin(); 293 for (vector<string>::const_iterator iter = parts.begin();
297 iter != parts.end(); ++iter) { 294 iter != parts.end(); ++iter) {
298 AddDisplayFromSpec(*iter); 295 AddDisplayFromSpec(*iter);
299 } 296 }
300 if (displays_.empty()) 297 if (displays_.empty())
301 AddDisplayFromSpec(std::string() /* default */); 298 AddDisplayFromSpec(std::string() /* default */);
302 } 299 }
303 300
304 void MultiDisplayManager::AddRemoveDisplayImpl() { 301 void MultiDisplayManager::CycleDisplayImpl() {
305 std::vector<gfx::Display> new_displays; 302 std::vector<gfx::Display> new_displays;
306 if (displays_.size() > 1) { 303 if (displays_.size() > 1) {
307 // Remove if there is more than one display. 304 // Remove if there is more than one display.
308 int count = displays_.size() - 1; 305 int count = displays_.size() - 1;
309 for (Displays::const_iterator iter = displays_.begin(); count-- > 0; ++iter) 306 for (Displays::const_iterator iter = displays_.begin(); count-- > 0; ++iter)
310 new_displays.push_back(*iter); 307 new_displays.push_back(*iter);
311 } else { 308 } else {
312 // Add if there is only one display. 309 // Add if there is only one display.
313 new_displays.push_back(displays_[0]); 310 new_displays.push_back(displays_[0]);
314 new_displays.push_back(CreateDisplayFromSpec("50+50-1280x768")); 311 new_displays.push_back(CreateDisplayFromSpec("100+200-500x400"));
315 } 312 }
316 if (new_displays.size()) 313 if (new_displays.size())
317 OnNativeDisplaysChanged(new_displays); 314 OnNativeDisplaysChanged(new_displays);
318 } 315 }
319 316
320 void MultiDisplayManager::CycleDisplayImpl() {
321 if (displays_.size() > 1) {
322 std::vector<gfx::Display> new_displays;
323 for (Displays::const_iterator iter = displays_.begin() + 1;
324 iter != displays_.end(); ++iter) {
325 gfx::Display display = *iter;
326 new_displays.push_back(display);
327 }
328 new_displays.push_back(displays_.front());
329 OnNativeDisplaysChanged(new_displays);
330 }
331 }
332
333 void MultiDisplayManager::ScaleDisplayImpl() { 317 void MultiDisplayManager::ScaleDisplayImpl() {
334 if (displays_.size() > 0) { 318 if (displays_.size() > 0) {
335 std::vector<gfx::Display> new_displays; 319 std::vector<gfx::Display> new_displays;
336 for (Displays::const_iterator iter = displays_.begin(); 320 for (Displays::const_iterator iter = displays_.begin();
337 iter != displays_.end(); ++iter) { 321 iter != displays_.end(); ++iter) {
338 gfx::Display display = *iter; 322 gfx::Display display = *iter;
339 float factor = display.device_scale_factor() == 1.0f ? 2.0f : 1.0f; 323 float factor = display.device_scale_factor() == 1.0f ? 2.0f : 1.0f;
340 display.SetScaleAndBounds( 324 display.SetScaleAndBounds(
341 factor, gfx::Rect(display.bounds_in_pixel().origin(), 325 factor, gfx::Rect(display.bounds_in_pixel().origin(),
342 display.size().Scale(factor))); 326 display.size().Scale(factor)));
343 new_displays.push_back(display); 327 new_displays.push_back(display);
344 } 328 }
345 OnNativeDisplaysChanged(new_displays); 329 OnNativeDisplaysChanged(new_displays);
346 } 330 }
347 } 331 }
348 332
349 gfx::Display& MultiDisplayManager::FindDisplayForRootWindow( 333 gfx::Display& MultiDisplayManager::FindDisplayForRootWindow(
350 const aura::RootWindow* root_window) { 334 const aura::RootWindow* root_window) {
351 int64 id = root_window->GetProperty(kDisplayIdKey); 335 int64 id = root_window->GetProperty(kDisplayIdKey);
336 // if id is |kInvaildDisplayID|, it's being deleted.
337 DCHECK(id != gfx::Display::kInvalidDisplayID);
352 for (Displays::iterator iter = displays_.begin(); 338 for (Displays::iterator iter = displays_.begin();
353 iter != displays_.end(); ++iter) { 339 iter != displays_.end(); ++iter) {
354 if ((*iter).id() == id) 340 if ((*iter).id() == id)
355 return *iter; 341 return *iter;
356 } 342 }
357 DLOG(FATAL) << "Could not find display by id:" << id; 343 DLOG(FATAL) << "Could not find display by id:" << id;
358 return GetInvalidDisplay(); 344 return GetInvalidDisplay();
359 } 345 }
360 346
361 void MultiDisplayManager::AddDisplayFromSpec(const std::string& spec) { 347 void MultiDisplayManager::AddDisplayFromSpec(const std::string& spec) {
362 gfx::Display display = CreateDisplayFromSpec(spec); 348 gfx::Display display = CreateDisplayFromSpec(spec);
363 349
364 const gfx::Insets insets = display.GetWorkAreaInsets(); 350 const gfx::Insets insets = display.GetWorkAreaInsets();
365 const gfx::Rect& native_bounds = display.bounds_in_pixel(); 351 const gfx::Rect& native_bounds = display.bounds_in_pixel();
366 display.SetScaleAndBounds(display.device_scale_factor(), native_bounds); 352 display.SetScaleAndBounds(display.device_scale_factor(), native_bounds);
367 display.UpdateWorkAreaFromInsets(insets); 353 display.UpdateWorkAreaFromInsets(insets);
368 displays_.push_back(display); 354 displays_.push_back(display);
369 } 355 }
370 356
371 void MultiDisplayManager::SetInternalDisplayIdForTest(int64 id) { 357 void MultiDisplayManager::SetInternalDisplayIdForTest(int64 id) {
372 internal_display_id_ = id; 358 internal_display_id_ = id;
373 internal_display_.reset(new gfx::Display(internal_display_id_, 359 internal_display_.reset(new gfx::Display(internal_display_id_,
374 gfx::Rect(800, 600))); 360 gfx::Rect(800, 600)));
375 } 361 }
376 362
377 } // namespace internal 363 } // namespace internal
378 } // namespace ash 364 } // namespace ash
OLDNEW
« no previous file with comments | « ash/display/multi_display_manager.h ('k') | ash/display/multi_display_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698