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/shelf/shelf_layout_manager.h" | 5 #include "ash/shelf/shelf_layout_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 | 9 |
10 #include "ash/ash_switches.h" | 10 #include "ash/ash_switches.h" |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
633 bounds->Inset(SelectValueForShelfAlignment( | 633 bounds->Inset(SelectValueForShelfAlignment( |
634 gfx::Insets(0, 0, inset, 0), | 634 gfx::Insets(0, 0, inset, 0), |
635 gfx::Insets(0, inset, 0, 0), | 635 gfx::Insets(0, inset, 0, 0), |
636 gfx::Insets(0, 0, 0, inset), | 636 gfx::Insets(0, 0, 0, inset), |
637 gfx::Insets(inset, 0, 0, 0))); | 637 gfx::Insets(inset, 0, 0, 0))); |
638 } | 638 } |
639 | 639 |
640 void ShelfLayoutManager::CalculateTargetBounds( | 640 void ShelfLayoutManager::CalculateTargetBounds( |
641 const State& state, | 641 const State& state, |
642 TargetBounds* target_bounds) { | 642 TargetBounds* target_bounds) { |
643 const gfx::Rect& available_bounds(root_window_->bounds()); | 643 const gfx::Rect available_bounds(GetAvailableBounds()); |
644 gfx::Rect status_size( | 644 gfx::Rect status_size( |
645 shelf_->status_area_widget()->GetWindowBoundsInScreen().size()); | 645 shelf_->status_area_widget()->GetWindowBoundsInScreen().size()); |
646 int shelf_width = 0, shelf_height = 0; | 646 int shelf_width = 0, shelf_height = 0; |
647 GetShelfSize(&shelf_width, &shelf_height); | 647 GetShelfSize(&shelf_width, &shelf_height); |
648 if (IsHorizontalAlignment()) | 648 if (IsHorizontalAlignment()) |
649 shelf_width = available_bounds.width(); | 649 shelf_width = available_bounds.width(); |
650 else | 650 else |
651 shelf_height = available_bounds.height(); | 651 shelf_height = available_bounds.height(); |
652 | 652 |
653 if (state.visibility_state == SHELF_AUTO_HIDE && | 653 if (state.visibility_state == SHELF_AUTO_HIDE && |
654 state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN) { | 654 state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN) { |
655 // Auto-hidden shelf always starts with the default size. If a gesture-drag | 655 // Auto-hidden shelf always starts with the default size. If a gesture-drag |
656 // is in progress, then the call to UpdateTargetBoundsForGesture() below | 656 // is in progress, then the call to UpdateTargetBoundsForGesture() below |
657 // takes care of setting the height properly. | 657 // takes care of setting the height properly. |
658 if (IsHorizontalAlignment()) | 658 if (IsHorizontalAlignment()) |
659 shelf_height = kAutoHideSize; | 659 shelf_height = kAutoHideSize; |
660 else | 660 else |
661 shelf_width = kAutoHideSize; | 661 shelf_width = kAutoHideSize; |
662 } else if (state.visibility_state == SHELF_HIDDEN) { | 662 } else if (state.visibility_state == SHELF_HIDDEN || |
663 !keyboard_bounds_.IsEmpty()) { | |
663 if (IsHorizontalAlignment()) | 664 if (IsHorizontalAlignment()) |
664 shelf_height = 0; | 665 shelf_height = 0; |
665 else | 666 else |
666 shelf_width = 0; | 667 shelf_width = 0; |
667 } | 668 } |
668 | 669 |
669 target_bounds->shelf_bounds_in_root = SelectValueForShelfAlignment( | 670 target_bounds->shelf_bounds_in_root = SelectValueForShelfAlignment( |
670 gfx::Rect(available_bounds.x(), available_bounds.bottom() - shelf_height, | 671 gfx::Rect(available_bounds.x(), available_bounds.bottom() - shelf_height, |
671 available_bounds.width(), shelf_height), | 672 available_bounds.width(), shelf_height), |
672 gfx::Rect(available_bounds.x(), available_bounds.y(), | 673 gfx::Rect(available_bounds.x(), available_bounds.y(), |
(...skipping 17 matching lines...) Expand all Loading... | |
690 gfx::Rect(base::i18n::IsRTL() ? 0 : shelf_width - status_size.width(), | 691 gfx::Rect(base::i18n::IsRTL() ? 0 : shelf_width - status_size.width(), |
691 shelf_height - (status_size.height() + status_inset), | 692 shelf_height - (status_size.height() + status_inset), |
692 status_size.width(), status_size.height())); | 693 status_size.width(), status_size.height())); |
693 | 694 |
694 target_bounds->work_area_insets = SelectValueForShelfAlignment( | 695 target_bounds->work_area_insets = SelectValueForShelfAlignment( |
695 gfx::Insets(0, 0, GetWorkAreaSize(state, shelf_height), 0), | 696 gfx::Insets(0, 0, GetWorkAreaSize(state, shelf_height), 0), |
696 gfx::Insets(0, GetWorkAreaSize(state, shelf_width), 0, 0), | 697 gfx::Insets(0, GetWorkAreaSize(state, shelf_width), 0, 0), |
697 gfx::Insets(0, 0, 0, GetWorkAreaSize(state, shelf_width)), | 698 gfx::Insets(0, 0, 0, GetWorkAreaSize(state, shelf_width)), |
698 gfx::Insets(GetWorkAreaSize(state, shelf_height), 0, 0, 0)); | 699 gfx::Insets(GetWorkAreaSize(state, shelf_height), 0, 0, 0)); |
699 | 700 |
701 // Also push in the work area inset for the keyboard if it is visible. | |
702 if (!keyboard_bounds_.IsEmpty()) { | |
703 target_bounds->work_area_insets.Set( | |
704 target_bounds->work_area_insets.top(), | |
705 target_bounds->work_area_insets.left(), | |
706 keyboard_bounds_.height(), | |
sadrul
2013/04/26 02:54:16
If you set bottom to:
keyboard_bounds_.height()
bryeung
2013/04/26 13:44:50
When the keyboard is showing, work_area_inserts.bo
| |
707 target_bounds->work_area_insets.right()); | |
708 } | |
709 | |
700 target_bounds->opacity = | 710 target_bounds->opacity = |
701 (gesture_drag_status_ != GESTURE_DRAG_NONE || | 711 (gesture_drag_status_ != GESTURE_DRAG_NONE || |
702 state.visibility_state == SHELF_VISIBLE || | 712 state.visibility_state == SHELF_VISIBLE || |
703 state.visibility_state == SHELF_AUTO_HIDE) ? 1.0f : 0.0f; | 713 state.visibility_state == SHELF_AUTO_HIDE) ? 1.0f : 0.0f; |
704 | 714 |
705 if (gesture_drag_status_ == GESTURE_DRAG_IN_PROGRESS) | 715 if (gesture_drag_status_ == GESTURE_DRAG_IN_PROGRESS) |
706 UpdateTargetBoundsForGesture(target_bounds); | 716 UpdateTargetBoundsForGesture(target_bounds); |
707 | 717 |
708 // This needs to happen after calling UpdateTargetBoundsForGesture(), because | 718 // This needs to happen after calling UpdateTargetBoundsForGesture(), because |
709 // that can change the size of the shelf. | 719 // that can change the size of the shelf. |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
906 } | 916 } |
907 | 917 |
908 int ShelfLayoutManager::GetWorkAreaSize(const State& state, int size) const { | 918 int ShelfLayoutManager::GetWorkAreaSize(const State& state, int size) const { |
909 if (state.visibility_state == SHELF_VISIBLE) | 919 if (state.visibility_state == SHELF_VISIBLE) |
910 return size; | 920 return size; |
911 if (state.visibility_state == SHELF_AUTO_HIDE) | 921 if (state.visibility_state == SHELF_AUTO_HIDE) |
912 return kAutoHideSize; | 922 return kAutoHideSize; |
913 return 0; | 923 return 0; |
914 } | 924 } |
915 | 925 |
926 gfx::Rect ShelfLayoutManager::GetAvailableBounds() const { | |
927 gfx::Rect bounds(root_window_->bounds()); | |
928 bounds.set_height(bounds.height() - keyboard_bounds_.height()); | |
929 return bounds; | |
930 } | |
931 | |
932 void ShelfLayoutManager::OnKeyboardBoundsChanged( | |
933 const gfx::Rect& keyboard_bounds) { | |
934 keyboard_bounds_ = keyboard_bounds; | |
935 OnWindowResized(); | |
936 } | |
937 | |
916 } // namespace internal | 938 } // namespace internal |
917 } // namespace ash | 939 } // namespace ash |
OLD | NEW |