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

Side by Side Diff: ui/aura/gestures/gesture_sequence.cc

Issue 9773024: This patch implements Chromium's Aura gesture recognizer in terms of utouch-grail and utouch-frame … (Closed) Base URL: https://src.chromium.org/svn/trunk/src/
Patch Set: Created 8 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
« no previous file with comments | « ui/aura/gestures/gesture_recognizer_unittest.cc ('k') | ui/aura/root_window.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "ui/aura/gestures/gesture_sequence.h" 5 #include "ui/aura/gestures/gesture_sequence.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "ui/aura/event.h" 10 #include "ui/aura/event.h"
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 } 302 }
303 303
304 void GestureSequence::AppendTapDownGestureEvent(const GesturePoint& point, 304 void GestureSequence::AppendTapDownGestureEvent(const GesturePoint& point,
305 Gestures* gestures) { 305 Gestures* gestures) {
306 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent( 306 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
307 ui::ET_GESTURE_TAP_DOWN, 307 ui::ET_GESTURE_TAP_DOWN,
308 point.first_touch_position().x(), 308 point.first_touch_position().x(),
309 point.first_touch_position().y(), 309 point.first_touch_position().y(),
310 flags_, 310 flags_,
311 base::Time::FromDoubleT(point.last_touch_time()), 311 base::Time::FromDoubleT(point.last_touch_time()),
312 0.f, 0.f))); 312 GestureEvent::Properties())));
313 } 313 }
314 314
315 void GestureSequence::AppendClickGestureEvent(const GesturePoint& point, 315 void GestureSequence::AppendClickGestureEvent(const GesturePoint& point,
316 Gestures* gestures) { 316 Gestures* gestures) {
317 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent( 317 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
318 ui::ET_GESTURE_TAP, 318 ui::ET_GESTURE_TAP,
319 point.first_touch_position().x(), 319 point.first_touch_position().x(),
320 point.first_touch_position().y(), 320 point.first_touch_position().y(),
321 flags_, 321 flags_,
322 base::Time::FromDoubleT(point.last_touch_time()), 322 base::Time::FromDoubleT(point.last_touch_time()),
323 0.f, 0.f))); 323 GestureEvent::Properties())));
324 } 324 }
325 325
326 void GestureSequence::AppendDoubleClickGestureEvent(const GesturePoint& point, 326 void GestureSequence::AppendDoubleClickGestureEvent(const GesturePoint& point,
327 Gestures* gestures) { 327 Gestures* gestures) {
328 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent( 328 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
329 ui::ET_GESTURE_DOUBLE_TAP, 329 ui::ET_GESTURE_DOUBLE_TAP,
330 point.first_touch_position().x(), 330 point.first_touch_position().x(),
331 point.first_touch_position().y(), 331 point.first_touch_position().y(),
332 flags_, 332 flags_,
333 base::Time::FromDoubleT(point.last_touch_time()), 333 base::Time::FromDoubleT(point.last_touch_time()),
334 0.f, 0.f))); 334 GestureEvent::Properties())));
335 } 335 }
336 336
337 void GestureSequence::AppendScrollGestureBegin(const GesturePoint& point, 337 void GestureSequence::AppendScrollGestureBegin(const GesturePoint& point,
338 const gfx::Point& location, 338 const gfx::Point& location,
339 Gestures* gestures) { 339 Gestures* gestures) {
340 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent( 340 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
341 ui::ET_GESTURE_SCROLL_BEGIN, 341 ui::ET_GESTURE_SCROLL_BEGIN,
342 location.x(), 342 location.x(),
343 location.y(), 343 location.y(),
344 flags_, 344 flags_,
345 base::Time::FromDoubleT(point.last_touch_time()), 345 base::Time::FromDoubleT(point.last_touch_time()),
346 0.f, 0.f))); 346 GestureEvent::Properties())));
347 } 347 }
348 348
349 void GestureSequence::AppendScrollGestureEnd(const GesturePoint& point, 349 void GestureSequence::AppendScrollGestureEnd(const GesturePoint& point,
350 const gfx::Point& location, 350 const gfx::Point& location,
351 Gestures* gestures, 351 Gestures* gestures,
352 float x_velocity, 352 float x_velocity,
353 float y_velocity) { 353 float y_velocity) {
354 float railed_x_velocity = x_velocity; 354 float railed_x_velocity = x_velocity;
355 float railed_y_velocity = y_velocity; 355 float railed_y_velocity = y_velocity;
356 356
357 if (scroll_type_ == ST_HORIZONTAL) 357 if (scroll_type_ == ST_HORIZONTAL)
358 railed_y_velocity = 0; 358 railed_y_velocity = 0;
359 else if (scroll_type_ == ST_VERTICAL) 359 else if (scroll_type_ == ST_VERTICAL)
360 railed_x_velocity = 0; 360 railed_x_velocity = 0;
361 361
362 GestureEvent::Properties props;
363 props.delta_x = railed_x_velocity;
364 props.delta_y = railed_y_velocity;
365
362 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent( 366 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
363 ui::ET_GESTURE_SCROLL_END, 367 ui::ET_GESTURE_SCROLL_END,
364 location.x(), 368 location.x(),
365 location.y(), 369 location.y(),
366 flags_, 370 flags_,
367 base::Time::FromDoubleT(point.last_touch_time()), 371 base::Time::FromDoubleT(point.last_touch_time()),
368 railed_x_velocity, railed_y_velocity))); 372 props)));
369 } 373 }
370 374
371 void GestureSequence::AppendScrollGestureUpdate(const GesturePoint& point, 375 void GestureSequence::AppendScrollGestureUpdate(const GesturePoint& point,
372 const gfx::Point& location, 376 const gfx::Point& location,
373 Gestures* gestures) { 377 Gestures* gestures) {
374 int dx = point.x_delta(); 378 int dx = point.x_delta();
375 int dy = point.y_delta(); 379 int dy = point.y_delta();
376 380
377 if (scroll_type_ == ST_HORIZONTAL) 381 if (scroll_type_ == ST_HORIZONTAL)
378 dy = 0; 382 dy = 0;
379 else if (scroll_type_ == ST_VERTICAL) 383 else if (scroll_type_ == ST_VERTICAL)
380 dx = 0; 384 dx = 0;
381 385
386 GestureEvent::Properties props;
387 props.delta_x = dx;
388 props.delta_y = dy;
389
382 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent( 390 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
383 ui::ET_GESTURE_SCROLL_UPDATE, 391 ui::ET_GESTURE_SCROLL_UPDATE,
384 location.x(), 392 location.x(),
385 location.y(), 393 location.y(),
386 flags_, 394 flags_,
387 base::Time::FromDoubleT(point.last_touch_time()), 395 base::Time::FromDoubleT(point.last_touch_time()),
388 dx, dy))); 396 props)));
389 } 397 }
390 398
391 void GestureSequence::AppendPinchGestureBegin(const GesturePoint& p1, 399 void GestureSequence::AppendPinchGestureBegin(const GesturePoint& p1,
392 const GesturePoint& p2, 400 const GesturePoint& p2,
393 Gestures* gestures) { 401 Gestures* gestures) {
394 gfx::Point center = p1.last_touch_position().Middle(p2.last_touch_position()); 402 gfx::Point center = p1.last_touch_position().Middle(p2.last_touch_position());
395 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent( 403 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
396 ui::ET_GESTURE_PINCH_BEGIN, 404 ui::ET_GESTURE_PINCH_BEGIN,
397 center.x(), 405 center.x(),
398 center.y(), 406 center.y(),
399 flags_, 407 flags_,
400 base::Time::FromDoubleT(p1.last_touch_time()), 408 base::Time::FromDoubleT(p1.last_touch_time()),
401 0.f, 0.f))); 409 GestureEvent::Properties())));
402 } 410 }
403 411
404 void GestureSequence::AppendPinchGestureEnd(const GesturePoint& p1, 412 void GestureSequence::AppendPinchGestureEnd(const GesturePoint& p1,
405 const GesturePoint& p2, 413 const GesturePoint& p2,
406 float scale, 414 float scale,
407 Gestures* gestures) { 415 Gestures* gestures) {
408 gfx::Point center = p1.last_touch_position().Middle(p2.last_touch_position()); 416 gfx::Point center = p1.last_touch_position().Middle(p2.last_touch_position());
417 GestureEvent::Properties props;
418 props.delta_x = scale;
419 props.scale_x = scale;
420
409 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent( 421 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
410 ui::ET_GESTURE_PINCH_END, 422 ui::ET_GESTURE_PINCH_END,
411 center.x(), 423 center.x(),
412 center.y(), 424 center.y(),
413 flags_, 425 flags_,
414 base::Time::FromDoubleT(p1.last_touch_time()), 426 base::Time::FromDoubleT(p1.last_touch_time()),
415 scale, 0.f))); 427 props)));
416 } 428 }
417 429
418 void GestureSequence::AppendPinchGestureUpdate(const GesturePoint& p1, 430 void GestureSequence::AppendPinchGestureUpdate(const GesturePoint& p1,
419 const GesturePoint& p2, 431 const GesturePoint& p2,
420 float scale, 432 float scale,
421 Gestures* gestures) { 433 Gestures* gestures) {
422 // TODO(sad): Compute rotation and include it in delta_y. 434 // TODO(sad): Compute rotation and include it in delta_y.
423 // http://crbug.com/113145 435 // http://crbug.com/113145
424 gfx::Point center = p1.last_touch_position().Middle(p2.last_touch_position()); 436 gfx::Point center = p1.last_touch_position().Middle(p2.last_touch_position());
437
438 GestureEvent::Properties props;
439 props.delta_x = scale;
440 props.scale_x = scale;
441
425 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent( 442 gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
426 ui::ET_GESTURE_PINCH_UPDATE, 443 ui::ET_GESTURE_PINCH_UPDATE,
427 center.x(), 444 center.x(),
428 center.y(), 445 center.y(),
429 flags_, 446 flags_,
430 base::Time::FromDoubleT(p1.last_touch_time()), 447 base::Time::FromDoubleT(p1.last_touch_time()),
431 scale, 0.f))); 448 props)));
432 } 449 }
433 450
434 bool GestureSequence::Click(const TouchEvent& event, 451 bool GestureSequence::Click(const TouchEvent& event,
435 const GesturePoint& point, Gestures* gestures) { 452 const GesturePoint& point, Gestures* gestures) {
436 DCHECK(state_ == GS_PENDING_SYNTHETIC_CLICK); 453 DCHECK(state_ == GS_PENDING_SYNTHETIC_CLICK);
437 if (point.IsInClickWindow(event)) { 454 if (point.IsInClickWindow(event)) {
438 AppendClickGestureEvent(point, gestures); 455 AppendClickGestureEvent(point, gestures);
439 if (point.IsInDoubleClickWindow(event)) 456 if (point.IsInDoubleClickWindow(event))
440 AppendDoubleClickGestureEvent(point, gestures); 457 AppendDoubleClickGestureEvent(point, gestures);
441 return true; 458 return true;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 long_press_timer_->Start( 510 long_press_timer_->Start(
494 FROM_HERE, 511 FROM_HERE,
495 base::TimeDelta::FromMilliseconds(kLongPressTimeInMilliseconds), 512 base::TimeDelta::FromMilliseconds(kLongPressTimeInMilliseconds),
496 this, 513 this,
497 &GestureSequence::AppendLongPressGestureEvent); 514 &GestureSequence::AppendLongPressGestureEvent);
498 return true; 515 return true;
499 } 516 }
500 517
501 void GestureSequence::AppendLongPressGestureEvent() { 518 void GestureSequence::AppendLongPressGestureEvent() {
502 const GesturePoint* point = GetPointByPointId(0); 519 const GesturePoint* point = GetPointByPointId(0);
520 GestureEvent::Properties props;
521 props.point_id = point->point_id();
522
503 GestureEvent gesture( 523 GestureEvent gesture(
504 ui::ET_GESTURE_LONG_PRESS, 524 ui::ET_GESTURE_LONG_PRESS,
505 point->first_touch_position().x(), 525 point->first_touch_position().x(),
506 point->first_touch_position().y(), 526 point->first_touch_position().y(),
507 flags_, 527 flags_,
508 base::Time::FromDoubleT(point->last_touch_time()), 528 base::Time::FromDoubleT(point->last_touch_time()),
509 point->point_id(), 0.f); 529 props);
510 root_window_->DispatchGestureEvent(&gesture); 530 root_window_->DispatchGestureEvent(&gesture);
511 } 531 }
512 532
513 bool GestureSequence::ScrollEnd(const TouchEvent& event, 533 bool GestureSequence::ScrollEnd(const TouchEvent& event,
514 GesturePoint& point, Gestures* gestures) { 534 GesturePoint& point, Gestures* gestures) {
515 DCHECK(state_ == GS_SCROLL); 535 DCHECK(state_ == GS_SCROLL);
516 if (point.IsInFlickWindow(event)) { 536 if (point.IsInFlickWindow(event)) {
517 AppendScrollGestureEnd(point, point.last_touch_position(), gestures, 537 AppendScrollGestureEnd(point, point.last_touch_position(), gestures,
518 point.XVelocity(), point.YVelocity()); 538 point.XVelocity(), point.YVelocity());
519 } else { 539 } else {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 float distance = point1->Distance(*point2); 605 float distance = point1->Distance(*point2);
586 AppendPinchGestureEnd(*point1, *point2, 606 AppendPinchGestureEnd(*point1, *point2,
587 distance / pinch_distance_start_, gestures); 607 distance / pinch_distance_start_, gestures);
588 608
589 pinch_distance_start_ = 0; 609 pinch_distance_start_ = 0;
590 pinch_distance_current_ = 0; 610 pinch_distance_current_ = 0;
591 return true; 611 return true;
592 } 612 }
593 613
594 } // namespace aura 614 } // namespace aura
OLDNEW
« no previous file with comments | « ui/aura/gestures/gesture_recognizer_unittest.cc ('k') | ui/aura/root_window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698