react-native-gesture-handler 2.19.0 → 2.20.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. package/android/build.gradle +7 -12
  2. package/android/paper/src/main/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +1 -1
  3. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +1 -0
  4. package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +11 -0
  5. package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +8 -0
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/StylusData.kt +103 -0
  7. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +24 -15
  8. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +7 -0
  9. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +7 -0
  10. package/android/src/main/jni/CMakeLists.txt +18 -9
  11. package/apple/Handlers/RNLongPressHandler.m +2 -0
  12. package/apple/Handlers/RNPanHandler.m +57 -7
  13. package/apple/Handlers/RNRotationHandler.m +1 -1
  14. package/apple/RNGHStylusData.h +77 -0
  15. package/apple/RNGHStylusData.m +37 -0
  16. package/apple/RNGestureHandlerButtonComponentView.mm +35 -0
  17. package/apple/RNGestureHandlerEvents.h +3 -1
  18. package/apple/RNGestureHandlerEvents.m +11 -3
  19. package/lib/commonjs/components/GestureButtons.js +5 -1
  20. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  21. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  22. package/lib/commonjs/components/Pressable/Pressable.js +5 -14
  23. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
  24. package/lib/commonjs/components/Pressable/utils.js +1 -23
  25. package/lib/commonjs/components/Pressable/utils.js.map +1 -1
  26. package/lib/commonjs/handlers/GestureHandlerEventPayload.js +4 -0
  27. package/lib/commonjs/handlers/createHandler.js +2 -1
  28. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  29. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  30. package/lib/commonjs/handlers/gestures/hoverGesture.js.map +1 -1
  31. package/lib/commonjs/jestUtils/jestUtils.js +12 -4
  32. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
  33. package/lib/commonjs/web/handlers/GestureHandler.js +1 -3
  34. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  35. package/lib/commonjs/web/handlers/HoverGestureHandler.js +18 -1
  36. package/lib/commonjs/web/handlers/HoverGestureHandler.js.map +1 -1
  37. package/lib/commonjs/web/handlers/PanGestureHandler.js +8 -1
  38. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  39. package/lib/commonjs/web/interfaces.js.map +1 -1
  40. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  41. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +0 -3
  42. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  43. package/lib/commonjs/web/tools/PointerEventManager.js +3 -37
  44. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  45. package/lib/commonjs/web/utils.js +173 -0
  46. package/lib/commonjs/web/utils.js.map +1 -1
  47. package/lib/module/components/GestureButtons.js +5 -1
  48. package/lib/module/components/GestureButtons.js.map +1 -1
  49. package/lib/module/components/GestureComponents.js.map +1 -1
  50. package/lib/module/components/Pressable/Pressable.js +7 -14
  51. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  52. package/lib/module/components/Pressable/utils.js +1 -22
  53. package/lib/module/components/Pressable/utils.js.map +1 -1
  54. package/lib/module/handlers/GestureHandlerEventPayload.js +1 -1
  55. package/lib/module/handlers/createHandler.js +2 -1
  56. package/lib/module/handlers/createHandler.js.map +1 -1
  57. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  58. package/lib/module/handlers/gestures/hoverGesture.js.map +1 -1
  59. package/lib/module/jestUtils/jestUtils.js +12 -4
  60. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  61. package/lib/module/web/handlers/GestureHandler.js +1 -3
  62. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  63. package/lib/module/web/handlers/HoverGestureHandler.js +18 -1
  64. package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -1
  65. package/lib/module/web/handlers/PanGestureHandler.js +8 -1
  66. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  67. package/lib/module/web/interfaces.js.map +1 -1
  68. package/lib/module/web/tools/EventManager.js.map +1 -1
  69. package/lib/module/web/tools/GestureHandlerWebDelegate.js +0 -2
  70. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  71. package/lib/module/web/tools/PointerEventManager.js +4 -38
  72. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  73. package/lib/module/web/utils.js +170 -0
  74. package/lib/module/web/utils.js.map +1 -1
  75. package/lib/typescript/components/GestureComponents.d.ts +1 -1
  76. package/lib/typescript/components/Pressable/utils.d.ts +3 -5
  77. package/lib/typescript/handlers/GestureHandlerEventPayload.d.ts +35 -0
  78. package/lib/typescript/handlers/gestures/gesture.d.ts +2 -2
  79. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +1 -6
  80. package/lib/typescript/handlers/handlersRegistry.d.ts +1 -1
  81. package/lib/typescript/jestUtils/jestUtils.d.ts +1 -1
  82. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +2 -0
  83. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +3 -1
  84. package/lib/typescript/web/interfaces.d.ts +8 -3
  85. package/lib/typescript/web/tools/EventManager.d.ts +2 -2
  86. package/lib/typescript/web/utils.d.ts +2 -1
  87. package/package.json +1 -1
  88. package/src/components/GestureButtons.tsx +2 -1
  89. package/src/components/GestureComponents.tsx +1 -1
  90. package/src/components/Pressable/Pressable.tsx +16 -29
  91. package/src/components/Pressable/utils.ts +5 -49
  92. package/src/handlers/GestureHandlerEventPayload.ts +42 -0
  93. package/src/handlers/createHandler.tsx +1 -0
  94. package/src/handlers/gestures/gesture.ts +3 -1
  95. package/src/handlers/gestures/hoverGesture.ts +1 -7
  96. package/src/jestUtils/jestUtils.ts +9 -1
  97. package/src/web/handlers/GestureHandler.ts +1 -1
  98. package/src/web/handlers/HoverGestureHandler.ts +16 -2
  99. package/src/web/handlers/PanGestureHandler.ts +10 -1
  100. package/src/web/interfaces.ts +9 -3
  101. package/src/web/tools/EventManager.ts +2 -4
  102. package/src/web/tools/GestureHandlerWebDelegate.ts +0 -2
  103. package/src/web/tools/PointerEventManager.ts +2 -38
  104. package/src/web/utils.ts +174 -1
  105. package/lib/commonjs/web/tools/TouchEventManager.js +0 -164
  106. package/lib/commonjs/web/tools/TouchEventManager.js.map +0 -1
  107. package/lib/module/web/tools/TouchEventManager.js +0 -149
  108. package/lib/module/web/tools/TouchEventManager.js.map +0 -1
  109. package/lib/typescript/web/tools/TouchEventManager.d.ts +0 -11
  110. package/src/web/tools/TouchEventManager.ts +0 -175
