@@ -19,13 +19,10 @@ static PropId PropNameSkewX = JsiPropId::get("skewX");
19
19
static PropId PropNameSkewY = JsiPropId::get(" skewY" );
20
20
static PropId PropNameRotate = JsiPropId::get(" rotate" );
21
21
static PropId PropNameRotateZ = JsiPropId::get(" rotateZ" );
22
-
23
- /*
24
- | "perspective"
25
- | "rotateX"
26
- | "rotateY"
27
- | "matrix"
28
- */
22
+ static PropId PropNameRotateX = JsiPropId::get(" rotateX" );
23
+ static PropId PropNameRotateY = JsiPropId::get(" rotateY" );
24
+ static PropId PropNamePerspective = JsiPropId::get(" perspective" );
25
+ static PropId PropNameMatrix4 = JsiPropId::get(" matrix" );
29
26
30
27
class TransformProp : public DerivedProp <SkMatrix> {
31
28
public:
@@ -66,6 +63,20 @@ class TransformProp : public DerivedProp<SkMatrix> {
66
63
auto z = el.getValue (key).getAsNumber ();
67
64
SkM44 trZ (1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , z, 0 , 0 , 0 , 1 );
68
65
m4.preConcat (trZ);
66
+ } else if (key == PropNameTranslate) {
67
+ auto arr = el.getValue (key).getAsArray ();
68
+ double x = 0 , y = 0 , z = 0 ;
69
+ for (size_t i = 0 ; i < arr.size (); ++i) {
70
+ if (i == 0 ) {
71
+ x = arr[i].getAsNumber ();
72
+ } else if (i == 1 ) {
73
+ y = arr[i].getAsNumber ();
74
+ } else if (i == 2 ) {
75
+ z = arr[i].getAsNumber ();
76
+ }
77
+ }
78
+ SkM44 tr (1 , 0 , 0 , x, 0 , 1 , 0 , y, 0 , 0 , 1 , z, 0 , 0 , 0 , 1 );
79
+ m4.preConcat (tr);
69
80
} else if (key == PropNameScale) {
70
81
auto s = el.getValue (key).getAsNumber ();
71
82
SkM44 scale (s, 0 , 0 , 0 , 0 , s, 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 );
@@ -89,8 +100,30 @@ class TransformProp : public DerivedProp<SkMatrix> {
89
100
} else if (key == PropNameRotate || key == PropNameRotateZ) {
90
101
auto angle = el.getValue (key).getAsNumber ();
91
102
SkM44 rotate;
92
- rotate.setRotateUnit ({ 0 , 0 , 1 }, angle);
103
+ rotate.setRotateUnit ({ 0 , 0 , 1 }, angle);
104
+ m4.preConcat (rotate);
105
+ } else if (key == PropNameRotateY) {
106
+ auto angle = el.getValue (key).getAsNumber ();
107
+ SkM44 rotate;
108
+ rotate.setRotateUnit ({ 0 , 1 , 0 }, angle);
109
+ m4.preConcat (rotate);
110
+ } else if (key == PropNameRotateX) {
111
+ auto angle = el.getValue (key).getAsNumber ();
112
+ SkM44 rotate;
113
+ rotate.setRotateUnit ({ 1 , 0 , 0 }, angle);
93
114
m4.preConcat (rotate);
115
+ } else if (key == PropNamePerspective) {
116
+ auto p = el.getValue (key).getAsNumber ();
117
+ SkM44 perspective (1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , -1 / p, 1 );
118
+ m4.preConcat (perspective);
119
+ } else if (key == PropNameMatrix4) {
120
+ auto arr = el.getValue (key).getAsArray ();
121
+ SkM44 m44;
122
+ for (size_t i = 0 ; i < arr.size (); ++i) {
123
+ auto obj = arr[i];
124
+ m44.setRC (i / 4 , i % 4 , obj.getAsNumber ());
125
+ }
126
+ m4.preConcat (m44);
94
127
} else {
95
128
throw std::runtime_error (
96
129
" Unknown key in transform. Expected translateX, translateY, "
0 commit comments