react-native-gesture-handler 2.18.1 → 2.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/README.md +1 -0
  2. package/android/build.gradle +11 -29
  3. package/android/fabric/src/main/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +1 -1
  4. package/android/paper/src/main/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +1 -1
  5. package/android/src/main/AndroidManifest.xml +1 -3
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +21 -21
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +2 -2
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +1 -0
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +16 -0
  10. package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +80 -4
  11. package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +8 -0
  12. package/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt +2 -1
  13. package/android/src/main/java/com/swmansion/gesturehandler/core/ScaleGestureDetector.java +10 -0
  14. package/android/src/main/java/com/swmansion/gesturehandler/core/StylusData.kt +103 -0
  15. package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +2 -2
  16. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +24 -15
  17. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +3 -0
  18. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +7 -0
  19. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +7 -0
  20. package/android/src/main/jni/CMakeLists.txt +18 -9
  21. package/apple/Handlers/RNFlingHandler.h +1 -0
  22. package/apple/Handlers/RNFlingHandler.m +153 -19
  23. package/apple/Handlers/RNHoverHandler.m +44 -2
  24. package/apple/Handlers/RNLongPressHandler.m +111 -20
  25. package/apple/Handlers/RNManualHandler.m +53 -29
  26. package/apple/Handlers/RNNativeViewHandler.mm +22 -15
  27. package/apple/Handlers/RNPanHandler.m +57 -7
  28. package/apple/Handlers/RNRotationHandler.m +1 -1
  29. package/apple/RNGHStylusData.h +77 -0
  30. package/apple/RNGHStylusData.m +37 -0
  31. package/apple/RNGHUIKit.h +2 -0
  32. package/apple/RNGHVector.h +31 -0
  33. package/apple/RNGHVector.m +67 -0
  34. package/apple/RNGestureHandler.h +7 -0
  35. package/apple/{RNGestureHandler.m → RNGestureHandler.mm} +63 -1
  36. package/apple/RNGestureHandlerButtonComponentView.mm +41 -0
  37. package/apple/RNGestureHandlerDirection.h +25 -0
  38. package/apple/RNGestureHandlerEvents.h +3 -1
  39. package/apple/RNGestureHandlerEvents.m +11 -3
  40. package/lib/commonjs/PointerType.js +2 -1
  41. package/lib/commonjs/PointerType.js.map +1 -1
  42. package/lib/commonjs/components/GestureButtons.js +5 -1
  43. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  44. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  45. package/lib/commonjs/components/Pressable/Pressable.js +66 -78
  46. package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
  47. package/lib/commonjs/components/Pressable/index.js +0 -8
  48. package/lib/commonjs/components/Pressable/index.js.map +1 -1
  49. package/lib/commonjs/components/Pressable/utils.js +1 -23
  50. package/lib/commonjs/components/Pressable/utils.js.map +1 -1
  51. package/lib/commonjs/components/ReanimatedSwipeable.js +60 -41
  52. package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -1
  53. package/lib/commonjs/handlers/GestureHandlerEventPayload.js +4 -0
  54. package/lib/commonjs/handlers/LongPressGestureHandler.js +1 -1
  55. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  56. package/lib/commonjs/handlers/createHandler.js +2 -1
  57. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  58. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +1 -1
  59. package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
  60. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  61. package/lib/commonjs/handlers/gestures/hoverGesture.js.map +1 -1
  62. package/lib/commonjs/handlers/gestures/longPressGesture.js +10 -0
  63. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
  64. package/lib/commonjs/jestUtils/jestUtils.js +12 -4
  65. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
  66. package/lib/commonjs/mocks.js +16 -3
  67. package/lib/commonjs/mocks.js.map +1 -1
  68. package/lib/commonjs/utils.js +4 -0
  69. package/lib/commonjs/utils.js.map +1 -1
  70. package/lib/commonjs/web/constants.js +3 -3
  71. package/lib/commonjs/web/constants.js.map +1 -1
  72. package/lib/commonjs/web/handlers/GestureHandler.js +2 -3
  73. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  74. package/lib/commonjs/web/handlers/HoverGestureHandler.js +18 -1
  75. package/lib/commonjs/web/handlers/HoverGestureHandler.js.map +1 -1
  76. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +43 -9
  77. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  78. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +14 -3
  79. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  80. package/lib/commonjs/web/handlers/PanGestureHandler.js +12 -1
  81. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  82. package/lib/commonjs/web/interfaces.js.map +1 -1
  83. package/lib/commonjs/web/tools/EventManager.js.map +1 -1
  84. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +55 -11
  85. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  86. package/lib/commonjs/web/tools/KeyboardEventManager.js +110 -0
  87. package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -0
  88. package/lib/commonjs/web/tools/PointerEventManager.js +3 -37
  89. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  90. package/lib/commonjs/web/tools/Vector.js +4 -2
  91. package/lib/commonjs/web/tools/Vector.js.map +1 -1
  92. package/lib/commonjs/web/utils.js +187 -13
  93. package/lib/commonjs/web/utils.js.map +1 -1
  94. package/lib/module/PointerType.js +2 -1
  95. package/lib/module/PointerType.js.map +1 -1
  96. package/lib/module/components/GestureButtons.js +5 -1
  97. package/lib/module/components/GestureButtons.js.map +1 -1
  98. package/lib/module/components/GestureComponents.js.map +1 -1
  99. package/lib/module/components/Pressable/Pressable.js +67 -78
  100. package/lib/module/components/Pressable/Pressable.js.map +1 -1
  101. package/lib/module/components/Pressable/index.js +0 -1
  102. package/lib/module/components/Pressable/index.js.map +1 -1
  103. package/lib/module/components/Pressable/utils.js +1 -22
  104. package/lib/module/components/Pressable/utils.js.map +1 -1
  105. package/lib/module/components/ReanimatedSwipeable.js +58 -37
  106. package/lib/module/components/ReanimatedSwipeable.js.map +1 -1
  107. package/lib/module/handlers/GestureHandlerEventPayload.js +1 -1
  108. package/lib/module/handlers/LongPressGestureHandler.js +1 -1
  109. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  110. package/lib/module/handlers/createHandler.js +2 -1
  111. package/lib/module/handlers/createHandler.js.map +1 -1
  112. package/lib/module/handlers/gestures/GestureDetector/utils.js +2 -2
  113. package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
  114. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  115. package/lib/module/handlers/gestures/hoverGesture.js.map +1 -1
  116. package/lib/module/handlers/gestures/longPressGesture.js +10 -0
  117. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  118. package/lib/module/jestUtils/jestUtils.js +12 -4
  119. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  120. package/lib/module/mocks.js +13 -3
  121. package/lib/module/mocks.js.map +1 -1
  122. package/lib/module/utils.js +1 -0
  123. package/lib/module/utils.js.map +1 -1
  124. package/lib/module/web/constants.js +1 -1
  125. package/lib/module/web/constants.js.map +1 -1
  126. package/lib/module/web/handlers/GestureHandler.js +2 -3
  127. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  128. package/lib/module/web/handlers/HoverGestureHandler.js +18 -1
  129. package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -1
  130. package/lib/module/web/handlers/LongPressGestureHandler.js +43 -9
  131. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  132. package/lib/module/web/handlers/NativeViewGestureHandler.js +14 -3
  133. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  134. package/lib/module/web/handlers/PanGestureHandler.js +12 -1
  135. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  136. package/lib/module/web/interfaces.js.map +1 -1
  137. package/lib/module/web/tools/EventManager.js.map +1 -1
  138. package/lib/module/web/tools/GestureHandlerWebDelegate.js +54 -10
  139. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  140. package/lib/module/web/tools/KeyboardEventManager.js +96 -0
  141. package/lib/module/web/tools/KeyboardEventManager.js.map +1 -0
  142. package/lib/module/web/tools/PointerEventManager.js +4 -38
  143. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  144. package/lib/module/web/tools/Vector.js +5 -3
  145. package/lib/module/web/tools/Vector.js.map +1 -1
  146. package/lib/module/web/utils.js +184 -13
  147. package/lib/module/web/utils.js.map +1 -1
  148. package/lib/typescript/PointerType.d.ts +2 -1
  149. package/lib/typescript/components/GestureComponents.d.ts +1 -1
  150. package/lib/typescript/components/Pressable/index.d.ts +1 -1
  151. package/lib/typescript/components/Pressable/utils.d.ts +3 -5
  152. package/lib/typescript/handlers/GestureHandlerEventPayload.d.ts +35 -0
  153. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +5 -1
  154. package/lib/typescript/handlers/gestures/gesture.d.ts +2 -2
  155. package/lib/typescript/handlers/gestures/hoverGesture.d.ts +1 -6
  156. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +5 -0
  157. package/lib/typescript/handlers/handlersRegistry.d.ts +1 -1
  158. package/lib/typescript/jestUtils/jestUtils.d.ts +1 -1
  159. package/lib/typescript/mocks.d.ts +4 -3
  160. package/lib/typescript/utils.d.ts +1 -0
  161. package/lib/typescript/web/constants.d.ts +1 -1
  162. package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -1
  163. package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +2 -0
  164. package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +3 -0
  165. package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
  166. package/lib/typescript/web/handlers/PanGestureHandler.d.ts +3 -1
  167. package/lib/typescript/web/interfaces.d.ts +9 -4
  168. package/lib/typescript/web/tools/EventManager.d.ts +2 -2
  169. package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +1 -0
  170. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +6 -0
  171. package/lib/typescript/web/tools/KeyboardEventManager.d.ts +13 -0
  172. package/lib/typescript/web/utils.d.ts +2 -1
  173. package/package.json +3 -3
  174. package/src/PointerType.ts +1 -0
  175. package/src/components/GestureButtons.tsx +2 -1
  176. package/src/components/GestureComponents.tsx +1 -1
  177. package/src/components/Pressable/Pressable.tsx +77 -70
  178. package/src/components/Pressable/index.ts +1 -1
  179. package/src/components/Pressable/utils.ts +5 -49
  180. package/src/components/ReanimatedSwipeable.tsx +70 -47
  181. package/src/handlers/GestureHandlerEventPayload.ts +42 -0
  182. package/src/handlers/LongPressGestureHandler.ts +6 -0
  183. package/src/handlers/createHandler.tsx +1 -0
  184. package/src/handlers/gestures/GestureDetector/utils.ts +2 -2
  185. package/src/handlers/gestures/gesture.ts +3 -1
  186. package/src/handlers/gestures/hoverGesture.ts +1 -7
  187. package/src/handlers/gestures/longPressGesture.ts +9 -0
  188. package/src/jestUtils/jestUtils.ts +9 -1
  189. package/src/{mocks.ts → mocks.tsx} +8 -3
  190. package/src/utils.ts +2 -0
  191. package/src/web/constants.ts +1 -1
  192. package/src/web/handlers/GestureHandler.ts +4 -2
  193. package/src/web/handlers/HoverGestureHandler.ts +16 -2
  194. package/src/web/handlers/LongPressGestureHandler.ts +49 -10
  195. package/src/web/handlers/NativeViewGestureHandler.ts +14 -4
  196. package/src/web/handlers/PanGestureHandler.ts +14 -1
  197. package/src/web/interfaces.ts +10 -4
  198. package/src/web/tools/EventManager.ts +2 -4
  199. package/src/web/tools/GestureHandlerDelegate.ts +1 -0
  200. package/src/web/tools/GestureHandlerWebDelegate.ts +67 -10
  201. package/src/web/tools/KeyboardEventManager.ts +91 -0
  202. package/src/web/tools/PointerEventManager.ts +2 -38
  203. package/src/web/tools/Vector.ts +4 -3
  204. package/src/web/utils.ts +188 -13
  205. package/lib/commonjs/web/tools/TouchEventManager.js +0 -164
  206. package/lib/commonjs/web/tools/TouchEventManager.js.map +0 -1
  207. package/lib/module/web/tools/TouchEventManager.js +0 -149
  208. package/lib/module/web/tools/TouchEventManager.js.map +0 -1
  209. package/lib/typescript/web/tools/TouchEventManager.d.ts +0 -11
  210. 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
- }