@shopify/react-native-skia 0.1.180 → 0.1.182
Sign up to get free protection for your applications and to get access to all the features.
- package/android/build.gradle +6 -1
- package/cpp/api/JsiSkData.h +7 -0
- package/cpp/api/JsiSkImage.h +7 -1
- package/cpp/api/JsiSkSVG.h +7 -0
- package/cpp/api/JsiSkTypeface.h +7 -0
- package/cpp/jsi/RuntimeAwareCache.cpp +0 -2
- package/cpp/rnskia/RNSkDomView.cpp +2 -2
- package/cpp/rnskia/RNSkPlatformContext.h +2 -2
- package/cpp/rnskia/dom/base/DerivedNodeProp.h +1 -1
- package/cpp/rnskia/dom/base/JsiDependencyManager.h +10 -6
- package/cpp/rnskia/dom/base/JsiDomNode.h +133 -78
- package/cpp/rnskia/dom/base/JsiDomRenderNode.h +17 -5
- package/cpp/rnskia/dom/base/NodeProp.h +5 -5
- package/cpp/rnskia/dom/base/NodePropsContainer.h +8 -2
- package/cpp/rnskia/dom/props/ClipProp.h +13 -20
- package/cpp/rnskia/dom/props/PathProp.h +16 -14
- package/cpp/rnskia/dom/props/PointProp.h +1 -1
- package/cpp/rnskia/dom/props/RRectProp.h +39 -61
- package/cpp/rnskia/dom/props/RectProp.h +27 -25
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +0 -2
- package/lib/commonjs/dom/nodes/JsiSkDOM.js +56 -54
- package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
- package/lib/commonjs/renderer/Canvas.js +30 -9
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/renderer/HostComponents.d.ts +1 -0
- package/lib/commonjs/renderer/HostComponents.js +6 -1
- package/lib/commonjs/renderer/HostComponents.js.map +1 -1
- package/lib/commonjs/renderer/Reconciler.js +3 -1
- package/lib/commonjs/renderer/Reconciler.js.map +1 -1
- package/lib/commonjs/skia/core/Data.d.ts +2 -2
- package/lib/commonjs/skia/core/Data.js +5 -0
- package/lib/commonjs/skia/core/Data.js.map +1 -1
- package/lib/commonjs/skia/types/Data/Data.d.ts +2 -2
- package/lib/commonjs/skia/types/Data/Data.js.map +1 -1
- package/lib/commonjs/skia/types/Image/Image.d.ts +2 -2
- package/lib/commonjs/skia/types/Image/Image.js.map +1 -1
- package/lib/commonjs/skia/types/JsiInstance.d.ts +3 -0
- package/lib/commonjs/skia/types/JsiInstance.js.map +1 -1
- package/lib/commonjs/skia/types/SVG/SVG.d.ts +2 -2
- package/lib/commonjs/skia/types/SVG/SVG.js.map +1 -1
- package/lib/commonjs/skia/types/Typeface/Typeface.d.ts +2 -2
- package/lib/commonjs/skia/types/Typeface/Typeface.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkData.d.ts +1 -0
- package/lib/commonjs/skia/web/JsiSkData.js +3 -0
- package/lib/commonjs/skia/web/JsiSkData.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkImage.d.ts +1 -0
- package/lib/commonjs/skia/web/JsiSkImage.js +4 -0
- package/lib/commonjs/skia/web/JsiSkImage.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkTypeface.d.ts +1 -0
- package/lib/commonjs/skia/web/JsiSkTypeface.js +4 -0
- package/lib/commonjs/skia/web/JsiSkTypeface.js.map +1 -1
- package/lib/commonjs/views/SkiaBaseWebView.js +5 -1
- package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
- package/lib/module/dom/nodes/JsiSkDOM.js +55 -54
- package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
- package/lib/module/renderer/Canvas.js +29 -10
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/renderer/HostComponents.d.ts +1 -0
- package/lib/module/renderer/HostComponents.js +3 -0
- package/lib/module/renderer/HostComponents.js.map +1 -1
- package/lib/module/renderer/Reconciler.js +2 -1
- package/lib/module/renderer/Reconciler.js.map +1 -1
- package/lib/module/skia/core/Data.d.ts +2 -2
- package/lib/module/skia/core/Data.js +5 -0
- package/lib/module/skia/core/Data.js.map +1 -1
- package/lib/module/skia/types/Data/Data.d.ts +2 -2
- package/lib/module/skia/types/Data/Data.js.map +1 -1
- package/lib/module/skia/types/Image/Image.d.ts +2 -2
- package/lib/module/skia/types/Image/Image.js.map +1 -1
- package/lib/module/skia/types/JsiInstance.d.ts +3 -0
- package/lib/module/skia/types/JsiInstance.js.map +1 -1
- package/lib/module/skia/types/SVG/SVG.d.ts +2 -2
- package/lib/module/skia/types/SVG/SVG.js.map +1 -1
- package/lib/module/skia/types/Typeface/Typeface.d.ts +2 -2
- package/lib/module/skia/types/Typeface/Typeface.js.map +1 -1
- package/lib/module/skia/web/JsiSkData.d.ts +1 -0
- package/lib/module/skia/web/JsiSkData.js +3 -0
- package/lib/module/skia/web/JsiSkData.js.map +1 -1
- package/lib/module/skia/web/JsiSkImage.d.ts +1 -0
- package/lib/module/skia/web/JsiSkImage.js +4 -0
- package/lib/module/skia/web/JsiSkImage.js.map +1 -1
- package/lib/module/skia/web/JsiSkTypeface.d.ts +1 -0
- package/lib/module/skia/web/JsiSkTypeface.js +4 -0
- package/lib/module/skia/web/JsiSkTypeface.js.map +1 -1
- package/lib/module/views/SkiaBaseWebView.js +5 -1
- package/lib/module/views/SkiaBaseWebView.js.map +1 -1
- package/lib/typescript/src/renderer/HostComponents.d.ts +1 -0
- package/lib/typescript/src/skia/core/Data.d.ts +2 -2
- package/lib/typescript/src/skia/types/Data/Data.d.ts +2 -2
- package/lib/typescript/src/skia/types/Image/Image.d.ts +2 -2
- package/lib/typescript/src/skia/types/JsiInstance.d.ts +3 -0
- package/lib/typescript/src/skia/types/SVG/SVG.d.ts +2 -2
- package/lib/typescript/src/skia/types/Typeface/Typeface.d.ts +2 -2
- package/lib/typescript/src/skia/web/JsiSkData.d.ts +1 -0
- package/lib/typescript/src/skia/web/JsiSkImage.d.ts +1 -0
- package/lib/typescript/src/skia/web/JsiSkTypeface.d.ts +1 -0
- package/package.json +1 -1
- package/src/dom/nodes/JsiSkDOM.ts +55 -54
- package/src/renderer/Canvas.tsx +34 -14
- package/src/renderer/HostComponents.ts +4 -0
- package/src/renderer/Reconciler.tsx +2 -1
- package/src/skia/core/Data.ts +14 -6
- package/src/skia/types/Data/Data.ts +2 -2
- package/src/skia/types/Image/Image.ts +2 -2
- package/src/skia/types/JsiInstance.ts +4 -0
- package/src/skia/types/SVG/SVG.ts +2 -2
- package/src/skia/types/Typeface/Typeface.ts +2 -2
- package/src/skia/web/JsiSkData.ts +4 -0
- package/src/skia/web/JsiSkImage.ts +4 -0
- package/src/skia/web/JsiSkTypeface.ts +4 -0
- package/src/views/SkiaBaseWebView.tsx +5 -0
@@ -1,3 +1,3 @@
|
|
1
|
-
import type { SkData, DataSourceParam } from "../types";
|
2
|
-
export declare const useRawData: <T>(source: DataSourceParam, factory: (data: SkData) => T, onError?: ((err: Error) => void) | undefined) => T | null;
|
1
|
+
import type { SkData, DataSourceParam, JsiDisposable } from "../types";
|
2
|
+
export declare const useRawData: <T extends JsiDisposable>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: ((err: Error) => void) | undefined) => T | null;
|
3
3
|
export declare const useData: (source: DataSourceParam, onError?: ((err: Error) => void) | undefined) => SkData | null;
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import type { SkJSIInstance } from "../JsiInstance";
|
2
|
-
export declare type SkData = SkJSIInstance<"Data"
|
1
|
+
import type { JsiDisposable, SkJSIInstance } from "../JsiInstance";
|
2
|
+
export declare type SkData = SkJSIInstance<"Data"> & JsiDisposable;
|
3
3
|
declare type RNModule = number;
|
4
4
|
declare type ESModule = {
|
5
5
|
__esModule: true;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import type { SkMatrix } from "../Matrix";
|
2
|
-
import type { SkJSIInstance } from "../JsiInstance";
|
2
|
+
import type { JsiDisposable, SkJSIInstance } from "../JsiInstance";
|
3
3
|
import type { TileMode } from "../ImageFilter";
|
4
4
|
import type { SkShader } from "../Shader";
|
5
5
|
export declare enum FilterMode {
|
@@ -16,7 +16,7 @@ export declare enum ImageFormat {
|
|
16
16
|
PNG = 4,
|
17
17
|
WEBP = 6
|
18
18
|
}
|
19
|
-
export interface SkImage extends SkJSIInstance<"Image"
|
19
|
+
export interface SkImage extends SkJSIInstance<"Image">, JsiDisposable {
|
20
20
|
/**
|
21
21
|
* Returns the possibly scaled height of the image.
|
22
22
|
*/
|
@@ -1,2 +1,2 @@
|
|
1
|
-
import type { SkJSIInstance } from "../JsiInstance";
|
2
|
-
export declare type SkSVG = SkJSIInstance<"SVG"
|
1
|
+
import type { JsiDisposable, SkJSIInstance } from "../JsiInstance";
|
2
|
+
export declare type SkSVG = SkJSIInstance<"SVG"> & JsiDisposable;
|
@@ -1,2 +1,2 @@
|
|
1
|
-
import type { SkJSIInstance } from "../JsiInstance";
|
2
|
-
export declare type SkTypeface = SkJSIInstance<"Typeface"
|
1
|
+
import type { JsiDisposable, SkJSIInstance } from "../JsiInstance";
|
2
|
+
export declare type SkTypeface = SkJSIInstance<"Typeface"> & JsiDisposable;
|
@@ -10,4 +10,5 @@ export declare class JsiSkImage extends HostObject<Image, "Image"> implements Sk
|
|
10
10
|
makeShaderCubic(tx: TileMode, ty: TileMode, B: number, C: number, localMatrix?: SkMatrix): SkShader;
|
11
11
|
encodeToBytes(fmt?: ImageFormat, quality?: number): Uint8Array;
|
12
12
|
encodeToBase64(fmt?: ImageFormat, quality?: number): string;
|
13
|
+
dispose(): void;
|
13
14
|
}
|
package/package.json
CHANGED
@@ -56,6 +56,7 @@ import type {
|
|
56
56
|
Path1DPathEffectProps,
|
57
57
|
Path2DPathEffectProps,
|
58
58
|
} from "../types/PathEffects";
|
59
|
+
import { NATIVE_DOM } from "../../renderer/HostComponents";
|
59
60
|
|
60
61
|
import {
|
61
62
|
FillNode,
|
@@ -127,203 +128,203 @@ export class JsiSkDOM implements SkDOM {
|
|
127
128
|
constructor(private ctx: NodeContext) {}
|
128
129
|
|
129
130
|
Layer(props?: ChildrenProps) {
|
130
|
-
return
|
131
|
+
return NATIVE_DOM
|
131
132
|
? global.SkiaDomApi.LayerNode(props ?? {})
|
132
133
|
: new LayerNode(this.ctx, props ?? {});
|
133
134
|
}
|
134
135
|
|
135
136
|
Group(props?: GroupProps) {
|
136
|
-
return
|
137
|
+
return NATIVE_DOM
|
137
138
|
? global.SkiaDomApi.GroupNode(props ?? {})
|
138
139
|
: new GroupNode(this.ctx, props ?? {});
|
139
140
|
}
|
140
141
|
|
141
142
|
Paint(props: PaintProps) {
|
142
|
-
return
|
143
|
+
return NATIVE_DOM
|
143
144
|
? global.SkiaDomApi.PaintNode(props ?? {})
|
144
145
|
: new PaintNode(this.ctx, props);
|
145
146
|
}
|
146
147
|
|
147
148
|
// Drawings
|
148
149
|
Fill(props?: DrawingNodeProps) {
|
149
|
-
return
|
150
|
+
return NATIVE_DOM
|
150
151
|
? global.SkiaDomApi.FillNode(props ?? {})
|
151
152
|
: new FillNode(this.ctx, props);
|
152
153
|
}
|
153
154
|
|
154
155
|
Image(props: ImageProps) {
|
155
|
-
return
|
156
|
+
return NATIVE_DOM
|
156
157
|
? global.SkiaDomApi.ImageNode(props ?? {})
|
157
158
|
: new ImageNode(this.ctx, props);
|
158
159
|
}
|
159
160
|
|
160
161
|
Circle(props: CircleProps) {
|
161
|
-
return
|
162
|
+
return NATIVE_DOM
|
162
163
|
? global.SkiaDomApi.CircleNode(props ?? {})
|
163
164
|
: new CircleNode(this.ctx, props);
|
164
165
|
}
|
165
166
|
|
166
167
|
Path(props: PathProps) {
|
167
|
-
return
|
168
|
+
return NATIVE_DOM
|
168
169
|
? global.SkiaDomApi.PathNode(props ?? {})
|
169
170
|
: new PathNode(this.ctx, props);
|
170
171
|
}
|
171
172
|
|
172
173
|
CustomDrawing(props: CustomDrawingNodeProps) {
|
173
|
-
return
|
174
|
+
return NATIVE_DOM
|
174
175
|
? global.SkiaDomApi.CustomDrawingNode(props ?? {})
|
175
176
|
: new CustomDrawingNode(this.ctx, props);
|
176
177
|
}
|
177
178
|
|
178
179
|
Line(props: LineProps) {
|
179
|
-
return
|
180
|
+
return NATIVE_DOM
|
180
181
|
? global.SkiaDomApi.LineNode(props ?? {})
|
181
182
|
: new LineNode(this.ctx, props);
|
182
183
|
}
|
183
184
|
|
184
185
|
Oval(props: OvalProps) {
|
185
|
-
return
|
186
|
+
return NATIVE_DOM
|
186
187
|
? global.SkiaDomApi.OvalNode(props ?? {})
|
187
188
|
: new OvalNode(this.ctx, props);
|
188
189
|
}
|
189
190
|
|
190
191
|
Patch(props: PatchProps) {
|
191
|
-
return
|
192
|
+
return NATIVE_DOM
|
192
193
|
? global.SkiaDomApi.PatchNode(props ?? {})
|
193
194
|
: new PatchNode(this.ctx, props);
|
194
195
|
}
|
195
196
|
|
196
197
|
Points(props: PointsProps) {
|
197
|
-
return
|
198
|
+
return NATIVE_DOM
|
198
199
|
? global.SkiaDomApi.PointsNode(props ?? {})
|
199
200
|
: new PointsNode(this.ctx, props);
|
200
201
|
}
|
201
202
|
|
202
203
|
Rect(props: RectProps) {
|
203
|
-
return
|
204
|
+
return NATIVE_DOM
|
204
205
|
? global.SkiaDomApi.RectNode(props)
|
205
206
|
: new RectNode(this.ctx, props);
|
206
207
|
}
|
207
208
|
|
208
209
|
RRect(props: RoundedRectProps) {
|
209
|
-
return
|
210
|
+
return NATIVE_DOM
|
210
211
|
? global.SkiaDomApi.RRectNode(props)
|
211
212
|
: new RRectNode(this.ctx, props);
|
212
213
|
}
|
213
214
|
|
214
215
|
Vertices(props: VerticesProps) {
|
215
|
-
return
|
216
|
+
return NATIVE_DOM
|
216
217
|
? global.SkiaDomApi.VerticesNode(props)
|
217
218
|
: new VerticesNode(this.ctx, props);
|
218
219
|
}
|
219
220
|
|
220
221
|
Text(props: TextProps) {
|
221
|
-
return
|
222
|
+
return NATIVE_DOM
|
222
223
|
? global.SkiaDomApi.TextNode(props)
|
223
224
|
: new TextNode(this.ctx, props);
|
224
225
|
}
|
225
226
|
|
226
227
|
TextPath(props: TextPathProps) {
|
227
|
-
return
|
228
|
+
return NATIVE_DOM
|
228
229
|
? global.SkiaDomApi.TextPathNode(props)
|
229
230
|
: new TextPathNode(this.ctx, props);
|
230
231
|
}
|
231
232
|
|
232
233
|
TextBlob(props: TextBlobProps) {
|
233
|
-
return
|
234
|
+
return NATIVE_DOM
|
234
235
|
? global.SkiaDomApi.TextBlobNode(props)
|
235
236
|
: new TextBlobNode(this.ctx, props);
|
236
237
|
}
|
237
238
|
|
238
239
|
Glyphs(props: GlyphsProps) {
|
239
|
-
return
|
240
|
+
return NATIVE_DOM
|
240
241
|
? global.SkiaDomApi.GlyphsNode(props)
|
241
242
|
: new GlyphsNode(this.ctx, props);
|
242
243
|
}
|
243
244
|
|
244
245
|
DiffRect(props: DiffRectProps) {
|
245
|
-
return
|
246
|
+
return NATIVE_DOM
|
246
247
|
? global.SkiaDomApi.DiffRectNode(props)
|
247
248
|
: new DiffRectNode(this.ctx, props);
|
248
249
|
}
|
249
250
|
|
250
251
|
Picture(props: PictureProps) {
|
251
|
-
return
|
252
|
+
return NATIVE_DOM
|
252
253
|
? global.SkiaDomApi.PictureNode(props)
|
253
254
|
: new PictureNode(this.ctx, props);
|
254
255
|
}
|
255
256
|
|
256
257
|
ImageSVG(props: ImageSVGProps) {
|
257
|
-
return
|
258
|
+
return NATIVE_DOM
|
258
259
|
? global.SkiaDomApi.ImageSVGNode(props)
|
259
260
|
: new ImageSVGNode(this.ctx, props);
|
260
261
|
}
|
261
262
|
|
262
263
|
// BlurMaskFilters
|
263
264
|
BlurMaskFilter(props: BlurMaskFilterProps) {
|
264
|
-
return
|
265
|
+
return NATIVE_DOM
|
265
266
|
? global.SkiaDomApi.BlurMaskFilterNode(props)
|
266
267
|
: new BlurMaskFilterNode(this.ctx, props);
|
267
268
|
}
|
268
269
|
|
269
270
|
// ImageFilters
|
270
271
|
BlendImageFilter(props: BlendImageFilterProps) {
|
271
|
-
return
|
272
|
+
return NATIVE_DOM
|
272
273
|
? global.SkiaDomApi.BlendImageFilterNode(props)
|
273
274
|
: new BlendImageFilterNode(this.ctx, props);
|
274
275
|
}
|
275
276
|
|
276
277
|
DropShadowImageFilter(props: DropShadowImageFilterProps) {
|
277
|
-
return
|
278
|
+
return NATIVE_DOM
|
278
279
|
? global.SkiaDomApi.DropShadowImageFilterNode(props)
|
279
280
|
: new DropShadowImageFilterNode(this.ctx, props);
|
280
281
|
}
|
281
282
|
|
282
283
|
DisplacementMapImageFilter(props: DisplacementMapImageFilterProps) {
|
283
|
-
return
|
284
|
+
return NATIVE_DOM
|
284
285
|
? global.SkiaDomApi.DisplacementMapImageFilterNode(props)
|
285
286
|
: new DisplacementMapImageFilterNode(this.ctx, props);
|
286
287
|
}
|
287
288
|
|
288
289
|
BlurImageFilter(props: BlurImageFilterProps) {
|
289
|
-
return
|
290
|
+
return NATIVE_DOM
|
290
291
|
? global.SkiaDomApi.BlurImageFilterNode(props)
|
291
292
|
: new BlurImageFilterNode(this.ctx, props);
|
292
293
|
}
|
293
294
|
|
294
295
|
OffsetImageFilter(props: OffsetImageFilterProps) {
|
295
|
-
return
|
296
|
+
return NATIVE_DOM
|
296
297
|
? global.SkiaDomApi.OffsetImageFilterNode(props)
|
297
298
|
: new OffsetImageFilterNode(this.ctx, props);
|
298
299
|
}
|
299
300
|
|
300
301
|
MorphologyImageFilter(props: MorphologyImageFilterProps) {
|
301
|
-
return
|
302
|
+
return NATIVE_DOM
|
302
303
|
? global.SkiaDomApi.MorphologyImageFilterNode(props)
|
303
304
|
: new MorphologyImageFilterNode(this.ctx, props);
|
304
305
|
}
|
305
306
|
|
306
307
|
RuntimeShaderImageFilter(props: RuntimeShaderImageFilterProps) {
|
307
|
-
return
|
308
|
+
return NATIVE_DOM
|
308
309
|
? global.SkiaDomApi.RuntimeShaderImageFilterNode(props)
|
309
310
|
: new RuntimeShaderImageFilterNode(this.ctx, props);
|
310
311
|
}
|
311
312
|
|
312
313
|
// Color Filters
|
313
314
|
MatrixColorFilter(props: MatrixColorFilterProps) {
|
314
|
-
return
|
315
|
+
return NATIVE_DOM
|
315
316
|
? global.SkiaDomApi.MatrixColorFilterNode(props)
|
316
317
|
: new MatrixColorFilterNode(this.ctx, props);
|
317
318
|
}
|
318
319
|
|
319
320
|
BlendColorFilter(props: BlendColorFilterProps) {
|
320
|
-
return
|
321
|
+
return NATIVE_DOM
|
321
322
|
? global.SkiaDomApi.BlendColorFilterNode(props)
|
322
323
|
: new BlendColorFilterNode(this.ctx, props);
|
323
324
|
}
|
324
325
|
|
325
326
|
LumaColorFilter() {
|
326
|
-
return
|
327
|
+
return NATIVE_DOM
|
327
328
|
? global.SkiaDomApi.LumaColorFilterNode()
|
328
329
|
: new LumaColorFilterNode(this.ctx);
|
329
330
|
}
|
@@ -343,129 +344,129 @@ export class JsiSkDOM implements SkDOM {
|
|
343
344
|
}
|
344
345
|
|
345
346
|
LerpColorFilter(props: LerpColorFilterProps) {
|
346
|
-
return
|
347
|
+
return NATIVE_DOM
|
347
348
|
? global.SkiaDomApi.LerpColorFilterNode(props)
|
348
349
|
: new LerpColorFilterNode(this.ctx, props);
|
349
350
|
}
|
350
351
|
|
351
352
|
// Shaders
|
352
353
|
Shader(props: ShaderProps) {
|
353
|
-
return
|
354
|
+
return NATIVE_DOM
|
354
355
|
? global.SkiaDomApi.ShaderNode(props)
|
355
356
|
: new ShaderNode(this.ctx, props);
|
356
357
|
}
|
357
358
|
|
358
359
|
ImageShader(props: ImageShaderProps) {
|
359
|
-
return
|
360
|
+
return NATIVE_DOM
|
360
361
|
? global.SkiaDomApi.ImageShaderNode(props)
|
361
362
|
: new ImageShaderNode(this.ctx, props);
|
362
363
|
}
|
363
364
|
|
364
365
|
ColorShader(props: ColorProps) {
|
365
|
-
return
|
366
|
+
return NATIVE_DOM
|
366
367
|
? global.SkiaDomApi.ColorShaderNode(props)
|
367
368
|
: new ColorNode(this.ctx, props);
|
368
369
|
}
|
369
370
|
|
370
371
|
SweepGradient(props: SweepGradientProps) {
|
371
|
-
return
|
372
|
+
return NATIVE_DOM
|
372
373
|
? global.SkiaDomApi.SweepGradientNode(props)
|
373
374
|
: new SweepGradientNode(this.ctx, props);
|
374
375
|
}
|
375
376
|
|
376
377
|
Turbulence(props: TurbulenceProps) {
|
377
|
-
return
|
378
|
+
return NATIVE_DOM
|
378
379
|
? global.SkiaDomApi.TurbulenceNode(props)
|
379
380
|
: new TurbulenceNode(this.ctx, props);
|
380
381
|
}
|
381
382
|
|
382
383
|
FractalNoise(props: FractalNoiseProps) {
|
383
|
-
return
|
384
|
+
return NATIVE_DOM
|
384
385
|
? global.SkiaDomApi.FractalNoiseNode(props)
|
385
386
|
: new FractalNoiseNode(this.ctx, props);
|
386
387
|
}
|
387
388
|
|
388
389
|
LinearGradient(props: LinearGradientProps) {
|
389
|
-
return
|
390
|
+
return NATIVE_DOM
|
390
391
|
? global.SkiaDomApi.LinearGradientNode(props)
|
391
392
|
: new LinearGradientNode(this.ctx, props);
|
392
393
|
}
|
393
394
|
|
394
395
|
RadialGradient(props: RadialGradientProps) {
|
395
|
-
return
|
396
|
+
return NATIVE_DOM
|
396
397
|
? global.SkiaDomApi.RadialGradientNode(props)
|
397
398
|
: new RadialGradientNode(this.ctx, props);
|
398
399
|
}
|
399
400
|
|
400
401
|
TwoPointConicalGradient(props: TwoPointConicalGradientProps) {
|
401
|
-
return
|
402
|
+
return NATIVE_DOM
|
402
403
|
? global.SkiaDomApi.TwoPointConicalGradientNode(props)
|
403
404
|
: new TwoPointConicalGradientNode(this.ctx, props);
|
404
405
|
}
|
405
406
|
|
406
407
|
// Path Effects
|
407
408
|
CornerPathEffect(props: CornerPathEffectProps) {
|
408
|
-
return
|
409
|
+
return NATIVE_DOM
|
409
410
|
? global.SkiaDomApi.CornerPathEffectNode(props)
|
410
411
|
: new CornerPathEffectNode(this.ctx, props);
|
411
412
|
}
|
412
413
|
|
413
414
|
DiscretePathEffect(props: DiscretePathEffectProps) {
|
414
|
-
return
|
415
|
+
return NATIVE_DOM
|
415
416
|
? global.SkiaDomApi.DiscretePathEffectNode(props)
|
416
417
|
: new DiscretePathEffectNode(this.ctx, props);
|
417
418
|
}
|
418
419
|
|
419
420
|
DashPathEffect(props: DashPathEffectProps) {
|
420
|
-
return
|
421
|
+
return NATIVE_DOM
|
421
422
|
? global.SkiaDomApi.DashPathEffectNode(props)
|
422
423
|
: new DashPathEffectNode(this.ctx, props);
|
423
424
|
}
|
424
425
|
|
425
426
|
Path1DPathEffect(props: Path1DPathEffectProps) {
|
426
|
-
return
|
427
|
+
return NATIVE_DOM
|
427
428
|
? global.SkiaDomApi.Path1DPathEffectNode(props)
|
428
429
|
: new Path1DPathEffectNode(this.ctx, props);
|
429
430
|
}
|
430
431
|
|
431
432
|
Path2DPathEffect(props: Path2DPathEffectProps) {
|
432
|
-
return
|
433
|
+
return NATIVE_DOM
|
433
434
|
? global.SkiaDomApi.Path2DPathEffectNode(props)
|
434
435
|
: new Path2DPathEffectNode(this.ctx, props);
|
435
436
|
}
|
436
437
|
|
437
438
|
SumPathEffect() {
|
438
|
-
return
|
439
|
+
return NATIVE_DOM
|
439
440
|
? global.SkiaDomApi.SumPathEffectNode()
|
440
441
|
: new SumPathEffectNode(this.ctx);
|
441
442
|
}
|
442
443
|
|
443
444
|
Line2DPathEffect(props: Line2DPathEffectProps) {
|
444
|
-
return
|
445
|
+
return NATIVE_DOM
|
445
446
|
? global.SkiaDomApi.Line2DPathEffectNode(props)
|
446
447
|
: new Line2DPathEffectNode(this.ctx, props);
|
447
448
|
}
|
448
449
|
|
449
450
|
Blend(props: BlendProps) {
|
450
|
-
return
|
451
|
+
return NATIVE_DOM
|
451
452
|
? global.SkiaDomApi.BlendNode(props)
|
452
453
|
: new BlendNode(this.ctx, props);
|
453
454
|
}
|
454
455
|
|
455
456
|
BackdropFilter(props: ChildrenProps) {
|
456
|
-
return
|
457
|
+
return NATIVE_DOM
|
457
458
|
? global.SkiaDomApi.BackdropFilterNode(props)
|
458
459
|
: new BackdropFilterNode(this.ctx, props);
|
459
460
|
}
|
460
461
|
|
461
462
|
Box(props: BoxProps) {
|
462
|
-
return
|
463
|
+
return NATIVE_DOM
|
463
464
|
? global.SkiaDomApi.BoxNode(props)
|
464
465
|
: new BoxNode(this.ctx, props);
|
465
466
|
}
|
466
467
|
|
467
468
|
BoxShadow(props: BoxShadowProps) {
|
468
|
-
return
|
469
|
+
return NATIVE_DOM
|
469
470
|
? global.SkiaDomApi.BoxShadowNode(props)
|
470
471
|
: new BoxShadowNode(this.ctx, props);
|
471
472
|
}
|
package/src/renderer/Canvas.tsx
CHANGED
@@ -12,12 +12,14 @@ import type {
|
|
12
12
|
ForwardedRef,
|
13
13
|
} from "react";
|
14
14
|
|
15
|
-
import { SkiaDomView } from "../views";
|
15
|
+
import { SkiaDomView, SkiaView } from "../views";
|
16
16
|
import { Skia } from "../skia/Skia";
|
17
17
|
import type { TouchHandler, SkiaBaseViewProps } from "../views";
|
18
18
|
import type { SkiaValue } from "../values/types";
|
19
|
+
import { JsiDrawingContext } from "../dom/types";
|
19
20
|
|
20
21
|
import { SkiaRoot } from "./Reconciler";
|
22
|
+
import { NATIVE_DOM } from "./HostComponents";
|
21
23
|
|
22
24
|
export const useCanvasRef = () => useRef<SkiaDomView>(null);
|
23
25
|
|
@@ -66,19 +68,37 @@ export const Canvas = forwardRef<SkiaDomView, CanvasProps>(
|
|
66
68
|
root.unmount();
|
67
69
|
};
|
68
70
|
}, [root]);
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
71
|
+
if (NATIVE_DOM) {
|
72
|
+
return (
|
73
|
+
<SkiaDomView
|
74
|
+
ref={ref}
|
75
|
+
style={style}
|
76
|
+
root={root.dom}
|
77
|
+
onTouch={onTouch}
|
78
|
+
onSize={onSize}
|
79
|
+
mode={mode}
|
80
|
+
debug={debug}
|
81
|
+
{...props}
|
82
|
+
/>
|
83
|
+
);
|
84
|
+
} else {
|
85
|
+
return (
|
86
|
+
<SkiaView
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
88
|
+
ref={ref as any}
|
89
|
+
style={style}
|
90
|
+
mode={mode}
|
91
|
+
debug={debug}
|
92
|
+
onSize={onSize}
|
93
|
+
onDraw={(canvas, info) => {
|
94
|
+
onTouch && onTouch(info.touches);
|
95
|
+
const ctx = new JsiDrawingContext(Skia, canvas);
|
96
|
+
root.dom.render(ctx);
|
97
|
+
}}
|
98
|
+
{...props}
|
99
|
+
/>
|
100
|
+
);
|
101
|
+
}
|
82
102
|
}
|
83
103
|
) as React.FC<CanvasProps & React.RefAttributes<SkiaDomView>>;
|
84
104
|
|
@@ -65,6 +65,10 @@ import { exhaustiveCheck } from "./typeddash";
|
|
65
65
|
import type { SkiaProps } from "./processors";
|
66
66
|
import type { DependencyManager } from "./DependencyManager";
|
67
67
|
|
68
|
+
// This flag should only be turned on for debugging/testing
|
69
|
+
const shouldUseJSDomOnNative = false;
|
70
|
+
export const NATIVE_DOM = shouldUseJSDomOnNative ? false : !!global.SkiaDomApi;
|
71
|
+
|
68
72
|
declare global {
|
69
73
|
var SkiaDomApi: {
|
70
74
|
DependencyManager: (
|
@@ -8,13 +8,14 @@ import type { SkiaValue } from "../values/types";
|
|
8
8
|
import { DependencyManager } from "./DependencyManager";
|
9
9
|
import { skHostConfig, debug as hostDebug } from "./HostConfig";
|
10
10
|
import { Container } from "./Container";
|
11
|
+
import { NATIVE_DOM } from "./HostComponents";
|
11
12
|
|
12
13
|
const skiaReconciler = ReactReconciler(skHostConfig);
|
13
14
|
|
14
15
|
type RegisterValues = (values: Array<SkiaValue<unknown>>) => () => void;
|
15
16
|
|
16
17
|
const createDependencyManager = (registerValues: RegisterValues) =>
|
17
|
-
|
18
|
+
NATIVE_DOM
|
18
19
|
? global.SkiaDomApi.DependencyManager(registerValues)
|
19
20
|
: new DependencyManager(registerValues);
|
20
21
|
|
package/src/skia/core/Data.ts
CHANGED
@@ -3,7 +3,12 @@ import { Image } from "react-native";
|
|
3
3
|
|
4
4
|
import { Skia } from "../Skia";
|
5
5
|
import { isRNModule } from "../types";
|
6
|
-
import type {
|
6
|
+
import type {
|
7
|
+
SkData,
|
8
|
+
DataModule,
|
9
|
+
DataSourceParam,
|
10
|
+
JsiDisposable,
|
11
|
+
} from "../types";
|
7
12
|
|
8
13
|
const resolveAsset = (source: DataModule) => {
|
9
14
|
return isRNModule(source)
|
@@ -27,7 +32,7 @@ const factoryWrapper = <T>(
|
|
27
32
|
|
28
33
|
const loadData = <T>(
|
29
34
|
source: DataSourceParam,
|
30
|
-
factory: (data: SkData) => T,
|
35
|
+
factory: (data: SkData) => T | null,
|
31
36
|
onError?: (err: Error) => void
|
32
37
|
): Promise<T | null> => {
|
33
38
|
if (source === null || source === undefined) {
|
@@ -43,20 +48,23 @@ const loadData = <T>(
|
|
43
48
|
);
|
44
49
|
}
|
45
50
|
};
|
46
|
-
const useLoading = <T>(
|
51
|
+
const useLoading = <T extends JsiDisposable>(
|
47
52
|
source: DataSourceParam,
|
48
53
|
loader: () => Promise<T | null>
|
49
54
|
) => {
|
50
55
|
const mounted = useRef(false);
|
51
56
|
const [data, setData] = useState<T | null>(null);
|
57
|
+
const dataRef = useRef<T | null>(null);
|
52
58
|
useEffect(() => {
|
53
59
|
mounted.current = true;
|
54
60
|
loader().then((value) => {
|
55
61
|
if (mounted.current) {
|
56
62
|
setData(value);
|
63
|
+
dataRef.current = value;
|
57
64
|
}
|
58
65
|
});
|
59
66
|
return () => {
|
67
|
+
dataRef.current?.dispose();
|
60
68
|
mounted.current = false;
|
61
69
|
};
|
62
70
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
@@ -64,11 +72,11 @@ const useLoading = <T>(
|
|
64
72
|
return data;
|
65
73
|
};
|
66
74
|
|
67
|
-
export const useRawData = <T>(
|
75
|
+
export const useRawData = <T extends JsiDisposable>(
|
68
76
|
source: DataSourceParam,
|
69
|
-
factory: (data: SkData) => T,
|
77
|
+
factory: (data: SkData) => T | null,
|
70
78
|
onError?: (err: Error) => void
|
71
|
-
) => useLoading(source, () => loadData(source, factory, onError));
|
79
|
+
) => useLoading(source, () => loadData<T>(source, factory, onError));
|
72
80
|
|
73
81
|
const identity = (data: SkData) => data;
|
74
82
|
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import type { SkJSIInstance } from "../JsiInstance";
|
1
|
+
import type { JsiDisposable, SkJSIInstance } from "../JsiInstance";
|
2
2
|
|
3
|
-
export type SkData = SkJSIInstance<"Data"
|
3
|
+
export type SkData = SkJSIInstance<"Data"> & JsiDisposable;
|
4
4
|
|
5
5
|
type RNModule = number;
|
6
6
|
type ESModule = {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import type { SkMatrix } from "../Matrix";
|
2
|
-
import type { SkJSIInstance } from "../JsiInstance";
|
2
|
+
import type { JsiDisposable, SkJSIInstance } from "../JsiInstance";
|
3
3
|
import type { TileMode } from "../ImageFilter";
|
4
4
|
import type { SkShader } from "../Shader";
|
5
5
|
|
@@ -20,7 +20,7 @@ export enum ImageFormat {
|
|
20
20
|
WEBP = 6,
|
21
21
|
}
|
22
22
|
|
23
|
-
export interface SkImage extends SkJSIInstance<"Image"
|
23
|
+
export interface SkImage extends SkJSIInstance<"Image">, JsiDisposable {
|
24
24
|
/**
|
25
25
|
* Returns the possibly scaled height of the image.
|
26
26
|
*/
|