From cec7d32ab83eb24fd73b7ba6e04219852e748212 Mon Sep 17 00:00:00 2001 From: Daniel Buckmaster Date: Wed, 13 Sep 2017 00:49:25 +1000 Subject: [PATCH] Calculate rotation correctly when pointers change order Fix #791 by always calculating rotation by considering pointers in order of their identifier. This catches edge cases where pointers change order in the array during a gesture. --- src/inputjs/get-rotation.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/inputjs/get-rotation.js b/src/inputjs/get-rotation.js index d507ae9da..928f56c5e 100644 --- a/src/inputjs/get-rotation.js +++ b/src/inputjs/get-rotation.js @@ -9,5 +9,11 @@ import { PROPS_CLIENT_XY } from './input-consts'; * @return {Number} rotation */ export default function getRotation(start, end) { - return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY); + let startSorted = start[0].identifier < start[1].identifier; + let start0 = startSorted ? start[0] : start[1]; + let start1 = startSorted ? start[1] : start[0]; + let endSorted = end[0].identifier < end[1].identifier; + let end0 = endSorted ? end[0] : end[1]; + let end1 = endSorted ? end[1] : end[0]; + return getAngle(end0, end1, PROPS_CLIENT_XY) - getAngle(start0, start1, PROPS_CLIENT_XY); }