| 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 #include <cstring> | 9 #include <cstring> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 if (!updating_bounds_ && | 549 if (!updating_bounds_ && |
| 550 ((shelf_->GetNativeView() == child) || | 550 ((shelf_->GetNativeView() == child) || |
| 551 (shelf_->status_area_widget()->GetNativeView() == child))) { | 551 (shelf_->status_area_widget()->GetNativeView() == child))) { |
| 552 LayoutShelf(); | 552 LayoutShelf(); |
| 553 } | 553 } |
| 554 } | 554 } |
| 555 | 555 |
| 556 void ShelfLayoutManager::OnLockStateChanged(bool locked) { | 556 void ShelfLayoutManager::OnLockStateChanged(bool locked) { |
| 557 // Force the shelf to layout for alignment (bottom if locked, restore | 557 // Force the shelf to layout for alignment (bottom if locked, restore |
| 558 // the previous alignment otherwise). | 558 // the previous alignment otherwise). |
| 559 state_.is_screen_locked = locked; |
| 559 shelf_->SetAlignment(locked ? SHELF_ALIGNMENT_BOTTOM : alignment_); | 560 shelf_->SetAlignment(locked ? SHELF_ALIGNMENT_BOTTOM : alignment_); |
| 560 UpdateVisibilityState(); | 561 UpdateVisibilityState(); |
| 561 LayoutShelf(); | 562 LayoutShelf(); |
| 562 } | 563 } |
| 563 | 564 |
| 564 void ShelfLayoutManager::OnWindowActivated(aura::Window* gained_active, | 565 void ShelfLayoutManager::OnWindowActivated(aura::Window* gained_active, |
| 565 aura::Window* lost_active) { | 566 aura::Window* lost_active) { |
| 566 UpdateAutoHideStateNow(); | 567 UpdateAutoHideStateNow(); |
| 567 } | 568 } |
| 568 | 569 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 583 ShelfLayoutManager::TargetBounds::TargetBounds() : opacity(0.0f) {} | 584 ShelfLayoutManager::TargetBounds::TargetBounds() : opacity(0.0f) {} |
| 584 ShelfLayoutManager::TargetBounds::~TargetBounds() {} | 585 ShelfLayoutManager::TargetBounds::~TargetBounds() {} |
| 585 | 586 |
| 586 void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) { | 587 void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) { |
| 587 if (!shelf_->GetNativeView()) | 588 if (!shelf_->GetNativeView()) |
| 588 return; | 589 return; |
| 589 | 590 |
| 590 State state; | 591 State state; |
| 591 state.visibility_state = visibility_state; | 592 state.visibility_state = visibility_state; |
| 592 state.auto_hide_state = CalculateAutoHideState(visibility_state); | 593 state.auto_hide_state = CalculateAutoHideState(visibility_state); |
| 593 state.is_screen_locked = | |
| 594 Shell::GetInstance()->session_state_delegate()->IsScreenLocked(); | |
| 595 state.window_state = workspace_controller_ ? | 594 state.window_state = workspace_controller_ ? |
| 596 workspace_controller_->GetWindowState() : WORKSPACE_WINDOW_STATE_DEFAULT; | 595 workspace_controller_->GetWindowState() : WORKSPACE_WINDOW_STATE_DEFAULT; |
| 597 | 596 |
| 598 // Force an update because gesture drags affect the shelf bounds and we | 597 // Force an update because gesture drags affect the shelf bounds and we |
| 599 // should animate back to the normal bounds at the end of a gesture. | 598 // should animate back to the normal bounds at the end of a gesture. |
| 600 bool force_update = | 599 bool force_update = |
| 601 (gesture_drag_status_ == GESTURE_DRAG_CANCEL_IN_PROGRESS || | 600 (gesture_drag_status_ == GESTURE_DRAG_CANCEL_IN_PROGRESS || |
| 602 gesture_drag_status_ == GESTURE_DRAG_COMPLETE_IN_PROGRESS); | 601 gesture_drag_status_ == GESTURE_DRAG_COMPLETE_IN_PROGRESS); |
| 603 | 602 |
| 604 if (!force_update && state_.Equals(state)) | 603 if (!force_update && state_.Equals(state)) |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 714 // this can be simplified. | 713 // this can be simplified. |
| 715 gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf; | 714 gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf; |
| 716 status_bounds.set_x(status_bounds.x() + | 715 status_bounds.set_x(status_bounds.x() + |
| 717 target_bounds.shelf_bounds_in_root.x()); | 716 target_bounds.shelf_bounds_in_root.x()); |
| 718 status_bounds.set_y(status_bounds.y() + | 717 status_bounds.set_y(status_bounds.y() + |
| 719 target_bounds.shelf_bounds_in_root.y()); | 718 target_bounds.shelf_bounds_in_root.y()); |
| 720 shelf_->status_area_widget()->SetBounds( | 719 shelf_->status_area_widget()->SetBounds( |
| 721 ScreenUtil::ConvertRectToScreen( | 720 ScreenUtil::ConvertRectToScreen( |
| 722 shelf_->status_area_widget()->GetNativeView()->parent(), | 721 shelf_->status_area_widget()->GetNativeView()->parent(), |
| 723 status_bounds)); | 722 status_bounds)); |
| 724 Shell::GetInstance()->SetDisplayWorkAreaInsets( | 723 if (!state_.is_screen_locked) { |
| 725 root_window_, target_bounds.work_area_insets); | 724 Shell::GetInstance()->SetDisplayWorkAreaInsets( |
| 725 root_window_, target_bounds.work_area_insets); |
| 726 } |
| 726 } | 727 } |
| 727 | 728 |
| 728 void ShelfLayoutManager::StopAnimating() { | 729 void ShelfLayoutManager::StopAnimating() { |
| 729 GetLayer(shelf_)->GetAnimator()->StopAnimating(); | 730 GetLayer(shelf_)->GetAnimator()->StopAnimating(); |
| 730 GetLayer(shelf_->status_area_widget())->GetAnimator()->StopAnimating(); | 731 GetLayer(shelf_->status_area_widget())->GetAnimator()->StopAnimating(); |
| 731 } | 732 } |
| 732 | 733 |
| 733 void ShelfLayoutManager::GetShelfSize(int* width, int* height) { | 734 void ShelfLayoutManager::GetShelfSize(int* width, int* height) { |
| 734 *width = *height = 0; | 735 *width = *height = 0; |
| 735 gfx::Size status_size( | 736 gfx::Size status_size( |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1140 if (dock_bounds_ != dock_bounds) { | 1141 if (dock_bounds_ != dock_bounds) { |
| 1141 dock_bounds_ = dock_bounds; | 1142 dock_bounds_ = dock_bounds; |
| 1142 OnWindowResized(); | 1143 OnWindowResized(); |
| 1143 UpdateVisibilityState(); | 1144 UpdateVisibilityState(); |
| 1144 UpdateShelfBackground(BACKGROUND_CHANGE_ANIMATE); | 1145 UpdateShelfBackground(BACKGROUND_CHANGE_ANIMATE); |
| 1145 } | 1146 } |
| 1146 } | 1147 } |
| 1147 | 1148 |
| 1148 void ShelfLayoutManager::OnLockStateEvent(LockStateObserver::EventType event) { | 1149 void ShelfLayoutManager::OnLockStateEvent(LockStateObserver::EventType event) { |
| 1149 if (event == EVENT_LOCK_ANIMATION_STARTED) { | 1150 if (event == EVENT_LOCK_ANIMATION_STARTED) { |
| 1151 // Enter the screen locked state as the animation starts to prevent |
| 1152 // layout changes as the screen locks. |
| 1153 state_.is_screen_locked = true; |
| 1150 // Hide the status area widget (using auto hide animation). | 1154 // Hide the status area widget (using auto hide animation). |
| 1151 base::AutoReset<ShelfVisibilityState> state(&state_.visibility_state, | 1155 base::AutoReset<ShelfVisibilityState> state(&state_.visibility_state, |
| 1152 SHELF_HIDDEN); | 1156 SHELF_HIDDEN); |
| 1153 TargetBounds target_bounds; | 1157 TargetBounds target_bounds; |
| 1154 CalculateTargetBounds(state_, &target_bounds); | 1158 CalculateTargetBounds(state_, &target_bounds); |
| 1155 UpdateBoundsAndOpacity(target_bounds, true, NULL); | 1159 UpdateBoundsAndOpacity(target_bounds, true, NULL); |
| 1156 UpdateVisibilityState(); | 1160 UpdateVisibilityState(); |
| 1157 } | 1161 } |
| 1158 } | 1162 } |
| 1159 | 1163 |
| 1160 gfx::Insets ShelfLayoutManager::GetInsetsForAlignment(int distance) const { | 1164 gfx::Insets ShelfLayoutManager::GetInsetsForAlignment(int distance) const { |
| 1161 switch (GetAlignment()) { | 1165 switch (GetAlignment()) { |
| 1162 case SHELF_ALIGNMENT_BOTTOM: | 1166 case SHELF_ALIGNMENT_BOTTOM: |
| 1163 return gfx::Insets(distance, 0, 0, 0); | 1167 return gfx::Insets(distance, 0, 0, 0); |
| 1164 case SHELF_ALIGNMENT_LEFT: | 1168 case SHELF_ALIGNMENT_LEFT: |
| 1165 return gfx::Insets(0, 0, 0, distance); | 1169 return gfx::Insets(0, 0, 0, distance); |
| 1166 case SHELF_ALIGNMENT_RIGHT: | 1170 case SHELF_ALIGNMENT_RIGHT: |
| 1167 return gfx::Insets(0, distance, 0, 0); | 1171 return gfx::Insets(0, distance, 0, 0); |
| 1168 case SHELF_ALIGNMENT_TOP: | 1172 case SHELF_ALIGNMENT_TOP: |
| 1169 return gfx::Insets(0, 0, distance, 0); | 1173 return gfx::Insets(0, 0, distance, 0); |
| 1170 } | 1174 } |
| 1171 NOTREACHED(); | 1175 NOTREACHED(); |
| 1172 return gfx::Insets(); | 1176 return gfx::Insets(); |
| 1173 } | 1177 } |
| 1174 | 1178 |
| 1175 } // namespace internal | 1179 } // namespace internal |
| 1176 } // namespace ash | 1180 } // namespace ash |
| OLD | NEW |