react-native-gesture-handler 2.22.1 → 2.23.1
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.
- package/RNGestureHandler.podspec +8 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +14 -0
- package/android/src/main/jni/cpp-adapter.cpp +19 -12
- package/apple/RNGestureHandler.mm +15 -8
- package/apple/RNGestureHandlerButton.mm +12 -2
- package/apple/RNGestureHandlerModule.mm +17 -5
- package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js +6 -0
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureButtons.js +11 -2
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/Pressable/Pressable.js +21 -5
- package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
- package/lib/commonjs/components/Pressable/index.js.map +1 -1
- package/lib/commonjs/components/ReanimatedSwipeable.js +49 -20
- package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -1
- package/lib/commonjs/components/Text.js +10 -4
- package/lib/commonjs/components/Text.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableHighlight.js +2 -0
- package/lib/commonjs/components/touchables/TouchableHighlight.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js +2 -0
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.js +5 -1
- package/lib/commonjs/components/touchables/TouchableNativeFeedback.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js +2 -0
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js +3 -0
- package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/commonjs/findNodeHandle.web.js +9 -1
- package/lib/commonjs/findNodeHandle.web.js.map +1 -1
- package/lib/commonjs/handlers/FlingGestureHandler.js +8 -0
- package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js +5 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/LongPressGestureHandler.js +8 -0
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/NativeViewGestureHandler.js +8 -0
- package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +8 -0
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PinchGestureHandler.js +8 -0
- package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/RotationGestureHandler.js +8 -0
- package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/TapGestureHandler.js +8 -0
- package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +6 -2
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/index.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js +2 -2
- package/lib/commonjs/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
- package/lib/commonjs/handlers/handlersRegistry.js +7 -2
- package/lib/commonjs/handlers/handlersRegistry.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils.js +3 -3
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +22 -22
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +24 -24
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +6 -6
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +112 -92
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/HoverGestureHandler.js +2 -2
- package/lib/commonjs/web/handlers/HoverGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +6 -6
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +13 -13
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +15 -15
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +15 -15
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +12 -12
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +4 -4
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/tools/CircularBuffer.js +15 -15
- package/lib/commonjs/web/tools/CircularBuffer.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +40 -40
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +32 -13
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +16 -18
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/NodeManager.js +2 -2
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerTracker.js +18 -18
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/Vector.js.map +1 -1
- package/lib/commonjs/web/tools/VelocityTracker.js +1 -1
- package/lib/commonjs/web/tools/VelocityTracker.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +2 -2
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/DrawerLayout.js +7 -0
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureButtons.js +10 -2
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/Pressable/Pressable.js +22 -6
- package/lib/module/components/Pressable/Pressable.js.map +1 -1
- package/lib/module/components/Pressable/index.js.map +1 -1
- package/lib/module/components/ReanimatedSwipeable.js +49 -20
- package/lib/module/components/ReanimatedSwipeable.js.map +1 -1
- package/lib/module/components/Text.js +8 -3
- package/lib/module/components/Text.js.map +1 -1
- package/lib/module/components/touchables/TouchableHighlight.js +2 -0
- package/lib/module/components/touchables/TouchableHighlight.js.map +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js +2 -0
- package/lib/module/components/touchables/TouchableNativeFeedback.android.js.map +1 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.js +6 -1
- package/lib/module/components/touchables/TouchableNativeFeedback.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js +5 -0
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/components/touchables/TouchableWithoutFeedback.js +4 -0
- package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +1 -1
- package/lib/module/findNodeHandle.web.js +8 -1
- package/lib/module/findNodeHandle.web.js.map +1 -1
- package/lib/module/handlers/FlingGestureHandler.js +7 -0
- package/lib/module/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js +5 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/module/handlers/LongPressGestureHandler.js +7 -0
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/handlers/NativeViewGestureHandler.js +7 -0
- package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +7 -0
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PinchGestureHandler.js +11 -0
- package/lib/module/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/handlers/RotationGestureHandler.js +11 -0
- package/lib/module/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/handlers/TapGestureHandler.js +7 -0
- package/lib/module/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/handlers/createHandler.js +9 -4
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/index.js +2 -2
- package/lib/module/handlers/gestures/GestureDetector/index.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js +2 -2
- package/lib/module/handlers/gestures/GestureDetector/useViewRefHandler.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/utils.js +2 -2
- package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
- package/lib/module/handlers/handlersRegistry.js +6 -3
- package/lib/module/handlers/handlersRegistry.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils.js +2 -2
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js +22 -22
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/detectors/ScaleGestureDetector.js +24 -24
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +6 -6
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +112 -92
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/HoverGestureHandler.js +2 -2
- package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +6 -6
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +13 -13
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +15 -15
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +15 -15
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +12 -12
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +4 -4
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/tools/CircularBuffer.js +15 -15
- package/lib/module/web/tools/CircularBuffer.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +40 -40
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +32 -13
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +16 -16
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/NodeManager.js +2 -2
- package/lib/module/web/tools/NodeManager.js.map +1 -1
- package/lib/module/web/tools/PointerTracker.js +18 -18
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/Vector.js.map +1 -1
- package/lib/module/web/tools/VelocityTracker.js +1 -1
- package/lib/module/web/tools/VelocityTracker.js.map +1 -1
- package/lib/typescript/components/DrawerLayout.d.ts +27 -0
- package/lib/typescript/components/GestureButtonsProps.d.ts +18 -2
- package/lib/typescript/components/Pressable/PressableProps.d.ts +3 -10
- package/lib/typescript/components/Pressable/index.d.ts +1 -1
- package/lib/typescript/components/ReanimatedSwipeable.d.ts +6 -0
- package/lib/typescript/components/touchables/TouchableHighlight.d.ts +5 -0
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +2 -0
- package/lib/typescript/components/touchables/TouchableNativeFeedback.d.ts +5 -1
- package/lib/typescript/components/touchables/TouchableNativeFeedbackProps.d.ts +3 -0
- package/lib/typescript/components/touchables/TouchableOpacity.d.ts +5 -0
- package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +6 -0
- package/lib/typescript/handlers/FlingGestureHandler.d.ts +9 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +9 -0
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +9 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +9 -0
- package/lib/typescript/handlers/PanGestureHandler.d.ts +9 -0
- package/lib/typescript/handlers/PinchGestureHandler.d.ts +9 -0
- package/lib/typescript/handlers/RotationGestureHandler.d.ts +9 -0
- package/lib/typescript/handlers/TapGestureHandler.d.ts +9 -0
- package/lib/typescript/handlers/handlersRegistry.d.ts +1 -0
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/utils.d.ts +1 -1
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +8 -8
- package/lib/typescript/web/handlers/GestureHandler.d.ts +33 -28
- package/lib/typescript/web/handlers/IGestureHandler.d.ts +12 -13
- package/lib/typescript/web/tools/CircularBuffer.d.ts +3 -3
- package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +1 -1
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +2 -2
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +3 -2
- package/lib/typescript/web/tools/InteractionManager.d.ts +2 -2
- package/lib/typescript/web/tools/NodeManager.d.ts +1 -1
- package/lib/typescript/web/tools/PointerTracker.d.ts +4 -4
- package/lib/typescript/web/tools/VelocityTracker.d.ts +1 -1
- package/package.json +2 -2
- package/src/RNGestureHandlerModule.web.ts +2 -2
- package/src/components/DrawerLayout.tsx +29 -0
- package/src/components/GestureButtons.tsx +13 -2
- package/src/components/GestureButtonsProps.ts +31 -2
- package/src/components/Pressable/Pressable.tsx +22 -5
- package/src/components/Pressable/PressableProps.tsx +4 -11
- package/src/components/Pressable/index.ts +4 -1
- package/src/components/ReanimatedSwipeable.tsx +97 -66
- package/src/components/Text.tsx +13 -4
- package/src/components/touchables/TouchableHighlight.tsx +5 -0
- package/src/components/touchables/TouchableNativeFeedback.android.tsx +2 -0
- package/src/components/touchables/TouchableNativeFeedback.tsx +6 -1
- package/src/components/touchables/TouchableNativeFeedbackProps.tsx +3 -0
- package/src/components/touchables/TouchableOpacity.tsx +5 -0
- package/src/components/touchables/TouchableWithoutFeedback.tsx +6 -0
- package/src/findNodeHandle.web.ts +6 -0
- package/src/handlers/FlingGestureHandler.ts +10 -0
- package/src/handlers/ForceTouchGestureHandler.ts +9 -0
- package/src/handlers/LongPressGestureHandler.ts +10 -0
- package/src/handlers/NativeViewGestureHandler.ts +10 -0
- package/src/handlers/PanGestureHandler.ts +10 -0
- package/src/handlers/PinchGestureHandler.ts +10 -0
- package/src/handlers/RotationGestureHandler.ts +10 -0
- package/src/handlers/TapGestureHandler.ts +10 -0
- package/src/handlers/createHandler.tsx +11 -4
- package/src/handlers/gestures/GestureDetector/index.tsx +2 -2
- package/src/handlers/gestures/GestureDetector/useViewRefHandler.ts +3 -3
- package/src/handlers/gestures/GestureDetector/utils.ts +2 -2
- package/src/handlers/handlersRegistry.ts +7 -3
- package/src/index.ts +4 -1
- package/src/utils.ts +2 -2
- package/src/web/detectors/RotationGestureDetector.ts +22 -22
- package/src/web/detectors/ScaleGestureDetector.ts +24 -24
- package/src/web/handlers/FlingGestureHandler.ts +6 -7
- package/src/web/handlers/GestureHandler.ts +115 -105
- package/src/web/handlers/HoverGestureHandler.ts +2 -2
- package/src/web/handlers/IGestureHandler.ts +12 -13
- package/src/web/handlers/LongPressGestureHandler.ts +7 -7
- package/src/web/handlers/NativeViewGestureHandler.ts +14 -19
- package/src/web/handlers/PanGestureHandler.ts +17 -17
- package/src/web/handlers/PinchGestureHandler.ts +17 -21
- package/src/web/handlers/RotationGestureHandler.ts +12 -12
- package/src/web/handlers/TapGestureHandler.ts +4 -6
- package/src/web/tools/CircularBuffer.ts +15 -15
- package/src/web/tools/GestureHandlerDelegate.ts +1 -1
- package/src/web/tools/GestureHandlerOrchestrator.ts +42 -42
- package/src/web/tools/GestureHandlerWebDelegate.ts +32 -13
- package/src/web/tools/InteractionManager.ts +16 -16
- package/src/web/tools/NodeManager.ts +2 -2
- package/src/web/tools/PointerTracker.ts +20 -20
- package/src/web/tools/Vector.ts +1 -1
- package/src/web/tools/VelocityTracker.ts +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["TapGestureHandler.ts"],"names":["DEFAULT_MAX_DURATION_MS","DEFAULT_MAX_DELAY_MS","DEFAULT_NUMBER_OF_TAPS","DEFAULT_MIN_NUMBER_OF_POINTERS","TapGestureHandler","GestureHandler","Number","MIN_SAFE_INTEGER","updateGestureConfig","enabled","props","config","numberOfTaps","undefined","maxDurationMs","maxDelayMs","maxDeltaX","maxDeltaY","maxDist","maxDistSq","minPointers","minNumberOfPointers","resetConfig","clearTimeouts","clearTimeout","waitTimeout","delayTimeout","startTap","setTimeout","fail","endTap","tapsSoFar","currentMaxNumberOfPointers","activate","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","trySettingPosition","startX","x","startY","y","lastX","lastY","updateState","tryToSendTouchEvent","onPointerAdd","offsetX","offsetY","lastCoords","getAbsoluteCoordsAverage","onPointerUp","removeFromTracker","pointerId","onPointerRemove","onPointerMove","track","onPointerOutOfBounds","getTrackedPointersCount","shouldFail","currentState","State","UNDETERMINED","eventType","EventTypes","DOWN","begin","BEGAN","UP","dx","Math","abs","dy","distSq","end","onCancel","resetProgress"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config, EventTypes } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MAX_DURATION_MS = 500;\nconst DEFAULT_MAX_DELAY_MS = 500;\nconst DEFAULT_NUMBER_OF_TAPS = 1;\nconst DEFAULT_MIN_NUMBER_OF_POINTERS = 1;\n\nexport default class TapGestureHandler extends GestureHandler {\n private maxDeltaX = Number.MIN_SAFE_INTEGER;\n private maxDeltaY = Number.MIN_SAFE_INTEGER;\n private maxDistSq = Number.MIN_SAFE_INTEGER;\n private maxDurationMs = DEFAULT_MAX_DURATION_MS;\n private maxDelayMs = DEFAULT_MAX_DELAY_MS;\n\n private numberOfTaps = DEFAULT_NUMBER_OF_TAPS;\n private minNumberOfPointers = DEFAULT_MIN_NUMBER_OF_POINTERS;\n private currentMaxNumberOfPointers = 1;\n\n private startX = 0;\n private startY = 0;\n private offsetX = 0;\n private offsetY = 0;\n private lastX = 0;\n private lastY = 0;\n\n private waitTimeout: number | undefined;\n private delayTimeout: number | undefined;\n\n private tapsSoFar = 0;\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.numberOfTaps !== undefined) {\n this.numberOfTaps = this.config.numberOfTaps;\n }\n\n if (this.config.maxDurationMs !== undefined) {\n this.maxDurationMs = this.config.maxDurationMs;\n }\n\n if (this.config.maxDelayMs !== undefined) {\n this.maxDelayMs = this.config.maxDelayMs;\n }\n\n if (this.config.maxDeltaX !== undefined) {\n this.maxDeltaX = this.config.maxDeltaX;\n }\n\n if (this.config.maxDeltaY !== undefined) {\n this.maxDeltaY = this.config.maxDeltaY;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.minPointers !== undefined) {\n this.minNumberOfPointers = this.config.minPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n\n this.maxDeltaX = Number.MIN_SAFE_INTEGER;\n this.maxDeltaY = Number.MIN_SAFE_INTEGER;\n this.maxDistSq = Number.MIN_SAFE_INTEGER;\n this.maxDurationMs = DEFAULT_MAX_DURATION_MS;\n this.maxDelayMs = DEFAULT_MAX_DELAY_MS;\n this.numberOfTaps = DEFAULT_NUMBER_OF_TAPS;\n this.minNumberOfPointers = DEFAULT_MIN_NUMBER_OF_POINTERS;\n }\n\n private clearTimeouts(): void {\n clearTimeout(this.waitTimeout);\n clearTimeout(this.delayTimeout);\n }\n\n private startTap(): void {\n this.clearTimeouts();\n\n this.waitTimeout = setTimeout(() => this.fail(), this.maxDurationMs);\n }\n\n private endTap(): void {\n this.clearTimeouts();\n\n if (\n ++this.tapsSoFar === this.numberOfTaps &&\n this.currentMaxNumberOfPointers >= this.minNumberOfPointers\n ) {\n this.activate();\n } else {\n this.delayTimeout = setTimeout(() => this.fail(), this.maxDelayMs);\n }\n }\n\n // Handling Events\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.trySettingPosition(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.lastX = event.x;\n this.lastY = event.y;\n\n this.updateState(event);\n\n this.tryToSendTouchEvent(event);\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n this.trySettingPosition(event);\n\n this.offsetX += this.lastX - this.startX;\n this.offsetY += this.lastY - this.startY;\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.startX = lastCoords.x;\n this.startY = lastCoords.y;\n\n this.updateState(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.tracker.removeFromTracker(event.pointerId);\n\n this.updateState(event);\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n this.offsetX += this.lastX - this.startX;\n this.offsetY += this.lastY = this.startY;\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.startX = this.lastX;\n this.startY = this.lastY;\n\n this.updateState(event);\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.trySettingPosition(event);\n this.tracker.track(event);\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.updateState(event);\n\n super.onPointerMove(event);\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n this.trySettingPosition(event);\n this.tracker.track(event);\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.updateState(event);\n\n super.onPointerOutOfBounds(event);\n }\n\n private updateState(event: AdaptedEvent): void {\n if (\n this.currentMaxNumberOfPointers < this.tracker.getTrackedPointersCount()\n ) {\n this.currentMaxNumberOfPointers = this.tracker.getTrackedPointersCount();\n }\n\n if (this.shouldFail()) {\n this.fail();\n return;\n }\n\n switch (this.currentState) {\n case State.UNDETERMINED:\n if (event.eventType === EventTypes.DOWN) {\n this.begin();\n }\n this.startTap();\n break;\n case State.BEGAN:\n if (event.eventType === EventTypes.UP) {\n this.endTap();\n }\n if (event.eventType === EventTypes.DOWN) {\n this.startTap();\n }\n break;\n default:\n break;\n }\n }\n\n private trySettingPosition(event: AdaptedEvent): void {\n if (this.currentState !== State.UNDETERMINED) {\n return;\n }\n\n this.offsetX = 0;\n this.offsetY = 0;\n this.startX = event.x;\n this.startY = event.y;\n }\n\n private shouldFail(): boolean {\n const dx = this.lastX - this.startX + this.offsetX;\n\n if (\n this.maxDeltaX !== Number.MIN_SAFE_INTEGER &&\n Math.abs(dx) > this.maxDeltaX\n ) {\n return true;\n }\n\n const dy = this.lastY - this.startY + this.offsetY;\n if (\n this.maxDeltaY !== Number.MIN_SAFE_INTEGER &&\n Math.abs(dy) > this.maxDeltaY\n ) {\n return true;\n }\n\n const distSq = dy * dy + dx * dx;\n\n return (\n this.maxDistSq !== Number.MIN_SAFE_INTEGER && distSq > this.maxDistSq\n );\n }\n\n public activate(): void {\n super.activate();\n\n this.end();\n }\n\n protected onCancel(): void {\n this.resetProgress();\n this.clearTimeouts();\n }\n\n protected resetProgress(): void {\n this.clearTimeouts();\n this.tapsSoFar = 0;\n this.currentMaxNumberOfPointers = 0;\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["TapGestureHandler.ts"],"names":["DEFAULT_MAX_DURATION_MS","DEFAULT_MAX_DELAY_MS","DEFAULT_NUMBER_OF_TAPS","DEFAULT_MIN_NUMBER_OF_POINTERS","TapGestureHandler","GestureHandler","Number","MIN_SAFE_INTEGER","updateGestureConfig","enabled","props","config","numberOfTaps","undefined","maxDurationMs","maxDelayMs","maxDeltaX","maxDeltaY","maxDist","maxDistSq","minPointers","minNumberOfPointers","resetConfig","clearTimeouts","clearTimeout","waitTimeout","delayTimeout","startTap","setTimeout","fail","endTap","tapsSoFar","currentMaxNumberOfPointers","activate","onPointerDown","event","isButtonInConfig","button","tracker","addToTracker","trySettingPosition","startX","x","startY","y","lastX","lastY","updateState","tryToSendTouchEvent","onPointerAdd","offsetX","offsetY","lastCoords","getAbsoluteCoordsAverage","onPointerUp","removeFromTracker","pointerId","onPointerRemove","onPointerMove","track","onPointerOutOfBounds","trackedPointersCount","shouldFail","state","State","UNDETERMINED","eventType","EventTypes","DOWN","begin","BEGAN","UP","dx","Math","abs","dy","distSq","end","onCancel","resetProgress"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { AdaptedEvent, Config, EventTypes } from '../interfaces';\n\nimport GestureHandler from './GestureHandler';\n\nconst DEFAULT_MAX_DURATION_MS = 500;\nconst DEFAULT_MAX_DELAY_MS = 500;\nconst DEFAULT_NUMBER_OF_TAPS = 1;\nconst DEFAULT_MIN_NUMBER_OF_POINTERS = 1;\n\nexport default class TapGestureHandler extends GestureHandler {\n private maxDeltaX = Number.MIN_SAFE_INTEGER;\n private maxDeltaY = Number.MIN_SAFE_INTEGER;\n private maxDistSq = Number.MIN_SAFE_INTEGER;\n private maxDurationMs = DEFAULT_MAX_DURATION_MS;\n private maxDelayMs = DEFAULT_MAX_DELAY_MS;\n\n private numberOfTaps = DEFAULT_NUMBER_OF_TAPS;\n private minNumberOfPointers = DEFAULT_MIN_NUMBER_OF_POINTERS;\n private currentMaxNumberOfPointers = 1;\n\n private startX = 0;\n private startY = 0;\n private offsetX = 0;\n private offsetY = 0;\n private lastX = 0;\n private lastY = 0;\n\n private waitTimeout: number | undefined;\n private delayTimeout: number | undefined;\n\n private tapsSoFar = 0;\n\n public updateGestureConfig({ enabled = true, ...props }: Config): void {\n super.updateGestureConfig({ enabled: enabled, ...props });\n\n if (this.config.numberOfTaps !== undefined) {\n this.numberOfTaps = this.config.numberOfTaps;\n }\n\n if (this.config.maxDurationMs !== undefined) {\n this.maxDurationMs = this.config.maxDurationMs;\n }\n\n if (this.config.maxDelayMs !== undefined) {\n this.maxDelayMs = this.config.maxDelayMs;\n }\n\n if (this.config.maxDeltaX !== undefined) {\n this.maxDeltaX = this.config.maxDeltaX;\n }\n\n if (this.config.maxDeltaY !== undefined) {\n this.maxDeltaY = this.config.maxDeltaY;\n }\n\n if (this.config.maxDist !== undefined) {\n this.maxDistSq = this.config.maxDist * this.config.maxDist;\n }\n\n if (this.config.minPointers !== undefined) {\n this.minNumberOfPointers = this.config.minPointers;\n }\n }\n\n protected resetConfig(): void {\n super.resetConfig();\n\n this.maxDeltaX = Number.MIN_SAFE_INTEGER;\n this.maxDeltaY = Number.MIN_SAFE_INTEGER;\n this.maxDistSq = Number.MIN_SAFE_INTEGER;\n this.maxDurationMs = DEFAULT_MAX_DURATION_MS;\n this.maxDelayMs = DEFAULT_MAX_DELAY_MS;\n this.numberOfTaps = DEFAULT_NUMBER_OF_TAPS;\n this.minNumberOfPointers = DEFAULT_MIN_NUMBER_OF_POINTERS;\n }\n\n private clearTimeouts(): void {\n clearTimeout(this.waitTimeout);\n clearTimeout(this.delayTimeout);\n }\n\n private startTap(): void {\n this.clearTimeouts();\n\n this.waitTimeout = setTimeout(() => this.fail(), this.maxDurationMs);\n }\n\n private endTap(): void {\n this.clearTimeouts();\n\n if (\n ++this.tapsSoFar === this.numberOfTaps &&\n this.currentMaxNumberOfPointers >= this.minNumberOfPointers\n ) {\n this.activate();\n } else {\n this.delayTimeout = setTimeout(() => this.fail(), this.maxDelayMs);\n }\n }\n\n // Handling Events\n protected onPointerDown(event: AdaptedEvent): void {\n if (!this.isButtonInConfig(event.button)) {\n return;\n }\n\n this.tracker.addToTracker(event);\n super.onPointerDown(event);\n\n this.trySettingPosition(event);\n\n this.startX = event.x;\n this.startY = event.y;\n\n this.lastX = event.x;\n this.lastY = event.y;\n\n this.updateState(event);\n\n this.tryToSendTouchEvent(event);\n }\n\n protected onPointerAdd(event: AdaptedEvent): void {\n super.onPointerAdd(event);\n this.tracker.addToTracker(event);\n this.trySettingPosition(event);\n\n this.offsetX += this.lastX - this.startX;\n this.offsetY += this.lastY - this.startY;\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.startX = lastCoords.x;\n this.startY = lastCoords.y;\n\n this.updateState(event);\n }\n\n protected onPointerUp(event: AdaptedEvent): void {\n super.onPointerUp(event);\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.tracker.removeFromTracker(event.pointerId);\n\n this.updateState(event);\n }\n\n protected onPointerRemove(event: AdaptedEvent): void {\n super.onPointerRemove(event);\n this.tracker.removeFromTracker(event.pointerId);\n\n this.offsetX += this.lastX - this.startX;\n this.offsetY += this.lastY = this.startY;\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.startX = this.lastX;\n this.startY = this.lastY;\n\n this.updateState(event);\n }\n\n protected onPointerMove(event: AdaptedEvent): void {\n this.trySettingPosition(event);\n this.tracker.track(event);\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.updateState(event);\n\n super.onPointerMove(event);\n }\n\n protected onPointerOutOfBounds(event: AdaptedEvent): void {\n this.trySettingPosition(event);\n this.tracker.track(event);\n\n const lastCoords = this.tracker.getAbsoluteCoordsAverage();\n this.lastX = lastCoords.x;\n this.lastY = lastCoords.y;\n\n this.updateState(event);\n\n super.onPointerOutOfBounds(event);\n }\n\n private updateState(event: AdaptedEvent): void {\n if (this.currentMaxNumberOfPointers < this.tracker.trackedPointersCount) {\n this.currentMaxNumberOfPointers = this.tracker.trackedPointersCount;\n }\n\n if (this.shouldFail()) {\n this.fail();\n return;\n }\n\n switch (this.state) {\n case State.UNDETERMINED:\n if (event.eventType === EventTypes.DOWN) {\n this.begin();\n }\n this.startTap();\n break;\n case State.BEGAN:\n if (event.eventType === EventTypes.UP) {\n this.endTap();\n }\n if (event.eventType === EventTypes.DOWN) {\n this.startTap();\n }\n break;\n default:\n break;\n }\n }\n\n private trySettingPosition(event: AdaptedEvent): void {\n if (this.state !== State.UNDETERMINED) {\n return;\n }\n\n this.offsetX = 0;\n this.offsetY = 0;\n this.startX = event.x;\n this.startY = event.y;\n }\n\n private shouldFail(): boolean {\n const dx = this.lastX - this.startX + this.offsetX;\n\n if (\n this.maxDeltaX !== Number.MIN_SAFE_INTEGER &&\n Math.abs(dx) > this.maxDeltaX\n ) {\n return true;\n }\n\n const dy = this.lastY - this.startY + this.offsetY;\n if (\n this.maxDeltaY !== Number.MIN_SAFE_INTEGER &&\n Math.abs(dy) > this.maxDeltaY\n ) {\n return true;\n }\n\n const distSq = dy * dy + dx * dx;\n\n return (\n this.maxDistSq !== Number.MIN_SAFE_INTEGER && distSq > this.maxDistSq\n );\n }\n\n public activate(): void {\n super.activate();\n\n this.end();\n }\n\n protected onCancel(): void {\n this.resetProgress();\n this.clearTimeouts();\n }\n\n protected resetProgress(): void {\n this.clearTimeouts();\n this.tapsSoFar = 0;\n this.currentMaxNumberOfPointers = 0;\n }\n}\n"]}
|
@@ -9,36 +9,32 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
9
9
|
|
10
10
|
class CircularBuffer {
|
11
11
|
constructor(size) {
|
12
|
-
_defineProperty(this, "
|
12
|
+
_defineProperty(this, "capacity", void 0);
|
13
13
|
|
14
14
|
_defineProperty(this, "buffer", void 0);
|
15
15
|
|
16
16
|
_defineProperty(this, "index", void 0);
|
17
17
|
|
18
|
-
_defineProperty(this, "
|
18
|
+
_defineProperty(this, "_size", void 0);
|
19
19
|
|
20
|
-
this.
|
20
|
+
this.capacity = size;
|
21
21
|
this.buffer = new Array(size);
|
22
22
|
this.index = 0;
|
23
|
-
this.
|
24
|
-
}
|
25
|
-
|
26
|
-
get size() {
|
27
|
-
return this.actualSize;
|
23
|
+
this._size = 0;
|
28
24
|
}
|
29
25
|
|
30
26
|
push(element) {
|
31
27
|
this.buffer[this.index] = element;
|
32
|
-
this.index = (this.index + 1) % this.
|
33
|
-
this.
|
28
|
+
this.index = (this.index + 1) % this.capacity;
|
29
|
+
this._size = Math.min(this.size + 1, this.capacity);
|
34
30
|
}
|
35
31
|
|
36
32
|
get(at) {
|
37
|
-
if (this.
|
38
|
-
let index = (this.index + at) % this.
|
33
|
+
if (this._size === this.capacity) {
|
34
|
+
let index = (this.index + at) % this.capacity;
|
39
35
|
|
40
36
|
if (index < 0) {
|
41
|
-
index += this.
|
37
|
+
index += this.capacity;
|
42
38
|
}
|
43
39
|
|
44
40
|
return this.buffer[index];
|
@@ -48,9 +44,13 @@ class CircularBuffer {
|
|
48
44
|
}
|
49
45
|
|
50
46
|
clear() {
|
51
|
-
this.buffer = new Array(this.
|
47
|
+
this.buffer = new Array(this.capacity);
|
52
48
|
this.index = 0;
|
53
|
-
this.
|
49
|
+
this._size = 0;
|
50
|
+
}
|
51
|
+
|
52
|
+
get size() {
|
53
|
+
return this._size;
|
54
54
|
}
|
55
55
|
|
56
56
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["CircularBuffer.ts"],"names":["CircularBuffer","constructor","size","
|
1
|
+
{"version":3,"sources":["CircularBuffer.ts"],"names":["CircularBuffer","constructor","size","capacity","buffer","Array","index","_size","push","element","Math","min","get","at","clear"],"mappings":";;;;;;;;;AAAe,MAAMA,cAAN,CAAwB;AAMrCC,EAAAA,WAAW,CAACC,IAAD,EAAe;AAAA;;AAAA;;AAAA;;AAAA;;AACxB,SAAKC,QAAL,GAAgBD,IAAhB;AACA,SAAKE,MAAL,GAAc,IAAIC,KAAJ,CAAaH,IAAb,CAAd;AACA,SAAKI,KAAL,GAAa,CAAb;AACA,SAAKC,KAAL,GAAa,CAAb;AACD;;AAEMC,EAAAA,IAAI,CAACC,OAAD,EAAmB;AAC5B,SAAKL,MAAL,CAAY,KAAKE,KAAjB,IAA0BG,OAA1B;AACA,SAAKH,KAAL,GAAa,CAAC,KAAKA,KAAL,GAAa,CAAd,IAAmB,KAAKH,QAArC;AACA,SAAKI,KAAL,GAAaG,IAAI,CAACC,GAAL,CAAS,KAAKT,IAAL,GAAY,CAArB,EAAwB,KAAKC,QAA7B,CAAb;AACD;;AAEMS,EAAAA,GAAG,CAACC,EAAD,EAAgB;AACxB,QAAI,KAAKN,KAAL,KAAe,KAAKJ,QAAxB,EAAkC;AAChC,UAAIG,KAAK,GAAG,CAAC,KAAKA,KAAL,GAAaO,EAAd,IAAoB,KAAKV,QAArC;;AACA,UAAIG,KAAK,GAAG,CAAZ,EAAe;AACbA,QAAAA,KAAK,IAAI,KAAKH,QAAd;AACD;;AAED,aAAO,KAAKC,MAAL,CAAYE,KAAZ,CAAP;AACD,KAPD,MAOO;AACL,aAAO,KAAKF,MAAL,CAAYS,EAAZ,CAAP;AACD;AACF;;AAEMC,EAAAA,KAAK,GAAS;AACnB,SAAKV,MAAL,GAAc,IAAIC,KAAJ,CAAa,KAAKF,QAAlB,CAAd;AACA,SAAKG,KAAL,GAAa,CAAb;AACA,SAAKC,KAAL,GAAa,CAAb;AACD;;AAEc,MAAJL,IAAI,GAAG;AAChB,WAAO,KAAKK,KAAZ;AACD;;AAxCoC","sourcesContent":["export default class CircularBuffer<T> {\n private capacity: number;\n private buffer: T[];\n private index: number;\n private _size: number;\n\n constructor(size: number) {\n this.capacity = size;\n this.buffer = new Array<T>(size);\n this.index = 0;\n this._size = 0;\n }\n\n public push(element: T): void {\n this.buffer[this.index] = element;\n this.index = (this.index + 1) % this.capacity;\n this._size = Math.min(this.size + 1, this.capacity);\n }\n\n public get(at: number): T {\n if (this._size === this.capacity) {\n let index = (this.index + at) % this.capacity;\n if (index < 0) {\n index += this.capacity;\n }\n\n return this.buffer[index];\n } else {\n return this.buffer[at];\n }\n }\n\n public clear(): void {\n this.buffer = new Array<T>(this.capacity);\n this.index = 0;\n this._size = 0;\n }\n\n public get size() {\n return this._size;\n }\n}\n"]}
|
@@ -38,9 +38,9 @@ class GestureHandlerOrchestrator {
|
|
38
38
|
|
39
39
|
cleanHandler(handler) {
|
40
40
|
handler.reset();
|
41
|
-
handler.
|
42
|
-
handler.
|
43
|
-
handler.
|
41
|
+
handler.active = false;
|
42
|
+
handler.awaiting = false;
|
43
|
+
handler.activationIndex = Number.MAX_VALUE;
|
44
44
|
}
|
45
45
|
|
46
46
|
removeHandlerFromOrchestrator(handler) {
|
@@ -53,7 +53,7 @@ class GestureHandlerOrchestrator {
|
|
53
53
|
|
54
54
|
if (indexInAwaitingHandlers >= 0) {
|
55
55
|
this.awaitingHandlers.splice(indexInAwaitingHandlers, 1);
|
56
|
-
this.awaitingHandlersTags.delete(handler.
|
56
|
+
this.awaitingHandlersTags.delete(handler.handlerTag);
|
57
57
|
}
|
58
58
|
}
|
59
59
|
|
@@ -63,7 +63,7 @@ class GestureHandlerOrchestrator {
|
|
63
63
|
for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
|
64
64
|
const handler = this.gestureHandlers[i];
|
65
65
|
|
66
|
-
if (this.isFinished(handler.
|
66
|
+
if (this.isFinished(handler.state) && !handler.awaiting) {
|
67
67
|
this.cleanHandler(handler);
|
68
68
|
handlersToRemove.add(handler);
|
69
69
|
}
|
@@ -74,7 +74,7 @@ class GestureHandlerOrchestrator {
|
|
74
74
|
|
75
75
|
hasOtherHandlerToWaitFor(handler) {
|
76
76
|
const hasToWaitFor = otherHandler => {
|
77
|
-
return !this.isFinished(otherHandler.
|
77
|
+
return !this.isFinished(otherHandler.state) && this.shouldHandlerWaitForOther(handler, otherHandler);
|
78
78
|
};
|
79
79
|
|
80
80
|
return this.gestureHandlers.some(hasToWaitFor);
|
@@ -82,7 +82,7 @@ class GestureHandlerOrchestrator {
|
|
82
82
|
|
83
83
|
shouldBeCancelledByFinishedHandler(handler) {
|
84
84
|
const shouldBeCancelled = otherHandler => {
|
85
|
-
return this.shouldHandlerWaitForOther(handler, otherHandler) && otherHandler.
|
85
|
+
return this.shouldHandlerWaitForOther(handler, otherHandler) && otherHandler.state === _State.State.END;
|
86
86
|
};
|
87
87
|
|
88
88
|
return this.gestureHandlers.some(shouldBeCancelled);
|
@@ -99,7 +99,7 @@ class GestureHandlerOrchestrator {
|
|
99
99
|
return;
|
100
100
|
}
|
101
101
|
|
102
|
-
const handlerState = handler.
|
102
|
+
const handlerState = handler.state;
|
103
103
|
|
104
104
|
if (handlerState === _State.State.CANCELLED || handlerState === _State.State.FAILED) {
|
105
105
|
return;
|
@@ -130,21 +130,21 @@ class GestureHandlerOrchestrator {
|
|
130
130
|
|
131
131
|
cleanupAwaitingHandlers(handler) {
|
132
132
|
const shouldWait = otherHandler => {
|
133
|
-
return !otherHandler.
|
133
|
+
return !otherHandler.awaiting && this.shouldHandlerWaitForOther(otherHandler, handler);
|
134
134
|
};
|
135
135
|
|
136
136
|
for (const otherHandler of this.awaitingHandlers) {
|
137
137
|
if (shouldWait(otherHandler)) {
|
138
138
|
this.cleanHandler(otherHandler);
|
139
|
-
this.awaitingHandlersTags.delete(otherHandler.
|
139
|
+
this.awaitingHandlersTags.delete(otherHandler.handlerTag);
|
140
140
|
}
|
141
141
|
}
|
142
142
|
|
143
|
-
this.awaitingHandlers = this.awaitingHandlers.filter(otherHandler => this.awaitingHandlersTags.has(otherHandler.
|
143
|
+
this.awaitingHandlers = this.awaitingHandlers.filter(otherHandler => this.awaitingHandlersTags.has(otherHandler.handlerTag));
|
144
144
|
}
|
145
145
|
|
146
146
|
onHandlerStateChange(handler, newState, oldState, sendIfDisabled) {
|
147
|
-
if (!handler.
|
147
|
+
if (!handler.enabled && !sendIfDisabled) {
|
148
148
|
return;
|
149
149
|
}
|
150
150
|
|
@@ -152,7 +152,7 @@ class GestureHandlerOrchestrator {
|
|
152
152
|
|
153
153
|
if (this.isFinished(newState)) {
|
154
154
|
for (const otherHandler of this.awaitingHandlers) {
|
155
|
-
if (!this.shouldHandlerWaitForOther(otherHandler, handler) || !this.awaitingHandlersTags.has(otherHandler.
|
155
|
+
if (!this.shouldHandlerWaitForOther(otherHandler, handler) || !this.awaitingHandlersTags.has(otherHandler.handlerTag)) {
|
156
156
|
continue;
|
157
157
|
}
|
158
158
|
|
@@ -163,7 +163,7 @@ class GestureHandlerOrchestrator {
|
|
163
163
|
|
164
164
|
otherHandler.cancel();
|
165
165
|
|
166
|
-
if (otherHandler.
|
166
|
+
if (otherHandler.state === _State.State.END) {
|
167
167
|
// Handle edge case, where discrete gestures end immediately after activation thus
|
168
168
|
// their state is set to END and when the gesture they are waiting for activates they
|
169
169
|
// should be cancelled, however `cancel` was never sent as gestures were already in the END state.
|
@@ -171,14 +171,14 @@ class GestureHandlerOrchestrator {
|
|
171
171
|
otherHandler.sendEvent(_State.State.CANCELLED, _State.State.BEGAN);
|
172
172
|
}
|
173
173
|
|
174
|
-
otherHandler.
|
174
|
+
otherHandler.awaiting = false;
|
175
175
|
}
|
176
176
|
}
|
177
177
|
|
178
178
|
if (newState === _State.State.ACTIVE) {
|
179
179
|
this.tryActivate(handler);
|
180
180
|
} else if (oldState === _State.State.ACTIVE || oldState === _State.State.END) {
|
181
|
-
if (handler.
|
181
|
+
if (handler.active) {
|
182
182
|
handler.sendEvent(newState, oldState);
|
183
183
|
} else if (oldState === _State.State.ACTIVE && (newState === _State.State.CANCELLED || newState === _State.State.FAILED)) {
|
184
184
|
handler.sendEvent(newState, _State.State.BEGAN);
|
@@ -196,10 +196,10 @@ class GestureHandlerOrchestrator {
|
|
196
196
|
}
|
197
197
|
|
198
198
|
makeActive(handler) {
|
199
|
-
const currentState = handler.
|
200
|
-
handler.
|
201
|
-
handler.
|
202
|
-
handler.
|
199
|
+
const currentState = handler.state;
|
200
|
+
handler.active = true;
|
201
|
+
handler.shouldResetProgress = true;
|
202
|
+
handler.activationIndex = this.activationIndex++;
|
203
203
|
|
204
204
|
for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
|
205
205
|
if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {
|
@@ -209,7 +209,7 @@ class GestureHandlerOrchestrator {
|
|
209
209
|
|
210
210
|
for (const otherHandler of this.awaitingHandlers) {
|
211
211
|
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
212
|
-
otherHandler.
|
212
|
+
otherHandler.awaiting = false;
|
213
213
|
}
|
214
214
|
}
|
215
215
|
|
@@ -223,11 +223,11 @@ class GestureHandlerOrchestrator {
|
|
223
223
|
}
|
224
224
|
}
|
225
225
|
|
226
|
-
if (!handler.
|
226
|
+
if (!handler.awaiting) {
|
227
227
|
return;
|
228
228
|
}
|
229
229
|
|
230
|
-
handler.
|
230
|
+
handler.awaiting = false;
|
231
231
|
this.awaitingHandlers = this.awaitingHandlers.filter(otherHandler => otherHandler !== handler);
|
232
232
|
}
|
233
233
|
|
@@ -237,9 +237,9 @@ class GestureHandlerOrchestrator {
|
|
237
237
|
}
|
238
238
|
|
239
239
|
this.awaitingHandlers.push(handler);
|
240
|
-
this.awaitingHandlersTags.add(handler.
|
241
|
-
handler.
|
242
|
-
handler.
|
240
|
+
this.awaitingHandlersTags.add(handler.handlerTag);
|
241
|
+
handler.awaiting = true;
|
242
|
+
handler.activationIndex = this.activationIndex++;
|
243
243
|
}
|
244
244
|
|
245
245
|
recordHandlerIfNotPresent(handler) {
|
@@ -248,9 +248,9 @@ class GestureHandlerOrchestrator {
|
|
248
248
|
}
|
249
249
|
|
250
250
|
this.gestureHandlers.push(handler);
|
251
|
-
handler.
|
252
|
-
handler.
|
253
|
-
handler.
|
251
|
+
handler.active = false;
|
252
|
+
handler.awaiting = false;
|
253
|
+
handler.activationIndex = Number.MAX_SAFE_INTEGER;
|
254
254
|
}
|
255
255
|
|
256
256
|
shouldHandlerWaitForOther(handler, otherHandler) {
|
@@ -266,7 +266,7 @@ class GestureHandlerOrchestrator {
|
|
266
266
|
return false;
|
267
267
|
}
|
268
268
|
|
269
|
-
if (handler.
|
269
|
+
if (handler.awaiting || handler.state === _State.State.ACTIVE) {
|
270
270
|
// For now it always returns false
|
271
271
|
return handler.shouldBeCancelledByOther(otherHandler);
|
272
272
|
}
|
@@ -274,7 +274,7 @@ class GestureHandlerOrchestrator {
|
|
274
274
|
const handlerPointers = handler.getTrackedPointersID();
|
275
275
|
const otherPointers = otherHandler.getTrackedPointersID();
|
276
276
|
|
277
|
-
if (!_PointerTracker.default.shareCommonPointers(handlerPointers, otherPointers) && handler.
|
277
|
+
if (!_PointerTracker.default.shareCommonPointers(handlerPointers, otherPointers) && handler.delegate.view !== otherHandler.delegate.view) {
|
278
278
|
return this.checkOverlap(handler, otherHandler);
|
279
279
|
}
|
280
280
|
|
@@ -287,8 +287,8 @@ class GestureHandlerOrchestrator {
|
|
287
287
|
// This solves issue in overlapping parents example
|
288
288
|
// TODO: Find better way to handle that issue, for example by activation order and handler cancelling
|
289
289
|
const isPointerWithinBothBounds = pointer => {
|
290
|
-
const point = handler.
|
291
|
-
return handler.
|
290
|
+
const point = handler.tracker.getLastAbsoluteCoords(pointer);
|
291
|
+
return handler.delegate.isPointerInBounds(point) && otherHandler.delegate.isPointerInBounds(point);
|
292
292
|
};
|
293
293
|
|
294
294
|
return handler.getTrackedPointersID().some(isPointerWithinBothBounds);
|
@@ -306,7 +306,7 @@ class GestureHandlerOrchestrator {
|
|
306
306
|
|
307
307
|
cancelMouseAndPenGestures(currentHandler) {
|
308
308
|
this.gestureHandlers.forEach(handler => {
|
309
|
-
if (handler.
|
309
|
+
if (handler.pointerType !== _PointerType.PointerType.MOUSE && handler.pointerType !== _PointerType.PointerType.STYLUS) {
|
310
310
|
return;
|
311
311
|
}
|
312
312
|
|
@@ -320,22 +320,22 @@ class GestureHandlerOrchestrator {
|
|
320
320
|
//
|
321
321
|
// However, handler will receive manually created onPointerEnter that is triggered in EventManager in onPointerMove method.
|
322
322
|
// There may be possibility to use that fact to make handler respond properly to first mouse click
|
323
|
-
handler.
|
323
|
+
handler.tracker.resetTracker();
|
324
324
|
}
|
325
325
|
});
|
326
326
|
}
|
327
327
|
|
328
|
-
static
|
329
|
-
if (!GestureHandlerOrchestrator.
|
330
|
-
GestureHandlerOrchestrator.
|
328
|
+
static get instance() {
|
329
|
+
if (!GestureHandlerOrchestrator._instance) {
|
330
|
+
GestureHandlerOrchestrator._instance = new GestureHandlerOrchestrator();
|
331
331
|
}
|
332
332
|
|
333
|
-
return GestureHandlerOrchestrator.
|
333
|
+
return GestureHandlerOrchestrator._instance;
|
334
334
|
}
|
335
335
|
|
336
336
|
}
|
337
337
|
|
338
338
|
exports.default = GestureHandlerOrchestrator;
|
339
339
|
|
340
|
-
_defineProperty(GestureHandlerOrchestrator, "
|
340
|
+
_defineProperty(GestureHandlerOrchestrator, "_instance", void 0);
|
341
341
|
//# sourceMappingURL=GestureHandlerOrchestrator.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureHandlerOrchestrator.ts"],"names":["GestureHandlerOrchestrator","constructor","Set","scheduleFinishedHandlersCleanup","handlingChangeSemaphore","cleanupFinishedHandlers","cleanHandler","handler","reset","setActive","setAwaiting","setActivationIndex","Number","MAX_VALUE","removeHandlerFromOrchestrator","indexInGestureHandlers","gestureHandlers","indexOf","indexInAwaitingHandlers","awaitingHandlers","splice","awaitingHandlersTags","delete","getTag","handlersToRemove","i","length","isFinished","getState","isAwaiting","add","filter","has","hasOtherHandlerToWaitFor","hasToWaitFor","otherHandler","shouldHandlerWaitForOther","some","shouldBeCancelledByFinishedHandler","shouldBeCancelled","State","END","tryActivate","cancel","addAwaitingHandler","handlerState","CANCELLED","FAILED","shouldActivate","makeActive","ACTIVE","fail","BEGAN","shouldBeCancelledBy","shouldHandlerBeCancelledBy","cleanupAwaitingHandlers","shouldWait","onHandlerStateChange","newState","oldState","sendIfDisabled","isEnabled","sendEvent","isActive","UNDETERMINED","includes","currentState","setShouldResetProgress","activationIndex","push","recordHandlerIfNotPresent","MAX_SAFE_INTEGER","shouldWaitForHandlerFailure","shouldRequireToWaitForFailure","canRunSimultaneously","gh1","gh2","shouldRecognizeSimultaneously","shouldBeCancelledByOther","handlerPointers","getTrackedPointersID","otherPointers","PointerTracker","shareCommonPointers","getDelegate","getView","checkOverlap","isPointerWithinBothBounds","pointer","point","getTracker","getLastAbsoluteCoords","isPointerInBounds","state","cancelMouseAndPenGestures","currentHandler","forEach","getPointerType","PointerType","MOUSE","STYLUS","resetTracker","getInstance","instance"],"mappings":"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","sourcesContent":["import { PointerType } from '../../PointerType';\nimport { State } from '../../State';\n\nimport type IGestureHandler from '../handlers/IGestureHandler';\nimport PointerTracker from './PointerTracker';\n\nexport default class GestureHandlerOrchestrator {\n private static instance: GestureHandlerOrchestrator;\n\n private gestureHandlers: IGestureHandler[] = [];\n private awaitingHandlers: IGestureHandler[] = [];\n private awaitingHandlersTags: Set<number> = new Set();\n\n private handlingChangeSemaphore = 0;\n private activationIndex = 0;\n\n // Private beacuse of Singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n private scheduleFinishedHandlersCleanup(): void {\n if (this.handlingChangeSemaphore === 0) {\n this.cleanupFinishedHandlers();\n }\n }\n\n private cleanHandler(handler: IGestureHandler): void {\n handler.reset();\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_VALUE);\n }\n\n public removeHandlerFromOrchestrator(handler: IGestureHandler): void {\n const indexInGestureHandlers = this.gestureHandlers.indexOf(handler);\n const indexInAwaitingHandlers = this.awaitingHandlers.indexOf(handler);\n\n if (indexInGestureHandlers >= 0) {\n this.gestureHandlers.splice(indexInGestureHandlers, 1);\n }\n\n if (indexInAwaitingHandlers >= 0) {\n this.awaitingHandlers.splice(indexInAwaitingHandlers, 1);\n this.awaitingHandlersTags.delete(handler.getTag());\n }\n }\n\n private cleanupFinishedHandlers(): void {\n const handlersToRemove = new Set<IGestureHandler>();\n\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n const handler = this.gestureHandlers[i];\n\n if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {\n this.cleanHandler(handler);\n handlersToRemove.add(handler);\n }\n }\n\n this.gestureHandlers = this.gestureHandlers.filter(\n (handler) => !handlersToRemove.has(handler)\n );\n }\n\n private hasOtherHandlerToWaitFor(handler: IGestureHandler): boolean {\n const hasToWaitFor = (otherHandler: IGestureHandler) => {\n return (\n !this.isFinished(otherHandler.getState()) &&\n this.shouldHandlerWaitForOther(handler, otherHandler)\n );\n };\n\n return this.gestureHandlers.some(hasToWaitFor);\n }\n\n private shouldBeCancelledByFinishedHandler(\n handler: IGestureHandler\n ): boolean {\n const shouldBeCancelled = (otherHandler: IGestureHandler) => {\n return (\n this.shouldHandlerWaitForOther(handler, otherHandler) &&\n otherHandler.getState() === State.END\n );\n };\n\n return this.gestureHandlers.some(shouldBeCancelled);\n }\n\n private tryActivate(handler: IGestureHandler): void {\n if (this.shouldBeCancelledByFinishedHandler(handler)) {\n handler.cancel();\n return;\n }\n\n if (this.hasOtherHandlerToWaitFor(handler)) {\n this.addAwaitingHandler(handler);\n return;\n }\n\n const handlerState = handler.getState();\n\n if (handlerState === State.CANCELLED || handlerState === State.FAILED) {\n return;\n }\n\n if (this.shouldActivate(handler)) {\n this.makeActive(handler);\n return;\n }\n\n if (handlerState === State.ACTIVE) {\n handler.fail();\n return;\n }\n\n if (handlerState === State.BEGAN) {\n handler.cancel();\n }\n }\n\n private shouldActivate(handler: IGestureHandler): boolean {\n const shouldBeCancelledBy = (otherHandler: IGestureHandler) => {\n return this.shouldHandlerBeCancelledBy(handler, otherHandler);\n };\n\n return !this.gestureHandlers.some(shouldBeCancelledBy);\n }\n\n private cleanupAwaitingHandlers(handler: IGestureHandler): void {\n const shouldWait = (otherHandler: IGestureHandler) => {\n return (\n !otherHandler.isAwaiting() &&\n this.shouldHandlerWaitForOther(otherHandler, handler)\n );\n };\n\n for (const otherHandler of this.awaitingHandlers) {\n if (shouldWait(otherHandler)) {\n this.cleanHandler(otherHandler);\n this.awaitingHandlersTags.delete(otherHandler.getTag());\n }\n }\n\n this.awaitingHandlers = this.awaitingHandlers.filter((otherHandler) =>\n this.awaitingHandlersTags.has(otherHandler.getTag())\n );\n }\n\n public onHandlerStateChange(\n handler: IGestureHandler,\n newState: State,\n oldState: State,\n sendIfDisabled?: boolean\n ): void {\n if (!handler.isEnabled() && !sendIfDisabled) {\n return;\n }\n\n this.handlingChangeSemaphore += 1;\n\n if (this.isFinished(newState)) {\n for (const otherHandler of this.awaitingHandlers) {\n if (\n !this.shouldHandlerWaitForOther(otherHandler, handler) ||\n !this.awaitingHandlersTags.has(otherHandler.getTag())\n ) {\n continue;\n }\n\n if (newState !== State.END) {\n this.tryActivate(otherHandler);\n continue;\n }\n\n otherHandler.cancel();\n\n if (otherHandler.getState() === State.END) {\n // Handle edge case, where discrete gestures end immediately after activation thus\n // their state is set to END and when the gesture they are waiting for activates they\n // should be cancelled, however `cancel` was never sent as gestures were already in the END state.\n // Send synthetic BEGAN -> CANCELLED to properly handle JS logic\n otherHandler.sendEvent(State.CANCELLED, State.BEGAN);\n }\n\n otherHandler.setAwaiting(false);\n }\n }\n\n if (newState === State.ACTIVE) {\n this.tryActivate(handler);\n } else if (oldState === State.ACTIVE || oldState === State.END) {\n if (handler.isActive()) {\n handler.sendEvent(newState, oldState);\n } else if (\n oldState === State.ACTIVE &&\n (newState === State.CANCELLED || newState === State.FAILED)\n ) {\n handler.sendEvent(newState, State.BEGAN);\n }\n } else if (\n oldState !== State.UNDETERMINED ||\n newState !== State.CANCELLED\n ) {\n handler.sendEvent(newState, oldState);\n }\n\n this.handlingChangeSemaphore -= 1;\n\n this.scheduleFinishedHandlersCleanup();\n\n if (!this.awaitingHandlers.includes(handler)) {\n this.cleanupAwaitingHandlers(handler);\n }\n }\n\n private makeActive(handler: IGestureHandler): void {\n const currentState = handler.getState();\n\n handler.setActive(true);\n handler.setShouldResetProgress(true);\n handler.setActivationIndex(this.activationIndex++);\n\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {\n this.gestureHandlers[i].cancel();\n }\n }\n\n for (const otherHandler of this.awaitingHandlers) {\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n otherHandler.setAwaiting(false);\n }\n }\n\n handler.sendEvent(State.ACTIVE, State.BEGAN);\n\n if (currentState !== State.ACTIVE) {\n handler.sendEvent(State.END, State.ACTIVE);\n if (currentState !== State.END) {\n handler.sendEvent(State.UNDETERMINED, State.END);\n }\n }\n\n if (!handler.isAwaiting()) {\n return;\n }\n\n handler.setAwaiting(false);\n\n this.awaitingHandlers = this.awaitingHandlers.filter(\n (otherHandler) => otherHandler !== handler\n );\n }\n\n private addAwaitingHandler(handler: IGestureHandler): void {\n if (this.awaitingHandlers.includes(handler)) {\n return;\n }\n\n this.awaitingHandlers.push(handler);\n this.awaitingHandlersTags.add(handler.getTag());\n\n handler.setAwaiting(true);\n handler.setActivationIndex(this.activationIndex++);\n }\n\n public recordHandlerIfNotPresent(handler: IGestureHandler): void {\n if (this.gestureHandlers.includes(handler)) {\n return;\n }\n\n this.gestureHandlers.push(handler);\n\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_SAFE_INTEGER);\n }\n\n private shouldHandlerWaitForOther(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n return (\n handler !== otherHandler &&\n (handler.shouldWaitForHandlerFailure(otherHandler) ||\n otherHandler.shouldRequireToWaitForFailure(handler))\n );\n }\n\n private canRunSimultaneously(\n gh1: IGestureHandler,\n gh2: IGestureHandler\n ): boolean {\n return (\n gh1 === gh2 ||\n gh1.shouldRecognizeSimultaneously(gh2) ||\n gh2.shouldRecognizeSimultaneously(gh1)\n );\n }\n\n private shouldHandlerBeCancelledBy(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n if (this.canRunSimultaneously(handler, otherHandler)) {\n return false;\n }\n\n if (handler.isAwaiting() || handler.getState() === State.ACTIVE) {\n // For now it always returns false\n return handler.shouldBeCancelledByOther(otherHandler);\n }\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n if (\n !PointerTracker.shareCommonPointers(handlerPointers, otherPointers) &&\n handler.getDelegate().getView() !== otherHandler.getDelegate().getView()\n ) {\n return this.checkOverlap(handler, otherHandler);\n }\n\n return true;\n }\n\n private checkOverlap(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n // If handlers don't have common pointers, default return value is false.\n // However, if at least on pointer overlaps with both handlers, we return true\n // This solves issue in overlapping parents example\n\n // TODO: Find better way to handle that issue, for example by activation order and handler cancelling\n\n const isPointerWithinBothBounds = (pointer: number) => {\n const point = handler.getTracker().getLastAbsoluteCoords(pointer);\n\n return (\n handler.getDelegate().isPointerInBounds(point) &&\n otherHandler.getDelegate().isPointerInBounds(point)\n );\n };\n\n return handler.getTrackedPointersID().some(isPointerWithinBothBounds);\n }\n\n private isFinished(state: State): boolean {\n return (\n state === State.END || state === State.FAILED || state === State.CANCELLED\n );\n }\n\n // This function is called when handler receives touchdown event\n // If handler is using mouse or pen as a pointer and any handler receives touch event,\n // mouse/pen event dissappears - it doesn't send onPointerCancel nor onPointerUp (and others)\n // This became a problem because handler was left at active state without any signal to end or fail\n // To handle this, when new touch event is received, we loop through active handlers and check which type of\n // pointer they're using. If there are any handler with mouse/pen as a pointer, we cancel them\n public cancelMouseAndPenGestures(currentHandler: IGestureHandler): void {\n this.gestureHandlers.forEach((handler: IGestureHandler) => {\n if (\n handler.getPointerType() !== PointerType.MOUSE &&\n handler.getPointerType() !== PointerType.STYLUS\n ) {\n return;\n }\n\n if (handler !== currentHandler) {\n handler.cancel();\n } else {\n // Handler that received touch event should have its pointer tracker reset\n // This allows handler to smoothly change from mouse/pen to touch\n // The drawback is, that when we try to use mouse/pen one more time, it doesn't send onPointerDown at the first time\n // so it is required to click two times to get handler to work\n //\n // However, handler will receive manually created onPointerEnter that is triggered in EventManager in onPointerMove method.\n // There may be possibility to use that fact to make handler respond properly to first mouse click\n handler.getTracker().resetTracker();\n }\n });\n }\n\n public static getInstance(): GestureHandlerOrchestrator {\n if (!GestureHandlerOrchestrator.instance) {\n GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();\n }\n\n return GestureHandlerOrchestrator.instance;\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["GestureHandlerOrchestrator.ts"],"names":["GestureHandlerOrchestrator","constructor","Set","scheduleFinishedHandlersCleanup","handlingChangeSemaphore","cleanupFinishedHandlers","cleanHandler","handler","reset","active","awaiting","activationIndex","Number","MAX_VALUE","removeHandlerFromOrchestrator","indexInGestureHandlers","gestureHandlers","indexOf","indexInAwaitingHandlers","awaitingHandlers","splice","awaitingHandlersTags","delete","handlerTag","handlersToRemove","i","length","isFinished","state","add","filter","has","hasOtherHandlerToWaitFor","hasToWaitFor","otherHandler","shouldHandlerWaitForOther","some","shouldBeCancelledByFinishedHandler","shouldBeCancelled","State","END","tryActivate","cancel","addAwaitingHandler","handlerState","CANCELLED","FAILED","shouldActivate","makeActive","ACTIVE","fail","BEGAN","shouldBeCancelledBy","shouldHandlerBeCancelledBy","cleanupAwaitingHandlers","shouldWait","onHandlerStateChange","newState","oldState","sendIfDisabled","enabled","sendEvent","UNDETERMINED","includes","currentState","shouldResetProgress","push","recordHandlerIfNotPresent","MAX_SAFE_INTEGER","shouldWaitForHandlerFailure","shouldRequireToWaitForFailure","canRunSimultaneously","gh1","gh2","shouldRecognizeSimultaneously","shouldBeCancelledByOther","handlerPointers","getTrackedPointersID","otherPointers","PointerTracker","shareCommonPointers","delegate","view","checkOverlap","isPointerWithinBothBounds","pointer","point","tracker","getLastAbsoluteCoords","isPointerInBounds","cancelMouseAndPenGestures","currentHandler","forEach","pointerType","PointerType","MOUSE","STYLUS","resetTracker","instance","_instance"],"mappings":"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","sourcesContent":["import { PointerType } from '../../PointerType';\nimport { State } from '../../State';\n\nimport type IGestureHandler from '../handlers/IGestureHandler';\nimport PointerTracker from './PointerTracker';\n\nexport default class GestureHandlerOrchestrator {\n private static _instance: GestureHandlerOrchestrator;\n\n private gestureHandlers: IGestureHandler[] = [];\n private awaitingHandlers: IGestureHandler[] = [];\n private awaitingHandlersTags: Set<number> = new Set();\n\n private handlingChangeSemaphore = 0;\n private activationIndex = 0;\n\n // Private beacuse of Singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n private scheduleFinishedHandlersCleanup(): void {\n if (this.handlingChangeSemaphore === 0) {\n this.cleanupFinishedHandlers();\n }\n }\n\n private cleanHandler(handler: IGestureHandler): void {\n handler.reset();\n handler.active = false;\n handler.awaiting = false;\n handler.activationIndex = Number.MAX_VALUE;\n }\n\n public removeHandlerFromOrchestrator(handler: IGestureHandler): void {\n const indexInGestureHandlers = this.gestureHandlers.indexOf(handler);\n const indexInAwaitingHandlers = this.awaitingHandlers.indexOf(handler);\n\n if (indexInGestureHandlers >= 0) {\n this.gestureHandlers.splice(indexInGestureHandlers, 1);\n }\n\n if (indexInAwaitingHandlers >= 0) {\n this.awaitingHandlers.splice(indexInAwaitingHandlers, 1);\n this.awaitingHandlersTags.delete(handler.handlerTag);\n }\n }\n\n private cleanupFinishedHandlers(): void {\n const handlersToRemove = new Set<IGestureHandler>();\n\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n const handler = this.gestureHandlers[i];\n\n if (this.isFinished(handler.state) && !handler.awaiting) {\n this.cleanHandler(handler);\n handlersToRemove.add(handler);\n }\n }\n\n this.gestureHandlers = this.gestureHandlers.filter(\n (handler) => !handlersToRemove.has(handler)\n );\n }\n\n private hasOtherHandlerToWaitFor(handler: IGestureHandler): boolean {\n const hasToWaitFor = (otherHandler: IGestureHandler) => {\n return (\n !this.isFinished(otherHandler.state) &&\n this.shouldHandlerWaitForOther(handler, otherHandler)\n );\n };\n\n return this.gestureHandlers.some(hasToWaitFor);\n }\n\n private shouldBeCancelledByFinishedHandler(\n handler: IGestureHandler\n ): boolean {\n const shouldBeCancelled = (otherHandler: IGestureHandler) => {\n return (\n this.shouldHandlerWaitForOther(handler, otherHandler) &&\n otherHandler.state === State.END\n );\n };\n\n return this.gestureHandlers.some(shouldBeCancelled);\n }\n\n private tryActivate(handler: IGestureHandler): void {\n if (this.shouldBeCancelledByFinishedHandler(handler)) {\n handler.cancel();\n return;\n }\n\n if (this.hasOtherHandlerToWaitFor(handler)) {\n this.addAwaitingHandler(handler);\n return;\n }\n\n const handlerState = handler.state;\n\n if (handlerState === State.CANCELLED || handlerState === State.FAILED) {\n return;\n }\n\n if (this.shouldActivate(handler)) {\n this.makeActive(handler);\n return;\n }\n\n if (handlerState === State.ACTIVE) {\n handler.fail();\n return;\n }\n\n if (handlerState === State.BEGAN) {\n handler.cancel();\n }\n }\n\n private shouldActivate(handler: IGestureHandler): boolean {\n const shouldBeCancelledBy = (otherHandler: IGestureHandler) => {\n return this.shouldHandlerBeCancelledBy(handler, otherHandler);\n };\n\n return !this.gestureHandlers.some(shouldBeCancelledBy);\n }\n\n private cleanupAwaitingHandlers(handler: IGestureHandler): void {\n const shouldWait = (otherHandler: IGestureHandler) => {\n return (\n !otherHandler.awaiting &&\n this.shouldHandlerWaitForOther(otherHandler, handler)\n );\n };\n\n for (const otherHandler of this.awaitingHandlers) {\n if (shouldWait(otherHandler)) {\n this.cleanHandler(otherHandler);\n this.awaitingHandlersTags.delete(otherHandler.handlerTag);\n }\n }\n\n this.awaitingHandlers = this.awaitingHandlers.filter((otherHandler) =>\n this.awaitingHandlersTags.has(otherHandler.handlerTag)\n );\n }\n\n public onHandlerStateChange(\n handler: IGestureHandler,\n newState: State,\n oldState: State,\n sendIfDisabled?: boolean\n ): void {\n if (!handler.enabled && !sendIfDisabled) {\n return;\n }\n\n this.handlingChangeSemaphore += 1;\n\n if (this.isFinished(newState)) {\n for (const otherHandler of this.awaitingHandlers) {\n if (\n !this.shouldHandlerWaitForOther(otherHandler, handler) ||\n !this.awaitingHandlersTags.has(otherHandler.handlerTag)\n ) {\n continue;\n }\n\n if (newState !== State.END) {\n this.tryActivate(otherHandler);\n continue;\n }\n\n otherHandler.cancel();\n\n if (otherHandler.state === State.END) {\n // Handle edge case, where discrete gestures end immediately after activation thus\n // their state is set to END and when the gesture they are waiting for activates they\n // should be cancelled, however `cancel` was never sent as gestures were already in the END state.\n // Send synthetic BEGAN -> CANCELLED to properly handle JS logic\n otherHandler.sendEvent(State.CANCELLED, State.BEGAN);\n }\n\n otherHandler.awaiting = false;\n }\n }\n\n if (newState === State.ACTIVE) {\n this.tryActivate(handler);\n } else if (oldState === State.ACTIVE || oldState === State.END) {\n if (handler.active) {\n handler.sendEvent(newState, oldState);\n } else if (\n oldState === State.ACTIVE &&\n (newState === State.CANCELLED || newState === State.FAILED)\n ) {\n handler.sendEvent(newState, State.BEGAN);\n }\n } else if (\n oldState !== State.UNDETERMINED ||\n newState !== State.CANCELLED\n ) {\n handler.sendEvent(newState, oldState);\n }\n\n this.handlingChangeSemaphore -= 1;\n\n this.scheduleFinishedHandlersCleanup();\n\n if (!this.awaitingHandlers.includes(handler)) {\n this.cleanupAwaitingHandlers(handler);\n }\n }\n\n private makeActive(handler: IGestureHandler): void {\n const currentState = handler.state;\n\n handler.active = true;\n handler.shouldResetProgress = true;\n handler.activationIndex = this.activationIndex++;\n\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {\n this.gestureHandlers[i].cancel();\n }\n }\n\n for (const otherHandler of this.awaitingHandlers) {\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n otherHandler.awaiting = false;\n }\n }\n\n handler.sendEvent(State.ACTIVE, State.BEGAN);\n\n if (currentState !== State.ACTIVE) {\n handler.sendEvent(State.END, State.ACTIVE);\n if (currentState !== State.END) {\n handler.sendEvent(State.UNDETERMINED, State.END);\n }\n }\n\n if (!handler.awaiting) {\n return;\n }\n\n handler.awaiting = false;\n\n this.awaitingHandlers = this.awaitingHandlers.filter(\n (otherHandler) => otherHandler !== handler\n );\n }\n\n private addAwaitingHandler(handler: IGestureHandler): void {\n if (this.awaitingHandlers.includes(handler)) {\n return;\n }\n\n this.awaitingHandlers.push(handler);\n this.awaitingHandlersTags.add(handler.handlerTag);\n\n handler.awaiting = true;\n handler.activationIndex = this.activationIndex++;\n }\n\n public recordHandlerIfNotPresent(handler: IGestureHandler): void {\n if (this.gestureHandlers.includes(handler)) {\n return;\n }\n\n this.gestureHandlers.push(handler);\n\n handler.active = false;\n handler.awaiting = false;\n handler.activationIndex = Number.MAX_SAFE_INTEGER;\n }\n\n private shouldHandlerWaitForOther(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n return (\n handler !== otherHandler &&\n (handler.shouldWaitForHandlerFailure(otherHandler) ||\n otherHandler.shouldRequireToWaitForFailure(handler))\n );\n }\n\n private canRunSimultaneously(\n gh1: IGestureHandler,\n gh2: IGestureHandler\n ): boolean {\n return (\n gh1 === gh2 ||\n gh1.shouldRecognizeSimultaneously(gh2) ||\n gh2.shouldRecognizeSimultaneously(gh1)\n );\n }\n\n private shouldHandlerBeCancelledBy(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n if (this.canRunSimultaneously(handler, otherHandler)) {\n return false;\n }\n\n if (handler.awaiting || handler.state === State.ACTIVE) {\n // For now it always returns false\n return handler.shouldBeCancelledByOther(otherHandler);\n }\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n if (\n !PointerTracker.shareCommonPointers(handlerPointers, otherPointers) &&\n handler.delegate.view !== otherHandler.delegate.view\n ) {\n return this.checkOverlap(handler, otherHandler);\n }\n\n return true;\n }\n\n private checkOverlap(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n // If handlers don't have common pointers, default return value is false.\n // However, if at least on pointer overlaps with both handlers, we return true\n // This solves issue in overlapping parents example\n\n // TODO: Find better way to handle that issue, for example by activation order and handler cancelling\n\n const isPointerWithinBothBounds = (pointer: number) => {\n const point = handler.tracker.getLastAbsoluteCoords(pointer);\n\n return (\n handler.delegate.isPointerInBounds(point) &&\n otherHandler.delegate.isPointerInBounds(point)\n );\n };\n\n return handler.getTrackedPointersID().some(isPointerWithinBothBounds);\n }\n\n private isFinished(state: State): boolean {\n return (\n state === State.END || state === State.FAILED || state === State.CANCELLED\n );\n }\n\n // This function is called when handler receives touchdown event\n // If handler is using mouse or pen as a pointer and any handler receives touch event,\n // mouse/pen event dissappears - it doesn't send onPointerCancel nor onPointerUp (and others)\n // This became a problem because handler was left at active state without any signal to end or fail\n // To handle this, when new touch event is received, we loop through active handlers and check which type of\n // pointer they're using. If there are any handler with mouse/pen as a pointer, we cancel them\n public cancelMouseAndPenGestures(currentHandler: IGestureHandler): void {\n this.gestureHandlers.forEach((handler: IGestureHandler) => {\n if (\n handler.pointerType !== PointerType.MOUSE &&\n handler.pointerType !== PointerType.STYLUS\n ) {\n return;\n }\n\n if (handler !== currentHandler) {\n handler.cancel();\n } else {\n // Handler that received touch event should have its pointer tracker reset\n // This allows handler to smoothly change from mouse/pen to touch\n // The drawback is, that when we try to use mouse/pen one more time, it doesn't send onPointerDown at the first time\n // so it is required to click two times to get handler to work\n //\n // However, handler will receive manually created onPointerEnter that is triggered in EventManager in onPointerMove method.\n // There may be possibility to use that fact to make handler respond properly to first mouse click\n handler.tracker.resetTracker();\n }\n });\n }\n\n public static get instance(): GestureHandlerOrchestrator {\n if (!GestureHandlerOrchestrator._instance) {\n GestureHandlerOrchestrator._instance = new GestureHandlerOrchestrator();\n }\n\n return GestureHandlerOrchestrator._instance;\n }\n}\n"]}
|
@@ -27,7 +27,7 @@ class GestureHandlerWebDelegate {
|
|
27
27
|
constructor() {
|
28
28
|
_defineProperty(this, "isInitialized", false);
|
29
29
|
|
30
|
-
_defineProperty(this, "
|
30
|
+
_defineProperty(this, "_view", void 0);
|
31
31
|
|
32
32
|
_defineProperty(this, "gestureHandler", void 0);
|
33
33
|
|
@@ -39,13 +39,9 @@ class GestureHandlerWebDelegate {
|
|
39
39
|
});
|
40
40
|
}
|
41
41
|
|
42
|
-
getView() {
|
43
|
-
return this.view;
|
44
|
-
}
|
45
|
-
|
46
42
|
init(viewRef, handler) {
|
47
43
|
if (!viewRef) {
|
48
|
-
throw new Error(`Cannot find HTML Element for handler ${handler.
|
44
|
+
throw new Error(`Cannot find HTML Element for handler ${handler.handlerTag}`);
|
49
45
|
}
|
50
46
|
|
51
47
|
this.isInitialized = true;
|
@@ -55,7 +51,7 @@ class GestureHandlerWebDelegate {
|
|
55
51
|
userSelect: this.view.style.userSelect,
|
56
52
|
touchAction: this.view.style.touchAction
|
57
53
|
};
|
58
|
-
const config = handler.
|
54
|
+
const config = handler.config;
|
59
55
|
this.setUserSelect(config.enabled);
|
60
56
|
this.setTouchAction(config.enabled);
|
61
57
|
this.setContextMenu(config.enabled);
|
@@ -90,9 +86,9 @@ class GestureHandlerWebDelegate {
|
|
90
86
|
}
|
91
87
|
|
92
88
|
tryResetCursor() {
|
93
|
-
const config = this.gestureHandler.
|
89
|
+
const config = this.gestureHandler.config;
|
94
90
|
|
95
|
-
if (config.activeCursor && config.activeCursor !== 'auto' && this.gestureHandler.
|
91
|
+
if (config.activeCursor && config.activeCursor !== 'auto' && this.gestureHandler.state === _State.State.ACTIVE) {
|
96
92
|
this.view.style.cursor = 'auto';
|
97
93
|
}
|
98
94
|
}
|
@@ -128,7 +124,7 @@ class GestureHandlerWebDelegate {
|
|
128
124
|
setUserSelect(isHandlerEnabled) {
|
129
125
|
const {
|
130
126
|
userSelect
|
131
|
-
} = this.gestureHandler.
|
127
|
+
} = this.gestureHandler.config;
|
132
128
|
this.view.style['userSelect'] = isHandlerEnabled ? userSelect !== null && userSelect !== void 0 ? userSelect : 'none' : this.defaultViewStyles.userSelect;
|
133
129
|
this.view.style['webkitUserSelect'] = isHandlerEnabled ? userSelect !== null && userSelect !== void 0 ? userSelect : 'none' : this.defaultViewStyles.userSelect;
|
134
130
|
}
|
@@ -136,14 +132,14 @@ class GestureHandlerWebDelegate {
|
|
136
132
|
setTouchAction(isHandlerEnabled) {
|
137
133
|
const {
|
138
134
|
touchAction
|
139
|
-
} = this.gestureHandler.
|
135
|
+
} = this.gestureHandler.config;
|
140
136
|
this.view.style['touchAction'] = isHandlerEnabled ? touchAction !== null && touchAction !== void 0 ? touchAction : 'none' : this.defaultViewStyles.touchAction; // @ts-ignore This one disables default events on Safari
|
141
137
|
|
142
138
|
this.view.style['WebkitTouchCallout'] = isHandlerEnabled ? touchAction !== null && touchAction !== void 0 ? touchAction : 'none' : this.defaultViewStyles.touchAction;
|
143
139
|
}
|
144
140
|
|
145
141
|
setContextMenu(isHandlerEnabled) {
|
146
|
-
const config = this.gestureHandler.
|
142
|
+
const config = this.gestureHandler.config;
|
147
143
|
|
148
144
|
if (isHandlerEnabled) {
|
149
145
|
this.addContextMenuListeners(config);
|
@@ -160,13 +156,28 @@ class GestureHandlerWebDelegate {
|
|
160
156
|
this.setUserSelect(enabled);
|
161
157
|
this.setTouchAction(enabled);
|
162
158
|
this.setContextMenu(enabled);
|
159
|
+
|
160
|
+
if (enabled) {
|
161
|
+
this.eventManagers.forEach(manager => {
|
162
|
+
// It may look like managers will be registered twice when handler is mounted for the first time.
|
163
|
+
// However, `init` method is called AFTER `updateGestureConfig` - it means that delegate has not
|
164
|
+
// been initialized yet, so this code won't be executed.
|
165
|
+
//
|
166
|
+
// Also, because we use defined functions, not lambdas, they will not be registered multiple times.
|
167
|
+
manager.registerListeners();
|
168
|
+
});
|
169
|
+
} else {
|
170
|
+
this.eventManagers.forEach(manager => {
|
171
|
+
manager.unregisterListeners();
|
172
|
+
});
|
173
|
+
}
|
163
174
|
}
|
164
175
|
|
165
176
|
onBegin() {// no-op for now
|
166
177
|
}
|
167
178
|
|
168
179
|
onActivate() {
|
169
|
-
const config = this.gestureHandler.
|
180
|
+
const config = this.gestureHandler.config;
|
170
181
|
|
171
182
|
if ((!this.view.style.cursor || this.view.style.cursor === 'auto') && config.activeCursor) {
|
172
183
|
this.view.style.cursor = config.activeCursor;
|
@@ -192,6 +203,14 @@ class GestureHandlerWebDelegate {
|
|
192
203
|
});
|
193
204
|
}
|
194
205
|
|
206
|
+
get view() {
|
207
|
+
return this._view;
|
208
|
+
}
|
209
|
+
|
210
|
+
set view(value) {
|
211
|
+
this._view = value;
|
212
|
+
}
|
213
|
+
|
195
214
|
}
|
196
215
|
|
197
216
|
exports.GestureHandlerWebDelegate = GestureHandlerWebDelegate;
|