forked from facebook/react-native
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move TouchHistoryMath from React Repo to React Native
Summary: This hasn't been used by React core for a while. It's unclear why it was in the first place. We can move it back next to the Panresponder. facebook/react#12557 Reviewed By: sophiebits Differential Revision: D7529949 fbshipit-source-id: ef9892cfa8d2d6768da216b81befabe02795a245
- Loading branch information
1 parent
3770155
commit 52b90d4
Showing
2 changed files
with
151 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,151 @@ | ||
/** | ||
* Copyright (c) 2016-present, Facebook, Inc. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
|
||
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; |
This file was deleted.
Oops, something went wrong.