diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h
index 0927a1a83bb..d0a8fd98989 100644
--- a/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h
+++ b/packages/react-native/ReactCommon/react/renderer/components/view/conversions.h
@@ -614,8 +614,34 @@ inline void fromRawValue(
}
size_t i = 0;
- for (auto number : numbers) {
- transformMatrix.matrix[i++] = number;
+ if (numbers.size() == 16) {
+ for (auto number : numbers) {
+ transformMatrix.matrix[i++] = number;
+ }
+ } else if (numbers.size() == 9) {
+ // We need to convert the 2d transform matrix into a 3d one as such:
+ // [
+ // x01, x02, 0, x03
+ // x10, x11, 0, x12
+ // 0, 0, 1, 0
+ // x20, x21, 0, x22
+ // ]
+ transformMatrix.matrix[0] = numbers[0];
+ transformMatrix.matrix[1] = numbers[1];
+ transformMatrix.matrix[2] = 0;
+ transformMatrix.matrix[3] = numbers[2];
+ transformMatrix.matrix[4] = numbers[3];
+ transformMatrix.matrix[5] = numbers[4];
+ transformMatrix.matrix[6] = 0;
+ transformMatrix.matrix[7] = numbers[5];
+ transformMatrix.matrix[8] = 0;
+ transformMatrix.matrix[9] = 0;
+ transformMatrix.matrix[10] = 1;
+ transformMatrix.matrix[11] = 0;
+ transformMatrix.matrix[12] = numbers[6];
+ transformMatrix.matrix[13] = numbers[7];
+ transformMatrix.matrix[14] = 0;
+ transformMatrix.matrix[15] = numbers[8];
}
transformMatrix.operations.push_back(TransformOperation{
TransformOperationType::Arbitrary, Zero, Zero, Zero});
diff --git a/packages/rn-tester/js/examples/Transform/TransformExample.js b/packages/rn-tester/js/examples/Transform/TransformExample.js
index 963dd89b106..cd6c1b1d020 100644
--- a/packages/rn-tester/js/examples/Transform/TransformExample.js
+++ b/packages/rn-tester/js/examples/Transform/TransformExample.js
@@ -144,6 +144,13 @@ function TranslatePercentage() {
return ;
}
+function TranslateMatrix2D() {
+ return ;
+}
+function TranslateMatrix3D() {
+ return ;
+}
+
const styles = StyleSheet.create({
container: {
height: 500,
@@ -288,6 +295,18 @@ const styles = StyleSheet.create({
alignSelf: 'flex-start',
backgroundColor: 'lightblue',
},
+ translateMatrix2D: {
+ transform: [{matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1]}],
+ width: 50,
+ height: 50,
+ backgroundColor: 'red',
+ },
+ translateMatrix3D: {
+ transform: [{matrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]}],
+ height: 50,
+ width: 50,
+ backgroundColor: 'green',
+ },
});
exports.title = 'Transforms';
@@ -414,4 +433,19 @@ exports.examples = [
return ;
},
},
+ {
+ title: 'Transform Matrix 2D',
+ description: "transform: 'matrix(1, 0, 0, 0, 1, 0, 0, 0, 1)'",
+ render(): React.Node {
+ return ;
+ },
+ },
+ {
+ title: 'Transform Matrix 3D',
+ description:
+ "transform: 'matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)'",
+ render(): React.Node {
+ return ;
+ },
+ },
] as Array;