@shopify/react-native-skia 2.3.10 → 2.3.11
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/cpp/jni/include/JniSkiaBaseView.h +9 -2
- package/android/cpp/jni/include/JniSkiaPictureView.h +97 -2
- package/android/cpp/rnskia-android/OpenGLContext.h +1 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +3 -1
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java +42 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureViewManager.java +5 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerDelegate.java +8 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerInterface.java +1 -0
- package/apple/SkiaCVPixelBufferUtils.mm +8 -4
- package/cpp/api/recorder/Drawings.h +10 -2
- package/cpp/api/recorder/JsiRecorder.h +1 -1
- package/cpp/rnskia/RNSkJsiViewApi.h +2 -0
- package/cpp/rnskia/RNSkPictureView.h +2 -0
- package/lib/commonjs/renderer/Canvas.js +2 -1
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/sksg/Container.native.d.ts +0 -3
- package/lib/commonjs/sksg/Container.native.js +8 -14
- package/lib/commonjs/sksg/Container.native.js.map +1 -1
- package/lib/commonjs/sksg/Reconciler.js +2 -2
- package/lib/commonjs/sksg/Reconciler.js.map +1 -1
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.d.ts +1 -0
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +1 -1
- package/lib/commonjs/views/SkiaPictureView.d.ts +1 -0
- package/lib/commonjs/views/SkiaPictureView.js +3 -1
- package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
- package/lib/commonjs/views/SkiaPictureView.web.js +13 -2
- package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
- package/lib/module/renderer/Canvas.js +2 -1
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/sksg/Container.native.d.ts +0 -3
- package/lib/module/sksg/Container.native.js +8 -14
- package/lib/module/sksg/Container.native.js.map +1 -1
- package/lib/module/sksg/Reconciler.js +2 -2
- package/lib/module/sksg/Reconciler.js.map +1 -1
- package/lib/module/specs/SkiaPictureViewNativeComponent.d.ts +1 -0
- package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +1 -1
- package/lib/module/views/SkiaPictureView.d.ts +1 -0
- package/lib/module/views/SkiaPictureView.js +3 -1
- package/lib/module/views/SkiaPictureView.js.map +1 -1
- package/lib/module/views/SkiaPictureView.web.js +13 -2
- package/lib/module/views/SkiaPictureView.web.js.map +1 -1
- package/lib/typescript/lib/commonjs/sksg/Container.native.d.ts +0 -4
- package/lib/typescript/lib/module/sksg/Container.native.d.ts +0 -4
- package/lib/typescript/src/sksg/Container.native.d.ts +0 -3
- package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.d.ts +1 -0
- package/lib/typescript/src/views/SkiaPictureView.d.ts +1 -0
- package/package.json +1 -1
- package/src/renderer/Canvas.tsx +4 -2
- package/src/sksg/Container.native.ts +7 -16
- package/src/sksg/Reconciler.ts +2 -2
- package/src/specs/SkiaPictureViewNativeComponent.ts +1 -0
- package/src/views/SkiaPictureView.tsx +3 -1
- package/src/views/SkiaPictureView.web.tsx +14 -2
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include <memory>
|
|
4
4
|
#include <string>
|
|
5
|
+
#include <vector>
|
|
5
6
|
|
|
6
7
|
#include <fbjni/fbjni.h>
|
|
7
8
|
#include <jni.h>
|
|
@@ -20,7 +21,7 @@ class JniSkiaBaseView {
|
|
|
20
21
|
public:
|
|
21
22
|
JniSkiaBaseView(jni::alias_ref<JniSkiaManager::javaobject> skiaManager,
|
|
22
23
|
std::shared_ptr<RNSkBaseAndroidView> skiaView)
|
|
23
|
-
:
|
|
24
|
+
: _skiaAndroidView(std::move(skiaView)), _manager(skiaManager->cthis()) {}
|
|
24
25
|
|
|
25
26
|
~JniSkiaBaseView() = default;
|
|
26
27
|
|
|
@@ -57,9 +58,15 @@ protected:
|
|
|
57
58
|
_skiaAndroidView->getSkiaView()->getNativeId());
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
virtual jni::local_ref<jni::JArrayInt> getBitmap(int width, int height) {
|
|
62
|
+
return jni::JArrayInt::newArray(0);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
protected:
|
|
66
|
+
std::shared_ptr<RNSkBaseAndroidView> _skiaAndroidView;
|
|
67
|
+
|
|
60
68
|
private:
|
|
61
69
|
JniSkiaManager *_manager;
|
|
62
|
-
std::shared_ptr<RNSkBaseAndroidView> _skiaAndroidView;
|
|
63
70
|
};
|
|
64
71
|
|
|
65
72
|
} // namespace RNSkia
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include <cstdint>
|
|
3
4
|
#include <memory>
|
|
4
5
|
#include <string>
|
|
6
|
+
#include <vector>
|
|
5
7
|
|
|
6
8
|
#include <fbjni/fbjni.h>
|
|
7
9
|
#include <jni.h>
|
|
@@ -16,6 +18,19 @@
|
|
|
16
18
|
#include <android/native_window_jni.h>
|
|
17
19
|
#include <fbjni/detail/Hybrid.h>
|
|
18
20
|
|
|
21
|
+
#if defined(SK_GRAPHITE)
|
|
22
|
+
#include "RNDawnContext.h"
|
|
23
|
+
#else
|
|
24
|
+
#include "OpenGLContext.h"
|
|
25
|
+
#endif
|
|
26
|
+
#include "include/core/SkBitmap.h"
|
|
27
|
+
#include "include/core/SkCanvas.h"
|
|
28
|
+
#include "include/core/SkImage.h"
|
|
29
|
+
#include "include/core/SkPaint.h"
|
|
30
|
+
#include "include/core/SkPicture.h"
|
|
31
|
+
#include "include/core/SkPictureRecorder.h"
|
|
32
|
+
#include "include/core/SkSurface.h"
|
|
33
|
+
|
|
19
34
|
namespace RNSkia {
|
|
20
35
|
namespace jsi = facebook::jsi;
|
|
21
36
|
namespace jni = facebook::jni;
|
|
@@ -43,8 +58,8 @@ public:
|
|
|
43
58
|
JniSkiaPictureView::surfaceSizeChanged),
|
|
44
59
|
makeNativeMethod("setDebugMode", JniSkiaPictureView::setDebugMode),
|
|
45
60
|
makeNativeMethod("registerView", JniSkiaPictureView::registerView),
|
|
46
|
-
makeNativeMethod("unregisterView",
|
|
47
|
-
|
|
61
|
+
makeNativeMethod("unregisterView", JniSkiaPictureView::unregisterView),
|
|
62
|
+
makeNativeMethod("getBitmap", JniSkiaPictureView::getBitmap)});
|
|
48
63
|
}
|
|
49
64
|
|
|
50
65
|
protected:
|
|
@@ -68,6 +83,86 @@ protected:
|
|
|
68
83
|
|
|
69
84
|
void unregisterView() override { JniSkiaBaseView::unregisterView(); }
|
|
70
85
|
|
|
86
|
+
jni::local_ref<jni::JArrayInt> getBitmap(int width, int height) override {
|
|
87
|
+
// Get the RNSkPictureView from the android view
|
|
88
|
+
auto pictureView =
|
|
89
|
+
std::static_pointer_cast<RNSkAndroidView<RNSkia::RNSkPictureView>>(
|
|
90
|
+
_skiaAndroidView);
|
|
91
|
+
if (!pictureView) {
|
|
92
|
+
return JniSkiaBaseView::getBitmap(width, height);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Get the renderer and cast it to RNSkPictureRenderer
|
|
96
|
+
auto renderer = std::static_pointer_cast<RNSkia::RNSkPictureRenderer>(
|
|
97
|
+
pictureView->getRenderer());
|
|
98
|
+
if (!renderer) {
|
|
99
|
+
return jni::JArrayInt::newArray(0);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Get the SkPicture from the renderer
|
|
103
|
+
sk_sp<SkPicture> picture = renderer->getPicture();
|
|
104
|
+
|
|
105
|
+
const size_t pixelCount =
|
|
106
|
+
static_cast<size_t>(width) * static_cast<size_t>(height);
|
|
107
|
+
if (pixelCount == 0) {
|
|
108
|
+
return jni::JArrayInt::newArray(0);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
sk_sp<SkSurface> surface;
|
|
112
|
+
#if defined(SK_GRAPHITE)
|
|
113
|
+
surface = DawnContext::getInstance().MakeOffscreen(width, height);
|
|
114
|
+
#else
|
|
115
|
+
surface = OpenGLContext::getInstance().MakeOffscreen(width, height);
|
|
116
|
+
#endif
|
|
117
|
+
|
|
118
|
+
if (!surface) {
|
|
119
|
+
return jni::JArrayInt::newArray(0);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
SkCanvas *canvas = surface->getCanvas();
|
|
123
|
+
if (canvas == nullptr) {
|
|
124
|
+
return jni::JArrayInt::newArray(0);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
canvas->clear(SK_ColorTRANSPARENT);
|
|
128
|
+
|
|
129
|
+
if (picture) {
|
|
130
|
+
auto pd = pictureView->getPixelDensity();
|
|
131
|
+
canvas->save();
|
|
132
|
+
canvas->scale(pd, pd);
|
|
133
|
+
canvas->drawPicture(picture);
|
|
134
|
+
canvas->restore();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
sk_sp<SkImage> snapshot = surface->makeImageSnapshot();
|
|
138
|
+
if (!snapshot) {
|
|
139
|
+
return jni::JArrayInt::newArray(0);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
sk_sp<SkImage> image = snapshot->makeNonTextureImage();
|
|
143
|
+
if (!image) {
|
|
144
|
+
image = snapshot;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (!image) {
|
|
148
|
+
return jni::JArrayInt::newArray(0);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
std::vector<int32_t> pixels(pixelCount);
|
|
152
|
+
SkImageInfo readInfo = SkImageInfo::Make(
|
|
153
|
+
width, height, kBGRA_8888_SkColorType, kPremul_SkAlphaType);
|
|
154
|
+
size_t rowBytes = static_cast<size_t>(width) * sizeof(int32_t);
|
|
155
|
+
if (!image->readPixels(nullptr, readInfo, pixels.data(), rowBytes, 0, 0)) {
|
|
156
|
+
return jni::JArrayInt::newArray(0);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
auto intArray = jni::JArrayInt::newArray(pixelCount);
|
|
160
|
+
intArray->setRegion(0, pixelCount,
|
|
161
|
+
reinterpret_cast<const jint *>(pixels.data()));
|
|
162
|
+
|
|
163
|
+
return intArray;
|
|
164
|
+
}
|
|
165
|
+
|
|
71
166
|
private:
|
|
72
167
|
friend HybridBase;
|
|
73
168
|
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
package com.shopify.reactnative.skia;
|
|
2
2
|
|
|
3
3
|
import android.content.Context;
|
|
4
|
+
import android.graphics.Bitmap;
|
|
5
|
+
import android.graphics.Canvas;
|
|
6
|
+
import android.graphics.Paint;
|
|
4
7
|
|
|
5
8
|
import com.facebook.jni.HybridData;
|
|
6
9
|
import com.facebook.jni.annotations.DoNotStrip;
|
|
@@ -9,6 +12,9 @@ import com.facebook.react.bridge.ReactContext;
|
|
|
9
12
|
public class SkiaPictureView extends SkiaBaseView {
|
|
10
13
|
@DoNotStrip
|
|
11
14
|
private HybridData mHybridData;
|
|
15
|
+
private Paint paint = new Paint();
|
|
16
|
+
|
|
17
|
+
private boolean coldStart = false;
|
|
12
18
|
|
|
13
19
|
public SkiaPictureView(Context context) {
|
|
14
20
|
super(context);
|
|
@@ -16,12 +22,46 @@ public class SkiaPictureView extends SkiaBaseView {
|
|
|
16
22
|
mHybridData = initHybrid(skiaModule.getSkiaManager());
|
|
17
23
|
}
|
|
18
24
|
|
|
25
|
+
public void setColdStart(boolean coldStart) {
|
|
26
|
+
this.coldStart = coldStart;
|
|
27
|
+
setWillNotDraw(coldStart);
|
|
28
|
+
}
|
|
29
|
+
|
|
19
30
|
@Override
|
|
20
31
|
protected void finalize() throws Throwable {
|
|
21
32
|
super.finalize();
|
|
22
33
|
mHybridData.resetNative();
|
|
23
34
|
}
|
|
24
35
|
|
|
36
|
+
@Override
|
|
37
|
+
protected void onDraw(Canvas canvas) {
|
|
38
|
+
super.onDraw(canvas);
|
|
39
|
+
|
|
40
|
+
// Skip the warming up feature if coldStart is true or running on software renderer
|
|
41
|
+
if (coldStart || !canvas.isHardwareAccelerated()) {
|
|
42
|
+
return; // Skip warmup on cold start or software rendering
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Get the view dimensions
|
|
46
|
+
int width = getWidth();
|
|
47
|
+
int height = getHeight();
|
|
48
|
+
|
|
49
|
+
if (width > 0 && height > 0) {
|
|
50
|
+
// Get the bitmap data from native
|
|
51
|
+
int[] pixels = getBitmap(width, height);
|
|
52
|
+
|
|
53
|
+
if (pixels != null && pixels.length == width * height) {
|
|
54
|
+
// Create bitmap from pixels
|
|
55
|
+
Bitmap bitmap = Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888);
|
|
56
|
+
|
|
57
|
+
// Draw the bitmap on the canvas
|
|
58
|
+
paint.setFilterBitmap(true);
|
|
59
|
+
canvas.drawBitmap(bitmap, 0, 0, paint);
|
|
60
|
+
// Let GC release the bitmap; recycling immediately breaks hardware-accelerated draws.
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
25
65
|
private native HybridData initHybrid(SkiaManager skiaManager);
|
|
26
66
|
|
|
27
67
|
protected native void surfaceAvailable(Object surface, int width, int height, boolean opaque);
|
|
@@ -37,4 +77,6 @@ public class SkiaPictureView extends SkiaBaseView {
|
|
|
37
77
|
protected native void registerView(int nativeId);
|
|
38
78
|
|
|
39
79
|
protected native void unregisterView();
|
|
80
|
+
|
|
81
|
+
protected native int[] getBitmap(int width, int height);
|
|
40
82
|
}
|
|
@@ -36,4 +36,9 @@ public class SkiaPictureViewManager extends SkiaBaseViewManager<SkiaPictureView>
|
|
|
36
36
|
public void setColorSpace(SkiaPictureView view, @Nullable String value) {
|
|
37
37
|
// nothing to do here at the moment
|
|
38
38
|
}
|
|
39
|
+
|
|
40
|
+
@Override
|
|
41
|
+
public void setColdStart(SkiaPictureView view, boolean value) {
|
|
42
|
+
view.setColdStart(value);
|
|
43
|
+
}
|
|
39
44
|
}
|
package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerDelegate.java
CHANGED
|
@@ -22,11 +22,17 @@ public class SkiaPictureViewManagerDelegate<T extends View, U extends BaseViewMa
|
|
|
22
22
|
@Override
|
|
23
23
|
public void setProperty(T view, String propName, @Nullable Object value) {
|
|
24
24
|
switch (propName) {
|
|
25
|
+
case "debug":
|
|
26
|
+
mViewManager.setDebug(view, value != null && (boolean) value);
|
|
27
|
+
break;
|
|
25
28
|
case "opaque":
|
|
26
29
|
mViewManager.setOpaque(view, value != null && (boolean) value);
|
|
27
30
|
break;
|
|
28
|
-
case "
|
|
29
|
-
mViewManager.
|
|
31
|
+
case "colorSpace":
|
|
32
|
+
mViewManager.setColorSpace(view, value == null ? null : (String) value);
|
|
33
|
+
break;
|
|
34
|
+
case "coldStart":
|
|
35
|
+
mViewManager.setColdStart(view, value != null && (boolean) value);
|
|
30
36
|
break;
|
|
31
37
|
default:
|
|
32
38
|
super.setProperty(view, propName, value);
|
package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerInterface.java
CHANGED
|
@@ -18,4 +18,5 @@ public interface SkiaPictureViewManagerInterface<T extends View> {
|
|
|
18
18
|
void setDebug(T view, boolean value);
|
|
19
19
|
void setOpaque(T view, boolean value);
|
|
20
20
|
void setColorSpace(SkiaPictureView view, @Nullable String value);
|
|
21
|
+
void setColdStart(T view, boolean value);
|
|
21
22
|
}
|
|
@@ -30,12 +30,16 @@
|
|
|
30
30
|
#include <TargetConditionals.h>
|
|
31
31
|
#if TARGET_RT_BIG_ENDIAN
|
|
32
32
|
#define FourCC2Str(fourcc) \
|
|
33
|
-
(const char[]){
|
|
34
|
-
|
|
33
|
+
(const char[]) { \
|
|
34
|
+
*((char *)&fourcc), *(((char *)&fourcc) + 1), *(((char *)&fourcc) + 2), \
|
|
35
|
+
*(((char *)&fourcc) + 3), 0 \
|
|
36
|
+
}
|
|
35
37
|
#else
|
|
36
38
|
#define FourCC2Str(fourcc) \
|
|
37
|
-
(const char[]){
|
|
38
|
-
|
|
39
|
+
(const char[]) { \
|
|
40
|
+
*(((char *)&fourcc) + 3), *(((char *)&fourcc) + 2), \
|
|
41
|
+
*(((char *)&fourcc) + 1), *(((char *)&fourcc) + 0), 0 \
|
|
42
|
+
}
|
|
39
43
|
#endif
|
|
40
44
|
|
|
41
45
|
// pragma MARK: TextureHolder
|
|
@@ -246,10 +246,18 @@ public:
|
|
|
246
246
|
|
|
247
247
|
// Get glyph widths
|
|
248
248
|
int glyphsSize = static_cast<int>(ids);
|
|
249
|
+
|
|
250
|
+
// Validate glyph count
|
|
251
|
+
if (glyphsSize > numGlyphIds) {
|
|
252
|
+
throw std::runtime_error(
|
|
253
|
+
"Glyph count mismatch: got " + std::to_string(glyphsSize) +
|
|
254
|
+
" glyphs but expected " + std::to_string(numGlyphIds));
|
|
255
|
+
}
|
|
256
|
+
|
|
249
257
|
std::vector<SkScalar> widthPtrs;
|
|
250
258
|
widthPtrs.resize(glyphsSize);
|
|
251
259
|
font->getWidthsBounds(
|
|
252
|
-
SkSpan(glyphIds.data(),
|
|
260
|
+
SkSpan(glyphIds.data(), glyphsSize),
|
|
253
261
|
SkSpan(static_cast<SkScalar *>(widthPtrs.data()), widthPtrs.size()),
|
|
254
262
|
{},
|
|
255
263
|
nullptr); // TODO: Should we use paint somehow here?
|
|
@@ -260,7 +268,7 @@ public:
|
|
|
260
268
|
auto cont = meas.next();
|
|
261
269
|
auto dist = initialOffset;
|
|
262
270
|
|
|
263
|
-
for (
|
|
271
|
+
for (int i = 0; i < glyphsSize && cont != nullptr; ++i) {
|
|
264
272
|
auto width = widthPtrs[i];
|
|
265
273
|
dist += width / 2;
|
|
266
274
|
if (dist > cont->length()) {
|
|
@@ -349,7 +349,7 @@ public:
|
|
|
349
349
|
|
|
350
350
|
// This has no basis in reality but since since these are private long-lived
|
|
351
351
|
// objects, we think it is more than fine.
|
|
352
|
-
size_t getMemoryPressure() const override { return
|
|
352
|
+
size_t getMemoryPressure() const override { return 5 * 1024 * 1024; }
|
|
353
353
|
|
|
354
354
|
std::string getObjectType() const override { return "JsiRecorder"; }
|
|
355
355
|
|
|
@@ -148,7 +148,8 @@ const Canvas = ({
|
|
|
148
148
|
debug: debug,
|
|
149
149
|
opaque: opaque,
|
|
150
150
|
colorSpace: colorSpace,
|
|
151
|
-
|
|
151
|
+
coldStart: false,
|
|
152
|
+
onLayout: _Platform.Platform.OS === "web" && (onSize || onLayout) ? onLayoutWeb : onLayout
|
|
152
153
|
}, viewProps));
|
|
153
154
|
};
|
|
154
155
|
exports.Canvas = Canvas;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_ReanimatedProxy","_interopRequireDefault","_SkiaViewNativeId","_SkiaPictureViewNativeComponent","_Reconciler","_skia","_Platform","_external","_global","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","useCanvasRef","useRef","exports","useReanimatedFrame","HAS_REANIMATED_3","Rea","useFrameCallback","measure","useCanvasRefPriv","useAnimatedRef","useCanvasSize","userRef","ourRef","ref","size","setSize","useState","width","height","useLayoutEffect","current","_x","_y","isFabric","Boolean","global","nativeFabricUIManager","Canvas","debug","opaque","children","onSize","colorSpace","onLayout","viewProps","console","error","viewRef","nativeId","useMemo","SkiaViewNativeId","root","SkiaSGRoot","Skia","result","value","render","useEffect","unmount","useImperativeHandle","makeImageSnapshot","rect","SkiaViewApi","makeImageSnapshotAsync","redraw","requestRedraw","getNativeId","callback","_viewRef$current","measureInWindow","_viewRef$current2","onLayoutWeb","useCallback","Platform","OS","nativeEvent","layout","createElement","collapsable","nativeID"],"sources":["Canvas.tsx"],"sourcesContent":["import type { FC, RefObject } from \"react\";\nimport React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n LayoutChangeEvent,\n MeasureInWindowOnSuccessCallback,\n MeasureOnSuccessCallback,\n View,\n ViewProps,\n} from \"react-native\";\nimport type { AnimatedRef, SharedValue } from \"react-native-reanimated\";\n\nimport Rea from \"../external/reanimated/ReanimatedProxy\";\nimport { SkiaViewNativeId } from \"../views/SkiaViewNativeId\";\nimport SkiaPictureViewNativeComponent from \"../specs/SkiaPictureViewNativeComponent\";\nimport type { SkImage, SkRect, SkSize } from \"../skia/types\";\nimport { SkiaSGRoot } from \"../sksg/Reconciler\";\nimport { Skia } from \"../skia\";\nimport { Platform } from \"../Platform\";\nimport { HAS_REANIMATED_3 } from \"../external\";\n\nexport interface CanvasRef extends FC<CanvasProps> {\n makeImageSnapshot(rect?: SkRect): SkImage;\n makeImageSnapshotAsync(rect?: SkRect): Promise<SkImage>;\n redraw(): void;\n getNativeId(): number;\n measure(callback: MeasureOnSuccessCallback): void;\n measureInWindow(callback: MeasureInWindowOnSuccessCallback): void;\n}\n\nexport const useCanvasRef = () => useRef<CanvasRef>(null);\n\nconst useReanimatedFrame = !HAS_REANIMATED_3 ? () => {} : Rea.useFrameCallback;\nconst measure = !HAS_REANIMATED_3 ? null : Rea.measure;\n\nconst useCanvasRefPriv: typeof useRef<View> = !HAS_REANIMATED_3\n ? useRef\n : Rea.useAnimatedRef;\n\nexport const useCanvasSize = (userRef?: RefObject<CanvasRef | null>) => {\n const ourRef = useCanvasRef();\n const ref = userRef ?? ourRef;\n const [size, setSize] = useState<SkSize>({ width: 0, height: 0 });\n useLayoutEffect(() => {\n if (ref.current) {\n ref.current.measure((_x, _y, width, height) => {\n setSize({ width, height });\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return { ref, size };\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const isFabric = Boolean((global as any)?.nativeFabricUIManager);\n\nexport interface CanvasProps extends Omit<ViewProps, \"onLayout\"> {\n debug?: boolean;\n opaque?: boolean;\n onSize?: SharedValue<SkSize>;\n colorSpace?: \"p3\" | \"srgb\";\n ref?: React.Ref<CanvasRef>;\n __destroyWebGLContextAfterRender?: boolean;\n}\n\nexport const Canvas = ({\n debug,\n opaque,\n children,\n onSize,\n colorSpace = \"p3\",\n ref,\n // Here know this is a type error but this is done on purpose to check it at runtime\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n onLayout,\n ...viewProps\n}: CanvasProps) => {\n if (onLayout && isFabric) {\n console.error(\n \"<Canvas onLayout={onLayout} /> is not supported on the new architecture, to fix the issue, see: https://shopify.github.io/react-native-skia/docs/canvas/overview/#getting-the-canvas-size\"\n );\n }\n const viewRef = useCanvasRefPriv(null);\n // Native ID\n const nativeId = useMemo(() => {\n return SkiaViewNativeId.current++;\n }, []);\n\n // Root\n const root = useMemo(() => new SkiaSGRoot(Skia, nativeId), [nativeId]);\n\n useReanimatedFrame(() => {\n \"worklet\";\n if (onSize && measure) {\n const result = measure(viewRef as AnimatedRef<View>);\n if (result) {\n const { width, height } = result;\n if (onSize.value.width !== width || onSize.value.height !== height) {\n onSize.value = { width, height };\n }\n }\n }\n }, !!onSize);\n\n // Render effects\n useLayoutEffect(() => {\n root.render(children);\n }, [children, root, nativeId]);\n\n useEffect(() => {\n return () => {\n root.unmount();\n };\n }, [root]);\n\n // Component methods\n useImperativeHandle(\n ref,\n () =>\n ({\n makeImageSnapshot: (rect?: SkRect) => {\n return SkiaViewApi.makeImageSnapshot(nativeId, rect);\n },\n makeImageSnapshotAsync: (rect?: SkRect) => {\n return SkiaViewApi.makeImageSnapshotAsync(nativeId, rect);\n },\n redraw: () => {\n SkiaViewApi.requestRedraw(nativeId);\n },\n getNativeId: () => {\n return nativeId;\n },\n measure: (callback) => {\n viewRef.current?.measure(callback);\n },\n measureInWindow: (callback) => {\n viewRef.current?.measureInWindow(callback);\n },\n }) as CanvasRef\n );\n\n const onLayoutWeb = useCallback(\n (e: LayoutChangeEvent) => {\n if (onLayout) {\n onLayout(e);\n }\n if (Platform.OS === \"web\" && onSize) {\n const { width, height } = e.nativeEvent.layout;\n onSize.value = { width, height };\n }\n },\n [onLayout, onSize]\n );\n\n return (\n <SkiaPictureViewNativeComponent\n ref={viewRef}\n collapsable={false}\n nativeID={`${nativeId}`}\n debug={debug}\n opaque={opaque}\n colorSpace={colorSpace}\n onLayout={onLayoutWeb}\n {...viewProps}\n />\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_ReanimatedProxy","_interopRequireDefault","_SkiaViewNativeId","_SkiaPictureViewNativeComponent","_Reconciler","_skia","_Platform","_external","_global","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","useCanvasRef","useRef","exports","useReanimatedFrame","HAS_REANIMATED_3","Rea","useFrameCallback","measure","useCanvasRefPriv","useAnimatedRef","useCanvasSize","userRef","ourRef","ref","size","setSize","useState","width","height","useLayoutEffect","current","_x","_y","isFabric","Boolean","global","nativeFabricUIManager","Canvas","debug","opaque","children","onSize","colorSpace","onLayout","viewProps","console","error","viewRef","nativeId","useMemo","SkiaViewNativeId","root","SkiaSGRoot","Skia","result","value","render","useEffect","unmount","useImperativeHandle","makeImageSnapshot","rect","SkiaViewApi","makeImageSnapshotAsync","redraw","requestRedraw","getNativeId","callback","_viewRef$current","measureInWindow","_viewRef$current2","onLayoutWeb","useCallback","Platform","OS","nativeEvent","layout","createElement","collapsable","nativeID","coldStart"],"sources":["Canvas.tsx"],"sourcesContent":["import type { FC, RefObject } from \"react\";\nimport React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n LayoutChangeEvent,\n MeasureInWindowOnSuccessCallback,\n MeasureOnSuccessCallback,\n View,\n ViewProps,\n} from \"react-native\";\nimport type { AnimatedRef, SharedValue } from \"react-native-reanimated\";\n\nimport Rea from \"../external/reanimated/ReanimatedProxy\";\nimport { SkiaViewNativeId } from \"../views/SkiaViewNativeId\";\nimport SkiaPictureViewNativeComponent from \"../specs/SkiaPictureViewNativeComponent\";\nimport type { SkImage, SkRect, SkSize } from \"../skia/types\";\nimport { SkiaSGRoot } from \"../sksg/Reconciler\";\nimport { Skia } from \"../skia\";\nimport { Platform } from \"../Platform\";\nimport { HAS_REANIMATED_3 } from \"../external\";\n\nexport interface CanvasRef extends FC<CanvasProps> {\n makeImageSnapshot(rect?: SkRect): SkImage;\n makeImageSnapshotAsync(rect?: SkRect): Promise<SkImage>;\n redraw(): void;\n getNativeId(): number;\n measure(callback: MeasureOnSuccessCallback): void;\n measureInWindow(callback: MeasureInWindowOnSuccessCallback): void;\n}\n\nexport const useCanvasRef = () => useRef<CanvasRef>(null);\n\nconst useReanimatedFrame = !HAS_REANIMATED_3 ? () => {} : Rea.useFrameCallback;\nconst measure = !HAS_REANIMATED_3 ? null : Rea.measure;\n\nconst useCanvasRefPriv: typeof useRef<View> = !HAS_REANIMATED_3\n ? useRef\n : Rea.useAnimatedRef;\n\nexport const useCanvasSize = (userRef?: RefObject<CanvasRef | null>) => {\n const ourRef = useCanvasRef();\n const ref = userRef ?? ourRef;\n const [size, setSize] = useState<SkSize>({ width: 0, height: 0 });\n useLayoutEffect(() => {\n if (ref.current) {\n ref.current.measure((_x, _y, width, height) => {\n setSize({ width, height });\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return { ref, size };\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const isFabric = Boolean((global as any)?.nativeFabricUIManager);\n\nexport interface CanvasProps extends Omit<ViewProps, \"onLayout\"> {\n debug?: boolean;\n opaque?: boolean;\n onSize?: SharedValue<SkSize>;\n colorSpace?: \"p3\" | \"srgb\";\n ref?: React.Ref<CanvasRef>;\n __destroyWebGLContextAfterRender?: boolean;\n}\n\nexport const Canvas = ({\n debug,\n opaque,\n children,\n onSize,\n colorSpace = \"p3\",\n ref,\n // Here know this is a type error but this is done on purpose to check it at runtime\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n onLayout,\n ...viewProps\n}: CanvasProps) => {\n if (onLayout && isFabric) {\n console.error(\n \"<Canvas onLayout={onLayout} /> is not supported on the new architecture, to fix the issue, see: https://shopify.github.io/react-native-skia/docs/canvas/overview/#getting-the-canvas-size\"\n );\n }\n const viewRef = useCanvasRefPriv(null);\n // Native ID\n const nativeId = useMemo(() => {\n return SkiaViewNativeId.current++;\n }, []);\n\n // Root\n const root = useMemo(() => new SkiaSGRoot(Skia, nativeId), [nativeId]);\n\n useReanimatedFrame(() => {\n \"worklet\";\n if (onSize && measure) {\n const result = measure(viewRef as AnimatedRef<View>);\n if (result) {\n const { width, height } = result;\n if (onSize.value.width !== width || onSize.value.height !== height) {\n onSize.value = { width, height };\n }\n }\n }\n }, !!onSize);\n\n // Render effects\n useLayoutEffect(() => {\n root.render(children);\n }, [children, root, nativeId]);\n\n useEffect(() => {\n return () => {\n root.unmount();\n };\n }, [root]);\n\n // Component methods\n useImperativeHandle(\n ref,\n () =>\n ({\n makeImageSnapshot: (rect?: SkRect) => {\n return SkiaViewApi.makeImageSnapshot(nativeId, rect);\n },\n makeImageSnapshotAsync: (rect?: SkRect) => {\n return SkiaViewApi.makeImageSnapshotAsync(nativeId, rect);\n },\n redraw: () => {\n SkiaViewApi.requestRedraw(nativeId);\n },\n getNativeId: () => {\n return nativeId;\n },\n measure: (callback) => {\n viewRef.current?.measure(callback);\n },\n measureInWindow: (callback) => {\n viewRef.current?.measureInWindow(callback);\n },\n }) as CanvasRef\n );\n\n const onLayoutWeb = useCallback(\n (e: LayoutChangeEvent) => {\n if (onLayout) {\n onLayout(e);\n }\n if (Platform.OS === \"web\" && onSize) {\n const { width, height } = e.nativeEvent.layout;\n onSize.value = { width, height };\n }\n },\n [onLayout, onSize]\n );\n return (\n <SkiaPictureViewNativeComponent\n ref={viewRef}\n collapsable={false}\n nativeID={`${nativeId}`}\n debug={debug}\n opaque={opaque}\n colorSpace={colorSpace}\n coldStart={false}\n onLayout={\n Platform.OS === \"web\" && (onSize || onLayout) ? onLayoutWeb : onLayout\n }\n {...viewProps}\n />\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -30,12 +30,6 @@ class NativeReanimatedContainer extends _StaticContainer.Container {
|
|
|
30
30
|
this.nativeId = nativeId;
|
|
31
31
|
_defineProperty(this, "mapperId", null);
|
|
32
32
|
_defineProperty(this, "picture", void 0);
|
|
33
|
-
_defineProperty(this, "recorderA", void 0);
|
|
34
|
-
_defineProperty(this, "recorderB", void 0);
|
|
35
|
-
_defineProperty(this, "currentRecorder", void 0);
|
|
36
|
-
this.recorderA = new _ReanimatedRecorder.ReanimatedRecorder(Skia);
|
|
37
|
-
this.recorderB = new _ReanimatedRecorder.ReanimatedRecorder(Skia);
|
|
38
|
-
this.currentRecorder = this.recorderA;
|
|
39
33
|
this.picture = Skia.Picture.MakePicture(null);
|
|
40
34
|
}
|
|
41
35
|
redraw() {
|
|
@@ -45,23 +39,23 @@ class NativeReanimatedContainer extends _StaticContainer.Container {
|
|
|
45
39
|
if (this.unmounted) {
|
|
46
40
|
return;
|
|
47
41
|
}
|
|
48
|
-
|
|
49
|
-
// Swap to the next recorder (double buffering)
|
|
50
|
-
const recorder = this.currentRecorder;
|
|
51
|
-
this.currentRecorder = this.currentRecorder === this.recorderA ? this.recorderB : this.recorderA;
|
|
42
|
+
const recorder = new _ReanimatedRecorder.ReanimatedRecorder(this.Skia);
|
|
52
43
|
const {
|
|
53
44
|
nativeId,
|
|
54
|
-
picture
|
|
45
|
+
picture,
|
|
46
|
+
Skia
|
|
55
47
|
} = this;
|
|
56
|
-
recorder.reset();
|
|
57
48
|
(0, _Visitor.visit)(recorder, this.root);
|
|
58
49
|
const sharedValues = recorder.getSharedValues();
|
|
59
50
|
const sharedRecorder = recorder.getRecorder();
|
|
60
|
-
|
|
51
|
+
// Draw first frame
|
|
52
|
+
_ReanimatedProxy.default.executeOnUIRuntimeSync(() => {
|
|
61
53
|
"worklet";
|
|
62
54
|
|
|
63
|
-
|
|
55
|
+
const firstPicture = Skia.Picture.MakePicture(null);
|
|
56
|
+
nativeDrawOnscreen(nativeId, sharedRecorder, firstPicture);
|
|
64
57
|
})();
|
|
58
|
+
// Animate
|
|
65
59
|
if (sharedValues.length > 0) {
|
|
66
60
|
this.mapperId = _ReanimatedProxy.default.startMapper(() => {
|
|
67
61
|
"worklet";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_ReanimatedProxy","_interopRequireDefault","require","_renderHelpers","_ReanimatedRecorder","_StaticContainer","_Visitor","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","nativeDrawOnscreen","nativeId","recorder","picture","play","SkiaViewApi","setJsiProperty","NativeReanimatedContainer","Container","constructor","Skia","
|
|
1
|
+
{"version":3,"names":["_ReanimatedProxy","_interopRequireDefault","require","_renderHelpers","_ReanimatedRecorder","_StaticContainer","_Visitor","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","nativeDrawOnscreen","nativeId","recorder","picture","play","SkiaViewApi","setJsiProperty","NativeReanimatedContainer","Container","constructor","Skia","Picture","MakePicture","redraw","mapperId","Rea","stopMapper","unmounted","ReanimatedRecorder","visit","root","sharedValues","getSharedValues","sharedRecorder","getRecorder","executeOnUIRuntimeSync","firstPicture","length","startMapper","applyUpdates","createContainer","HAS_REANIMATED_3","StaticContainer","exports"],"sources":["Container.native.ts"],"sourcesContent":["import Rea from \"../external/reanimated/ReanimatedProxy\";\nimport type { Skia, SkPicture } from \"../skia/types\";\nimport { HAS_REANIMATED_3 } from \"../external/reanimated/renderHelpers\";\nimport type { JsiRecorder } from \"../skia/types/Recorder\";\n\nimport { ReanimatedRecorder } from \"./Recorder/ReanimatedRecorder\";\nimport { Container, StaticContainer } from \"./StaticContainer\";\nimport { visit } from \"./Recorder/Visitor\";\n\nimport \"../skia/NativeSetup\";\nimport \"../views/api\";\n\nconst nativeDrawOnscreen = (\n nativeId: number,\n recorder: JsiRecorder,\n picture: SkPicture\n) => {\n \"worklet\";\n\n //const start = performance.now();\n recorder.play(picture);\n //const end = performance.now();\n //console.log(\"Recording time: \", end - start);\n SkiaViewApi.setJsiProperty(nativeId, \"picture\", picture);\n};\n\nclass NativeReanimatedContainer extends Container {\n private mapperId: number | null = null;\n private picture: SkPicture;\n\n constructor(\n Skia: Skia,\n private nativeId: number\n ) {\n super(Skia);\n this.picture = Skia.Picture.MakePicture(null)!;\n }\n\n redraw() {\n if (this.mapperId !== null) {\n Rea.stopMapper(this.mapperId);\n }\n if (this.unmounted) {\n return;\n }\n const recorder = new ReanimatedRecorder(this.Skia);\n const { nativeId, picture, Skia } = this;\n visit(recorder, this.root);\n const sharedValues = recorder.getSharedValues();\n const sharedRecorder = recorder.getRecorder();\n // Draw first frame\n Rea.executeOnUIRuntimeSync(() => {\n \"worklet\";\n const firstPicture = Skia.Picture.MakePicture(null)!;\n nativeDrawOnscreen(nativeId, sharedRecorder, firstPicture);\n })();\n // Animate\n if (sharedValues.length > 0) {\n this.mapperId = Rea.startMapper(() => {\n \"worklet\";\n sharedRecorder.applyUpdates(sharedValues);\n nativeDrawOnscreen(nativeId, sharedRecorder, picture);\n }, sharedValues);\n }\n }\n}\n\nexport const createContainer = (Skia: Skia, nativeId: number) => {\n if (HAS_REANIMATED_3 && nativeId !== -1) {\n return new NativeReanimatedContainer(Skia, nativeId);\n } else {\n return new StaticContainer(Skia, nativeId);\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -24,8 +24,9 @@ class SkiaSGRoot {
|
|
|
24
24
|
this.Skia = Skia;
|
|
25
25
|
_defineProperty(this, "root", void 0);
|
|
26
26
|
_defineProperty(this, "container", void 0);
|
|
27
|
+
const strictMode = false;
|
|
27
28
|
this.container = (0, _Container.createContainer)(Skia, nativeId);
|
|
28
|
-
this.root = skiaReconciler.createContainer(this.container, 0, null,
|
|
29
|
+
this.root = skiaReconciler.createContainer(this.container, 0, null, strictMode, null, "", console.error, null);
|
|
29
30
|
}
|
|
30
31
|
get sg() {
|
|
31
32
|
const children = this.container.root;
|
|
@@ -39,7 +40,6 @@ class SkiaSGRoot {
|
|
|
39
40
|
updateContainer(element) {
|
|
40
41
|
return new Promise(resolve => {
|
|
41
42
|
skiaReconciler.updateContainer(element, this.root, null, () => {
|
|
42
|
-
(0, _HostConfig.debug)("updateContainer");
|
|
43
43
|
resolve(true);
|
|
44
44
|
});
|
|
45
45
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactReconciler","_interopRequireDefault","require","_types","_HostConfig","_Container","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","skiaReconciler","ReactReconciler","sksgHostConfig","injectIntoDevTools","bundleType","version","rendererPackageName","SkiaSGRoot","constructor","Skia","nativeId","container","createContainer","root","console","error","sg","children","type","NodeType","Group","props","isDeclaration","updateContainer","element","Promise","resolve","
|
|
1
|
+
{"version":3,"names":["_reactReconciler","_interopRequireDefault","require","_types","_HostConfig","_Container","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","skiaReconciler","ReactReconciler","sksgHostConfig","injectIntoDevTools","bundleType","version","rendererPackageName","SkiaSGRoot","constructor","Skia","nativeId","strictMode","container","createContainer","root","console","error","sg","children","type","NodeType","Group","props","isDeclaration","updateContainer","element","Promise","resolve","render","mount","redraw","drawOnCanvas","canvas","getPicture","recorder","PictureRecorder","beginRecording","finishRecordingAsPicture","unmount","debug","exports"],"sources":["Reconciler.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport type { OpaqueRoot } from \"react-reconciler\";\nimport ReactReconciler from \"react-reconciler\";\n\nimport type { SkCanvas, Skia } from \"../skia/types\";\nimport { NodeType } from \"../dom/types\";\n\nimport { debug, sksgHostConfig } from \"./HostConfig\";\nimport type { Container } from \"./StaticContainer\";\nimport { createContainer } from \"./Container\";\n\nimport \"./Elements\";\n\nconst skiaReconciler = ReactReconciler(sksgHostConfig);\n\nskiaReconciler.injectIntoDevTools({\n bundleType: 1,\n version: \"0.0.1\",\n rendererPackageName: \"react-native-skia\",\n});\n\nexport class SkiaSGRoot {\n private root: OpaqueRoot;\n private container: Container;\n\n constructor(\n public Skia: Skia,\n nativeId = -1\n ) {\n const strictMode = false;\n this.container = createContainer(Skia, nativeId);\n this.root = skiaReconciler.createContainer(\n this.container,\n 0,\n null,\n strictMode,\n null,\n \"\",\n console.error,\n null\n );\n }\n\n get sg() {\n const children = this.container.root;\n return { type: NodeType.Group, props: {}, children, isDeclaration: false };\n }\n\n private updateContainer(element: ReactNode) {\n return new Promise((resolve) => {\n skiaReconciler.updateContainer(element, this.root, null, () => {\n resolve(true);\n });\n });\n }\n\n async render(element: ReactNode) {\n this.container.mount();\n await this.updateContainer(element);\n this.container.redraw();\n }\n\n drawOnCanvas(canvas: SkCanvas) {\n this.container.drawOnCanvas(canvas);\n }\n\n getPicture() {\n const recorder = this.Skia.PictureRecorder();\n const canvas = recorder.beginRecording();\n this.drawOnCanvas(canvas);\n return recorder.finishRecordingAsPicture();\n }\n\n unmount() {\n this.container.unmount();\n return new Promise((resolve) => {\n skiaReconciler.updateContainer(null, this.root, null, () => {\n debug(\"unmountContainer\");\n resolve(true);\n });\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,6 +3,7 @@ export interface NativeProps extends ViewProps {
|
|
|
3
3
|
debug?: boolean;
|
|
4
4
|
opaque?: boolean;
|
|
5
5
|
colorSpace?: string;
|
|
6
|
+
coldStart?: boolean;
|
|
6
7
|
}
|
|
7
8
|
declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<NativeProps>;
|
|
8
9
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sources":["SkiaPictureViewNativeComponent.ts"],"sourcesContent":["import codegenNativeComponent from \"react-native/Libraries/Utilities/codegenNativeComponent\";\nimport type { ViewProps } from \"react-native\";\n\nexport interface NativeProps extends ViewProps {\n debug?: boolean;\n opaque?: boolean;\n colorSpace?: string;\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default codegenNativeComponent<NativeProps>(\"SkiaPictureView\");\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;
|
|
1
|
+
{"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sources":["SkiaPictureViewNativeComponent.ts"],"sourcesContent":["import codegenNativeComponent from \"react-native/Libraries/Utilities/codegenNativeComponent\";\nimport type { ViewProps } from \"react-native\";\n\nexport interface NativeProps extends ViewProps {\n debug?: boolean;\n opaque?: boolean;\n colorSpace?: string;\n coldStart?: boolean;\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default codegenNativeComponent<NativeProps>(\"SkiaPictureView\");\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAU7F;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GACe,IAAAG,+BAAsB,EAAc,iBAAiB,CAAC","ignoreList":[]}
|
|
@@ -3,6 +3,7 @@ import type { SkRect } from "../skia/types";
|
|
|
3
3
|
import type { SkiaPictureViewNativeProps } from "./types";
|
|
4
4
|
interface SkiaPictureViewProps extends SkiaPictureViewNativeProps {
|
|
5
5
|
mode?: "default" | "continuous";
|
|
6
|
+
coldStart?: boolean;
|
|
6
7
|
}
|
|
7
8
|
export declare class SkiaPictureView extends React.Component<SkiaPictureViewProps> {
|
|
8
9
|
private requestId;
|
|
@@ -86,13 +86,15 @@ class SkiaPictureView extends _react.default.Component {
|
|
|
86
86
|
mode,
|
|
87
87
|
debug = false,
|
|
88
88
|
opaque = false,
|
|
89
|
+
coldStart = false,
|
|
89
90
|
...viewProps
|
|
90
91
|
} = this.props;
|
|
91
92
|
return /*#__PURE__*/_react.default.createElement(NativeSkiaPictureView, _extends({
|
|
92
93
|
collapsable: false,
|
|
93
94
|
nativeID: `${this._nativeId}`,
|
|
94
95
|
debug: debug,
|
|
95
|
-
opaque: opaque
|
|
96
|
+
opaque: opaque,
|
|
97
|
+
coldStart: coldStart
|
|
96
98
|
}, viewProps));
|
|
97
99
|
}
|
|
98
100
|
}
|