@shopify/react-native-skia 0.1.166 → 0.1.169

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +0 -5
  2. package/cpp/api/JsiSkPath.h +20 -3
  3. package/cpp/rnskia/dom/nodes/JsiBoxNode.h +4 -12
  4. package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +30 -9
  5. package/cpp/rnskia/dom/props/ImageProps.h +9 -6
  6. package/cpp/rnskia/dom/props/PointProp.h +4 -13
  7. package/cpp/rnskia/dom/props/PointsProp.h +1 -7
  8. package/cpp/rnskia/dom/props/RRectProp.h +53 -0
  9. package/cpp/rnskia/dom/props/RadiusProp.h +7 -9
  10. package/cpp/rnskia/dom/props/TransformProp.h +2 -2
  11. package/lib/commonjs/dom/nodes/datatypes/Transform.js +0 -3
  12. package/lib/commonjs/dom/nodes/datatypes/Transform.js.map +1 -1
  13. package/lib/commonjs/dom/nodes/paint/Shaders.js +1 -1
  14. package/lib/commonjs/dom/nodes/paint/Shaders.js.map +1 -1
  15. package/lib/commonjs/renderer/Canvas.js +8 -39
  16. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  17. package/lib/commonjs/renderer/DrawingContext.js.map +1 -1
  18. package/lib/commonjs/renderer/Reconciler.js +64 -0
  19. package/lib/commonjs/renderer/Reconciler.js.map +1 -0
  20. package/lib/commonjs/skia/types/Path/Path.js.map +1 -1
  21. package/lib/commonjs/skia/web/JsiSkPath.js +7 -0
  22. package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
  23. package/lib/commonjs/skia/web/JsiSkRRect.js +14 -1
  24. package/lib/commonjs/skia/web/JsiSkRRect.js.map +1 -1
  25. package/lib/commonjs/skia/web/JsiSkia.js +1 -1
  26. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  27. package/lib/module/dom/nodes/datatypes/Transform.js +0 -3
  28. package/lib/module/dom/nodes/datatypes/Transform.js.map +1 -1
  29. package/lib/module/dom/nodes/paint/Shaders.js +1 -1
  30. package/lib/module/dom/nodes/paint/Shaders.js.map +1 -1
  31. package/lib/module/renderer/Canvas.js +7 -33
  32. package/lib/module/renderer/Canvas.js.map +1 -1
  33. package/lib/module/renderer/DrawingContext.js.map +1 -1
  34. package/lib/module/renderer/Reconciler.js +48 -0
  35. package/lib/module/renderer/Reconciler.js.map +1 -0
  36. package/lib/module/skia/types/Path/Path.js.map +1 -1
  37. package/lib/module/skia/web/JsiSkPath.js +7 -0
  38. package/lib/module/skia/web/JsiSkPath.js.map +1 -1
  39. package/lib/module/skia/web/JsiSkRRect.js +14 -1
  40. package/lib/module/skia/web/JsiSkRRect.js.map +1 -1
  41. package/lib/module/skia/web/JsiSkia.js +1 -1
  42. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  43. package/lib/typescript/src/renderer/Canvas.d.ts +4 -7
  44. package/lib/typescript/src/renderer/DrawingContext.d.ts +2 -5
  45. package/lib/typescript/src/renderer/Reconciler.d.ts +13 -0
  46. package/lib/typescript/src/skia/types/Path/Path.d.ts +13 -0
  47. package/lib/typescript/src/skia/web/JsiSkPath.d.ts +1 -0
  48. package/lib/typescript/src/skia/web/JsiSkRRect.d.ts +2 -2
  49. package/package.json +1 -1
  50. package/src/dom/nodes/datatypes/Transform.ts +0 -2
  51. package/src/dom/nodes/paint/Shaders.ts +1 -1
  52. package/src/renderer/Canvas.tsx +12 -61
  53. package/src/renderer/DrawingContext.ts +2 -6
  54. package/src/renderer/Reconciler.tsx +66 -0
  55. package/src/skia/types/Path/Path.ts +14 -0
  56. package/src/skia/web/JsiSkPath.ts +10 -0
  57. package/src/skia/web/JsiSkRRect.ts +13 -2
  58. package/src/skia/web/JsiSkia.ts +1 -4
@@ -32,11 +32,6 @@ public abstract class SkiaBaseView extends ReactViewGroup implements TextureView
32
32
 
33
33
  @Override
34
34
  public boolean onTouchEvent(MotionEvent ev) {
35
- // We do not accept the touch event if this view is not supposed to receive it.
36
- if (!PointerEvents.canBeTouchTarget(getPointerEvents())) {
37
- return false;
38
- }
39
-
40
35
  // https://developer.android.com/training/gestures/multi
41
36
  int action = ev.getActionMasked();
42
37
 
@@ -41,6 +41,23 @@ public:
41
41
  return jsi::String::createFromUtf8(runtime, "Path");
42
42
  }
43
43
 
44
+ JSI_HOST_FUNCTION(addPath) {
45
+ auto src = JsiSkPath::fromValue(runtime, arguments[0]);
46
+ auto matrix =
47
+ count > 1 && !arguments[1].isUndefined() && !arguments[1].isNull()
48
+ ? JsiSkMatrix::fromValue(runtime, arguments[1])
49
+ : nullptr;
50
+ auto mode = count > 2 && arguments[2].isBool() && arguments[2].getBool()
51
+ ? SkPath::kExtend_AddPathMode
52
+ : SkPath::kAppend_AddPathMode;
53
+ if (matrix == nullptr) {
54
+ getObject()->addPath(*src, mode);
55
+ } else {
56
+ getObject()->addPath(*src, *matrix, mode);
57
+ }
58
+ return thisValue.getObject(runtime);
59
+ }
60
+
44
61
  JSI_HOST_FUNCTION(addArc) {
45
62
  auto rect = JsiSkRect::fromValue(runtime, arguments[0]);
46
63
  auto start = arguments[1].asNumber();
@@ -512,9 +529,9 @@ public:
512
529
  JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(JsiSkPath, __typename__))
513
530
 
514
531
  JSI_EXPORT_FUNCTIONS(
515
- JSI_EXPORT_FUNC(JsiSkPath, addArc), JSI_EXPORT_FUNC(JsiSkPath, addOval),
516
- JSI_EXPORT_FUNC(JsiSkPath, addPoly), JSI_EXPORT_FUNC(JsiSkPath, addRect),
517
- JSI_EXPORT_FUNC(JsiSkPath, addRRect),
532
+ JSI_EXPORT_FUNC(JsiSkPath, addPath), JSI_EXPORT_FUNC(JsiSkPath, addArc),
533
+ JSI_EXPORT_FUNC(JsiSkPath, addOval), JSI_EXPORT_FUNC(JsiSkPath, addPoly),
534
+ JSI_EXPORT_FUNC(JsiSkPath, addRect), JSI_EXPORT_FUNC(JsiSkPath, addRRect),
518
535
  JSI_EXPORT_FUNC(JsiSkPath, arcToOval),
519
536
  JSI_EXPORT_FUNC(JsiSkPath, arcToRotated),
520
537
  JSI_EXPORT_FUNC(JsiSkPath, rArcTo),
@@ -15,15 +15,8 @@ public:
15
15
 
16
16
  protected:
17
17
  void renderNode(DrawingContext *context) override {
18
- // Verify
19
- if (!_rrectProp->isSet() && !_rectProp->isSet()) {
20
- throw std::runtime_error("The box property must be set on the Box node.");
21
- }
22
-
23
18
  // Get rect - we'll try to end up with an rrect:
24
- auto box = _rrectProp->isSet()
25
- ? *_rrectProp->getDerivedValue()
26
- : SkRRect::MakeRectXY(*_rectProp->getDerivedValue(), 0, 0);
19
+ auto box = *_boxProp->getDerivedValue();
27
20
 
28
21
  // Get shadows
29
22
  std::vector<std::shared_ptr<JsiBoxShadowNode>> shadows;
@@ -76,8 +69,8 @@ protected:
76
69
 
77
70
  void defineProperties(NodePropsContainer *container) override {
78
71
  JsiDomRenderNode::defineProperties(container);
79
- _rrectProp = container->defineProperty<RRectProp>("box");
80
- _rectProp = container->defineProperty<RectProp>("box");
72
+ _boxProp = container->defineProperty<BoxProps>("box");
73
+ _boxProp->require();
81
74
  }
82
75
 
83
76
  private:
@@ -95,8 +88,7 @@ private:
95
88
  return inflate(box, -dx, -dy, tx, ty);
96
89
  }
97
90
 
98
- RRectProp *_rrectProp;
99
- RectProp *_rectProp;
91
+ BoxProps *_boxProp;
100
92
  };
