Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Side by Side Diff: ash/shelf/shelf_layout_manager.cc

Issue 247363005: Fullscreen/immersive mode is allowed in touch view mode, the shelf gets hidden and an edge swipe br… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 return SHELF_VISIBLE; 307 return SHELF_VISIBLE;
308 } 308 }
309 309
310 void ShelfLayoutManager::UpdateVisibilityState() { 310 void ShelfLayoutManager::UpdateVisibilityState() {
311 // Bail out early when there is no |workspace_controller_|, which happens 311 // Bail out early when there is no |workspace_controller_|, which happens
312 // during shutdown after PrepareForShutdown. 312 // during shutdown after PrepareForShutdown.
313 if (!workspace_controller_) 313 if (!workspace_controller_)
314 return; 314 return;
315 315
316 if (Shell::GetInstance()->session_state_delegate()->IsScreenLocked() || 316 if (Shell::GetInstance()->session_state_delegate()->IsScreenLocked() ||
317 force_shelf_always_visibile_) { 317 IsShelfForcedToBeVisible()) {
318 SetState(SHELF_VISIBLE); 318 SetState(SHELF_VISIBLE);
319 } else { 319 } else {
320 // TODO(zelidrag): Verify shelf drag animation still shows on the device 320 // TODO(zelidrag): Verify shelf drag animation still shows on the device
321 // when we are in SHELF_AUTO_HIDE_ALWAYS_HIDDEN. 321 // when we are in SHELF_AUTO_HIDE_ALWAYS_HIDDEN.
322 WorkspaceWindowState window_state(workspace_controller_->GetWindowState()); 322 WorkspaceWindowState window_state(workspace_controller_->GetWindowState());
323 switch (window_state) { 323 switch (window_state) {
324 case WORKSPACE_WINDOW_STATE_FULL_SCREEN: { 324 case WORKSPACE_WINDOW_STATE_FULL_SCREEN: {
325 const aura::Window* fullscreen_window = GetRootWindowController( 325 const aura::Window* fullscreen_window = GetRootWindowController(
326 root_window_)->GetWindowForFullscreenMode(); 326 root_window_)->GetWindowForFullscreenMode();
327 if (fullscreen_window && wm::GetWindowState(fullscreen_window)-> 327 if (fullscreen_window && wm::GetWindowState(fullscreen_window)->
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 } 382 }
383 383
384 void ShelfLayoutManager::RemoveObserver(ShelfLayoutManagerObserver* observer) { 384 void ShelfLayoutManager::RemoveObserver(ShelfLayoutManagerObserver* observer) {
385 observers_.RemoveObserver(observer); 385 observers_.RemoveObserver(observer);
386 } 386 }
387 387
388 //////////////////////////////////////////////////////////////////////////////// 388 ////////////////////////////////////////////////////////////////////////////////
389 // ShelfLayoutManager, Gesture functions: 389 // ShelfLayoutManager, Gesture functions:
390 390
391 void ShelfLayoutManager::OnGestureEdgeSwipe(const ui::GestureEvent& gesture) { 391 void ShelfLayoutManager::OnGestureEdgeSwipe(const ui::GestureEvent& gesture) {
392 if (force_shelf_always_visibile_) 392 if (IsShelfForcedToBeVisible())
393 return; 393 return;
394 394
395 if (visibility_state() == SHELF_AUTO_HIDE) { 395 if (visibility_state() == SHELF_AUTO_HIDE) {
396 gesture_drag_auto_hide_state_ = SHELF_AUTO_HIDE_SHOWN; 396 gesture_drag_auto_hide_state_ = SHELF_AUTO_HIDE_SHOWN;
397 gesture_drag_status_ = GESTURE_DRAG_COMPLETE_IN_PROGRESS; 397 gesture_drag_status_ = GESTURE_DRAG_COMPLETE_IN_PROGRESS;
398 UpdateVisibilityState(); 398 UpdateVisibilityState();
399 gesture_drag_status_ = GESTURE_DRAG_NONE; 399 gesture_drag_status_ = GESTURE_DRAG_NONE;
400 } 400 }
401 } 401 }
402 402
403 void ShelfLayoutManager::StartGestureDrag(const ui::GestureEvent& gesture) { 403 void ShelfLayoutManager::StartGestureDrag(const ui::GestureEvent& gesture) {
404 if (force_shelf_always_visibile_) 404 if (IsShelfForcedToBeVisible())
405 return; 405 return;
406 gesture_drag_status_ = GESTURE_DRAG_IN_PROGRESS; 406 gesture_drag_status_ = GESTURE_DRAG_IN_PROGRESS;
407 gesture_drag_amount_ = 0.f; 407 gesture_drag_amount_ = 0.f;
408 gesture_drag_auto_hide_state_ = visibility_state() == SHELF_AUTO_HIDE ? 408 gesture_drag_auto_hide_state_ = visibility_state() == SHELF_AUTO_HIDE ?
409 auto_hide_state() : SHELF_AUTO_HIDE_SHOWN; 409 auto_hide_state() : SHELF_AUTO_HIDE_SHOWN;
410 UpdateShelfBackground(BACKGROUND_CHANGE_ANIMATE); 410 UpdateShelfBackground(BACKGROUND_CHANGE_ANIMATE);
411 } 411 }
412 412
413 ShelfLayoutManager::DragState ShelfLayoutManager::UpdateGestureDrag( 413 ShelfLayoutManager::DragState ShelfLayoutManager::UpdateGestureDrag(
414 const ui::GestureEvent& gesture) { 414 const ui::GestureEvent& gesture) {
415 if (force_shelf_always_visibile_) 415 if (IsShelfForcedToBeVisible())
416 return DRAG_SHELF; 416 return DRAG_SHELF;
417 bool horizontal = IsHorizontalAlignment(); 417 bool horizontal = IsHorizontalAlignment();
418 gesture_drag_amount_ += horizontal ? gesture.details().scroll_y() : 418 gesture_drag_amount_ += horizontal ? gesture.details().scroll_y() :
419 gesture.details().scroll_x(); 419 gesture.details().scroll_x();
420 LayoutShelf(); 420 LayoutShelf();
421 421
422 // Start reveling the status menu when: 422 // Start reveling the status menu when:
423 // - dragging up on an already visible shelf 423 // - dragging up on an already visible shelf
424 // - dragging up on a hidden shelf, but it is currently completely visible. 424 // - dragging up on a hidden shelf, but it is currently completely visible.
425 if (horizontal && gesture.details().scroll_y() < 0) { 425 if (horizontal && gesture.details().scroll_y() < 0) {
426 int min_height = 0; 426 int min_height = 0;
427 if (gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_HIDDEN && shelf_) 427 if (gesture_drag_auto_hide_state_ == SHELF_AUTO_HIDE_HIDDEN && shelf_)
428 min_height = shelf_->GetContentsView()->GetPreferredSize().height(); 428 min_height = shelf_->GetContentsView()->GetPreferredSize().height();
429 429
430 if (min_height < shelf_->GetWindowBoundsInScreen().height() && 430 if (min_height < shelf_->GetWindowBoundsInScreen().height() &&
431 gesture.root_location().x() >= 431 gesture.root_location().x() >=
432 shelf_->status_area_widget()->GetWindowBoundsInScreen().x() && 432 shelf_->status_area_widget()->GetWindowBoundsInScreen().x() &&
433 IsDraggingTrayEnabled()) 433 IsDraggingTrayEnabled())
434 return DRAG_TRAY; 434 return DRAG_TRAY;
435 } 435 }
436 436
437 return DRAG_SHELF; 437 return DRAG_SHELF;
438 } 438 }
439 439
440 void ShelfLayoutManager::CompleteGestureDrag(const ui::GestureEvent& gesture) { 440 void ShelfLayoutManager::CompleteGestureDrag(const ui::GestureEvent& gesture) {
441 if (force_shelf_always_visibile_) 441 if (IsShelfForcedToBeVisible())
442 return; 442 return;
443 bool horizontal = IsHorizontalAlignment(); 443 bool horizontal = IsHorizontalAlignment();
444 bool should_change = false; 444 bool should_change = false;
445 if (gesture.type() == ui::ET_GESTURE_SCROLL_END) { 445 if (gesture.type() == ui::ET_GESTURE_SCROLL_END) {
446 // The visibility of the shelf changes only if the shelf was dragged X% 446 // The visibility of the shelf changes only if the shelf was dragged X%
447 // along the correct axis. If the shelf was already visible, then the 447 // along the correct axis. If the shelf was already visible, then the
448 // direction of the drag does not matter. 448 // direction of the drag does not matter.
449 const float kDragHideThreshold = 0.4f; 449 const float kDragHideThreshold = 0.4f;
450 gfx::Rect bounds = GetIdealBounds(); 450 gfx::Rect bounds = GetIdealBounds();
451 float drag_ratio = fabs(gesture_drag_amount_) / 451 float drag_ratio = fabs(gesture_drag_amount_) /
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
1001 else 1001 else
1002 show_shelf_region_in_screen.set_width(kMaxAutoHideShowShelfRegionSize); 1002 show_shelf_region_in_screen.set_width(kMaxAutoHideShowShelfRegionSize);
1003 1003
1004 // TODO: Figure out if we need any special handling when the keyboard is 1004 // TODO: Figure out if we need any special handling when the keyboard is
1005 // visible. 1005 // visible.
1006 return show_shelf_region_in_screen; 1006 return show_shelf_region_in_screen;
1007 } 1007 }
1008 1008
1009 ShelfAutoHideState ShelfLayoutManager::CalculateAutoHideState( 1009 ShelfAutoHideState ShelfLayoutManager::CalculateAutoHideState(
1010 ShelfVisibilityState visibility_state) const { 1010 ShelfVisibilityState visibility_state) const {
1011 if (force_shelf_always_visibile_) 1011 if (IsShelfForcedToBeVisible())
1012 return SHELF_AUTO_HIDE_SHOWN; 1012 return SHELF_AUTO_HIDE_SHOWN;
1013 1013
1014 if (visibility_state != SHELF_AUTO_HIDE || !shelf_) 1014 if (visibility_state != SHELF_AUTO_HIDE || !shelf_)
1015 return SHELF_AUTO_HIDE_HIDDEN; 1015 return SHELF_AUTO_HIDE_HIDDEN;
1016 1016
1017 Shell* shell = Shell::GetInstance(); 1017 Shell* shell = Shell::GetInstance();
1018 if (shell->GetAppListTargetVisibility()) 1018 if (shell->GetAppListTargetVisibility())
1019 return SHELF_AUTO_HIDE_SHOWN; 1019 return SHELF_AUTO_HIDE_SHOWN;
1020 1020
1021 if (shelf_->status_area_widget() && 1021 if (shelf_->status_area_widget() &&
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 } 1114 }
1115 1115
1116 int ShelfLayoutManager::GetWorkAreaSize(const State& state, int size) const { 1116 int ShelfLayoutManager::GetWorkAreaSize(const State& state, int size) const {
1117 if (state.visibility_state == SHELF_VISIBLE) 1117 if (state.visibility_state == SHELF_VISIBLE)
1118 return size; 1118 return size;
1119 if (state.visibility_state == SHELF_AUTO_HIDE) 1119 if (state.visibility_state == SHELF_AUTO_HIDE)
1120 return kAutoHideSize; 1120 return kAutoHideSize;
1121 return 0; 1121 return 0;
1122 } 1122 }
1123 1123
1124 bool ShelfLayoutManager::IsShelfForcedToBeVisible() const {
1125 // Bail out early when there is no |workspace_controller_|, which happens
1126 // during shutdown after PrepareForShutdown.
1127 if (!workspace_controller_)
1128 return force_shelf_always_visibile_;
1129
1130 return force_shelf_always_visibile_ &&
1131 workspace_controller_->GetWindowState() !=
1132 WORKSPACE_WINDOW_STATE_FULL_SCREEN;
1133 }
1134
1124 gfx::Rect ShelfLayoutManager::GetAvailableBounds() const { 1135 gfx::Rect ShelfLayoutManager::GetAvailableBounds() const {
1125 gfx::Rect bounds(root_window_->bounds()); 1136 gfx::Rect bounds(root_window_->bounds());
1126 bounds.set_height(bounds.height() - keyboard_bounds_.height()); 1137 bounds.set_height(bounds.height() - keyboard_bounds_.height());
1127 return bounds; 1138 return bounds;
1128 } 1139 }
1129 1140
1130 void ShelfLayoutManager::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) { 1141 void ShelfLayoutManager::OnKeyboardBoundsChanging(const gfx::Rect& new_bounds) {
1131 bool keyboard_is_about_to_hide = false; 1142 bool keyboard_is_about_to_hide = false;
1132 if (new_bounds.IsEmpty() && !keyboard_bounds_.IsEmpty()) 1143 if (new_bounds.IsEmpty() && !keyboard_bounds_.IsEmpty())
1133 keyboard_is_about_to_hide = true; 1144 keyboard_is_about_to_hide = true;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 1189
1179 void ShelfLayoutManager::SessionStateChanged( 1190 void ShelfLayoutManager::SessionStateChanged(
1180 SessionStateDelegate::SessionState state) { 1191 SessionStateDelegate::SessionState state) {
1181 TargetBounds target_bounds; 1192 TargetBounds target_bounds;
1182 CalculateTargetBounds(state_, &target_bounds); 1193 CalculateTargetBounds(state_, &target_bounds);
1183 UpdateBoundsAndOpacity(target_bounds, true, NULL); 1194 UpdateBoundsAndOpacity(target_bounds, true, NULL);
1184 UpdateVisibilityState(); 1195 UpdateVisibilityState();
1185 } 1196 }
1186 1197
1187 } // namespace ash 1198 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698