@shopify/react-native-skia 0.1.121 → 0.1.124
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 +3 -1
- package/android/cpp/jni/JniSkiaDrawView.cpp +14 -71
- package/android/cpp/jni/JniSkiaManager.cpp +1 -1
- package/android/cpp/jni/include/JniSkiaDrawView.h +18 -22
- package/android/cpp/jni/include/JniSkiaManager.h +4 -4
- package/android/cpp/rnskia-android/RNSkDrawViewImpl.cpp +68 -0
- package/android/cpp/rnskia-android/RNSkDrawViewImpl.h +48 -0
- package/android/cpp/{jni/include/JniPlatformContextWrapper.h → rnskia-android/RNSkPlatformContextImpl.h} +4 -4
- package/android/cpp/{jni → rnskia-android}/SkiaOpenGLRenderer.cpp +39 -54
- package/android/cpp/{jni/include → rnskia-android}/SkiaOpenGLRenderer.h +2 -31
- package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaViewManager.java +1 -1
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java +21 -28
- package/cpp/api/JsiSkApi.h +2 -0
- package/cpp/api/JsiSkColor.h +49 -0
- package/cpp/api/JsiSkPath.h +31 -2
- package/cpp/api/JsiSkPathFactory.h +96 -1
- package/cpp/api/third_party/CSSColorParser.h +324 -0
- package/cpp/rnskia/RNSkAnimation.h +3 -8
- package/cpp/rnskia/RNSkDrawView.cpp +84 -126
- package/cpp/rnskia/RNSkDrawView.h +7 -37
- package/cpp/rnskia/RNSkJsiViewApi.h +8 -5
- package/cpp/rnskia/RNSkManager.cpp +2 -2
- package/cpp/rnskia/RNSkManager.h +2 -2
- package/cpp/rnskia/RNSkPlatformContext.h +1 -1
- package/cpp/rnskia/RNSkValueApi.h +6 -2
- package/cpp/rnskia/values/RNSkClockValue.h +21 -13
- package/cpp/rnskia/values/RNSkDerivedValue.h +13 -6
- package/cpp/rnskia/values/RNSkReadonlyValue.h +17 -16
- package/cpp/rnskia/values/RNSkValue.h +8 -3
- package/cpp/utils/RNSkTimingInfo.h +13 -1
- package/ios/RNSkia-iOS/RNSkDrawViewImpl.h +8 -10
- package/ios/RNSkia-iOS/RNSkDrawViewImpl.mm +25 -10
- package/ios/RNSkia-iOS/SkiaDrawView.mm +21 -16
- package/lib/commonjs/renderer/Canvas.js +17 -8
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/renderer/components/Paint.js +1 -1
- package/lib/commonjs/renderer/components/Paint.js.map +1 -1
- package/lib/commonjs/renderer/components/colorFilters/Lerp.js +1 -1
- package/lib/commonjs/renderer/components/colorFilters/Lerp.js.map +1 -1
- package/lib/commonjs/renderer/components/shaders/Shader.js +2 -2
- package/lib/commonjs/renderer/components/shaders/Shader.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/Path.js +10 -2
- package/lib/commonjs/renderer/components/shapes/Path.js.map +1 -1
- package/lib/commonjs/renderer/nodes/Node.js +3 -3
- package/lib/commonjs/renderer/nodes/Node.js.map +1 -1
- package/lib/commonjs/renderer/processors/Circles.js +3 -2
- package/lib/commonjs/renderer/processors/Circles.js.map +1 -1
- package/lib/commonjs/renderer/processors/Font.js +1 -1
- package/lib/commonjs/renderer/processors/Font.js.map +1 -1
- package/lib/commonjs/renderer/processors/Paint.js +6 -1
- package/lib/commonjs/renderer/processors/Paint.js.map +1 -1
- package/lib/commonjs/renderer/processors/Rects.js +6 -6
- package/lib/commonjs/renderer/processors/Rects.js.map +1 -1
- package/lib/commonjs/skia/Color.js +3 -25
- package/lib/commonjs/skia/Color.js.map +1 -1
- package/lib/commonjs/skia/Image/Image.js.map +1 -1
- package/lib/commonjs/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
- package/lib/commonjs/skia/Paint/Paint.js +13 -1
- package/lib/commonjs/skia/Paint/Paint.js.map +1 -1
- package/lib/commonjs/skia/Paint/usePaint.js +2 -4
- package/lib/commonjs/skia/Paint/usePaint.js.map +1 -1
- package/lib/commonjs/skia/Path/Path.js +13 -1
- package/lib/commonjs/skia/Path/Path.js.map +1 -1
- package/lib/commonjs/skia/Shader/Shader.js.map +1 -1
- package/lib/commonjs/skia/Skia.js +43 -3
- package/lib/commonjs/skia/Skia.js.map +1 -1
- package/lib/commonjs/values/animation/timing/functions/getResolvedParams.js +3 -3
- package/lib/commonjs/values/animation/timing/functions/getResolvedParams.js.map +1 -1
- package/lib/module/renderer/Canvas.js +12 -6
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/renderer/components/Paint.js +2 -2
- package/lib/module/renderer/components/Paint.js.map +1 -1
- package/lib/module/renderer/components/colorFilters/Lerp.js +1 -1
- package/lib/module/renderer/components/colorFilters/Lerp.js.map +1 -1
- package/lib/module/renderer/components/shaders/Shader.js +3 -2
- package/lib/module/renderer/components/shaders/Shader.js.map +1 -1
- package/lib/module/renderer/components/shapes/Path.js +10 -3
- package/lib/module/renderer/components/shapes/Path.js.map +1 -1
- package/lib/module/renderer/nodes/Node.js +3 -3
- package/lib/module/renderer/nodes/Node.js.map +1 -1
- package/lib/module/renderer/processors/Circles.js +3 -2
- package/lib/module/renderer/processors/Circles.js.map +1 -1
- package/lib/module/renderer/processors/Font.js +1 -1
- package/lib/module/renderer/processors/Font.js.map +1 -1
- package/lib/module/renderer/processors/Paint.js +6 -1
- package/lib/module/renderer/processors/Paint.js.map +1 -1
- package/lib/module/renderer/processors/Rects.js +5 -6
- package/lib/module/renderer/processors/Rects.js.map +1 -1
- package/lib/module/skia/Color.js +2 -21
- package/lib/module/skia/Color.js.map +1 -1
- package/lib/module/skia/Image/Image.js.map +1 -1
- package/lib/module/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
- package/lib/module/skia/Paint/Paint.js +6 -0
- package/lib/module/skia/Paint/Paint.js.map +1 -1
- package/lib/module/skia/Paint/usePaint.js +2 -3
- package/lib/module/skia/Paint/usePaint.js.map +1 -1
- package/lib/module/skia/Path/Path.js +11 -0
- package/lib/module/skia/Path/Path.js.map +1 -1
- package/lib/module/skia/Shader/Shader.js.map +1 -1
- package/lib/module/skia/Skia.js +45 -2
- package/lib/module/skia/Skia.js.map +1 -1
- package/lib/module/values/animation/timing/functions/getResolvedParams.js +3 -3
- package/lib/module/values/animation/timing/functions/getResolvedParams.js.map +1 -1
- package/lib/typescript/src/renderer/Canvas.d.ts +6 -0
- package/lib/typescript/src/renderer/components/shapes/Path.d.ts +3 -1
- package/lib/typescript/src/renderer/processors/Paint.d.ts +2 -1
- package/lib/typescript/src/skia/Color.d.ts +0 -1
- package/lib/typescript/src/skia/Image/Image.d.ts +3 -3
- package/lib/typescript/src/skia/ImageFilter/ImageFilterFactory.d.ts +2 -2
- package/lib/typescript/src/skia/Paint/Paint.d.ts +3 -2
- package/lib/typescript/src/skia/Path/Path.d.ts +13 -0
- package/lib/typescript/src/skia/Path/PathFactory.d.ts +7 -1
- package/lib/typescript/src/skia/Picture/Picture.d.ts +2 -2
- package/lib/typescript/src/skia/RuntimeEffect/RuntimeEffect.d.ts +3 -3
- package/lib/typescript/src/skia/Shader/Shader.d.ts +2 -2
- package/lib/typescript/src/skia/Shader/ShaderFactory.d.ts +9 -9
- package/lib/typescript/src/skia/Skia.d.ts +5 -3
- package/lib/typescript/src/values/animation/types.d.ts +5 -5
- package/package.json +1 -1
- package/scripts/install-npm.js +1 -1
- package/src/renderer/Canvas.tsx +13 -6
- package/src/renderer/components/Paint.tsx +2 -2
- package/src/renderer/components/colorFilters/Lerp.tsx +1 -1
- package/src/renderer/components/shaders/Shader.tsx +1 -1
- package/src/renderer/components/shapes/Path.tsx +12 -4
- package/src/renderer/nodes/Node.ts +3 -3
- package/src/renderer/processors/Circles.ts +2 -1
- package/src/renderer/processors/Font.ts +1 -1
- package/src/renderer/processors/Paint.ts +5 -0
- package/src/renderer/processors/Rects.ts +3 -2
- package/src/skia/Color.ts +3 -20
- package/src/skia/Image/Image.ts +3 -3
- package/src/skia/ImageFilter/ImageFilterFactory.ts +2 -2
- package/src/skia/Paint/Paint.ts +9 -2
- package/src/skia/Paint/usePaint.ts +2 -4
- package/src/skia/Path/Path.ts +16 -0
- package/src/skia/Path/PathFactory.ts +8 -1
- package/src/skia/Picture/Picture.ts +2 -2
- package/src/skia/RuntimeEffect/RuntimeEffect.ts +4 -4
- package/src/skia/Shader/Shader.ts +2 -2
- package/src/skia/Shader/ShaderFactory.ts +9 -9
- package/src/skia/Skia.ts +47 -3
- package/src/values/animation/timing/functions/getResolvedParams.ts +2 -2
- package/src/values/animation/types.ts +5 -5
|
@@ -4,9 +4,7 @@
|
|
|
4
4
|
#include <algorithm>
|
|
5
5
|
#include <functional>
|
|
6
6
|
#include <chrono>
|
|
7
|
-
#include <mutex>
|
|
8
7
|
#include <unordered_map>
|
|
9
|
-
#include <utility>
|
|
10
8
|
#include <memory>
|
|
11
9
|
|
|
12
10
|
#include <jsi/jsi.h>
|
|
@@ -22,16 +20,15 @@ using namespace facebook;
|
|
|
22
20
|
Implements a readonly Value that is updated every time the screen is redrawn. Its value will be the
|
|
23
21
|
number of milliseconds since the animation value was started.
|
|
24
22
|
*/
|
|
25
|
-
class RNSkReadonlyValue : public JsiSkHostObject
|
|
23
|
+
class RNSkReadonlyValue : public JsiSkHostObject,
|
|
24
|
+
public std::enable_shared_from_this<RNSkReadonlyValue>
|
|
26
25
|
{
|
|
27
26
|
public:
|
|
28
27
|
RNSkReadonlyValue(std::shared_ptr<RNSkPlatformContext> platformContext)
|
|
29
28
|
: JsiSkHostObject(platformContext),
|
|
30
|
-
_propNameId(jsi::PropNameID::forUtf8(*platformContext->getJsRuntime(), "value")) {}
|
|
29
|
+
_propNameId(jsi::PropNameID::forUtf8(*platformContext->getJsRuntime(), "value")) { }
|
|
31
30
|
|
|
32
|
-
~RNSkReadonlyValue() {
|
|
33
|
-
_invalidated = true;
|
|
34
|
-
}
|
|
31
|
+
virtual ~RNSkReadonlyValue() { }
|
|
35
32
|
|
|
36
33
|
JSI_PROPERTY_GET(__typename__) {
|
|
37
34
|
return jsi::String::createFromUtf8(runtime, "RNSkValue");
|
|
@@ -43,8 +40,7 @@ public:
|
|
|
43
40
|
|
|
44
41
|
JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(RNSkReadonlyValue, __typename__),
|
|
45
42
|
JSI_EXPORT_PROP_GET(RNSkReadonlyValue, current))
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
|
|
48
44
|
JSI_HOST_FUNCTION(addListener) {
|
|
49
45
|
if(!arguments[0].isObject() || !arguments[0].asObject(runtime).isFunction(runtime)) {
|
|
50
46
|
jsi::detail::throwJSError(runtime, "Expected function as first parameter.");
|
|
@@ -52,8 +48,13 @@ public:
|
|
|
52
48
|
}
|
|
53
49
|
auto callback = std::make_shared<jsi::Function>(arguments[0].asObject(runtime).asFunction(runtime));
|
|
54
50
|
|
|
55
|
-
auto unsubscribe = addListener([
|
|
56
|
-
|
|
51
|
+
auto unsubscribe = addListener([weakSelf = weak_from_this(),
|
|
52
|
+
callback = std::move(callback)](jsi::Runtime& runtime){
|
|
53
|
+
auto self = weakSelf.lock();
|
|
54
|
+
if(self) {
|
|
55
|
+
auto selfReadonlyValue = std::dynamic_pointer_cast<RNSkReadonlyValue>(self);
|
|
56
|
+
callback->call(runtime, selfReadonlyValue->get_current(runtime));
|
|
57
|
+
}
|
|
57
58
|
});
|
|
58
59
|
|
|
59
60
|
return jsi::Function::createFromHostFunction(runtime,
|
|
@@ -76,9 +77,10 @@ public:
|
|
|
76
77
|
std::lock_guard<std::mutex> lock(_mutex);
|
|
77
78
|
auto listenerId = _listenerId++;
|
|
78
79
|
_listeners.emplace(listenerId, cb);
|
|
79
|
-
return [
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
return [weakSelf = weak_from_this(), listenerId]() {
|
|
81
|
+
auto self = weakSelf.lock();
|
|
82
|
+
if(self) {
|
|
83
|
+
self->removeListener(listenerId);
|
|
82
84
|
}
|
|
83
85
|
};
|
|
84
86
|
}
|
|
@@ -104,6 +106,7 @@ public:
|
|
|
104
106
|
}
|
|
105
107
|
|
|
106
108
|
protected:
|
|
109
|
+
|
|
107
110
|
/**
|
|
108
111
|
Notifies listeners about changes
|
|
109
112
|
@param runtime Current JS Runtime
|
|
@@ -128,8 +131,6 @@ protected:
|
|
|
128
131
|
_listeners.erase(listenerId);
|
|
129
132
|
}
|
|
130
133
|
|
|
131
|
-
std::atomic<bool> _invalidated = { false };
|
|
132
|
-
|
|
133
134
|
private:
|
|
134
135
|
jsi::PropNameID _propNameId;
|
|
135
136
|
std::shared_ptr<jsi::Object> _valueHolder;
|
|
@@ -76,11 +76,16 @@ public:
|
|
|
76
76
|
|
|
77
77
|
private:
|
|
78
78
|
void subscribe(std::shared_ptr<RNSkAnimation> animation) {
|
|
79
|
-
unsubscribe();
|
|
80
79
|
if(animation != nullptr) {
|
|
81
80
|
_animation = animation;
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
_unsubscribe = std::make_shared<std::function<void()>>(
|
|
82
|
+
_animation->addListener([weakSelf = weak_from_this()](jsi::Runtime &runtime) {
|
|
83
|
+
auto self = weakSelf.lock();
|
|
84
|
+
if(self) {
|
|
85
|
+
auto selfAsThis = std::dynamic_pointer_cast<RNSkValue>(self);
|
|
86
|
+
selfAsThis->animationDidUpdate(runtime);
|
|
87
|
+
}
|
|
88
|
+
}));
|
|
84
89
|
// Start the animation
|
|
85
90
|
_animation->startClock();
|
|
86
91
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include <RNSkLog.h>
|
|
3
4
|
#include <chrono>
|
|
4
5
|
|
|
5
6
|
#define NUMBER_OF_DURATION_SAMPLES 10
|
|
@@ -12,7 +13,7 @@ using ms = duration<float, std::milli>;
|
|
|
12
13
|
|
|
13
14
|
class RNSkTimingInfo {
|
|
14
15
|
public:
|
|
15
|
-
RNSkTimingInfo() {
|
|
16
|
+
RNSkTimingInfo(const std::string &name): _name(std::move(name)) {
|
|
16
17
|
reset();
|
|
17
18
|
}
|
|
18
19
|
|
|
@@ -25,6 +26,7 @@ public:
|
|
|
25
26
|
_prevFpsTimer = -1;
|
|
26
27
|
_frameCount = 0;
|
|
27
28
|
_lastFrameCount = -1;
|
|
29
|
+
_didSkip = false;
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
void beginTiming() {
|
|
@@ -35,6 +37,14 @@ public:
|
|
|
35
37
|
time_point<steady_clock> stop = high_resolution_clock::now();
|
|
36
38
|
addLastDuration(duration_cast<milliseconds>(stop - _start).count());
|
|
37
39
|
tick(stop);
|
|
40
|
+
if(_didSkip) {
|
|
41
|
+
_didSkip = false;
|
|
42
|
+
RNSkLogger::logToConsole("%s: Skipped frame. Previous frame time: %lldms", _name.c_str(), _lastDuration);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
void markSkipped() {
|
|
47
|
+
_didSkip = true;
|
|
38
48
|
}
|
|
39
49
|
|
|
40
50
|
long getAverage() { return static_cast<long>(_average); }
|
|
@@ -86,6 +96,8 @@ private:
|
|
|
86
96
|
long _prevFpsTimer;
|
|
87
97
|
double _frameCount;
|
|
88
98
|
double _lastFrameCount;
|
|
99
|
+
double _didSkip;
|
|
100
|
+
std::string _name;
|
|
89
101
|
};
|
|
90
102
|
|
|
91
103
|
} // namespace RNSkia
|
|
@@ -21,25 +21,23 @@
|
|
|
21
21
|
class RNSkDrawViewImpl : public RNSkia::RNSkDrawView {
|
|
22
22
|
public:
|
|
23
23
|
RNSkDrawViewImpl(std::shared_ptr<RNSkia::RNSkPlatformContext> context);
|
|
24
|
+
~RNSkDrawViewImpl();
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
CALayer* getLayer() { return _layer; }
|
|
26
27
|
|
|
27
|
-
|
|
28
|
+
void setSize(int width, int height);
|
|
28
29
|
|
|
29
30
|
protected:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
void onInvalidated() override {
|
|
33
|
-
setNativeDrawFunc(nullptr);
|
|
34
|
-
};
|
|
31
|
+
float getScaledWidth() override { return _width * _context->getPixelDensity(); };
|
|
32
|
+
float getScaledHeight() override { return _height * _context->getPixelDensity(); };
|
|
35
33
|
|
|
36
34
|
private:
|
|
37
|
-
void
|
|
35
|
+
void drawPicture(const sk_sp<SkPicture> picture) override;
|
|
38
36
|
bool createSkiaSurface();
|
|
39
37
|
|
|
40
38
|
int _nativeId;
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
float _width = -1;
|
|
40
|
+
float _height = -1;
|
|
43
41
|
|
|
44
42
|
#pragma clang diagnostic push
|
|
45
43
|
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
|
|
@@ -19,19 +19,34 @@ sk_sp<GrDirectContext> RNSkDrawViewImpl::_skContext = nullptr;
|
|
|
19
19
|
|
|
20
20
|
RNSkDrawViewImpl::RNSkDrawViewImpl(std::shared_ptr<RNSkia::RNSkPlatformContext> context):
|
|
21
21
|
_context(context), RNSkia::RNSkDrawView(context) {
|
|
22
|
-
|
|
23
22
|
#pragma clang diagnostic push
|
|
24
23
|
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
|
|
25
|
-
|
|
24
|
+
_layer = [CAMetalLayer layer];
|
|
26
25
|
#pragma clang diagnostic pop
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
_layer.framebufferOnly = NO;
|
|
28
|
+
_layer.device = _device;
|
|
29
|
+
_layer.opaque = false;
|
|
30
|
+
_layer.contentsScale = _context->getPixelDensity();
|
|
31
|
+
_layer.pixelFormat = MTLPixelFormatBGRA8Unorm;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
RNSkDrawViewImpl::~RNSkDrawViewImpl() {
|
|
35
|
+
if([[NSThread currentThread] isMainThread]) {
|
|
36
|
+
_layer = NULL;
|
|
37
|
+
} else {
|
|
38
|
+
__block auto tempLayer = _layer;
|
|
39
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
40
|
+
// By using the tempLayer variable in the block we capture it and it will be
|
|
41
|
+
// released after the block has finished. This way the CAMetalLayer dealloc will
|
|
42
|
+
// only be called on the main thread. Problem: this destructor might be called from
|
|
43
|
+
// releasing the RNSkDrawViewImpl from a thread capture (after dtor has started),
|
|
44
|
+
// which would cause the CAMetalLayer dealloc to be called on another thread which
|
|
45
|
+
// causes a crash.
|
|
46
|
+
// https://github.com/Shopify/react-native-skia/issues/398
|
|
47
|
+
tempLayer = tempLayer;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
35
50
|
}
|
|
36
51
|
|
|
37
52
|
void RNSkDrawViewImpl::setSize(int width, int height) {
|
|
@@ -44,7 +59,7 @@ void RNSkDrawViewImpl::setSize(int width, int height) {
|
|
|
44
59
|
requestRedraw();
|
|
45
60
|
}
|
|
46
61
|
|
|
47
|
-
void RNSkDrawViewImpl::
|
|
62
|
+
void RNSkDrawViewImpl::drawPicture(const sk_sp<SkPicture> picture) {
|
|
48
63
|
if(_width == -1 && _height == -1) {
|
|
49
64
|
return;
|
|
50
65
|
}
|
|
@@ -26,53 +26,58 @@
|
|
|
26
26
|
_nativeId = 0;
|
|
27
27
|
_debugMode = false;
|
|
28
28
|
_drawingMode = RNSkia::RNSkDrawingMode::Default;
|
|
29
|
+
|
|
29
30
|
// Listen to notifications about module invalidation
|
|
31
|
+
__unsafe_unretained SkiaDrawView *weakSelf = self;
|
|
30
32
|
auto nc = [NSNotificationCenter defaultCenter];
|
|
31
33
|
[nc addObserverForName:RCTBridgeWillInvalidateModulesNotification
|
|
32
34
|
object:nil
|
|
33
35
|
queue:nil
|
|
34
36
|
usingBlock:^(NSNotification *notification){
|
|
35
|
-
// Remove local variables
|
|
36
|
-
|
|
37
|
+
// Remove local variables when the bridge is teared down.
|
|
38
|
+
weakSelf->_impl = nullptr;
|
|
39
|
+
weakSelf->_manager = nullptr;
|
|
37
40
|
}];
|
|
38
41
|
}
|
|
39
42
|
return self;
|
|
40
43
|
}
|
|
41
44
|
|
|
42
|
-
- (void)dealloc {
|
|
43
|
-
if(_manager != nullptr) {
|
|
44
|
-
_manager->unregisterSkiaDrawView(_nativeId);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
45
|
#pragma mark Lifecycle
|
|
49
46
|
|
|
50
|
-
- (void)
|
|
51
|
-
[super willMoveToWindow: newWindow];
|
|
52
|
-
|
|
47
|
+
- (void) willMoveToSuperview:(UIView *)newWindow {
|
|
53
48
|
if (newWindow == NULL) {
|
|
54
49
|
// Remove implementation view when the parent view is not set
|
|
55
50
|
if(_impl != nullptr) {
|
|
51
|
+
[_impl->getLayer() removeFromSuperlayer];
|
|
52
|
+
|
|
56
53
|
if(_nativeId != 0 && _manager != nullptr) {
|
|
57
54
|
_manager->setSkiaDrawView(_nativeId, nullptr);
|
|
58
55
|
}
|
|
59
|
-
|
|
56
|
+
|
|
60
57
|
_impl = nullptr;
|
|
61
58
|
}
|
|
62
59
|
} else {
|
|
63
60
|
// Create implementation view when the parent view is set
|
|
64
61
|
if(_impl == nullptr && _manager != nullptr) {
|
|
65
62
|
_impl = std::make_shared<RNSkDrawViewImpl>(_manager->getPlatformContext());
|
|
66
|
-
[self.layer addSublayer:_impl->getLayer()];
|
|
63
|
+
[self.layer addSublayer: _impl->getLayer()];
|
|
67
64
|
if(_nativeId != 0) {
|
|
68
|
-
_manager->setSkiaDrawView(_nativeId, _impl
|
|
65
|
+
_manager->setSkiaDrawView(_nativeId, _impl);
|
|
69
66
|
}
|
|
70
67
|
_impl->setDrawingMode(_drawingMode);
|
|
71
|
-
_impl->setShowDebugOverlays(_debugMode);
|
|
68
|
+
_impl->setShowDebugOverlays(_debugMode);
|
|
72
69
|
}
|
|
73
70
|
}
|
|
74
71
|
}
|
|
75
72
|
|
|
73
|
+
- (void) dealloc {
|
|
74
|
+
auto nc = [NSNotificationCenter defaultCenter];
|
|
75
|
+
[nc removeObserver:self name:RCTBridgeWillInvalidateModulesNotification object:nil];
|
|
76
|
+
if(_manager != nullptr && _nativeId != 0) {
|
|
77
|
+
_manager->unregisterSkiaDrawView(_nativeId);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
76
81
|
#pragma mark Layout
|
|
77
82
|
|
|
78
83
|
- (void) layoutSubviews {
|
|
@@ -103,7 +108,7 @@
|
|
|
103
108
|
_nativeId = nativeId;
|
|
104
109
|
|
|
105
110
|
if(_impl != nullptr) {
|
|
106
|
-
_manager->registerSkiaDrawView(nativeId, _impl
|
|
111
|
+
_manager->registerSkiaDrawView(nativeId, _impl);
|
|
107
112
|
}
|
|
108
113
|
}
|
|
109
114
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.useCanvasSize = exports.useCanvasRef = exports.skiaReconciler = exports.Canvas = void 0;
|
|
6
|
+
exports.useCanvasSize = exports.useCanvasRef = exports.useCanvas = exports.skiaReconciler = exports.Canvas = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
|
|
@@ -15,6 +15,8 @@ var _skia = require("../skia");
|
|
|
15
15
|
|
|
16
16
|
var _useValue = require("../values/hooks/useValue");
|
|
17
17
|
|
|
18
|
+
var _Paint = require("../skia/Paint/Paint");
|
|
19
|
+
|
|
18
20
|
var _HostConfig = require("./HostConfig");
|
|
19
21
|
|
|
20
22
|
var _processors = require("./processors");
|
|
@@ -32,14 +34,23 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
32
34
|
// import { debugTree } from "./nodes";
|
|
33
35
|
const CanvasContext = /*#__PURE__*/_react.default.createContext(null);
|
|
34
36
|
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
+
const useCanvas = () => {
|
|
38
|
+
const size = (0, _react.useContext)(CanvasContext);
|
|
37
39
|
|
|
38
|
-
if (!
|
|
40
|
+
if (!size) {
|
|
39
41
|
throw new Error("Canvas context is not available");
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
return
|
|
44
|
+
return {
|
|
45
|
+
size
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
exports.useCanvas = useCanvas;
|
|
50
|
+
|
|
51
|
+
const useCanvasSize = () => {
|
|
52
|
+
console.warn("useCanvasSize is deprecated, use the size member of useCanvas() instead.");
|
|
53
|
+
return useCanvas().size;
|
|
43
54
|
};
|
|
44
55
|
|
|
45
56
|
exports.useCanvasSize = useCanvasSize;
|
|
@@ -109,9 +120,7 @@ const Canvas = /*#__PURE__*/(0, _react.forwardRef)((_ref, forwardedRef) => {
|
|
|
109
120
|
};
|
|
110
121
|
}
|
|
111
122
|
|
|
112
|
-
const paint =
|
|
113
|
-
|
|
114
|
-
paint.setAntiAlias(true);
|
|
123
|
+
const paint = (0, _Paint.SkiaPaint)();
|
|
115
124
|
const ctx = {
|
|
116
125
|
width,
|
|
117
126
|
height,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Canvas.tsx"],"names":["CanvasContext","React","createContext","
|
|
1
|
+
{"version":3,"sources":["Canvas.tsx"],"names":["CanvasContext","React","createContext","useCanvas","size","Error","useCanvasSize","console","warn","skiaReconciler","skHostConfig","injectIntoDevTools","bundleType","version","rendererPackageName","render","element","root","container","updateContainer","depMgr","subscribe","useCanvasRef","defaultFontMgr","Skia","FontMgr","RefDefault","Canvas","forwardedRef","children","style","debug","mode","onTouch","fontMgr","canvasCtx","width","height","innerRef","ref","useCombinedRefs","tick","setTick","redraw","t","Container","DependencyManager","createContainer","onDraw","canvas","info","timestamp","touches","current","paint","ctx","opacity","center","draw","unsubscribe","refs","targetRef","useRef","useEffect","forEach"],"mappings":"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","sourcesContent":["import React, {\n useEffect,\n useState,\n useCallback,\n useMemo,\n useContext,\n forwardRef,\n useRef,\n} from \"react\";\nimport type {\n RefObject,\n ReactNode,\n ComponentProps,\n MutableRefObject,\n ForwardedRef,\n} from \"react\";\nimport type { OpaqueRoot } from \"react-reconciler\";\nimport ReactReconciler from \"react-reconciler\";\n\nimport { SkiaView, useDrawCallback } from \"../views\";\nimport type { TouchHandler } from \"../views\";\nimport { Skia } from \"../skia\";\nimport type { FontMgr } from \"../skia/FontMgr/FontMgr\";\nimport { useValue } from \"../values/hooks/useValue\";\nimport type { SkiaReadonlyValue } from \"../values/types\";\nimport { SkiaPaint } from \"../skia/Paint/Paint\";\n\nimport { debug as hostDebug, skHostConfig } from \"./HostConfig\";\n// import { debugTree } from \"./nodes\";\nimport { vec } from \"./processors\";\nimport { Container } from \"./nodes\";\nimport { DependencyManager } from \"./DependencyManager\";\n\nconst CanvasContext = React.createContext<SkiaReadonlyValue<{\n width: number;\n height: number;\n}> | null>(null);\n\nexport const useCanvas = () => {\n const size = useContext(CanvasContext);\n if (!size) {\n throw new Error(\"Canvas context is not available\");\n }\n return { size };\n};\n\nexport const useCanvasSize = () => {\n console.warn(\n \"useCanvasSize is deprecated, use the size member of useCanvas() instead.\"\n );\n return useCanvas().size;\n};\n\nexport const skiaReconciler = ReactReconciler(skHostConfig);\n\nskiaReconciler.injectIntoDevTools({\n bundleType: 1,\n version: \"0.0.1\",\n rendererPackageName: \"react-native-skia\",\n});\n\nconst render = (element: ReactNode, root: OpaqueRoot, container: Container) => {\n skiaReconciler.updateContainer(element, root, null, () => {\n hostDebug(\"updateContainer\");\n\n container.depMgr.subscribe();\n });\n};\n\nexport const useCanvasRef = () => useRef<SkiaView>(null);\n\nexport interface CanvasProps extends ComponentProps<typeof SkiaView> {\n ref?: RefObject<SkiaView>;\n children: ReactNode;\n onTouch?: TouchHandler;\n fontMgr?: FontMgr;\n}\n\nconst defaultFontMgr = Skia.FontMgr.RefDefault();\n\nexport const Canvas = forwardRef<SkiaView, CanvasProps>(\n ({ children, style, debug, mode, onTouch, fontMgr }, forwardedRef) => {\n const canvasCtx = useValue({ width: 0, height: 0 });\n const innerRef = useCanvasRef();\n const ref = useCombinedRefs(forwardedRef, innerRef);\n const [tick, setTick] = useState(0);\n const redraw = useCallback(() => setTick((t) => t + 1), []);\n\n const container = useMemo(\n () => new Container(new DependencyManager(ref), redraw),\n [redraw, ref]\n );\n\n const root = useMemo(\n () => skiaReconciler.createContainer(container, 0, false, null),\n [container]\n );\n // Render effect\n useEffect(() => {\n render(\n <CanvasContext.Provider value={canvasCtx}>\n {children}\n </CanvasContext.Provider>,\n root,\n container\n );\n }, [children, root, redraw, container, canvasCtx]);\n\n // Draw callback\n const onDraw = useDrawCallback(\n (canvas, info) => {\n // TODO: if tree is empty (count === 1) maybe we should not render?\n const { width, height, timestamp } = info;\n if (onTouch) {\n onTouch(info.touches);\n }\n if (\n width !== canvasCtx.current.width ||\n height !== canvasCtx.current.height\n ) {\n canvasCtx.current = { width, height };\n }\n const paint = SkiaPaint();\n const ctx = {\n width,\n height,\n timestamp,\n canvas,\n paint,\n opacity: 1,\n ref,\n center: vec(width / 2, height / 2),\n fontMgr: fontMgr ?? defaultFontMgr,\n };\n container.draw(ctx);\n },\n [tick, onTouch]\n );\n\n useEffect(() => {\n return () => {\n container.depMgr.unsubscribe();\n };\n }, [container]);\n\n return (\n <SkiaView\n ref={ref}\n style={style}\n onDraw={onDraw}\n mode={mode}\n debug={debug}\n />\n );\n }\n);\n\n/**\n * Combines a list of refs into a single ref. This can be used to provide\n * both a forwarded ref and an internal ref keeping the same functionality\n * on both of the refs.\n * @param refs Array of refs to combine\n * @returns A single ref that can be used in a ref prop.\n */\nconst useCombinedRefs = <T,>(\n ...refs: Array<MutableRefObject<T> | ForwardedRef<T>>\n) => {\n const targetRef = React.useRef<T>(null);\n React.useEffect(() => {\n refs.forEach((ref) => {\n if (ref) {\n if (typeof ref === \"function\") {\n ref(targetRef.current);\n } else {\n ref.current = targetRef.current;\n }\n }\n });\n }, [refs]);\n return targetRef;\n};\n"]}
|
|
@@ -23,7 +23,7 @@ const usePaintRef = () => (0, _react.useRef)(null);
|
|
|
23
23
|
|
|
24
24
|
exports.usePaintRef = usePaintRef;
|
|
25
25
|
const Paint = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
26
|
-
const paint = (0, _react.useMemo)(() => _skia.
|
|
26
|
+
const paint = (0, _react.useMemo)(() => (0, _skia.SkiaPaint)(), []);
|
|
27
27
|
(0, _react.useImperativeHandle)(ref, () => paint, [paint]);
|
|
28
28
|
const onDeclare = (0, _react.useMemo)(() => (0, _nodes.createDeclaration)((paintProps, children, ctx) => (0, _processors.processPaint)(paint, ctx.opacity, paintProps, children)), [paint]);
|
|
29
29
|
return /*#__PURE__*/_react.default.createElement("skDeclaration", _extends({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Paint.tsx"],"names":["usePaintRef","Paint","props","ref","paint","
|
|
1
|
+
{"version":3,"sources":["Paint.tsx"],"names":["usePaintRef","Paint","props","ref","paint","onDeclare","paintProps","children","ctx","opacity"],"mappings":";;;;;;;AACA;;AAGA;;AAEA;;AACA;;;;;;;;AAEO,MAAMA,WAAW,GAAG,MAAM,mBAAgB,IAAhB,CAA1B;;;AAMA,MAAMC,KAAK,gBAAG,uBACnB,CAACC,KAAD,EAAQC,GAAR,KAAgB;AACd,QAAMC,KAAK,GAAG,oBAAQ,MAAM,sBAAd,EAA2B,EAA3B,CAAd;AACA,kCAAoBD,GAApB,EAAyB,MAAMC,KAA/B,EAAsC,CAACA,KAAD,CAAtC;AACA,QAAMC,SAAS,GAAG,oBAChB,MACE,8BAA8B,CAACC,UAAD,EAAaC,QAAb,EAAuBC,GAAvB,KAC5B,8BAAaJ,KAAb,EAAoBI,GAAG,CAACC,OAAxB,EAAiCH,UAAjC,EAA6CC,QAA7C,CADF,CAFc,EAKhB,CAACH,KAAD,CALgB,CAAlB;AAOA,sBAAO;AAAe,IAAA,SAAS,EAAEC;AAA1B,KAAyCH,KAAzC,EAAP;AACD,CAZkB,CAAd","sourcesContent":["import type { ReactNode } from \"react\";\nimport React, { useRef, useMemo, forwardRef, useImperativeHandle } from \"react\";\n\nimport type { SkPaint } from \"../../skia\";\nimport { SkiaPaint } from \"../../skia\";\nimport type { CustomPaintProps, AnimatedProps } from \"../processors\";\nimport { processPaint } from \"../processors\";\nimport { createDeclaration } from \"../nodes\";\n\nexport const usePaintRef = () => useRef<SkPaint>(null);\n\nexport interface PaintProps extends Omit<CustomPaintProps, \"paint\"> {\n children?: ReactNode | ReactNode[];\n}\n\nexport const Paint = forwardRef<SkPaint, AnimatedProps<PaintProps>>(\n (props, ref) => {\n const paint = useMemo(() => SkiaPaint(), []);\n useImperativeHandle(ref, () => paint, [paint]);\n const onDeclare = useMemo(\n () =>\n createDeclaration<PaintProps>((paintProps, children, ctx) =>\n processPaint(paint, ctx.opacity, paintProps, children)\n ),\n [paint]\n );\n return <skDeclaration onDeclare={onDeclare} {...props} />;\n }\n);\n"]}
|
|
@@ -25,7 +25,7 @@ const onDeclare = (0, _Declaration.createDeclaration)((_ref, children) => {
|
|
|
25
25
|
} = _ref;
|
|
26
26
|
const [src, dst] = children.filter(_ColorFilter.isColorFilter);
|
|
27
27
|
|
|
28
|
-
const cf = _skia.Skia.ColorFilter.MakeLerp(t,
|
|
28
|
+
const cf = _skia.Skia.ColorFilter.MakeLerp(t, src, dst);
|
|
29
29
|
|
|
30
30
|
return (0, _Compose.composeColorFilter)(cf, children.filter(c => c !== src && c !== dst));
|
|
31
31
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Lerp.tsx"],"names":["onDeclare","children","t","src","dst","filter","isColorFilter","cf","Skia","ColorFilter","MakeLerp","c","Lerp","props"],"mappings":";;;;;;;AAAA;;AAGA;;AACA;;AAEA;;AAEA;;;;;;AAOA,MAAMA,SAAS,GAAG,oCAA6B,OAAQC,QAAR,KAAqB;AAAA,MAApB;AAAEC,IAAAA;AAAF,GAAoB;AAClE,QAAM,CAACC,GAAD,EAAMC,GAAN,IAAaH,QAAQ,CAACI,MAAT,CAAgBC,0BAAhB,CAAnB;;AACA,QAAMC,EAAE,GAAGC,WAAKC,WAAL,CAAiBC,QAAjB,CAA0BR,CAA1B,
|
|
1
|
+
{"version":3,"sources":["Lerp.tsx"],"names":["onDeclare","children","t","src","dst","filter","isColorFilter","cf","Skia","ColorFilter","MakeLerp","c","Lerp","props"],"mappings":";;;;;;;AAAA;;AAGA;;AACA;;AAEA;;AAEA;;;;;;AAOA,MAAMA,SAAS,GAAG,oCAA6B,OAAQC,QAAR,KAAqB;AAAA,MAApB;AAAEC,IAAAA;AAAF,GAAoB;AAClE,QAAM,CAACC,GAAD,EAAMC,GAAN,IAAaH,QAAQ,CAACI,MAAT,CAAgBC,0BAAhB,CAAnB;;AACA,QAAMC,EAAE,GAAGC,WAAKC,WAAL,CAAiBC,QAAjB,CAA0BR,CAA1B,EAA6BC,GAA7B,EAAkCC,GAAlC,CAAX;;AACA,SAAO,iCACLG,EADK,EAELN,QAAQ,CAACI,MAAT,CAAiBM,CAAD,IAAOA,CAAC,KAAKR,GAAN,IAAaQ,CAAC,KAAKP,GAA1C,CAFK,CAAP;AAID,CAPiB,CAAlB;;AASO,MAAMQ,IAAI,GAAIC,KAAD,IAAqC;AACvD,sBAAO;AAAe,IAAA,SAAS,EAAEb;AAA1B,KAAyCa,KAAzC,EAAP;AACD,CAFM","sourcesContent":["import React from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport { Skia } from \"../../../skia\";\nimport { createDeclaration } from \"../../nodes/Declaration\";\nimport type { AnimatedProps } from \"../../processors/Animations/Animations\";\nimport { isColorFilter } from \"../../../skia/ColorFilter/ColorFilter\";\n\nimport { composeColorFilter } from \"./Compose\";\n\nexport interface LerpProps {\n t: number;\n children: ReactNode | ReactNode[];\n}\n\nconst onDeclare = createDeclaration<LerpProps>(({ t }, children) => {\n const [src, dst] = children.filter(isColorFilter);\n const cf = Skia.ColorFilter.MakeLerp(t, src, dst);\n return composeColorFilter(\n cf,\n children.filter((c) => c !== src && c !== dst)\n );\n});\n\nexport const Lerp = (props: AnimatedProps<LerpProps>) => {\n return <skDeclaration onDeclare={onDeclare} {...props} />;\n};\n"]}
|
|
@@ -17,8 +17,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
17
17
|
|
|
18
18
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
19
19
|
|
|
20
|
-
// We
|
|
21
|
-
|
|
20
|
+
const isVector = obj => // We have an issue to check property existence on JSI backed instances
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
22
|
obj.x !== undefined && obj.y !== undefined;
|
|
23
23
|
|
|
24
24
|
const processValue = value => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Shader.tsx"],"names":["isVector","obj","x","undefined","y","processValue","value","onDeclare","children","uniforms","source","opaque","transform","processedUniforms","Array","getUniformCount","fill","flatMap","_","i","name","getUniformName","Error","isArray","names","Object","keys","length","usedUniforms","map","unusedUniform","indexOf","filter","n","console","warn","join","makeShaderWithChildren","isShader","Shader","props","defaultProps"],"mappings":";;;;;;;AAAA;;AAGA;;AAGA;;AACA;;;;;;AAEA
|
|
1
|
+
{"version":3,"sources":["Shader.tsx"],"names":["isVector","obj","x","undefined","y","processValue","value","onDeclare","children","uniforms","source","opaque","transform","processedUniforms","Array","getUniformCount","fill","flatMap","_","i","name","getUniformName","Error","isArray","names","Object","keys","length","usedUniforms","map","unusedUniform","indexOf","filter","n","console","warn","join","makeShaderWithChildren","isShader","Shader","props","defaultProps"],"mappings":";;;;;;;AAAA;;AAGA;;AAGA;;AACA;;;;;;AAEA,MAAMA,QAAQ,GAAIC,GAAD,IACf;AACA;AACCA,GAAD,CAAaC,CAAb,KAAmBC,SAAnB,IAAiCF,GAAD,CAAaG,CAAb,KAAmBD,SAHrD;;AAaA,MAAME,YAAY,GAAIC,KAAD,IAAqD;AACxE,MAAIN,QAAQ,CAACM,KAAD,CAAZ,EAAqB;AACnB,WAAO,CAACA,KAAK,CAACJ,CAAP,EAAUI,KAAK,CAACF,CAAhB,CAAP;AACD;;AACD,SAAOE,KAAP;AACD,CALD;;AAcA,MAAMC,SAAS,GAAG,oCAChB,OAA6CC,QAA7C,KAA0D;AAAA,MAAzD;AAAEC,IAAAA,QAAF;AAAYC,IAAAA,MAAZ;AAAoBC,IAAAA,MAApB;AAA4B,OAAGC;AAA/B,GAAyD;AACxD,QAAMC,iBAAiB,GAAG,IAAIC,KAAJ,CAAUJ,MAAM,CAACK,eAAP,EAAV,EACvBC,IADuB,CAClB,CADkB,EAEvBC,OAFuB,CAEf,CAACC,CAAD,EAAIC,CAAJ,KAAU;AACjB,UAAMC,IAAI,GAAGV,MAAM,CAACW,cAAP,CAAsBF,CAAtB,CAAb;AACA,UAAMb,KAAK,GAAGG,QAAQ,CAACW,IAAD,CAAtB;;AACA,QAAId,KAAK,KAAKH,SAAd,EAAyB;AACvB,YAAM,IAAImB,KAAJ,CAAW,kCAAiCF,IAAK,EAAjD,CAAN;AACD;;AACD,QAAIN,KAAK,CAACS,OAAN,CAAcjB,KAAd,CAAJ,EAA0B;AACxB,aAAOA,KAAK,CAACW,OAAN,CAAcZ,YAAd,CAAP;AACD;;AACD,WAAOA,YAAY,CAACC,KAAD,CAAnB;AACD,GAZuB,CAA1B;AAaA,QAAMkB,KAAK,GAAGC,MAAM,CAACC,IAAP,CAAYjB,QAAZ,CAAd;;AACA,MAAIe,KAAK,CAACG,MAAN,GAAejB,MAAM,CAACK,eAAP,EAAnB,EAA6C;AAC3C,UAAMa,YAAY,GAAG,IAAId,KAAJ,CAAUJ,MAAM,CAACK,eAAP,EAAV,EAClBC,IADkB,CACb,CADa,EAElBa,GAFkB,CAEd,CAACX,CAAD,EAAIC,CAAJ,KAAUT,MAAM,CAACW,cAAP,CAAsBF,CAAtB,CAFI,CAArB;AAGA,UAAMW,aAAa,GAAGN,KAAK,CACxBK,GADmB,CACdT,IAAD,IAAU;AACb,UAAIQ,YAAY,CAACG,OAAb,CAAqBX,IAArB,MAA+B,CAAC,CAApC,EAAuC;AACrC,eAAOA,IAAP;AACD;;AACD,aAAO,IAAP;AACD,KANmB,EAOnBY,MAPmB,CAOXC,CAAD,IAAOA,CAAC,KAAK,IAPD,CAAtB;AAQAC,IAAAA,OAAO,CAACC,IAAR,CACE,oCAAoCL,aAAa,CAACM,IAAd,CAAmB,IAAnB,CADtC;AAGD;;AACD,SAAO1B,MAAM,CAAC2B,sBAAP,CACLxB,iBADK,EAELF,MAFK,EAGLH,QAAQ,CAACwB,MAAT,CAAgBM,cAAhB,CAHK,EAIL,6BAAY1B,SAAZ,CAJK,CAAP;AAMD,CAtCe,CAAlB;;AAyCO,MAAM2B,MAAM,GAAIC,KAAD,IAAuC;AAC3D,sBAAO;AAAe,IAAA,SAAS,EAAEjC;AAA1B,KAAyCiC,KAAzC,EAAP;AACD,CAFM;;;AAIPD,MAAM,CAACE,YAAP,GAAsB;AACpBhC,EAAAA,QAAQ,EAAE;AADU,CAAtB","sourcesContent":["import React from \"react\";\nimport type { ReactNode } from \"react\";\n\nimport { isShader } from \"../../../skia\";\nimport type { IRuntimeEffect } from \"../../../skia\";\nimport type { Vector, AnimatedProps, TransformProps } from \"../../processors\";\nimport { createDeclaration } from \"../../nodes/Declaration\";\nimport { localMatrix } from \"../../processors\";\n\nconst isVector = (obj: unknown): obj is Vector =>\n // We have an issue to check property existence on JSI backed instances\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (obj as any).x !== undefined && (obj as any).y !== undefined;\n\ntype UniformValue = number | Vector | readonly number[];\n\ntype Uniform = UniformValue | readonly UniformValue[];\n\ninterface Uniforms {\n [name: string]: Uniform;\n}\n\nconst processValue = (value: UniformValue): number | readonly number[] => {\n if (isVector(value)) {\n return [value.x, value.y];\n }\n return value;\n};\n\nexport interface ShaderProps extends TransformProps {\n source: IRuntimeEffect;\n uniforms: Uniforms;\n opaque?: boolean;\n children?: ReactNode | ReactNode[];\n}\n\nconst onDeclare = createDeclaration<ShaderProps>(\n ({ uniforms, source, opaque, ...transform }, children) => {\n const processedUniforms = new Array(source.getUniformCount())\n .fill(0)\n .flatMap((_, i) => {\n const name = source.getUniformName(i);\n const value = uniforms[name];\n if (value === undefined) {\n throw new Error(`No value specified for uniform ${name}`);\n }\n if (Array.isArray(value)) {\n return value.flatMap(processValue);\n }\n return processValue(value as UniformValue);\n });\n const names = Object.keys(uniforms);\n if (names.length > source.getUniformCount()) {\n const usedUniforms = new Array(source.getUniformCount())\n .fill(0)\n .map((_, i) => source.getUniformName(i));\n const unusedUniform = names\n .map((name) => {\n if (usedUniforms.indexOf(name) === -1) {\n return name;\n }\n return null;\n })\n .filter((n) => n !== null);\n console.warn(\n \"Unused uniforms were provided: \" + unusedUniform.join(\", \")\n );\n }\n return source.makeShaderWithChildren(\n processedUniforms,\n opaque,\n children.filter(isShader),\n localMatrix(transform)\n );\n }\n);\n\nexport const Shader = (props: AnimatedProps<ShaderProps>) => {\n return <skDeclaration onDeclare={onDeclare} {...props} />;\n};\n\nShader.defaultProps = {\n uniforms: [],\n};\n"]}
|
|
@@ -11,6 +11,8 @@ var _nodes = require("../../nodes");
|
|
|
11
11
|
|
|
12
12
|
var _processors = require("../../processors");
|
|
13
13
|
|
|
14
|
+
var _skia = require("../../../skia");
|
|
15
|
+
|
|
14
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
17
|
|
|
16
18
|
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
@@ -24,15 +26,21 @@ const onDraw = (0, _nodes.createDrawing)((_ref, _ref2) => {
|
|
|
24
26
|
start,
|
|
25
27
|
end,
|
|
26
28
|
stroke,
|
|
29
|
+
fillType,
|
|
27
30
|
...pathProps
|
|
28
31
|
} = _ref2;
|
|
29
32
|
const hasStartOffset = start !== 0;
|
|
30
|
-
const hasEndOffset =
|
|
33
|
+
const hasEndOffset = end !== 1;
|
|
31
34
|
const hasStrokeOptions = stroke !== undefined;
|
|
32
|
-
const
|
|
35
|
+
const hasFillType = !!fillType;
|
|
36
|
+
const willMutatePath = hasStartOffset || hasEndOffset || hasStrokeOptions || hasFillType;
|
|
33
37
|
const pristinePath = (0, _processors.processPath)(pathProps.path);
|
|
34
38
|
const path = willMutatePath ? pristinePath.copy() : pristinePath;
|
|
35
39
|
|
|
40
|
+
if (hasFillType) {
|
|
41
|
+
path.setFillType(_skia.FillType[(0, _processors.enumKey)(fillType)]);
|
|
42
|
+
}
|
|
43
|
+
|
|
36
44
|
if (hasStrokeOptions) {
|
|
37
45
|
path.stroke(stroke);
|
|
38
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Path.tsx"],"names":["onDraw","canvas","paint","start","end","stroke","pathProps","hasStartOffset","hasEndOffset","hasStrokeOptions","undefined","willMutatePath","pristinePath","path","copy","trim","drawPath","Path","props","defaultProps"],"mappings":";;;;;;;AAAA;;
|
|
1
|
+
{"version":3,"sources":["Path.tsx"],"names":["onDraw","canvas","paint","start","end","stroke","fillType","pathProps","hasStartOffset","hasEndOffset","hasStrokeOptions","undefined","hasFillType","willMutatePath","pristinePath","path","copy","setFillType","FillType","trim","drawPath","Path","props","defaultProps"],"mappings":";;;;;;;AAAA;;AAQA;;AACA;;AACA;;;;;;AAgBA,MAAMA,MAAM,GAAG,0BACb,iBAAuE;AAAA,MAAtE;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,GAAsE;AAAA,MAAnD;AAAEC,IAAAA,KAAF;AAASC,IAAAA,GAAT;AAAcC,IAAAA,MAAd;AAAsBC,IAAAA,QAAtB;AAAgC,OAAGC;AAAnC,GAAmD;AACrE,QAAMC,cAAc,GAAGL,KAAK,KAAK,CAAjC;AACA,QAAMM,YAAY,GAAGL,GAAG,KAAK,CAA7B;AACA,QAAMM,gBAAgB,GAAGL,MAAM,KAAKM,SAApC;AACA,QAAMC,WAAW,GAAG,CAAC,CAACN,QAAtB;AACA,QAAMO,cAAc,GAClBL,cAAc,IAAIC,YAAlB,IAAkCC,gBAAlC,IAAsDE,WADxD;AAEA,QAAME,YAAY,GAAG,6BAAYP,SAAS,CAACQ,IAAtB,CAArB;AACA,QAAMA,IAAI,GAAGF,cAAc,GAAGC,YAAY,CAACE,IAAb,EAAH,GAAyBF,YAApD;;AACA,MAAIF,WAAJ,EAAiB;AACfG,IAAAA,IAAI,CAACE,WAAL,CAAiBC,eAAS,yBAAQZ,QAAR,CAAT,CAAjB;AACD;;AACD,MAAII,gBAAJ,EAAsB;AACpBK,IAAAA,IAAI,CAACV,MAAL,CAAYA,MAAZ;AACD;;AACD,MAAIG,cAAc,IAAIC,YAAtB,EAAoC;AAClCM,IAAAA,IAAI,CAACI,IAAL,CAAUhB,KAAV,EAAiBC,GAAjB,EAAsB,KAAtB;AACD;;AACDH,EAAAA,MAAM,CAACmB,QAAP,CAAgBL,IAAhB,EAAsBb,KAAtB;AACD,CApBY,CAAf;;AAuBO,MAAMmB,IAAI,GAAIC,KAAD,IAAqC;AACvD,sBAAO;AAAW,IAAA,MAAM,EAAEtB;AAAnB,KAA+BsB,KAA/B,EAAP;AACD,CAFM;;;AAIPD,IAAI,CAACE,YAAL,GAAoB;AAClBpB,EAAAA,KAAK,EAAE,CADW;AAElBC,EAAAA,GAAG,EAAE;AAFa,CAApB","sourcesContent":["import React from \"react\";\n\nimport type {\n CustomPaintProps,\n AnimatedProps,\n PathDef,\n SkEnum,\n} from \"../../processors\";\nimport { createDrawing } from \"../../nodes\";\nimport { processPath, enumKey } from \"../../processors\";\nimport { FillType } from \"../../../skia\";\n\ninterface StrokeOpts {\n width?: number;\n strokeMiterlimit?: number;\n precision?: number;\n}\n\nexport interface PathProps extends CustomPaintProps {\n path: PathDef;\n start: number;\n end: number;\n stroke?: StrokeOpts;\n fillType?: SkEnum<typeof FillType>;\n}\n\nconst onDraw = createDrawing<PathProps>(\n ({ canvas, paint }, { start, end, stroke, fillType, ...pathProps }) => {\n const hasStartOffset = start !== 0;\n const hasEndOffset = end !== 1;\n const hasStrokeOptions = stroke !== undefined;\n const hasFillType = !!fillType;\n const willMutatePath =\n hasStartOffset || hasEndOffset || hasStrokeOptions || hasFillType;\n const pristinePath = processPath(pathProps.path);\n const path = willMutatePath ? pristinePath.copy() : pristinePath;\n if (hasFillType) {\n path.setFillType(FillType[enumKey(fillType)]);\n }\n if (hasStrokeOptions) {\n path.stroke(stroke);\n }\n if (hasStartOffset || hasEndOffset) {\n path.trim(start, end, false);\n }\n canvas.drawPath(path, paint);\n }\n);\n\nexport const Path = (props: AnimatedProps<PathProps>) => {\n return <skDrawing onDraw={onDraw} {...props} />;\n};\n\nPath.defaultProps = {\n start: 0,\n end: 1,\n};\n"]}
|
|
@@ -48,7 +48,9 @@ class Node {
|
|
|
48
48
|
visit(ctx, children) {
|
|
49
49
|
const returnedValues = [];
|
|
50
50
|
(children !== null && children !== void 0 ? children : this.children).forEach(child => {
|
|
51
|
-
if (
|
|
51
|
+
if (child.memoized && child.memoizable) {
|
|
52
|
+
returnedValues.push(child.memoized);
|
|
53
|
+
} else {
|
|
52
54
|
const ret = child.draw(ctx);
|
|
53
55
|
|
|
54
56
|
if (ret) {
|
|
@@ -58,8 +60,6 @@ class Node {
|
|
|
58
60
|
child.memoized = ret;
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
|
-
} else {
|
|
62
|
-
returnedValues.push(child.memoized);
|
|
63
63
|
}
|
|
64
64
|
});
|
|
65
65
|
return returnedValues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Node.ts"],"names":["NodeType","Node","constructor","depMgr","props","_props","unSubscribeNode","subscribeNode","visit","ctx","children","returnedValues","forEach","child","memoized","
|
|
1
|
+
{"version":3,"sources":["Node.ts"],"names":["NodeType","Node","constructor","depMgr","props","_props","unSubscribeNode","subscribeNode","visit","ctx","children","returnedValues","forEach","child","memoized","memoizable","push","ret","draw"],"mappings":";;;;;;;;;IAKYA,Q;;;WAAAA,Q;AAAAA,EAAAA,Q;AAAAA,EAAAA,Q;GAAAA,Q,wBAAAA,Q;;AAOL,MAAeC,IAAf,CAAiC;AAQtCC,EAAAA,WAAW,CAACC,MAAD,EAA4BC,KAA5B,EAAqD;AAAA,sCAPpC,EAOoC;;AAAA;;AAAA,wCALnD,KAKmD;;AAAA,sCAJ3B,IAI2B;;AAAA;;AAAA;;AAC9D,SAAKC,MAAL,GAAcD,KAAd;AACA,SAAKD,MAAL,GAAcA,MAAd;AACA,SAAKA,MAAL,CAAYG,eAAZ,CAA4B,IAA5B;AACA,SAAKH,MAAL,CAAYI,aAAZ,CAA0B,IAA1B,EAAgCH,KAAhC;AACD;;AAIQ,MAALA,KAAK,CAACA,KAAD,EAA0B;AACjC,SAAKD,MAAL,CAAYG,eAAZ,CAA4B,IAA5B;AACA,SAAKH,MAAL,CAAYI,aAAZ,CAA0B,IAA1B,EAAgCH,KAAhC;AACA,SAAKC,MAAL,GAAcD,KAAd;AACD;;AAEQ,MAALA,KAAK,GAAG;AACV,WAAO,KAAKC,MAAZ;AACD;;AAEDG,EAAAA,KAAK,CAACC,GAAD,EAAsBC,QAAtB,EAAyC;AAC5C,UAAMC,cAAkD,GAAG,EAA3D;AACA,KAACD,QAAD,aAACA,QAAD,cAACA,QAAD,GAAa,KAAKA,QAAlB,EAA4BE,OAA5B,CAAqCC,KAAD,IAAW;AAC7C,UAAIA,KAAK,CAACC,QAAN,IAAkBD,KAAK,CAACE,UAA5B,EAAwC;AACtCJ,QAAAA,cAAc,CAACK,IAAf,CAAoBH,KAAK,CAACC,QAA1B;AACD,OAFD,MAEO;AACL,cAAMG,GAAG,GAAGJ,KAAK,CAACK,IAAN,CAAWT,GAAX,CAAZ;;AACA,YAAIQ,GAAJ,EAAS;AACPN,UAAAA,cAAc,CAACK,IAAf,CAAoBC,GAApB;;AACA,cAAIJ,KAAK,CAACE,UAAV,EAAsB;AACpBF,YAAAA,KAAK,CAACC,QAAN,GAAiBG,GAAjB;AACD;AACF;AACF;AACF,KAZD;AAaA,WAAON,cAAP;AACD;;AA3CqC","sourcesContent":["import type { SkJSIInstance } from \"../../skia/JsiInstance\";\nimport type { DependencyManager } from \"../DependencyManager\";\nimport type { DrawingContext } from \"../DrawingContext\";\nimport type { AnimatedProps } from \"../processors\";\n\nexport enum NodeType {\n Declaration = \"skDeclaration\",\n Drawing = \"skDrawing\",\n}\n\ntype DeclarationResult = SkJSIInstance<string> | null;\n\nexport abstract class Node<P = unknown> {\n readonly children: Node[] = [];\n _props: AnimatedProps<P>;\n memoizable = false;\n memoized: DeclarationResult | null = null;\n parent?: Node;\n depMgr: DependencyManager;\n\n constructor(depMgr: DependencyManager, props: AnimatedProps<P>) {\n this._props = props;\n this.depMgr = depMgr;\n this.depMgr.unSubscribeNode(this);\n this.depMgr.subscribeNode(this, props);\n }\n\n abstract draw(ctx: DrawingContext): void | DeclarationResult;\n\n set props(props: AnimatedProps<P>) {\n this.depMgr.unSubscribeNode(this);\n this.depMgr.subscribeNode(this, props);\n this._props = props;\n }\n\n get props() {\n return this._props;\n }\n\n visit(ctx: DrawingContext, children?: Node[]) {\n const returnedValues: Exclude<DeclarationResult, null>[] = [];\n (children ?? this.children).forEach((child) => {\n if (child.memoized && child.memoizable) {\n returnedValues.push(child.memoized);\n } else {\n const ret = child.draw(ctx);\n if (ret) {\n returnedValues.push(ret);\n if (child.memoizable) {\n child.memoized = ret;\n }\n }\n }\n });\n return returnedValues;\n }\n}\n"]}
|
|
@@ -7,8 +7,9 @@ exports.processCircle = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _Vector = require("./math/Vector");
|
|
9
9
|
|
|
10
|
-
const isCircleScalarDef = def => //
|
|
11
|
-
|
|
10
|
+
const isCircleScalarDef = def => // We have an issue to check property existence on JSI backed instances
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
def.cx !== undefined;
|
|
12
13
|
|
|
13
14
|
const processCircle = def => {
|
|
14
15
|
if (isCircleScalarDef(def)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Circles.ts"],"names":["isCircleScalarDef","def","cx","processCircle","c","cy","r"],"mappings":";;;;;;;AACA;;AAeA,MAAMA,iBAAiB,GAAIC,GAAD,IACxB;AACCA,GAAD,CAAaC,
|
|
1
|
+
{"version":3,"sources":["Circles.ts"],"names":["isCircleScalarDef","def","cx","undefined","processCircle","c","cy","r"],"mappings":";;;;;;;AACA;;AAeA,MAAMA,iBAAiB,GAAIC,GAAD,IACxB;AACA;AACCA,GAAD,CAAaC,EAAb,KAAoBC,SAHtB;;AAIO,MAAMC,aAAa,GAAIH,GAAD,IAAoB;AAC/C,MAAID,iBAAiB,CAACC,GAAD,CAArB,EAA4B;AAC1B,WAAO;AAAEI,MAAAA,CAAC,EAAE,iBAAIJ,GAAG,CAACC,EAAR,EAAYD,GAAG,CAACK,EAAhB,CAAL;AAA0BC,MAAAA,CAAC,EAAEN,GAAG,CAACM;AAAjC,KAAP;AACD;;AACD,SAAON,GAAP;AACD,CALM","sourcesContent":["import type { Vector } from \"./math/Vector\";\nimport { vec } from \"./math/Vector\";\n\ninterface PointCircleDef {\n c: Vector;\n r: number;\n}\n\ninterface ScalarCircleDef {\n cx: number;\n cy: number;\n r: number;\n}\n\nexport type CircleDef = PointCircleDef | ScalarCircleDef;\n\nconst isCircleScalarDef = (def: CircleDef): def is ScalarCircleDef =>\n // We have an issue to check property existence on JSI backed instances\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (def as any).cx !== undefined;\nexport const processCircle = (def: CircleDef) => {\n if (isCircleScalarDef(def)) {\n return { c: vec(def.cx, def.cy), r: def.r };\n }\n return def;\n};\n"]}
|