| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/dock/docked_window_layout_manager.h" | 5 #include "ash/wm/dock/docked_window_layout_manager.h" |
| 6 | 6 |
| 7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 8 #include "ash/screen_ash.h" | 8 #include "ash/screen_util.h" |
| 9 #include "ash/shelf/shelf.h" | 9 #include "ash/shelf/shelf.h" |
| 10 #include "ash/shelf/shelf_constants.h" | 10 #include "ash/shelf/shelf_constants.h" |
| 11 #include "ash/shelf/shelf_layout_manager.h" | 11 #include "ash/shelf/shelf_layout_manager.h" |
| 12 #include "ash/shelf/shelf_types.h" | 12 #include "ash/shelf/shelf_types.h" |
| 13 #include "ash/shelf/shelf_widget.h" | 13 #include "ash/shelf/shelf_widget.h" |
| 14 #include "ash/shell.h" | 14 #include "ash/shell.h" |
| 15 #include "ash/shell_window_ids.h" | 15 #include "ash/shell_window_ids.h" |
| 16 #include "ash/wm/coordinate_conversion.h" | 16 #include "ash/wm/coordinate_conversion.h" |
| 17 #include "ash/wm/window_animations.h" | 17 #include "ash/wm/window_animations.h" |
| 18 #include "ash/wm/window_properties.h" | 18 #include "ash/wm/window_properties.h" |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 CompareWindowPos(aura::Window* dragged_window, float delta) | 304 CompareWindowPos(aura::Window* dragged_window, float delta) |
| 305 : dragged_window_(dragged_window), | 305 : dragged_window_(dragged_window), |
| 306 delta_(delta / 2) {} | 306 delta_(delta / 2) {} |
| 307 | 307 |
| 308 bool operator()(WindowWithHeight window_with_height1, | 308 bool operator()(WindowWithHeight window_with_height1, |
| 309 WindowWithHeight window_with_height2) { | 309 WindowWithHeight window_with_height2) { |
| 310 // Use target coordinates since animations may be active when windows are | 310 // Use target coordinates since animations may be active when windows are |
| 311 // reordered. | 311 // reordered. |
| 312 aura::Window* win1(window_with_height1.window()); | 312 aura::Window* win1(window_with_height1.window()); |
| 313 aura::Window* win2(window_with_height2.window()); | 313 aura::Window* win2(window_with_height2.window()); |
| 314 gfx::Rect win1_bounds = ScreenAsh::ConvertRectToScreen( | 314 gfx::Rect win1_bounds = ScreenUtil::ConvertRectToScreen( |
| 315 win1->parent(), win1->GetTargetBounds()); | 315 win1->parent(), win1->GetTargetBounds()); |
| 316 gfx::Rect win2_bounds = ScreenAsh::ConvertRectToScreen( | 316 gfx::Rect win2_bounds = ScreenUtil::ConvertRectToScreen( |
| 317 win2->parent(), win2->GetTargetBounds()); | 317 win2->parent(), win2->GetTargetBounds()); |
| 318 win1_bounds.set_height(window_with_height1.height_); | 318 win1_bounds.set_height(window_with_height1.height_); |
| 319 win2_bounds.set_height(window_with_height2.height_); | 319 win2_bounds.set_height(window_with_height2.height_); |
| 320 // If one of the windows is the |dragged_window_| attempt to make an | 320 // If one of the windows is the |dragged_window_| attempt to make an |
| 321 // earlier swap between the windows than just based on their centers. | 321 // earlier swap between the windows than just based on their centers. |
| 322 // This is possible if the dragged window is at least as tall as the other | 322 // This is possible if the dragged window is at least as tall as the other |
| 323 // window. | 323 // window. |
| 324 if (win1 == dragged_window_) | 324 if (win1 == dragged_window_) |
| 325 return compare_two_windows(win1_bounds, win2_bounds); | 325 return compare_two_windows(win1_bounds, win2_bounds); |
| 326 if (win2 == dragged_window_) | 326 if (win2 == dragged_window_) |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 if (docked_layout_manager_->shelf() && | 375 if (docked_layout_manager_->shelf() && |
| 376 docked_layout_manager_->shelf()->shelf_widget()) | 376 docked_layout_manager_->shelf()->shelf_widget()) |
| 377 docked_layout_manager_->shelf()->shelf_widget()->GetNativeView() | 377 docked_layout_manager_->shelf()->shelf_widget()->GetNativeView() |
| 378 ->RemoveObserver(this); | 378 ->RemoveObserver(this); |
| 379 } | 379 } |
| 380 | 380 |
| 381 // aura::WindowObserver: | 381 // aura::WindowObserver: |
| 382 virtual void OnWindowBoundsChanged(aura::Window* window, | 382 virtual void OnWindowBoundsChanged(aura::Window* window, |
| 383 const gfx::Rect& old_bounds, | 383 const gfx::Rect& old_bounds, |
| 384 const gfx::Rect& new_bounds) OVERRIDE { | 384 const gfx::Rect& new_bounds) OVERRIDE { |
| 385 shelf_bounds_in_screen_ = ScreenAsh::ConvertRectToScreen( | 385 shelf_bounds_in_screen_ = ScreenUtil::ConvertRectToScreen( |
| 386 window->parent(), new_bounds); | 386 window->parent(), new_bounds); |
| 387 docked_layout_manager_->OnShelfBoundsChanged(); | 387 docked_layout_manager_->OnShelfBoundsChanged(); |
| 388 } | 388 } |
| 389 | 389 |
| 390 const gfx::Rect& shelf_bounds_in_screen() const { | 390 const gfx::Rect& shelf_bounds_in_screen() const { |
| 391 return shelf_bounds_in_screen_; | 391 return shelf_bounds_in_screen_; |
| 392 } | 392 } |
| 393 | 393 |
| 394 private: | 394 private: |
| 395 DockedWindowLayoutManager* docked_layout_manager_; | 395 DockedWindowLayoutManager* docked_layout_manager_; |
| (...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1142 } | 1142 } |
| 1143 UpdateDockedWidth(new_width); | 1143 UpdateDockedWidth(new_width); |
| 1144 // Sort windows by their center positions and fan out overlapping | 1144 // Sort windows by their center positions and fan out overlapping |
| 1145 // windows. | 1145 // windows. |
| 1146 std::sort(visible_windows->begin(), visible_windows->end(), | 1146 std::sort(visible_windows->begin(), visible_windows->end(), |
| 1147 CompareWindowPos(is_dragged_from_dock_ ? dragged_window_ : NULL, | 1147 CompareWindowPos(is_dragged_from_dock_ ? dragged_window_ : NULL, |
| 1148 delta)); | 1148 delta)); |
| 1149 for (std::vector<WindowWithHeight>::iterator iter = visible_windows->begin(); | 1149 for (std::vector<WindowWithHeight>::iterator iter = visible_windows->begin(); |
| 1150 iter != visible_windows->end(); ++iter) { | 1150 iter != visible_windows->end(); ++iter) { |
| 1151 aura::Window* window = iter->window(); | 1151 aura::Window* window = iter->window(); |
| 1152 gfx::Rect bounds = ScreenAsh::ConvertRectToScreen( | 1152 gfx::Rect bounds = ScreenUtil::ConvertRectToScreen( |
| 1153 window->parent(), window->GetTargetBounds()); | 1153 window->parent(), window->GetTargetBounds()); |
| 1154 // A window is extended or shrunk to be as close as possible to the ideal | 1154 // A window is extended or shrunk to be as close as possible to the ideal |
| 1155 // docked area width. Windows that were resized by a user are kept at their | 1155 // docked area width. Windows that were resized by a user are kept at their |
| 1156 // existing size. | 1156 // existing size. |
| 1157 // This also enforces the min / max restrictions on the docked area width. | 1157 // This also enforces the min / max restrictions on the docked area width. |
| 1158 bounds.set_width(GetWindowWidthCloseTo( | 1158 bounds.set_width(GetWindowWidthCloseTo( |
| 1159 window, | 1159 window, |
| 1160 wm::GetWindowState(window)->bounds_changed_by_user() ? | 1160 wm::GetWindowState(window)->bounds_changed_by_user() ? |
| 1161 bounds.width() : ideal_docked_width)); | 1161 bounds.width() : ideal_docked_width)); |
| 1162 DCHECK_LE(bounds.width(), ideal_docked_width); | 1162 DCHECK_LE(bounds.width(), ideal_docked_width); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1189 case DOCKED_ALIGNMENT_NONE: | 1189 case DOCKED_ALIGNMENT_NONE: |
| 1190 break; | 1190 break; |
| 1191 } | 1191 } |
| 1192 if (window == dragged_window_) { | 1192 if (window == dragged_window_) { |
| 1193 dragged_bounds_ = bounds; | 1193 dragged_bounds_ = bounds; |
| 1194 continue; | 1194 continue; |
| 1195 } | 1195 } |
| 1196 // If the following asserts it is probably because not all the children | 1196 // If the following asserts it is probably because not all the children |
| 1197 // have been removed when dock was closed. | 1197 // have been removed when dock was closed. |
| 1198 DCHECK_NE(alignment_, DOCKED_ALIGNMENT_NONE); | 1198 DCHECK_NE(alignment_, DOCKED_ALIGNMENT_NONE); |
| 1199 bounds = ScreenAsh::ConvertRectFromScreen(dock_container_, bounds); | 1199 bounds = ScreenUtil::ConvertRectFromScreen(dock_container_, bounds); |
| 1200 if (bounds != window->GetTargetBounds()) { | 1200 if (bounds != window->GetTargetBounds()) { |
| 1201 ui::Layer* layer = window->layer(); | 1201 ui::Layer* layer = window->layer(); |
| 1202 ui::ScopedLayerAnimationSettings slide_settings(layer->GetAnimator()); | 1202 ui::ScopedLayerAnimationSettings slide_settings(layer->GetAnimator()); |
| 1203 slide_settings.SetPreemptionStrategy( | 1203 slide_settings.SetPreemptionStrategy( |
| 1204 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); | 1204 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
| 1205 slide_settings.SetTransitionDuration( | 1205 slide_settings.SetTransitionDuration( |
| 1206 base::TimeDelta::FromMilliseconds(kSlideDurationMs)); | 1206 base::TimeDelta::FromMilliseconds(kSlideDurationMs)); |
| 1207 SetChildBoundsDirect(window, bounds); | 1207 SetChildBoundsDirect(window, bounds); |
| 1208 } | 1208 } |
| 1209 } | 1209 } |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1299 void DockedWindowLayoutManager::OnKeyboardBoundsChanging( | 1299 void DockedWindowLayoutManager::OnKeyboardBoundsChanging( |
| 1300 const gfx::Rect& keyboard_bounds) { | 1300 const gfx::Rect& keyboard_bounds) { |
| 1301 // This bounds change will have caused a change to the Shelf which does not | 1301 // This bounds change will have caused a change to the Shelf which does not |
| 1302 // propagate automatically to this class, so manually recalculate bounds. | 1302 // propagate automatically to this class, so manually recalculate bounds. |
| 1303 Relayout(); | 1303 Relayout(); |
| 1304 UpdateDockBounds(DockedWindowLayoutManagerObserver::KEYBOARD_BOUNDS_CHANGING); | 1304 UpdateDockBounds(DockedWindowLayoutManagerObserver::KEYBOARD_BOUNDS_CHANGING); |
| 1305 } | 1305 } |
| 1306 | 1306 |
| 1307 } // namespace internal | 1307 } // namespace internal |
| 1308 } // namespace ash | 1308 } // namespace ash |
| OLD | NEW |