@@ -1,164 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.default = void 0;
7
-
8
- var _interfaces = require("../interfaces");
9
-
10
- var _EventManager = _interopRequireDefault(require("./EventManager"));
11
-
12
- var _utils = require("../utils");
13
-
14
- var _PointerType = require("../../PointerType");
15
-
16
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
-
20
- class TouchEventManager extends _EventManager.default {
21
- constructor(...args) {
22
- super(...args);
23
-
24
- _defineProperty(this, "touchStartCallback", event => {
25
- for (let i = 0; i < event.changedTouches.length; ++i) {
26
- const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.DOWN, i, _interfaces.TouchEventType.DOWN); // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents
27
- // If we leave stylus to send touch events, handlers will receive every action twice
28
-
29
- if (!(0, _utils.isPointerInBounds)(this.view, {
30
- x: adaptedEvent.x,
31
- y: adaptedEvent.y
32
- }) || // @ts-ignore touchType field does exist
33
- event.changedTouches[i].touchType === 'stylus') {
34
- continue;
35
- }
36
-
37
- this.markAsInBounds(adaptedEvent.pointerId);
38
-
39
- if (++this.activePointersCounter > 1) {
40
- adaptedEvent.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_DOWN;
41
- this.onPointerAdd(adaptedEvent);
42
- } else {
43
- this.onPointerDown(adaptedEvent);
44
- }
45
- }
46
- });
47
-
48
- _defineProperty(this, "touchMoveCallback", event => {
49
- for (let i = 0; i < event.changedTouches.length; ++i) {
50
- const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.MOVE, i, _interfaces.TouchEventType.MOVE); // @ts-ignore touchType field does exist
51
-
52
- if (event.changedTouches[i].touchType === 'stylus') {
53
- continue;
54
- }
55
-
56
- const inBounds = (0, _utils.isPointerInBounds)(this.view, {
57
- x: adaptedEvent.x,
58
- y: adaptedEvent.y
59
- });
60
- const pointerIndex = this.pointersInBounds.indexOf(adaptedEvent.pointerId);
61
-
62
- if (inBounds) {
63
- if (pointerIndex < 0) {
64
- adaptedEvent.eventType = _interfaces.EventTypes.ENTER;
65
- this.onPointerEnter(adaptedEvent);
66
- this.markAsInBounds(adaptedEvent.pointerId);
67
- } else {
68
- this.onPointerMove(adaptedEvent);
69
- }
70
- } else {
71
- if (pointerIndex >= 0) {
72
- adaptedEvent.eventType = _interfaces.EventTypes.LEAVE;
73
- this.onPointerLeave(adaptedEvent);
74
- this.markAsOutOfBounds(adaptedEvent.pointerId);
75
- } else {
76
- this.onPointerOutOfBounds(adaptedEvent);
77
- }
78
- }
79
- }
80
- });
81
-
82
- _defineProperty(this, "touchEndCallback", event => {
83
- for (let i = 0; i < event.changedTouches.length; ++i) {
84
- // When we call reset on gesture handlers, it also resets their event managers
85
- // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
86
- // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view
87
- // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly
88
- if (this.activePointersCounter === 0) {
89
- break;
90
- } // @ts-ignore touchType field does exist
91
-
92
-
93
- if (event.changedTouches[i].touchType === 'stylus') {
94
- continue;
95
- }
96
-
97
- const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.UP, i, _interfaces.TouchEventType.UP);
98
- this.markAsOutOfBounds(adaptedEvent.pointerId);
99
-
100
- if (--this.activePointersCounter > 0) {
101
- adaptedEvent.eventType = _interfaces.EventTypes.ADDITIONAL_POINTER_UP;
102
- this.onPointerRemove(adaptedEvent);
103
- } else {
104
- this.onPointerUp(adaptedEvent);
105
- }
106
- }
107
- });
108
-
109
- _defineProperty(this, "touchCancelCallback", event => {
110
- for (let i = 0; i < event.changedTouches.length; ++i) {
111
- const adaptedEvent = this.mapEvent(event, _interfaces.EventTypes.CANCEL, i, _interfaces.TouchEventType.CANCELLED); // @ts-ignore touchType field does exist
112
-
113
- if (event.changedTouches[i].touchType === 'stylus') {
114
- continue;
115
- }
116
-
117
- this.onPointerCancel(adaptedEvent);
118
- this.markAsOutOfBounds(adaptedEvent.pointerId);
119
- this.activePointersCounter = 0;
120
- }
121
- });
122
- }
123
-
124
- registerListeners() {
125
- this.view.addEventListener('touchstart', this.touchStartCallback);
126
- this.view.addEventListener('touchmove', this.touchMoveCallback);
127
- this.view.addEventListener('touchend', this.touchEndCallback);
128
- this.view.addEventListener('touchcancel', this.touchCancelCallback);
129
- }
130
-
131
- unregisterListeners() {
132
- this.view.removeEventListener('touchstart', this.touchStartCallback);
133
- this.view.removeEventListener('touchmove', this.touchMoveCallback);
134
- this.view.removeEventListener('touchend', this.touchEndCallback);
135
- this.view.removeEventListener('touchcancel', this.touchCancelCallback);
136
- }
137
-
138
- mapEvent(event, eventType, index, touchEventType) {
139
- const rect = this.view.getBoundingClientRect();
140
- const clientX = event.changedTouches[index].clientX;
141
- const clientY = event.changedTouches[index].clientY;
142
- const {
143
- scaleX,
144
- scaleY
145
- } = (0, _utils.calculateViewScale)(this.view);
146
- return {
147
- x: clientX,
148
- y: clientY,
149
- offsetX: (clientX - rect.left) / scaleX,
150
- offsetY: (clientY - rect.top) / scaleY,
151
- pointerId: event.changedTouches[index].identifier,
152
- eventType: eventType,
153
- pointerType: _PointerType.PointerType.TOUCH,
154
- time: event.timeStamp,
155
- allTouches: event.touches,
156
- changedTouches: event.changedTouches,
157
- touchEventType: touchEventType
158
- };
159
- }
160
-
161
- }
162
-
163
- exports.default = TouchEventManager;
164
- //# sourceMappingURL=TouchEventManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["TouchEventManager.ts"],"names":["TouchEventManager","EventManager","event","i","changedTouches","length","adaptedEvent","mapEvent","EventTypes","DOWN","TouchEventType","view","x","y","touchType","markAsInBounds","pointerId","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","MOVE","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","markAsOutOfBounds","onPointerOutOfBounds","UP","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","CANCEL","CANCELLED","onPointerCancel","registerListeners","addEventListener","touchStartCallback","touchMoveCallback","touchEndCallback","touchCancelCallback","unregisterListeners","removeEventListener","index","touchEventType","rect","getBoundingClientRect","clientX","clientY","scaleX","scaleY","offsetX","left","offsetY","top","identifier","pointerType","PointerType","TOUCH","time","timeStamp","allTouches","touches"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { calculateViewScale, isPointerInBounds } from '../utils';\nimport { PointerType } from '../../PointerType';\n\nexport default class TouchEventManager extends EventManager<HTMLElement> {\n private touchStartCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.DOWN,\n i,\n TouchEventType.DOWN\n );\n\n // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents\n // If we leave stylus to send touch events, handlers will receive every action twice\n if (\n !isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n }) ||\n // @ts-ignore touchType field does exist\n event.changedTouches[i].touchType === 'stylus'\n ) {\n continue;\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n }\n };\n\n private touchMoveCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.MOVE,\n i,\n TouchEventType.MOVE\n );\n // @ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n }\n };\n\n private touchEndCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n break;\n }\n\n // @ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.UP,\n i,\n TouchEventType.UP\n );\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n }\n };\n\n private touchCancelCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL,\n i,\n TouchEventType.CANCELLED\n );\n\n // @ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n }\n };\n\n public registerListeners(): void {\n this.view.addEventListener('touchstart', this.touchStartCallback);\n this.view.addEventListener('touchmove', this.touchMoveCallback);\n this.view.addEventListener('touchend', this.touchEndCallback);\n this.view.addEventListener('touchcancel', this.touchCancelCallback);\n }\n\n public unregisterListeners(): void {\n this.view.removeEventListener('touchstart', this.touchStartCallback);\n this.view.removeEventListener('touchmove', this.touchMoveCallback);\n this.view.removeEventListener('touchend', this.touchEndCallback);\n this.view.removeEventListener('touchcancel', this.touchCancelCallback);\n }\n\n protected mapEvent(\n event: TouchEvent,\n eventType: EventTypes,\n index: number,\n touchEventType: TouchEventType\n ): AdaptedEvent {\n const rect = this.view.getBoundingClientRect();\n const clientX = event.changedTouches[index].clientX;\n const clientY = event.changedTouches[index].clientY;\n\n const { scaleX, scaleY } = calculateViewScale(this.view);\n\n return {\n x: clientX,\n y: clientY,\n offsetX: (clientX - rect.left) / scaleX,\n offsetY: (clientY - rect.top) / scaleY,\n pointerId: event.changedTouches[index].identifier,\n eventType: eventType,\n pointerType: PointerType.TOUCH,\n time: event.timeStamp,\n allTouches: event.touches,\n changedTouches: event.changedTouches,\n touchEventType: touchEventType,\n };\n }\n}\n"]}
@@ -1,149 +0,0 @@
1
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
- import { EventTypes, TouchEventType } from '../interfaces';
4
- import EventManager from './EventManager';
5
- import { calculateViewScale, isPointerInBounds } from '../utils';
6
- import { PointerType } from '../../PointerType';
7
- export default class TouchEventManager extends EventManager {
8
- constructor(...args) {
9
- super(...args);
10
-
11
- _defineProperty(this, "touchStartCallback", event => {
12
- for (let i = 0; i < event.changedTouches.length; ++i) {
13
- const adaptedEvent = this.mapEvent(event, EventTypes.DOWN, i, TouchEventType.DOWN); // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents
14
- // If we leave stylus to send touch events, handlers will receive every action twice
15
-
16
- if (!isPointerInBounds(this.view, {
17
- x: adaptedEvent.x,
18
- y: adaptedEvent.y
19
- }) || // @ts-ignore touchType field does exist
20
- event.changedTouches[i].touchType === 'stylus') {
21
- continue;
22
- }
23
-
24
- this.markAsInBounds(adaptedEvent.pointerId);
25
-
26
- if (++this.activePointersCounter > 1) {
27
- adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
28
- this.onPointerAdd(adaptedEvent);
29
- } else {
30
- this.onPointerDown(adaptedEvent);
31
- }
32
- }
33
- });
34
-
35
- _defineProperty(this, "touchMoveCallback", event => {
36
- for (let i = 0; i < event.changedTouches.length; ++i) {
37
- const adaptedEvent = this.mapEvent(event, EventTypes.MOVE, i, TouchEventType.MOVE); // @ts-ignore touchType field does exist
38
-
39
- if (event.changedTouches[i].touchType === 'stylus') {
40
- continue;
41
- }
42
-
43
- const inBounds = isPointerInBounds(this.view, {
44
- x: adaptedEvent.x,
45
- y: adaptedEvent.y
46
- });
47
- const pointerIndex = this.pointersInBounds.indexOf(adaptedEvent.pointerId);
48
-
49
- if (inBounds) {
50
- if (pointerIndex < 0) {
51
- adaptedEvent.eventType = EventTypes.ENTER;
52
- this.onPointerEnter(adaptedEvent);
53
- this.markAsInBounds(adaptedEvent.pointerId);
54
- } else {
55
- this.onPointerMove(adaptedEvent);
56
- }
57
- } else {
58
- if (pointerIndex >= 0) {
59
- adaptedEvent.eventType = EventTypes.LEAVE;
60
- this.onPointerLeave(adaptedEvent);
61
- this.markAsOutOfBounds(adaptedEvent.pointerId);
62
- } else {
63
- this.onPointerOutOfBounds(adaptedEvent);
64
- }
65
- }
66
- }
67
- });
68
-
69
- _defineProperty(this, "touchEndCallback", event => {
70
- for (let i = 0; i < event.changedTouches.length; ++i) {
71
- // When we call reset on gesture handlers, it also resets their event managers
72
- // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
73
- // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view
74
- // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly
75
- if (this.activePointersCounter === 0) {
76
- break;
77
- } // @ts-ignore touchType field does exist
78
-
79
-
80
- if (event.changedTouches[i].touchType === 'stylus') {
81
- continue;
82
- }
83
-
84
- const adaptedEvent = this.mapEvent(event, EventTypes.UP, i, TouchEventType.UP);
85
- this.markAsOutOfBounds(adaptedEvent.pointerId);
86
-
87
- if (--this.activePointersCounter > 0) {
88
- adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;
89
- this.onPointerRemove(adaptedEvent);
90
- } else {
91
- this.onPointerUp(adaptedEvent);
92
- }
93
- }
94
- });
95
-
96
- _defineProperty(this, "touchCancelCallback", event => {
97
- for (let i = 0; i < event.changedTouches.length; ++i) {
98
- const adaptedEvent = this.mapEvent(event, EventTypes.CANCEL, i, TouchEventType.CANCELLED); // @ts-ignore touchType field does exist
99
-
100
- if (event.changedTouches[i].touchType === 'stylus') {
101
- continue;
102
- }
103
-
104
- this.onPointerCancel(adaptedEvent);
105
- this.markAsOutOfBounds(adaptedEvent.pointerId);
106
- this.activePointersCounter = 0;
107
- }
108
- });
109
- }
110
-
111
- registerListeners() {
112
- this.view.addEventListener('touchstart', this.touchStartCallback);
113
- this.view.addEventListener('touchmove', this.touchMoveCallback);
114
- this.view.addEventListener('touchend', this.touchEndCallback);
115
- this.view.addEventListener('touchcancel', this.touchCancelCallback);
116
- }
117
-
118
- unregisterListeners() {
119
- this.view.removeEventListener('touchstart', this.touchStartCallback);
120
- this.view.removeEventListener('touchmove', this.touchMoveCallback);
121
- this.view.removeEventListener('touchend', this.touchEndCallback);
122
- this.view.removeEventListener('touchcancel', this.touchCancelCallback);
123
- }
124
-
125
- mapEvent(event, eventType, index, touchEventType) {
126
- const rect = this.view.getBoundingClientRect();
127
- const clientX = event.changedTouches[index].clientX;
128
- const clientY = event.changedTouches[index].clientY;
129
- const {
130
- scaleX,
131
- scaleY
132
- } = calculateViewScale(this.view);
133
- return {
134
- x: clientX,
135
- y: clientY,
136
- offsetX: (clientX - rect.left) / scaleX,
137
- offsetY: (clientY - rect.top) / scaleY,
138
- pointerId: event.changedTouches[index].identifier,
139
- eventType: eventType,
140
- pointerType: PointerType.TOUCH,
141
- time: event.timeStamp,
142
- allTouches: event.touches,
143
- changedTouches: event.changedTouches,
144
- touchEventType: touchEventType
145
- };
146
- }
147
-
148
- }
149
- //# sourceMappingURL=TouchEventManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["TouchEventManager.ts"],"names":["EventTypes","TouchEventType","EventManager","calculateViewScale","isPointerInBounds","PointerType","TouchEventManager","event","i","changedTouches","length","adaptedEvent","mapEvent","DOWN","view","x","y","touchType","markAsInBounds","pointerId","activePointersCounter","eventType","ADDITIONAL_POINTER_DOWN","onPointerAdd","onPointerDown","MOVE","inBounds","pointerIndex","pointersInBounds","indexOf","ENTER","onPointerEnter","onPointerMove","LEAVE","onPointerLeave","markAsOutOfBounds","onPointerOutOfBounds","UP","ADDITIONAL_POINTER_UP","onPointerRemove","onPointerUp","CANCEL","CANCELLED","onPointerCancel","registerListeners","addEventListener","touchStartCallback","touchMoveCallback","touchEndCallback","touchCancelCallback","unregisterListeners","removeEventListener","index","touchEventType","rect","getBoundingClientRect","clientX","clientY","scaleX","scaleY","offsetX","left","offsetY","top","identifier","pointerType","TOUCH","time","timeStamp","allTouches","touches"],"mappings":"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","sourcesContent":["import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';\nimport EventManager from './EventManager';\nimport { calculateViewScale, isPointerInBounds } from '../utils';\nimport { PointerType } from '../../PointerType';\n\nexport default class TouchEventManager extends EventManager<HTMLElement> {\n private touchStartCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.DOWN,\n i,\n TouchEventType.DOWN\n );\n\n // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents\n // If we leave stylus to send touch events, handlers will receive every action twice\n if (\n !isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n }) ||\n // @ts-ignore touchType field does exist\n event.changedTouches[i].touchType === 'stylus'\n ) {\n continue;\n }\n\n this.markAsInBounds(adaptedEvent.pointerId);\n\n if (++this.activePointersCounter > 1) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;\n this.onPointerAdd(adaptedEvent);\n } else {\n this.onPointerDown(adaptedEvent);\n }\n }\n };\n\n private touchMoveCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.MOVE,\n i,\n TouchEventType.MOVE\n );\n // @ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const inBounds: boolean = isPointerInBounds(this.view, {\n x: adaptedEvent.x,\n y: adaptedEvent.y,\n });\n\n const pointerIndex: number = this.pointersInBounds.indexOf(\n adaptedEvent.pointerId\n );\n\n if (inBounds) {\n if (pointerIndex < 0) {\n adaptedEvent.eventType = EventTypes.ENTER;\n this.onPointerEnter(adaptedEvent);\n this.markAsInBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerMove(adaptedEvent);\n }\n } else {\n if (pointerIndex >= 0) {\n adaptedEvent.eventType = EventTypes.LEAVE;\n this.onPointerLeave(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n } else {\n this.onPointerOutOfBounds(adaptedEvent);\n }\n }\n }\n };\n\n private touchEndCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n // When we call reset on gesture handlers, it also resets their event managers\n // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view\n // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view\n // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly\n if (this.activePointersCounter === 0) {\n break;\n }\n\n // @ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.UP,\n i,\n TouchEventType.UP\n );\n\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n\n if (--this.activePointersCounter > 0) {\n adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;\n this.onPointerRemove(adaptedEvent);\n } else {\n this.onPointerUp(adaptedEvent);\n }\n }\n };\n\n private touchCancelCallback = (event: TouchEvent): void => {\n for (let i = 0; i < event.changedTouches.length; ++i) {\n const adaptedEvent: AdaptedEvent = this.mapEvent(\n event,\n EventTypes.CANCEL,\n i,\n TouchEventType.CANCELLED\n );\n\n // @ts-ignore touchType field does exist\n if (event.changedTouches[i].touchType === 'stylus') {\n continue;\n }\n\n this.onPointerCancel(adaptedEvent);\n this.markAsOutOfBounds(adaptedEvent.pointerId);\n this.activePointersCounter = 0;\n }\n };\n\n public registerListeners(): void {\n this.view.addEventListener('touchstart', this.touchStartCallback);\n this.view.addEventListener('touchmove', this.touchMoveCallback);\n this.view.addEventListener('touchend', this.touchEndCallback);\n this.view.addEventListener('touchcancel', this.touchCancelCallback);\n }\n\n public unregisterListeners(): void {\n this.view.removeEventListener('touchstart', this.touchStartCallback);\n this.view.removeEventListener('touchmove', this.touchMoveCallback);\n this.view.removeEventListener('touchend', this.touchEndCallback);\n this.view.removeEventListener('touchcancel', this.touchCancelCallback);\n }\n\n protected mapEvent(\n event: TouchEvent,\n eventType: EventTypes,\n index: number,\n touchEventType: TouchEventType\n ): AdaptedEvent {\n const rect = this.view.getBoundingClientRect();\n const clientX = event.changedTouches[index].clientX;\n const clientY = event.changedTouches[index].clientY;\n\n const { scaleX, scaleY } = calculateViewScale(this.view);\n\n return {\n x: clientX,\n y: clientY,\n offsetX: (clientX - rect.left) / scaleX,\n offsetY: (clientY - rect.top) / scaleY,\n pointerId: event.changedTouches[index].identifier,\n eventType: eventType,\n pointerType: PointerType.TOUCH,\n time: event.timeStamp,\n allTouches: event.touches,\n changedTouches: event.changedTouches,\n touchEventType: touchEventType,\n };\n }\n}\n"]}
@@ -1,11 +0,0 @@
1
- import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
2
- import EventManager from './EventManager';
3
- export default class TouchEventManager extends EventManager<HTMLElement> {
4
- private touchStartCallback;
5
- private touchMoveCallback;
6
- private touchEndCallback;
7
- private touchCancelCallback;
8
- registerListeners(): void;
9
- unregisterListeners(): void;
10
- protected mapEvent(event: TouchEvent, eventType: EventTypes, index: number, touchEventType: TouchEventType): AdaptedEvent;
11
- }
@@ -1,175 +0,0 @@
1
- import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
2
- import EventManager from './EventManager';
3
- import { calculateViewScale, isPointerInBounds } from '../utils';
4
- import { PointerType } from '../../PointerType';
5
-
6
- export default class TouchEventManager extends EventManager<HTMLElement> {
7
- private touchStartCallback = (event: TouchEvent): void => {
8
- for (let i = 0; i < event.changedTouches.length; ++i) {
9
- const adaptedEvent: AdaptedEvent = this.mapEvent(
10
- event,
11
- EventTypes.DOWN,
12
- i,
13
- TouchEventType.DOWN
14
- );
15
-
16
- // Here we skip stylus, because in case of anything different than touch we want to handle it by using PointerEvents
17
- // If we leave stylus to send touch events, handlers will receive every action twice
18
- if (
19
- !isPointerInBounds(this.view, {
20
- x: adaptedEvent.x,
21
- y: adaptedEvent.y,
22
- }) ||
23
- // @ts-ignore touchType field does exist
24
- event.changedTouches[i].touchType === 'stylus'
25
- ) {
26
- continue;
27
- }
28
-
29
- this.markAsInBounds(adaptedEvent.pointerId);
30
-
31
- if (++this.activePointersCounter > 1) {
32
- adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
33
- this.onPointerAdd(adaptedEvent);
34
- } else {
35
- this.onPointerDown(adaptedEvent);
36
- }
37
- }
38
- };
39
-
40
- private touchMoveCallback = (event: TouchEvent): void => {
41
- for (let i = 0; i < event.changedTouches.length; ++i) {
42
- const adaptedEvent: AdaptedEvent = this.mapEvent(
43
- event,
44
- EventTypes.MOVE,
45
- i,
46
- TouchEventType.MOVE
47
- );
48
- // @ts-ignore touchType field does exist
49
- if (event.changedTouches[i].touchType === 'stylus') {
50
- continue;
51
- }
52
-
53
- const inBounds: boolean = isPointerInBounds(this.view, {
54
- x: adaptedEvent.x,
55
- y: adaptedEvent.y,
56
- });
57
-
58
- const pointerIndex: number = this.pointersInBounds.indexOf(
59
- adaptedEvent.pointerId
60
- );
61
-
62
- if (inBounds) {
63
- if (pointerIndex < 0) {
64
- adaptedEvent.eventType = EventTypes.ENTER;
65
- this.onPointerEnter(adaptedEvent);
66
- this.markAsInBounds(adaptedEvent.pointerId);
67
- } else {
68
- this.onPointerMove(adaptedEvent);
69
- }
70
- } else {
71
- if (pointerIndex >= 0) {
72
- adaptedEvent.eventType = EventTypes.LEAVE;
73
- this.onPointerLeave(adaptedEvent);
74
- this.markAsOutOfBounds(adaptedEvent.pointerId);
75
- } else {
76
- this.onPointerOutOfBounds(adaptedEvent);
77
- }
78
- }
79
- }
80
- };
81
-
82
- private touchEndCallback = (event: TouchEvent): void => {
83
- for (let i = 0; i < event.changedTouches.length; ++i) {
84
- // When we call reset on gesture handlers, it also resets their event managers
85
- // In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
86
- // This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view
87
- // Removing them will end in activePointersCounter going below 0, therefore handlers won't behave properly
88
- if (this.activePointersCounter === 0) {
89
- break;
90
- }
91
-
92
- // @ts-ignore touchType field does exist
93
- if (event.changedTouches[i].touchType === 'stylus') {
94
- continue;
95
- }
96
-
97
- const adaptedEvent: AdaptedEvent = this.mapEvent(
98
- event,
99
- EventTypes.UP,
100
- i,
101
- TouchEventType.UP
102
- );
103
-
104
- this.markAsOutOfBounds(adaptedEvent.pointerId);
105
-
106
- if (--this.activePointersCounter > 0) {
107
- adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;
108
- this.onPointerRemove(adaptedEvent);
109
- } else {
110
- this.onPointerUp(adaptedEvent);
111
- }
112
- }
113
- };
114
-
115
- private touchCancelCallback = (event: TouchEvent): void => {
116
- for (let i = 0; i < event.changedTouches.length; ++i) {
117
- const adaptedEvent: AdaptedEvent = this.mapEvent(
118
- event,
119
- EventTypes.CANCEL,
120
- i,
121
- TouchEventType.CANCELLED
122
- );
123
-
124
- // @ts-ignore touchType field does exist
125
- if (event.changedTouches[i].touchType === 'stylus') {
126
- continue;
127
- }
128
-
129
- this.onPointerCancel(adaptedEvent);
130
- this.markAsOutOfBounds(adaptedEvent.pointerId);
131
- this.activePointersCounter = 0;
132
- }
133
- };
134
-
135
- public registerListeners(): void {
136
- this.view.addEventListener('touchstart', this.touchStartCallback);
137
- this.view.addEventListener('touchmove', this.touchMoveCallback);
138
- this.view.addEventListener('touchend', this.touchEndCallback);
139
- this.view.addEventListener('touchcancel', this.touchCancelCallback);
140
- }
141
-
142
- public unregisterListeners(): void {
143
- this.view.removeEventListener('touchstart', this.touchStartCallback);
144
- this.view.removeEventListener('touchmove', this.touchMoveCallback);
145
- this.view.removeEventListener('touchend', this.touchEndCallback);
146
- this.view.removeEventListener('touchcancel', this.touchCancelCallback);
147
- }
148
-
149
- protected mapEvent(
150
- event: TouchEvent,
151
- eventType: EventTypes,
152
- index: number,
153
- touchEventType: TouchEventType
154
- ): AdaptedEvent {
155
- const rect = this.view.getBoundingClientRect();
156
- const clientX = event.changedTouches[index].clientX;
157
- const clientY = event.changedTouches[index].clientY;
158
-
159
- const { scaleX, scaleY } = calculateViewScale(this.view);
160
-
161
- return {
162
- x: clientX,
163
- y: clientY,
164
- offsetX: (clientX - rect.left) / scaleX,
165
- offsetY: (clientY - rect.top) / scaleY,
166
- pointerId: event.changedTouches[index].identifier,
167
- eventType: eventType,
168
- pointerType: PointerType.TOUCH,
169
- time: event.timeStamp,
170
- allTouches: event.touches,
171
- changedTouches: event.changedTouches,
172
- touchEventType: touchEventType,
173
- };
174
- }
175
- }