@shopify/react-native-skia 0.1.180 → 0.1.182
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.
- 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
|
*/
|