101
93
 
102
94
  } // namespace RNSkia
@@ -67,9 +67,22 @@ protected:
67
67
  }
68
68
  auto uniforms =
69
69
  _uniformsProp->isSet() ? _uniformsProp->getDerivedValue() : nullptr;
70
- auto localMatrix =
70
+
71
+ SkMatrix lm;
72
+ auto tm =
71
73
  _transformProp->isSet() ? _transformProp->getDerivedValue() : nullptr;
72
74
 
75
+ if (tm != nullptr) {
76
+ if (_originProp->isSet()) {
77
+ auto tr = _originProp->getDerivedValue();
78
+ lm.preTranslate(tr->x(), tr->y());
79
+ lm.preConcat(*tm);
80
+ lm.preTranslate(-tr->x(), -tr->y());
81
+ } else {
82
+ lm.preConcat(*tm);
83
+ }
84
+ }
85
+
73
86
  // get all children that are shader nodes
74
87
  std::vector<sk_sp<SkShader>> children;
75
88
  children.reserve(getChildren().size());
@@ -82,8 +95,7 @@ protected:
82
95
 
83
96
  // Update shader
84
97
  setShader(context, source->getObject()->makeShader(
85
- uniforms, children.data(), children.size(),
86
- localMatrix.get()));
98
+ uniforms, children.data(), children.size(), &lm));
87
99
  }
88
100
  }
89
101
 
@@ -93,6 +105,7 @@ protected:
93
105
  _uniformsProp =
94
106
  container->defineProperty<UniformsProp>("uniforms", _sourceProp);
95
107
  _transformProp = container->defineProperty<TransformProp>("transform");
108
+ _originProp = container->defineProperty<PointProp>("origin");
96
109
 
97
110
  _sourceProp->require();
98
111
  }
@@ -101,6 +114,7 @@ private:
101
114
  NodeProp *_sourceProp;
102
115
  UniformsProp *_uniformsProp;
103
116
  TransformProp *_transformProp;
117
+ PointProp *_originProp;
104
118
  };
105
119
 
106
120
  class JsiImageShaderNode : public JsiBaseShaderNode,
@@ -114,9 +128,8 @@ protected:
114
128
  if (isChanged(context)) {
115
129
  auto image = _imageProps->getImage();
116
130
  auto rect = _imageProps->getRect();
117
- auto lm = _transformProp->isSet()
118
- ? _transformProp->getDerivedValue().get()
119
- : nullptr;
131
+ auto lm =
132
+ _transformProp->isSet() ? _transformProp->getDerivedValue() : nullptr;
120
133
 
121
134
  if (rect != nullptr && lm != nullptr) {
122
135
  auto rc = _imageProps->getDerivedValue();
@@ -127,9 +140,15 @@ protected:
127
140
  // matrix to be translated and scaled more and more for each render
128
141
  // even thought the matrix prop did not change.
129
142
  _matrix.reset();
130
- _matrix.preConcat(*lm);
131
- _matrix.preTranslate(m3.x(), m3.y());
132
- _matrix.preScale(m3.width(), m3.height());
143
+ _matrix.preConcat(m3);
144
+ if (_originProp->isSet()) {
145
+ auto tr = _originProp->getDerivedValue();
146
+ _matrix.preTranslate(tr->x(), tr->y());
147
+ _matrix.preConcat(*lm);
148
+ _matrix.preTranslate(-tr->x(), -tr->y());
149
+ } else {
150
+ _matrix.preConcat(*lm);
151
+ }
133
152
  }
134
153
  }
135
154
 
@@ -154,6 +173,7 @@ protected:
154
173
 
155
174
  _imageProps = container->defineProperty<ImageProps>();
156
175
  _transformProp = container->defineProperty<TransformProp>("transform");
176
+ _originProp = container->defineProperty<PointProp>("origin");
157
177
 
158
178
  _txProp->require();
159
179
  _tyProp->require();
@@ -201,6 +221,7 @@ private:
201
221
  NodeProp *_mipmapModeProp;
202
222
  ImageProps *_imageProps;
203
223
  TransformProp *_transformProp;
224
+ PointProp *_originProp;
204
225
  };
205
226
 
206
227
  class JsiColorShaderNode : public JsiBaseShaderNode,
@@ -78,12 +78,15 @@ public:
78
78
  return _rectProp->getDerivedValue();
79
79
  }
80
80
 
