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":["State","EventTypes","GestureHandler","DEFAULT_MAX_DURATION_MS","DEFAULT_MAX_DELAY_MS","DEFAULT_NUMBER_OF_TAPS","DEFAULT_MIN_NUMBER_OF_POINTERS","TapGestureHandler","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","UNDETERMINED","eventType","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":["State","EventTypes","GestureHandler","DEFAULT_MAX_DURATION_MS","DEFAULT_MAX_DELAY_MS","DEFAULT_NUMBER_OF_TAPS","DEFAULT_MIN_NUMBER_OF_POINTERS","TapGestureHandler","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","UNDETERMINED","eventType","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"]}
|
@@ -2,36 +2,32 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
2
2
|
|
3
3
|
export default class CircularBuffer {
|
4
4
|
constructor(size) {
|
5
|
-
_defineProperty(this, "
|
5
|
+
_defineProperty(this, "capacity", void 0);
|
6
6
|
|
7
7
|
_defineProperty(this, "buffer", void 0);
|
8
8
|
|
9
9
|
_defineProperty(this, "index", void 0);
|
10
10
|
|
11
|
-
_defineProperty(this, "
|
11
|
+
_defineProperty(this, "_size", void 0);
|
12
12
|
|
13
|
-
this.
|
13
|
+
this.capacity = size;
|
14
14
|
this.buffer = new Array(size);
|
15
15
|
this.index = 0;
|
16
|
-
this.
|
17
|
-
}
|
18
|
-
|
19
|
-
get size() {
|
20
|
-
return this.actualSize;
|
16
|
+
this._size = 0;
|
21
17
|
}
|
22
18
|
|
23
19
|
push(element) {
|
24
20
|
this.buffer[this.index] = element;
|
25
|
-
this.index = (this.index + 1) % this.
|
26
|
-
this.
|
21
|
+
this.index = (this.index + 1) % this.capacity;
|
22
|
+
this._size = Math.min(this.size + 1, this.capacity);
|
27
23
|
}
|
28
24
|
|
29
25
|
get(at) {
|
30
|
-
if (this.
|
31
|
-
let index = (this.index + at) % this.
|
26
|
+
if (this._size === this.capacity) {
|
27
|
+
let index = (this.index + at) % this.capacity;
|
32
28
|
|
33
29
|
if (index < 0) {
|
34
|
-
index += this.
|
30
|
+
index += this.capacity;
|
35
31
|
}
|
36
32
|
|
37
33
|
return this.buffer[index];
|
@@ -41,9 +37,13 @@ export default class CircularBuffer {
|
|
41
37
|
}
|
42
38
|
|
43
39
|
clear() {
|
44
|
-
this.buffer = new Array(this.
|
40
|
+
this.buffer = new Array(this.capacity);
|
45
41
|
this.index = 0;
|
46
|
-
this.
|
42
|
+
this._size = 0;
|
43
|
+
}
|
44
|
+
|
45
|
+
get size() {
|
46
|
+
return this._size;
|
47
47
|
}
|
48
48
|
|
49
49
|
}
|
@@ -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":";;AAAA,eAAe,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"]}
|
@@ -26,9 +26,9 @@ export default class GestureHandlerOrchestrator {
|
|
26
26
|
|
27
27
|
cleanHandler(handler) {
|
28
28
|
handler.reset();
|
29
|
-
handler.
|
30
|
-
handler.
|
31
|
-
handler.
|
29
|
+
handler.active = false;
|
30
|
+
handler.awaiting = false;
|
31
|
+
handler.activationIndex = Number.MAX_VALUE;
|
32
32
|
}
|
33
33
|
|
34
34
|
removeHandlerFromOrchestrator(handler) {
|
@@ -41,7 +41,7 @@ export default class GestureHandlerOrchestrator {
|
|
41
41
|
|
42
42
|
if (indexInAwaitingHandlers >= 0) {
|
43
43
|
this.awaitingHandlers.splice(indexInAwaitingHandlers, 1);
|
44
|
-
this.awaitingHandlersTags.delete(handler.
|
44
|
+
this.awaitingHandlersTags.delete(handler.handlerTag);
|
45
45
|
}
|
46
46
|
}
|
47
47
|
|
@@ -51,7 +51,7 @@ export default class GestureHandlerOrchestrator {
|
|
51
51
|
for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
|
52
52
|
const handler = this.gestureHandlers[i];
|
53
53
|
|
54
|
-
if (this.isFinished(handler.
|
54
|
+
if (this.isFinished(handler.state) && !handler.awaiting) {
|
55
55
|
this.cleanHandler(handler);
|
56
56
|
handlersToRemove.add(handler);
|
57
57
|
}
|
@@ -62,7 +62,7 @@ export default class GestureHandlerOrchestrator {
|
|
62
62
|
|
63
63
|
hasOtherHandlerToWaitFor(handler) {
|
64
64
|
const hasToWaitFor = otherHandler => {
|
65
|
-
return !this.isFinished(otherHandler.
|
65
|
+
return !this.isFinished(otherHandler.state) && this.shouldHandlerWaitForOther(handler, otherHandler);
|
66
66
|
};
|
67
67
|
|
68
68
|
return this.gestureHandlers.some(hasToWaitFor);
|
@@ -70,7 +70,7 @@ export default class GestureHandlerOrchestrator {
|
|
70
70
|
|
71
71
|
shouldBeCancelledByFinishedHandler(handler) {
|
72
72
|
const shouldBeCancelled = otherHandler => {
|
73
|
-
return this.shouldHandlerWaitForOther(handler, otherHandler) && otherHandler.
|
73
|
+
return this.shouldHandlerWaitForOther(handler, otherHandler) && otherHandler.state === State.END;
|
74
74
|
};
|
75
75
|
|
76
76
|
return this.gestureHandlers.some(shouldBeCancelled);
|
@@ -87,7 +87,7 @@ export default class GestureHandlerOrchestrator {
|
|
87
87
|
return;
|
88
88
|
}
|
89
89
|
|
90
|
-
const handlerState = handler.
|
90
|
+
const handlerState = handler.state;
|
91
91
|
|
92
92
|
if (handlerState === State.CANCELLED || handlerState === State.FAILED) {
|
93
93
|
return;
|
@@ -118,21 +118,21 @@ export default class GestureHandlerOrchestrator {
|
|
118
118
|
|
119
119
|
cleanupAwaitingHandlers(handler) {
|
120
120
|
const shouldWait = otherHandler => {
|
121
|
-
return !otherHandler.
|
121
|
+
return !otherHandler.awaiting && this.shouldHandlerWaitForOther(otherHandler, handler);
|
122
122
|
};
|
123
123
|
|
124
124
|
for (const otherHandler of this.awaitingHandlers) {
|
125
125
|
if (shouldWait(otherHandler)) {
|
126
126
|
this.cleanHandler(otherHandler);
|
127
|
-
this.awaitingHandlersTags.delete(otherHandler.
|
127
|
+
this.awaitingHandlersTags.delete(otherHandler.handlerTag);
|
128
128
|
}
|
129
129
|
}
|
130
130
|
|
131
|
-
this.awaitingHandlers = this.awaitingHandlers.filter(otherHandler => this.awaitingHandlersTags.has(otherHandler.
|
131
|
+
this.awaitingHandlers = this.awaitingHandlers.filter(otherHandler => this.awaitingHandlersTags.has(otherHandler.handlerTag));
|
132
132
|
}
|
133
133
|
|
134
134
|
onHandlerStateChange(handler, newState, oldState, sendIfDisabled) {
|
135
|
-
if (!handler.
|
135
|
+
if (!handler.enabled && !sendIfDisabled) {
|
136
136
|
return;
|
137
137
|
}
|
138
138
|
|
@@ -140,7 +140,7 @@ export default class GestureHandlerOrchestrator {
|
|
140
140
|
|
141
141
|
if (this.isFinished(newState)) {
|
142
142
|
for (const otherHandler of this.awaitingHandlers) {
|
143
|
-
if (!this.shouldHandlerWaitForOther(otherHandler, handler) || !this.awaitingHandlersTags.has(otherHandler.
|
143
|
+
if (!this.shouldHandlerWaitForOther(otherHandler, handler) || !this.awaitingHandlersTags.has(otherHandler.handlerTag)) {
|
144
144
|
continue;
|
145
145
|
}
|
146
146
|
|
@@ -151,7 +151,7 @@ export default class GestureHandlerOrchestrator {
|
|
151
151
|
|
152
152
|
otherHandler.cancel();
|
153
153
|
|
154
|
-
if (otherHandler.
|
154
|
+
if (otherHandler.state === State.END) {
|
155
155
|
// Handle edge case, where discrete gestures end immediately after activation thus
|
156
156
|
// their state is set to END and when the gesture they are waiting for activates they
|
157
157
|
// should be cancelled, however `cancel` was never sent as gestures were already in the END state.
|
@@ -159,14 +159,14 @@ export default class GestureHandlerOrchestrator {
|
|
159
159
|
otherHandler.sendEvent(State.CANCELLED, State.BEGAN);
|
160
160
|
}
|
161
161
|
|
162
|
-
otherHandler.
|
162
|
+
otherHandler.awaiting = false;
|
163
163
|
}
|
164
164
|
}
|
165
165
|
|
166
166
|
if (newState === State.ACTIVE) {
|
167
167
|
this.tryActivate(handler);
|
168
168
|
} else if (oldState === State.ACTIVE || oldState === State.END) {
|
169
|
-
if (handler.
|
169
|
+
if (handler.active) {
|
170
170
|
handler.sendEvent(newState, oldState);
|
171
171
|
} else if (oldState === State.ACTIVE && (newState === State.CANCELLED || newState === State.FAILED)) {
|
172
172
|
handler.sendEvent(newState, State.BEGAN);
|
@@ -184,10 +184,10 @@ export default class GestureHandlerOrchestrator {
|
|
184
184
|
}
|
185
185
|
|
186
186
|
makeActive(handler) {
|
187
|
-
const currentState = handler.
|
188
|
-
handler.
|
189
|
-
handler.
|
190
|
-
handler.
|
187
|
+
const currentState = handler.state;
|
188
|
+
handler.active = true;
|
189
|
+
handler.shouldResetProgress = true;
|
190
|
+
handler.activationIndex = this.activationIndex++;
|
191
191
|
|
192
192
|
for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
|
193
193
|
if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {
|
@@ -197,7 +197,7 @@ export default class GestureHandlerOrchestrator {
|
|
197
197
|
|
198
198
|
for (const otherHandler of this.awaitingHandlers) {
|
199
199
|
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
200
|
-
otherHandler.
|
200
|
+
otherHandler.awaiting = false;
|
201
201
|
}
|
202
202
|
}
|
203
203
|
|
@@ -211,11 +211,11 @@ export default class GestureHandlerOrchestrator {
|
|
211
211
|
}
|
212
212
|
}
|
213
213
|
|
214
|
-
if (!handler.
|
214
|
+
if (!handler.awaiting) {
|
215
215
|
return;
|
216
216
|
}
|
217
217
|
|
218
|
-
handler.
|
218
|
+
handler.awaiting = false;
|
219
219
|
this.awaitingHandlers = this.awaitingHandlers.filter(otherHandler => otherHandler !== handler);
|
220
220
|
}
|
221
221
|
|
@@ -225,9 +225,9 @@ export default class GestureHandlerOrchestrator {
|
|
225
225
|
}
|
226
226
|
|
227
227
|
this.awaitingHandlers.push(handler);
|
228
|
-
this.awaitingHandlersTags.add(handler.
|
229
|
-
handler.
|
230
|
-
handler.
|
228
|
+
this.awaitingHandlersTags.add(handler.handlerTag);
|
229
|
+
handler.awaiting = true;
|
230
|
+
handler.activationIndex = this.activationIndex++;
|
231
231
|
}
|
232
232
|
|
233
233
|
recordHandlerIfNotPresent(handler) {
|
@@ -236,9 +236,9 @@ export default class GestureHandlerOrchestrator {
|
|
236
236
|
}
|
237
237
|
|
238
238
|
this.gestureHandlers.push(handler);
|
239
|
-
handler.
|
240
|
-
handler.
|
241
|
-
handler.
|
239
|
+
handler.active = false;
|
240
|
+
handler.awaiting = false;
|
241
|
+
handler.activationIndex = Number.MAX_SAFE_INTEGER;
|
242
242
|
}
|
243
243
|
|
244
244
|
shouldHandlerWaitForOther(handler, otherHandler) {
|
@@ -254,7 +254,7 @@ export default class GestureHandlerOrchestrator {
|
|
254
254
|
return false;
|
255
255
|
}
|
256
256
|
|
257
|
-
if (handler.
|
257
|
+
if (handler.awaiting || handler.state === State.ACTIVE) {
|
258
258
|
// For now it always returns false
|
259
259
|
return handler.shouldBeCancelledByOther(otherHandler);
|
260
260
|
}
|
@@ -262,7 +262,7 @@ export default class GestureHandlerOrchestrator {
|
|
262
262
|
const handlerPointers = handler.getTrackedPointersID();
|
263
263
|
const otherPointers = otherHandler.getTrackedPointersID();
|
264
264
|
|
265
|
-
if (!PointerTracker.shareCommonPointers(handlerPointers, otherPointers) && handler.
|
265
|
+
if (!PointerTracker.shareCommonPointers(handlerPointers, otherPointers) && handler.delegate.view !== otherHandler.delegate.view) {
|
266
266
|
return this.checkOverlap(handler, otherHandler);
|
267
267
|
}
|
268
268
|
|
@@ -275,8 +275,8 @@ export default class GestureHandlerOrchestrator {
|
|
275
275
|
// This solves issue in overlapping parents example
|
276
276
|
// TODO: Find better way to handle that issue, for example by activation order and handler cancelling
|
277
277
|
const isPointerWithinBothBounds = pointer => {
|
278
|
-
const point = handler.
|
279
|
-
return handler.
|
278
|
+
const point = handler.tracker.getLastAbsoluteCoords(pointer);
|
279
|
+
return handler.delegate.isPointerInBounds(point) && otherHandler.delegate.isPointerInBounds(point);
|
280
280
|
};
|
281
281
|
|
282
282
|
return handler.getTrackedPointersID().some(isPointerWithinBothBounds);
|
@@ -294,7 +294,7 @@ export default class GestureHandlerOrchestrator {
|
|
294
294
|
|
295
295
|
cancelMouseAndPenGestures(currentHandler) {
|
296
296
|
this.gestureHandlers.forEach(handler => {
|
297
|
-
if (handler.
|
297
|
+
if (handler.pointerType !== PointerType.MOUSE && handler.pointerType !== PointerType.STYLUS) {
|
298
298
|
return;
|
299
299
|
}
|
300
300
|
|
@@ -308,20 +308,20 @@ export default class GestureHandlerOrchestrator {
|
|
308
308
|
//
|
309
309
|
// However, handler will receive manually created onPointerEnter that is triggered in EventManager in onPointerMove method.
|
310
310
|
// There may be possibility to use that fact to make handler respond properly to first mouse click
|
311
|
-
handler.
|
311
|
+
handler.tracker.resetTracker();
|
312
312
|
}
|
313
313
|
});
|
314
314
|
}
|
315
315
|
|
316
|
-
static
|
317
|
-
if (!GestureHandlerOrchestrator.
|
318
|
-
GestureHandlerOrchestrator.
|
316
|
+
static get instance() {
|
317
|
+
if (!GestureHandlerOrchestrator._instance) {
|
318
|
+
GestureHandlerOrchestrator._instance = new GestureHandlerOrchestrator();
|
319
319
|
}
|
320
320
|
|
321
|
-
return GestureHandlerOrchestrator.
|
321
|
+
return GestureHandlerOrchestrator._instance;
|
322
322
|
}
|
323
323
|
|
324
324
|
}
|
325
325
|
|
326
|
-
_defineProperty(GestureHandlerOrchestrator, "
|
326
|
+
_defineProperty(GestureHandlerOrchestrator, "_instance", void 0);
|
327
327
|
//# sourceMappingURL=GestureHandlerOrchestrator.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureHandlerOrchestrator.ts"],"names":["PointerType","State","PointerTracker","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","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","shareCommonPointers","getDelegate","getView","checkOverlap","isPointerWithinBothBounds","pointer","point","getTracker","getLastAbsoluteCoords","isPointerInBounds","state","cancelMouseAndPenGestures","currentHandler","forEach","getPointerType","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":["PointerType","State","PointerTracker","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","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","shareCommonPointers","delegate","view","checkOverlap","isPointerWithinBothBounds","pointer","point","tracker","getLastAbsoluteCoords","isPointerInBounds","cancelMouseAndPenGestures","currentHandler","forEach","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"]}
|
@@ -11,7 +11,7 @@ export class GestureHandlerWebDelegate {
|
|
11
11
|
constructor() {
|
12
12
|
_defineProperty(this, "isInitialized", false);
|
13
13
|
|
14
|
-
_defineProperty(this, "
|
14
|
+
_defineProperty(this, "_view", void 0);
|
15
15
|
|
16
16
|
_defineProperty(this, "gestureHandler", void 0);
|
17
17
|
|
@@ -23,13 +23,9 @@ export class GestureHandlerWebDelegate {
|
|
23
23
|
});
|
24
24
|
}
|
25
25
|
|
26
|
-
getView() {
|
27
|
-
return this.view;
|
28
|
-
}
|
29
|
-
|
30
26
|
init(viewRef, handler) {
|
31
27
|
if (!viewRef) {
|
32
|
-
throw new Error(`Cannot find HTML Element for handler ${handler.
|
28
|
+
throw new Error(`Cannot find HTML Element for handler ${handler.handlerTag}`);
|
33
29
|
}
|
34
30
|
|
35
31
|
this.isInitialized = true;
|
@@ -39,7 +35,7 @@ export class GestureHandlerWebDelegate {
|
|
39
35
|
userSelect: this.view.style.userSelect,
|
40
36
|
touchAction: this.view.style.touchAction
|
41
37
|
};
|
42
|
-
const config = handler.
|
38
|
+
const config = handler.config;
|
43
39
|
this.setUserSelect(config.enabled);
|
44
40
|
this.setTouchAction(config.enabled);
|
45
41
|
this.setContextMenu(config.enabled);
|
@@ -74,9 +70,9 @@ export class GestureHandlerWebDelegate {
|
|
74
70
|
}
|
75
71
|
|
76
72
|
tryResetCursor() {
|
77
|
-
const config = this.gestureHandler.
|
73
|
+
const config = this.gestureHandler.config;
|
78
74
|
|
79
|
-
if (config.activeCursor && config.activeCursor !== 'auto' && this.gestureHandler.
|
75
|
+
if (config.activeCursor && config.activeCursor !== 'auto' && this.gestureHandler.state === State.ACTIVE) {
|
80
76
|
this.view.style.cursor = 'auto';
|
81
77
|
}
|
82
78
|
}
|
@@ -112,7 +108,7 @@ export class GestureHandlerWebDelegate {
|
|
112
108
|
setUserSelect(isHandlerEnabled) {
|
113
109
|
const {
|
114
110
|
userSelect
|
115
|
-
} = this.gestureHandler.
|
111
|
+
} = this.gestureHandler.config;
|
116
112
|
this.view.style['userSelect'] = isHandlerEnabled ? userSelect !== null && userSelect !== void 0 ? userSelect : 'none' : this.defaultViewStyles.userSelect;
|
117
113
|
this.view.style['webkitUserSelect'] = isHandlerEnabled ? userSelect !== null && userSelect !== void 0 ? userSelect : 'none' : this.defaultViewStyles.userSelect;
|
118
114
|
}
|
@@ -120,14 +116,14 @@ export class GestureHandlerWebDelegate {
|
|
120
116
|
setTouchAction(isHandlerEnabled) {
|
121
117
|
const {
|
122
118
|
touchAction
|
123
|
-
} = this.gestureHandler.
|
119
|
+
} = this.gestureHandler.config;
|
124
120
|
this.view.style['touchAction'] = isHandlerEnabled ? touchAction !== null && touchAction !== void 0 ? touchAction : 'none' : this.defaultViewStyles.touchAction; // @ts-ignore This one disables default events on Safari
|
125
121
|
|
126
122
|
this.view.style['WebkitTouchCallout'] = isHandlerEnabled ? touchAction !== null && touchAction !== void 0 ? touchAction : 'none' : this.defaultViewStyles.touchAction;
|
127
123
|
}
|
128
124
|
|
129
125
|
setContextMenu(isHandlerEnabled) {
|
130
|
-
const config = this.gestureHandler.
|
126
|
+
const config = this.gestureHandler.config;
|
131
127
|
|
132
128
|
if (isHandlerEnabled) {
|
133
129
|
this.addContextMenuListeners(config);
|
@@ -144,13 +140,28 @@ export class GestureHandlerWebDelegate {
|
|
144
140
|
this.setUserSelect(enabled);
|
145
141
|
this.setTouchAction(enabled);
|
146
142
|
this.setContextMenu(enabled);
|
143
|
+
|
144
|
+
if (enabled) {
|
145
|
+
this.eventManagers.forEach(manager => {
|
146
|
+
// It may look like managers will be registered twice when handler is mounted for the first time.
|
147
|
+
// However, `init` method is called AFTER `updateGestureConfig` - it means that delegate has not
|
148
|
+
// been initialized yet, so this code won't be executed.
|
149
|
+
//
|
150
|
+
// Also, because we use defined functions, not lambdas, they will not be registered multiple times.
|
151
|
+
manager.registerListeners();
|
152
|
+
});
|
153
|
+
} else {
|
154
|
+
this.eventManagers.forEach(manager => {
|
155
|
+
manager.unregisterListeners();
|
156
|
+
});
|
157
|
+
}
|
147
158
|
}
|
148
159
|
|
149
160
|
onBegin() {// no-op for now
|
150
161
|
}
|
151
162
|
|
152
163
|
onActivate() {
|
153
|
-
const config = this.gestureHandler.
|
164
|
+
const config = this.gestureHandler.config;
|
154
165
|
|
155
166
|
if ((!this.view.style.cursor || this.view.style.cursor === 'auto') && config.activeCursor) {
|
156
167
|
this.view.style.cursor = config.activeCursor;
|
@@ -176,5 +187,13 @@ export class GestureHandlerWebDelegate {
|
|
176
187
|
});
|
177
188
|
}
|
178
189
|
|
190
|
+
get view() {
|
191
|
+
return this._view;
|
192
|
+
}
|
193
|
+
|
194
|
+
set view(value) {
|
195
|
+
this._view = value;
|
196
|
+
}
|
197
|
+
|
179
198
|
}
|
180
199
|
//# sourceMappingURL=GestureHandlerWebDelegate.js.map
|