@shopify/react-native-skia 0.1.136 → 0.1.137

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. package/README.md +4 -47
  2. package/cpp/api/JsiSkMatrix.h +12 -0
  3. package/lib/commonjs/renderer/components/Group.js +1 -1
  4. package/lib/commonjs/renderer/components/Group.js.map +1 -1
  5. package/lib/commonjs/renderer/processors/Transform.js +8 -15
  6. package/lib/commonjs/renderer/processors/Transform.js.map +1 -1
  7. package/lib/commonjs/skia/types/Matrix.js +17 -2
  8. package/lib/commonjs/skia/types/Matrix.js.map +1 -1
  9. package/lib/commonjs/skia/web/JsiSkMatrix.js +4 -0
  10. package/lib/commonjs/skia/web/JsiSkMatrix.js.map +1 -1
  11. package/lib/commonjs/views/SkiaView.web.js +8 -8
  12. package/lib/commonjs/views/SkiaView.web.js.map +1 -1
  13. package/lib/commonjs/web/LoadSkiaWeb.js +25 -0
  14. package/lib/commonjs/web/LoadSkiaWeb.js.map +1 -0
  15. package/lib/commonjs/web/WithSkiaWeb.js +38 -0
  16. package/lib/commonjs/web/WithSkiaWeb.js.map +1 -0
  17. package/lib/commonjs/web/index.js +22 -12
  18. package/lib/commonjs/web/index.js.map +1 -1
  19. package/lib/module/renderer/components/Group.js +1 -1
  20. package/lib/module/renderer/components/Group.js.map +1 -1
  21. package/lib/module/renderer/processors/Transform.js +8 -15
  22. package/lib/module/renderer/processors/Transform.js.map +1 -1
  23. package/lib/module/skia/types/Matrix.js +11 -1
  24. package/lib/module/skia/types/Matrix.js.map +1 -1
  25. package/lib/module/skia/web/JsiSkMatrix.js +4 -0
  26. package/lib/module/skia/web/JsiSkMatrix.js.map +1 -1
  27. package/lib/module/views/SkiaView.web.js +8 -8
  28. package/lib/module/views/SkiaView.web.js.map +1 -1
  29. package/lib/module/web/LoadSkiaWeb.js +12 -0
  30. package/lib/module/web/LoadSkiaWeb.js.map +1 -0
  31. package/lib/module/web/WithSkiaWeb.js +22 -0
  32. package/lib/module/web/WithSkiaWeb.js.map +1 -0
  33. package/lib/module/web/index.js +2 -9
  34. package/lib/module/web/index.js.map +1 -1
  35. package/lib/typescript/src/renderer/processors/Transform.d.ts +2 -2
  36. package/lib/typescript/src/skia/types/Matrix.d.ts +5 -1
  37. package/lib/typescript/src/skia/web/JsiSkMatrix.d.ts +1 -0
  38. package/lib/typescript/src/views/SkiaView.web.d.ts +2 -2
  39. package/lib/typescript/src/web/LoadSkiaWeb.d.ts +6 -0
  40. package/lib/typescript/src/web/WithSkiaWeb.d.ts +10 -0
  41. package/lib/typescript/src/web/index.d.ts +2 -5
  42. package/package.json +5 -1
  43. package/scripts/setup-canvaskit.js +74 -0
  44. package/src/renderer/components/Group.tsx +1 -1
  45. package/src/renderer/processors/Transform.ts +7 -10
  46. package/src/skia/types/Matrix.ts +18 -2
  47. package/src/skia/web/JsiSkMatrix.ts +4 -0
  48. package/src/views/SkiaView.web.tsx +8 -8
  49. package/src/web/LoadSkiaWeb.tsx +18 -0
  50. package/src/web/WithSkiaWeb.tsx +32 -0
  51. package/src/web/index.ts +2 -15
@@ -52,7 +52,7 @@ export class SkiaView extends React.Component<
52
52
  // Get canvas and repaint
53
53
  if (this._surface) {
54
54
  this._canvas = this._surface.getCanvas();
55
- this.requestRedraw();
55
+ this.redraw();
56
56
  }
57
57
  }
58
58
  }
@@ -61,7 +61,7 @@ export class SkiaView extends React.Component<
61
61
 
62
62
  componentDidMount() {
63
63
  // Start render loop
64
- this.redraw();
64
+ this.tick();
65
65
  }
66
66
 
