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

Side by Side Diff: ui/events/event.h

Issue 2655303004: Add id properties to PointerEvent (Closed)
Patch Set: pointer id Created 3 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
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 #ifndef UI_EVENTS_EVENT_H_ 5 #ifndef UI_EVENTS_EVENT_H_
6 #define UI_EVENTS_EVENT_H_ 6 #define UI_EVENTS_EVENT_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 401
402 // |location_| multiplied by an optional transformation matrix for 402 // |location_| multiplied by an optional transformation matrix for
403 // rotations, animations and skews. 403 // rotations, animations and skews.
404 gfx::PointF root_location_; 404 gfx::PointF root_location_;
405 }; 405 };
406 406
407 // Structure for handling common fields between touch and mouse to support 407 // Structure for handling common fields between touch and mouse to support
408 // PointerEvents API. 408 // PointerEvents API.
409 struct EVENTS_EXPORT PointerDetails { 409 struct EVENTS_EXPORT PointerDetails {
410 public: 410 public:
411 PointerDetails() {} 411 PointerDetails();
412 explicit PointerDetails(EventPointerType pointer_type) 412 explicit PointerDetails(EventPointerType pointer_type, uint32_t id = 0);
413 : pointer_type(pointer_type),
414 force(std::numeric_limits<float>::quiet_NaN()) {}
415 PointerDetails(EventPointerType pointer_type, 413 PointerDetails(EventPointerType pointer_type,
416 float radius_x, 414 float radius_x,
417 float radius_y, 415 float radius_y,
418 float force, 416 float force,
419 float tilt_x, 417 float tilt_x,
420 float tilt_y, 418 float tilt_y,
421 float tangential_pressure = 0.0f, 419 float tangential_pressure = 0.0f,
422 int twist = 0) 420 int twist = 0,
423 : pointer_type(pointer_type), 421 uint32_t id = 0);
424 // If we aren't provided with a radius on one axis, use the 422 PointerDetails(EventPointerType pointer_type, const gfx::Vector2d& offset);
425 // information from the other axis. 423 PointerDetails(const PointerDetails& other);
426 radius_x(radius_x > 0 ? radius_x : radius_y),
427 radius_y(radius_y > 0 ? radius_y : radius_x),
428 force(force),
429 tilt_x(tilt_x),
430 tilt_y(tilt_y),
431 tangential_pressure(tangential_pressure),
432 twist(twist) {}
433 PointerDetails(EventPointerType pointer_type, const gfx::Vector2d& offset)
434 : pointer_type(pointer_type),
435 force(std::numeric_limits<float>::quiet_NaN()),
436 offset(offset) {}
437 424
438 bool operator==(const PointerDetails& other) const { 425 bool operator==(const PointerDetails& other) const {
439 return pointer_type == other.pointer_type && radius_x == other.radius_x && 426 return pointer_type == other.pointer_type && radius_x == other.radius_x &&
440 radius_y == other.radius_y && 427 radius_y == other.radius_y &&
441 (force == other.force || 428 (force == other.force ||
442 (std::isnan(force) && std::isnan(other.force))) && 429 (std::isnan(force) && std::isnan(other.force))) &&
443 tilt_x == other.tilt_x && tilt_y == other.tilt_y && 430 tilt_x == other.tilt_x && tilt_y == other.tilt_y &&
444 tangential_pressure == other.tangential_pressure && 431 tangential_pressure == other.tangential_pressure &&
445 twist == other.twist && offset == other.offset; 432 twist == other.twist && id == other.id && offset == other.offset;
446 } 433 }
447 434
448 // The type of pointer device. 435 // The type of pointer device.
449 EventPointerType pointer_type = EventPointerType::POINTER_TYPE_UNKNOWN; 436 EventPointerType pointer_type = EventPointerType::POINTER_TYPE_UNKNOWN;
450 437
451 // Radius of the X (major) axis of the touch ellipse. 0.0 if unknown. 438 // Radius of the X (major) axis of the touch ellipse. 0.0 if unknown.
452 float radius_x = 0.0; 439 float radius_x = 0.0;
453 440
454 // Radius of the Y (minor) axis of the touch ellipse. 0.0 if unknown. 441 // Radius of the Y (minor) axis of the touch ellipse. 0.0 if unknown.
455 float radius_y = 0.0; 442 float radius_y = 0.0;
(...skipping 11 matching lines...) Expand all
467 // The normalized tangential pressure (or barrel pressure), typically set by 454 // The normalized tangential pressure (or barrel pressure), typically set by
468 // an additional control of the stylus, which has a range of [-1,1], where 0 455 // an additional control of the stylus, which has a range of [-1,1], where 0
469 // is the neutral position of the control. Always 0 if the device does not 456 // is the neutral position of the control. Always 0 if the device does not
470 // support it. 457 // support it.
471 float tangential_pressure = 0.0; 458 float tangential_pressure = 0.0;
472 459
473 // The clockwise rotation of a pen stylus around its own major axis, in 460 // The clockwise rotation of a pen stylus around its own major axis, in
474 // degrees in the range [0,359]. Always 0 if the device does not support it. 461 // degrees in the range [0,359]. Always 0 if the device does not support it.
475 int twist = 0; 462 int twist = 0;
476 463
464 // An identifier that uniquely identifies a pointer during its lifetime.
465 uint32_t id = 0;
466
477 // Only used by mouse wheel events. The amount to scroll. This is in multiples 467 // Only used by mouse wheel events. The amount to scroll. This is in multiples
478 // of kWheelDelta. 468 // of kWheelDelta.
479 // Note: offset_.x() > 0/offset_.y() > 0 means scroll left/up. 469 // Note: offset_.x() > 0/offset_.y() > 0 means scroll left/up.
480 gfx::Vector2d offset; 470 gfx::Vector2d offset;
481 }; 471 };
482 472
483 class EVENTS_EXPORT MouseEvent : public LocatedEvent { 473 class EVENTS_EXPORT MouseEvent : public LocatedEvent {
484 public: 474 public:
485 explicit MouseEvent(const base::NativeEvent& native_event); 475 explicit MouseEvent(const base::NativeEvent& native_event);
486 476
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 646
657 // |pointer_event.IsTouchPointerEvent()| must be true. 647 // |pointer_event.IsTouchPointerEvent()| must be true.
658 explicit TouchEvent(const PointerEvent& pointer_event); 648 explicit TouchEvent(const PointerEvent& pointer_event);
659 649
660 // Create a new TouchEvent which is identical to the provided model. 650 // Create a new TouchEvent which is identical to the provided model.
661 // If source / target windows are provided, the model location will be 651 // If source / target windows are provided, the model location will be
662 // converted from |source| coordinate system to |target| coordinate system. 652 // converted from |source| coordinate system to |target| coordinate system.
663 template <class T> 653 template <class T>
664 TouchEvent(const TouchEvent& model, T* source, T* target) 654 TouchEvent(const TouchEvent& model, T* source, T* target)
665 : LocatedEvent(model, source, target), 655 : LocatedEvent(model, source, target),
666 touch_id_(model.touch_id_),
667 unique_event_id_(model.unique_event_id_), 656 unique_event_id_(model.unique_event_id_),
668 rotation_angle_(model.rotation_angle_), 657 rotation_angle_(model.rotation_angle_),
669 may_cause_scrolling_(model.may_cause_scrolling_), 658 may_cause_scrolling_(model.may_cause_scrolling_),
670 should_remove_native_touch_id_mapping_(false), 659 should_remove_native_touch_id_mapping_(false),
671 pointer_details_(model.pointer_details_) {} 660 pointer_details_(model.pointer_details_) {}
672 661
673 TouchEvent(EventType type, 662 TouchEvent(EventType type,
674 const gfx::Point& location, 663 const gfx::Point& location,
675 int touch_id, 664 uint32_t touch_id,
676 base::TimeTicks time_stamp); 665 base::TimeTicks time_stamp);
677 666
678 TouchEvent(EventType type, 667 TouchEvent(EventType type,
679 const gfx::Point& location, 668 const gfx::Point& location,
680 int flags, 669 int flags,
681 int touch_id, 670 uint32_t touch_id,
682 base::TimeTicks timestamp, 671 base::TimeTicks timestamp,
683 float radius_x, 672 float radius_x,
684 float radius_y, 673 float radius_y,
685 float angle, 674 float angle,
686 float force); 675 float force);
687 676
688 TouchEvent(const TouchEvent& copy); 677 TouchEvent(const TouchEvent& copy);
689 678
690 ~TouchEvent() override; 679 ~TouchEvent() override;
691 680
692 // The id of the pointer this event modifies.
693 int touch_id() const { return touch_id_; }
694 // A unique identifier for this event. 681 // A unique identifier for this event.
695 uint32_t unique_event_id() const { return unique_event_id_; } 682 uint32_t unique_event_id() const { return unique_event_id_; }
696 683
697 float rotation_angle() const { return rotation_angle_; } 684 float rotation_angle() const { return rotation_angle_; }
698 685
699 void set_may_cause_scrolling(bool causes) { may_cause_scrolling_ = causes; } 686 void set_may_cause_scrolling(bool causes) { may_cause_scrolling_ = causes; }
700 bool may_cause_scrolling() const { return may_cause_scrolling_; } 687 bool may_cause_scrolling() const { return may_cause_scrolling_; }
701 688
702 void set_should_remove_native_touch_id_mapping( 689 void set_should_remove_native_touch_id_mapping(
703 bool should_remove_native_touch_id_mapping) { 690 bool should_remove_native_touch_id_mapping) {
(...skipping 14 matching lines...) Expand all
718 // Event details common to MouseEvent and TouchEvent. 705 // Event details common to MouseEvent and TouchEvent.
719 const PointerDetails& pointer_details() const { return pointer_details_; } 706 const PointerDetails& pointer_details() const { return pointer_details_; }
720 void set_pointer_details(const PointerDetails& pointer_details) { 707 void set_pointer_details(const PointerDetails& pointer_details) {
721 pointer_details_ = pointer_details; 708 pointer_details_ = pointer_details;
722 } 709 }
723 710
724 private: 711 private:
725 // Adjusts rotation_angle_ to within the acceptable range. 712 // Adjusts rotation_angle_ to within the acceptable range.
726 void FixRotationAngle(); 713 void FixRotationAngle();
727 714
728 // The identity (typically finger) of the touch starting at 0 and incrementing
729 // for each separable additional touch that the hardware can detect.
730 int touch_id_;
731
732 // A unique identifier for the touch event. 715 // A unique identifier for the touch event.
733 uint32_t unique_event_id_; 716 uint32_t unique_event_id_;
734 717
735 // Clockwise angle (in degrees) of the major axis from the X axis. Must be 718 // Clockwise angle (in degrees) of the major axis from the X axis. Must be
736 // less than 180 and non-negative. 719 // less than 180 and non-negative.
737 float rotation_angle_; 720 float rotation_angle_;
738 721
739 // Whether the (unhandled) touch event will produce a scroll event (e.g., a 722 // Whether the (unhandled) touch event will produce a scroll event (e.g., a
740 // touchmove that exceeds the platform slop region, or a touchend that 723 // touchmove that exceeds the platform slop region, or a touchend that
741 // causes a fling). Defaults to false. 724 // causes a fling). Defaults to false.
742 bool may_cause_scrolling_; 725 bool may_cause_scrolling_;
743 726
744 // True if this event should remove the mapping between the native 727 // True if this event should remove the mapping between the native
745 // event id and the touch_id_. This should only be the case for 728 // event id and the touch_id_. This should only be the case for
746 // release and cancel events where the associated touch press event 729 // release and cancel events where the associated touch press event
747 // created a mapping between the native id and the touch_id_. 730 // created a mapping between the native id and the touch_id_.
748 bool should_remove_native_touch_id_mapping_; 731 bool should_remove_native_touch_id_mapping_;
749 732
750 // Structure for holding pointer details for implementing PointerEvents API. 733 // Structure for holding pointer details for implementing PointerEvents API.
751 PointerDetails pointer_details_; 734 PointerDetails pointer_details_;
752 }; 735 };
753 736
754 class EVENTS_EXPORT PointerEvent : public LocatedEvent { 737 class EVENTS_EXPORT PointerEvent : public LocatedEvent {
755 public: 738 public:
756 static const int32_t kMousePointerId; 739 static const uint32_t kMousePointerId;
757 740
758 // Returns true if a PointerEvent can be constructed from |event|. Currently, 741 // Returns true if a PointerEvent can be constructed from |event|. Currently,
759 // only mouse and touch events can be converted to pointer events. 742 // only mouse and touch events can be converted to pointer events.
760 static bool CanConvertFrom(const Event& event); 743 static bool CanConvertFrom(const Event& event);
761 744
762 PointerEvent(const PointerEvent& pointer_event); 745 PointerEvent(const PointerEvent& pointer_event);
763 explicit PointerEvent(const MouseEvent& mouse_event); 746 explicit PointerEvent(const MouseEvent& mouse_event);
764 explicit PointerEvent(const TouchEvent& touch_event); 747 explicit PointerEvent(const TouchEvent& touch_event);
765 748
766 PointerEvent(EventType type, 749 PointerEvent(EventType type,
767 const gfx::Point& location, 750 const gfx::Point& location,
768 const gfx::Point& root_location, 751 const gfx::Point& root_location,
769 int flags, 752 int flags,
770 int pointer_id, 753 uint32_t pointer_id,
771 int changed_button_flags, 754 int changed_button_flags,
772 const PointerDetails& pointer_details, 755 const PointerDetails& pointer_details,
773 base::TimeTicks time_stamp); 756 base::TimeTicks time_stamp);
774 757
775 int32_t pointer_id() const { return pointer_id_; }
776 int changed_button_flags() const { return changed_button_flags_; } 758 int changed_button_flags() const { return changed_button_flags_; }
777 void set_changed_button_flags(int flags) { changed_button_flags_ = flags; } 759 void set_changed_button_flags(int flags) { changed_button_flags_ = flags; }
778 const PointerDetails& pointer_details() const { return details_; } 760 const PointerDetails& pointer_details() const { return details_; }
779 761
780 private: 762 private:
781 int32_t pointer_id_;
782 int changed_button_flags_; 763 int changed_button_flags_;
783 PointerDetails details_; 764 PointerDetails details_;
784 }; 765 };
785 766
786 // A KeyEvent is really two distinct classes, melded together due to the 767 // A KeyEvent is really two distinct classes, melded together due to the
787 // DOM legacy of Windows key events: a keystroke event (is_char_ == false), 768 // DOM legacy of Windows key events: a keystroke event (is_char_ == false),
788 // or a character event (is_char_ == true). 769 // or a character event (is_char_ == true).
789 // 770 //
790 // For a keystroke event, 771 // For a keystroke event,
791 // -- |bool is_char_| is false. 772 // -- |bool is_char_| is false.
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 // dispatched. This field gets a non-zero value only for gestures that are 1034 // dispatched. This field gets a non-zero value only for gestures that are
1054 // released through TouchDispositionGestureFilter::SendGesture. The gesture 1035 // released through TouchDispositionGestureFilter::SendGesture. The gesture
1055 // events that aren't fired directly in response to processing a touch-event 1036 // events that aren't fired directly in response to processing a touch-event
1056 // (e.g. timer fired ones), this id is zero. See crbug.com/618738. 1037 // (e.g. timer fired ones), this id is zero. See crbug.com/618738.
1057 uint32_t unique_touch_event_id_; 1038 uint32_t unique_touch_event_id_;
1058 }; 1039 };
1059 1040
1060 } // namespace ui 1041 } // namespace ui
1061 1042
1062 #endif // UI_EVENTS_EVENT_H_ 1043 #endif // UI_EVENTS_EVENT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698