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

Side by Side Diff: ash/wm/workspace/workspace_cycler.cc

Issue 12212040: Make the workspace cycler animation parameters editable via chrome://gesture (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 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/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 "base/message_loop.h" 12 #include "base/message_loop.h"
12 #include "ui/base/events/event.h" 13 #include "ui/base/events/event.h"
13 #include "ui/base/events/event_utils.h" 14 #include "ui/base/events/event_utils.h"
14 15
16 typedef ash::WorkspaceCyclerConfiguration Config;
17
15 namespace ash { 18 namespace ash {
16 namespace internal { 19 namespace internal {
17 20
18 namespace { 21 namespace {
19 22
20 // The required vertical distance to initiate workspace cycling.
21 const float kDistanceToInitiateWorkspaceCycling = 10.0f;
22
23 // Returns true if cycling is allowed. 23 // Returns true if cycling is allowed.
24 bool IsCyclingAllowed() { 24 bool IsCyclingAllowed() {
25 // Cycling is disabled if the screen is locked or a modal dialog is open. 25 // Cycling is disabled if the screen is locked or a modal dialog is open.
26 return !Shell::GetInstance()->IsScreenLocked() && 26 return !Shell::GetInstance()->IsScreenLocked() &&
27 !Shell::GetInstance()->IsSystemModalWindowOpen(); 27 !Shell::GetInstance()->IsSystemModalWindowOpen();
28 } 28 }
29 29
30 } // namespace 30 } // namespace
31 31
32 WorkspaceCycler::WorkspaceCycler(WorkspaceManager* workspace_manager) 32 WorkspaceCycler::WorkspaceCycler(WorkspaceManager* workspace_manager)
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 109
110 void WorkspaceCycler::OnMouseEvent(ui::MouseEvent* event) { 110 void WorkspaceCycler::OnMouseEvent(ui::MouseEvent* event) {
111 if (event->type() == ui::ET_MOUSE_PRESSED && state_ != NOT_CYCLING) { 111 if (event->type() == ui::ET_MOUSE_PRESSED && state_ != NOT_CYCLING) {
112 SetState(STOPPING_CYCLING); 112 SetState(STOPPING_CYCLING);
113 return; 113 return;
114 } 114 }
115 115
116 if (event->type() != ui::ET_MOUSEWHEEL) 116 if (event->type() != ui::ET_MOUSEWHEEL)
117 return; 117 return;
118 118
119 if (!IsCyclingAllowed() || !workspace_manager_->CanStartCyclingThroughWorkspac es()) { 119 if (!IsCyclingAllowed() ||
120 !workspace_manager_->CanStartCyclingThroughWorkspaces()) {
120 CHECK_EQ(NOT_CYCLING, state_); 121 CHECK_EQ(NOT_CYCLING, state_);
121 return; 122 return;
122 } 123 }
123 124
124 float offset = static_cast<ui::MouseWheelEvent*>(event)->offset(); 125 float offset = static_cast<ui::MouseWheelEvent*>(event)->offset();
125 126
126 if (offset != 0) { 127 if (offset != 0) {
127 if (state_ == NOT_CYCLING) { 128 if (state_ == NOT_CYCLING) {
128 SetState(NOT_CYCLING_TRACKING_SCROLL); 129 SetState(NOT_CYCLING_TRACKING_SCROLL);
129 SetState(STARTING_CYCLING); 130 SetState(STARTING_CYCLING);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 164
164 if (ui::IsNaturalScrollEnabled()) { 165 if (ui::IsNaturalScrollEnabled()) {
165 scroll_x_ += event->x_offset(); 166 scroll_x_ += event->x_offset();
166 scroll_y_ += event->y_offset(); 167 scroll_y_ += event->y_offset();
167 } else { 168 } else {
168 scroll_x_ -= event->x_offset(); 169 scroll_x_ -= event->x_offset();
169 scroll_y_ -= event->y_offset(); 170 scroll_y_ -= event->y_offset();
170 } 171 }
171 172
172 if (state_ == NOT_CYCLING_TRACKING_SCROLL) { 173 if (state_ == NOT_CYCLING_TRACKING_SCROLL) {
173 if (fabs(scroll_x_) > kDistanceToInitiateWorkspaceCycling) { 174 double distance_to_initiate_cycling = Config::GetDouble(
175 Config::DISTANCE_TO_INITIATE_CYCLING);
176
177 if (fabs(scroll_x_) > distance_to_initiate_cycling) {
174 // Only initiate workspace cycling if there recently was a significant 178 // Only initiate workspace cycling if there recently was a significant
175 // amount of vertical movement as opposed to vertical movement 179 // amount of vertical movement as opposed to vertical movement
176 // accumulated over a long horizontal three finger scroll. 180 // accumulated over a long horizontal three finger scroll.
177 scroll_x_ = 0.0f; 181 scroll_x_ = 0.0f;
178 scroll_y_ = 0.0f; 182 scroll_y_ = 0.0f;
179 } 183 }
180 184
181 if (fabs(scroll_y_) >= kDistanceToInitiateWorkspaceCycling) 185 if (fabs(scroll_y_) >= distance_to_initiate_cycling)
182 SetState(STARTING_CYCLING); 186 SetState(STARTING_CYCLING);
183 } 187 }
184 188
185 if (state_ == CYCLING && event->y_offset() != 0.0f) { 189 if (state_ == CYCLING && event->y_offset() != 0.0f) {
186 DCHECK(animator_.get()); 190 DCHECK(animator_.get());
187 animator_->AnimateCyclingByScrollDelta(event->y_offset()); 191 animator_->AnimateCyclingByScrollDelta(event->y_offset());
188 event->SetHandled(); 192 event->SetHandled();
189 } 193 }
190 } 194 }
191 195
192 void WorkspaceCycler::StartWorkspaceCyclerAnimationFinished() { 196 void WorkspaceCycler::StartWorkspaceCyclerAnimationFinished() {
193 DCHECK_EQ(STARTING_CYCLING, state_); 197 DCHECK_EQ(STARTING_CYCLING, state_);
194 SetState(CYCLING); 198 SetState(CYCLING);
195 } 199 }
196 200
197 void WorkspaceCycler::StopWorkspaceCyclerAnimationFinished() { 201 void WorkspaceCycler::StopWorkspaceCyclerAnimationFinished() {
198 DCHECK_EQ(STOPPING_CYCLING, state_); 202 DCHECK_EQ(STOPPING_CYCLING, state_);
199 Workspace* workspace_to_activate = animator_->get_selected_workspace(); 203 Workspace* workspace_to_activate = animator_->get_selected_workspace();
200 animator_.reset(); 204 animator_.reset();
201 SetState(NOT_CYCLING); 205 SetState(NOT_CYCLING);
202 206
203 // Activate the workspace after updating the state so that a call to 207 // Activate the workspace after updating the state so that a call to
204 // AbortCycling() as a result of SetActiveWorkspaceFromCycler() is a noop. 208 // AbortCycling() as a result of SetActiveWorkspaceFromCycler() is a noop.
205 workspace_manager_->SetActiveWorkspaceFromCycler(workspace_to_activate); 209 workspace_manager_->SetActiveWorkspaceFromCycler(workspace_to_activate);
206 } 210 }
207 211
208 } // namespace internal 212 } // namespace internal
209 } // namespace ash 213 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698