81
- SkRect rect2rect(SkRect src, SkRect dst) {
82
- auto scaleX = dst.width() / src.width();
83
- auto scaleY = dst.height() / src.height();
84
- auto translateX = dst.x() - src.x() * scaleX;
85
- auto translateY = dst.y() - src.y() * scaleY;
86
- return SkRect::MakeXYWH(translateX, translateY, scaleX, scaleY);
81
+ SkMatrix rect2rect(SkRect src, SkRect dst) {
82
+ auto sx = dst.width() / src.width();
83
+ auto sy = dst.height() / src.height();
84
+ auto tx = dst.x() - src.x() * sx;
85
+ auto ty = dst.y() - src.y() * sy;
86
+ SkMatrix m3;
87
+ m3.preTranslate(tx, ty);
88
+ m3.preScale(sx, sy);
89
+ return m3;
87
90
  }
88
91
 
89
92
  private:
@@ -17,7 +17,6 @@ namespace RNSkia {
17
17
 
18
18
  static PropId PropNameX = JsiPropId::get("x");
19
19
  static PropId PropNameY = JsiPropId::get("y");
20
- static SkPoint EmptyPoint = SkPoint::Make(-1, -1);
21
20
 
22
21
  class PointProp : public DerivedProp<SkPoint> {
23
22
  public:
@@ -26,9 +25,9 @@ public:
26
25
  }
27
26
 
28
27
  void updateDerivedValue() override {
29
- auto point = processProperty(_pointProp);
30
- if (EmptyPoint != point) {
31
- setDerivedValue(std::move(point));
28
+ if (_pointProp->isSet()) {
29
+ // Check for JsiSkRect and JsiSkPoint
30
+ setDerivedValue(std::move(processValue(_pointProp->value())));
32
31
  } else {
33
32
  setDerivedValue(nullptr);
34
33
  }
@@ -54,15 +53,7 @@ public:
54
53
  auto y = value.getValue(PropNameY);
55
54
  return SkPoint::Make(x.getAsNumber(), y.getAsNumber());
56
55
  }
57
- return EmptyPoint;
58
- }
59
-
60
- static SkPoint processProperty(NodeProp *prop) {
61
- if (prop->isSet()) {
62
- // Check for JsiSkRect and JsiSkPoint
63
- return processValue(prop->value());
64
- }
65
- return EmptyPoint;
56
+ throw std::runtime_error("Expected point value.");
66
57
  }
67
58
 
68
59
  private:
@@ -62,13 +62,7 @@ public:
62
62
  points.reserve(pointsArray.size());
63
63
  for (size_t i = 0; i < pointsArray.size(); ++i) {
64
64
  auto p = pointsArray[i];
65
- auto point = PointProp::processValue(p);
66
- if (point != EmptyPoint) {
67
- points.push_back(point);
68
- } else {
69
- throw std::runtime_error(
70
- "Expected array of points for points property.");
71
- }
65
+ points.push_back(PointProp::processValue(p));
72
66
  }
73
67
  setDerivedValue(std::move(points));
74
68
  } else {
@@ -131,4 +131,57 @@ private:
131
131
  RRectProp *_rectProp;
132
132
  RRectPropFromProps *_rectPropFromProps;
133
133
  };
134
+
135
+ /**
136
+ Reads rect props from either a given property or from the property object
137
+ itself.
138
+ */
139
+ class BoxProps : public DerivedProp<SkRRect> {
140
+ public:
141
+ explicit BoxProps(PropId name) : DerivedProp<SkRRect>() {
142
+ _boxProp = addProperty(std::make_shared<NodeProp>(name));
143
+ }
144
+
145
+ void updateDerivedValue() override {
146
+ if (_boxProp->value().getType() == PropType::HostObject) {
147
+ auto rectPtr = std::dynamic_pointer_cast<JsiSkRect>(
148
+ _boxProp->value().getAsHostObject());
149
+ auto rrectPtr = std::dynamic_pointer_cast<JsiSkRRect>(
150
+ _boxProp->value().getAsHostObject());
151
+ // 1. box is SkRect
152
+ if (rectPtr != nullptr) {
153
+ auto rect = rectPtr->getObject();
154
+ setDerivedValue(SkRRect::MakeRect(*rect));
155
+ // 2. box is SkRRect
156
+ } else if (rrectPtr != nullptr) {
157
+ setDerivedValue(rrectPtr->getObject());
158
+ }
159
+ } else if (_boxProp->value().getType() == PropType::Object) {
160
+ if (_boxProp->value().hasValue(PropNameRect)) {
161
+ // 3. box is { rect: { x, y, width, height }, rx, ry }
162
+ auto rectProp = _boxProp->value().getValue(PropNameRect);
163
+ auto x = rectProp.getValue(PropNameX).getAsNumber();
164
+ auto y = rectProp.getValue(PropNameY).getAsNumber();
165
+ auto width = rectProp.getValue(PropNameWidth).getAsNumber();
166
+ auto height = rectProp.getValue(PropNameHeight).getAsNumber();
167
+ auto rx = _boxProp->value().getValue(PropNameRx).getAsNumber();
168
+ auto ry = _boxProp->value().getValue(PropNameRy).getAsNumber();
169
+ setDerivedValue(
170
+ SkRRect::MakeRectXY(SkRect::MakeXYWH(x, y, width, height), rx, ry));
171
+ } else {
172
+ // 4. box is { x, y, width, height }
173
+ auto x = _boxProp->value().getValue(PropNameX).getAsNumber();
174
+ auto y = _boxProp->value().getValue(PropNameY).getAsNumber();
175
+ auto width = _boxProp->value().getValue(PropNameWidth).getAsNumber();
176
+ auto height = _boxProp->value().getValue(PropNameHeight).getAsNumber();
177
+ setDerivedValue(
178
+ SkRRect::MakeRect(SkRect::MakeXYWH(x, y, width, height)));
179
+ }
180
+ }
181
+ }
182
+
183
+ private:
184
+ NodeProp *_boxProp;
185
+ };
186
+
134
187
  } // namespace RNSkia
