@shopify/react-native-skia 2.13.0 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/android/CMakeLists.txt +2 -0
  2. package/android/cpp/jni/include/JniSkiaPictureView.h +16 -15
  3. package/android/cpp/rnskia-android/OpenGLContext.h +1 -1
  4. package/android/cpp/rnskia-android/gl/Surface.h +1 -1
  5. package/apple/RNSkApplePlatformContext.h +3 -4
  6. package/apple/RNSkiaModule.h +11 -3
  7. package/apple/RNSkiaModule.mm +46 -19
  8. package/apple/SkiaPictureView.mm +2 -2
  9. package/apple/SkiaUIView.h +0 -1
  10. package/apple/SkiaUIView.mm +1 -1
  11. package/apple/ViewScreenshotService.h +2 -2
  12. package/apple/ViewScreenshotService.mm +5 -4
  13. package/cpp/api/JsiSkImage.h +1 -1
  14. package/cpp/api/JsiSkImageFilter.h +3 -1
  15. package/cpp/api/JsiSkParagraph.h +2 -1
  16. package/cpp/api/JsiSkParagraphBuilder.h +1 -1
  17. package/cpp/api/JsiSkParagraphBuilderFactory.h +1 -1
  18. package/cpp/api/JsiSkPath.h +11 -435
  19. package/cpp/api/JsiSkPathBuilder.h +11 -4
  20. package/cpp/api/JsiSkPictureRecorder.h +2 -1
  21. package/cpp/api/JsiSkShader.h +3 -1
  22. package/cpp/api/JsiSkSkottie.h +29 -28
  23. package/cpp/api/JsiSkStrutStyle.h +1 -1
  24. package/cpp/api/JsiSkSurfaceFactory.h +41 -0
  25. package/cpp/api/recorder/Command.h +1 -1
  26. package/cpp/api/recorder/Convertor.h +153 -132
  27. package/cpp/api/recorder/DataTypes.h +12 -12
  28. package/cpp/api/recorder/DrawingCtx.h +1 -1
  29. package/cpp/api/recorder/ImageFit.h +8 -5
  30. package/cpp/api/recorder/JsiRecorder.h +14 -31
  31. package/cpp/api/recorder/Paint.h +3 -3
  32. package/cpp/api/recorder/RNRecorder.h +56 -0
  33. package/cpp/api/third_party/base64.cpp +1 -1
  34. package/cpp/jsi/JSICache.cpp +23 -0
  35. package/cpp/jsi/JSICache.h +28 -1
  36. package/cpp/jsi/NativeObject.h +36 -7
  37. package/cpp/jsi/ViewProperty.cpp +23 -0
  38. package/cpp/jsi/ViewProperty.h +31 -10
  39. package/cpp/rnskia/RNDawnContext.h +34 -1
  40. package/cpp/rnskia/RNSkJsiViewApi.h +69 -2
  41. package/cpp/rnskia/RNSkPictureView.cpp +58 -0
  42. package/cpp/rnskia/RNSkPictureView.h +110 -24
  43. package/lib/commonjs/Platform/IPlatform.js.map +1 -1
  44. package/lib/commonjs/animation/functions/interpolate.js.map +1 -1
  45. package/lib/commonjs/animation/functions/interpolatePaths.js +18 -0
  46. package/lib/commonjs/animation/functions/interpolatePaths.js.map +1 -1
  47. package/lib/commonjs/skia/core/Image.js.map +1 -1
  48. package/lib/commonjs/skia/types/NativeBuffer/NativeBufferFactory.js.map +1 -1
  49. package/lib/commonjs/skia/types/Path/Path.d.ts +2 -336
  50. package/lib/commonjs/skia/types/Path/Path.js.map +1 -1
  51. package/lib/commonjs/skia/types/Recorder.d.ts +10 -0
  52. package/lib/commonjs/skia/types/Recorder.js.map +1 -1
  53. package/lib/commonjs/skia/types/Shader/Shader.js.map +1 -1
  54. package/lib/commonjs/skia/types/Surface/SurfaceFactory.d.ts +16 -0
  55. package/lib/commonjs/skia/types/Surface/SurfaceFactory.js.map +1 -1
  56. package/lib/commonjs/skia/web/JsiSkPath.d.ts +4 -38
  57. package/lib/commonjs/skia/web/JsiSkPath.js +3 -275
  58. package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
  59. package/lib/commonjs/skia/web/JsiSkSurfaceFactory.d.ts +2 -1
  60. package/lib/commonjs/skia/web/JsiSkSurfaceFactory.js +3 -0
  61. package/lib/commonjs/skia/web/JsiSkSurfaceFactory.js.map +1 -1
  62. package/lib/commonjs/sksg/Container.native.d.ts +15 -1
  63. package/lib/commonjs/sksg/Container.native.js +34 -33
  64. package/lib/commonjs/sksg/Container.native.js.map +1 -1
  65. package/lib/commonjs/specs/NativeSkiaModule.web.js +4 -0
  66. package/lib/commonjs/specs/NativeSkiaModule.web.js.map +1 -1
  67. package/lib/commonjs/views/types.d.ts +9 -0
  68. package/lib/commonjs/views/types.js.map +1 -1
  69. package/lib/module/Platform/IPlatform.js.map +1 -1
  70. package/lib/module/animation/functions/interpolate.js.map +1 -1
  71. package/lib/module/animation/functions/interpolatePaths.js +18 -0
  72. package/lib/module/animation/functions/interpolatePaths.js.map +1 -1
  73. package/lib/module/skia/core/Image.js.map +1 -1
  74. package/lib/module/skia/types/NativeBuffer/NativeBufferFactory.js.map +1 -1
  75. package/lib/module/skia/types/Path/Path.d.ts +2 -336
  76. package/lib/module/skia/types/Path/Path.js.map +1 -1
  77. package/lib/module/skia/types/Recorder.d.ts +10 -0
  78. package/lib/module/skia/types/Recorder.js.map +1 -1
  79. package/lib/module/skia/types/Shader/Shader.js.map +1 -1
  80. package/lib/module/skia/types/Surface/SurfaceFactory.d.ts +16 -0
  81. package/lib/module/skia/types/Surface/SurfaceFactory.js.map +1 -1
  82. package/lib/module/skia/web/JsiSkPath.d.ts +4 -38
  83. package/lib/module/skia/web/JsiSkPath.js +4 -276
  84. package/lib/module/skia/web/JsiSkPath.js.map +1 -1
  85. package/lib/module/skia/web/JsiSkSurfaceFactory.d.ts +2 -1
  86. package/lib/module/skia/web/JsiSkSurfaceFactory.js +4 -1
  87. package/lib/module/skia/web/JsiSkSurfaceFactory.js.map +1 -1
  88. package/lib/module/sksg/Container.native.d.ts +15 -1
  89. package/lib/module/sksg/Container.native.js +34 -33
  90. package/lib/module/sksg/Container.native.js.map +1 -1
  91. package/lib/module/specs/NativeSkiaModule.web.js +4 -0
  92. package/lib/module/specs/NativeSkiaModule.web.js.map +1 -1
  93. package/lib/module/views/types.d.ts +9 -0
  94. package/lib/module/views/types.js.map +1 -1
  95. package/lib/typescript/lib/commonjs/skia/web/JsiSkPath.d.ts +1 -35
  96. package/lib/typescript/lib/commonjs/skia/web/JsiSkSurfaceFactory.d.ts +1 -0
  97. package/lib/typescript/lib/commonjs/sksg/Container.native.d.ts +15 -1
  98. package/lib/typescript/lib/module/skia/web/JsiSkPath.d.ts +3 -37
  99. package/lib/typescript/lib/module/skia/web/JsiSkSurfaceFactory.d.ts +1 -0
  100. package/lib/typescript/lib/module/sksg/Container.native.d.ts +15 -1
  101. package/lib/typescript/src/skia/types/Path/Path.d.ts +2 -336
  102. package/lib/typescript/src/skia/types/Recorder.d.ts +10 -0
  103. package/lib/typescript/src/skia/types/Surface/SurfaceFactory.d.ts +16 -0
  104. package/lib/typescript/src/skia/web/JsiSkPath.d.ts +4 -38
  105. package/lib/typescript/src/skia/web/JsiSkSurfaceFactory.d.ts +2 -1
  106. package/lib/typescript/src/sksg/Container.native.d.ts +15 -1
  107. package/lib/typescript/src/views/types.d.ts +9 -0
  108. package/package.json +2 -2
  109. package/src/Platform/IPlatform.ts +1 -4
  110. package/src/animation/functions/interpolate.ts +1 -4
  111. package/src/animation/functions/interpolatePaths.ts +24 -0
  112. package/src/skia/core/Image.ts +1 -2
  113. package/src/skia/types/NativeBuffer/NativeBufferFactory.ts +2 -5
  114. package/src/skia/types/Path/Path.ts +2 -420
  115. package/src/skia/types/Recorder.ts +10 -0
  116. package/src/skia/types/Shader/Shader.ts +1 -5
  117. package/src/skia/types/Surface/SurfaceFactory.ts +17 -0
  118. package/src/skia/web/JsiSkPath.ts +4 -495
  119. package/src/skia/web/JsiSkSurfaceFactory.ts +6 -2
  120. package/src/sksg/Container.native.ts +34 -37
  121. package/src/specs/NativeSkiaModule.web.ts +4 -0
  122. package/src/views/types.ts +13 -0
  123. package/apple/SkiaManager.h +0 -23
  124. package/apple/SkiaManager.mm +0 -63
