@shopify/react-native-skia 1.5.7 → 1.5.9

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 (112) hide show
  1. package/android/CMakeLists.txt +1 -2
  2. package/android/cpp/jni/JniPlatformContext.cpp +0 -49
  3. package/android/cpp/jni/include/JniPlatformContext.h +1 -17
  4. package/android/cpp/jni/include/JniSkiaBaseView.h +0 -2
  5. package/android/cpp/jni/include/JniSkiaDomView.h +0 -3
  6. package/android/cpp/jni/include/JniSkiaManager.h +0 -2
  7. package/android/cpp/jni/include/JniSkiaPictureView.h +0 -3
  8. package/android/cpp/rnskia-android/MainThreadDispatcher.h +69 -0
  9. package/android/cpp/rnskia-android/OpenGLContext.h +3 -1
  10. package/android/cpp/rnskia-android/OpenGLWindowContext.cpp +1 -1
  11. package/android/cpp/rnskia-android/OpenGLWindowContext.h +4 -5
  12. package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +10 -11
  13. package/android/cpp/rnskia-android/RNSkAndroidView.h +3 -13
  14. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +0 -1
  15. package/android/src/main/java/com/shopify/reactnative/skia/PlatformContext.java +0 -85
  16. package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaModule.java +1 -21
  17. package/android/src/main/java/com/shopify/reactnative/skia/SkiaManager.java +0 -4
  18. package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerDelegate.java +1 -4
  19. package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerInterface.java +0 -1
  20. package/cpp/api/JsiSkImage.h +20 -4
  21. package/cpp/rnskia/RNSkManager.cpp +2 -3
  22. package/cpp/rnskia/RNSkPlatformContext.h +6 -114
  23. package/cpp/rnskia/RNSkView.h +21 -77
  24. package/ios/RNSkia-iOS/MetalContext.h +2 -0
  25. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +4 -10
  26. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +6 -16
  27. package/ios/RNSkia-iOS/SkiaDomView.mm +0 -1
  28. package/ios/RNSkia-iOS/SkiaDomViewManager.mm +0 -6
  29. package/ios/RNSkia-iOS/SkiaPictureView.mm +0 -1
  30. package/ios/RNSkia-iOS/SkiaPictureViewManager.mm +0 -6
  31. package/ios/RNSkia-iOS/SkiaUIView.h +0 -1
  32. package/ios/RNSkia-iOS/SkiaUIView.mm +1 -14
  33. package/lib/commonjs/renderer/Canvas.d.ts +1 -0
  34. package/lib/commonjs/renderer/Canvas.js +5 -5
  35. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  36. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.d.ts +0 -1
  37. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  38. package/lib/commonjs/views/SkiaBaseWebView.d.ts +1 -12
  39. package/lib/commonjs/views/SkiaBaseWebView.js +1 -19
  40. package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
  41. package/lib/commonjs/views/SkiaDomView.d.ts +8 -1
  42. package/lib/commonjs/views/SkiaDomView.js +14 -2
  43. package/lib/commonjs/views/SkiaDomView.js.map +1 -1
  44. package/lib/commonjs/views/SkiaDomView.web.d.ts +3 -3
  45. package/lib/commonjs/views/SkiaDomView.web.js.map +1 -1
  46. package/lib/commonjs/views/SkiaJSDomView.d.ts +12 -6
  47. package/lib/commonjs/views/SkiaJSDomView.js +12 -3
  48. package/lib/commonjs/views/SkiaJSDomView.js.map +1 -1
  49. package/lib/commonjs/views/SkiaPictureView.d.ts +8 -1
  50. package/lib/commonjs/views/SkiaPictureView.js +14 -1
  51. package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
  52. package/lib/commonjs/views/SkiaPictureView.web.d.ts +3 -3
  53. package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
  54. package/lib/commonjs/views/types.d.ts +2 -12
  55. package/lib/commonjs/views/types.js.map +1 -1
  56. package/lib/module/renderer/Canvas.d.ts +1 -0
  57. package/lib/module/renderer/Canvas.js +5 -5
  58. package/lib/module/renderer/Canvas.js.map +1 -1
  59. package/lib/module/specs/SkiaPictureViewNativeComponent.d.ts +0 -1
  60. package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  61. package/lib/module/views/SkiaBaseWebView.d.ts +1 -12
  62. package/lib/module/views/SkiaBaseWebView.js +1 -19
  63. package/lib/module/views/SkiaBaseWebView.js.map +1 -1
  64. package/lib/module/views/SkiaDomView.d.ts +8 -1
  65. package/lib/module/views/SkiaDomView.js +14 -2
  66. package/lib/module/views/SkiaDomView.js.map +1 -1
  67. package/lib/module/views/SkiaDomView.web.d.ts +3 -3
  68. package/lib/module/views/SkiaDomView.web.js.map +1 -1
  69. package/lib/module/views/SkiaJSDomView.d.ts +12 -6
  70. package/lib/module/views/SkiaJSDomView.js +12 -3
  71. package/lib/module/views/SkiaJSDomView.js.map +1 -1
  72. package/lib/module/views/SkiaPictureView.d.ts +8 -1
  73. package/lib/module/views/SkiaPictureView.js +14 -1
  74. package/lib/module/views/SkiaPictureView.js.map +1 -1
  75. package/lib/module/views/SkiaPictureView.web.d.ts +3 -3
  76. package/lib/module/views/SkiaPictureView.web.js.map +1 -1
  77. package/lib/module/views/types.d.ts +2 -12
  78. package/lib/module/views/types.js.map +1 -1
  79. package/lib/typescript/lib/commonjs/views/SkiaBaseWebView.d.ts +0 -11
  80. package/lib/typescript/lib/commonjs/views/SkiaDomView.d.ts +3 -0
  81. package/lib/typescript/lib/commonjs/views/SkiaJSDomView.d.ts +2 -0
  82. package/lib/typescript/lib/commonjs/views/SkiaPictureView.d.ts +3 -0
  83. package/lib/typescript/lib/module/views/SkiaBaseWebView.d.ts +0 -11
  84. package/lib/typescript/lib/module/views/SkiaDomView.d.ts +3 -0
  85. package/lib/typescript/lib/module/views/SkiaJSDomView.d.ts +2 -0
  86. package/lib/typescript/lib/module/views/SkiaPictureView.d.ts +3 -0
  87. package/lib/typescript/src/renderer/Canvas.d.ts +1 -0
  88. package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.d.ts +0 -1
  89. package/lib/typescript/src/views/SkiaBaseWebView.d.ts +1 -12
  90. package/lib/typescript/src/views/SkiaDomView.d.ts +8 -1
  91. package/lib/typescript/src/views/SkiaDomView.web.d.ts +3 -3
  92. package/lib/typescript/src/views/SkiaJSDomView.d.ts +12 -6
  93. package/lib/typescript/src/views/SkiaPictureView.d.ts +8 -1
  94. package/lib/typescript/src/views/SkiaPictureView.web.d.ts +3 -3
  95. package/lib/typescript/src/views/types.d.ts +2 -12
  96. package/package.json +1 -1
  97. package/react-native-skia.podspec +2 -2
  98. package/src/renderer/Canvas.tsx +4 -3
  99. package/src/renderer/__tests__/e2e/Image.spec.tsx +2 -64
  100. package/src/skia/__tests__/assets/oslo-mini.jpg +0 -0
  101. package/src/specs/SkiaPictureViewNativeComponent.ts +0 -1
  102. package/src/views/SkiaBaseWebView.tsx +3 -19
  103. package/src/views/SkiaDomView.tsx +23 -4
  104. package/src/views/SkiaDomView.web.tsx +3 -3
  105. package/src/views/SkiaJSDomView.tsx +30 -9
  106. package/src/views/SkiaPictureView.tsx +22 -2
  107. package/src/views/SkiaPictureView.web.tsx +3 -3
  108. package/src/views/types.ts +2 -13
  109. package/cpp/rnskia/RNSkDispatchQueue.cpp +0 -73
  110. package/cpp/rnskia/RNSkDispatchQueue.h +0 -49
  111. package/ios/RNSkia-iOS/DisplayLink.h +0 -17
  112. package/ios/RNSkia-iOS/DisplayLink.mm +0 -41