@@ -17,26 +17,24 @@ namespace RNSkia {
17
17
  class RadiusProp : public DerivedProp<SkPoint> {
18
18
  public:
19
19
  explicit RadiusProp(PropId name) : DerivedProp<SkPoint>() {
20
- _pointProp = addProperty(std::make_shared<PointProp>(name));
21
20
  _radiusProp = addProperty(std::make_shared<NodeProp>(name));
22
21
  }
23
22
 
24
23
  void updateDerivedValue() override {
25
- if (_pointProp->isSet()) {
26
- setDerivedValue(_pointProp->getDerivedValue());
27
- return;
28
- }
29
-
30
24
  if (_radiusProp->isSet()) {
31
- setDerivedValue(SkPoint::Make(_radiusProp->value().getAsNumber(),
32
- _radiusProp->value().getAsNumber()));
25
+ // Check for simple number:
26
+ if (_radiusProp->value().getType() == PropType::Number) {
27
+ setDerivedValue(SkPoint::Make(_radiusProp->value().getAsNumber(),
28
+ _radiusProp->value().getAsNumber()));
29
+ } else {
30
+ setDerivedValue(PointProp::processValue(_radiusProp->value()));
31
+ }
33
32
  } else {
34
33
  setDerivedValue(nullptr);
35
34
  }
36
35
  }
37
36
 
38
37
  private:
39
- PointProp *_pointProp;
40
38
  NodeProp *_radiusProp;
41
39
  };
42
40
 
@@ -54,9 +54,9 @@ public:
54
54
  } else if (key == PropNameScaleY) {
55
55
  m->preScale(1, value);
56
56
  } else if (key == PropNameSkewX) {
57
- m->preScale(value, 0);
57
+ m->preSkew(value, 0);
58
58
  } else if (key == PropNameSkewY) {
59
- m->preScale(value, 0);
59
+ m->preSkew(0, value);
60
60
  } else if (key == PropNameRotate || key == PropNameRotateZ) {
61
61
  m->preRotate(SkRadiansToDegrees(value));
62
62
  } else {
@@ -20,12 +20,9 @@ const processTransformProps = (m3, props) => {
20
20
  m3.concat(matrix);
21
21
  m3.translate(-origin.x, -origin.y);
22
22
  } else {
23
- m3.identity();
24
23
  m3.concat(matrix);
25
24
  }
26
25
  } else if (transform) {
27
- m3.identity();
28
-
29
26
  if (origin) {
30
27
  m3.translate(origin.x, origin.y);
31
28
  }
@@ -1 +1 @@
1
- {"version":3,"names":["processTransformProps","m3","props","transform","origin","matrix","translate","x","y","concat","identity","processTransform"],"sources":["Transform.ts"],"sourcesContent":["import type { TransformProps } from \"../../types\";\nimport type { SkMatrix } from \"../../../skia/types\";\nimport { processTransform } from \"../../../skia/types\";\n\nexport const processTransformProps = (m3: SkMatrix, props: TransformProps) => {\n const { transform, origin, matrix } = props;\n if (matrix) {\n if (origin) {\n m3.translate(origin.x, origin.y);\n m3.concat(matrix);\n m3.translate(-origin.x, -origin.y);\n } else {\n m3.identity();\n m3.concat(matrix);\n }\n } else if (transform) {\n m3.identity();\n if (origin) {\n m3.translate(origin.x, origin.y);\n }\n processTransform(m3, transform);\n if (origin) {\n m3.translate(-origin.x, -origin.y);\n }\n }\n};\n"],"mappings":";;;;;;;AAEA;;AAEO,MAAMA,qBAAqB,GAAG,CAACC,EAAD,EAAeC,KAAf,KAAyC;EAC5E,MAAM;IAAEC,SAAF;IAAaC,MAAb;IAAqBC;EAArB,IAAgCH,KAAtC;;EACA,IAAIG,MAAJ,EAAY;IACV,IAAID,MAAJ,EAAY;MACVH,EAAE,CAACK,SAAH,CAAaF,MAAM,CAACG,CAApB,EAAuBH,MAAM,CAACI,CAA9B;MACAP,EAAE,CAACQ,MAAH,CAAUJ,MAAV;MACAJ,EAAE,CAACK,SAAH,CAAa,CAACF,MAAM,CAACG,CAArB,EAAwB,CAACH,MAAM,CAACI,CAAhC;IACD,CAJD,MAIO;MACLP,EAAE,CAACS,QAAH;MACAT,EAAE,CAACQ,MAAH,CAAUJ,MAAV;IACD;EACF,CATD,MASO,IAAIF,SAAJ,EAAe;IACpBF,EAAE,CAACS,QAAH;;IACA,IAAIN,MAAJ,EAAY;MACVH,EAAE,CAACK,SAAH,CAAaF,MAAM,CAACG,CAApB,EAAuBH,MAAM,CAACI,CAA9B;IACD;;IACD,IAAAG,uBAAA,EAAiBV,EAAjB,EAAqBE,SAArB;;IACA,IAAIC,MAAJ,EAAY;MACVH,EAAE,CAACK,SAAH,CAAa,CAACF,MAAM,CAACG,CAArB,EAAwB,CAACH,MAAM,CAACI,CAAhC;IACD;EACF;AACF,CArBM"}
1
+ {"version":3,"names":["processTransformProps","m3","props","transform","origin","matrix","translate","x","y","concat","processTransform"],"sources":["Transform.ts"],"sourcesContent":["import type { TransformProps } from \"../../types\";\nimport type { SkMatrix } from \"../../../skia/types\";\nimport { processTransform } from \"../../../skia/types\";\n\nexport const processTransformProps = (m3: SkMatrix, props: TransformProps) => {\n const { transform, origin, matrix } = props;\n if (matrix) {\n if (origin) {\n m3.translate(origin.x, origin.y);\n m3.concat(matrix);\n m3.translate(-origin.x, -origin.y);\n } else {\n m3.concat(matrix);\n }\n } else if (transform) {\n if (origin) {\n m3.translate(origin.x, origin.y);\n }\n processTransform(m3, transform);\n if (origin) {\n m3.translate(-origin.x, -origin.y);\n }\n }\n};\n"],"mappings":";;;;;;;AAEA;;AAEO,MAAMA,qBAAqB,GAAG,CAACC,EAAD,EAAeC,KAAf,KAAyC;EAC5E,MAAM;IAAEC,SAAF;IAAaC,MAAb;IAAqBC;EAArB,IAAgCH,KAAtC;;EACA,IAAIG,MAAJ,EAAY;IACV,IAAID,MAAJ,EAAY;MACVH,EAAE,CAACK,SAAH,CAAaF,MAAM,CAACG,CAApB,EAAuBH,MAAM,CAACI,CAA9B;MACAP,EAAE,CAACQ,MAAH,CAAUJ,MAAV;MACAJ,EAAE,CAACK,SAAH,CAAa,CAACF,MAAM,CAACG,CAArB,EAAwB,CAACH,MAAM,CAACI,CAAhC;IACD,CAJD,MAIO;MACLP,EAAE,CAACQ,MAAH,CAAUJ,MAAV;IACD;EACF,CARD,MAQO,IAAIF,SAAJ,EAAe;IACpB,IAAIC,MAAJ,EAAY;MACVH,EAAE,CAACK,SAAH,CAAaF,MAAM,CAACG,CAApB,EAAuBH,MAAM,CAACI,CAA9B;IACD;;IACD,IAAAE,uBAAA,EAAiBT,EAAjB,EAAqBE,SAArB;;IACA,IAAIC,MAAJ,EAAY;MACVH,EAAE,CAACK,SAAH,CAAa,CAACF,MAAM,CAACG,CAArB,EAAwB,CAACH,MAAM,CAACI,CAAhC;IACD;EACF;AACF,CAnBM"}
@@ -73,8 +73,8 @@ class ImageShaderNode extends ShaderDeclaration {
73
73
  }
74
74
 
75
75
  const lm = this.Skia.Matrix();
76
- (0, _datatypes.processTransformProps)(lm, imageShaderProps);
77
76
  lm.concat(m3);
77
+ (0, _datatypes.processTransformProps)(lm, imageShaderProps);
78
78
  return image.makeShaderOptions(_types.TileMode[(0, _datatypes.enumKey)(tx)], _types.TileMode[(0, _datatypes.enumKey)(ty)], _types.FilterMode[(0, _datatypes.enumKey)(fm)], _types.MipmapMode[(0, _datatypes.enumKey)(mm)], lm);
79
79
  }
80
80
 
