| 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/workspace/workspace_cycler.h" | 5 #include "ash/wm/workspace/workspace_cycler.h" |
| 6 | 6 |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/wm/workspace/workspace_cycler_configuration.h" |
| 10 #include "ash/wm/workspace/workspace_manager.h" | 11 #include "ash/wm/workspace/workspace_manager.h" |
| 11 #include "ui/base/events/event.h" | 12 #include "ui/base/events/event.h" |
| 12 #include "ui/base/events/event_utils.h" | 13 #include "ui/base/events/event_utils.h" |
| 13 | 14 |
| 15 typedef ash::WorkspaceCyclerConfiguration Config; |
| 16 |
| 14 namespace ash { | 17 namespace ash { |
| 15 namespace internal { | 18 namespace internal { |
| 16 | 19 |
| 17 namespace { | 20 namespace { |
| 18 | 21 |
| 19 // The required vertical distance to initiate workspace cycling. | |
| 20 const float kDistanceToInitiateWorkspaceCycling = 10.0f; | |
| 21 | |
| 22 // Returns true if cycling is allowed. | 22 // Returns true if cycling is allowed. |
| 23 bool IsCyclingAllowed() { | 23 bool IsCyclingAllowed() { |
| 24 // Cycling is disabled if the screen is locked or a modal dialog is open. | 24 // Cycling is disabled if the screen is locked or a modal dialog is open. |
| 25 return !Shell::GetInstance()->IsScreenLocked() && | 25 return !Shell::GetInstance()->IsScreenLocked() && |
| 26 !Shell::GetInstance()->IsSystemModalWindowOpen(); | 26 !Shell::GetInstance()->IsSystemModalWindowOpen(); |
| 27 } | 27 } |
| 28 | 28 |
| 29 } // namespace | 29 } // namespace |
| 30 | 30 |
| 31 WorkspaceCycler::WorkspaceCycler(WorkspaceManager* workspace_manager) | 31 WorkspaceCycler::WorkspaceCycler(WorkspaceManager* workspace_manager) |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 | 129 |
| 130 if (ui::IsNaturalScrollEnabled()) { | 130 if (ui::IsNaturalScrollEnabled()) { |
| 131 scroll_x_ += event->x_offset(); | 131 scroll_x_ += event->x_offset(); |
| 132 scroll_y_ += event->y_offset(); | 132 scroll_y_ += event->y_offset(); |
| 133 } else { | 133 } else { |
| 134 scroll_x_ -= event->x_offset(); | 134 scroll_x_ -= event->x_offset(); |
| 135 scroll_y_ -= event->y_offset(); | 135 scroll_y_ -= event->y_offset(); |
| 136 } | 136 } |
| 137 | 137 |
| 138 if (state_ == NOT_CYCLING_TRACKING_SCROLL) { | 138 if (state_ == NOT_CYCLING_TRACKING_SCROLL) { |
| 139 if (fabs(scroll_x_) > kDistanceToInitiateWorkspaceCycling) { | 139 double distance_to_initiate_cycling = Config::GetDouble( |
| 140 Config::DISTANCE_TO_INITIATE_CYCLING); |
| 141 |
| 142 if (fabs(scroll_x_) > distance_to_initiate_cycling) { |
| 140 // Only initiate workspace cycling if there recently was a significant | 143 // Only initiate workspace cycling if there recently was a significant |
| 141 // amount of vertical movement as opposed to vertical movement | 144 // amount of vertical movement as opposed to vertical movement |
| 142 // accumulated over a long horizontal three finger scroll. | 145 // accumulated over a long horizontal three finger scroll. |
| 143 scroll_x_ = 0.0f; | 146 scroll_x_ = 0.0f; |
| 144 scroll_y_ = 0.0f; | 147 scroll_y_ = 0.0f; |
| 145 } | 148 } |
| 146 | 149 |
| 147 if (fabs(scroll_y_) >= kDistanceToInitiateWorkspaceCycling) | 150 if (fabs(scroll_y_) >= distance_to_initiate_cycling) |
| 148 SetState(STARTING_CYCLING); | 151 SetState(STARTING_CYCLING); |
| 149 } | 152 } |
| 150 | 153 |
| 151 if (state_ == CYCLING && event->y_offset() != 0.0f) { | 154 if (state_ == CYCLING && event->y_offset() != 0.0f) { |
| 152 DCHECK(animator_.get()); | 155 DCHECK(animator_.get()); |
| 153 animator_->AnimateCyclingByScrollDelta(event->y_offset()); | 156 animator_->AnimateCyclingByScrollDelta(event->y_offset()); |
| 154 event->SetHandled(); | 157 event->SetHandled(); |
| 155 } | 158 } |
| 156 } | 159 } |
| 157 | 160 |
| 158 void WorkspaceCycler::StartWorkspaceCyclerAnimationFinished() { | 161 void WorkspaceCycler::StartWorkspaceCyclerAnimationFinished() { |
| 159 DCHECK_EQ(STARTING_CYCLING, state_); | 162 DCHECK_EQ(STARTING_CYCLING, state_); |
| 160 SetState(CYCLING); | 163 SetState(CYCLING); |
| 161 } | 164 } |
| 162 | 165 |
| 163 void WorkspaceCycler::StopWorkspaceCyclerAnimationFinished() { | 166 void WorkspaceCycler::StopWorkspaceCyclerAnimationFinished() { |
| 164 DCHECK_EQ(STOPPING_CYCLING, state_); | 167 DCHECK_EQ(STOPPING_CYCLING, state_); |
| 165 Workspace* workspace_to_activate = animator_->get_selected_workspace(); | 168 Workspace* workspace_to_activate = animator_->get_selected_workspace(); |
| 166 animator_.reset(); | 169 animator_.reset(); |
| 167 SetState(NOT_CYCLING); | 170 SetState(NOT_CYCLING); |
| 168 | 171 |
| 169 // Activate the workspace after updating the state so that a call to | 172 // Activate the workspace after updating the state so that a call to |
| 170 // AbortCycling() as a result of SetActiveWorkspaceFromCycler() is a noop. | 173 // AbortCycling() as a result of SetActiveWorkspaceFromCycler() is a noop. |
| 171 workspace_manager_->SetActiveWorkspaceFromCycler(workspace_to_activate); | 174 workspace_manager_->SetActiveWorkspaceFromCycler(workspace_to_activate); |
| 172 } | 175 } |
| 173 | 176 |
| 174 } // namespace internal | 177 } // namespace internal |
| 175 } // namespace ash | 178 } // namespace ash |
| OLD | NEW |