@shopify/react-native-skia 1.7.3 → 1.7.5
Sign up to get free protection for your applications and to get access to all the features.
- package/android/src/main/java/com/shopify/reactnative/skia/PlatformContext.java +13 -3
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +0 -2
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +0 -5
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +0 -2
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java +0 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerDelegate.java +0 -3
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerInterface.java +0 -1
- package/cpp/api/JsiSkCanvas.h +29 -4
- package/cpp/api/JsiSkRRect.h +1 -1
- package/lib/commonjs/views/SkiaJSDomView.d.ts +1 -0
- package/lib/commonjs/views/SkiaJSDomView.js +4 -0
- package/lib/commonjs/views/SkiaJSDomView.js.map +1 -1
- package/lib/module/views/SkiaJSDomView.d.ts +1 -0
- package/lib/module/views/SkiaJSDomView.js +4 -0
- package/lib/module/views/SkiaJSDomView.js.map +1 -1
- package/lib/typescript/lib/commonjs/views/SkiaJSDomView.d.ts +1 -0
- package/lib/typescript/lib/module/views/SkiaJSDomView.d.ts +1 -0
- package/lib/typescript/src/views/SkiaJSDomView.d.ts +1 -0
- package/package.json +1 -1
- package/src/views/SkiaJSDomView.tsx +5 -0
@@ -2,8 +2,6 @@ package com.shopify.reactnative.skia;
|
|
2
2
|
|
3
3
|
import android.os.Handler;
|
4
4
|
import android.os.Looper;
|
5
|
-
import android.util.Log;
|
6
|
-
import android.view.Choreographer;
|
7
5
|
|
8
6
|
import com.facebook.jni.HybridData;
|
9
7
|
import com.facebook.proguard.annotations.DoNotStrip;
|
@@ -27,6 +25,8 @@ public class PlatformContext {
|
|
27
25
|
|
28
26
|
private final String TAG = "PlatformContext";
|
29
27
|
|
28
|
+
private final Handler mainHandler = new Handler(Looper.getMainLooper());
|
29
|
+
|
30
30
|
public PlatformContext(ReactContext reactContext) {
|
31
31
|
mContext = reactContext;
|
32
32
|
mHybridData = initHybrid(reactContext.getResources().getDisplayMetrics().density);
|
@@ -105,6 +105,16 @@ public class PlatformContext {
|
|
105
105
|
super.finalize();
|
106
106
|
}
|
107
107
|
|
108
|
+
@DoNotStrip
|
109
|
+
public void raise(final String message) {
|
110
|
+
mainHandler.post(new Runnable() {
|
111
|
+
@Override
|
112
|
+
public void run() {
|
113
|
+
mContext.handleException(new Exception(message));
|
114
|
+
}
|
115
|
+
});
|
116
|
+
}
|
117
|
+
|
108
118
|
// Private c++ native methods
|
109
119
|
private native HybridData initHybrid(float pixelDensity);
|
110
|
-
}
|
120
|
+
}
|
@@ -75,8 +75,6 @@ public abstract class SkiaBaseView extends ReactViewGroup implements SkiaViewAPI
|
|
75
75
|
|
76
76
|
protected abstract void surfaceDestroyed();
|
77
77
|
|
78
|
-
protected abstract void setMode(String mode);
|
79
|
-
|
80
78
|
protected abstract void setDebugMode(boolean show);
|
81
79
|
|
82
80
|
protected abstract void registerView(int nativeId);
|
@@ -16,11 +16,6 @@ public abstract class SkiaBaseViewManager<T extends SkiaBaseView> extends ReactV
|
|
16
16
|
((SkiaBaseView)view).registerView(nativeIdResolved);
|
17
17
|
}
|
18
18
|
|
19
|
-
@ReactProp(name = "mode")
|
20
|
-
public void setMode(T view, String mode) {
|
21
|
-
((SkiaBaseView)view).setMode(mode);
|
22
|
-
}
|
23
|
-
|
24
19
|
@ReactProp(name = "debug")
|
25
20
|
public void setDebug(T view, boolean show) {
|
26
21
|
((SkiaBaseView)view).setDebugMode(show);
|
@@ -33,8 +33,6 @@ public class SkiaDomView extends SkiaBaseView {
|
|
33
33
|
|
34
34
|
protected native void setBgColor(int color);
|
35
35
|
|
36
|
-
protected native void setMode(String mode);
|
37
|
-
|
38
36
|
protected native void setDebugMode(boolean show);
|
39
37
|
|
40
38
|
protected native void registerView(int nativeId);
|
@@ -32,8 +32,6 @@ public class SkiaPictureView extends SkiaBaseView {
|
|
32
32
|
|
33
33
|
protected native void setBgColor(int color);
|
34
34
|
|
35
|
-
protected native void setMode(String mode);
|
36
|
-
|
37
35
|
protected native void setDebugMode(boolean show);
|
38
36
|
|
39
37
|
protected native void registerView(int nativeId);
|
package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerDelegate.java
CHANGED
@@ -21,9 +21,6 @@ public class SkiaPictureViewManagerDelegate<T extends View, U extends BaseViewMa
|
|
21
21
|
@Override
|
22
22
|
public void setProperty(T view, String propName, @Nullable Object value) {
|
23
23
|
switch (propName) {
|
24
|
-
case "mode":
|
25
|
-
mViewManager.setMode(view, value == null ? null : (String) value);
|
26
|
-
break;
|
27
24
|
case "opaque":
|
28
25
|
mViewManager.setOpaque(view, value != null && (boolean) value);
|
29
26
|
case "debug":
|
package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerInterface.java
CHANGED
@@ -13,7 +13,6 @@ import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
14
14
|
|
15
15
|
public interface SkiaPictureViewManagerInterface<T extends View> {
|
16
|
-
void setMode(T view, @Nullable String value);
|
17
16
|
void setDebug(T view, boolean value);
|
18
17
|
void setOpaque(T view, boolean value);
|
19
18
|
}
|
package/cpp/api/JsiSkCanvas.h
CHANGED
@@ -377,7 +377,7 @@ public:
|
|
377
377
|
|
378
378
|
JSI_HOST_FUNCTION(drawSvg) {
|
379
379
|
auto svgdom = JsiSkSVG::fromValue(runtime, arguments[0]);
|
380
|
-
if (count == 3) {
|
380
|
+
if (count == 3 && arguments[1].isNumber() && arguments[2].isNumber()) {
|
381
381
|
// read size
|
382
382
|
auto w = arguments[1].asNumber();
|
383
383
|
auto h = arguments[2].asNumber();
|
@@ -503,7 +503,7 @@ public:
|
|
503
503
|
auto paint = JsiSkPaint::fromValue(runtime, arguments[3]);
|
504
504
|
auto blendMode = count > 5 && !arguments[4].isUndefined()
|
505
505
|
? static_cast<SkBlendMode>(arguments[4].asNumber())
|
506
|
-
: SkBlendMode::
|
506
|
+
: SkBlendMode::kDstOver;
|
507
507
|
|
508
508
|
std::vector<SkRSXform> xforms;
|
509
509
|
int xformsSize = static_cast<int>(transforms.size(runtime));
|
@@ -522,8 +522,33 @@ public:
|
|
522
522
|
runtime, rects.getValueAtIndex(runtime, i).asObject(runtime));
|
523
523
|
skRects.push_back(*rect.get());
|
524
524
|
}
|
525
|
-
|
526
|
-
|
525
|
+
|
526
|
+
std::vector<SkColor> colors;
|
527
|
+
if (count > 5 && !arguments[5].isUndefined()) {
|
528
|
+
auto colorsArray = arguments[5].asObject(runtime).asArray(runtime);
|
529
|
+
int colorsSize = static_cast<int>(colorsArray.size(runtime));
|
530
|
+
colors.reserve(colorsSize);
|
531
|
+
for (int i = 0; i < colorsSize; i++) {
|
532
|
+
// Convert from [r,g,b,a] in [0,1] to SkColor
|
533
|
+
auto val = colorsArray.getValueAtIndex(runtime, i).asObject(runtime);
|
534
|
+
float r = val.getProperty(runtime, "0").asNumber();
|
535
|
+
float g = val.getProperty(runtime, "1").asNumber();
|
536
|
+
float b = val.getProperty(runtime, "2").asNumber();
|
537
|
+
float a = val.getProperty(runtime, "3").asNumber();
|
538
|
+
|
539
|
+
// Convert to 8-bit color channels and pack into SkColor
|
540
|
+
uint8_t r8 = static_cast<uint8_t>(r * 255);
|
541
|
+
uint8_t g8 = static_cast<uint8_t>(g * 255);
|
542
|
+
uint8_t b8 = static_cast<uint8_t>(b * 255);
|
543
|
+
uint8_t a8 = static_cast<uint8_t>(a * 255);
|
544
|
+
|
545
|
+
SkColor color = SkColorSetARGB(a8, r8, g8, b8);
|
546
|
+
colors.push_back(color);
|
547
|
+
}
|
548
|
+
}
|
549
|
+
|
550
|
+
SkSamplingOptions sampling(SkFilterMode::kLinear, SkMipmapMode::kNone);
|
551
|
+
_canvas->drawAtlas(atlas.get(), xforms.data(), skRects.data(), colors.data(),
|
527
552
|
skRects.size(), blendMode, sampling, nullptr,
|
528
553
|
paint.get());
|
529
554
|
|
package/cpp/api/JsiSkRRect.h
CHANGED
@@ -115,7 +115,7 @@ public:
|
|
115
115
|
createCtor(std::shared_ptr<RNSkPlatformContext> context) {
|
116
116
|
return JSI_HOST_FUNCTION_LAMBDA {
|
117
117
|
// Set up the rect
|
118
|
-
auto rect = JsiSkRect::fromValue(runtime, arguments[0])
|
118
|
+
auto rect = JsiSkRect::fromValue(runtime, arguments[0]);
|
119
119
|
auto rx = arguments[1].asNumber();
|
120
120
|
auto ry = arguments[2].asNumber();
|
121
121
|
auto rrect = SkRRect::MakeRectXY(*rect, rx, ry);
|
@@ -23,6 +23,7 @@ export declare class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {
|
|
23
23
|
* @returns An Image object.
|
24
24
|
*/
|
25
25
|
makeImageSnapshot(rect?: SkRect): import("../skia/types").SkImage;
|
26
|
+
makeImageSnapshotAsync(rect?: SkRect): Promise<import("../skia/types").SkImage>;
|
26
27
|
/**
|
27
28
|
* Sends a redraw request to the native SkiaView.
|
28
29
|
*/
|
@@ -72,6 +72,10 @@ class SkiaJSDomView extends _react.default.Component {
|
|
72
72
|
assertSkiaViewApi();
|
73
73
|
return _api.SkiaViewApi.makeImageSnapshot(this._nativeId, rect);
|
74
74
|
}
|
75
|
+
makeImageSnapshotAsync(rect) {
|
76
|
+
assertSkiaViewApi();
|
77
|
+
return _api.SkiaViewApi.makeImageSnapshotAsync(this._nativeId, rect);
|
78
|
+
}
|
75
79
|
|
76
80
|
/**
|
77
81
|
* Sends a redraw request to the native SkiaView.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_Platform","_SkiaPictureViewNativeComponent","_types","_api","_SkiaViewNativeId","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","_defineProperty","_toPropertyKey","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","NativeSkiaPictureView","Platform","OS","SkiaPictureViewNativeComponent","SkiaJSDomView","React","Component","constructor","props","_nativeId","SkiaViewNativeId","current","root","onSize","assertSkiaViewApi","SkiaViewApi","setJsiProperty","tick","redraw","mode","requestId","requestAnimationFrame","nativeId","componentDidUpdate","prevProps","undefined","draw","makeImageSnapshot","rect","Skia","rec","PictureRecorder","canvas","beginRecording","ctx","JsiDrawingContext","render","picture","finishRecordingAsPicture","componentWillUnmount","cancelAnimationFrame","debug","viewProps","createElement","collapsable","nativeID","exports","requestRedraw","Error"],"sources":["SkiaJSDomView.tsx"],"sourcesContent":["import React from \"react\";\nimport type { HostComponent } from \"react-native\";\n\nimport type { Skia, SkRect } from \"../skia/types\";\nimport { Platform } from \"../Platform\";\nimport SkiaPictureViewNativeComponent from \"../specs/SkiaPictureViewNativeComponent\";\nimport { JsiDrawingContext } from \"../dom/types\";\n\nimport { SkiaViewApi } from \"./api\";\nimport type {\n SkiaPictureViewNativeProps,\n SkiaDomViewNativeProps,\n} from \"./types\";\nimport { SkiaViewNativeId } from \"./SkiaViewNativeId\";\n\nconst NativeSkiaPictureView: HostComponent<SkiaPictureViewNativeProps> =\n Platform.OS !== \"web\"\n ? SkiaPictureViewNativeComponent\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (null as any);\n\ninterface SkiaDomViewProps extends SkiaDomViewNativeProps {\n mode?: \"default\" | \"continuous\";\n}\n\ntype SkiaJSDomViewProps = SkiaDomViewProps & {\n Skia: Skia;\n mode?: \"default\" | \"continuous\";\n};\n\nexport class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {\n constructor(props: SkiaJSDomViewProps) {\n super(props);\n this._nativeId = SkiaViewNativeId.current++;\n const { root, onSize } = props;\n if (root) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"root\", root);\n }\n if (onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n private _nativeId: number;\n private requestId = 0;\n\n private tick() {\n this.redraw();\n if (this.props.mode === \"continuous\") {\n this.requestId = requestAnimationFrame(this.tick.bind(this));\n }\n }\n\n public get nativeId() {\n return this._nativeId;\n }\n\n componentDidUpdate(prevProps: SkiaDomViewProps & { Skia: Skia }) {\n const { root, onSize } = this.props;\n if (root !== prevProps.root && root !== undefined) {\n assertSkiaViewApi();\n this.draw();\n }\n if (onSize !== prevProps.onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n /**\n * Creates a snapshot from the canvas in the surface\n * @param rect Rect to use as bounds. Optional.\n * @returns An Image object.\n */\n public makeImageSnapshot(rect?: SkRect) {\n assertSkiaViewApi();\n return SkiaViewApi.makeImageSnapshot(this._nativeId, rect);\n }\n\n /**\n * Sends a redraw request to the native SkiaView.\n */\n public redraw() {\n assertSkiaViewApi();\n this.draw();\n }\n\n private draw() {\n const { root, Skia } = this.props;\n if (root !== undefined) {\n assertSkiaViewApi();\n const rec = Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n const ctx = new JsiDrawingContext(Skia, canvas);\n root.render(ctx);\n const picture = rec.finishRecordingAsPicture();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", picture);\n }\n }\n\n /**\n * Clear up the dom node when unmounting to release resources.\n */\n componentWillUnmount(): void {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", null);\n if (this.requestId) {\n cancelAnimationFrame(this.requestId);\n }\n }\n\n render() {\n const { debug = false, ...viewProps } = this.props;\n return (\n <NativeSkiaPictureView\n collapsable={false}\n nativeID={`${this._nativeId}`}\n debug={debug}\n {...viewProps}\n />\n );\n }\n}\n\nconst assertSkiaViewApi = () => {\n if (\n SkiaViewApi === null ||\n SkiaViewApi.setJsiProperty === null ||\n SkiaViewApi.requestRedraw === null ||\n SkiaViewApi.makeImageSnapshot === null\n ) {\n throw Error(\"Skia View Api was not found.\");\n }\n};\n"],"mappings":"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
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_Platform","_SkiaPictureViewNativeComponent","_types","_api","_SkiaViewNativeId","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","_defineProperty","_toPropertyKey","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","NativeSkiaPictureView","Platform","OS","SkiaPictureViewNativeComponent","SkiaJSDomView","React","Component","constructor","props","_nativeId","SkiaViewNativeId","current","root","onSize","assertSkiaViewApi","SkiaViewApi","setJsiProperty","tick","redraw","mode","requestId","requestAnimationFrame","nativeId","componentDidUpdate","prevProps","undefined","draw","makeImageSnapshot","rect","makeImageSnapshotAsync","Skia","rec","PictureRecorder","canvas","beginRecording","ctx","JsiDrawingContext","render","picture","finishRecordingAsPicture","componentWillUnmount","cancelAnimationFrame","debug","viewProps","createElement","collapsable","nativeID","exports","requestRedraw","Error"],"sources":["SkiaJSDomView.tsx"],"sourcesContent":["import React from \"react\";\nimport type { HostComponent } from \"react-native\";\n\nimport type { Skia, SkRect } from \"../skia/types\";\nimport { Platform } from \"../Platform\";\nimport SkiaPictureViewNativeComponent from \"../specs/SkiaPictureViewNativeComponent\";\nimport { JsiDrawingContext } from \"../dom/types\";\n\nimport { SkiaViewApi } from \"./api\";\nimport type {\n SkiaPictureViewNativeProps,\n SkiaDomViewNativeProps,\n} from \"./types\";\nimport { SkiaViewNativeId } from \"./SkiaViewNativeId\";\n\nconst NativeSkiaPictureView: HostComponent<SkiaPictureViewNativeProps> =\n Platform.OS !== \"web\"\n ? SkiaPictureViewNativeComponent\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (null as any);\n\ninterface SkiaDomViewProps extends SkiaDomViewNativeProps {\n mode?: \"default\" | \"continuous\";\n}\n\ntype SkiaJSDomViewProps = SkiaDomViewProps & {\n Skia: Skia;\n mode?: \"default\" | \"continuous\";\n};\n\nexport class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {\n constructor(props: SkiaJSDomViewProps) {\n super(props);\n this._nativeId = SkiaViewNativeId.current++;\n const { root, onSize } = props;\n if (root) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"root\", root);\n }\n if (onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n private _nativeId: number;\n private requestId = 0;\n\n private tick() {\n this.redraw();\n if (this.props.mode === \"continuous\") {\n this.requestId = requestAnimationFrame(this.tick.bind(this));\n }\n }\n\n public get nativeId() {\n return this._nativeId;\n }\n\n componentDidUpdate(prevProps: SkiaDomViewProps & { Skia: Skia }) {\n const { root, onSize } = this.props;\n if (root !== prevProps.root && root !== undefined) {\n assertSkiaViewApi();\n this.draw();\n }\n if (onSize !== prevProps.onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n /**\n * Creates a snapshot from the canvas in the surface\n * @param rect Rect to use as bounds. Optional.\n * @returns An Image object.\n */\n public makeImageSnapshot(rect?: SkRect) {\n assertSkiaViewApi();\n return SkiaViewApi.makeImageSnapshot(this._nativeId, rect);\n }\n\n public makeImageSnapshotAsync(rect?: SkRect) {\n assertSkiaViewApi();\n return SkiaViewApi.makeImageSnapshotAsync(this._nativeId, rect);\n }\n\n /**\n * Sends a redraw request to the native SkiaView.\n */\n public redraw() {\n assertSkiaViewApi();\n this.draw();\n }\n\n private draw() {\n const { root, Skia } = this.props;\n if (root !== undefined) {\n assertSkiaViewApi();\n const rec = Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n const ctx = new JsiDrawingContext(Skia, canvas);\n root.render(ctx);\n const picture = rec.finishRecordingAsPicture();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", picture);\n }\n }\n\n /**\n * Clear up the dom node when unmounting to release resources.\n */\n componentWillUnmount(): void {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", null);\n if (this.requestId) {\n cancelAnimationFrame(this.requestId);\n }\n }\n\n render() {\n const { debug = false, ...viewProps } = this.props;\n return (\n <NativeSkiaPictureView\n collapsable={false}\n nativeID={`${this._nativeId}`}\n debug={debug}\n {...viewProps}\n />\n );\n }\n}\n\nconst assertSkiaViewApi = () => {\n if (\n SkiaViewApi === null ||\n SkiaViewApi.setJsiProperty === null ||\n SkiaViewApi.requestRedraw === null ||\n SkiaViewApi.makeImageSnapshot === null\n ) {\n throw Error(\"Skia View Api was not found.\");\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
@@ -23,6 +23,7 @@ export declare class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {
|
|
23
23
|
* @returns An Image object.
|
24
24
|
*/
|
25
25
|
makeImageSnapshot(rect?: SkRect): import("../skia/types").SkImage;
|
26
|
+
makeImageSnapshotAsync(rect?: SkRect): Promise<import("../skia/types").SkImage>;
|
26
27
|
/**
|
27
28
|
* Sends a redraw request to the native SkiaView.
|
28
29
|
*/
|
@@ -65,6 +65,10 @@ export class SkiaJSDomView extends React.Component {
|
|
65
65
|
assertSkiaViewApi();
|
66
66
|
return SkiaViewApi.makeImageSnapshot(this._nativeId, rect);
|
67
67
|
}
|
68
|
+
makeImageSnapshotAsync(rect) {
|
69
|
+
assertSkiaViewApi();
|
70
|
+
return SkiaViewApi.makeImageSnapshotAsync(this._nativeId, rect);
|
71
|
+
}
|
68
72
|
|
69
73
|
/**
|
70
74
|
* Sends a redraw request to the native SkiaView.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["React","Platform","SkiaPictureViewNativeComponent","JsiDrawingContext","SkiaViewApi","SkiaViewNativeId","NativeSkiaPictureView","OS","SkiaJSDomView","Component","constructor","props","_defineProperty","_nativeId","current","root","onSize","assertSkiaViewApi","setJsiProperty","tick","redraw","mode","requestId","requestAnimationFrame","bind","nativeId","componentDidUpdate","prevProps","undefined","draw","makeImageSnapshot","rect","Skia","rec","PictureRecorder","canvas","beginRecording","ctx","render","picture","finishRecordingAsPicture","componentWillUnmount","cancelAnimationFrame","debug","viewProps","createElement","_extends","collapsable","nativeID","requestRedraw","Error"],"sources":["SkiaJSDomView.tsx"],"sourcesContent":["import React from \"react\";\nimport type { HostComponent } from \"react-native\";\n\nimport type { Skia, SkRect } from \"../skia/types\";\nimport { Platform } from \"../Platform\";\nimport SkiaPictureViewNativeComponent from \"../specs/SkiaPictureViewNativeComponent\";\nimport { JsiDrawingContext } from \"../dom/types\";\n\nimport { SkiaViewApi } from \"./api\";\nimport type {\n SkiaPictureViewNativeProps,\n SkiaDomViewNativeProps,\n} from \"./types\";\nimport { SkiaViewNativeId } from \"./SkiaViewNativeId\";\n\nconst NativeSkiaPictureView: HostComponent<SkiaPictureViewNativeProps> =\n Platform.OS !== \"web\"\n ? SkiaPictureViewNativeComponent\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (null as any);\n\ninterface SkiaDomViewProps extends SkiaDomViewNativeProps {\n mode?: \"default\" | \"continuous\";\n}\n\ntype SkiaJSDomViewProps = SkiaDomViewProps & {\n Skia: Skia;\n mode?: \"default\" | \"continuous\";\n};\n\nexport class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {\n constructor(props: SkiaJSDomViewProps) {\n super(props);\n this._nativeId = SkiaViewNativeId.current++;\n const { root, onSize } = props;\n if (root) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"root\", root);\n }\n if (onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n private _nativeId: number;\n private requestId = 0;\n\n private tick() {\n this.redraw();\n if (this.props.mode === \"continuous\") {\n this.requestId = requestAnimationFrame(this.tick.bind(this));\n }\n }\n\n public get nativeId() {\n return this._nativeId;\n }\n\n componentDidUpdate(prevProps: SkiaDomViewProps & { Skia: Skia }) {\n const { root, onSize } = this.props;\n if (root !== prevProps.root && root !== undefined) {\n assertSkiaViewApi();\n this.draw();\n }\n if (onSize !== prevProps.onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n /**\n * Creates a snapshot from the canvas in the surface\n * @param rect Rect to use as bounds. Optional.\n * @returns An Image object.\n */\n public makeImageSnapshot(rect?: SkRect) {\n assertSkiaViewApi();\n return SkiaViewApi.makeImageSnapshot(this._nativeId, rect);\n }\n\n /**\n * Sends a redraw request to the native SkiaView.\n */\n public redraw() {\n assertSkiaViewApi();\n this.draw();\n }\n\n private draw() {\n const { root, Skia } = this.props;\n if (root !== undefined) {\n assertSkiaViewApi();\n const rec = Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n const ctx = new JsiDrawingContext(Skia, canvas);\n root.render(ctx);\n const picture = rec.finishRecordingAsPicture();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", picture);\n }\n }\n\n /**\n * Clear up the dom node when unmounting to release resources.\n */\n componentWillUnmount(): void {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", null);\n if (this.requestId) {\n cancelAnimationFrame(this.requestId);\n }\n }\n\n render() {\n const { debug = false, ...viewProps } = this.props;\n return (\n <NativeSkiaPictureView\n collapsable={false}\n nativeID={`${this._nativeId}`}\n debug={debug}\n {...viewProps}\n />\n );\n }\n}\n\nconst assertSkiaViewApi = () => {\n if (\n SkiaViewApi === null ||\n SkiaViewApi.setJsiProperty === null ||\n SkiaViewApi.requestRedraw === null ||\n SkiaViewApi.makeImageSnapshot === null\n ) {\n throw Error(\"Skia View Api was not found.\");\n }\n};\n"],"mappings":";;;;AAAA,OAAOA,KAAK,MAAM,OAAO;AAIzB,SAASC,QAAQ,QAAQ,aAAa;AACtC,OAAOC,8BAA8B,MAAM,yCAAyC;AACpF,SAASC,iBAAiB,QAAQ,cAAc;AAEhD,SAASC,WAAW,QAAQ,OAAO;AAKnC,SAASC,gBAAgB,QAAQ,oBAAoB;AAErD,MAAMC,qBAAgE,GACpEL,QAAQ,CAACM,EAAE,KAAK,KAAK,GACjBL,8BAA8B;AAC9B;AACC,IAAY;AAWnB,OAAO,MAAMM,aAAa,SAASR,KAAK,CAACS,SAAS,CAAqB;EACrEC,WAAWA,CAACC,KAAyB,EAAE;IACrC,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IAAAA,eAAA,oBAeK,CAAC;IAdnB,IAAI,CAACC,SAAS,GAAGR,gBAAgB,CAACS,OAAO,EAAE;IAC3C,MAAM;MAAEC,IAAI;MAAEC;IAAO,CAAC,GAAGL,KAAK;IAC9B,IAAII,IAAI,EAAE;MACRE,iBAAiB,CAAC,CAAC;MACnBb,WAAW,CAACc,cAAc,CAAC,IAAI,CAACL,SAAS,EAAE,MAAM,EAAEE,IAAI,CAAC;IAC1D;IACA,IAAIC,MAAM,EAAE;MACVC,iBAAiB,CAAC,CAAC;MACnBb,WAAW,CAACc,cAAc,CAAC,IAAI,CAACL,SAAS,EAAE,QAAQ,EAAEG,MAAM,CAAC;IAC9D;IACA,IAAI,CAACG,IAAI,CAAC,CAAC;EACb;EAKQA,IAAIA,CAAA,EAAG;IACb,IAAI,CAACC,MAAM,CAAC,CAAC;IACb,IAAI,IAAI,CAACT,KAAK,CAACU,IAAI,KAAK,YAAY,EAAE;MACpC,IAAI,CAACC,SAAS,GAAGC,qBAAqB,CAAC,IAAI,CAACJ,IAAI,CAACK,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D;EACF;EAEA,IAAWC,QAAQA,CAAA,EAAG;IACpB,OAAO,IAAI,CAACZ,SAAS;EACvB;EAEAa,kBAAkBA,CAACC,SAA4C,EAAE;IAC/D,MAAM;MAAEZ,IAAI;MAAEC;IAAO,CAAC,GAAG,IAAI,CAACL,KAAK;IACnC,IAAII,IAAI,KAAKY,SAAS,CAACZ,IAAI,IAAIA,IAAI,KAAKa,SAAS,EAAE;MACjDX,iBAAiB,CAAC,CAAC;MACnB,IAAI,CAACY,IAAI,CAAC,CAAC;IACb;IACA,IAAIb,MAAM,KAAKW,SAAS,CAACX,MAAM,EAAE;MAC/BC,iBAAiB,CAAC,CAAC;MACnBb,WAAW,CAACc,cAAc,CAAC,IAAI,CAACL,SAAS,EAAE,QAAQ,EAAEG,MAAM,CAAC;IAC9D;IACA,IAAI,CAACG,IAAI,CAAC,CAAC;EACb;;EAEA;AACF;AACA;AACA;AACA;EACSW,iBAAiBA,CAACC,IAAa,EAAE;IACtCd,iBAAiB,CAAC,CAAC;IACnB,OAAOb,WAAW,CAAC0B,iBAAiB,CAAC,IAAI,CAACjB,SAAS,EAAEkB,IAAI,CAAC;EAC5D;;EAEA;AACF;AACA;EACSX,MAAMA,CAAA,EAAG;IACdH,iBAAiB,CAAC,CAAC;IACnB,IAAI,CAACY,IAAI,CAAC,CAAC;EACb;EAEQA,IAAIA,CAAA,EAAG;IACb,MAAM;MAAEd,IAAI;
|
1
|
+
{"version":3,"names":["React","Platform","SkiaPictureViewNativeComponent","JsiDrawingContext","SkiaViewApi","SkiaViewNativeId","NativeSkiaPictureView","OS","SkiaJSDomView","Component","constructor","props","_defineProperty","_nativeId","current","root","onSize","assertSkiaViewApi","setJsiProperty","tick","redraw","mode","requestId","requestAnimationFrame","bind","nativeId","componentDidUpdate","prevProps","undefined","draw","makeImageSnapshot","rect","makeImageSnapshotAsync","Skia","rec","PictureRecorder","canvas","beginRecording","ctx","render","picture","finishRecordingAsPicture","componentWillUnmount","cancelAnimationFrame","debug","viewProps","createElement","_extends","collapsable","nativeID","requestRedraw","Error"],"sources":["SkiaJSDomView.tsx"],"sourcesContent":["import React from \"react\";\nimport type { HostComponent } from \"react-native\";\n\nimport type { Skia, SkRect } from \"../skia/types\";\nimport { Platform } from \"../Platform\";\nimport SkiaPictureViewNativeComponent from \"../specs/SkiaPictureViewNativeComponent\";\nimport { JsiDrawingContext } from \"../dom/types\";\n\nimport { SkiaViewApi } from \"./api\";\nimport type {\n SkiaPictureViewNativeProps,\n SkiaDomViewNativeProps,\n} from \"./types\";\nimport { SkiaViewNativeId } from \"./SkiaViewNativeId\";\n\nconst NativeSkiaPictureView: HostComponent<SkiaPictureViewNativeProps> =\n Platform.OS !== \"web\"\n ? SkiaPictureViewNativeComponent\n : // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (null as any);\n\ninterface SkiaDomViewProps extends SkiaDomViewNativeProps {\n mode?: \"default\" | \"continuous\";\n}\n\ntype SkiaJSDomViewProps = SkiaDomViewProps & {\n Skia: Skia;\n mode?: \"default\" | \"continuous\";\n};\n\nexport class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {\n constructor(props: SkiaJSDomViewProps) {\n super(props);\n this._nativeId = SkiaViewNativeId.current++;\n const { root, onSize } = props;\n if (root) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"root\", root);\n }\n if (onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n private _nativeId: number;\n private requestId = 0;\n\n private tick() {\n this.redraw();\n if (this.props.mode === \"continuous\") {\n this.requestId = requestAnimationFrame(this.tick.bind(this));\n }\n }\n\n public get nativeId() {\n return this._nativeId;\n }\n\n componentDidUpdate(prevProps: SkiaDomViewProps & { Skia: Skia }) {\n const { root, onSize } = this.props;\n if (root !== prevProps.root && root !== undefined) {\n assertSkiaViewApi();\n this.draw();\n }\n if (onSize !== prevProps.onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n /**\n * Creates a snapshot from the canvas in the surface\n * @param rect Rect to use as bounds. Optional.\n * @returns An Image object.\n */\n public makeImageSnapshot(rect?: SkRect) {\n assertSkiaViewApi();\n return SkiaViewApi.makeImageSnapshot(this._nativeId, rect);\n }\n\n public makeImageSnapshotAsync(rect?: SkRect) {\n assertSkiaViewApi();\n return SkiaViewApi.makeImageSnapshotAsync(this._nativeId, rect);\n }\n\n /**\n * Sends a redraw request to the native SkiaView.\n */\n public redraw() {\n assertSkiaViewApi();\n this.draw();\n }\n\n private draw() {\n const { root, Skia } = this.props;\n if (root !== undefined) {\n assertSkiaViewApi();\n const rec = Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n const ctx = new JsiDrawingContext(Skia, canvas);\n root.render(ctx);\n const picture = rec.finishRecordingAsPicture();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", picture);\n }\n }\n\n /**\n * Clear up the dom node when unmounting to release resources.\n */\n componentWillUnmount(): void {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", null);\n if (this.requestId) {\n cancelAnimationFrame(this.requestId);\n }\n }\n\n render() {\n const { debug = false, ...viewProps } = this.props;\n return (\n <NativeSkiaPictureView\n collapsable={false}\n nativeID={`${this._nativeId}`}\n debug={debug}\n {...viewProps}\n />\n );\n }\n}\n\nconst assertSkiaViewApi = () => {\n if (\n SkiaViewApi === null ||\n SkiaViewApi.setJsiProperty === null ||\n SkiaViewApi.requestRedraw === null ||\n SkiaViewApi.makeImageSnapshot === null\n ) {\n throw Error(\"Skia View Api was not found.\");\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
@@ -14,6 +14,7 @@ export class SkiaJSDomView extends SkiaJSDomView_base {
|
|
14
14
|
* @returns An Image object.
|
15
15
|
*/
|
16
16
|
makeImageSnapshot(rect: any): import("../../..").SkImage;
|
17
|
+
makeImageSnapshotAsync(rect: any): Promise<import("../../..").SkImage>;
|
17
18
|
/**
|
18
19
|
* Sends a redraw request to the native SkiaView.
|
19
20
|
*/
|
@@ -11,6 +11,7 @@ export class SkiaJSDomView extends React.Component<any, any, any> {
|
|
11
11
|
* @returns An Image object.
|
12
12
|
*/
|
13
13
|
makeImageSnapshot(rect: any): import("../../..").SkImage;
|
14
|
+
makeImageSnapshotAsync(rect: any): Promise<import("../../..").SkImage>;
|
14
15
|
/**
|
15
16
|
* Sends a redraw request to the native SkiaView.
|
16
17
|
*/
|
@@ -23,6 +23,7 @@ export declare class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {
|
|
23
23
|
* @returns An Image object.
|
24
24
|
*/
|
25
25
|
makeImageSnapshot(rect?: SkRect): import("../skia/types").SkImage;
|
26
|
+
makeImageSnapshotAsync(rect?: SkRect): Promise<import("../skia/types").SkImage>;
|
26
27
|
/**
|
27
28
|
* Sends a redraw request to the native SkiaView.
|
28
29
|
*/
|
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.7.
|
10
|
+
"version": "1.7.5",
|
11
11
|
"description": "High-performance React Native Graphics using Skia",
|
12
12
|
"main": "lib/module/index.js",
|
13
13
|
"react-native": "src/index.ts",
|
@@ -81,6 +81,11 @@ export class SkiaJSDomView extends React.Component<SkiaJSDomViewProps> {
|
|
81
81
|
return SkiaViewApi.makeImageSnapshot(this._nativeId, rect);
|
82
82
|
}
|
83
83
|
|
84
|
+
public makeImageSnapshotAsync(rect?: SkRect) {
|
85
|
+
assertSkiaViewApi();
|
86
|
+
return SkiaViewApi.makeImageSnapshotAsync(this._nativeId, rect);
|
87
|
+
}
|
88
|
+
|
84
89
|
/**
|
85
90
|
* Sends a redraw request to the native SkiaView.
|
86
91
|
*/
|