@@ -1 +1 @@
1
- {"version":3,"names":["ShaderDeclaration","JsiDeclarationNode","constructor","ctx","type","props","DeclarationType","Shader","ShaderNode","NodeType","materialize","source","uniforms","transform","m3","Skia","Matrix","processTransformProps","makeShaderWithChildren","processUniforms","children","filter","child","isShader","map","ImageShaderNode","ImageShader","fit","image","tx","ty","fm","mm","imageShaderProps","rct","getRect","rects","fitRects","x","y","width","height","sx","sy","rect2rect","src","dst","translate","translateX","translateY","scale","scaleX","scaleY","lm","concat","makeShaderOptions","TileMode","enumKey","FilterMode","MipmapMode","ColorNode","ColorShader","color","MakeColor","Color","TurbulenceNode","Turbulence","freqX","freqY","octaves","seed","tileWidth","tileHeight","MakeTurbulence","FractalNoiseNode","FractalNoise","MakeFractalNoise","LinearGradientNode","LinearGradient","start","end","colors","positions","mode","localMatrix","flags","processGradientProps","MakeLinearGradient","RadialGradientNode","RadialGradient","c","r","MakeRadialGradient","SweepGradientNode","SweepGradient","MakeSweepGradient","TwoPointConicalGradientNode","TwoPointConicalGradient","startR","endR","MakeTwoPointConicalGradient"],"sources":["Shaders.ts"],"sourcesContent":["import {\n processUniforms,\n FilterMode,\n MipmapMode,\n TileMode,\n} from \"../../../skia/types\";\nimport type { SkShader } from \"../../../skia/types\";\nimport type { NodeContext } from \"../Node\";\nimport { JsiDeclarationNode } from \"../Node\";\nimport type {\n ColorProps,\n FractalNoiseProps,\n ImageShaderProps,\n LinearGradientProps,\n RadialGradientProps,\n ShaderProps,\n SweepGradientProps,\n TurbulenceProps,\n TwoPointConicalGradientProps,\n} from \"../../types\";\nimport { DeclarationType, NodeType } from \"../../types\";\nimport {\n enumKey,\n fitRects,\n getRect,\n processGradientProps,\n processTransformProps,\n rect2rect,\n} from \"../datatypes\";\n\nexport abstract class ShaderDeclaration<P> extends JsiDeclarationNode<\n P,\n SkShader\n> {\n constructor(ctx: NodeContext, type: NodeType, props: P) {\n super(ctx, DeclarationType.Shader, type, props);\n }\n}\n\nexport class ShaderNode extends ShaderDeclaration<ShaderProps> {\n constructor(ctx: NodeContext, props: ShaderProps) {\n super(ctx, NodeType.Shader, props);\n }\n\n materialize() {\n const { source, uniforms, ...transform } = this.props;\n const m3 = this.Skia.Matrix();\n processTransformProps(m3, transform);\n return source.makeShaderWithChildren(\n processUniforms(source, uniforms),\n this.children()\n .filter(\n (child): child is JsiDeclarationNode<unknown, SkShader> =>\n child instanceof JsiDeclarationNode && child.isShader()\n )\n .map((child) => child.materialize()),\n m3\n );\n }\n}\n\nexport class ImageShaderNode extends ShaderDeclaration<ImageShaderProps> {\n constructor(ctx: NodeContext, props: ImageShaderProps) {\n super(ctx, NodeType.ImageShader, props);\n }\n\n materialize() {\n const { fit, image, tx, ty, fm, mm, ...imageShaderProps } = this.props;\n const rct = getRect(this.Skia, imageShaderProps);\n const m3 = this.Skia.Matrix();\n if (rct) {\n const rects = fitRects(\n fit,\n { x: 0, y: 0, width: image.width(), height: image.height() },\n rct\n );\n const [x, y, sx, sy] = rect2rect(rects.src, rects.dst);\n m3.translate(x.translateX, y.translateY);\n m3.scale(sx.scaleX, sy.scaleY);\n }\n const lm = this.Skia.Matrix();\n processTransformProps(lm, imageShaderProps);\n lm.concat(m3);\n return image.makeShaderOptions(\n TileMode[enumKey(tx)],\n TileMode[enumKey(ty)],\n FilterMode[enumKey(fm)],\n MipmapMode[enumKey(mm)],\n lm\n );\n }\n}\n\nexport class ColorNode extends ShaderDeclaration<ColorProps> {\n constructor(ctx: NodeContext, props: ColorProps) {\n super(ctx, NodeType.ColorShader, props);\n }\n\n materialize() {\n const { color } = this.props;\n return this.Skia.Shader.MakeColor(this.Skia.Color(color));\n }\n}\n\nexport class TurbulenceNode extends ShaderDeclaration<TurbulenceProps> {\n constructor(ctx: NodeContext, props: TurbulenceProps) {\n super(ctx, NodeType.Turbulence, props);\n }\n\n materialize() {\n const { freqX, freqY, octaves, seed, tileWidth, tileHeight } = this.props;\n return this.Skia.Shader.MakeTurbulence(\n freqX,\n freqY,\n octaves,\n seed,\n tileWidth,\n tileHeight\n );\n }\n}\n\nexport class FractalNoiseNode extends ShaderDeclaration<FractalNoiseProps> {\n constructor(ctx: NodeContext, props: FractalNoiseProps) {\n super(ctx, NodeType.FractalNoise, props);\n }\n\n materialize() {\n const { freqX, freqY, octaves, seed, tileWidth, tileHeight } = this.props;\n return this.Skia.Shader.MakeFractalNoise(\n freqX,\n freqY,\n octaves,\n seed,\n tileWidth,\n tileHeight\n );\n }\n}\n\nexport class LinearGradientNode extends ShaderDeclaration<LinearGradientProps> {\n constructor(ctx: NodeContext, props: LinearGradientProps) {\n super(ctx, NodeType.LinearGradient, props);\n }\n\n materialize() {\n const { start, end } = this.props;\n const { colors, positions, mode, localMatrix, flags } =\n processGradientProps(this.Skia, this.props);\n return this.Skia.Shader.MakeLinearGradient(\n start,\n end,\n colors,\n positions ?? null,\n mode,\n localMatrix,\n flags\n );\n }\n}\n\nexport class RadialGradientNode extends ShaderDeclaration<RadialGradientProps> {\n constructor(ctx: NodeContext, props: RadialGradientProps) {\n super(ctx, NodeType.RadialGradient, props);\n }\n\n materialize() {\n const { c, r } = this.props;\n const { colors, positions, mode, localMatrix, flags } =\n processGradientProps(this.Skia, this.props);\n return this.Skia.Shader.MakeRadialGradient(\n c,\n r,\n colors,\n positions,\n mode,\n localMatrix,\n flags\n );\n }\n}\n\nexport class SweepGradientNode extends ShaderDeclaration<SweepGradientProps> {\n constructor(ctx: NodeContext, props: SweepGradientProps) {\n super(ctx, NodeType.SweepGradient, props);\n }\n\n materialize() {\n const { c, start, end } = this.props;\n const { colors, positions, mode, localMatrix, flags } =\n processGradientProps(this.Skia, this.props);\n return this.Skia.Shader.MakeSweepGradient(\n c.x,\n c.y,\n colors,\n positions,\n mode,\n localMatrix,\n flags,\n start,\n end\n );\n }\n}\n\nexport class TwoPointConicalGradientNode extends ShaderDeclaration<TwoPointConicalGradientProps> {\n constructor(ctx: NodeContext, props: TwoPointConicalGradientProps) {\n super(ctx, NodeType.TwoPointConicalGradient, props);\n }\n\n materialize() {\n const { startR, endR, start, end } = this.props;\n const { colors, positions, mode, localMatrix, flags } =\n processGradientProps(this.Skia, this.props);\n return this.Skia.Shader.MakeTwoPointConicalGradient(\n start,\n startR,\n end,\n endR,\n colors,\n positions,\n mode,\n localMatrix,\n flags\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["ShaderDeclaration","JsiDeclarationNode","constructor","ctx","type","props","DeclarationType","Shader","ShaderNode","NodeType","materialize","source","uniforms","transform","m3","Skia","Matrix","processTransformProps","makeShaderWithChildren","processUniforms","children","filter","child","isShader","map","ImageShaderNode","ImageShader","fit","image","tx","ty","fm","mm","imageShaderProps","rct","getRect","rects","fitRects","x","y","width","height","sx","sy","rect2rect","src","dst","translate","translateX","translateY","scale","scaleX","scaleY","lm","concat","makeShaderOptions","TileMode","enumKey","FilterMode","MipmapMode","ColorNode","ColorShader","color","MakeColor","Color","TurbulenceNode","Turbulence","freqX","freqY","octaves","seed","tileWidth","tileHeight","MakeTurbulence","FractalNoiseNode","FractalNoise","MakeFractalNoise","LinearGradientNode","LinearGradient","start","end","colors","positions","mode","localMatrix","flags","processGradientProps","MakeLinearGradient","RadialGradientNode","RadialGradient","c","r","MakeRadialGradient","SweepGradientNode","SweepGradient","MakeSweepGradient","TwoPointConicalGradientNode","TwoPointConicalGradient","startR","endR","MakeTwoPointConicalGradient"],"sources":["Shaders.ts"],"sourcesContent":["import {\n processUniforms,\n FilterMode,\n MipmapMode,\n TileMode,\n} from \"../../../skia/types\";\nimport type { SkShader } from \"../../../skia/types\";\nimport type { NodeContext } from \"../Node\";\nimport { JsiDeclarationNode } from \"../Node\";\nimport type {\n ColorProps,\n FractalNoiseProps,\n ImageShaderProps,\n LinearGradientProps,\n RadialGradientProps,\n ShaderProps,\n SweepGradientProps,\n TurbulenceProps,\n TwoPointConicalGradientProps,\n} from \"../../types\";\nimport { DeclarationType, NodeType } from \"../../types\";\nimport {\n enumKey,\n fitRects,\n getRect,\n processGradientProps,\n processTransformProps,\n rect2rect,\n} from \"../datatypes\";\n\nexport abstract class ShaderDeclaration<P> extends JsiDeclarationNode<\n P,\n SkShader\n> {\n constructor(ctx: NodeContext, type: NodeType, props: P) {\n super(ctx, DeclarationType.Shader, type, props);\n }\n}\n\nexport class ShaderNode extends ShaderDeclaration<ShaderProps> {\n constructor(ctx: NodeContext, props: ShaderProps) {\n super(ctx, NodeType.Shader, props);\n }\n\n materialize() {\n const { source, uniforms, ...transform } = this.props;\n const m3 = this.Skia.Matrix();\n processTransformProps(m3, transform);\n return source.makeShaderWithChildren(\n processUniforms(source, uniforms),\n this.children()\n .filter(\n (child): child is JsiDeclarationNode<unknown, SkShader> =>\n child instanceof JsiDeclarationNode && child.isShader()\n )\n .map((child) => child.materialize()),\n m3\n );\n }\n}\n\nexport class ImageShaderNode extends ShaderDeclaration<ImageShaderProps> {\n constructor(ctx: NodeContext, props: ImageShaderProps) {\n super(ctx, NodeType.ImageShader, props);\n }\n\n materialize() {\n const { fit, image, tx, ty, fm, mm, ...imageShaderProps } = this.props;\n const rct = getRect(this.Skia, imageShaderProps);\n const m3 = this.Skia.Matrix();\n if (rct) {\n const rects = fitRects(\n fit,\n { x: 0, y: 0, width: image.width(), height: image.height() },\n rct\n );\n const [x, y, sx, sy] = rect2rect(rects.src, rects.dst);\n m3.translate(x.translateX, y.translateY);\n m3.scale(sx.scaleX, sy.scaleY);\n }\n const lm = this.Skia.Matrix();\n lm.concat(m3);\n processTransformProps(lm, imageShaderProps);\n return image.makeShaderOptions(\n TileMode[enumKey(tx)],\n TileMode[enumKey(ty)],\n FilterMode[enumKey(fm)],\n MipmapMode[enumKey(mm)],\n lm\n );\n }\n}\n\nexport class ColorNode extends ShaderDeclaration<ColorProps> {\n constructor(ctx: NodeContext, props: ColorProps) {\n super(ctx, NodeType.ColorShader, props);\n }\n\n materialize() {\n const { color } = this.props;\n return this.Skia.Shader.MakeColor(this.Skia.Color(color));\n }\n}\n\nexport class TurbulenceNode extends ShaderDeclaration<TurbulenceProps> {\n constructor(ctx: NodeContext, props: TurbulenceProps) {\n super(ctx, NodeType.Turbulence, props);\n }\n\n materialize() {\n const { freqX, freqY, octaves, seed, tileWidth, tileHeight } = this.props;\n return this.Skia.Shader.MakeTurbulence(\n freqX,\n freqY,\n octaves,\n seed,\n tileWidth,\n tileHeight\n );\n }\n}\n\nexport class FractalNoiseNode extends ShaderDeclaration<FractalNoiseProps> {\n constructor(ctx: NodeContext, props: FractalNoiseProps) {\n super(ctx, NodeType.FractalNoise, props);\n }\n\n materialize() {\n const { freqX, freqY, octaves, seed, tileWidth, tileHeight } = this.props;\n return this.Skia.Shader.MakeFractalNoise(\n freqX,\n freqY,\n octaves,\n seed,\n tileWidth,\n tileHeight\n );\n }\n}\n\nexport class LinearGradientNode extends ShaderDeclaration<LinearGradientProps> {\n constructor(ctx: NodeContext, props: LinearGradientProps) {\n super(ctx, NodeType.LinearGradient, props);\n }\n\n materialize() {\n const { start, end } = this.props;\n const { colors, positions, mode, localMatrix, flags } =\n processGradientProps(this.Skia, this.props);\n return this.Skia.Shader.MakeLinearGradient(\n start,\n end,\n colors,\n positions ?? null,\n mode,\n localMatrix,\n flags\n );\n }\n}\n\nexport class RadialGradientNode extends ShaderDeclaration<RadialGradientProps> {\n constructor(ctx: NodeContext, props: RadialGradientProps) {\n super(ctx, NodeType.RadialGradient, props);\n }\n\n materialize() {\n const { c, r } = this.props;\n const { colors, positions, mode, localMatrix, flags } =\n processGradientProps(this.Skia, this.props);\n return this.Skia.Shader.MakeRadialGradient(\n c,\n r,\n colors,\n positions,\n mode,\n localMatrix,\n flags\n );\n }\n}\n\nexport class SweepGradientNode extends ShaderDeclaration<SweepGradientProps> {\n constructor(ctx: NodeContext, props: SweepGradientProps) {\n super(ctx, NodeType.SweepGradient, props);\n }\n\n materialize() {\n const { c, start, end } = this.props;\n const { colors, positions, mode, localMatrix, flags } =\n processGradientProps(this.Skia, this.props);\n return this.Skia.Shader.MakeSweepGradient(\n c.x,\n c.y,\n colors,\n positions,\n mode,\n localMatrix,\n flags,\n start,\n end\n );\n }\n}\n\nexport class TwoPointConicalGradientNode extends ShaderDeclaration<TwoPointConicalGradientProps> {\n constructor(ctx: NodeContext, props: TwoPointConicalGradientProps) {\n super(ctx, NodeType.TwoPointConicalGradient, props);\n }\n\n materialize() {\n const { startR, endR, start, end } = this.props;\n const { colors, positions, mode, localMatrix, flags } =\n processGradientProps(this.Skia, this.props);\n return this.Skia.Shader.MakeTwoPointConicalGradient(\n start,\n startR,\n end,\n endR,\n colors,\n positions,\n mode,\n localMatrix,\n flags\n );\n }\n}\n"],"mappings":"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"}
@@ -3,23 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useCanvasRef = exports.skiaReconciler = exports.Canvas = void 0;
6
+ exports.useCanvasRef = exports.Canvas = void 0;
7
7
 
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
 