@@ -3,7 +3,6 @@ declare const SkiaBaseWebView_base: any;
3
3
  export class SkiaBaseWebView extends SkiaBaseWebView_base {
4
4
  [x: string]: any;
5
5
  constructor(props: any);
6
- _mode: any;
7
6
  unsubscribeAll(): void;
8
7
  _unsubscriptions: any[] | undefined;
9
8
  onLayoutEvent(evt: any): void;
@@ -34,16 +33,6 @@ export class SkiaBaseWebView extends SkiaBaseWebView_base {
34
33
  _redrawRequests: number | undefined;
35
34
  requestId: number | undefined;
36
35
  redraw(): void;
37
- /**
38
- * Updates the drawing mode for the skia view. This is the same
39
- * as declaratively setting the mode property on the SkiaView.
40
- * There are two drawing modes, "continuous" and "default",
41
- * where the continuous mode will continuously redraw the view and
42
- * the default mode will only redraw when any of the regular react
43
- * properties are changed like size and margins.
44
- * @param mode Drawing mode to use.
45
- */
46
- setDrawMode(mode: any): void;
47
36
  render(): any;
48
37
  }
49
38
  import _JsiSkSurface = require("../skia/web/JsiSkSurface");
@@ -6,6 +6,9 @@ export class SkiaDomView extends SkiaDomView_base {
6
6
  _nativeId: number;
7
7
  get nativeId(): number;
8
8
  componentDidUpdate(prevProps: any): void;
9
+ componentWillUnmount(): void;
10
+ tick(): void;
11
+ requestId: number | undefined;
9
12
  /**
10
13
  * Creates a snapshot from the canvas in the surface
11
14
  * @param rect Rect to use as bounds. Optional.
@@ -4,6 +4,8 @@ export class SkiaJSDomView extends SkiaJSDomView_base {
4
4
  [x: string]: any;
5
5
  constructor(props: any);
6
6
  _nativeId: number;
7
+ tick(): void;
8
+ requestId: number | undefined;
7
9
  get nativeId(): number;
8
10
  componentDidUpdate(prevProps: any): void;
9
11
  /**
@@ -6,6 +6,9 @@ export class SkiaPictureView extends SkiaPictureView_base {
6
6
  _nativeId: number;
7
7
  get nativeId(): number;
8
8
  componentDidUpdate(prevProps: any): void;
9
+ componentWillUnmount(): void;
10
+ tick(): void;
11
+ requestId: number | undefined;
9
12
  /**
10
13
  * Creates a snapshot from the canvas in the surface
11
14
  * @param rect Rect to use as bounds. Optional.
@@ -1,6 +1,5 @@
1
1
  export class SkiaBaseWebView extends React.Component<any, any, any> {
2
2
  constructor(props: any);
3
- _mode: any;
4
3
  unsubscribeAll(): void;
5
4
  _unsubscriptions: any[] | undefined;
6
5
  onLayoutEvent(evt: any): void;
@@ -31,16 +30,6 @@ export class SkiaBaseWebView extends React.Component<any, any, any> {
31
30
  _redrawRequests: number | undefined;
32
31
  requestId: number | undefined;
33
32
  redraw(): void;
34
- /**
35
- * Updates the drawing mode for the skia view. This is the same
36
- * as declaratively setting the mode property on the SkiaView.
37
- * There are two drawing modes, "continuous" and "default",
38
- * where the continuous mode will continuously redraw the view and
39
- * the default mode will only redraw when any of the regular react
40
- * properties are changed like size and margins.
41
- * @param mode Drawing mode to use.
42
- */
43
- setDrawMode(mode: any): void;
44
33
  render(): React.CElement<import("react-native").ViewProps, import("react-native").View>;
45
34
  }
46
35
  import React from "react";
@@ -3,6 +3,9 @@ export class SkiaDomView extends React.Component<any, any, any> {
3
3
  _nativeId: number;
4
4
  get nativeId(): number;
5
5
  componentDidUpdate(prevProps: any): void;
6
+ componentWillUnmount(): void;
7
+ tick(): void;
8
+ requestId: number | undefined;
6
9
  /**
7
10
  * Creates a snapshot from the canvas in the surface
8
11
  * @param rect Rect to use as bounds. Optional.
@@ -1,6 +1,8 @@
1
1
  export class SkiaJSDomView extends React.Component<any, any, any> {
2
2
  constructor(props: any);
3
3
  _nativeId: number;
4
+ tick(): void;
5
+ requestId: number | undefined;
4
6
  get nativeId(): number;
5
7
  componentDidUpdate(prevProps: any): void;
6
8
  /**
@@ -3,6 +3,9 @@ export class SkiaPictureView extends React.Component<any, any, any> {
3
3
  _nativeId: number;
4
4
  get nativeId(): number;
5
5
  componentDidUpdate(prevProps: any): void;
6
+ componentWillUnmount(): void;
7
+ tick(): void;
8
+ requestId: number | undefined;
6
9
  /**
7
10
  * Creates a snapshot from the canvas in the surface
8
11
  * @param rect Rect to use as bounds. Optional.
@@ -6,5 +6,6 @@ export declare const useCanvasRef: () => React.RefObject<SkiaDomView>;
6
6
  export interface CanvasProps extends SkiaBaseViewProps {
7
7
  ref?: RefObject<SkiaDomView>;
8
8
  children: ReactNode;
9
+ mode?: "default" | "continuous";
9
10
  }
10
11
  export declare const Canvas: FunctionComponent<CanvasProps & React.RefAttributes<SkiaDomView>>;
@@ -1,6 +1,5 @@
1
1
  import type { ViewProps } from "react-native";
2
2
  export interface NativeProps extends ViewProps {
3
- mode: string;
4
3
  debug?: boolean;
5
4
  }
6
5
  declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<NativeProps>;
@@ -1,13 +1,12 @@
1
1
  import React from "react";
2
2
  import type { SkRect, SkCanvas } from "../skia/types";
3
- import type { DrawMode, SkiaBaseViewProps } from "./types";
3
+ import type { SkiaBaseViewProps } from "./types";
4
4
  export declare abstract class SkiaBaseWebView<TProps extends SkiaBaseViewProps> extends React.Component<TProps> {
5
5
  constructor(props: TProps);
6
6
  private _surface;
7
7
  private _unsubscriptions;
8
8
  private _canvas;
9
9
  private _canvasRef;
10
- private _mode;
11
10
  private _redrawRequests;
12
11
  private requestId;
13
12
  protected width: number;
@@ -36,16 +35,6 @@ export declare abstract class SkiaBaseWebView<TProps extends SkiaBaseViewProps>
36
35
  */
37
36
  private tick;
38
37
  redraw(): void;
39
- /**
40
- * Updates the drawing mode for the skia view. This is the same
41
- * as declaratively setting the mode property on the SkiaView.
42
- * There are two drawing modes, "continuous" and "default",
43
- * where the continuous mode will continuously redraw the view and
44
- * the default mode will only redraw when any of the regular react
45
- * properties are changed like size and margins.
46
- * @param mode Drawing mode to use.
47
- */
48
- setDrawMode(mode: DrawMode): void;
49
38
  private onLayout;
50
39
  render(): React.JSX.Element;
51
40
  }
@@ -1,11 +1,17 @@
1
1
  import React from "react";
2
2
  import type { SkRect } from "../skia/types";
3
- import type { SkiaDomViewProps } from "./types";
3
+ import type { SkiaDomViewNativeProps } from "./types";
4
+ interface SkiaDomViewProps extends SkiaDomViewNativeProps {
5
+ mode?: "default" | "continuous";
6
+ }
4
7
  export declare class SkiaDomView extends React.Component<SkiaDomViewProps> {
5
8
  constructor(props: SkiaDomViewProps);
6
9
  private _nativeId;
10
+ private requestId;
7
11
  get nativeId(): number;
8
12
  componentDidUpdate(prevProps: SkiaDomViewProps): void;
13
+ componentWillUnmount(): void;
14
+ private tick;
9
15
  /**
10
16
  * Creates a snapshot from the canvas in the surface
11
17
  * @param rect Rect to use as bounds. Optional.
@@ -24,3 +30,4 @@ export declare class SkiaDomView extends React.Component<SkiaDomViewProps> {
24
30
  redraw(): void;
25
31
  render(): React.JSX.Element;
26
32
  }
33
+ export {};
@@ -1,7 +1,7 @@
1
1
  import type { SkCanvas } from "../skia/types";
2
2
  import { SkiaBaseWebView } from "./SkiaBaseWebView";
3
- import type { SkiaDomViewProps } from "./types";
4
- export declare class SkiaDomView extends SkiaBaseWebView<SkiaDomViewProps> {
5
- constructor(props: SkiaDomViewProps);
3
+ import type { SkiaDomViewNativeProps } from "./types";
4
+ export declare class SkiaDomView extends SkiaBaseWebView<SkiaDomViewNativeProps> {
5
+ constructor(props: SkiaDomViewNativeProps);
6
6
  protected renderInCanvas(canvas: SkCanvas): void;
7
7
  }
@@ -1,13 +1,18 @@
1
1
  import React from "react";
2
2
  import type { Skia, SkRect } from "../skia/types";
3
- import type { SkiaDomViewProps } from "./types";
4
- export declare class SkiaJSDomView extends React.Component<SkiaDomViewProps & {
3
+ import type { SkiaDomViewNativeProps } from "./types";
4
+ interface SkiaDomViewProps extends SkiaDomViewNativeProps {
5
+ mode?: "default" | "continuous";
6
+ }
7
+ type SkiaJSDomViewProps = SkiaDomViewProps & {
5
8
  Skia: Skia;
6
- }> {
7
- constructor(props: SkiaDomViewProps & {
8
- Skia: Skia;
9
- });
9
+ mode?: "default" | "continuous";
10
+ };
11
+ export declare class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {
12
+ constructor(props: SkiaJSDomViewProps);
10
13
  private _nativeId;
14
+ private requestId;
15
+ private tick;
11
16
  get nativeId(): number;
12
17
  componentDidUpdate(prevProps: SkiaDomViewProps & {
13
18
  Skia: Skia;
@@ -29,3 +34,4 @@ export declare class SkiaJSDomView extends React.Component<SkiaDomViewProps & {
29
34
  componentWillUnmount(): void;
30
35
  render(): React.JSX.Element;
31
36
  }
37
+ export {};
@@ -1,11 +1,17 @@
1
1
  import React from "react";
2
2
  import type { SkRect } from "../skia/types";
3
- import type { SkiaPictureViewProps } from "./types";
3
+ import type { SkiaPictureViewNativeProps } from "./types";
4
+ interface SkiaPictureViewProps extends SkiaPictureViewNativeProps {
5
+ mode?: "default" | "continuous";
6
+ }
4
7
  export declare class SkiaPictureView extends React.Component<SkiaPictureViewProps> {
8
+ private requestId;
5
9
  constructor(props: SkiaPictureViewProps);
6
10
  private _nativeId;
7
11
  get nativeId(): number;
8
12
  componentDidUpdate(prevProps: SkiaPictureViewProps): void;
13
+ componentWillUnmount(): void;
14
+ private tick;
9
15
  /**
10
16
  * Creates a snapshot from the canvas in the surface
11
17
  * @param rect Rect to use as bounds. Optional.
@@ -18,3 +24,4 @@ export declare class SkiaPictureView extends React.Component<SkiaPictureViewProp
18
24
  redraw(): void;
19
25
  render(): React.JSX.Element;
20
26
  }
27
+ export {};
@@ -1,7 +1,7 @@
1
1
  import type { SkCanvas } from "../skia/types";
2
- import type { SkiaPictureViewProps } from "./types";
2
+ import type { SkiaPictureViewNativeProps } from "./types";
3
3
  import { SkiaBaseWebView } from "./SkiaBaseWebView";
4
- export declare class SkiaPictureView extends SkiaBaseWebView<SkiaPictureViewProps> {
5
- constructor(props: SkiaPictureViewProps);
4
+ export declare class SkiaPictureView extends SkiaBaseWebView<SkiaPictureViewNativeProps> {
5
+ constructor(props: SkiaPictureViewNativeProps);
6
6
  protected renderInCanvas(canvas: SkCanvas): void;
7
7
  }
@@ -2,9 +2,7 @@ import type { ViewProps } from "react-native";
2
2
  import type { GroupProps, RenderNode } from "../dom/types";
3
3
  import type { SkImage, SkPicture, SkRect, SkSize } from "../skia/types";
4
4
  import type { SharedValueType } from "../renderer/processors/Animations/Animations";
5
- export type DrawMode = "continuous" | "default";
6
5
  export type NativeSkiaViewProps = ViewProps & {
7
- mode?: DrawMode;
8
6
  debug?: boolean;
9
7
  };
10
8
  export interface DrawingInfo {
@@ -19,14 +17,6 @@ export interface ISkiaViewApi {
19
17
  makeImageSnapshotAsync: (nativeId: number, rect?: SkRect) => Promise<SkImage>;
20
18
  }
21
19
  export interface SkiaBaseViewProps extends ViewProps {
22
- /**
23
- * Sets the drawing mode for the skia view. There are two drawing
24
- * modes, "continuous" and "default", where the continuous mode will
25
- * continuously redraw the view, and the default mode will only
26
- * redraw when any of the regular react properties are changed like
27
- * sizes and margins.
28
- */
29
- mode?: DrawMode;
30
20
  /**
31
21
  * When set to true the view will display information about the
32
22
  * average time it takes to render.
@@ -38,9 +28,9 @@ export interface SkiaBaseViewProps extends ViewProps {
38
28
  */
39
29
  onSize?: SharedValueType<SkSize>;
40
30
  }
41
- export interface SkiaPictureViewProps extends SkiaBaseViewProps {
31
+ export interface SkiaPictureViewNativeProps extends SkiaBaseViewProps {
42
32
  picture?: SkPicture;
43
33
  }
44
- export interface SkiaDomViewProps extends SkiaBaseViewProps {
34
+ export interface SkiaDomViewNativeProps extends SkiaBaseViewProps {
45
35
  root?: RenderNode<GroupProps>;
46
36
  }
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "setup-skia-web": "./scripts/setup-canvaskit.js"
8
8
  },
9
9
  "title": "React Native Skia",
10
- "version": "1.5.7",
10
+ "version": "1.5.9",
11
11
  "description": "High-performance React Native Graphics using Skia",
12
12
  "main": "lib/module/index.js",
13
13
  "react-native": "src/index.ts",
@@ -9,8 +9,8 @@ use_graphite = ENV['SK_GRAPHITE'] == '1'
9
9
 
10
10
  # Set preprocessor definitions based on GRAPHITE flag
11
11
  preprocessor_defs = use_graphite ?
12
- '$(inherited) SK_GRAPHITE=1' :
13
- '$(inherited) SK_METAL=1 SK_GANESH=1'
12
+ '$(inherited) SK_GRAPHITE=1 SK_IMAGE_READ_PIXELS_DISABLE_LEGACY_API=1' :
13
+ '$(inherited) SK_METAL=1 SK_GANESH=1 SK_IMAGE_READ_PIXELS_DISABLE_LEGACY_API=1'
14
14
 
15
15
  # Define base frameworks
16
16
  base_frameworks = ['libs/ios/libskia.xcframework',
@@ -27,6 +27,7 @@ export const useCanvasRef = () => useRef<SkiaDomView>(null);
27
27
  export interface CanvasProps extends SkiaBaseViewProps {
28
28
  ref?: RefObject<SkiaDomView>;
29
29
  children: ReactNode;
30
+ mode?: "default" | "continuous";
30
31
  }
31
32
 
32
33
  const useOnSizeEvent = (
@@ -54,7 +55,7 @@ export const Canvas = forwardRef<SkiaDomView, CanvasProps>(
54
55
  children,
55
56
  style,
56
57
  debug,
57
- mode,
58
+ mode = "default",
58
59
  onSize: _onSize,
59
60
  onLayout: _onLayout,
60
61
  ...props
@@ -95,8 +96,8 @@ export const Canvas = forwardRef<SkiaDomView, CanvasProps>(
95
96
  style={style}
96
97
  root={root.dom}
97
98
  onLayout={onLayout}
98
- mode={mode}
99
99
  debug={debug}
100
+ mode={mode}
100
101
  {...props}
101
102
  />
102
103
  );
@@ -104,12 +105,12 @@ export const Canvas = forwardRef<SkiaDomView, CanvasProps>(
104
105
  return (
105
106
  <SkiaJSDomView
106
107
  Skia={Skia}
108
+ mode={mode}
107
109
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
110
  ref={ref as any}
109
111
  style={style}
110
112
  root={root.dom}
111
113
  onLayout={onLayout}
112
- mode={mode}
113
114
  debug={debug}
114
115
  {...props}
115
116
  />
@@ -43,51 +43,17 @@ describe("Image loading from bundles", () => {
43
43
  },
44
44
  {
45
45
  data: Array.from(
46
- loadImage("skia/__tests__/assets/oslo.jpg").encodeToBytes()
46
+ loadImage("skia/__tests__/assets/oslo-mini.jpg").encodeToBytes()
47
47
  ),
48
48
  }
49
49
  );
50
50
  expect(pixels).toBeDefined();
51
51
  expect(pixels).toEqual([
52
- 170, 186, 199, 255, 170, 186, 199, 255, 170, 186, 199, 255, 170, 186, 199,
52
+ 171, 188, 198, 255, 171, 188, 198, 255, 171, 188, 198, 255, 171, 188, 198,
53
53
  255,
54
54
  ]);
55
55
  });
56
56
 
57
- // it("should read pixels from an image using a preallocated buffer", async () => {
58
- // const pixels = await surface.eval(
59
- // (Skia, { colorType, alphaType, data }) => {
60
- // const image = Skia.Image.MakeImageFromEncoded(
61
- // Skia.Data.fromBytes(new Uint8Array(data))
62
- // )!;
63
- // const result = new Uint8Array(16);
64
- // image.readPixels(
65
- // 0,
66
- // 0,
67
- // {
68
- // width: 2,
69
- // height: 2,
70
- // colorType,
71
- // alphaType,
72
- // },
73
- // result
74
- // );
75
- // return result;
76
- // },
77
- // {
78
- // colorType: ColorType.RGBA_8888,
79
- // alphaType: AlphaType.Unpremul,
80
- // data: Array.from(
81
- // loadImage("skia/__tests__/assets/oslo.jpg").encodeToBytes()
82
- // ),
83
- // }
84
- // );
85
- // expect(pixels).toBeDefined();
86
- // expect(Array.from(pixels!)).toEqual([
87
- // 170, 186, 199, 255, 170, 186, 199, 255, 170, 186, 199, 255, 170, 186, 199,
88
- // 255,
89
- // ]);
90
- // });
91
57
  it("should read pixels from a canvas", async () => {
92
58
  const pixels = await surface.eval(
93
59
  (Skia, { colorType, alphaType }) => {
@@ -108,32 +74,4 @@ describe("Image loading from bundles", () => {
108
74
  expect(pixels).toBeDefined();
109
75
  expect(Array.from(pixels!)).toEqual([255, 0, 0, 255]);
110
76
  });
111
- // it("should read pixels from a canvas using a preallocated buffer", async () => {
112
- // const pixels = await surface.eval(
113
- // (Skia, { colorType, alphaType }) => {
114
- // const offscreen = Skia.Surface.MakeOffscreen(10, 10)!;
115
- // const canvas = offscreen.getCanvas();
116
- // canvas.drawColor(Skia.Color("red"));
117
- // const result = new Uint8Array(4);
118
- // canvas.readPixels(0, 0, {
119
- // width: 1,
120
- // height: 1,
121
- // colorType,
122
- // alphaType,
123
- // }, result);
124
- // },
125
- // { colorType: ColorType.RGBA_8888, alphaType: AlphaType.Unpremul }
126
- // );
127
- // expect(pixels).toBeDefined();
128
- // expect(Array.from(pixels!)).toEqual([255, 0, 0, 255]);
129
- // });
130
- // This test should only run on CI because it will trigger a redbox.
131
- // While this is fine on CI, it is undesirable on local dev.
132
- // it("should not crash with an invalid viewTag", async () => {
133
- // const result = await surface.eval((Skia) => {
134
- // Skia.Image.MakeImageFromViewTag(-1);
135
- // return true;
136
- // });
137
- // expect(result).toBe(true);
138
- // });
139
77
  });
@@ -2,7 +2,6 @@ import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNati
2
2
  import type { ViewProps } from "react-native";
3
3
 
4
4
  export interface NativeProps extends ViewProps {
5
- mode: string;
6
5
  debug?: boolean;
7
6
  }
8
7
 
@@ -6,7 +6,7 @@ import type { SkRect, SkCanvas } from "../skia/types";
6
6
  import { JsiSkSurface } from "../skia/web/JsiSkSurface";
7
7
  import { Platform } from "../Platform";
8
8
 
9
- import type { DrawMode, SkiaBaseViewProps } from "./types";
9
+ import type { SkiaBaseViewProps } from "./types";
10
10
 
11
11
  const pd = Platform.PixelRatio;
12
12
 
@@ -15,14 +15,12 @@ export abstract class SkiaBaseWebView<
15
15
  > extends React.Component<TProps> {
16
16
  constructor(props: TProps) {
17
17
  super(props);
18
- this._mode = props.mode ?? "default";
19
18
  }
20
19
 
21
20
  private _surface: JsiSkSurface | null = null;
22
21
  private _unsubscriptions: Array<() => void> = [];
23
22
  private _canvas: SkCanvas | null = null;
24
23
  private _canvasRef = React.createRef<HTMLCanvasElement>();
25
- private _mode: DrawMode;
26
24
  private _redrawRequests = 0;
27
25
  private requestId = 0;
28
26
 
@@ -106,7 +104,7 @@ export abstract class SkiaBaseWebView<
106
104
  * Sends a redraw request to the native SkiaView.
107
105
  */
108
106
  private tick() {
109
- if (this._mode === "continuous" || this._redrawRequests > 0) {
107
+ if (this._redrawRequests > 0) {
110
108
  this._redrawRequests = 0;
111
109
  if (this._canvas) {
112
110
  const canvas = this._canvas!;
@@ -125,24 +123,10 @@ export abstract class SkiaBaseWebView<
125
123
  this._redrawRequests++;
126
124
  }
127
125
 
128
- /**
129
- * Updates the drawing mode for the skia view. This is the same
130
- * as declaratively setting the mode property on the SkiaView.
131
- * There are two drawing modes, "continuous" and "default",
132
- * where the continuous mode will continuously redraw the view and
133
- * the default mode will only redraw when any of the regular react
134
- * properties are changed like size and margins.
135
- * @param mode Drawing mode to use.
136
- */
137
- public setDrawMode(mode: DrawMode) {
138
- this._mode = mode;
139
- this.tick();
140
- }
141
-
142
126
  private onLayout = this.onLayoutEvent.bind(this);
143
127
 
144
128
  render() {
145
- const { mode, debug = false, ...viewProps } = this.props;
129
+ const { debug = false, ...viewProps } = this.props;
146
130
  return (
147
131
  <Platform.View {...viewProps} onLayout={this.onLayout}>
148
132
  <canvas ref={this._canvasRef} style={{ display: "flex", flex: 1 }} />
@@ -6,15 +6,19 @@ import { Platform } from "../Platform";
6
6
  import SkiaDomViewNativeComponent from "../specs/SkiaDomViewNativeComponent";
7
7
 
8
8
  import { SkiaViewApi } from "./api";
9
- import type { SkiaDomViewProps } from "./types";
9
+ import type { SkiaDomViewNativeProps } from "./types";
10
10
  import { SkiaViewNativeId } from "./SkiaViewNativeId";
11
11
 
12
- const NativeSkiaDomView: HostComponent<SkiaDomViewProps> =
12
+ const NativeSkiaDomView: HostComponent<SkiaDomViewNativeProps> =
13
13
  Platform.OS !== "web"
14
14
  ? SkiaDomViewNativeComponent
15
15
  : // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
16
  (null as any);
17
17
 
18
+ interface SkiaDomViewProps extends SkiaDomViewNativeProps {
19
+ mode?: "default" | "continuous";
20
+ }
21
+
18
22
  export class SkiaDomView extends React.Component<SkiaDomViewProps> {
19
23
  constructor(props: SkiaDomViewProps) {
20
24
  super(props);
@@ -28,9 +32,11 @@ export class SkiaDomView extends React.Component<SkiaDomViewProps> {
28
32
  assertSkiaViewApi();
29
33
  SkiaViewApi.setJsiProperty(this._nativeId, "onSize", onSize);
30
34
  }
35
+ this.tick();
31
36
  }
32
37
 
33
38
  private _nativeId: number;
39
+ private requestId = 0;
34
40
 
35
41
  public get nativeId() {
36
42
  return this._nativeId;
@@ -46,6 +52,20 @@ export class SkiaDomView extends React.Component<SkiaDomViewProps> {
46
52
  assertSkiaViewApi();
47
53
  SkiaViewApi.setJsiProperty(this._nativeId, "onSize", onSize);
48
54
  }
55
+ this.tick();
56
+ }
57
+
58
+ componentWillUnmount(): void {
59
+ if (this.requestId) {
60
+ cancelAnimationFrame(this.requestId);
61
+ }
62
+ }
63
+
64
+ private tick() {
65
+ this.redraw();
66
+ if (this.props.mode === "continuous") {
67
+ this.requestId = requestAnimationFrame(this.tick.bind(this));
68
+ }
49
69
  }
50
70
 
51
71
  /**
@@ -77,12 +97,11 @@ export class SkiaDomView extends React.Component<SkiaDomViewProps> {
77
97
  }
78
98
 
79
99
  render() {
80
- const { mode, debug = false, ...viewProps } = this.props;
100
+ const { debug = false, ...viewProps } = this.props;
81
101
  return (
82
102
  <NativeSkiaDomView
83
103
  collapsable={false}
84
104
  nativeID={`${this._nativeId}`}
85
- mode={mode}
86
105
  debug={debug}
87
106
  {...viewProps}
88
107
  />
@@ -3,10 +3,10 @@ import type { SkCanvas } from "../skia/types";
3
3
  import { JsiDrawingContext } from "../dom/types/DrawingContext";
4
4
 
5
5
  import { SkiaBaseWebView } from "./SkiaBaseWebView";
6
- import type { SkiaDomViewProps } from "./types";
6
+ import type { SkiaDomViewNativeProps } from "./types";
7
7
 
8
- export class SkiaDomView extends SkiaBaseWebView<SkiaDomViewProps> {
9
- constructor(props: SkiaDomViewProps) {
8
+ export class SkiaDomView extends SkiaBaseWebView<SkiaDomViewNativeProps> {
9
+ constructor(props: SkiaDomViewNativeProps) {
10
10
  super(props);
11
11
  }
12
12