123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /**
- * 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.
- *
- * @format
- */
- const TouchHistoryMath = {
- /**
- * This code is optimized and not intended to look beautiful. This allows
- * computing of touch centroids that have moved after `touchesChangedAfter`
- * timeStamp. You can compute the current centroid involving all touches
- * moves after `touchesChangedAfter`, or you can compute the previous
- * centroid of all touches that were moved after `touchesChangedAfter`.
- *
- * @param {TouchHistoryMath} touchHistory Standard Responder touch track
- * data.
- * @param {number} touchesChangedAfter timeStamp after which moved touches
- * are considered "actively moving" - not just "active".
- * @param {boolean} isXAxis Consider `x` dimension vs. `y` dimension.
- * @param {boolean} ofCurrent Compute current centroid for actively moving
- * touches vs. previous centroid of now actively moving touches.
- * @return {number} value of centroid in specified dimension.
- */
- centroidDimension: function(
- touchHistory,
- touchesChangedAfter,
- isXAxis,
- ofCurrent,
- ) {
- const touchBank = touchHistory.touchBank;
- let total = 0;
- let count = 0;
- const oneTouchData =
- touchHistory.numberActiveTouches === 1
- ? touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch]
- : null;
- if (oneTouchData !== null) {
- if (
- oneTouchData.touchActive &&
- oneTouchData.currentTimeStamp > touchesChangedAfter
- ) {
- total +=
- ofCurrent && isXAxis
- ? oneTouchData.currentPageX
- : ofCurrent && !isXAxis
- ? oneTouchData.currentPageY
- : !ofCurrent && isXAxis
- ? oneTouchData.previousPageX
- : oneTouchData.previousPageY;
- count = 1;
- }
- } else {
- for (let i = 0; i < touchBank.length; i++) {
- const touchTrack = touchBank[i];
- if (
- touchTrack !== null &&
- touchTrack !== undefined &&
- touchTrack.touchActive &&
- touchTrack.currentTimeStamp >= touchesChangedAfter
- ) {
- let toAdd; // Yuck, program temporarily in invalid state.
- if (ofCurrent && isXAxis) {
- toAdd = touchTrack.currentPageX;
- } else if (ofCurrent && !isXAxis) {
- toAdd = touchTrack.currentPageY;
- } else if (!ofCurrent && isXAxis) {
- toAdd = touchTrack.previousPageX;
- } else {
- toAdd = touchTrack.previousPageY;
- }
- total += toAdd;
- count++;
- }
- }
- }
- return count > 0 ? total / count : TouchHistoryMath.noCentroid;
- },
- currentCentroidXOfTouchesChangedAfter: function(
- touchHistory,
- touchesChangedAfter,
- ) {
- return TouchHistoryMath.centroidDimension(
- touchHistory,
- touchesChangedAfter,
- true, // isXAxis
- true, // ofCurrent
- );
- },
- currentCentroidYOfTouchesChangedAfter: function(
- touchHistory,
- touchesChangedAfter,
- ) {
- return TouchHistoryMath.centroidDimension(
- touchHistory,
- touchesChangedAfter,
- false, // isXAxis
- true, // ofCurrent
- );
- },
- previousCentroidXOfTouchesChangedAfter: function(
- touchHistory,
- touchesChangedAfter,
- ) {
- return TouchHistoryMath.centroidDimension(
- touchHistory,
- touchesChangedAfter,
- true, // isXAxis
- false, // ofCurrent
- );
- },
- previousCentroidYOfTouchesChangedAfter: function(
- touchHistory,
- touchesChangedAfter,
- ) {
- return TouchHistoryMath.centroidDimension(
- touchHistory,
- touchesChangedAfter,
- false, // isXAxis
- false, // ofCurrent
- );
- },
- currentCentroidX: function(touchHistory) {
- return TouchHistoryMath.centroidDimension(
- touchHistory,
- 0, // touchesChangedAfter
- true, // isXAxis
- true, // ofCurrent
- );
- },
- currentCentroidY: function(touchHistory) {
- return TouchHistoryMath.centroidDimension(
- touchHistory,
- 0, // touchesChangedAfter
- false, // isXAxis
- true, // ofCurrent
- );
- },
- noCentroid: -1,
- };
- module.exports = TouchHistoryMath;
|