10
- var _reactReconciler = _interopRequireDefault(require("react-reconciler"));
11
-
12
10
  var _views = require("../views");
13
11
 
14
12
  var _Skia = require("../skia/Skia");
15
13
 
16
- var _HostConfig = require("./HostConfig");
17
-
18
- var _Container = require("./Container");
19
-
20
- var _DependencyManager = require("./DependencyManager");
21
-
22
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ var _Reconciler = require("./Reconciler");
23
15
 
24
16
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
17
 
@@ -27,27 +19,9 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
27
19
 
28
20
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
29
21
 
30
- const skiaReconciler = (0, _reactReconciler.default)(_HostConfig.skHostConfig);
31
- exports.skiaReconciler = skiaReconciler;
32
- skiaReconciler.injectIntoDevTools({
33
- bundleType: 1,
34
- version: "0.0.1",
35
- rendererPackageName: "react-native-skia"
36
- });
37
-
38
- const render = (element, root, container) => {
39
- skiaReconciler.updateContainer(element, root, null, () => {
40
- (0, _HostConfig.debug)("updateContainer");
41
- container.depMgr.update();
42
- });
43
- };
44
-
45
22
  const useCanvasRef = () => (0, _react.useRef)(null);
46
23
 
47
24
  exports.useCanvasRef = useCanvasRef;
