UNPKG

create-expo-cljs-app

Version:

Create a react native application with Expo and Shadow-CLJS!

94 lines (85 loc) 3.27 kB
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow */ import type { Touch, TouchEvent } from './ResponderEventTypes'; import { isStartish, isMoveish, isEndish } from './ResponderEventTypes'; type TouchRecord = {| touchActive: boolean, startPageX: number, startPageY: number, startTimeStamp: number, currentPageX: number, currentPageY: number, currentTimeStamp: number, previousPageX: number, previousPageY: number, previousTimeStamp: number, |}; /** * Tracks the position and time of each active touch by `touch.identifier`. We * should typically only see IDs in the range of 1-20 because IDs get recycled * when touches end and start again. */ const __DEV__ = process.env.NODE_ENV !== 'production'; const MAX_TOUCH_BANK = 20; const touchBank: Array<TouchRecord> = []; const touchHistory = { touchBank, numberActiveTouches: 0, // If there is only one active touch, we remember its location. This prevents // us having to loop through all of the touches all the time in the most // common case. indexOfSingleActiveTouch: -1, mostRecentTimeStamp: 0 }; declare function timestampForTouch(touch: Touch): number; /** * TODO: Instead of making gestures recompute filtered velocity, we could * include a built in velocity computation that can be reused globally. */ declare function createTouchRecord(touch: Touch): TouchRecord; declare function resetTouchRecord(touchRecord: TouchRecord, touch: Touch): void; declare function getTouchIdentifier(arg0: Touch): number; declare function recordTouchStart(touch: Touch): void; declare function recordTouchMove(touch: Touch): void; declare function recordTouchEnd(touch: Touch): void; declare function printTouch(touch: Touch): string; declare function printTouchBank(): string; const ResponderTouchHistoryStore = { recordTouchTrack(topLevelType: string, nativeEvent: TouchEvent): void { if (isMoveish(topLevelType)) { nativeEvent.changedTouches.forEach(recordTouchMove); } else if (isStartish(topLevelType)) { nativeEvent.changedTouches.forEach(recordTouchStart); touchHistory.numberActiveTouches = nativeEvent.touches.length; if (touchHistory.numberActiveTouches === 1) { touchHistory.indexOfSingleActiveTouch = nativeEvent.touches[0].identifier; } } else if (isEndish(topLevelType)) { nativeEvent.changedTouches.forEach(recordTouchEnd); touchHistory.numberActiveTouches = nativeEvent.touches.length; if (touchHistory.numberActiveTouches === 1) { for (let i = 0; i < touchBank.length; i++) { const touchTrackToCheck = touchBank[i]; if (touchTrackToCheck != null && touchTrackToCheck.touchActive) { touchHistory.indexOfSingleActiveTouch = i; break; } } if (__DEV__) { const activeRecord = touchBank[touchHistory.indexOfSingleActiveTouch]; if (!(activeRecord != null && activeRecord.touchActive)) { console.error('Cannot find single active touch.'); } } } } }, touchHistory }; export default ResponderTouchHistoryStore;