| 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/wm/panels/panel_layout_manager.h" | 5 #include "ash/wm/panels/panel_layout_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "ash/keyboard/keyboard_observer_register.h" | 11 #include "ash/keyboard/keyboard_observer_register.h" |
| 12 #include "ash/public/cpp/shell_window_ids.h" | 12 #include "ash/public/cpp/shell_window_ids.h" |
| 13 #include "ash/public/cpp/window_properties.h" | 13 #include "ash/public/cpp/window_properties.h" |
| 14 #include "ash/root_window_controller.h" | 14 #include "ash/root_window_controller.h" |
| 15 #include "ash/shelf/wm_shelf.h" | 15 #include "ash/shelf/shelf.h" |
| 16 #include "ash/shell.h" | 16 #include "ash/shell.h" |
| 17 #include "ash/shell_port.h" | 17 #include "ash/shell_port.h" |
| 18 #include "ash/wm/overview/window_selector_controller.h" | 18 #include "ash/wm/overview/window_selector_controller.h" |
| 19 #include "ash/wm/window_animation_types.h" | 19 #include "ash/wm/window_animation_types.h" |
| 20 #include "ash/wm/window_parenting_utils.h" | 20 #include "ash/wm/window_parenting_utils.h" |
| 21 #include "ash/wm/window_properties.h" | 21 #include "ash/wm/window_properties.h" |
| 22 #include "ash/wm/window_state.h" | 22 #include "ash/wm/window_state.h" |
| 23 #include "ash/wm/window_util.h" | 23 #include "ash/wm/window_util.h" |
| 24 #include "ash/wm_window.h" | 24 #include "ash/wm_window.h" |
| 25 #include "base/auto_reset.h" | 25 #include "base/auto_reset.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 | 181 |
| 182 } // namespace | 182 } // namespace |
| 183 | 183 |
| 184 class PanelCalloutWidget : public views::Widget { | 184 class PanelCalloutWidget : public views::Widget { |
| 185 public: | 185 public: |
| 186 explicit PanelCalloutWidget(WmWindow* container) : background_(nullptr) { | 186 explicit PanelCalloutWidget(WmWindow* container) : background_(nullptr) { |
| 187 InitWidget(container); | 187 InitWidget(container); |
| 188 } | 188 } |
| 189 | 189 |
| 190 // Updates the bounds based on the shelf alignment. | 190 // Updates the bounds based on the shelf alignment. |
| 191 void UpdateBounds(WmShelf* shelf) { | 191 void UpdateBounds(Shelf* shelf) { |
| 192 WmWindow* window = WmWindow::Get(this->GetNativeWindow()); | 192 WmWindow* window = WmWindow::Get(this->GetNativeWindow()); |
| 193 gfx::Rect callout_bounds = window->GetBounds(); | 193 gfx::Rect callout_bounds = window->GetBounds(); |
| 194 if (shelf->IsHorizontalAlignment()) { | 194 if (shelf->IsHorizontalAlignment()) { |
| 195 callout_bounds.set_width(kArrowWidth); | 195 callout_bounds.set_width(kArrowWidth); |
| 196 callout_bounds.set_height(kArrowHeight); | 196 callout_bounds.set_height(kArrowHeight); |
| 197 } else { | 197 } else { |
| 198 callout_bounds.set_width(kArrowHeight); | 198 callout_bounds.set_width(kArrowHeight); |
| 199 callout_bounds.set_height(kArrowWidth); | 199 callout_bounds.set_height(kArrowWidth); |
| 200 } | 200 } |
| 201 WmWindow* parent = window->GetParent(); | 201 WmWindow* parent = window->GetParent(); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 DCHECK(!dragged_panel_); | 298 DCHECK(!dragged_panel_); |
| 299 dragged_panel_ = panel; | 299 dragged_panel_ = panel; |
| 300 Relayout(); | 300 Relayout(); |
| 301 } | 301 } |
| 302 | 302 |
| 303 void PanelLayoutManager::FinishDragging() { | 303 void PanelLayoutManager::FinishDragging() { |
| 304 dragged_panel_ = nullptr; | 304 dragged_panel_ = nullptr; |
| 305 Relayout(); | 305 Relayout(); |
| 306 } | 306 } |
| 307 | 307 |
| 308 void PanelLayoutManager::SetShelf(WmShelf* shelf) { | 308 void PanelLayoutManager::SetShelf(Shelf* shelf) { |
| 309 DCHECK(!shelf_); | 309 DCHECK(!shelf_); |
| 310 shelf_ = shelf; | 310 shelf_ = shelf; |
| 311 shelf_->AddObserver(this); | 311 shelf_->AddObserver(this); |
| 312 WillChangeVisibilityState(shelf_->GetVisibilityState()); | 312 WillChangeVisibilityState(shelf_->GetVisibilityState()); |
| 313 } | 313 } |
| 314 | 314 |
| 315 void PanelLayoutManager::ToggleMinimize(WmWindow* panel) { | 315 void PanelLayoutManager::ToggleMinimize(WmWindow* panel) { |
| 316 DCHECK(panel->GetParent() == panel_container_); | 316 DCHECK(panel->GetParent() == panel_container_); |
| 317 wm::WindowState* window_state = panel->GetWindowState(); | 317 wm::WindowState* window_state = panel->GetWindowState(); |
| 318 if (window_state->IsMinimized()) | 318 if (window_state->IsMinimized()) |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 | 580 |
| 581 ::wm::SetWindowVisibilityAnimationType( | 581 ::wm::SetWindowVisibilityAnimationType( |
| 582 panel, wm::WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE); | 582 panel, wm::WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE); |
| 583 ui::Layer* layer = panel->layer(); | 583 ui::Layer* layer = panel->layer(); |
| 584 ui::ScopedLayerAnimationSettings panel_slide_settings(layer->GetAnimator()); | 584 ui::ScopedLayerAnimationSettings panel_slide_settings(layer->GetAnimator()); |
| 585 panel_slide_settings.SetPreemptionStrategy( | 585 panel_slide_settings.SetPreemptionStrategy( |
| 586 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); | 586 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
| 587 panel_slide_settings.SetTransitionDuration( | 587 panel_slide_settings.SetTransitionDuration( |
| 588 base::TimeDelta::FromMilliseconds(kPanelSlideDurationMilliseconds)); | 588 base::TimeDelta::FromMilliseconds(kPanelSlideDurationMilliseconds)); |
| 589 gfx::Rect bounds(panel->bounds()); | 589 gfx::Rect bounds(panel->bounds()); |
| 590 bounds.Offset(GetSlideInAnimationOffset(shelf_->GetAlignment())); | 590 bounds.Offset(GetSlideInAnimationOffset(shelf_->alignment())); |
| 591 SetChildBoundsDirect(panel, bounds); | 591 SetChildBoundsDirect(panel, bounds); |
| 592 panel->Hide(); | 592 panel->Hide(); |
| 593 layer->SetOpacity(0); | 593 layer->SetOpacity(0); |
| 594 if (::wm::IsActiveWindow(panel)) | 594 if (::wm::IsActiveWindow(panel)) |
| 595 ::wm::DeactivateWindow(panel); | 595 ::wm::DeactivateWindow(panel); |
| 596 Relayout(); | 596 Relayout(); |
| 597 } | 597 } |
| 598 | 598 |
| 599 void PanelLayoutManager::RestorePanel(aura::Window* panel) { | 599 void PanelLayoutManager::RestorePanel(aura::Window* panel) { |
| 600 PanelList::iterator found = std::find( | 600 PanelList::iterator found = std::find( |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 855 std::max(current_bounds.x() - callout_bounds.x(), | 855 std::max(current_bounds.x() - callout_bounds.x(), |
| 856 callout_bounds.right() - current_bounds.right()); | 856 callout_bounds.right() - current_bounds.right()); |
| 857 } else { | 857 } else { |
| 858 callout_bounds.set_y(icon_bounds.y() + | 858 callout_bounds.set_y(icon_bounds.y() + |
| 859 (icon_bounds.height() - callout_bounds.height()) / | 859 (icon_bounds.height() - callout_bounds.height()) / |
| 860 2); | 860 2); |
| 861 distance_until_over_panel = | 861 distance_until_over_panel = |
| 862 std::max(current_bounds.y() - callout_bounds.y(), | 862 std::max(current_bounds.y() - callout_bounds.y(), |
| 863 callout_bounds.bottom() - current_bounds.bottom()); | 863 callout_bounds.bottom() - current_bounds.bottom()); |
| 864 } | 864 } |
| 865 if (shelf_->GetAlignment() == SHELF_ALIGNMENT_LEFT) | 865 if (shelf_->alignment() == SHELF_ALIGNMENT_LEFT) |
| 866 callout_bounds.set_x(bounds.x() - callout_bounds.width()); | 866 callout_bounds.set_x(bounds.x() - callout_bounds.width()); |
| 867 else if (shelf_->GetAlignment() == SHELF_ALIGNMENT_RIGHT) | 867 else if (shelf_->alignment() == SHELF_ALIGNMENT_RIGHT) |
| 868 callout_bounds.set_x(bounds.right()); | 868 callout_bounds.set_x(bounds.right()); |
| 869 else | 869 else |
| 870 callout_bounds.set_y(bounds.bottom()); | 870 callout_bounds.set_y(bounds.bottom()); |
| 871 callout_bounds = callout_widget_window->GetParent()->ConvertRectFromScreen( | 871 callout_bounds = callout_widget_window->GetParent()->ConvertRectFromScreen( |
| 872 callout_bounds); | 872 callout_bounds); |
| 873 | 873 |
| 874 SetChildBoundsDirect(callout_widget_window->aura_window(), callout_bounds); | 874 SetChildBoundsDirect(callout_widget_window->aura_window(), callout_bounds); |
| 875 DCHECK_EQ(panel_container_, callout_widget_window->GetParent()); | 875 DCHECK_EQ(panel_container_, callout_widget_window->GetParent()); |
| 876 DCHECK_EQ(panel_container_, panel->GetParent()); | 876 DCHECK_EQ(panel_container_, panel->GetParent()); |
| 877 panel_container_->StackChildAbove(callout_widget_window, panel); | 877 panel_container_->StackChildAbove(callout_widget_window, panel); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 // This bounds change will have caused a change to the Shelf which does not | 942 // This bounds change will have caused a change to the Shelf which does not |
| 943 // propogate automatically to this class, so manually recalculate bounds. | 943 // propogate automatically to this class, so manually recalculate bounds. |
| 944 OnWindowResized(); | 944 OnWindowResized(); |
| 945 } | 945 } |
| 946 | 946 |
| 947 void PanelLayoutManager::OnKeyboardClosed() { | 947 void PanelLayoutManager::OnKeyboardClosed() { |
| 948 keyboard_observer_.RemoveAll(); | 948 keyboard_observer_.RemoveAll(); |
| 949 } | 949 } |
| 950 | 950 |
| 951 } // namespace ash | 951 } // namespace ash |
| OLD | NEW |