48
-
49
- const createDependencyManager = registerValues => global.SkiaDomApi && global.SkiaDomApi.DependencyManager ? global.SkiaDomApi.DependencyManager(registerValues) : new _DependencyManager.DependencyManager(registerValues);
50
-
51
25
  const Canvas = /*#__PURE__*/(0, _react.forwardRef)((_ref, forwardedRef) => {
52
26
  let {
53
27
  children,
@@ -72,25 +46,20 @@ const Canvas = /*#__PURE__*/(0, _react.forwardRef)((_ref, forwardedRef) => {
72
46
 
73
47
  return ref.current.registerValues(values);
74
48
  }, [ref]);
75
- const container = (0, _react.useMemo)(() => {
76
- return new _Container.Container(_Skia.Skia, createDependencyManager(registerValues), redraw);
77
- }, [redraw, registerValues]);
78
- const root = (0, _react.useMemo)(() => skiaReconciler.createContainer(container, 0, null, true, null, "", console.error, null), [container]); // Render effect
49
+ const root = (0, _react.useMemo)(() => new _Reconciler.SkiaRoot(_Skia.Skia, registerValues, redraw), [redraw, registerValues]); // Render effect
79
50
 
80
51
  (0, _react.useEffect)(() => {
81
- render(children, root, container);
82
- }, [children, root, redraw, container]);
52
+ root.render(children);
53
+ }, [children, root, redraw]);
83
54
  (0, _react.useEffect)(() => {
84
55
  return () => {
85
- skiaReconciler.updateContainer(null, root, null, () => {
86
- container.depMgr.remove();
87
- });
56
+ root.unmount();
88
57
  };
89
- }, [container, root]);
58
+ }, [root]);
90
59
  return /*#__PURE__*/_react.default.createElement(_views.SkiaDomView, _extends({
91
60
  ref: ref,
92
61
  style: style,
93
- root: container.root,
62
+ root: root.dom,
94
63
  onTouch: onTouch,
95
64
  onSize: onSize,
96
65
  mode: mode,
@@ -1 +1 @@
1
- {"version":3,"names":["skiaReconciler","ReactReconciler","skHostConfig","injectIntoDevTools","bundleType","version","rendererPackageName","render","element","root","container","updateContainer","hostDebug","depMgr","update","useCanvasRef","useRef","createDependencyManager","registerValues","global","SkiaDomApi","DependencyManager","Canvas","forwardRef","forwardedRef","children","style","debug","mode","onTouch","onSize","props","innerRef","ref","useCombinedRefs","redraw","useCallback","current","values","Error","useMemo","Container","Skia","createContainer","console","error","useEffect","remove","refs","targetRef","React","forEach"],"sources":["Canvas.tsx"],"sourcesContent":["import React, {\n useEffect,\n useCallback,\n useMemo,\n forwardRef,\n useRef,\n} from \"react\";\nimport type {\n RefObject,\n ReactNode,\n ComponentProps,\n MutableRefObject,\n ForwardedRef,\n} from \"react\";\nimport type { OpaqueRoot } from \"react-reconciler\";\nimport ReactReconciler from \"react-reconciler\";\n\nimport { SkiaDomView } from \"../views\";\nimport type { TouchHandler } from \"../views\";\nimport { Skia } from \"../skia/Skia\";\nimport type { SkiaValue } from \"../values\";\n\nimport { debug as hostDebug, skHostConfig } from \"./HostConfig\";\n// import { debugTree } from \"./nodes\";\nimport { Container } from \"./Container\";\nimport { DependencyManager } from \"./DependencyManager\";\n\nexport const skiaReconciler = ReactReconciler(skHostConfig);\n\nskiaReconciler.injectIntoDevTools({\n bundleType: 1,\n version: \"0.0.1\",\n rendererPackageName: \"react-native-skia\",\n});\n\nconst render = (element: ReactNode, root: OpaqueRoot, container: Container) => {\n skiaReconciler.updateContainer(element, root, null, () => {\n hostDebug(\"updateContainer\");\n container.depMgr.update();\n });\n};\n\nexport const useCanvasRef = () => useRef<SkiaDomView>(null);\n\nconst createDependencyManager = (\n registerValues: (values: Array<SkiaValue<unknown>>) => () => void\n) =>\n global.SkiaDomApi && global.SkiaDomApi.DependencyManager\n ? global.SkiaDomApi.DependencyManager(registerValues)\n : new DependencyManager(registerValues);\n\nexport interface CanvasProps extends ComponentProps<typeof SkiaDomView> {\n ref?: RefObject<SkiaDomView>;\n children: ReactNode;\n onTouch?: TouchHandler;\n}\n\nexport const Canvas = forwardRef<SkiaDomView, CanvasProps>(\n (\n { children, style, debug, mode, onTouch, onSize, ...props },\n forwardedRef\n ) => {\n const innerRef = useCanvasRef();\n const ref = useCombinedRefs(forwardedRef, innerRef);\n const redraw = useCallback(() => {\n innerRef.current?.redraw();\n }, [innerRef]);\n\n const registerValues = useCallback(\n (values: Array<SkiaValue<unknown>>) => {\n if (ref.current === null) {\n throw new Error(\"Canvas ref is not set\");\n }\n return ref.current.registerValues(values);\n },\n [ref]\n );\n\n const container = useMemo(() => {\n return new Container(\n Skia,\n createDependencyManager(registerValues),\n redraw\n );\n }, [redraw, registerValues]);\n\n const root = useMemo(\n () =>\n skiaReconciler.createContainer(\n container,\n 0,\n null,\n true,\n null,\n \"\",\n console.error,\n null\n ),\n [container]\n );\n\n // Render effect\n useEffect(() => {\n render(children, root, container);\n }, [children, root, redraw, container]);\n\n useEffect(() => {\n return () => {\n skiaReconciler.updateContainer(null, root, null, () => {\n container.depMgr.remove();\n });\n };\n }, [container, root]);\n\n return (\n <SkiaDomView\n ref={ref}\n style={style}\n root={container.root}\n onTouch={onTouch}\n onSize={onSize}\n mode={mode}\n debug={debug}\n {...props}\n />\n );\n }\n);\n\n/**\n * Combines a list of refs into a single ref. This can be used to provide\n * both a forwarded ref and an internal ref keeping the same functionality\n * on both of the refs.\n * @param refs Array of refs to combine\n * @returns A single ref that can be used in a ref prop.\n */\nconst useCombinedRefs = <T,>(\n ...refs: Array<MutableRefObject<T> | ForwardedRef<T>>\n) => {\n const targetRef = React.useRef<T>(null);\n React.useEffect(() => {\n refs.forEach((ref) => {\n if (ref) {\n if (typeof ref === \"function\") {\n ref(targetRef.current);\n } else {\n ref.current = targetRef.current;\n }\n }\n });\n }, [refs]);\n return targetRef;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useCanvasRef","useRef","Canvas","forwardRef","forwardedRef","children","style","debug","mode","onTouch","onSize","props","innerRef","ref","useCombinedRefs","redraw","useCallback","current","registerValues","values","Error","root","useMemo","SkiaRoot","Skia","useEffect","render","unmount","dom","refs","targetRef","React","forEach"],"sources":["Canvas.tsx"],"sourcesContent":["import React, {\n useEffect,\n useCallback,\n useMemo,\n forwardRef,\n useRef,\n} from \"react\";\nimport type {\n RefObject,\n ReactNode,\n MutableRefObject,\n ForwardedRef,\n} from \"react\";\n\nimport { SkiaDomView } from \"../views\";\nimport { Skia } from \"../skia/Skia\";\nimport type { TouchHandler, SkiaBaseViewProps } from \"../views\";\nimport type { SkiaValue } from \"../values/types\";\n\nimport { SkiaRoot } from \"./Reconciler\";\n\nexport const useCanvasRef = () => useRef<SkiaDomView>(null);\n\nexport interface CanvasProps extends SkiaBaseViewProps {\n ref?: RefObject<SkiaDomView>;\n children: ReactNode;\n onTouch?: TouchHandler;\n}\n\nexport const Canvas = forwardRef<SkiaDomView, CanvasProps>(\n (\n { children, style, debug, mode, onTouch, onSize, ...props },\n forwardedRef\n ) => {\n const innerRef = useCanvasRef();\n const ref = useCombinedRefs(forwardedRef, innerRef);\n const redraw = useCallback(() => {\n innerRef.current?.redraw();\n }, [innerRef]);\n\n const registerValues = useCallback(\n (values: Array<SkiaValue<unknown>>) => {\n if (ref.current === null) {\n throw new Error(\"Canvas ref is not set\");\n }\n return ref.current.registerValues(values);\n },\n [ref]\n );\n const root = useMemo(\n () => new SkiaRoot(Skia, registerValues, redraw),\n [redraw, registerValues]\n );\n\n // Render effect\n useEffect(() => {\n root.render(children);\n }, [children, root, redraw]);\n\n useEffect(() => {\n return () => {\n root.unmount();\n };\n }, [root]);\n\n return (\n <SkiaDomView\n ref={ref}\n style={style}\n root={root.dom}\n onTouch={onTouch}\n onSize={onSize}\n mode={mode}\n debug={debug}\n {...props}\n />\n );\n }\n) as React.FC<CanvasProps & React.RefAttributes<SkiaDomView>>;\n\n/**\n * Combines a list of refs into a single ref. This can be used to provide\n * both a forwarded ref and an internal ref keeping the same functionality\n * on both of the refs.\n * @param refs Array of refs to combine\n * @returns A single ref that can be used in a ref prop.\n */\nconst useCombinedRefs = <T,>(\n ...refs: Array<MutableRefObject<T> | ForwardedRef<T>>\n) => {\n const targetRef = React.useRef<T>(null);\n React.useEffect(() => {\n refs.forEach((ref) => {\n if (ref) {\n if (typeof ref === \"function\") {\n ref(targetRef.current);\n } else {\n ref.current = targetRef.current;\n }\n }\n });\n }, [refs]);\n return targetRef;\n};\n"],"mappings":";;;;;;;AAAA;;AAcA;;AACA;;AAIA;;;;;;;;AAEO,MAAMA,YAAY,GAAG,MAAM,IAAAC,aAAA,EAAoB,IAApB,CAA3B;;;AAQA,MAAMC,MAAM,gBAAG,IAAAC,iBAAA,EACpB,OAEEC,YAFF,KAGK;EAAA,IAFH;IAAEC,QAAF;IAAYC,KAAZ;IAAmBC,KAAnB;IAA0BC,IAA1B;IAAgCC,OAAhC;IAAyCC,MAAzC;IAAiD,GAAGC;EAApD,CAEG;EACH,MAAMC,QAAQ,GAAGZ,YAAY,EAA7B;EACA,MAAMa,GAAG,GAAGC,eAAe,CAACV,YAAD,EAAeQ,QAAf,CAA3B;EACA,MAAMG,MAAM,GAAG,IAAAC,kBAAA,EAAY,MAAM;IAAA;;IAC/B,qBAAAJ,QAAQ,CAACK,OAAT,wEAAkBF,MAAlB;EACD,CAFc,EAEZ,CAACH,QAAD,CAFY,CAAf;EAIA,MAAMM,cAAc,GAAG,IAAAF,kBAAA,EACpBG,MAAD,IAAuC;IACrC,IAAIN,GAAG,CAACI,OAAJ,KAAgB,IAApB,EAA0B;MACxB,MAAM,IAAIG,KAAJ,CAAU,uBAAV,CAAN;IACD;;IACD,OAAOP,GAAG,CAACI,OAAJ,CAAYC,cAAZ,CAA2BC,MAA3B,CAAP;EACD,CANoB,EAOrB,CAACN,GAAD,CAPqB,CAAvB;EASA,MAAMQ,IAAI,GAAG,IAAAC,cAAA,EACX,MAAM,IAAIC,oBAAJ,CAAaC,UAAb,EAAmBN,cAAnB,EAAmCH,MAAnC,CADK,EAEX,CAACA,MAAD,EAASG,cAAT,CAFW,CAAb,CAhBG,CAqBH;;EACA,IAAAO,gBAAA,EAAU,MAAM;IACdJ,IAAI,CAACK,MAAL,CAAYrB,QAAZ;EACD,CAFD,EAEG,CAACA,QAAD,EAAWgB,IAAX,EAAiBN,MAAjB,CAFH;EAIA,IAAAU,gBAAA,EAAU,MAAM;IACd,OAAO,MAAM;MACXJ,IAAI,CAACM,OAAL;IACD,CAFD;EAGD,CAJD,EAIG,CAACN,IAAD,CAJH;EAMA,oBACE,6BAAC,kBAAD;IACE,GAAG,EAAER,GADP;IAEE,KAAK,EAAEP,KAFT;IAGE,IAAI,EAAEe,IAAI,CAACO,GAHb;IAIE,OAAO,EAAEnB,OAJX;IAKE,MAAM,EAAEC,MALV;IAME,IAAI,EAAEF,IANR;IAOE,KAAK,EAAED;EAPT,GAQMI,KARN,EADF;AAYD,CAhDmB,CAAf;AAmDP;AACA;AACA;AACA;AACA;AACA;AACA;;;;AACA,MAAMG,eAAe,GAAG,YAEnB;EAAA,kCADAe,IACA;IADAA,IACA;EAAA;;EACH,MAAMC,SAAS,GAAGC,cAAA,CAAM9B,MAAN,CAAgB,IAAhB,CAAlB;;EACA8B,cAAA,CAAMN,SAAN,CAAgB,MAAM;IACpBI,IAAI,CAACG,OAAL,CAAcnB,GAAD,IAAS;MACpB,IAAIA,GAAJ,EAAS;QACP,IAAI,OAAOA,GAAP,KAAe,UAAnB,EAA+B;UAC7BA,GAAG,CAACiB,SAAS,CAACb,OAAX,CAAH;QACD,CAFD,MAEO;UACLJ,GAAG,CAACI,OAAJ,GAAca,SAAS,CAACb,OAAxB;QACD;MACF;IACF,CARD;EASD,CAVD,EAUG,CAACY,IAAD,CAVH;;EAWA,OAAOC,SAAP;AACD,CAhBD"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["DrawingContext.ts"],"sourcesContent":["import type { RefObject } from \"react\";\n\nimport type { DrawingInfo, SkiaView } from \"../views\";\nimport type { Skia, Vector } from \"../skia/types\";\nimport type { DrawingContext as DOMDrawingContext } from \"../dom/types\";\n\nexport interface DrawingContext\n extends Omit<DrawingInfo, \"touches\">,\n DOMDrawingContext {\n center: Vector;\n ref: RefObject<SkiaView>;\n Skia: Skia;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["DrawingContext.ts"],"sourcesContent":["import type { DrawingInfo } from \"../views\";\nimport type { Skia } from \"../skia/types\";\nimport type { DrawingContext as DOMDrawingContext } from \"../dom/types\";\n\nexport interface DrawingContext\n extends Omit<DrawingInfo, \"touches\">,\n DOMDrawingContext {\n Skia: Skia;\n}\n"],"mappings":""}