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

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

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 #include "ui/events/event.h" 5 #include "ui/events/event.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 10
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
494 void LocatedEvent::UpdateForRootTransform( 494 void LocatedEvent::UpdateForRootTransform(
495 const gfx::Transform& reversed_root_transform) { 495 const gfx::Transform& reversed_root_transform) {
496 // Transform has to be done at root level. 496 // Transform has to be done at root level.
497 gfx::Point3F p(location_); 497 gfx::Point3F p(location_);
498 reversed_root_transform.TransformPoint(&p); 498 reversed_root_transform.TransformPoint(&p);
499 location_ = p.AsPointF(); 499 location_ = p.AsPointF();
500 root_location_ = location_; 500 root_location_ = location_;
501 } 501 }
502 502
503 //////////////////////////////////////////////////////////////////////////////// 503 ////////////////////////////////////////////////////////////////////////////////
504 // PointerDetails
505
506 PointerDetails::PointerDetails() {}
507
508 PointerDetails::PointerDetails(EventPointerType pointer_type, int pointer_id)
509 : PointerDetails(pointer_type,
510 0.0f,
511 0.0f,
512 std::numeric_limits<float>::quiet_NaN(),
513 0.0f,
514 0.0f,
515 0.0f,
516 0,
517 pointer_id) {}
518
519 PointerDetails::PointerDetails(EventPointerType pointer_type,
520 float radius_x,
521 float radius_y,
522 float force,
523 float tilt_x,
524 float tilt_y,
525 float tangential_pressure,
526 int twist,
527 int pointer_id)
528 : pointer_type(pointer_type),
529 // If we aren't provided with a radius on one axis, use the
530 // information from the other axis.
531 radius_x(radius_x > 0 ? radius_x : radius_y),
532 radius_y(radius_y > 0 ? radius_y : radius_x),
533 force(force),
534 tilt_x(tilt_x),
535 tilt_y(tilt_y),
536 tangential_pressure(tangential_pressure),
537 twist(twist),
538 id(pointer_id) {
539 if (pointer_id == PointerDetails::kUnknownPointerId) {
540 id = pointer_type == EventPointerType::POINTER_TYPE_TOUCH
541 ? 0
542 : PointerEvent::kMousePointerId;
543 }
544 }
545
546 PointerDetails::PointerDetails(EventPointerType pointer_type,
547 const gfx::Vector2d& pointer_offset,
548 int pointer_id)
549 : PointerDetails(pointer_type, pointer_id) {
550 offset = pointer_offset;
551 }
552
553 PointerDetails::PointerDetails(const PointerDetails& other)
554 : pointer_type(other.pointer_type),
555 radius_x(other.radius_x),
556 radius_y(other.radius_y),
557 force(other.force),
558 tilt_x(other.tilt_x),
559 tilt_y(other.tilt_y),
560 tangential_pressure(other.tangential_pressure),
561 twist(other.twist),
562 id(other.id),
563 offset(other.offset) {}
564
565 const int PointerDetails::kUnknownPointerId = -1;
566
567 ////////////////////////////////////////////////////////////////////////////////
504 // MouseEvent 568 // MouseEvent
505 569
506 MouseEvent::MouseEvent(const base::NativeEvent& native_event) 570 MouseEvent::MouseEvent(const base::NativeEvent& native_event)
507 : LocatedEvent(native_event), 571 : LocatedEvent(native_event),
508 changed_button_flags_(GetChangedMouseButtonFlagsFromNative(native_event)), 572 changed_button_flags_(GetChangedMouseButtonFlagsFromNative(native_event)),
509 pointer_details_(GetMousePointerDetailsFromNative(native_event)) { 573 pointer_details_(GetMousePointerDetailsFromNative(native_event)) {
510 latency()->AddLatencyNumberWithTimestamp( 574 latency()->AddLatencyNumberWithTimestamp(
511 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0, 575 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0,
512 base::TimeTicks::FromInternalValue(time_stamp().ToInternalValue()), 1); 576 base::TimeTicks::FromInternalValue(time_stamp().ToInternalValue()), 1);
513 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); 577 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 const int MouseWheelEvent::kWheelDelta = 120; 822 const int MouseWheelEvent::kWheelDelta = 120;
759 #else 823 #else
760 // This value matches GTK+ wheel scroll amount. 824 // This value matches GTK+ wheel scroll amount.
761 const int MouseWheelEvent::kWheelDelta = 53; 825 const int MouseWheelEvent::kWheelDelta = 53;
762 #endif 826 #endif
763 827
764 //////////////////////////////////////////////////////////////////////////////// 828 ////////////////////////////////////////////////////////////////////////////////
765 // TouchEvent 829 // TouchEvent
766 830
767 TouchEvent::TouchEvent(const base::NativeEvent& native_event) 831 TouchEvent::TouchEvent(const base::NativeEvent& native_event)
768 : LocatedEvent(native_event), 832 : LocatedEvent(native_event),
mustaq 2017/02/27 16:02:26 I think the bug with pinch-zoom on CrOS (crbug.com
769 touch_id_(GetTouchId(native_event)),
770 unique_event_id_(ui::GetNextTouchEventId()), 833 unique_event_id_(ui::GetNextTouchEventId()),
771 rotation_angle_(GetTouchAngle(native_event)), 834 rotation_angle_(GetTouchAngle(native_event)),
772 may_cause_scrolling_(false), 835 may_cause_scrolling_(false),
773 should_remove_native_touch_id_mapping_(false), 836 should_remove_native_touch_id_mapping_(false),
774 pointer_details_(GetTouchPointerDetailsFromNative(native_event)) { 837 pointer_details_(GetTouchPointerDetailsFromNative(native_event)) {
775 latency()->AddLatencyNumberWithTimestamp( 838 latency()->AddLatencyNumberWithTimestamp(
776 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0, 839 INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 0, 0,
777 base::TimeTicks::FromInternalValue(time_stamp().ToInternalValue()), 1); 840 base::TimeTicks::FromInternalValue(time_stamp().ToInternalValue()), 1);
778 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); 841 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
779 842
780 FixRotationAngle(); 843 FixRotationAngle();
781 if (type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED) 844 if (type() == ET_TOUCH_RELEASED || type() == ET_TOUCH_CANCELLED)
782 should_remove_native_touch_id_mapping_ = true; 845 should_remove_native_touch_id_mapping_ = true;
783 } 846 }
784 847
785 TouchEvent::TouchEvent(const PointerEvent& pointer_event) 848 TouchEvent::TouchEvent(const PointerEvent& pointer_event)
786 : LocatedEvent(pointer_event), 849 : LocatedEvent(pointer_event),
787 touch_id_(pointer_event.pointer_id()),
788 unique_event_id_(ui::GetNextTouchEventId()), 850 unique_event_id_(ui::GetNextTouchEventId()),
789 rotation_angle_(0.0f), 851 rotation_angle_(0.0f),
790 may_cause_scrolling_(false), 852 may_cause_scrolling_(false),
791 should_remove_native_touch_id_mapping_(false), 853 should_remove_native_touch_id_mapping_(false),
792 pointer_details_(pointer_event.pointer_details()) { 854 pointer_details_(pointer_event.pointer_details()) {
793 DCHECK(pointer_event.IsTouchPointerEvent()); 855 DCHECK(pointer_event.IsTouchPointerEvent());
794 switch (pointer_event.type()) { 856 switch (pointer_event.type()) {
795 case ET_POINTER_DOWN: 857 case ET_POINTER_DOWN:
796 SetType(ET_TOUCH_PRESSED); 858 SetType(ET_TOUCH_PRESSED);
797 break; 859 break;
(...skipping 17 matching lines...) Expand all
815 877
816 TouchEvent::TouchEvent(EventType type, 878 TouchEvent::TouchEvent(EventType type,
817 const gfx::Point& location, 879 const gfx::Point& location,
818 int touch_id, 880 int touch_id,
819 base::TimeTicks time_stamp) 881 base::TimeTicks time_stamp)
820 : LocatedEvent(type, 882 : LocatedEvent(type,
821 gfx::PointF(location), 883 gfx::PointF(location),
822 gfx::PointF(location), 884 gfx::PointF(location),
823 time_stamp, 885 time_stamp,
824 0), 886 0),
825 touch_id_(touch_id),
826 unique_event_id_(ui::GetNextTouchEventId()), 887 unique_event_id_(ui::GetNextTouchEventId()),
827 rotation_angle_(0.0f), 888 rotation_angle_(0.0f),
828 may_cause_scrolling_(false), 889 may_cause_scrolling_(false),
829 should_remove_native_touch_id_mapping_(false), 890 should_remove_native_touch_id_mapping_(false),
830 pointer_details_(PointerDetails(EventPointerType::POINTER_TYPE_TOUCH)) { 891 pointer_details_(
892 PointerDetails(EventPointerType::POINTER_TYPE_TOUCH, touch_id)) {
831 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); 893 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
832 } 894 }
833 895
834 TouchEvent::TouchEvent(EventType type, 896 TouchEvent::TouchEvent(EventType type,
835 const gfx::Point& location, 897 const gfx::Point& location,
836 int flags, 898 int flags,
837 int touch_id, 899 int touch_id,
838 base::TimeTicks time_stamp, 900 base::TimeTicks time_stamp,
839 float radius_x, 901 float radius_x,
840 float radius_y, 902 float radius_y,
841 float angle, 903 float angle,
842 float force) 904 float force)
843 : LocatedEvent(type, 905 : LocatedEvent(type,
844 gfx::PointF(location), 906 gfx::PointF(location),
845 gfx::PointF(location), 907 gfx::PointF(location),
846 time_stamp, 908 time_stamp,
847 flags), 909 flags),
848 touch_id_(touch_id),
849 unique_event_id_(ui::GetNextTouchEventId()), 910 unique_event_id_(ui::GetNextTouchEventId()),
850 rotation_angle_(angle), 911 rotation_angle_(angle),
851 may_cause_scrolling_(false), 912 may_cause_scrolling_(false),
852 should_remove_native_touch_id_mapping_(false), 913 should_remove_native_touch_id_mapping_(false),
853 pointer_details_(PointerDetails(EventPointerType::POINTER_TYPE_TOUCH, 914 pointer_details_(PointerDetails(EventPointerType::POINTER_TYPE_TOUCH,
854 radius_x, 915 radius_x,
855 radius_y, 916 radius_y,
856 force, 917 force,
857 /* tilt_x */ 0.0f, 918 /* tilt_x */ 0.0f,
858 /* tilt_y */ 0.0f)) { 919 /* tilt_y */ 0.0f,
920 /* tangential_pressure */ 0.0f,
921 /* twist */ 0,
922 touch_id)) {
859 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0); 923 latency()->AddLatencyNumber(INPUT_EVENT_LATENCY_UI_COMPONENT, 0, 0);
860 FixRotationAngle(); 924 FixRotationAngle();
861 } 925 }
862 926
863 TouchEvent::TouchEvent(const TouchEvent& copy) 927 TouchEvent::TouchEvent(const TouchEvent& copy)
864 : LocatedEvent(copy), 928 : LocatedEvent(copy),
865 touch_id_(copy.touch_id_),
866 unique_event_id_(copy.unique_event_id_), 929 unique_event_id_(copy.unique_event_id_),
867 rotation_angle_(copy.rotation_angle_), 930 rotation_angle_(copy.rotation_angle_),
868 may_cause_scrolling_(copy.may_cause_scrolling_), 931 may_cause_scrolling_(copy.may_cause_scrolling_),
869 should_remove_native_touch_id_mapping_(false), 932 should_remove_native_touch_id_mapping_(false),
870 pointer_details_(copy.pointer_details_) { 933 pointer_details_(copy.pointer_details_) {
871 // Copied events should not remove touch id mapping, as this either causes the 934 // Copied events should not remove touch id mapping, as this either causes the
872 // mapping to be lost before the initial event has finished dispatching, or 935 // mapping to be lost before the initial event has finished dispatching, or
873 // the copy to attempt to remove the mapping from a null |native_event_|. 936 // the copy to attempt to remove the mapping from a null |native_event_|.
874 } 937 }
875 938
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 case ET_TOUCH_RELEASED: 990 case ET_TOUCH_RELEASED:
928 case ET_TOUCH_CANCELLED: 991 case ET_TOUCH_CANCELLED:
929 return true; 992 return true;
930 default: 993 default:
931 return false; 994 return false;
932 } 995 }
933 } 996 }
934 997
935 PointerEvent::PointerEvent(const PointerEvent& pointer_event) 998 PointerEvent::PointerEvent(const PointerEvent& pointer_event)
936 : LocatedEvent(pointer_event), 999 : LocatedEvent(pointer_event),
937 pointer_id_(pointer_event.pointer_id()),
938 changed_button_flags_(pointer_event.changed_button_flags()), 1000 changed_button_flags_(pointer_event.changed_button_flags()),
939 details_(pointer_event.pointer_details()) { 1001 details_(pointer_event.pointer_details()) {
940 if (details_.pointer_type == EventPointerType::POINTER_TYPE_TOUCH) 1002 if (details_.pointer_type == EventPointerType::POINTER_TYPE_TOUCH)
941 latency()->set_source_event_type(ui::SourceEventType::TOUCH); 1003 latency()->set_source_event_type(ui::SourceEventType::TOUCH);
942 else if (pointer_event.type() == ET_POINTER_WHEEL_CHANGED) 1004 else if (pointer_event.type() == ET_POINTER_WHEEL_CHANGED)
943 latency()->set_source_event_type(ui::SourceEventType::WHEEL); 1005 latency()->set_source_event_type(ui::SourceEventType::WHEEL);
944 else 1006 else
945 latency()->set_source_event_type(ui::SourceEventType::OTHER); 1007 latency()->set_source_event_type(ui::SourceEventType::OTHER);
946 } 1008 }
947 1009
948 PointerEvent::PointerEvent(const MouseEvent& mouse_event) 1010 PointerEvent::PointerEvent(const MouseEvent& mouse_event)
949 : LocatedEvent(mouse_event), 1011 : LocatedEvent(mouse_event),
950 pointer_id_(kMousePointerId),
951 changed_button_flags_(mouse_event.changed_button_flags()), 1012 changed_button_flags_(mouse_event.changed_button_flags()),
952 details_(mouse_event.pointer_details()) { 1013 details_(mouse_event.pointer_details()) {
953 DCHECK(CanConvertFrom(mouse_event)); 1014 DCHECK(CanConvertFrom(mouse_event));
954 switch (mouse_event.type()) { 1015 switch (mouse_event.type()) {
955 case ET_MOUSE_PRESSED: 1016 case ET_MOUSE_PRESSED:
956 SetType(ET_POINTER_DOWN); 1017 SetType(ET_POINTER_DOWN);
957 latency()->set_source_event_type(ui::SourceEventType::OTHER); 1018 latency()->set_source_event_type(ui::SourceEventType::OTHER);
958 break; 1019 break;
959 1020
960 case ET_MOUSE_DRAGGED: 1021 case ET_MOUSE_DRAGGED:
(...skipping 13 matching lines...) Expand all
974 break; 1035 break;
975 1036
976 case ET_MOUSE_RELEASED: 1037 case ET_MOUSE_RELEASED:
977 SetType(ET_POINTER_UP); 1038 SetType(ET_POINTER_UP);
978 latency()->set_source_event_type(ui::SourceEventType::OTHER); 1039 latency()->set_source_event_type(ui::SourceEventType::OTHER);
979 break; 1040 break;
980 1041
981 case ET_MOUSEWHEEL: 1042 case ET_MOUSEWHEEL:
982 SetType(ET_POINTER_WHEEL_CHANGED); 1043 SetType(ET_POINTER_WHEEL_CHANGED);
983 details_ = PointerDetails(EventPointerType::POINTER_TYPE_MOUSE, 1044 details_ = PointerDetails(EventPointerType::POINTER_TYPE_MOUSE,
984 mouse_event.AsMouseWheelEvent()->offset()); 1045 mouse_event.AsMouseWheelEvent()->offset(),
1046 mouse_event.pointer_details().id);
985 latency()->set_source_event_type(ui::SourceEventType::WHEEL); 1047 latency()->set_source_event_type(ui::SourceEventType::WHEEL);
986 break; 1048 break;
987 1049
988 case ET_MOUSE_CAPTURE_CHANGED: 1050 case ET_MOUSE_CAPTURE_CHANGED:
989 SetType(ET_POINTER_CAPTURE_CHANGED); 1051 SetType(ET_POINTER_CAPTURE_CHANGED);
990 break; 1052 break;
991 1053
992 default: 1054 default:
993 NOTREACHED(); 1055 NOTREACHED();
994 } 1056 }
995 } 1057 }
996 1058
997 PointerEvent::PointerEvent(const TouchEvent& touch_event) 1059 PointerEvent::PointerEvent(const TouchEvent& touch_event)
998 : LocatedEvent(touch_event), 1060 : LocatedEvent(touch_event),
999 pointer_id_(touch_event.touch_id()),
1000 changed_button_flags_(0), 1061 changed_button_flags_(0),
1001 details_(touch_event.pointer_details()) { 1062 details_(touch_event.pointer_details()) {
1002 DCHECK(CanConvertFrom(touch_event)); 1063 DCHECK(CanConvertFrom(touch_event));
1003 switch (touch_event.type()) { 1064 switch (touch_event.type()) {
1004 case ET_TOUCH_PRESSED: 1065 case ET_TOUCH_PRESSED:
1005 SetType(ET_POINTER_DOWN); 1066 SetType(ET_POINTER_DOWN);
1006 break; 1067 break;
1007 1068
1008 case ET_TOUCH_MOVED: 1069 case ET_TOUCH_MOVED:
1009 SetType(ET_POINTER_MOVED); 1070 SetType(ET_POINTER_MOVED);
(...skipping 19 matching lines...) Expand all
1029 int flags, 1090 int flags,
1030 int pointer_id, 1091 int pointer_id,
1031 int changed_button_flags, 1092 int changed_button_flags,
1032 const PointerDetails& pointer_details, 1093 const PointerDetails& pointer_details,
1033 base::TimeTicks time_stamp) 1094 base::TimeTicks time_stamp)
1034 : LocatedEvent(type, 1095 : LocatedEvent(type,
1035 gfx::PointF(location), 1096 gfx::PointF(location),
1036 gfx::PointF(root_location), 1097 gfx::PointF(root_location),
1037 time_stamp, 1098 time_stamp,
1038 flags), 1099 flags),
1039 pointer_id_(pointer_id),
1040 changed_button_flags_(changed_button_flags), 1100 changed_button_flags_(changed_button_flags),
1041 details_(pointer_details) { 1101 details_(pointer_details) {
1102 details_.id = pointer_id;
1042 if (details_.pointer_type == EventPointerType::POINTER_TYPE_TOUCH) 1103 if (details_.pointer_type == EventPointerType::POINTER_TYPE_TOUCH)
1043 latency()->set_source_event_type(ui::SourceEventType::TOUCH); 1104 latency()->set_source_event_type(ui::SourceEventType::TOUCH);
1044 else if (type == ET_POINTER_WHEEL_CHANGED) 1105 else if (type == ET_POINTER_WHEEL_CHANGED)
1045 latency()->set_source_event_type(ui::SourceEventType::WHEEL); 1106 latency()->set_source_event_type(ui::SourceEventType::WHEEL);
1046 else 1107 else
1047 latency()->set_source_event_type(ui::SourceEventType::OTHER); 1108 latency()->set_source_event_type(ui::SourceEventType::OTHER);
1048 } 1109 }
1049 1110
1050 const int PointerEvent::kMousePointerId = std::numeric_limits<int32_t>::max(); 1111 const int PointerEvent::kMousePointerId = std::numeric_limits<int32_t>::max();
1051 1112
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
1390 flags | EF_FROM_TOUCH), 1451 flags | EF_FROM_TOUCH),
1391 details_(details), 1452 details_(details),
1392 unique_touch_event_id_(unique_touch_event_id) { 1453 unique_touch_event_id_(unique_touch_event_id) {
1393 latency()->set_source_event_type(ui::SourceEventType::TOUCH); 1454 latency()->set_source_event_type(ui::SourceEventType::TOUCH);
1394 } 1455 }
1395 1456
1396 GestureEvent::~GestureEvent() { 1457 GestureEvent::~GestureEvent() {
1397 } 1458 }
1398 1459
1399 } // namespace ui 1460 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698