@shopify/react-native-skia 1.5.8 → 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.
- package/android/CMakeLists.txt +0 -1
- package/android/cpp/jni/JniPlatformContext.cpp +0 -49
- package/android/cpp/jni/include/JniPlatformContext.h +1 -17
- package/android/cpp/jni/include/JniSkiaBaseView.h +0 -2
- package/android/cpp/jni/include/JniSkiaDomView.h +0 -3
- package/android/cpp/jni/include/JniSkiaManager.h +0 -2
- package/android/cpp/jni/include/JniSkiaPictureView.h +0 -3
- package/android/cpp/rnskia-android/MainThreadDispatcher.h +69 -0
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +4 -11
- package/android/cpp/rnskia-android/RNSkAndroidView.h +3 -13
- package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +0 -1
- package/android/src/main/java/com/shopify/reactnative/skia/PlatformContext.java +0 -85
- package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaModule.java +1 -21
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaManager.java +0 -4
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerDelegate.java +1 -4
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerInterface.java +0 -1
- package/cpp/rnskia/RNSkManager.cpp +2 -3
- package/cpp/rnskia/RNSkPlatformContext.h +2 -114
- package/cpp/rnskia/RNSkView.h +16 -75
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +1 -10
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +0 -16
- package/ios/RNSkia-iOS/SkiaDomView.mm +0 -1
- package/ios/RNSkia-iOS/SkiaDomViewManager.mm +0 -6
- package/ios/RNSkia-iOS/SkiaPictureView.mm +0 -1
- package/ios/RNSkia-iOS/SkiaPictureViewManager.mm +0 -6
- package/ios/RNSkia-iOS/SkiaUIView.h +0 -1
- package/ios/RNSkia-iOS/SkiaUIView.mm +1 -14
- package/lib/commonjs/renderer/Canvas.d.ts +1 -0
- package/lib/commonjs/renderer/Canvas.js +5 -5
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.d.ts +0 -1
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +1 -1
- package/lib/commonjs/views/SkiaBaseWebView.d.ts +1 -12
- package/lib/commonjs/views/SkiaBaseWebView.js +1 -19
- package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
- package/lib/commonjs/views/SkiaDomView.d.ts +8 -1
- package/lib/commonjs/views/SkiaDomView.js +14 -2
- package/lib/commonjs/views/SkiaDomView.js.map +1 -1
- package/lib/commonjs/views/SkiaDomView.web.d.ts +3 -3
- package/lib/commonjs/views/SkiaDomView.web.js.map +1 -1
- package/lib/commonjs/views/SkiaJSDomView.d.ts +12 -6
- package/lib/commonjs/views/SkiaJSDomView.js +12 -3
- package/lib/commonjs/views/SkiaJSDomView.js.map +1 -1
- package/lib/commonjs/views/SkiaPictureView.d.ts +8 -1
- package/lib/commonjs/views/SkiaPictureView.js +14 -1
- package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
- package/lib/commonjs/views/SkiaPictureView.web.d.ts +3 -3
- package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
- package/lib/commonjs/views/types.d.ts +2 -12
- package/lib/commonjs/views/types.js.map +1 -1
- package/lib/module/renderer/Canvas.d.ts +1 -0
- package/lib/module/renderer/Canvas.js +5 -5
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/specs/SkiaPictureViewNativeComponent.d.ts +0 -1
- package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +1 -1
- package/lib/module/views/SkiaBaseWebView.d.ts +1 -12
- package/lib/module/views/SkiaBaseWebView.js +1 -19
- package/lib/module/views/SkiaBaseWebView.js.map +1 -1
- package/lib/module/views/SkiaDomView.d.ts +8 -1
- package/lib/module/views/SkiaDomView.js +14 -2
- package/lib/module/views/SkiaDomView.js.map +1 -1
- package/lib/module/views/SkiaDomView.web.d.ts +3 -3
- package/lib/module/views/SkiaDomView.web.js.map +1 -1
- package/lib/module/views/SkiaJSDomView.d.ts +12 -6
- package/lib/module/views/SkiaJSDomView.js +12 -3
- package/lib/module/views/SkiaJSDomView.js.map +1 -1
- package/lib/module/views/SkiaPictureView.d.ts +8 -1
- package/lib/module/views/SkiaPictureView.js +14 -1
- package/lib/module/views/SkiaPictureView.js.map +1 -1
- package/lib/module/views/SkiaPictureView.web.d.ts +3 -3
- package/lib/module/views/SkiaPictureView.web.js.map +1 -1
- package/lib/module/views/types.d.ts +2 -12
- package/lib/module/views/types.js.map +1 -1
- package/lib/typescript/lib/commonjs/views/SkiaBaseWebView.d.ts +0 -11
- package/lib/typescript/lib/commonjs/views/SkiaDomView.d.ts +3 -0
- package/lib/typescript/lib/commonjs/views/SkiaJSDomView.d.ts +2 -0
- package/lib/typescript/lib/commonjs/views/SkiaPictureView.d.ts +3 -0
- package/lib/typescript/lib/module/views/SkiaBaseWebView.d.ts +0 -11
- package/lib/typescript/lib/module/views/SkiaDomView.d.ts +3 -0
- package/lib/typescript/lib/module/views/SkiaJSDomView.d.ts +2 -0
- package/lib/typescript/lib/module/views/SkiaPictureView.d.ts +3 -0
- package/lib/typescript/src/renderer/Canvas.d.ts +1 -0
- package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.d.ts +0 -1
- package/lib/typescript/src/views/SkiaBaseWebView.d.ts +1 -12
- package/lib/typescript/src/views/SkiaDomView.d.ts +8 -1
- package/lib/typescript/src/views/SkiaDomView.web.d.ts +3 -3
- package/lib/typescript/src/views/SkiaJSDomView.d.ts +12 -6
- package/lib/typescript/src/views/SkiaPictureView.d.ts +8 -1
- package/lib/typescript/src/views/SkiaPictureView.web.d.ts +3 -3
- package/lib/typescript/src/views/types.d.ts +2 -12
- package/package.json +1 -1
- package/src/renderer/Canvas.tsx +4 -3
- package/src/specs/SkiaPictureViewNativeComponent.ts +0 -1
- package/src/views/SkiaBaseWebView.tsx +3 -19
- package/src/views/SkiaDomView.tsx +23 -4
- package/src/views/SkiaDomView.web.tsx +3 -3
- package/src/views/SkiaJSDomView.tsx +30 -9
- package/src/views/SkiaPictureView.tsx +22 -2
- package/src/views/SkiaPictureView.web.tsx +3 -3
- package/src/views/types.ts +2 -13
- package/cpp/rnskia/RNSkDispatchQueue.cpp +0 -73
- package/cpp/rnskia/RNSkDispatchQueue.h +0 -49
- package/ios/RNSkia-iOS/DisplayLink.h +0 -17
- package/ios/RNSkia-iOS/DisplayLink.mm +0 -41
|
@@ -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.
|
|
@@ -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,13 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { SkRect, SkCanvas } from "../skia/types";
|
|
3
|
-
import type {
|
|
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 {
|
|
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 {
|
|
4
|
-
export declare class SkiaDomView extends SkiaBaseWebView<
|
|
5
|
-
constructor(props:
|
|
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 {
|
|
4
|
-
|
|
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
|
-
|
|
8
|
-
|
|
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 {
|
|
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 {
|
|
2
|
+
import type { SkiaPictureViewNativeProps } from "./types";
|
|
3
3
|
import { SkiaBaseWebView } from "./SkiaBaseWebView";
|
|
4
|
-
export declare class SkiaPictureView extends SkiaBaseWebView<
|
|
5
|
-
constructor(props:
|
|
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
|
|
31
|
+
export interface SkiaPictureViewNativeProps extends SkiaBaseViewProps {
|
|
42
32
|
picture?: SkPicture;
|
|
43
33
|
}
|
|
44
|
-
export interface
|
|
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.
|
|
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",
|
package/src/renderer/Canvas.tsx
CHANGED
|
@@ -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
|
/>
|
|
@@ -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 {
|
|
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.
|
|
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 {
|
|
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 {
|
|
9
|
+
import type { SkiaDomViewNativeProps } from "./types";
|
|
10
10
|
import { SkiaViewNativeId } from "./SkiaViewNativeId";
|
|
11
11
|
|
|
12
|
-
const NativeSkiaDomView: HostComponent<
|
|
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 {
|
|
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 {
|
|
6
|
+
import type { SkiaDomViewNativeProps } from "./types";
|
|
7
7
|
|
|
8
|
-
export class SkiaDomView extends SkiaBaseWebView<
|
|
9
|
-
constructor(props:
|
|
8
|
+
export class SkiaDomView extends SkiaBaseWebView<SkiaDomViewNativeProps> {
|
|
9
|
+
constructor(props: SkiaDomViewNativeProps) {
|
|
10
10
|
super(props);
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -7,19 +7,29 @@ import SkiaPictureViewNativeComponent from "../specs/SkiaPictureViewNativeCompon
|
|
|
7
7
|
import { JsiDrawingContext } from "../dom/types";
|
|
8
8
|
|
|
9
9
|
import { SkiaViewApi } from "./api";
|
|
10
|
-
import type {
|
|
10
|
+
import type {
|
|
11
|
+
SkiaPictureViewNativeProps,
|
|
12
|
+
SkiaDomViewNativeProps,
|
|
13
|
+
} from "./types";
|
|
11
14
|
import { SkiaViewNativeId } from "./SkiaViewNativeId";
|
|
12
15
|
|
|
13
|
-
const NativeSkiaPictureView: HostComponent<
|
|
16
|
+
const NativeSkiaPictureView: HostComponent<SkiaPictureViewNativeProps> =
|
|
14
17
|
Platform.OS !== "web"
|
|
15
18
|
? SkiaPictureViewNativeComponent
|
|
16
19
|
: // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
20
|
(null as any);
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
interface SkiaDomViewProps extends SkiaDomViewNativeProps {
|
|
23
|
+
mode?: "default" | "continuous";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type SkiaJSDomViewProps = SkiaDomViewProps & {
|
|
27
|
+
Skia: Skia;
|
|
28
|
+
mode?: "default" | "continuous";
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {
|
|
32
|
+
constructor(props: SkiaJSDomViewProps) {
|
|
23
33
|
super(props);
|
|
24
34
|
this._nativeId = SkiaViewNativeId.current++;
|
|
25
35
|
const { root, onSize } = props;
|
|
@@ -31,9 +41,18 @@ export class SkiaJSDomView extends React.Component<
|
|
|
31
41
|
assertSkiaViewApi();
|
|
32
42
|
SkiaViewApi.setJsiProperty(this._nativeId, "onSize", onSize);
|
|
33
43
|
}
|
|
44
|
+
this.tick();
|
|
34
45
|
}
|
|
35
46
|
|
|
36
47
|
private _nativeId: number;
|
|
48
|
+
private requestId = 0;
|
|
49
|
+
|
|
50
|
+
private tick() {
|
|
51
|
+
this.redraw();
|
|
52
|
+
if (this.props.mode === "continuous") {
|
|
53
|
+
this.requestId = requestAnimationFrame(this.tick.bind(this));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
37
56
|
|
|
38
57
|
public get nativeId() {
|
|
39
58
|
return this._nativeId;
|
|
@@ -49,6 +68,7 @@ export class SkiaJSDomView extends React.Component<
|
|
|
49
68
|
assertSkiaViewApi();
|
|
50
69
|
SkiaViewApi.setJsiProperty(this._nativeId, "onSize", onSize);
|
|
51
70
|
}
|
|
71
|
+
this.tick();
|
|
52
72
|
}
|
|
53
73
|
|
|
54
74
|
/**
|
|
@@ -67,7 +87,6 @@ export class SkiaJSDomView extends React.Component<
|
|
|
67
87
|
public redraw() {
|
|
68
88
|
assertSkiaViewApi();
|
|
69
89
|
this.draw();
|
|
70
|
-
//SkiaViewApi.requestRedraw(this._nativeId);
|
|
71
90
|
}
|
|
72
91
|
|
|
73
92
|
private draw() {
|
|
@@ -89,15 +108,17 @@ export class SkiaJSDomView extends React.Component<
|
|
|
89
108
|
componentWillUnmount(): void {
|
|
90
109
|
assertSkiaViewApi();
|
|
91
110
|
SkiaViewApi.setJsiProperty(this._nativeId, "picture", null);
|
|
111
|
+
if (this.requestId) {
|
|
112
|
+
cancelAnimationFrame(this.requestId);
|
|
113
|
+
}
|
|
92
114
|
}
|
|
93
115
|
|
|
94
116
|
render() {
|
|
95
|
-
const {
|
|
117
|
+
const { debug = false, ...viewProps } = this.props;
|
|
96
118
|
return (
|
|
97
119
|
<NativeSkiaPictureView
|
|
98
120
|
collapsable={false}
|
|
99
121
|
nativeID={`${this._nativeId}`}
|
|
100
|
-
mode={mode}
|
|
101
122
|
debug={debug}
|
|
102
123
|
{...viewProps}
|
|
103
124
|
/>
|
|
@@ -4,12 +4,18 @@ import type { SkRect } from "../skia/types";
|
|
|
4
4
|
import SkiaPictureViewNativeComponent from "../specs/SkiaPictureViewNativeComponent";
|
|
5
5
|
|
|
6
6
|
import { SkiaViewApi } from "./api";
|
|
7
|
-
import type {
|
|
7
|
+
import type { SkiaPictureViewNativeProps } from "./types";
|
|
8
8
|
import { SkiaViewNativeId } from "./SkiaViewNativeId";
|
|
9
9
|
|
|
10
10
|
const NativeSkiaPictureView = SkiaPictureViewNativeComponent;
|
|
11
11
|
|
|
12
|
+
interface SkiaPictureViewProps extends SkiaPictureViewNativeProps {
|
|
13
|
+
mode?: "default" | "continuous";
|
|
14
|
+
}
|
|
15
|
+
|
|
12
16
|
export class SkiaPictureView extends React.Component<SkiaPictureViewProps> {
|
|
17
|
+
private requestId = 0;
|
|
18
|
+
|
|
13
19
|
constructor(props: SkiaPictureViewProps) {
|
|
14
20
|
super(props);
|
|
15
21
|
this._nativeId = SkiaViewNativeId.current++;
|
|
@@ -22,6 +28,7 @@ export class SkiaPictureView extends React.Component<SkiaPictureViewProps> {
|
|
|
22
28
|
assertSkiaViewApi();
|
|
23
29
|
SkiaViewApi.setJsiProperty(this._nativeId, "onSize", onSize);
|
|
24
30
|
}
|
|
31
|
+
this.tick();
|
|
25
32
|
}
|
|
26
33
|
|
|
27
34
|
private _nativeId: number;
|
|
@@ -40,6 +47,20 @@ export class SkiaPictureView extends React.Component<SkiaPictureViewProps> {
|
|
|
40
47
|
assertSkiaViewApi();
|
|
41
48
|
SkiaViewApi.setJsiProperty(this._nativeId, "onSize", onSize);
|
|
42
49
|
}
|
|
50
|
+
this.tick();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
componentWillUnmount() {
|
|
54
|
+
if (this.requestId) {
|
|
55
|
+
cancelAnimationFrame(this.requestId);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private tick() {
|
|
60
|
+
this.redraw();
|
|
61
|
+
if (this.props.mode === "continuous") {
|
|
62
|
+
this.requestId = requestAnimationFrame(this.tick.bind(this));
|
|
63
|
+
}
|
|
43
64
|
}
|
|
44
65
|
|
|
45
66
|
/**
|
|
@@ -66,7 +87,6 @@ export class SkiaPictureView extends React.Component<SkiaPictureViewProps> {
|
|
|
66
87
|
<NativeSkiaPictureView
|
|
67
88
|
collapsable={false}
|
|
68
89
|
nativeID={`${this._nativeId}`}
|
|
69
|
-
mode={mode ?? "default"}
|
|
70
90
|
debug={debug}
|
|
71
91
|
{...viewProps}
|
|
72
92
|
/>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { SkCanvas } from "../skia/types";
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { SkiaPictureViewNativeProps } from "./types";
|
|
4
4
|
import { SkiaBaseWebView } from "./SkiaBaseWebView";
|
|
5
5
|
|
|
6
|
-
export class SkiaPictureView extends SkiaBaseWebView<
|
|
7
|
-
constructor(props:
|
|
6
|
+
export class SkiaPictureView extends SkiaBaseWebView<SkiaPictureViewNativeProps> {
|
|
7
|
+
constructor(props: SkiaPictureViewNativeProps) {
|
|
8
8
|
super(props);
|
|
9
9
|
}
|
|
10
10
|
|
package/src/views/types.ts
CHANGED
|
@@ -4,10 +4,7 @@ import type { GroupProps, RenderNode } from "../dom/types";
|
|
|
4
4
|
import type { SkImage, SkPicture, SkRect, SkSize } from "../skia/types";
|
|
5
5
|
import type { SharedValueType } from "../renderer/processors/Animations/Animations";
|
|
6
6
|
|
|
7
|
-
export type DrawMode = "continuous" | "default";
|
|
8
|
-
|
|
9
7
|
export type NativeSkiaViewProps = ViewProps & {
|
|
10
|
-
mode?: DrawMode;
|
|
11
8
|
debug?: boolean;
|
|
12
9
|
};
|
|
13
10
|
|
|
@@ -25,14 +22,6 @@ export interface ISkiaViewApi {
|
|
|
25
22
|
}
|
|
26
23
|
|
|
27
24
|
export interface SkiaBaseViewProps extends ViewProps {
|
|
28
|
-
/**
|
|
29
|
-
* Sets the drawing mode for the skia view. There are two drawing
|
|
30
|
-
* modes, "continuous" and "default", where the continuous mode will
|
|
31
|
-
* continuously redraw the view, and the default mode will only
|
|
32
|
-
* redraw when any of the regular react properties are changed like
|
|
33
|
-
* sizes and margins.
|
|
34
|
-
*/
|
|
35
|
-
mode?: DrawMode;
|
|
36
25
|
/**
|
|
37
26
|
* When set to true the view will display information about the
|
|
38
27
|
* average time it takes to render.
|
|
@@ -45,10 +34,10 @@ export interface SkiaBaseViewProps extends ViewProps {
|
|
|
45
34
|
onSize?: SharedValueType<SkSize>;
|
|
46
35
|
}
|
|
47
36
|
|
|
48
|
-
export interface
|
|
37
|
+
export interface SkiaPictureViewNativeProps extends SkiaBaseViewProps {
|
|
49
38
|
picture?: SkPicture;
|
|
50
39
|
}
|
|
51
40
|
|
|
52
|
-
export interface
|
|
41
|
+
export interface SkiaDomViewNativeProps extends SkiaBaseViewProps {
|
|
53
42
|
root?: RenderNode<GroupProps>;
|
|
54
43
|
}
|