| 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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 public: | 168 public: |
| 169 explicit UpdateShelfObserver(ShelfLayoutManager* shelf) : shelf_(shelf) { | 169 explicit UpdateShelfObserver(ShelfLayoutManager* shelf) : shelf_(shelf) { |
| 170 shelf_->update_shelf_observer_ = this; | 170 shelf_->update_shelf_observer_ = this; |
| 171 } | 171 } |
| 172 | 172 |
| 173 void Detach() { | 173 void Detach() { |
| 174 shelf_ = NULL; | 174 shelf_ = NULL; |
| 175 } | 175 } |
| 176 | 176 |
| 177 virtual void OnImplicitAnimationsCompleted() OVERRIDE { | 177 virtual void OnImplicitAnimationsCompleted() OVERRIDE { |
| 178 if (shelf_) { | 178 if (shelf_) |
| 179 shelf_->UpdateShelfBackground(BackgroundAnimator::CHANGE_ANIMATE); | 179 shelf_->UpdateShelfBackground(CHANGE_ANIMATE); |
| 180 } | |
| 181 delete this; | 180 delete this; |
| 182 } | 181 } |
| 183 | 182 |
| 184 private: | 183 private: |
| 185 virtual ~UpdateShelfObserver() { | 184 virtual ~UpdateShelfObserver() { |
| 186 if (shelf_) | 185 if (shelf_) |
| 187 shelf_->update_shelf_observer_ = NULL; | 186 shelf_->update_shelf_observer_ = NULL; |
| 188 } | 187 } |
| 189 | 188 |
| 190 // Shelf we're in. NULL if deleted before we're deleted. | 189 // Shelf we're in. NULL if deleted before we're deleted. |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 base::TimeDelta::FromMilliseconds(kAutoHideDelayMS), | 358 base::TimeDelta::FromMilliseconds(kAutoHideDelayMS), |
| 360 this, &ShelfLayoutManager::UpdateAutoHideStateNow); | 359 this, &ShelfLayoutManager::UpdateAutoHideStateNow); |
| 361 } | 360 } |
| 362 } else { | 361 } else { |
| 363 StopAutoHideTimer(); | 362 StopAutoHideTimer(); |
| 364 } | 363 } |
| 365 } | 364 } |
| 366 | 365 |
| 367 void ShelfLayoutManager::SetWindowOverlapsShelf(bool value) { | 366 void ShelfLayoutManager::SetWindowOverlapsShelf(bool value) { |
| 368 window_overlaps_shelf_ = value; | 367 window_overlaps_shelf_ = value; |
| 369 UpdateShelfBackground(BackgroundAnimator::CHANGE_ANIMATE); | 368 UpdateShelfBackground(CHANGE_ANIMATE); |
| 370 } | 369 } |
| 371 | 370 |
| 372 void ShelfLayoutManager::AddObserver(ShelfLayoutManagerObserver* observer) { | 371 void ShelfLayoutManager::AddObserver(ShelfLayoutManagerObserver* observer) { |
| 373 observers_.AddObserver(observer); | 372 observers_.AddObserver(observer); |
| 374 } | 373 } |
| 375 | 374 |
| 376 void ShelfLayoutManager::RemoveObserver(ShelfLayoutManagerObserver* observer) { | 375 void ShelfLayoutManager::RemoveObserver(ShelfLayoutManagerObserver* observer) { |
| 377 observers_.RemoveObserver(observer); | 376 observers_.RemoveObserver(observer); |
| 378 } | 377 } |
| 379 | 378 |
| 380 //////////////////////////////////////////////////////////////////////////////// | 379 //////////////////////////////////////////////////////////////////////////////// |
| 381 // ShelfLayoutManager, Gesture dragging: | 380 // ShelfLayoutManager, Gesture dragging: |
| 382 | 381 |
| 383 void ShelfLayoutManager::StartGestureDrag(const ui::GestureEvent& gesture) { | 382 void ShelfLayoutManager::StartGestureDrag(const ui::GestureEvent& gesture) { |
| 384 gesture_drag_status_ = GESTURE_DRAG_IN_PROGRESS; | 383 gesture_drag_status_ = GESTURE_DRAG_IN_PROGRESS; |
| 385 gesture_drag_amount_ = 0.f; | 384 gesture_drag_amount_ = 0.f; |
| 386 gesture_drag_auto_hide_state_ = visibility_state() == SHELF_AUTO_HIDE ? | 385 gesture_drag_auto_hide_state_ = visibility_state() == SHELF_AUTO_HIDE ? |
| 387 auto_hide_state() : SHELF_AUTO_HIDE_SHOWN; | 386 auto_hide_state() : SHELF_AUTO_HIDE_SHOWN; |
| 388 UpdateShelfBackground(BackgroundAnimator::CHANGE_ANIMATE); | 387 UpdateShelfBackground(CHANGE_ANIMATE); |
| 389 } | 388 } |
| 390 | 389 |
| 391 ShelfLayoutManager::DragState ShelfLayoutManager::UpdateGestureDrag( | 390 ShelfLayoutManager::DragState ShelfLayoutManager::UpdateGestureDrag( |
| 392 const ui::GestureEvent& gesture) { | 391 const ui::GestureEvent& gesture) { |
| 393 bool horizontal = IsHorizontalAlignment(); | 392 bool horizontal = IsHorizontalAlignment(); |
| 394 gesture_drag_amount_ += horizontal ? gesture.details().scroll_y() : | 393 gesture_drag_amount_ += horizontal ? gesture.details().scroll_y() : |
| 395 gesture.details().scroll_x(); | 394 gesture.details().scroll_x(); |
| 396 LayoutShelf(); | 395 LayoutShelf(); |
| 397 | 396 |
| 398 // Start reveling the status menu when: | 397 // Start reveling the status menu when: |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 auto_hide_event_filter_.reset(new AutoHideEventFilter(this)); | 590 auto_hide_event_filter_.reset(new AutoHideEventFilter(this)); |
| 592 } else { | 591 } else { |
| 593 auto_hide_event_filter_.reset(NULL); | 592 auto_hide_event_filter_.reset(NULL); |
| 594 } | 593 } |
| 595 | 594 |
| 596 StopAutoHideTimer(); | 595 StopAutoHideTimer(); |
| 597 | 596 |
| 598 State old_state = state_; | 597 State old_state = state_; |
| 599 state_ = state; | 598 state_ = state; |
| 600 | 599 |
| 601 BackgroundAnimator::ChangeType change_type = | 600 BackgroundAnimatorChangeType change_type = CHANGE_ANIMATE; |
| 602 BackgroundAnimator::CHANGE_ANIMATE; | |
| 603 bool delay_background_change = false; | 601 bool delay_background_change = false; |
| 604 | 602 |
| 605 // Do not animate the background when: | 603 // Do not animate the background when: |
| 606 // - Going from a hidden / auto hidden shelf in fullscreen to a visible shelf | 604 // - Going from a hidden / auto hidden shelf in fullscreen to a visible shelf |
| 607 // in maximized mode. | 605 // in maximized mode. |
| 608 // - Going from an auto hidden shelf in maximized mode to a visible shelf in | 606 // - Going from an auto hidden shelf in maximized mode to a visible shelf in |
| 609 // maximized mode. | 607 // maximized mode. |
| 610 if (state.visibility_state == SHELF_VISIBLE && | 608 if (state.visibility_state == SHELF_VISIBLE && |
| 611 state.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED && | 609 state.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED && |
| 612 old_state.visibility_state != SHELF_VISIBLE) { | 610 old_state.visibility_state != SHELF_VISIBLE) { |
| 613 change_type = BackgroundAnimator::CHANGE_IMMEDIATE; | 611 change_type = CHANGE_IMMEDIATE; |
| 614 } else { | 612 } else { |
| 615 // Delay the animation when the shelf was hidden, and has just been made | 613 // Delay the animation when the shelf was hidden, and has just been made |
| 616 // visible (e.g. using a gesture-drag). | 614 // visible (e.g. using a gesture-drag). |
| 617 if (state.visibility_state == SHELF_VISIBLE && | 615 if (state.visibility_state == SHELF_VISIBLE && |
| 618 old_state.visibility_state == SHELF_AUTO_HIDE && | 616 old_state.visibility_state == SHELF_AUTO_HIDE && |
| 619 old_state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN) { | 617 old_state.auto_hide_state == SHELF_AUTO_HIDE_HIDDEN) { |
| 620 delay_background_change = true; | 618 delay_background_change = true; |
| 621 } | 619 } |
| 622 } | 620 } |
| 623 | 621 |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 923 gfx::Rect status_x = target_bounds->shelf_bounds_in_root; | 921 gfx::Rect status_x = target_bounds->shelf_bounds_in_root; |
| 924 status_x.set_x(0); | 922 status_x.set_x(0); |
| 925 status_x.ClampToCenteredSize( | 923 status_x.ClampToCenteredSize( |
| 926 target_bounds->status_bounds_in_shelf.size()); | 924 target_bounds->status_bounds_in_shelf.size()); |
| 927 target_bounds->status_bounds_in_shelf.set_x(status_x.x()); | 925 target_bounds->status_bounds_in_shelf.set_x(status_x.x()); |
| 928 } | 926 } |
| 929 } | 927 } |
| 930 } | 928 } |
| 931 | 929 |
| 932 void ShelfLayoutManager::UpdateShelfBackground( | 930 void ShelfLayoutManager::UpdateShelfBackground( |
| 933 BackgroundAnimator::ChangeType type) { | 931 BackgroundAnimatorChangeType type) { |
| 934 shelf_->SetPaintsBackground(GetShelfBackgroundType(), type); | 932 const ShelfBackgroundType background_type(GetShelfBackgroundType()); |
| 933 shelf_->SetPaintsBackground(background_type, type); |
| 934 FOR_EACH_OBSERVER(ShelfLayoutManagerObserver, observers_, |
| 935 OnBackgroundUpdated(background_type, type)); |
| 935 } | 936 } |
| 936 | 937 |
| 937 ShelfBackgroundType ShelfLayoutManager::GetShelfBackgroundType() const { | 938 ShelfBackgroundType ShelfLayoutManager::GetShelfBackgroundType() const { |
| 938 if (state_.visibility_state != SHELF_AUTO_HIDE && | 939 if (state_.visibility_state != SHELF_AUTO_HIDE && |
| 939 state_.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED) { | 940 state_.window_state == WORKSPACE_WINDOW_STATE_MAXIMIZED) { |
| 940 return SHELF_BACKGROUND_MAXIMIZED; | 941 return SHELF_BACKGROUND_MAXIMIZED; |
| 941 } | 942 } |
| 942 | 943 |
| 943 if (gesture_drag_status_ == GESTURE_DRAG_IN_PROGRESS || | 944 if (gesture_drag_status_ == GESTURE_DRAG_IN_PROGRESS || |
| 944 (!state_.is_screen_locked && window_overlaps_shelf_) || | 945 (!state_.is_screen_locked && window_overlaps_shelf_) || |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1127 | 1128 |
| 1128 void ShelfLayoutManager::OnDockBoundsChanging( | 1129 void ShelfLayoutManager::OnDockBoundsChanging( |
| 1129 const gfx::Rect& dock_bounds, | 1130 const gfx::Rect& dock_bounds, |
| 1130 DockedWindowLayoutManagerObserver::Reason reason) { | 1131 DockedWindowLayoutManagerObserver::Reason reason) { |
| 1131 // Skip shelf layout in case docked notification originates from this class. | 1132 // Skip shelf layout in case docked notification originates from this class. |
| 1132 if (reason == DISPLAY_INSETS_CHANGED) | 1133 if (reason == DISPLAY_INSETS_CHANGED) |
| 1133 return; | 1134 return; |
| 1134 if (dock_bounds_ != dock_bounds) { | 1135 if (dock_bounds_ != dock_bounds) { |
| 1135 dock_bounds_ = dock_bounds; | 1136 dock_bounds_ = dock_bounds; |
| 1136 OnWindowResized(); | 1137 OnWindowResized(); |
| 1138 UpdateShelfBackground(CHANGE_ANIMATE); |
| 1137 } | 1139 } |
| 1138 } | 1140 } |
| 1139 | 1141 |
| 1140 void ShelfLayoutManager::OnLockStateEvent(LockStateObserver::EventType event) { | 1142 void ShelfLayoutManager::OnLockStateEvent(LockStateObserver::EventType event) { |
| 1141 if (event == EVENT_LOCK_ANIMATION_STARTED) { | 1143 if (event == EVENT_LOCK_ANIMATION_STARTED) { |
| 1142 // Hide the status area widget (using auto hide animation). | 1144 // Hide the status area widget (using auto hide animation). |
| 1143 base::AutoReset<ShelfVisibilityState> state(&state_.visibility_state, | 1145 base::AutoReset<ShelfVisibilityState> state(&state_.visibility_state, |
| 1144 SHELF_HIDDEN); | 1146 SHELF_HIDDEN); |
| 1145 TargetBounds target_bounds; | 1147 TargetBounds target_bounds; |
| 1146 CalculateTargetBounds(state_, &target_bounds); | 1148 CalculateTargetBounds(state_, &target_bounds); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1158 return gfx::Insets(0, distance, 0, 0); | 1160 return gfx::Insets(0, distance, 0, 0); |
| 1159 case SHELF_ALIGNMENT_TOP: | 1161 case SHELF_ALIGNMENT_TOP: |
| 1160 return gfx::Insets(0, 0, distance, 0); | 1162 return gfx::Insets(0, 0, distance, 0); |
| 1161 } | 1163 } |
| 1162 NOTREACHED(); | 1164 NOTREACHED(); |
| 1163 return gfx::Insets(); | 1165 return gfx::Insets(); |
| 1164 } | 1166 } |
| 1165 | 1167 |
| 1166 } // namespace internal | 1168 } // namespace internal |
| 1167 } // namespace ash | 1169 } // namespace ash |
| OLD | NEW |