67
67
  componentWillUnmount() {
@@ -83,7 +83,7 @@ export class SkiaView extends React.Component<
83
83
  /**
84
84
  * Sends a redraw request to the native SkiaView.
85
85
  */
86
- private redraw() {
86
+ private tick() {
87
87
  if (this._mode === "continuous" || this._redrawRequests > 0) {
88
88
  this._redrawRequests = 0;
89
89
  if (
@@ -106,11 +106,11 @@ export class SkiaView extends React.Component<
106
106
  }
107
107
  // Always request a new redraw as long as we're not unmounted
108
108
  if (!this._unmounted) {
109
- requestAnimationFrame(this.redraw.bind(this));
109
+ requestAnimationFrame(this.tick.bind(this));
110
110
  }
111
111
  }
112
112
 
113
- public requestRedraw() {
113
+ public redraw() {
114
114
  this._redrawRequests++;
115
115
  }
116
116
 
@@ -125,7 +125,7 @@ export class SkiaView extends React.Component<
125
125
  */
126
126
  public setDrawMode(mode: DrawMode) {
127
127
  this._mode = mode;
128
- this.redraw();
128
+ this.tick();
129
129
  }
130
130
 
131
131
  /**
@@ -140,7 +140,7 @@ export class SkiaView extends React.Component<
140
140
  _values.forEach((v) => {
141
141
  this._unsubscriptions.push(
142
142
  v.addListener(() => {
143
- this.requestRedraw();
143
+ this.redraw();
144
144
  })
145
145
  );
146
146
  });
@@ -155,7 +155,7 @@ export class SkiaView extends React.Component<
155
155
  type: touchType,
156
156
  timestamp: Date.now(),
157
157
  });
158
- this.requestRedraw();
158
+ this.redraw();
159
159
  }
160
160
 
161
161
  handleTouchStart(evt: PointerEvent) {
@@ -0,0 +1,18 @@
1
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
+ // @ts-expect-error
3
+ import CanvasKitInit from "canvaskit-wasm/bin/full/canvaskit";
4
+ import type { CanvasKit as CanvasKitType } from "canvaskit-wasm";
5
+
6
+ declare global {
7
+ var CanvasKit: CanvasKitType;
8
+ }
9
+
10
+ export const LoadSkiaWeb = async () => {
11
+ const CanvasKit = await CanvasKitInit();
12
+ // The CanvasKit API is stored on the global object and used
13
+ // to create the JsiSKApi in the Skia.web.ts file.
14
+ global.CanvasKit = CanvasKit;
15
+ };
16
+
17
+ // We keep this function for backward compatibility
18
+ export const LoadSkia = LoadSkiaWeb;
@@ -0,0 +1,32 @@
1
+ import type { ComponentProps, ComponentType } from "react";
2
+ import React, { useMemo, lazy, Suspense } from "react";
3
+ import { Platform } from "react-native";
4
+
5
+ import { LoadSkiaWeb } from "./LoadSkiaWeb";
6
+
7
+ interface WithSkiaProps {
8
+ fallback: ComponentProps<typeof Suspense>["fallback"];
9
+ getComponent: () => Promise<{ default: ComponentType }>;
10
+ }
11
+
12
+ export const WithSkiaWeb = ({ getComponent, fallback }: WithSkiaProps) => {
13
+ const Inner = useMemo(
14
+ () =>
15
+ lazy(async () => {
16
+ if (Platform.OS === "web") {
17
+ await LoadSkiaWeb();
18
+ } else {
19
+ console.warn(
20
+ "<WithSkiaWeb /> is only necessary on web. Consider not using on native."
21
+ );
22
+ }
23
+ return getComponent();
24
+ }),
25
+ [getComponent]
26
+ );
27
+ return (
28
+ <Suspense fallback={fallback}>
29
+ <Inner />
30
+ </Suspense>
31
+ );
32
+ };
package/src/web/index.ts CHANGED
@@ -1,15 +1,2 @@
1
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2
- // @ts-expect-error
3
- import CanvasKitInit from "canvaskit-wasm/bin/full/canvaskit";
4
- import type { CanvasKit as CanvasKitType } from "canvaskit-wasm";
5
-
6
- declare global {
7
- var CanvasKit: CanvasKitType;
8
- }
9
-
10
- export const LoadSkia = async () => {
11
- const CanvasKit = await CanvasKitInit();
12
- // The CanvasKit API is stored on the global object and used
13
- // to create the JsiSKApi in the Skia.web.ts file.
14
- global.CanvasKit = CanvasKit;
15
- };
1
+ export * from "./LoadSkiaWeb";
2
+ export * from "./WithSkiaWeb";