From 20741dec47c0671d5adf7229af0ef1916e8551cc Mon Sep 17 00:00:00 2001 From: William Candillon Date: Sun, 10 May 2020 22:54:10 -0700 Subject: [PATCH] Fix skewX on Android and in the JS decomposition (#28862) Summary: This issue fixes https://github.com/facebook/react-native/issues/27649. By using 2d decomposition that transforms a skewX into a rotate/scale/rotate, the skewX issue on Android was still there which made me suspect that the issue came from the decomposition algorithm. Then I noticed that the bug existed in the JavaScript decomposition as well which led me to a fix on the JS and therefore on the Android side most likely. ## Changelog [Android] [Fixed] skewX transforms Pull Request resolved: https://github.com/facebook/react-native/pull/28862 Test Plan: Check that skewX works on Android. On JS, making sure that processTransform() doesn't skip, you can try the following sequence: ```tsx const matrix = processTransform([{ skewX: `${Math.PI / 3}rad` }]); const result = MatrixMath.decomposeMatrix(matrix); console.log({ result }); ``` Differential Revision: D21493021 Pulled By: shergin fbshipit-source-id: 89f7aca5fbfd0f0f8c6f90a26bd76bf8550acaa5 --- Libraries/Utilities/MatrixMath.js | 4 ---- .../java/com/facebook/react/uimanager/MatrixMathHelper.java | 4 ---- 2 files changed, 8 deletions(-) diff --git a/Libraries/Utilities/MatrixMath.js b/Libraries/Utilities/MatrixMath.js index 2a943a8961ac03..f316bea68611fc 100755 --- a/Libraries/Utilities/MatrixMath.js +++ b/Libraries/Utilities/MatrixMath.js @@ -651,10 +651,6 @@ const MatrixMath = { skew[0] = MatrixMath.v3Dot(row[0], row[1]); row[1] = MatrixMath.v3Combine(row[1], row[0], 1.0, -skew[0]); - // Compute XY shear factor and make 2nd row orthogonal to 1st. - skew[0] = MatrixMath.v3Dot(row[0], row[1]); - row[1] = MatrixMath.v3Combine(row[1], row[0], 1.0, -skew[0]); - // Now, compute Y scale and normalize 2nd row. scale[1] = MatrixMath.v3Length(row[1]); row[1] = MatrixMath.v3Normalize(row[1], scale[1]); diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/MatrixMathHelper.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/MatrixMathHelper.java index 179cc32e6a1842..cf448bd58908d0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/MatrixMathHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/MatrixMathHelper.java @@ -169,10 +169,6 @@ public static void decomposeMatrix(double[] transformMatrix, MatrixDecomposition skew[0] = v3Dot(row[0], row[1]); row[1] = v3Combine(row[1], row[0], 1.0, -skew[0]); - // Compute XY shear factor and make 2nd row orthogonal to 1st. - skew[0] = v3Dot(row[0], row[1]); - row[1] = v3Combine(row[1], row[0], 1.0, -skew[0]); - // Now, compute Y scale and normalize 2nd row. scale[1] = v3Length(row[1]); row[1] = v3Normalize(row[1], scale[1]);