| 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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 break; | 107 break; |
| 108 case gfx::Display::ROTATE_180: | 108 case gfx::Display::ROTATE_180: |
| 109 xrandr_rotation = RR_Rotate_180; | 109 xrandr_rotation = RR_Rotate_180; |
| 110 break; | 110 break; |
| 111 case gfx::Display::ROTATE_270: | 111 case gfx::Display::ROTATE_270: |
| 112 xrandr_rotation = RR_Rotate_270; | 112 xrandr_rotation = RR_Rotate_270; |
| 113 break; | 113 break; |
| 114 } | 114 } |
| 115 | 115 |
| 116 int internal = display.IsInternal() ? 1 : 0; | 116 int internal = display.IsInternal() ? 1 : 0; |
| 117 gfx::AcceleratedWidget xwindow = root->GetAcceleratedWidget(); | 117 gfx::AcceleratedWidget xwindow = root->host()->GetAcceleratedWidget(); |
| 118 ui::SetIntProperty(xwindow, kInternalProp, kCARDINAL, internal); | 118 ui::SetIntProperty(xwindow, kInternalProp, kCARDINAL, internal); |
| 119 ui::SetIntProperty(xwindow, kRotationProp, kCARDINAL, xrandr_rotation); | 119 ui::SetIntProperty(xwindow, kRotationProp, kCARDINAL, xrandr_rotation); |
| 120 ui::SetIntProperty(xwindow, | 120 ui::SetIntProperty(xwindow, |
| 121 kScaleFactorProp, | 121 kScaleFactorProp, |
| 122 kCARDINAL, | 122 kCARDINAL, |
| 123 100 * display.device_scale_factor()); | 123 100 * display.device_scale_factor()); |
| 124 #endif | 124 #endif |
| 125 scoped_ptr<aura::RootWindowTransformer> transformer( | 125 scoped_ptr<aura::RootWindowTransformer> transformer( |
| 126 internal::CreateRootWindowTransformerForDisplay(root->window(), display)); | 126 internal::CreateRootWindowTransformerForDisplay(root->window(), display)); |
| 127 root->SetRootWindowTransformer(transformer.Pass()); | 127 root->SetRootWindowTransformer(transformer.Pass()); |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 // We don't care about actual distance, only relative to other displays, so | 518 // We don't care about actual distance, only relative to other displays, so |
| 519 // using the LengthSquared() is cheaper than Length(). | 519 // using the LengthSquared() is cheaper than Length(). |
| 520 | 520 |
| 521 int64 distance_squared = (center - point_in_screen).LengthSquared(); | 521 int64 distance_squared = (center - point_in_screen).LengthSquared(); |
| 522 if (closest_distance_squared < 0 || | 522 if (closest_distance_squared < 0 || |
| 523 closest_distance_squared > distance_squared) { | 523 closest_distance_squared > distance_squared) { |
| 524 aura::Window* root_window = GetRootWindowForDisplayId(display.id()); | 524 aura::Window* root_window = GetRootWindowForDisplayId(display.id()); |
| 525 aura::client::ScreenPositionClient* client = | 525 aura::client::ScreenPositionClient* client = |
| 526 aura::client::GetScreenPositionClient(root_window); | 526 aura::client::GetScreenPositionClient(root_window); |
| 527 client->ConvertPointFromScreen(root_window, ¢er); | 527 client->ConvertPointFromScreen(root_window, ¢er); |
| 528 root_window->GetDispatcher()->ConvertPointToNativeScreen(¢er); | 528 root_window->GetDispatcher()->host()->ConvertPointToNativeScreen(¢er); |
| 529 dst_root_window = root_window; | 529 dst_root_window = root_window; |
| 530 target_location_in_native = center; | 530 target_location_in_native = center; |
| 531 closest_distance_squared = distance_squared; | 531 closest_distance_squared = distance_squared; |
| 532 } | 532 } |
| 533 } | 533 } |
| 534 dst_root_window->GetDispatcher()->ConvertPointFromNativeScreen( | 534 dst_root_window->GetDispatcher()->host()->ConvertPointFromNativeScreen( |
| 535 &target_location_in_native); | 535 &target_location_in_native); |
| 536 dst_root_window->MoveCursorTo(target_location_in_native); | 536 dst_root_window->MoveCursorTo(target_location_in_native); |
| 537 } | 537 } |
| 538 | 538 |
| 539 bool DisplayController::UpdateWorkAreaOfDisplayNearestWindow( | 539 bool DisplayController::UpdateWorkAreaOfDisplayNearestWindow( |
| 540 const aura::Window* window, | 540 const aura::Window* window, |
| 541 const gfx::Insets& insets) { | 541 const gfx::Insets& insets) { |
| 542 const aura::Window* root_window = window->GetRootWindow(); | 542 const aura::Window* root_window = window->GetRootWindow(); |
| 543 int64 id = internal::GetRootWindowSettings(root_window)->display_id; | 543 int64 id = internal::GetRootWindowSettings(root_window)->display_id; |
| 544 // if id is |kInvaildDisplayID|, it's being deleted. | 544 // if id is |kInvaildDisplayID|, it's being deleted. |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 669 // root window itself yet because the stack may be using it. | 669 // root window itself yet because the stack may be using it. |
| 670 controller->Shutdown(); | 670 controller->Shutdown(); |
| 671 base::MessageLoop::current()->DeleteSoon(FROM_HERE, controller); | 671 base::MessageLoop::current()->DeleteSoon(FROM_HERE, controller); |
| 672 } | 672 } |
| 673 | 673 |
| 674 void DisplayController::OnRootWindowHostResized(const aura::RootWindow* root) { | 674 void DisplayController::OnRootWindowHostResized(const aura::RootWindow* root) { |
| 675 internal::DisplayManager* display_manager = GetDisplayManager(); | 675 internal::DisplayManager* display_manager = GetDisplayManager(); |
| 676 gfx::Display display = GetDisplayNearestWindow(root->window()); | 676 gfx::Display display = GetDisplayNearestWindow(root->window()); |
| 677 if (display_manager->UpdateDisplayBounds( | 677 if (display_manager->UpdateDisplayBounds( |
| 678 display.id(), | 678 display.id(), |
| 679 gfx::Rect(root->GetHostOrigin(), root->GetHostSize()))) { | 679 root->host()->GetBounds())) { |
| 680 mirror_window_controller_->UpdateWindow(); | 680 mirror_window_controller_->UpdateWindow(); |
| 681 } | 681 } |
| 682 } | 682 } |
| 683 | 683 |
| 684 void DisplayController::CreateOrUpdateNonDesktopDisplay( | 684 void DisplayController::CreateOrUpdateNonDesktopDisplay( |
| 685 const internal::DisplayInfo& info) { | 685 const internal::DisplayInfo& info) { |
| 686 switch (GetDisplayManager()->second_display_mode()) { | 686 switch (GetDisplayManager()->second_display_mode()) { |
| 687 case internal::DisplayManager::MIRRORING: | 687 case internal::DisplayManager::MIRRORING: |
| 688 mirror_window_controller_->UpdateWindow(info); | 688 mirror_window_controller_->UpdateWindow(info); |
| 689 virtual_keyboard_window_controller_->Close(); | 689 virtual_keyboard_window_controller_->Close(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 707 focus_activation_store_->Store(clear_focus); | 707 focus_activation_store_->Store(clear_focus); |
| 708 | 708 |
| 709 gfx::Point point_in_screen = Shell::GetScreen()->GetCursorScreenPoint(); | 709 gfx::Point point_in_screen = Shell::GetScreen()->GetCursorScreenPoint(); |
| 710 gfx::Display display = | 710 gfx::Display display = |
| 711 Shell::GetScreen()->GetDisplayNearestPoint(point_in_screen); | 711 Shell::GetScreen()->GetDisplayNearestPoint(point_in_screen); |
| 712 aura::Window* root_window = GetRootWindowForDisplayId(display.id()); | 712 aura::Window* root_window = GetRootWindowForDisplayId(display.id()); |
| 713 | 713 |
| 714 aura::client::ScreenPositionClient* client = | 714 aura::client::ScreenPositionClient* client = |
| 715 aura::client::GetScreenPositionClient(root_window); | 715 aura::client::GetScreenPositionClient(root_window); |
| 716 client->ConvertPointFromScreen(root_window, &point_in_screen); | 716 client->ConvertPointFromScreen(root_window, &point_in_screen); |
| 717 root_window->GetDispatcher()->ConvertPointToNativeScreen(&point_in_screen); | 717 root_window->GetDispatcher()->host()->ConvertPointToNativeScreen( |
| 718 &point_in_screen); |
| 718 cursor_location_in_native_coords_for_restore_ = point_in_screen; | 719 cursor_location_in_native_coords_for_restore_ = point_in_screen; |
| 719 } | 720 } |
| 720 | 721 |
| 721 void DisplayController::PostDisplayConfigurationChange() { | 722 void DisplayController::PostDisplayConfigurationChange() { |
| 722 if (limiter_) | 723 if (limiter_) |
| 723 limiter_->SetThrottleTimeout(kAfterDisplayChangeThrottleTimeoutMs); | 724 limiter_->SetThrottleTimeout(kAfterDisplayChangeThrottleTimeoutMs); |
| 724 | 725 |
| 725 focus_activation_store_->Restore(); | 726 focus_activation_store_->Restore(); |
| 726 | 727 |
| 727 internal::DisplayManager* display_manager = GetDisplayManager(); | 728 internal::DisplayManager* display_manager = GetDisplayManager(); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 769 root_window->Init(); | 770 root_window->Init(); |
| 770 | 771 |
| 771 root_windows_[display.id()] = root_window->window(); | 772 root_windows_[display.id()] = root_window->window(); |
| 772 SetDisplayPropertiesOnHostWindow(root_window, display); | 773 SetDisplayPropertiesOnHostWindow(root_window, display); |
| 773 | 774 |
| 774 #if defined(OS_CHROMEOS) | 775 #if defined(OS_CHROMEOS) |
| 775 static bool force_constrain_pointer_to_root = | 776 static bool force_constrain_pointer_to_root = |
| 776 CommandLine::ForCurrentProcess()->HasSwitch( | 777 CommandLine::ForCurrentProcess()->HasSwitch( |
| 777 switches::kAshConstrainPointerToRoot); | 778 switches::kAshConstrainPointerToRoot); |
| 778 if (base::SysInfo::IsRunningOnChromeOS() || force_constrain_pointer_to_root) | 779 if (base::SysInfo::IsRunningOnChromeOS() || force_constrain_pointer_to_root) |
| 779 root_window->ConfineCursorToWindow(); | 780 root_window->host()->ConfineCursorToRootWindow(); |
| 780 #endif | 781 #endif |
| 781 return root_window; | 782 return root_window; |
| 782 } | 783 } |
| 783 | 784 |
| 784 void DisplayController::OnFadeOutForSwapDisplayFinished() { | 785 void DisplayController::OnFadeOutForSwapDisplayFinished() { |
| 785 #if defined(OS_CHROMEOS) && defined(USE_X11) | 786 #if defined(OS_CHROMEOS) && defined(USE_X11) |
| 786 SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay()); | 787 SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay()); |
| 787 Shell::GetInstance()->output_configurator_animation()->StartFadeInAnimation(); | 788 Shell::GetInstance()->output_configurator_animation()->StartFadeInAnimation(); |
| 788 #endif | 789 #endif |
| 789 } | 790 } |
| 790 | 791 |
| 791 void DisplayController::UpdateHostWindowNames() { | 792 void DisplayController::UpdateHostWindowNames() { |
| 792 #if defined(USE_X11) | 793 #if defined(USE_X11) |
| 793 // crbug.com/120229 - set the window title for the primary dislpay | 794 // crbug.com/120229 - set the window title for the primary dislpay |
| 794 // to "aura_root_0" so gtalk can find the primary root window to broadcast. | 795 // to "aura_root_0" so gtalk can find the primary root window to broadcast. |
| 795 // TODO(jhorwich) Remove this once Chrome supports window-based broadcasting. | 796 // TODO(jhorwich) Remove this once Chrome supports window-based broadcasting. |
| 796 aura::Window* primary = Shell::GetPrimaryRootWindow(); | 797 aura::Window* primary = Shell::GetPrimaryRootWindow(); |
| 797 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 798 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 798 for (size_t i = 0; i < root_windows.size(); ++i) { | 799 for (size_t i = 0; i < root_windows.size(); ++i) { |
| 799 std::string name = | 800 std::string name = |
| 800 root_windows[i] == primary ? "aura_root_0" : "aura_root_x"; | 801 root_windows[i] == primary ? "aura_root_0" : "aura_root_x"; |
| 801 gfx::AcceleratedWidget xwindow = | 802 gfx::AcceleratedWidget xwindow = |
| 802 root_windows[i]->GetDispatcher()->GetAcceleratedWidget(); | 803 root_windows[i]->GetDispatcher()->host()->GetAcceleratedWidget(); |
| 803 XStoreName(gfx::GetXDisplay(), xwindow, name.c_str()); | 804 XStoreName(gfx::GetXDisplay(), xwindow, name.c_str()); |
| 804 } | 805 } |
| 805 #endif | 806 #endif |
| 806 } | 807 } |
| 807 | 808 |
| 808 } // namespace ash | 809 } // namespace ash |
| OLD | NEW |