@@ -8,7 +8,6 @@ var _types = require("../types");
8
8
  var _Host = require("./Host");
9
9
  var _JsiSkPoint = require("./JsiSkPoint");
10
10
  var _JsiSkRect = require("./JsiSkRect");
11
- var _JsiSkRRect = require("./JsiSkRRect");
12
11
  var _JsiSkMatrix = require("./JsiSkMatrix");
13
12
  const CommandCount = {
14
13
  [_types.PathVerb.Move]: 3,
@@ -18,16 +17,6 @@ const CommandCount = {
18
17
  [_types.PathVerb.Cubic]: 7,
19
18
  [_types.PathVerb.Close]: 1
20
19
  };
21
-
22
- // Track which deprecation warnings have been shown to avoid spam
23
- const shownDeprecationWarnings = new Set();
24
- const warnDeprecatedPathMethod = (methodName, suggestion) => {
25
- if (shownDeprecationWarnings.has(methodName)) {
26
- return;
27
- }
28
- shownDeprecationWarnings.add(methodName);
29
- console.warn(`[react-native-skia] SkPath.${methodName}() is deprecated and will be removed in a future release. ${suggestion} See migration guide: https://shopify.github.io/react-native-skia/docs/shapes/path-migration`);
30
- };
31
20
  const toMatrix3x3 = m => {
32
21
  let matrix = m instanceof _JsiSkMatrix.JsiSkMatrix ? Array.from(_JsiSkMatrix.JsiSkMatrix.fromValue(m)) : m;
33
22
  if (matrix.length === 16) {
@@ -39,8 +28,8 @@ const toMatrix3x3 = m => {
39
28
  };
40
29
 
41
30
  /**
42
- * SkPath wraps a CK PathBuilder internally, providing both mutable building
43
- * methods and immutable query methods. Use snapshot() internally to get
31
+ * SkPath wraps a CK PathBuilder internally, providing immutable query
32
+ * methods. Use snapshot() internally to get
44
33
  * an immutable CK Path for read-only operations.
45
34
  */
46
35
  exports.toMatrix3x3 = toMatrix3x3;
@@ -59,259 +48,6 @@ class JsiSkPath extends _Host.HostObject {
59
48
  return JsiSkPath.fromValue(value).snapshot();
60
49
  }
61
50
 
62
- // ---- Mutable building methods (deprecated) ----
63
-
64
- addPath(src, matrix, extend = false) {
65
- warnDeprecatedPathMethod("addPath", "Use Skia.PathBuilder.Make().addPath() instead.");
66
- const srcBuilder = JsiSkPath.fromValue(src);
67
- const srcPath = srcBuilder.snapshot();
68
- const args = [srcPath, ...(matrix ? _JsiSkMatrix.JsiSkMatrix.fromValue(matrix) : []), extend];
69
- this.ref.addPath(...args);
70
- srcPath.delete();
71
- return this;
72
- }
73
- addArc(oval, startAngleInDegrees, sweepAngleInDegrees) {
74
- warnDeprecatedPathMethod("addArc", "Use Skia.PathBuilder.Make().addArc() instead.");
75
- this.ref.addArc(_JsiSkRect.JsiSkRect.fromValue(this.CanvasKit, oval), startAngleInDegrees, sweepAngleInDegrees);
76
- return this;
77
- }
78
- addOval(oval, isCCW, startIndex) {
79
- warnDeprecatedPathMethod("addOval", "Use Skia.Path.Oval() or Skia.PathBuilder.Make().addOval() instead.");
80
- this.ref.addOval(_JsiSkRect.JsiSkRect.fromValue(this.CanvasKit, oval), isCCW, startIndex);
81
- return this;
82
- }
83
- addPoly(points, close) {
84
- warnDeprecatedPathMethod("addPoly", "Use Skia.Path.Polygon() or Skia.PathBuilder.Make().addPoly() instead.");
85
- this.ref.addPolygon(points.map(p => Array.from(_JsiSkPoint.JsiSkPoint.fromValue(p))).flat(), close);
86
- return this;
87
- }
88
- addRect(rect, isCCW) {
89
- warnDeprecatedPathMethod("addRect", "Use Skia.Path.Rect() or Skia.PathBuilder.Make().addRect() instead.");
90
- this.ref.addRect(_JsiSkRect.JsiSkRect.fromValue(this.CanvasKit, rect), isCCW);
91
- return this;
92
- }
93
- addRRect(rrect, isCCW) {
94
- warnDeprecatedPathMethod("addRRect", "Use Skia.Path.RRect() or Skia.PathBuilder.Make().addRRect() instead.");
95
- this.ref.addRRect(_JsiSkRRect.JsiSkRRect.fromValue(this.CanvasKit, rrect), isCCW);
96
- return this;
97
- }
98
- addCircle(x, y, r) {
99
- warnDeprecatedPathMethod("addCircle", "Use Skia.Path.Circle() or Skia.PathBuilder.Make().addCircle() instead.");
100
- this.ref.addCircle(x, y, r);
101
- return this;
102
- }
103
- moveTo(x, y) {
104
- warnDeprecatedPathMethod("moveTo", "Use Skia.PathBuilder.Make().moveTo() instead.");
105
- this.ref.moveTo(x, y);
106
- return this;
107
- }
108
- rMoveTo(x, y) {
109
- warnDeprecatedPathMethod("rMoveTo", "Use Skia.PathBuilder.Make().rMoveTo() instead.");
110
- this.ref.rMoveTo(x, y);
111
- return this;
112
- }
113
- lineTo(x, y) {
114
- warnDeprecatedPathMethod("lineTo", "Use Skia.PathBuilder.Make().lineTo() instead.");
115
- this.ref.lineTo(x, y);
116
- return this;
117
- }
118
- rLineTo(x, y) {
119
- warnDeprecatedPathMethod("rLineTo", "Use Skia.PathBuilder.Make().rLineTo() instead.");
120
- this.ref.rLineTo(x, y);
121
- return this;
122
- }
123
- quadTo(x1, y1, x2, y2) {
124
- warnDeprecatedPathMethod("quadTo", "Use Skia.PathBuilder.Make().quadTo() instead.");
125
- this.ref.quadTo(x1, y1, x2, y2);
126
- return this;
127
- }
128
- rQuadTo(x1, y1, x2, y2) {
129
- warnDeprecatedPathMethod("rQuadTo", "Use Skia.PathBuilder.Make().rQuadTo() instead.");
130
- this.ref.rQuadTo(x1, y1, x2, y2);
131
- return this;
132
- }
133
- conicTo(x1, y1, x2, y2, w) {
134
- warnDeprecatedPathMethod("conicTo", "Use Skia.PathBuilder.Make().conicTo() instead.");
135
- this.ref.conicTo(x1, y1, x2, y2, w);
136
- return this;
137
- }
138
- rConicTo(x1, y1, x2, y2, w) {
139
- warnDeprecatedPathMethod("rConicTo", "Use Skia.PathBuilder.Make().rConicTo() instead.");
140
- this.ref.rConicTo(x1, y1, x2, y2, w);
141
- return this;
142
- }
143
- cubicTo(cpx1, cpy1, cpx2, cpy2, x, y) {
144
- warnDeprecatedPathMethod("cubicTo", "Use Skia.PathBuilder.Make().cubicTo() instead.");
145
- this.ref.cubicTo(cpx1, cpy1, cpx2, cpy2, x, y);
146
- return this;
147
- }
148
- rCubicTo(cpx1, cpy1, cpx2, cpy2, x, y) {
149
- warnDeprecatedPathMethod("rCubicTo", "Use Skia.PathBuilder.Make().rCubicTo() instead.");
150
- this.ref.rCubicTo(cpx1, cpy1, cpx2, cpy2, x, y);
151
- return this;
152
- }
153
- close() {
154
- warnDeprecatedPathMethod("close", "Use Skia.PathBuilder.Make().close() instead.");
155
- this.ref.close();
156
- return this;
157
- }
158
- reset() {
159
- warnDeprecatedPathMethod("reset", "Use Skia.PathBuilder.Make().reset() instead.");
160
- // CK PathBuilder has no reset — recreate
161
- const newBuilder = new this.CanvasKit.PathBuilder();
162
- if (this.ref !== null && typeof this.ref === "object" && "delete" in this.ref && typeof this.ref.delete === "function") {
163
- this.ref.delete();
164
- }
165
- this.ref = newBuilder;
166
- return this;
167
- }
168
- rewind() {
169
- warnDeprecatedPathMethod("rewind", "Use Skia.PathBuilder.Make().reset() instead.");
170
- return this.reset();
171
- }
172
- arcToOval(oval, startAngleInDegrees, sweepAngleInDegrees, forceMoveTo) {
173
- warnDeprecatedPathMethod("arcToOval", "Use Skia.PathBuilder.Make().arcToOval() instead.");
174
- this.ref.arcToOval(_JsiSkRect.JsiSkRect.fromValue(this.CanvasKit, oval), startAngleInDegrees, sweepAngleInDegrees, forceMoveTo);
175
- return this;
176
- }
177
- arcToRotated(rx, ry, xAxisRotateInDegrees, useSmallArc, isCCW, x, y) {
178
- warnDeprecatedPathMethod("arcToRotated", "Use Skia.PathBuilder.Make().arcToRotated() instead.");
179
- this.ref.arcToRotated(rx, ry, xAxisRotateInDegrees, useSmallArc, isCCW, x, y);
180
- return this;
181
- }
182
- rArcTo(rx, ry, xAxisRotateInDegrees, useSmallArc, isCCW, dx, dy) {
183
- warnDeprecatedPathMethod("rArcTo", "Use Skia.PathBuilder.Make().rArcTo() instead.");
184
- this.ref.rArcTo(rx, ry, xAxisRotateInDegrees, useSmallArc, isCCW, dx, dy);
185
- return this;
186
- }
187
- arcToTangent(x1, y1, x2, y2, radius) {
188
- warnDeprecatedPathMethod("arcToTangent", "Use Skia.PathBuilder.Make().arcToTangent() instead.");
189
- this.ref.arcToTangent(x1, y1, x2, y2, radius);
190
- return this;
191
- }
192
- setFillType(fill) {
193
- warnDeprecatedPathMethod("setFillType", "Use Skia.PathBuilder.Make().setFillType() instead.");
194
- this.ref.setFillType((0, _Host.getEnum)(this.CanvasKit, "FillType", fill));
195
- return this;
196
- }
197
- setIsVolatile(_volatile) {
198
- warnDeprecatedPathMethod("setIsVolatile", "Use Skia.PathBuilder.Make().setIsVolatile() instead.");
199
- // Not supported in CK PathBuilder — no-op
200
- return this;
201
- }
202
-
203
- // ---- Mutable path operations (deprecated) ----
204
-
205
- offset(dx, dy) {
206
- warnDeprecatedPathMethod("offset", "Use Skia.PathBuilder.Make().offset() instead.");
207
- this.ref.offset(dx, dy);
208
- return this;
209
- }
210
- transform(m) {
211
- warnDeprecatedPathMethod("transform", "Use Skia.PathBuilder.Make().transform() instead.");
212
- const matrix = toMatrix3x3(m);
213
- this.ref.transform(matrix);
214
- return this;
215
- }
216
- makeAsWinding() {
217
- warnDeprecatedPathMethod("makeAsWinding", "Use Skia.Path.AsWinding(path) instead.");
218
- const path = this.asPath();
219
- const result = path.makeAsWinding();
220
- path.delete();
221
- if (result === null) {
222
- return null;
223
- }
224
- const old = this.ref;
225
- this.ref = new this.CanvasKit.PathBuilder(result);
226
- result.delete();
227
- old.delete();
228
- return this;
229
- }
230
- simplify() {
231
- warnDeprecatedPathMethod("simplify", "Use Skia.Path.Simplify(path) instead.");
232
- const path = this.asPath();
233
- const result = path.makeSimplified();
234
- path.delete();
235
- if (result === null) {
236
- return false;
237
- }
238
- const old = this.ref;
239
- this.ref = new this.CanvasKit.PathBuilder(result);
240
- result.delete();
241
- old.delete();
242
- return true;
243
- }
244
- op(path, op) {
245
- warnDeprecatedPathMethod("op", "Use Skia.Path.MakeFromOp() instead.");
246
- const self = this.asPath();
247
- const other = JsiSkPath.fromValue(path).snapshot();
248
- const result = self.makeCombined(other, (0, _Host.getEnum)(this.CanvasKit, "PathOp", op));
249
- self.delete();
250
- other.delete();
251
- if (result === null) {
252
- return false;
253
- }
254
- const old = this.ref;
255
- this.ref = new this.CanvasKit.PathBuilder(result);
256
- result.delete();
257
- old.delete();
258
- return true;
259
- }
260
- dash(on, off, phase) {
261
- warnDeprecatedPathMethod("dash", "Use Skia.Path.Dash(path, on, off, phase) instead.");
262
- const path = this.asPath();
263
- const result = path.makeDashed(on, off, phase);
264
- path.delete();
265
- if (result === null) {
266
- return false;
267
- }
268
- const old = this.ref;
269
- this.ref = new this.CanvasKit.PathBuilder(result);
270
- result.delete();
271
- old.delete();
272
- return true;
273
- }
274
- stroke(opts) {
275
- warnDeprecatedPathMethod("stroke", "Use Skia.Path.Stroke(path, opts) instead.");
276
- const path = this.asPath();
277
- const result = path.makeStroked(opts === undefined ? undefined : {
278
- width: opts.width,
279
- // eslint-disable-next-line camelcase
280
- miter_limit: opts.miter_limit,
281
- precision: opts.precision,
282
- join: (0, _Host.optEnum)(this.CanvasKit, "StrokeJoin", opts.join),
283
- cap: (0, _Host.optEnum)(this.CanvasKit, "StrokeCap", opts.cap)
284
- });
285
- path.delete();
286
- if (result === null) {
287
- return null;
288
- }
289
- const old = this.ref;
290
- this.ref = new this.CanvasKit.PathBuilder(result);
291
- result.delete();
292
- old.delete();
293
- return this;
294
- }
295
- trim(start, stop, isComplement) {
296
- warnDeprecatedPathMethod("trim", "Use Skia.Path.Trim(path, start, end, isComplement) instead.");
297
- const startT = Math.min(Math.max(start, 0), 1);
298
- const stopT = Math.min(Math.max(stop, 0), 1);
299
- if (startT === 0 && stopT === 1 && !isComplement) {
300
- return this;
301
- }
302
- const path = this.asPath();
303
- const result = path.makeTrimmed(startT, stopT, isComplement);
304
- path.delete();
305
- if (result === null) {
306
- return null;
307
- }
308
- const old = this.ref;
309
- this.ref = new this.CanvasKit.PathBuilder(result);
310
- result.delete();
311
- old.delete();
312
- return this;
313
- }
314
-
315
51
  // ---- Query methods (use snapshot for read-only) ----
316
52
 
317
53
  countPoints() {
@@ -394,7 +130,7 @@ class JsiSkPath extends _Host.HostObject {
394
130
  p2.delete();
395
131
  return result;
396
132
  }
397
- interpolate(end, weight, output) {
133
+ interpolate(end, weight) {
398
134
  const p1 = this.asPath();
399
135
  const p2 = JsiSkPath.fromValue(end).snapshot();
400
136
  const path = this.CanvasKit.Path.MakeFromPathInterpolation(p1, p2, weight);
@@ -403,14 +139,6 @@ class JsiSkPath extends _Host.HostObject {
403
139
  if (path === null) {
404
140
  return null;
405
141
  }
406
- if (output) {
407
- const outRef = output;
408
- const old = outRef.ref;
409
- outRef.ref = new this.CanvasKit.PathBuilder(path);
410
- path.delete();
411
- old.delete();
412
- return output;
413
- }
414
142
  const result = new JsiSkPath(this.CanvasKit, new this.CanvasKit.PathBuilder(path));
415
143
  path.delete();
416
144
  return result;
@@ -1 +1 @@
1
- {"version":3,"names":["_types","require","_Host","_JsiSkPoint","_JsiSkRect","_JsiSkRRect","_JsiSkMatrix","CommandCount","PathVerb","Move","Line","Quad","Conic","Cubic","Close","shownDeprecationWarnings","Set","warnDeprecatedPathMethod","methodName","suggestion","has","add","console","warn","toMatrix3x3","m","matrix","JsiSkMatrix","Array","from","fromValue","length","Error","exports","JsiSkPath","HostObject","constructor","CanvasKit","ref","asPath","snapshot","pathFromValue","value","addPath","src","extend","srcBuilder","srcPath","args","delete","addArc","oval","startAngleInDegrees","sweepAngleInDegrees","JsiSkRect","addOval","isCCW","startIndex","addPoly","points","close","addPolygon","map","p","JsiSkPoint","flat","addRect","rect","addRRect","rrect","JsiSkRRect","addCircle","x","y","r","moveTo","rMoveTo","lineTo","rLineTo","quadTo","x1","y1","x2","y2","rQuadTo","conicTo","w","rConicTo","cubicTo","cpx1","cpy1","cpx2","cpy2","rCubicTo","reset","newBuilder","PathBuilder","rewind","arcToOval","forceMoveTo","arcToRotated","rx","ry","xAxisRotateInDegrees","useSmallArc","rArcTo","dx","dy","arcToTangent","radius","setFillType","fill","getEnum","setIsVolatile","_volatile","offset","transform","makeAsWinding","path","result","old","simplify","makeSimplified","op","self","other","makeCombined","dash","on","off","phase","makeDashed","stroke","opts","makeStroked","undefined","width","miter_limit","precision","join","optEnum","cap","trim","start","stop","isComplement","startT","Math","min","max","stopT","makeTrimmed","countPoints","computeTightBounds","contains","copy","equals","p1","p2","getBounds","getFillType","getPoint","index","isEmpty","isVolatile","getLastPt","count","pt","toSVGString","isInterpolatable","path2","Path","CanInterpolate","interpolate","end","weight","output","MakeFromPathInterpolation","outRef","toCmds","cmds","reduce","acc","cmd","i","push","current"],"sources":["JsiSkPath.ts"],"sourcesContent":["import type { CanvasKit, PathBuilder as CKPathBuilder } from \"canvaskit-wasm\";\n\nimport { PathVerb } from \"../types\";\nimport type {\n FillType,\n PathCommand,\n PathOp,\n SkMatrix,\n SkPath,\n SkPoint,\n SkRect,\n InputRRect,\n StrokeOpts,\n InputMatrix,\n} from \"../types\";\n\nimport { getEnum, HostObject, optEnum } from \"./Host\";\nimport { JsiSkPoint } from \"./JsiSkPoint\";\nimport { JsiSkRect } from \"./JsiSkRect\";\nimport { JsiSkRRect } from \"./JsiSkRRect\";\nimport { JsiSkMatrix } from \"./JsiSkMatrix\";\n\nconst CommandCount = {\n [PathVerb.Move]: 3,\n [PathVerb.Line]: 3,\n [PathVerb.Quad]: 5,\n [PathVerb.Conic]: 6,\n [PathVerb.Cubic]: 7,\n [PathVerb.Close]: 1,\n};\n\n// Track which deprecation warnings have been shown to avoid spam\nconst shownDeprecationWarnings = new Set<string>();\n\nconst warnDeprecatedPathMethod = (\n methodName: string,\n suggestion: string\n): void => {\n if (shownDeprecationWarnings.has(methodName)) {\n return;\n }\n shownDeprecationWarnings.add(methodName);\n console.warn(\n `[react-native-skia] SkPath.${methodName}() is deprecated and will be removed in a future release. ${suggestion} See migration guide: https://shopify.github.io/react-native-skia/docs/shapes/path-migration`\n );\n};\n\nexport const toMatrix3x3 = (m: InputMatrix): number[] => {\n let matrix =\n m instanceof JsiSkMatrix\n ? Array.from(JsiSkMatrix.fromValue<Float32Array>(m))\n : (m as Exclude<InputMatrix, SkMatrix>);\n if (matrix.length === 16) {\n matrix = [\n matrix[0],\n matrix[1],\n matrix[3],\n matrix[4],\n matrix[5],\n matrix[7],\n matrix[12],\n matrix[13],\n matrix[15],\n ];\n } else if (matrix.length !== 9) {\n throw new Error(`Invalid matrix length: ${matrix.length}`);\n }\n return matrix as number[];\n};\n\n/**\n * SkPath wraps a CK PathBuilder internally, providing both mutable building\n * methods and immutable query methods. Use snapshot() internally to get\n * an immutable CK Path for read-only operations.\n */\nexport class JsiSkPath\n extends HostObject<CKPathBuilder, \"Path\">\n implements SkPath\n{\n constructor(CanvasKit: CanvasKit, ref: CKPathBuilder) {\n super(CanvasKit, ref, \"Path\");\n }\n\n /** Returns an immutable CK Path snapshot for read-only operations. */\n private asPath() {\n return this.ref.snapshot();\n }\n\n /** Extract an immutable CK Path from a JsiSkPath value (for CK interop). */\n static pathFromValue(value: SkPath) {\n return JsiSkPath.fromValue<CKPathBuilder>(value).snapshot();\n }\n\n // ---- Mutable building methods (deprecated) ----\n\n addPath(src: SkPath, matrix?: SkMatrix, extend = false) {\n warnDeprecatedPathMethod(\n \"addPath\",\n \"Use Skia.PathBuilder.Make().addPath() instead.\"\n );\n const srcBuilder = JsiSkPath.fromValue<CKPathBuilder>(src);\n const srcPath = srcBuilder.snapshot();\n const args = [\n srcPath,\n ...(matrix ? JsiSkMatrix.fromValue<Float32Array>(matrix) : []),\n extend,\n ];\n this.ref.addPath(...args);\n srcPath.delete();\n return this;\n }\n\n addArc(\n oval: SkRect,\n startAngleInDegrees: number,\n sweepAngleInDegrees: number\n ) {\n warnDeprecatedPathMethod(\n \"addArc\",\n \"Use Skia.PathBuilder.Make().addArc() instead.\"\n );\n this.ref.addArc(\n JsiSkRect.fromValue(this.CanvasKit, oval),\n startAngleInDegrees,\n sweepAngleInDegrees\n );\n return this;\n }\n\n addOval(oval: SkRect, isCCW?: boolean, startIndex?: number) {\n warnDeprecatedPathMethod(\n \"addOval\",\n \"Use Skia.Path.Oval() or Skia.PathBuilder.Make().addOval() instead.\"\n );\n this.ref.addOval(\n JsiSkRect.fromValue(this.CanvasKit, oval),\n isCCW,\n startIndex\n );\n return this;\n }\n\n addPoly(points: SkPoint[], close: boolean) {\n warnDeprecatedPathMethod(\n \"addPoly\",\n \"Use Skia.Path.Polygon() or Skia.PathBuilder.Make().addPoly() instead.\"\n );\n this.ref.addPolygon(\n points.map((p) => Array.from(JsiSkPoint.fromValue(p))).flat(),\n close\n );\n return this;\n }\n\n addRect(rect: SkRect, isCCW?: boolean) {\n warnDeprecatedPathMethod(\n \"addRect\",\n \"Use Skia.Path.Rect() or Skia.PathBuilder.Make().addRect() instead.\"\n );\n this.ref.addRect(JsiSkRect.fromValue(this.CanvasKit, rect), isCCW);\n return this;\n }\n\n addRRect(rrect: InputRRect, isCCW?: boolean) {\n warnDeprecatedPathMethod(\n \"addRRect\",\n \"Use Skia.Path.RRect() or Skia.PathBuilder.Make().addRRect() instead.\"\n );\n this.ref.addRRect(JsiSkRRect.fromValue(this.CanvasKit, rrect), isCCW);\n return this;\n }\n\n addCircle(x: number, y: number, r: number) {\n warnDeprecatedPathMethod(\n \"addCircle\",\n \"Use Skia.Path.Circle() or Skia.PathBuilder.Make().addCircle() instead.\"\n );\n this.ref.addCircle(x, y, r);\n return this;\n }\n\n moveTo(x: number, y: number) {\n warnDeprecatedPathMethod(\n \"moveTo\",\n \"Use Skia.PathBuilder.Make().moveTo() instead.\"\n );\n this.ref.moveTo(x, y);\n return this;\n }\n\n rMoveTo(x: number, y: number) {\n warnDeprecatedPathMethod(\n \"rMoveTo\",\n \"Use Skia.PathBuilder.Make().rMoveTo() instead.\"\n );\n this.ref.rMoveTo(x, y);\n return this;\n }\n\n lineTo(x: number, y: number) {\n warnDeprecatedPathMethod(\n \"lineTo\",\n \"Use Skia.PathBuilder.Make().lineTo() instead.\"\n );\n this.ref.lineTo(x, y);\n return this;\n }\n\n rLineTo(x: number, y: number) {\n warnDeprecatedPathMethod(\n \"rLineTo\",\n \"Use Skia.PathBuilder.Make().rLineTo() instead.\"\n );\n this.ref.rLineTo(x, y);\n return this;\n }\n\n quadTo(x1: number, y1: number, x2: number, y2: number) {\n warnDeprecatedPathMethod(\n \"quadTo\",\n \"Use Skia.PathBuilder.Make().quadTo() instead.\"\n );\n this.ref.quadTo(x1, y1, x2, y2);\n return this;\n }\n\n rQuadTo(x1: number, y1: number, x2: number, y2: number) {\n warnDeprecatedPathMethod(\n \"rQuadTo\",\n \"Use Skia.PathBuilder.Make().rQuadTo() instead.\"\n );\n this.ref.rQuadTo(x1, y1, x2, y2);\n return this;\n }\n\n conicTo(x1: number, y1: number, x2: number, y2: number, w: number) {\n warnDeprecatedPathMethod(\n \"conicTo\",\n \"Use Skia.PathBuilder.Make().conicTo() instead.\"\n );\n this.ref.conicTo(x1, y1, x2, y2, w);\n return this;\n }\n\n rConicTo(x1: number, y1: number, x2: number, y2: number, w: number) {\n warnDeprecatedPathMethod(\n \"rConicTo\",\n \"Use Skia.PathBuilder.Make().rConicTo() instead.\"\n );\n this.ref.rConicTo(x1, y1, x2, y2, w);\n return this;\n }\n\n cubicTo(\n cpx1: number,\n cpy1: number,\n cpx2: number,\n cpy2: number,\n x: number,\n y: number\n ) {\n warnDeprecatedPathMethod(\n \"cubicTo\",\n \"Use Skia.PathBuilder.Make().cubicTo() instead.\"\n );\n this.ref.cubicTo(cpx1, cpy1, cpx2, cpy2, x, y);\n return this;\n }\n\n rCubicTo(\n cpx1: number,\n cpy1: number,\n cpx2: number,\n cpy2: number,\n x: number,\n y: number\n ) {\n warnDeprecatedPathMethod(\n \"rCubicTo\",\n \"Use Skia.PathBuilder.Make().rCubicTo() instead.\"\n );\n this.ref.rCubicTo(cpx1, cpy1, cpx2, cpy2, x, y);\n return this;\n }\n\n close() {\n warnDeprecatedPathMethod(\n \"close\",\n \"Use Skia.PathBuilder.Make().close() instead.\"\n );\n this.ref.close();\n return this;\n }\n\n reset() {\n warnDeprecatedPathMethod(\n \"reset\",\n \"Use Skia.PathBuilder.Make().reset() instead.\"\n );\n // CK PathBuilder has no reset — recreate\n const newBuilder = new this.CanvasKit.PathBuilder();\n if (\n this.ref !== null &&\n typeof this.ref === \"object\" &&\n \"delete\" in this.ref &&\n typeof this.ref.delete === \"function\"\n ) {\n this.ref.delete();\n }\n this.ref = newBuilder;\n return this;\n }\n\n rewind() {\n warnDeprecatedPathMethod(\n \"rewind\",\n \"Use Skia.PathBuilder.Make().reset() instead.\"\n );\n return this.reset();\n }\n\n arcToOval(\n oval: SkRect,\n startAngleInDegrees: number,\n sweepAngleInDegrees: number,\n forceMoveTo: boolean\n ) {\n warnDeprecatedPathMethod(\n \"arcToOval\",\n \"Use Skia.PathBuilder.Make().arcToOval() instead.\"\n );\n this.ref.arcToOval(\n JsiSkRect.fromValue(this.CanvasKit, oval),\n startAngleInDegrees,\n sweepAngleInDegrees,\n forceMoveTo\n );\n return this;\n }\n\n arcToRotated(\n rx: number,\n ry: number,\n xAxisRotateInDegrees: number,\n useSmallArc: boolean,\n isCCW: boolean,\n x: number,\n y: number\n ) {\n warnDeprecatedPathMethod(\n \"arcToRotated\",\n \"Use Skia.PathBuilder.Make().arcToRotated() instead.\"\n );\n this.ref.arcToRotated(\n rx,\n ry,\n xAxisRotateInDegrees,\n useSmallArc,\n isCCW,\n x,\n y\n );\n return this;\n }\n\n rArcTo(\n rx: number,\n ry: number,\n xAxisRotateInDegrees: number,\n useSmallArc: boolean,\n isCCW: boolean,\n dx: number,\n dy: number\n ) {\n warnDeprecatedPathMethod(\n \"rArcTo\",\n \"Use Skia.PathBuilder.Make().rArcTo() instead.\"\n );\n this.ref.rArcTo(rx, ry, xAxisRotateInDegrees, useSmallArc, isCCW, dx, dy);\n return this;\n }\n\n arcToTangent(x1: number, y1: number, x2: number, y2: number, radius: number) {\n warnDeprecatedPathMethod(\n \"arcToTangent\",\n \"Use Skia.PathBuilder.Make().arcToTangent() instead.\"\n );\n this.ref.arcToTangent(x1, y1, x2, y2, radius);\n return this;\n }\n\n setFillType(fill: FillType) {\n warnDeprecatedPathMethod(\n \"setFillType\",\n \"Use Skia.PathBuilder.Make().setFillType() instead.\"\n );\n this.ref.setFillType(getEnum(this.CanvasKit, \"FillType\", fill));\n return this;\n }\n\n setIsVolatile(_volatile: boolean) {\n warnDeprecatedPathMethod(\n \"setIsVolatile\",\n \"Use Skia.PathBuilder.Make().setIsVolatile() instead.\"\n );\n // Not supported in CK PathBuilder — no-op\n return this;\n }\n\n // ---- Mutable path operations (deprecated) ----\n\n offset(dx: number, dy: number) {\n warnDeprecatedPathMethod(\n \"offset\",\n \"Use Skia.PathBuilder.Make().offset() instead.\"\n );\n this.ref.offset(dx, dy);\n return this;\n }\n\n transform(m: InputMatrix) {\n warnDeprecatedPathMethod(\n \"transform\",\n \"Use Skia.PathBuilder.Make().transform() instead.\"\n );\n const matrix = toMatrix3x3(m);\n this.ref.transform(matrix);\n return this;\n }\n\n makeAsWinding() {\n warnDeprecatedPathMethod(\n \"makeAsWinding\",\n \"Use Skia.Path.AsWinding(path) instead.\"\n );\n const path = this.asPath();\n const result = path.makeAsWinding();\n path.delete();\n if (result === null) {\n return null;\n }\n const old = this.ref;\n this.ref = new this.CanvasKit.PathBuilder(result);\n result.delete();\n old.delete();\n return this;\n }\n\n simplify() {\n warnDeprecatedPathMethod(\n \"simplify\",\n \"Use Skia.Path.Simplify(path) instead.\"\n );\n const path = this.asPath();\n const result = path.makeSimplified();\n path.delete();\n if (result === null) {\n return false;\n }\n const old = this.ref;\n this.ref = new this.CanvasKit.PathBuilder(result);\n result.delete();\n old.delete();\n return true;\n }\n\n op(path: SkPath, op: PathOp) {\n warnDeprecatedPathMethod(\"op\", \"Use Skia.Path.MakeFromOp() instead.\");\n const self = this.asPath();\n const other = JsiSkPath.fromValue<CKPathBuilder>(path).snapshot();\n const result = self.makeCombined(\n other,\n getEnum(this.CanvasKit, \"PathOp\", op)\n );\n self.delete();\n other.delete();\n if (result === null) {\n return false;\n }\n const old = this.ref;\n this.ref = new this.CanvasKit.PathBuilder(result);\n result.delete();\n old.delete();\n return true;\n }\n\n dash(on: number, off: number, phase: number) {\n warnDeprecatedPathMethod(\n \"dash\",\n \"Use Skia.Path.Dash(path, on, off, phase) instead.\"\n );\n const path = this.asPath();\n const result = path.makeDashed(on, off, phase);\n path.delete();\n if (result === null) {\n return false;\n }\n const old = this.ref;\n this.ref = new this.CanvasKit.PathBuilder(result);\n result.delete();\n old.delete();\n return true;\n }\n\n stroke(opts?: StrokeOpts) {\n warnDeprecatedPathMethod(\n \"stroke\",\n \"Use Skia.Path.Stroke(path, opts) instead.\"\n );\n const path = this.asPath();\n const result = path.makeStroked(\n opts === undefined\n ? undefined\n : {\n width: opts.width,\n // eslint-disable-next-line camelcase\n miter_limit: opts.miter_limit,\n precision: opts.precision,\n join: optEnum(this.CanvasKit, \"StrokeJoin\", opts.join),\n cap: optEnum(this.CanvasKit, \"StrokeCap\", opts.cap),\n }\n );\n path.delete();\n if (result === null) {\n return null;\n }\n const old = this.ref;\n this.ref = new this.CanvasKit.PathBuilder(result);\n result.delete();\n old.delete();\n return this;\n }\n\n trim(start: number, stop: number, isComplement: boolean) {\n warnDeprecatedPathMethod(\n \"trim\",\n \"Use Skia.Path.Trim(path, start, end, isComplement) instead.\"\n );\n const startT = Math.min(Math.max(start, 0), 1);\n const stopT = Math.min(Math.max(stop, 0), 1);\n if (startT === 0 && stopT === 1 && !isComplement) {\n return this;\n }\n const path = this.asPath();\n const result = path.makeTrimmed(startT, stopT, isComplement);\n path.delete();\n if (result === null) {\n return null;\n }\n const old = this.ref;\n this.ref = new this.CanvasKit.PathBuilder(result);\n result.delete();\n old.delete();\n return this;\n }\n\n // ---- Query methods (use snapshot for read-only) ----\n\n countPoints() {\n return this.ref.countPoints();\n }\n\n computeTightBounds(): SkRect {\n const path = this.asPath();\n const result = new JsiSkRect(this.CanvasKit, path.computeTightBounds());\n path.delete();\n return result;\n }\n\n contains(x: number, y: number) {\n const path = this.asPath();\n const result = path.contains(x, y);\n path.delete();\n return result;\n }\n\n copy() {\n const path = this.asPath();\n const result = new JsiSkPath(\n this.CanvasKit,\n new this.CanvasKit.PathBuilder(path)\n );\n path.delete();\n return result;\n }\n\n equals(other: SkPath) {\n const p1 = this.asPath();\n const p2 = JsiSkPath.fromValue<CKPathBuilder>(other).snapshot();\n const result = p1.equals(p2);\n p1.delete();\n p2.delete();\n return result;\n }\n\n getBounds() {\n return new JsiSkRect(this.CanvasKit, this.ref.getBounds());\n }\n\n getFillType(): FillType {\n const path = this.asPath();\n const result = path.getFillType().value;\n path.delete();\n return result;\n }\n\n getPoint(index: number): SkPoint {\n const path = this.asPath();\n const result = new JsiSkPoint(this.CanvasKit, path.getPoint(index));\n path.delete();\n return result;\n }\n\n isEmpty() {\n return this.ref.isEmpty();\n }\n\n isVolatile() {\n return false;\n }\n\n getLastPt() {\n const count = this.ref.countPoints();\n if (count === 0) {\n return { x: 0, y: 0 };\n }\n const path = this.asPath();\n const pt = path.getPoint(count - 1);\n path.delete();\n return { x: pt[0], y: pt[1] };\n }\n\n toSVGString() {\n const path = this.asPath();\n const result = path.toSVGString();\n path.delete();\n return result;\n }\n\n isInterpolatable(path2: SkPath): boolean {\n const p1 = this.asPath();\n const p2 = JsiSkPath.fromValue<CKPathBuilder>(path2).snapshot();\n const result = this.CanvasKit.Path.CanInterpolate(p1, p2);\n p1.delete();\n p2.delete();\n return result;\n }\n\n interpolate(end: SkPath, weight: number, output?: SkPath): SkPath | null {\n const p1 = this.asPath();\n const p2 = JsiSkPath.fromValue<CKPathBuilder>(end).snapshot();\n const path = this.CanvasKit.Path.MakeFromPathInterpolation(p1, p2, weight);\n p1.delete();\n p2.delete();\n if (path === null) {\n return null;\n }\n if (output) {\n const outRef = output as JsiSkPath;\n const old = outRef.ref;\n outRef.ref = new this.CanvasKit.PathBuilder(path);\n path.delete();\n old.delete();\n return output;\n }\n const result = new JsiSkPath(\n this.CanvasKit,\n new this.CanvasKit.PathBuilder(path)\n );\n path.delete();\n return result;\n }\n\n toCmds() {\n const path = this.asPath();\n const cmds = path.toCmds();\n path.delete();\n const result = cmds.reduce<PathCommand[]>((acc, cmd, i) => {\n if (i === 0) {\n acc.push([]);\n }\n const current = acc[acc.length - 1];\n if (current.length === 0) {\n current.push(cmd);\n const length = CommandCount[current[0] as PathVerb];\n if (current.length === length && i !== cmds.length - 1) {\n acc.push([]);\n }\n } else {\n const length = CommandCount[current[0] as PathVerb];\n if (current.length < length) {\n current.push(cmd);\n }\n if (current.length === length && i !== cmds.length - 1) {\n acc.push([]);\n }\n }\n return acc;\n }, []);\n return result;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_types","require","_Host","_JsiSkPoint","_JsiSkRect","_JsiSkMatrix","CommandCount","PathVerb","Move","Line","Quad","Conic","Cubic","Close","toMatrix3x3","m","matrix","JsiSkMatrix","Array","from","fromValue","length","Error","exports","JsiSkPath","HostObject","constructor","CanvasKit","ref","asPath","snapshot","pathFromValue","value","countPoints","computeTightBounds","path","result","JsiSkRect","delete","contains","x","y","copy","PathBuilder","equals","other","p1","p2","getBounds","getFillType","getPoint","index","JsiSkPoint","isEmpty","isVolatile","getLastPt","count","pt","toSVGString","isInterpolatable","path2","Path","CanInterpolate","interpolate","end","weight","MakeFromPathInterpolation","toCmds","cmds","reduce","acc","cmd","i","push","current"],"sources":["JsiSkPath.ts"],"sourcesContent":["import type { CanvasKit, PathBuilder as CKPathBuilder } from \"canvaskit-wasm\";\n\nimport { PathVerb } from \"../types\";\nimport type {\n FillType,\n PathCommand,\n SkMatrix,\n SkPath,\n SkPoint,\n SkRect,\n InputMatrix,\n} from \"../types\";\n\nimport { HostObject } from \"./Host\";\nimport { JsiSkPoint } from \"./JsiSkPoint\";\nimport { JsiSkRect } from \"./JsiSkRect\";\nimport { JsiSkMatrix } from \"./JsiSkMatrix\";\n\nconst CommandCount = {\n [PathVerb.Move]: 3,\n [PathVerb.Line]: 3,\n [PathVerb.Quad]: 5,\n [PathVerb.Conic]: 6,\n [PathVerb.Cubic]: 7,\n [PathVerb.Close]: 1,\n};\n\nexport const toMatrix3x3 = (m: InputMatrix): number[] => {\n let matrix =\n m instanceof JsiSkMatrix\n ? Array.from(JsiSkMatrix.fromValue<Float32Array>(m))\n : (m as Exclude<InputMatrix, SkMatrix>);\n if (matrix.length === 16) {\n matrix = [\n matrix[0],\n matrix[1],\n matrix[3],\n matrix[4],\n matrix[5],\n matrix[7],\n matrix[12],\n matrix[13],\n matrix[15],\n ];\n } else if (matrix.length !== 9) {\n throw new Error(`Invalid matrix length: ${matrix.length}`);\n }\n return matrix as number[];\n};\n\n/**\n * SkPath wraps a CK PathBuilder internally, providing immutable query\n * methods. Use snapshot() internally to get\n * an immutable CK Path for read-only operations.\n */\nexport class JsiSkPath\n extends HostObject<CKPathBuilder, \"Path\">\n implements SkPath\n{\n constructor(CanvasKit: CanvasKit, ref: CKPathBuilder) {\n super(CanvasKit, ref, \"Path\");\n }\n\n /** Returns an immutable CK Path snapshot for read-only operations. */\n private asPath() {\n return this.ref.snapshot();\n }\n\n /** Extract an immutable CK Path from a JsiSkPath value (for CK interop). */\n static pathFromValue(value: SkPath) {\n return JsiSkPath.fromValue<CKPathBuilder>(value).snapshot();\n }\n\n // ---- Query methods (use snapshot for read-only) ----\n\n countPoints() {\n return this.ref.countPoints();\n }\n\n computeTightBounds(): SkRect {\n const path = this.asPath();\n const result = new JsiSkRect(this.CanvasKit, path.computeTightBounds());\n path.delete();\n return result;\n }\n\n contains(x: number, y: number) {\n const path = this.asPath();\n const result = path.contains(x, y);\n path.delete();\n return result;\n }\n\n copy() {\n const path = this.asPath();\n const result = new JsiSkPath(\n this.CanvasKit,\n new this.CanvasKit.PathBuilder(path)\n );\n path.delete();\n return result;\n }\n\n equals(other: SkPath) {\n const p1 = this.asPath();\n const p2 = JsiSkPath.fromValue<CKPathBuilder>(other).snapshot();\n const result = p1.equals(p2);\n p1.delete();\n p2.delete();\n return result;\n }\n\n getBounds() {\n return new JsiSkRect(this.CanvasKit, this.ref.getBounds());\n }\n\n getFillType(): FillType {\n const path = this.asPath();\n const result = path.getFillType().value;\n path.delete();\n return result;\n }\n\n getPoint(index: number): SkPoint {\n const path = this.asPath();\n const result = new JsiSkPoint(this.CanvasKit, path.getPoint(index));\n path.delete();\n return result;\n }\n\n isEmpty() {\n return this.ref.isEmpty();\n }\n\n isVolatile() {\n return false;\n }\n\n getLastPt() {\n const count = this.ref.countPoints();\n if (count === 0) {\n return { x: 0, y: 0 };\n }\n const path = this.asPath();\n const pt = path.getPoint(count - 1);\n path.delete();\n return { x: pt[0], y: pt[1] };\n }\n\n toSVGString() {\n const path = this.asPath();\n const result = path.toSVGString();\n path.delete();\n return result;\n }\n\n isInterpolatable(path2: SkPath): boolean {\n const p1 = this.asPath();\n const p2 = JsiSkPath.fromValue<CKPathBuilder>(path2).snapshot();\n const result = this.CanvasKit.Path.CanInterpolate(p1, p2);\n p1.delete();\n p2.delete();\n return result;\n }\n\n interpolate(end: SkPath, weight: number): SkPath | null {\n const p1 = this.asPath();\n const p2 = JsiSkPath.fromValue<CKPathBuilder>(end).snapshot();\n const path = this.CanvasKit.Path.MakeFromPathInterpolation(p1, p2, weight);\n p1.delete();\n p2.delete();\n if (path === null) {\n return null;\n }\n const result = new JsiSkPath(\n this.CanvasKit,\n new this.CanvasKit.PathBuilder(path)\n );\n path.delete();\n return result;\n }\n\n toCmds() {\n const path = this.asPath();\n const cmds = path.toCmds();\n path.delete();\n const result = cmds.reduce<PathCommand[]>((acc, cmd, i) => {\n if (i === 0) {\n acc.push([]);\n }\n const current = acc[acc.length - 1];\n if (current.length === 0) {\n current.push(cmd);\n const length = CommandCount[current[0] as PathVerb];\n if (current.length === length && i !== cmds.length - 1) {\n acc.push([]);\n }\n } else {\n const length = CommandCount[current[0] as PathVerb];\n if (current.length < length) {\n current.push(cmd);\n }\n if (current.length === length && i !== cmds.length - 1) {\n acc.push([]);\n }\n }\n return acc;\n }, []);\n return result;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,10 @@
1
1
  import type { CanvasKit } from "canvaskit-wasm";
2
- import type { SurfaceFactory } from "../types";
2
+ import type { SkSurface, SurfaceFactory } from "../types";
3
3
  import { Host } from "./Host";
4
4
  import { JsiSkSurface } from "./JsiSkSurface";
5
5
  export declare class JsiSkSurfaceFactory extends Host implements SurfaceFactory {
6
6
  constructor(CanvasKit: CanvasKit);
7
7
  Make(width: number, height: number): JsiSkSurface;
8
8
  MakeOffscreen(width: number, height: number): JsiSkSurface | null;
9
+ MakeFromNativeTexture(_pointer: bigint): SkSurface;
9
10
  }
@@ -34,6 +34,9 @@ class JsiSkSurfaceFactory extends _Host.Host {
34
34
  }
35
35
  return new _JsiSkSurface.JsiSkSurface(this.CanvasKit, surface);
36
36
  }
37
+ MakeFromNativeTexture(_pointer) {
38
+ return (0, _Host.throwNotImplementedOnRNWeb)();
39
+ }
37
40
  }
38
41
  exports.JsiSkSurfaceFactory = JsiSkSurfaceFactory;
39
42
  //# sourceMappingURL=JsiSkSurfaceFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_Host","require","_JsiSkSurface","JsiSkSurfaceFactory","Host","constructor","CanvasKit","Make","width","height","JsiSkSurface","MakeSurface","MakeOffscreen","OC","globalThis","OffscreenCanvas","surface","undefined","offscreen","webglContext","GetWebGLContext","grContext","MakeWebGLContext","Error","MakeRenderTarget","exports"],"sources":["JsiSkSurfaceFactory.ts"],"sourcesContent":["import type { CanvasKit, Surface } from \"canvaskit-wasm\";\n\nimport type { SurfaceFactory } from \"../types\";\n\nimport { Host } from \"./Host\";\nimport { JsiSkSurface } from \"./JsiSkSurface\";\n\nexport class JsiSkSurfaceFactory extends Host implements SurfaceFactory {\n constructor(CanvasKit: CanvasKit) {\n super(CanvasKit);\n }\n\n Make(width: number, height: number) {\n return new JsiSkSurface(\n this.CanvasKit,\n this.CanvasKit.MakeSurface(width, height)!\n );\n }\n\n MakeOffscreen(width: number, height: number) {\n // OffscreenCanvas may be unvailable in some environments.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const OC = (globalThis as any).OffscreenCanvas;\n let surface: Surface | null;\n if (OC === undefined) {\n return this.Make(width, height);\n } else {\n const offscreen = new OC(width, height);\n const webglContext = this.CanvasKit.GetWebGLContext(offscreen);\n const grContext = this.CanvasKit.MakeWebGLContext(webglContext);\n if (!grContext) {\n throw new Error(\"Could not make a graphics context\");\n }\n surface = this.CanvasKit.MakeRenderTarget(grContext, width, height);\n }\n if (!surface) {\n return null;\n }\n return new JsiSkSurface(this.CanvasKit, surface);\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAEO,MAAME,mBAAmB,SAASC,UAAI,CAA2B;EACtEC,WAAWA,CAACC,SAAoB,EAAE;IAChC,KAAK,CAACA,SAAS,CAAC;EAClB;EAEAC,IAAIA,CAACC,KAAa,EAAEC,MAAc,EAAE;IAClC,OAAO,IAAIC,0BAAY,CACrB,IAAI,CAACJ,SAAS,EACd,IAAI,CAACA,SAAS,CAACK,WAAW,CAACH,KAAK,EAAEC,MAAM,CAC1C,CAAC;EACH;EAEAG,aAAaA,CAACJ,KAAa,EAAEC,MAAc,EAAE;IAC3C;IACA;IACA,MAAMI,EAAE,GAAIC,UAAU,CAASC,eAAe;IAC9C,IAAIC,OAAuB;IAC3B,IAAIH,EAAE,KAAKI,SAAS,EAAE;MACpB,OAAO,IAAI,CAACV,IAAI,CAACC,KAAK,EAAEC,MAAM,CAAC;IACjC,CAAC,MAAM;MACL,MAAMS,SAAS,GAAG,IAAIL,EAAE,CAACL,KAAK,EAAEC,MAAM,CAAC;MACvC,MAAMU,YAAY,GAAG,IAAI,CAACb,SAAS,CAACc,eAAe,CAACF,SAAS,CAAC;MAC9D,MAAMG,SAAS,GAAG,IAAI,CAACf,SAAS,CAACgB,gBAAgB,CAACH,YAAY,CAAC;MAC/D,IAAI,CAACE,SAAS,EAAE;QACd,MAAM,IAAIE,KAAK,CAAC,mCAAmC,CAAC;MACtD;MACAP,OAAO,GAAG,IAAI,CAACV,SAAS,CAACkB,gBAAgB,CAACH,SAAS,EAAEb,KAAK,EAAEC,MAAM,CAAC;IACrE;IACA,IAAI,CAACO,OAAO,EAAE;MACZ,OAAO,IAAI;IACb;IACA,OAAO,IAAIN,0BAAY,CAAC,IAAI,CAACJ,SAAS,EAAEU,OAAO,CAAC;EAClD;AACF;AAACS,OAAA,CAAAtB,mBAAA,GAAAA,mBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_Host","require","_JsiSkSurface","JsiSkSurfaceFactory","Host","constructor","CanvasKit","Make","width","height","JsiSkSurface","MakeSurface","MakeOffscreen","OC","globalThis","OffscreenCanvas","surface","undefined","offscreen","webglContext","GetWebGLContext","grContext","MakeWebGLContext","Error","MakeRenderTarget","MakeFromNativeTexture","_pointer","throwNotImplementedOnRNWeb","exports"],"sources":["JsiSkSurfaceFactory.ts"],"sourcesContent":["import type { CanvasKit, Surface } from \"canvaskit-wasm\";\n\nimport type { SkSurface, SurfaceFactory } from \"../types\";\n\nimport { Host, throwNotImplementedOnRNWeb } from \"./Host\";\nimport { JsiSkSurface } from \"./JsiSkSurface\";\n\nexport class JsiSkSurfaceFactory extends Host implements SurfaceFactory {\n constructor(CanvasKit: CanvasKit) {\n super(CanvasKit);\n }\n\n Make(width: number, height: number) {\n return new JsiSkSurface(\n this.CanvasKit,\n this.CanvasKit.MakeSurface(width, height)!\n );\n }\n\n MakeOffscreen(width: number, height: number) {\n // OffscreenCanvas may be unvailable in some environments.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const OC = (globalThis as any).OffscreenCanvas;\n let surface: Surface | null;\n if (OC === undefined) {\n return this.Make(width, height);\n } else {\n const offscreen = new OC(width, height);\n const webglContext = this.CanvasKit.GetWebGLContext(offscreen);\n const grContext = this.CanvasKit.MakeWebGLContext(webglContext);\n if (!grContext) {\n throw new Error(\"Could not make a graphics context\");\n }\n surface = this.CanvasKit.MakeRenderTarget(grContext, width, height);\n }\n if (!surface) {\n return null;\n }\n return new JsiSkSurface(this.CanvasKit, surface);\n }\n\n MakeFromNativeTexture(_pointer: bigint): SkSurface {\n return throwNotImplementedOnRNWeb<SkSurface>();\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAEO,MAAME,mBAAmB,SAASC,UAAI,CAA2B;EACtEC,WAAWA,CAACC,SAAoB,EAAE;IAChC,KAAK,CAACA,SAAS,CAAC;EAClB;EAEAC,IAAIA,CAACC,KAAa,EAAEC,MAAc,EAAE;IAClC,OAAO,IAAIC,0BAAY,CACrB,IAAI,CAACJ,SAAS,EACd,IAAI,CAACA,SAAS,CAACK,WAAW,CAACH,KAAK,EAAEC,MAAM,CAC1C,CAAC;EACH;EAEAG,aAAaA,CAACJ,KAAa,EAAEC,MAAc,EAAE;IAC3C;IACA;IACA,MAAMI,EAAE,GAAIC,UAAU,CAASC,eAAe;IAC9C,IAAIC,OAAuB;IAC3B,IAAIH,EAAE,KAAKI,SAAS,EAAE;MACpB,OAAO,IAAI,CAACV,IAAI,CAACC,KAAK,EAAEC,MAAM,CAAC;IACjC,CAAC,MAAM;MACL,MAAMS,SAAS,GAAG,IAAIL,EAAE,CAACL,KAAK,EAAEC,MAAM,CAAC;MACvC,MAAMU,YAAY,GAAG,IAAI,CAACb,SAAS,CAACc,eAAe,CAACF,SAAS,CAAC;MAC9D,MAAMG,SAAS,GAAG,IAAI,CAACf,SAAS,CAACgB,gBAAgB,CAACH,YAAY,CAAC;MAC/D,IAAI,CAACE,SAAS,EAAE;QACd,MAAM,IAAIE,KAAK,CAAC,mCAAmC,CAAC;MACtD;MACAP,OAAO,GAAG,IAAI,CAACV,SAAS,CAACkB,gBAAgB,CAACH,SAAS,EAAEb,KAAK,EAAEC,MAAM,CAAC;IACrE;IACA,IAAI,CAACO,OAAO,EAAE;MACZ,OAAO,IAAI;IACb;IACA,OAAO,IAAIN,0BAAY,CAAC,IAAI,CAACJ,SAAS,EAAEU,OAAO,CAAC;EAClD;EAEAS,qBAAqBA,CAACC,QAAgB,EAAa;IACjD,OAAO,IAAAC,gCAA0B,EAAY,CAAC;EAChD;AACF;AAACC,OAAA,CAAAzB,mBAAA,GAAAA,mBAAA","ignoreList":[]}
@@ -2,11 +2,25 @@ import type { Skia } from "../skia/types";
2
2
  import { Container, StaticContainer } from "./StaticContainer";
3
3
  import "../skia/NativeSetup";
4
4
  import "../views/api";
5
+ /**
6
+ * Records the scene graph on the JS thread and hands the native recorder to
7
+ * the view, which owns it and replays it on every draw. The Reanimated mapper
8
+ * only pushes the shared values into that recorder through the view id: no
9
+ * Skia object is captured by a worklet, so nothing on the UI runtime holds
10
+ * native memory. The JS wrapper is disposed right after the handoff, so the
11
+ * view is the sole owner and the resources referenced by the recording
12
+ * (images, pictures) are released when the view replaces it or is torn down,
13
+ * not when a garbage collector gets around to a wrapper.
14
+ *
15
+ * Unmounting does not clear the view: the native view can outlive the React
16
+ * tree (exit animations, screen transitions) and keeps showing its last frame
17
+ * until it is torn down, which is when the recording is released.
18
+ */
5
19
  declare class NativeReanimatedContainer extends Container {
6
20
  private nativeId;
7
21
  private mapperId;
8
- private picture;
9
22
  constructor(Skia: Skia, nativeId: number);
23
+ private stopMapper;
10
24
  unmount(): void;
11
25
  redraw(): void;
12
26
  }
@@ -19,62 +19,63 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
19
19
  const {
20
20
  SkiaViewApi
21
21
  } = globalThis;
22
- const nativeDrawOnscreen = (nativeId, recorder, picture) => {
23
- "worklet";
24
22
 
25
- //const start = performance.now();
26
- recorder.play(picture);
27
- //const end = performance.now();
28
- //console.log("Recording time: ", end - start);
29
- SkiaViewApi.setJsiProperty(nativeId, "picture", picture);
30
- };
23
+ /**
24
+ * Records the scene graph on the JS thread and hands the native recorder to
25
+ * the view, which owns it and replays it on every draw. The Reanimated mapper
26
+ * only pushes the shared values into that recorder through the view id: no
27
+ * Skia object is captured by a worklet, so nothing on the UI runtime holds
28
+ * native memory. The JS wrapper is disposed right after the handoff, so the
29
+ * view is the sole owner and the resources referenced by the recording
30
+ * (images, pictures) are released when the view replaces it or is torn down,
31
+ * not when a garbage collector gets around to a wrapper.
32
+ *
33
+ * Unmounting does not clear the view: the native view can outlive the React
34
+ * tree (exit animations, screen transitions) and keeps showing its last frame
35
+ * until it is torn down, which is when the recording is released.
36
+ */
31
37
  class NativeReanimatedContainer extends _StaticContainer.Container {
32
38
  constructor(Skia, nativeId) {
33
39
  super(Skia);
34
40
  this.nativeId = nativeId;
35
41
  _defineProperty(this, "mapperId", null);
36
- _defineProperty(this, "picture", void 0);
37
- this.picture = Skia.Picture.MakePicture(null);
38
42
  }
39
- unmount() {
40
- super.unmount();
43
+ stopMapper() {
41
44
  if (this.mapperId !== null) {
42
- // The mapper closure retains the recorder and its resources (e.g.
43
- // images) on the UI runtime and keeps updating the picture of an
44
- // unmounted view — stop it or it leaks for the lifetime of the app.
45
45
  _ReanimatedProxy.default.stopMapper(this.mapperId);
46
46
  this.mapperId = null;
47
47
  }
48
48
  }
49
+ unmount() {
50
+ super.unmount();
51
+ this.stopMapper();
52
+ }
49
53
  redraw() {
50
- if (this.mapperId !== null) {
51
- _ReanimatedProxy.default.stopMapper(this.mapperId);
52
- this.mapperId = null;
53
- }
54
+ this.stopMapper();
54
55
  if (this.unmounted) {
55
56
  return;
56
57
  }
57
58
  const recorder = new _ReanimatedRecorder.ReanimatedRecorder(this.Skia);
58
- const {
59
- nativeId,
60
- picture
61
- } = this;
62
59
  (0, _Visitor.visit)(recorder, this.root);
63
60
  const sharedValues = recorder.getSharedValues();
64
- const sharedRecorder = recorder.getRecorder();
65
- // Draw first frame
66
- _ReanimatedProxy.default.runOnUI(() => {
67
- "worklet";
68
-
69
- nativeDrawOnscreen(nativeId, sharedRecorder, picture);
70
- })();
71
- // Animate
61
+ const {
62
+ nativeId
63
+ } = this;
64
+ const nativeRecorder = recorder.getRecorder();
65
+ // stopMapper() only takes effect on the UI thread later, so the previous
66
+ // mapper can still fire after the new recording is installed. Tagging the
67
+ // updates with the recording id lets the view ignore them.
68
+ const recorderId = nativeRecorder.getId();
69
+ // The view takes ownership of the recorder and draws the first frame. The
70
+ // wrapper is disposed right away: it would otherwise co-own the recording
71
+ // until the JS garbage collector finalizes it.
72
+ SkiaViewApi.setJsiProperty(nativeId, "recorder", nativeRecorder);
73
+ nativeRecorder.dispose();
72
74
  if (sharedValues.length > 0) {
73
75
  this.mapperId = _ReanimatedProxy.default.startMapper(() => {
74
76
  "worklet";
75
77
 
76
- sharedRecorder.applyUpdates(sharedValues);
77
- nativeDrawOnscreen(nativeId, sharedRecorder, picture);
78
+ SkiaViewApi.applyUpdates(nativeId, recorderId, sharedValues);
78
79
  }, sharedValues);
79
80
  }
80
81
  }