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/toplevel_window_event_handler.h" | 5 #include "ash/wm/toplevel_window_event_handler.h" |
6 | 6 |
7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
8 #include "ash/wm/property_util.h" | 8 #include "ash/wm/property_util.h" |
9 #include "ash/wm/resize_shadow_controller.h" | 9 #include "ash/wm/resize_shadow_controller.h" |
10 #include "ash/wm/window_resizer.h" | 10 #include "ash/wm/window_resizer.h" |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 case ui::ET_MOUSE_MOVED: | 149 case ui::ET_MOUSE_MOVED: |
150 return HandleMouseMoved(target, event); | 150 return HandleMouseMoved(target, event); |
151 case ui::ET_MOUSE_EXITED: | 151 case ui::ET_MOUSE_EXITED: |
152 return HandleMouseExited(target, event); | 152 return HandleMouseExited(target, event); |
153 default: | 153 default: |
154 break; | 154 break; |
155 } | 155 } |
156 return ui::ER_UNHANDLED; | 156 return ui::ER_UNHANDLED; |
157 } | 157 } |
158 | 158 |
159 ui::EventResult ToplevelWindowEventHandler::OnGestureEvent( | 159 void ToplevelWindowEventHandler::OnGestureEvent(ui::GestureEvent* event) { |
160 ui::GestureEvent* event) { | |
161 aura::Window* target = static_cast<aura::Window*>(event->target()); | 160 aura::Window* target = static_cast<aura::Window*>(event->target()); |
162 if (!target->delegate()) | 161 if (!target->delegate()) |
163 return ui::ER_UNHANDLED; | 162 return; |
164 | 163 |
165 switch (event->type()) { | 164 switch (event->type()) { |
166 case ui::ET_GESTURE_SCROLL_BEGIN: { | 165 case ui::ET_GESTURE_SCROLL_BEGIN: { |
167 int component = | 166 int component = |
168 target->delegate()->GetNonClientComponent(event->location()); | 167 target->delegate()->GetNonClientComponent(event->location()); |
169 if (WindowResizer::GetBoundsChangeForWindowComponent(component) == 0) { | 168 if (WindowResizer::GetBoundsChangeForWindowComponent(component) == 0) { |
170 window_resizer_.reset(); | 169 window_resizer_.reset(); |
171 return ui::ER_UNHANDLED; | 170 return; |
172 } | 171 } |
173 in_gesture_drag_ = true; | 172 in_gesture_drag_ = true; |
174 gfx::Point location_in_parent( | 173 gfx::Point location_in_parent( |
175 ConvertPointToParent(target, event->location())); | 174 ConvertPointToParent(target, event->location())); |
176 CreateScopedWindowResizer(target, location_in_parent, component); | 175 CreateScopedWindowResizer(target, location_in_parent, component); |
177 break; | 176 break; |
178 } | 177 } |
179 case ui::ET_GESTURE_SCROLL_UPDATE: { | 178 case ui::ET_GESTURE_SCROLL_UPDATE: { |
180 if (!in_gesture_drag_) | 179 if (!in_gesture_drag_) |
181 return ui::ER_UNHANDLED; | 180 return; |
182 HandleDrag(target, event); | 181 HandleDrag(target, event); |
183 break; | 182 break; |
184 } | 183 } |
185 case ui::ET_GESTURE_SCROLL_END: | 184 case ui::ET_GESTURE_SCROLL_END: |
186 case ui::ET_SCROLL_FLING_START: { | 185 case ui::ET_SCROLL_FLING_START: { |
187 if (!in_gesture_drag_) | 186 if (!in_gesture_drag_) |
188 return ui::ER_UNHANDLED; | 187 return; |
189 | 188 |
190 CompleteDrag(DRAG_COMPLETE, event->flags()); | 189 CompleteDrag(DRAG_COMPLETE, event->flags()); |
191 if (in_move_loop_) { | 190 if (in_move_loop_) { |
192 quit_closure_.Run(); | 191 quit_closure_.Run(); |
193 in_move_loop_ = false; | 192 in_move_loop_ = false; |
194 } | 193 } |
195 in_gesture_drag_ = false; | 194 in_gesture_drag_ = false; |
196 | 195 |
197 if (event->type() == ui::ET_GESTURE_SCROLL_END) | 196 if (event->type() == ui::ET_GESTURE_SCROLL_END) { |
198 return ui::ER_CONSUMED; | 197 event->StopPropagation(); |
| 198 return; |
| 199 } |
199 | 200 |
200 int component = | 201 int component = |
201 target->delegate()->GetNonClientComponent(event->location()); | 202 target->delegate()->GetNonClientComponent(event->location()); |
202 if (WindowResizer::GetBoundsChangeForWindowComponent(component) == 0) | 203 if (WindowResizer::GetBoundsChangeForWindowComponent(component) == 0) |
203 return ui::ER_UNHANDLED; | 204 return; |
204 if (!wm::IsWindowNormal(target)) | 205 if (!wm::IsWindowNormal(target)) |
205 return ui::ER_UNHANDLED; | 206 return; |
206 | 207 |
207 if (fabs(event->details().velocity_y()) > | 208 if (fabs(event->details().velocity_y()) > |
208 kMinVertVelocityForWindowMinimize) { | 209 kMinVertVelocityForWindowMinimize) { |
209 // Minimize/maximize. | 210 // Minimize/maximize. |
210 if (event->details().velocity_y() > 0) | 211 if (event->details().velocity_y() > 0) |
211 wm::MinimizeWindow(target); | 212 wm::MinimizeWindow(target); |
212 else if (wm::CanMaximizeWindow(target)) | 213 else if (wm::CanMaximizeWindow(target)) |
213 wm::MaximizeWindow(target); | 214 wm::MaximizeWindow(target); |
214 } else if (fabs(event->details().velocity_x()) > | 215 } else if (fabs(event->details().velocity_x()) > |
215 kMinHorizVelocityForWindowSwipe) { | 216 kMinHorizVelocityForWindowSwipe) { |
216 // Snap left/right. | 217 // Snap left/right. |
217 ui::ScopedLayerAnimationSettings scoped_setter( | 218 ui::ScopedLayerAnimationSettings scoped_setter( |
218 target->layer()->GetAnimator()); | 219 target->layer()->GetAnimator()); |
219 scoped_setter.SetPreemptionStrategy( | 220 scoped_setter.SetPreemptionStrategy( |
220 ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS); | 221 ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS); |
221 internal::SnapSizer::SnapWindow(target, | 222 internal::SnapSizer::SnapWindow(target, |
222 event->details().velocity_x() < 0 ? | 223 event->details().velocity_x() < 0 ? |
223 internal::SnapSizer::LEFT_EDGE : internal::SnapSizer::RIGHT_EDGE); | 224 internal::SnapSizer::LEFT_EDGE : internal::SnapSizer::RIGHT_EDGE); |
224 } | 225 } |
225 break; | 226 break; |
226 } | 227 } |
227 default: | 228 default: |
228 return ui::ER_UNHANDLED; | 229 return; |
229 } | 230 } |
230 | 231 |
231 return ui::ER_CONSUMED; | 232 event->StopPropagation(); |
232 } | 233 } |
233 | 234 |
234 aura::client::WindowMoveResult ToplevelWindowEventHandler::RunMoveLoop( | 235 aura::client::WindowMoveResult ToplevelWindowEventHandler::RunMoveLoop( |
235 aura::Window* source, | 236 aura::Window* source, |
236 const gfx::Vector2d& drag_offset) { | 237 const gfx::Vector2d& drag_offset) { |
237 DCHECK(!in_move_loop_); // Can only handle one nested loop at a time. | 238 DCHECK(!in_move_loop_); // Can only handle one nested loop at a time. |
238 in_move_loop_ = true; | 239 in_move_loop_ = true; |
239 move_cancelled_ = false; | 240 move_cancelled_ = false; |
240 aura::RootWindow* root_window = source->GetRootWindow(); | 241 aura::RootWindow* root_window = source->GetRootWindow(); |
241 DCHECK(root_window); | 242 DCHECK(root_window); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { | 431 void ToplevelWindowEventHandler::ResizerWindowDestroyed() { |
431 // We explicitly don't invoke RevertDrag() since that may do things to window. | 432 // We explicitly don't invoke RevertDrag() since that may do things to window. |
432 // Instead we destroy the resizer. | 433 // Instead we destroy the resizer. |
433 window_resizer_.reset(); | 434 window_resizer_.reset(); |
434 | 435 |
435 // End the move loop. This does nothing if we're not in a move loop. | 436 // End the move loop. This does nothing if we're not in a move loop. |
436 EndMoveLoop(); | 437 EndMoveLoop(); |
437 } | 438 } |
438 | 439 |
439 } // namespace ash | 440 } // namespace ash |
OLD | NEW |