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/display_controller.h" | 5 #include "ash/display/display_controller.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <map> | 9 #include <map> |
10 | 10 |
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
536 bool DisplayController::UpdateWorkAreaOfDisplayNearestWindow( | 536 bool DisplayController::UpdateWorkAreaOfDisplayNearestWindow( |
537 const aura::Window* window, | 537 const aura::Window* window, |
538 const gfx::Insets& insets) { | 538 const gfx::Insets& insets) { |
539 const aura::Window* root_window = window->GetRootWindow(); | 539 const aura::Window* root_window = window->GetRootWindow(); |
540 int64 id = GetRootWindowSettings(root_window)->display_id; | 540 int64 id = GetRootWindowSettings(root_window)->display_id; |
541 // if id is |kInvaildDisplayID|, it's being deleted. | 541 // if id is |kInvaildDisplayID|, it's being deleted. |
542 DCHECK(id != gfx::Display::kInvalidDisplayID); | 542 DCHECK(id != gfx::Display::kInvalidDisplayID); |
543 return GetDisplayManager()->UpdateWorkAreaOfDisplay(id, insets); | 543 return GetDisplayManager()->UpdateWorkAreaOfDisplay(id, insets); |
544 } | 544 } |
545 | 545 |
546 void DisplayController::OnDisplayBoundsChanged(const gfx::Display& display) { | |
547 const DisplayInfo& display_info = | |
548 GetDisplayManager()->GetDisplayInfo(display.id()); | |
549 DCHECK(!display_info.bounds_in_native().IsEmpty()); | |
550 AshWindowTreeHost* ash_host = window_tree_hosts_[display.id()]; | |
551 ash_host->AsWindowTreeHost()->SetBounds(display_info.bounds_in_native()); | |
552 SetDisplayPropertiesOnHost(ash_host, display); | |
553 } | |
554 | |
555 void DisplayController::OnDisplayAdded(const gfx::Display& display) { | 546 void DisplayController::OnDisplayAdded(const gfx::Display& display) { |
556 if (primary_tree_host_for_replace_) { | 547 if (primary_tree_host_for_replace_) { |
557 DCHECK(window_tree_hosts_.empty()); | 548 DCHECK(window_tree_hosts_.empty()); |
558 primary_display_id = display.id(); | 549 primary_display_id = display.id(); |
559 window_tree_hosts_[display.id()] = primary_tree_host_for_replace_; | 550 window_tree_hosts_[display.id()] = primary_tree_host_for_replace_; |
560 GetRootWindowSettings(GetWindow(primary_tree_host_for_replace_)) | 551 GetRootWindowSettings(GetWindow(primary_tree_host_for_replace_)) |
561 ->display_id = display.id(); | 552 ->display_id = display.id(); |
562 primary_tree_host_for_replace_ = NULL; | 553 primary_tree_host_for_replace_ = NULL; |
563 const DisplayInfo& display_info = | 554 const DisplayInfo& display_info = |
564 GetDisplayManager()->GetDisplayInfo(display.id()); | 555 GetDisplayManager()->GetDisplayInfo(display.id()); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
598 | 589 |
599 // Delete the other host instead. | 590 // Delete the other host instead. |
600 host_to_delete = window_tree_hosts_[primary_display_id]; | 591 host_to_delete = window_tree_hosts_[primary_display_id]; |
601 GetRootWindowSettings(GetWindow(host_to_delete))->display_id = display.id(); | 592 GetRootWindowSettings(GetWindow(host_to_delete))->display_id = display.id(); |
602 | 593 |
603 // Setup primary root. | 594 // Setup primary root. |
604 window_tree_hosts_[primary_display_id] = primary_host; | 595 window_tree_hosts_[primary_display_id] = primary_host; |
605 GetRootWindowSettings(GetWindow(primary_host))->display_id = | 596 GetRootWindowSettings(GetWindow(primary_host))->display_id = |
606 primary_display_id; | 597 primary_display_id; |
607 | 598 |
608 OnDisplayBoundsChanged( | 599 OnDisplayMetricsChanged( |
609 GetDisplayManager()->GetDisplayForId(primary_display_id)); | 600 GetDisplayManager()->GetDisplayForId(primary_display_id), |
601 DISPLAY_METRICS_BOUNDS); | |
610 } | 602 } |
611 RootWindowController* controller = | 603 RootWindowController* controller = |
612 GetRootWindowController(GetWindow(host_to_delete)); | 604 GetRootWindowController(GetWindow(host_to_delete)); |
613 DCHECK(controller); | 605 DCHECK(controller); |
614 controller->MoveWindowsTo(GetPrimaryRootWindow()); | 606 controller->MoveWindowsTo(GetPrimaryRootWindow()); |
615 // Delete most of root window related objects, but don't delete | 607 // Delete most of root window related objects, but don't delete |
616 // root window itself yet because the stack may be using it. | 608 // root window itself yet because the stack may be using it. |
617 controller->Shutdown(); | 609 controller->Shutdown(); |
618 base::MessageLoop::current()->DeleteSoon(FROM_HERE, controller); | 610 base::MessageLoop::current()->DeleteSoon(FROM_HERE, controller); |
619 } | 611 } |
620 | 612 |
613 void DisplayController::OnDisplayMetricsChanged(const gfx::Display& display, | |
614 DisplayObserver::MetricsType metrics) { | |
615 if (!(metrics & DISPLAY_METRICS_BOUNDS)) | |
oshima
2014/05/08 18:06:50
we need to update this for rotation change as well
mlamouri (slow - plz ping)
2014/05/09 16:11:39
Done.
| |
616 return; | |
617 | |
618 const DisplayInfo& display_info = | |
619 GetDisplayManager()->GetDisplayInfo(display.id()); | |
620 DCHECK(!display_info.bounds_in_native().IsEmpty()); | |
621 AshWindowTreeHost* ash_host = window_tree_hosts_[display.id()]; | |
622 ash_host->AsWindowTreeHost()->SetBounds(display_info.bounds_in_native()); | |
623 SetDisplayPropertiesOnHost(ash_host, display); | |
624 } | |
625 | |
621 void DisplayController::OnHostResized(const aura::WindowTreeHost* host) { | 626 void DisplayController::OnHostResized(const aura::WindowTreeHost* host) { |
622 gfx::Display display = Shell::GetScreen()->GetDisplayNearestWindow( | 627 gfx::Display display = Shell::GetScreen()->GetDisplayNearestWindow( |
623 const_cast<aura::Window*>(host->window())); | 628 const_cast<aura::Window*>(host->window())); |
624 | 629 |
625 DisplayManager* display_manager = GetDisplayManager(); | 630 DisplayManager* display_manager = GetDisplayManager(); |
626 if (display_manager->UpdateDisplayBounds(display.id(), host->GetBounds())) { | 631 if (display_manager->UpdateDisplayBounds(display.id(), host->GetBounds())) { |
627 mirror_window_controller_->UpdateWindow(); | 632 mirror_window_controller_->UpdateWindow(); |
628 cursor_window_controller_->UpdateContainer(); | 633 cursor_window_controller_->UpdateContainer(); |
629 } | 634 } |
630 } | 635 } |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
748 std::string name = | 753 std::string name = |
749 root_windows[i] == primary ? "aura_root_0" : "aura_root_x"; | 754 root_windows[i] == primary ? "aura_root_0" : "aura_root_x"; |
750 gfx::AcceleratedWidget xwindow = | 755 gfx::AcceleratedWidget xwindow = |
751 root_windows[i]->GetHost()->GetAcceleratedWidget(); | 756 root_windows[i]->GetHost()->GetAcceleratedWidget(); |
752 XStoreName(gfx::GetXDisplay(), xwindow, name.c_str()); | 757 XStoreName(gfx::GetXDisplay(), xwindow, name.c_str()); |
753 } | 758 } |
754 #endif | 759 #endif |
755 } | 760 } |
756 | 761 |
757 } // namespace ash | 762 } // namespace ash |
OLD | NEW |