| 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/window_animations.h" | 5 #include "ash/wm/window_animations.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "ash/launcher/launcher.h" | |
| 13 #include "ash/screen_ash.h" | 12 #include "ash/screen_ash.h" |
| 13 #include "ash/shelf/shelf.h" |
| 14 #include "ash/shelf/shelf_layout_manager.h" | 14 #include "ash/shelf/shelf_layout_manager.h" |
| 15 #include "ash/shelf/shelf_widget.h" | 15 #include "ash/shelf/shelf_widget.h" |
| 16 #include "ash/shell.h" | 16 #include "ash/shell.h" |
| 17 #include "ash/wm/window_util.h" | 17 #include "ash/wm/window_util.h" |
| 18 #include "ash/wm/workspace_controller.h" | 18 #include "ash/wm/workspace_controller.h" |
| 19 #include "base/command_line.h" | 19 #include "base/command_line.h" |
| 20 #include "base/compiler_specific.h" | 20 #include "base/compiler_specific.h" |
| 21 #include "base/logging.h" | 21 #include "base/logging.h" |
| 22 #include "base/message_loop/message_loop.h" | 22 #include "base/message_loop/message_loop.h" |
| 23 #include "base/stl_util.h" | 23 #include "base/stl_util.h" |
| (...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 type == LAYER_SCALE_ANIMATION_ABOVE ? kLayerScaleAboveSize : | 494 type == LAYER_SCALE_ANIMATION_ABOVE ? kLayerScaleAboveSize : |
| 495 kLayerScaleBelowSize; | 495 kLayerScaleBelowSize; |
| 496 gfx::Transform transform; | 496 gfx::Transform transform; |
| 497 transform.Translate(-layer->bounds().width() * (scale - 1.0f) / 2, | 497 transform.Translate(-layer->bounds().width() * (scale - 1.0f) / 2, |
| 498 -layer->bounds().height() * (scale - 1.0f) / 2); | 498 -layer->bounds().height() * (scale - 1.0f) / 2); |
| 499 transform.Scale(scale, scale); | 499 transform.Scale(scale, scale); |
| 500 layer->SetTransform(transform); | 500 layer->SetTransform(transform); |
| 501 } | 501 } |
| 502 | 502 |
| 503 gfx::Rect GetMinimizeAnimationTargetBoundsInScreen(aura::Window* window) { | 503 gfx::Rect GetMinimizeAnimationTargetBoundsInScreen(aura::Window* window) { |
| 504 Launcher* launcher = Launcher::ForWindow(window); | 504 Shelf* shelf = Shelf::ForWindow(window); |
| 505 // Shelf is created lazily and can be NULL. | 505 // Shelf is created lazily and can be NULL. |
| 506 if (!launcher) | 506 if (!shelf) |
| 507 return gfx::Rect(); | 507 return gfx::Rect(); |
| 508 gfx::Rect item_rect = launcher->GetScreenBoundsOfItemIconForWindow(window); | 508 gfx::Rect item_rect = shelf->GetScreenBoundsOfItemIconForWindow(window); |
| 509 | 509 |
| 510 // The launcher item is visible and has an icon. | 510 // The launcher item is visible and has an icon. |
| 511 if (!item_rect.IsEmpty()) | 511 if (!item_rect.IsEmpty()) |
| 512 return item_rect; | 512 return item_rect; |
| 513 | 513 |
| 514 // If both the icon width and height are 0, then there is no icon in the | 514 // If both the icon width and height are 0, then there is no icon in the |
| 515 // launcher for |window| or the icon is hidden in the overflow menu. If the | 515 // launcher for |window| or the icon is hidden in the overflow menu. If the |
| 516 // launcher is auto hidden, one of the height or width will be 0 but the | 516 // launcher is auto hidden, one of the height or width will be 0 but the |
| 517 // position in the launcher and the major dimension are still reported | 517 // position in the launcher and the major dimension are still reported |
| 518 // correctly and the window can be animated to the launcher item's light | 518 // correctly and the window can be animated to the launcher item's light |
| 519 // bar. | 519 // bar. |
| 520 if (item_rect.width() != 0 || item_rect.height() != 0) { | 520 if (item_rect.width() != 0 || item_rect.height() != 0) { |
| 521 internal::ShelfLayoutManager* layout_manager = | 521 internal::ShelfLayoutManager* layout_manager = |
| 522 internal::ShelfLayoutManager::ForLauncher(window); | 522 internal::ShelfLayoutManager::ForShelf(window); |
| 523 if (layout_manager->visibility_state() == SHELF_AUTO_HIDE) { | 523 if (layout_manager->visibility_state() == SHELF_AUTO_HIDE) { |
| 524 gfx::Rect shelf_bounds = | 524 gfx::Rect shelf_bounds = shelf->shelf_widget()->GetWindowBoundsInScreen(); |
| 525 launcher->shelf_widget()->GetWindowBoundsInScreen(); | |
| 526 switch (layout_manager->GetAlignment()) { | 525 switch (layout_manager->GetAlignment()) { |
| 527 case SHELF_ALIGNMENT_BOTTOM: | 526 case SHELF_ALIGNMENT_BOTTOM: |
| 528 item_rect.set_y(shelf_bounds.y()); | 527 item_rect.set_y(shelf_bounds.y()); |
| 529 break; | 528 break; |
| 530 case SHELF_ALIGNMENT_LEFT: | 529 case SHELF_ALIGNMENT_LEFT: |
| 531 item_rect.set_x(shelf_bounds.right()); | 530 item_rect.set_x(shelf_bounds.right()); |
| 532 break; | 531 break; |
| 533 case SHELF_ALIGNMENT_RIGHT: | 532 case SHELF_ALIGNMENT_RIGHT: |
| 534 item_rect.set_x(shelf_bounds.x()); | 533 item_rect.set_x(shelf_bounds.x()); |
| 535 break; | 534 break; |
| 536 case SHELF_ALIGNMENT_TOP: | 535 case SHELF_ALIGNMENT_TOP: |
| 537 item_rect.set_y(shelf_bounds.bottom()); | 536 item_rect.set_y(shelf_bounds.bottom()); |
| 538 break; | 537 break; |
| 539 } | 538 } |
| 540 return item_rect; | 539 return item_rect; |
| 541 } | 540 } |
| 542 } | 541 } |
| 543 | 542 |
| 544 // Assume the launcher is overflowed, zoom off to the bottom right of the | 543 // Assume the shelf is overflowed, zoom off to the bottom right of the |
| 545 // work area. | 544 // work area. |
| 546 gfx::Rect work_area = | 545 gfx::Rect work_area = |
| 547 Shell::GetScreen()->GetDisplayNearestWindow(window).work_area(); | 546 Shell::GetScreen()->GetDisplayNearestWindow(window).work_area(); |
| 548 return gfx::Rect(work_area.right(), work_area.bottom(), 0, 0); | 547 return gfx::Rect(work_area.right(), work_area.bottom(), 0, 0); |
| 549 } | 548 } |
| 550 | 549 |
| 551 } // namespace ash | 550 } // namespace ash |
| OLD | NEW |