@shopify/react-native-skia 0.1.151 → 0.1.152
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 +4 -5
- package/android/cpp/jni/JniLoad.cpp +7 -5
- package/android/cpp/jni/JniSkiaManager.cpp +2 -15
- package/android/cpp/jni/include/JniSkiaBaseView.h +68 -0
- package/android/cpp/jni/include/JniSkiaDrawView.h +64 -47
- package/android/cpp/jni/include/JniSkiaManager.h +8 -10
- package/android/cpp/jni/include/JniSkiaPictureView.h +96 -0
- package/android/cpp/rnskia-android/{RNSkPlatformContextImpl.h → RNSkAndroidPlatformContext.h} +4 -4
- package/android/cpp/rnskia-android/RNSkAndroidView.h +100 -0
- package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +91 -0
- package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.h +39 -0
- package/android/cpp/rnskia-android/SkiaOpenGLRenderer.cpp +15 -6
- package/android/cpp/rnskia-android/SkiaOpenGLRenderer.h +5 -4
- package/android/src/main/java/com/shopify/reactnative/skia/PlatformContext.java +5 -11
- package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaPackage.java +1 -2
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +143 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java +17 -145
- package/android/src/main/java/com/shopify/reactnative/skia/{RNSkiaViewManager.java → SkiaDrawViewManager.java} +4 -15
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaManager.java +1 -10
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java +45 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureViewManager.java +64 -0
- package/cpp/jsi/JsiValueWrapper.h +11 -0
- package/cpp/rnskia/RNSkInfoParameter.h +4 -14
- package/cpp/rnskia/RNSkJsView.cpp +211 -0
- package/cpp/rnskia/RNSkJsView.h +115 -0
- package/cpp/rnskia/RNSkJsiViewApi.h +6 -6
- package/cpp/rnskia/RNSkManager.cpp +7 -7
- package/cpp/rnskia/RNSkManager.h +7 -7
- package/cpp/rnskia/RNSkPictureView.h +124 -0
- package/cpp/rnskia/RNSkView.h +287 -0
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.h +38 -0
- package/ios/RNSkia-iOS/{RNSkDrawViewImpl.mm → RNSkMetalCanvasProvider.mm} +40 -23
- package/ios/RNSkia-iOS/{PlatformContext.h → RNSkiOSPlatformContext.h} +4 -4
- package/ios/RNSkia-iOS/{PlatformContext.mm → RNSkiOSPlatformContext.mm} +5 -5
- package/ios/RNSkia-iOS/RNSkiOSView.h +34 -0
- package/ios/RNSkia-iOS/SkiaDrawViewManager.mm +19 -11
- package/ios/RNSkia-iOS/SkiaManager.mm +3 -3
- package/ios/RNSkia-iOS/SkiaPictureViewManager.h +8 -0
- package/ios/RNSkia-iOS/SkiaPictureViewManager.mm +51 -0
- package/ios/RNSkia-iOS/SkiaUIView.h +26 -0
- package/ios/RNSkia-iOS/{SkiaDrawView.mm → SkiaUIView.mm} +29 -23
- package/lib/commonjs/views/SkiaBaseWebView.js +213 -0
- package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -0
- package/lib/commonjs/views/SkiaPictureView.js +112 -0
- package/lib/commonjs/views/SkiaPictureView.js.map +1 -0
- package/lib/commonjs/views/SkiaPictureView.web.js +31 -0
- package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -0
- package/lib/commonjs/views/SkiaView.js +1 -1
- package/lib/commonjs/views/SkiaView.js.map +1 -1
- package/lib/commonjs/views/SkiaView.web.js +14 -201
- package/lib/commonjs/views/SkiaView.web.js.map +1 -1
- package/lib/commonjs/views/index.js +13 -0
- package/lib/commonjs/views/index.js.map +1 -1
- package/lib/commonjs/views/types.js.map +1 -1
- package/lib/module/views/SkiaBaseWebView.js +198 -0
- package/lib/module/views/SkiaBaseWebView.js.map +1 -0
- package/lib/module/views/SkiaPictureView.js +94 -0
- package/lib/module/views/SkiaPictureView.js.map +1 -0
- package/lib/module/views/SkiaPictureView.web.js +19 -0
- package/lib/module/views/SkiaPictureView.web.js.map +1 -0
- package/lib/module/views/SkiaView.js +1 -1
- package/lib/module/views/SkiaView.js.map +1 -1
- package/lib/module/views/SkiaView.web.js +15 -199
- package/lib/module/views/SkiaView.web.js.map +1 -1
- package/lib/module/views/index.js +1 -0
- package/lib/module/views/index.js.map +1 -1
- package/lib/module/views/types.js.map +1 -1
- package/lib/typescript/src/views/SkiaBaseWebView.d.ts +58 -0
- package/lib/typescript/src/views/SkiaPictureView.d.ts +27 -0
- package/lib/typescript/src/views/SkiaPictureView.web.d.ts +7 -0
- package/lib/typescript/src/views/SkiaView.d.ts +4 -4
- package/lib/typescript/src/views/SkiaView.web.d.ts +6 -53
- package/lib/typescript/src/views/index.d.ts +1 -0
- package/lib/typescript/src/views/types.d.ts +7 -2
- package/package.json +1 -1
- package/src/views/SkiaBaseWebView.tsx +177 -0
- package/src/views/SkiaPictureView.tsx +93 -0
- package/src/views/SkiaPictureView.web.tsx +23 -0
- package/src/views/SkiaView.tsx +6 -7
- package/src/views/SkiaView.web.tsx +18 -167
- package/src/views/index.ts +1 -0
- package/src/views/types.ts +9 -2
- package/android/cpp/jni/JniSkiaDrawView.cpp +0 -113
- package/android/cpp/rnskia-android/RNSkDrawViewImpl.cpp +0 -73
- package/android/cpp/rnskia-android/RNSkDrawViewImpl.h +0 -48
- package/cpp/rnskia/RNSkDrawView.cpp +0 -315
- package/cpp/rnskia/RNSkDrawView.h +0 -226
- package/ios/RNSkia-iOS/RNSkDrawViewImpl.h +0 -52
- package/ios/RNSkia-iOS/SkiaDrawView.h +0 -23
package/android/CMakeLists.txt
CHANGED
|
@@ -34,18 +34,17 @@ add_library(
|
|
|
34
34
|
SHARED
|
|
35
35
|
"${PROJECT_SOURCE_DIR}/cpp/jni/JniLoad.cpp"
|
|
36
36
|
"${PROJECT_SOURCE_DIR}/cpp/jni/JniSkiaManager.cpp"
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
"${PROJECT_SOURCE_DIR}/cpp/jni/JniPlatformContext.cpp"
|
|
39
|
-
"${PROJECT_SOURCE_DIR}/cpp/rnskia-android/
|
|
39
|
+
"${PROJECT_SOURCE_DIR}/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp"
|
|
40
40
|
"${PROJECT_SOURCE_DIR}/cpp/rnskia-android/SkiaOpenGLRenderer.cpp"
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
"${PROJECT_SOURCE_DIR}/cpp/jsi/JsiHostObject.cpp"
|
|
43
43
|
|
|
44
44
|
"${PROJECT_SOURCE_DIR}/cpp/rnskia/RNSkManager.cpp"
|
|
45
|
-
"${PROJECT_SOURCE_DIR}/cpp/rnskia/
|
|
45
|
+
"${PROJECT_SOURCE_DIR}/cpp/rnskia/RNSkJsView.cpp"
|
|
46
46
|
"${PROJECT_SOURCE_DIR}/cpp/rnskia/RNSkDispatchQueue.cpp"
|
|
47
47
|
|
|
48
|
-
|
|
49
48
|
"${PROJECT_SOURCE_DIR}/cpp/api/third_party/CSSColorParser.cpp"
|
|
50
49
|
|
|
51
50
|
)
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
#include "JniPlatformContext.h"
|
|
2
2
|
#include "JniSkiaDrawView.h"
|
|
3
|
+
#include "JniSkiaPictureView.h"
|
|
3
4
|
#include "JniSkiaManager.h"
|
|
4
5
|
#include <fbjni/fbjni.h>
|
|
5
6
|
#include <jni.h>
|
|
6
7
|
|
|
7
8
|
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
return facebook::jni::initialize(vm, [] {
|
|
10
|
+
RNSkia::JniSkiaManager::registerNatives();
|
|
11
|
+
RNSkia::JniSkiaDrawView::registerNatives();
|
|
12
|
+
RNSkia::JniSkiaPictureView::registerNatives();
|
|
13
|
+
RNSkia::JniPlatformContext::registerNatives();
|
|
14
|
+
});
|
|
13
15
|
}
|
|
@@ -16,13 +16,8 @@ using namespace facebook;
|
|
|
16
16
|
void JniSkiaManager::registerNatives() {
|
|
17
17
|
registerHybrid({
|
|
18
18
|
makeNativeMethod("initHybrid", JniSkiaManager::initHybrid),
|
|
19
|
-
makeNativeMethod(
|
|
20
|
-
|
|
21
|
-
makeNativeMethod("registerSkiaView", JniSkiaManager::registerSkiaView),
|
|
22
|
-
makeNativeMethod(
|
|
23
|
-
"unregisterSkiaView", JniSkiaManager::unregisterSkiaView),
|
|
24
|
-
makeNativeMethod(
|
|
25
|
-
"invalidate", JniSkiaManager::invalidate),
|
|
19
|
+
makeNativeMethod("initializeRuntime", JniSkiaManager::initializeRuntime),
|
|
20
|
+
makeNativeMethod("invalidate", JniSkiaManager::invalidate),
|
|
26
21
|
});
|
|
27
22
|
}
|
|
28
23
|
|
|
@@ -46,12 +41,4 @@ void JniSkiaManager::initializeRuntime() {
|
|
|
46
41
|
_skManager = std::make_shared<RNSkManager>(_jsRuntime, _jsCallInvoker, _context);
|
|
47
42
|
}
|
|
48
43
|
|
|
49
|
-
void JniSkiaManager::registerSkiaView(int viewTag, JniSkiaDrawView *skiaView) {
|
|
50
|
-
_skManager->registerSkiaDrawView(viewTag, skiaView->getDrawViewImpl());
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
void JniSkiaManager::unregisterSkiaView(int viewTag) {
|
|
54
|
-
_skManager->unregisterSkiaDrawView(viewTag);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
44
|
} // namespace RNSkia
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
|
|
5
|
+
#include <fbjni/fbjni.h>
|
|
6
|
+
#include <jni.h>
|
|
7
|
+
#include <jsi/jsi.h>
|
|
8
|
+
|
|
9
|
+
#include <JniSkiaManager.h>
|
|
10
|
+
|
|
11
|
+
namespace RNSkia {
|
|
12
|
+
using namespace facebook;
|
|
13
|
+
using namespace jni;
|
|
14
|
+
|
|
15
|
+
class JniSkiaBaseView {
|
|
16
|
+
public:
|
|
17
|
+
JniSkiaBaseView(jni::alias_ref<JniSkiaManager::javaobject> skiaManager,
|
|
18
|
+
std::shared_ptr<RNSkBaseAndroidView> skiaView) :
|
|
19
|
+
_manager(skiaManager->cthis()),
|
|
20
|
+
_skiaView(skiaView) {}
|
|
21
|
+
|
|
22
|
+
~JniSkiaBaseView() {}
|
|
23
|
+
|
|
24
|
+
std::shared_ptr<RNSkManager> getSkiaManager() { return _manager->getSkiaManager(); };
|
|
25
|
+
|
|
26
|
+
protected:
|
|
27
|
+
virtual void updateTouchPoints(jni::JArrayDouble touches) {
|
|
28
|
+
_skiaView->updateTouchPoints(touches);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
virtual void surfaceAvailable(jobject surface, int width, int height) {
|
|
32
|
+
_skiaView->surfaceAvailable(surface, width, height);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
virtual void surfaceSizeChanged(int width, int height) {
|
|
36
|
+
_skiaView->surfaceSizeChanged(width, height);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
virtual void surfaceDestroyed() {
|
|
40
|
+
_skiaView->surfaceDestroyed();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
virtual void setMode(std::string mode) {
|
|
44
|
+
_skiaView->setMode(mode);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
virtual void setDebugMode(bool show) {
|
|
48
|
+
_skiaView->setShowDebugInfo(show);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
virtual void registerView(int nativeId) {
|
|
52
|
+
getSkiaManager()->registerSkiaView(nativeId,
|
|
53
|
+
_skiaView->getSkiaView());
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
virtual void unregisterView() {
|
|
57
|
+
getSkiaManager()->setSkiaView(_skiaView->getSkiaView()->getNativeId(), nullptr);
|
|
58
|
+
getSkiaManager()->unregisterSkiaView(
|
|
59
|
+
_skiaView->getSkiaView()->getNativeId());
|
|
60
|
+
_skiaView->viewDidUnmount();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private:
|
|
64
|
+
JniSkiaManager *_manager;
|
|
65
|
+
std::shared_ptr<RNSkBaseAndroidView> _skiaView;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
} // namespace RNSkia
|
|
@@ -1,78 +1,95 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
-
#include <map>
|
|
4
3
|
#include <memory>
|
|
5
|
-
#include <thread>
|
|
6
|
-
#include <string>
|
|
7
4
|
|
|
8
5
|
#include <fbjni/fbjni.h>
|
|
9
6
|
#include <jni.h>
|
|
10
7
|
#include <jsi/jsi.h>
|
|
11
|
-
#include <thread>
|
|
12
8
|
|
|
13
|
-
#include <
|
|
9
|
+
#include <RNSkJsView.h>
|
|
10
|
+
#include <RNSkAndroidView.h>
|
|
11
|
+
#include <JniSkiaBaseView.h>
|
|
14
12
|
#include <JniSkiaManager.h>
|
|
15
|
-
#include <JniSkiaDrawView.h>
|
|
16
13
|
|
|
17
|
-
#include <
|
|
14
|
+
#include <android/native_window.h>
|
|
15
|
+
#include <android/native_window_jni.h>
|
|
16
|
+
#include <fbjni/detail/Hybrid.h>
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
#include <SkRefCnt.h>
|
|
21
|
-
#include <gpu/GrBackendSurface.h>
|
|
22
|
-
#include <gpu/GrDirectContext.h>
|
|
23
|
-
|
|
24
|
-
class SkPicture;
|
|
25
|
-
class ANativeWindow;
|
|
26
|
-
|
|
27
|
-
namespace RNSkia
|
|
28
|
-
{
|
|
18
|
+
namespace RNSkia {
|
|
29
19
|
using namespace facebook;
|
|
20
|
+
using namespace jni;
|
|
30
21
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class JniSkiaDrawView : public jni::HybridClass<JniSkiaDrawView>
|
|
34
|
-
{
|
|
22
|
+
class JniSkiaDrawView
|
|
23
|
+
: public HybridClass<JniSkiaDrawView>, public JniSkiaBaseView {
|
|
35
24
|
public:
|
|
36
25
|
static auto constexpr kJavaDescriptor = "Lcom/shopify/reactnative/skia/SkiaDrawView;";
|
|
37
|
-
static auto constexpr TAG = "ReactNativeSkia";
|
|
38
26
|
|
|
39
|
-
static jni::local_ref<jhybriddata>
|
|
40
|
-
|
|
41
|
-
|
|
27
|
+
static jni::local_ref<jhybriddata>
|
|
28
|
+
initHybrid(jni::alias_ref<jhybridobject> jThis,
|
|
29
|
+
jni::alias_ref<JniSkiaManager::javaobject> skiaManager) {
|
|
30
|
+
return makeCxxInstance(jThis, skiaManager);
|
|
31
|
+
}
|
|
42
32
|
|
|
43
|
-
static void registerNatives()
|
|
33
|
+
static void registerNatives() {
|
|
34
|
+
registerHybrid({
|
|
35
|
+
makeNativeMethod("initHybrid", JniSkiaDrawView::initHybrid),
|
|
36
|
+
makeNativeMethod("surfaceAvailable",
|
|
37
|
+
JniSkiaDrawView::surfaceAvailable),
|
|
38
|
+
makeNativeMethod("surfaceDestroyed",
|
|
39
|
+
JniSkiaDrawView::surfaceDestroyed),
|
|
40
|
+
makeNativeMethod("surfaceSizeChanged",
|
|
41
|
+
JniSkiaDrawView::surfaceSizeChanged),
|
|
42
|
+
makeNativeMethod("setMode", JniSkiaDrawView::setMode),
|
|
43
|
+
makeNativeMethod("setDebugMode", JniSkiaDrawView::setDebugMode),
|
|
44
|
+
makeNativeMethod("updateTouchPoints",
|
|
45
|
+
JniSkiaDrawView::updateTouchPoints),
|
|
46
|
+
makeNativeMethod("registerView", JniSkiaDrawView::registerView),
|
|
47
|
+
makeNativeMethod("unregisterView", JniSkiaDrawView::unregisterView)
|
|
48
|
+
});
|
|
49
|
+
}
|
|
44
50
|
|
|
45
|
-
|
|
46
|
-
void
|
|
47
|
-
|
|
51
|
+
protected:
|
|
52
|
+
void updateTouchPoints(jni::JArrayDouble touches) override {
|
|
53
|
+
JniSkiaBaseView::updateTouchPoints(touches);
|
|
54
|
+
}
|
|
48
55
|
|
|
49
|
-
void
|
|
56
|
+
void surfaceAvailable(jobject surface, int width, int height) override {
|
|
57
|
+
JniSkiaBaseView::surfaceAvailable(surface, width, height);
|
|
58
|
+
}
|
|
50
59
|
|
|
51
|
-
|
|
60
|
+
void surfaceSizeChanged(int width, int height) override {
|
|
61
|
+
JniSkiaBaseView::surfaceSizeChanged(width, height);
|
|
62
|
+
}
|
|
52
63
|
|
|
53
|
-
|
|
64
|
+
void surfaceDestroyed() override { JniSkiaBaseView::surfaceDestroyed(); }
|
|
54
65
|
|
|
55
|
-
void
|
|
66
|
+
void setMode(std::string mode) override {
|
|
67
|
+
JniSkiaBaseView::setMode(mode);
|
|
68
|
+
}
|
|
56
69
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
70
|
+
void setDebugMode(bool show) override {
|
|
71
|
+
JniSkiaBaseView::setDebugMode(show);
|
|
72
|
+
}
|
|
60
73
|
|
|
61
|
-
|
|
62
|
-
|
|
74
|
+
void registerView(int nativeId) override {
|
|
75
|
+
JniSkiaBaseView::registerView(nativeId);
|
|
76
|
+
}
|
|
63
77
|
|
|
64
|
-
|
|
78
|
+
void unregisterView() override {
|
|
79
|
+
JniSkiaBaseView::unregisterView();
|
|
80
|
+
}
|
|
65
81
|
|
|
66
|
-
|
|
82
|
+
private:
|
|
83
|
+
friend HybridBase;
|
|
67
84
|
|
|
68
|
-
explicit JniSkiaDrawView(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
releaseSurface();
|
|
74
|
-
})) {
|
|
85
|
+
explicit JniSkiaDrawView(jni::alias_ref<jhybridobject> jThis,
|
|
86
|
+
jni::alias_ref<JniSkiaManager::javaobject> skiaManager) :
|
|
87
|
+
JniSkiaBaseView(skiaManager,
|
|
88
|
+
std::make_shared<RNSkAndroidView<RNSkia::RNSkJsView>>(
|
|
89
|
+
skiaManager->cthis()->getPlatformContext())) {
|
|
75
90
|
}
|
|
91
|
+
|
|
92
|
+
jni::global_ref<javaobject> javaPart_;
|
|
76
93
|
};
|
|
77
94
|
|
|
78
95
|
} // namespace RNSkia
|
|
@@ -7,12 +7,14 @@
|
|
|
7
7
|
#include <memory>
|
|
8
8
|
|
|
9
9
|
#include <JniPlatformContext.h>
|
|
10
|
-
#include <
|
|
11
|
-
|
|
10
|
+
#include <RNSkAndroidPlatformContext.h>
|
|
11
|
+
#include <RNSkManager.h>
|
|
12
12
|
#include <RNSkLog.h>
|
|
13
13
|
|
|
14
14
|
namespace RNSkia {
|
|
15
|
+
|
|
15
16
|
class RNSkManager;
|
|
17
|
+
|
|
16
18
|
using namespace facebook;
|
|
17
19
|
|
|
18
20
|
using JSCallInvokerHolder =
|
|
@@ -20,8 +22,6 @@ using JSCallInvokerHolder =
|
|
|
20
22
|
|
|
21
23
|
using JavaPlatformContext = jni::alias_ref<JniPlatformContext::javaobject>;
|
|
22
24
|
|
|
23
|
-
class JniSkiaDrawView;
|
|
24
|
-
|
|
25
25
|
class JniSkiaManager : public jni::HybridClass<JniSkiaManager> {
|
|
26
26
|
public:
|
|
27
27
|
static auto constexpr kJavaDescriptor = "Lcom/shopify/reactnative/skia/SkiaManager;";
|
|
@@ -48,14 +48,12 @@ class JniSkiaManager : public jni::HybridClass<JniSkiaManager> {
|
|
|
48
48
|
: _javaPart(jni::make_global(jThis)),
|
|
49
49
|
_jsRuntime(runtime),
|
|
50
50
|
_jsCallInvoker(jsCallInvoker),
|
|
51
|
-
_context(std::make_shared<
|
|
51
|
+
_context(std::make_shared<RNSkAndroidPlatformContext>(platformContext, runtime, jsCallInvoker)) {
|
|
52
52
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
std::shared_ptr<RNSkPlatformContextImpl> getPlatformContext() { return _context; }
|
|
55
|
+
std::shared_ptr<RNSkAndroidPlatformContext> getPlatformContext() { return _context; }
|
|
56
|
+
std::shared_ptr<RNSkManager> getSkiaManager() { return _skManager; }
|
|
59
57
|
|
|
60
58
|
void invalidate() {
|
|
61
59
|
_context->stopDrawLoop();
|
|
@@ -73,7 +71,7 @@ class JniSkiaManager : public jni::HybridClass<JniSkiaManager> {
|
|
|
73
71
|
|
|
74
72
|
jsi::Runtime *_jsRuntime;
|
|
75
73
|
std::shared_ptr<facebook::react::CallInvoker> _jsCallInvoker;
|
|
76
|
-
std::shared_ptr<
|
|
74
|
+
std::shared_ptr<RNSkAndroidPlatformContext> _context;
|
|
77
75
|
|
|
78
76
|
void initializeRuntime();
|
|
79
77
|
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
|
|
5
|
+
#include <fbjni/fbjni.h>
|
|
6
|
+
#include <jni.h>
|
|
7
|
+
#include <jsi/jsi.h>
|
|
8
|
+
|
|
9
|
+
#include <RNSkPictureView.h>
|
|
10
|
+
#include <RNSkAndroidView.h>
|
|
11
|
+
#include <JniSkiaBaseView.h>
|
|
12
|
+
#include <JniSkiaManager.h>
|
|
13
|
+
|
|
14
|
+
#include <android/native_window.h>
|
|
15
|
+
#include <android/native_window_jni.h>
|
|
16
|
+
#include <fbjni/detail/Hybrid.h>
|
|
17
|
+
|
|
18
|
+
namespace RNSkia {
|
|
19
|
+
using namespace facebook;
|
|
20
|
+
using namespace jni;
|
|
21
|
+
|
|
22
|
+
class JniSkiaPictureView
|
|
23
|
+
: public HybridClass<JniSkiaPictureView>, public JniSkiaBaseView {
|
|
24
|
+
public:
|
|
25
|
+
static auto constexpr kJavaDescriptor = "Lcom/shopify/reactnative/skia/SkiaPictureView;";
|
|
26
|
+
|
|
27
|
+
static jni::local_ref<jhybriddata>
|
|
28
|
+
initHybrid(jni::alias_ref<jhybridobject> jThis,
|
|
29
|
+
jni::alias_ref<JniSkiaManager::javaobject> skiaManager) {
|
|
30
|
+
return makeCxxInstance(jThis, skiaManager);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
static void registerNatives() {
|
|
34
|
+
registerHybrid({
|
|
35
|
+
makeNativeMethod("initHybrid", JniSkiaPictureView::initHybrid),
|
|
36
|
+
makeNativeMethod("surfaceAvailable",
|
|
37
|
+
JniSkiaPictureView::surfaceAvailable),
|
|
38
|
+
makeNativeMethod("surfaceDestroyed",
|
|
39
|
+
JniSkiaPictureView::surfaceDestroyed),
|
|
40
|
+
makeNativeMethod("surfaceSizeChanged",
|
|
41
|
+
JniSkiaPictureView::surfaceSizeChanged),
|
|
42
|
+
makeNativeMethod("setMode", JniSkiaPictureView::setMode),
|
|
43
|
+
makeNativeMethod("setDebugMode", JniSkiaPictureView::setDebugMode),
|
|
44
|
+
makeNativeMethod("updateTouchPoints",
|
|
45
|
+
JniSkiaPictureView::updateTouchPoints),
|
|
46
|
+
makeNativeMethod("registerView", JniSkiaPictureView::registerView),
|
|
47
|
+
makeNativeMethod("unregisterView",
|
|
48
|
+
JniSkiaPictureView::unregisterView)
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
protected:
|
|
53
|
+
void updateTouchPoints(jni::JArrayDouble touches) override {
|
|
54
|
+
JniSkiaBaseView::updateTouchPoints(touches);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void surfaceAvailable(jobject surface, int width, int height) override {
|
|
58
|
+
JniSkiaBaseView::surfaceAvailable(surface, width, height);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void surfaceSizeChanged(int width, int height) override {
|
|
62
|
+
JniSkiaBaseView::surfaceSizeChanged(width, height);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
void surfaceDestroyed() override { JniSkiaBaseView::surfaceDestroyed(); }
|
|
66
|
+
|
|
67
|
+
void setMode(std::string mode) override {
|
|
68
|
+
JniSkiaBaseView::setMode(mode);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
void setDebugMode(bool show) override {
|
|
72
|
+
JniSkiaBaseView::setDebugMode(show);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
void registerView(int nativeId) override {
|
|
76
|
+
JniSkiaBaseView::registerView(nativeId);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void unregisterView() override {
|
|
80
|
+
JniSkiaBaseView::unregisterView();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private:
|
|
84
|
+
friend HybridBase;
|
|
85
|
+
|
|
86
|
+
explicit JniSkiaPictureView(jni::alias_ref<jhybridobject> jThis,
|
|
87
|
+
jni::alias_ref<JniSkiaManager::javaobject> skiaManager) :
|
|
88
|
+
JniSkiaBaseView(skiaManager,
|
|
89
|
+
std::make_shared<RNSkAndroidView<RNSkia::RNSkPictureView>>(
|
|
90
|
+
skiaManager->cthis()->getPlatformContext())) {
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
jni::global_ref<javaobject> javaPart_;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
} // namespace RNSkia
|
package/android/cpp/rnskia-android/{RNSkPlatformContextImpl.h → RNSkAndroidPlatformContext.h}
RENAMED
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
namespace RNSkia {
|
|
12
12
|
using namespace facebook;
|
|
13
13
|
|
|
14
|
-
class
|
|
14
|
+
class RNSkAndroidPlatformContext: public RNSkPlatformContext {
|
|
15
15
|
public:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
RNSkAndroidPlatformContext(JniPlatformContext* jniPlatformContext,
|
|
17
|
+
jsi::Runtime *runtime,
|
|
18
|
+
std::shared_ptr<facebook::react::CallInvoker> jsCallInvoker) :
|
|
19
19
|
RNSkPlatformContext(runtime,
|
|
20
20
|
jsCallInvoker,
|
|
21
21
|
jniPlatformContext->getPixelDensity()),
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <RNSkJsView.h>
|
|
4
|
+
#include <RNSkOpenGLCanvasProvider.h>
|
|
5
|
+
#include <android/native_window.h>
|
|
6
|
+
|
|
7
|
+
namespace RNSkia {
|
|
8
|
+
|
|
9
|
+
class RNSkBaseAndroidView {
|
|
10
|
+
public:
|
|
11
|
+
virtual void surfaceAvailable(jobject surface, int width, int height) = 0;
|
|
12
|
+
|
|
13
|
+
virtual void surfaceDestroyed() = 0;
|
|
14
|
+
|
|
15
|
+
virtual void surfaceSizeChanged(int width, int height) = 0;
|
|
16
|
+
|
|
17
|
+
virtual float getPixelDensity() = 0;
|
|
18
|
+
|
|
19
|
+
virtual void updateTouchPoints(jni::JArrayDouble touches) = 0;
|
|
20
|
+
|
|
21
|
+
virtual void setMode(std::string mode) = 0;
|
|
22
|
+
|
|
23
|
+
virtual void setShowDebugInfo(bool show) = 0;
|
|
24
|
+
|
|
25
|
+
virtual void viewDidUnmount() = 0;
|
|
26
|
+
|
|
27
|
+
virtual std::shared_ptr<RNSkView> getSkiaView() = 0;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
template<typename T>
|
|
31
|
+
class RNSkAndroidView
|
|
32
|
+
: public T, public RNSkBaseAndroidView {
|
|
33
|
+
public:
|
|
34
|
+
RNSkAndroidView(
|
|
35
|
+
std::shared_ptr<RNSkia::RNSkPlatformContext> context) :
|
|
36
|
+
T(context,
|
|
37
|
+
std::make_shared<RNSkOpenGLCanvasProvider>(
|
|
38
|
+
std::bind(&RNSkia::RNSkView::requestRedraw, this),
|
|
39
|
+
context)
|
|
40
|
+
) {}
|
|
41
|
+
|
|
42
|
+
void surfaceAvailable(jobject surface, int width, int height) override {
|
|
43
|
+
std::static_pointer_cast<RNSkOpenGLCanvasProvider>(
|
|
44
|
+
T::getCanvasProvider())->surfaceAvailable(surface, width, height);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
void surfaceDestroyed() override {
|
|
48
|
+
std::static_pointer_cast<RNSkOpenGLCanvasProvider>(
|
|
49
|
+
T::getCanvasProvider())->surfaceDestroyed();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
void surfaceSizeChanged(int width, int height) override {
|
|
53
|
+
std::static_pointer_cast<RNSkOpenGLCanvasProvider>(
|
|
54
|
+
T::getCanvasProvider())->surfaceSizeChanged(width, height);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
float getPixelDensity() override {
|
|
58
|
+
return T::getPlatformContext()->getPixelDensity();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void setMode(std::string mode) override {
|
|
62
|
+
if (mode.compare("continuous") == 0) {
|
|
63
|
+
T::setDrawingMode(RNSkDrawingMode::Continuous);
|
|
64
|
+
} else {
|
|
65
|
+
T::setDrawingMode(RNSkDrawingMode::Default);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
void setShowDebugInfo(bool show) override {
|
|
70
|
+
T::setShowDebugOverlays(show);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
void viewDidUnmount() override {
|
|
74
|
+
T::endDrawingLoop();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
void updateTouchPoints(jni::JArrayDouble touches) override {
|
|
78
|
+
// Create touch points
|
|
79
|
+
std::vector<RNSkia::RNSkTouchInfo> points;
|
|
80
|
+
auto pin = touches.pin();
|
|
81
|
+
auto scale = getPixelDensity();
|
|
82
|
+
points.reserve(pin.size() / 5);
|
|
83
|
+
for (size_t i = 0; i < pin.size(); i += 5) {
|
|
84
|
+
RNSkTouchInfo point;
|
|
85
|
+
point.x = pin[i] / scale;
|
|
86
|
+
point.y = pin[i + 1] / scale;
|
|
87
|
+
point.force = pin[i + 2];
|
|
88
|
+
point.type = (RNSkia::RNSkTouchInfo::TouchType) pin[i + 3];
|
|
89
|
+
point.id = pin[i + 4];
|
|
90
|
+
points.push_back(point);
|
|
91
|
+
}
|
|
92
|
+
T::updateTouchState(points);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
std::shared_ptr<RNSkView> getSkiaView() override {
|
|
96
|
+
return T::shared_from_this();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
};
|
|
100
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#include <RNSkOpenGLCanvasProvider.h>
|
|
2
|
+
|
|
3
|
+
#pragma clang diagnostic push
|
|
4
|
+
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
5
|
+
|
|
6
|
+
#include <SkSurface.h>
|
|
7
|
+
#include <SkCanvas.h>
|
|
8
|
+
|
|
9
|
+
#pragma clang diagnostic pop
|
|
10
|
+
|
|
11
|
+
namespace RNSkia {
|
|
12
|
+
|
|
13
|
+
RNSkOpenGLCanvasProvider::RNSkOpenGLCanvasProvider(
|
|
14
|
+
std::function<void()> requestRedraw,
|
|
15
|
+
std::shared_ptr<RNSkia::RNSkPlatformContext> context):
|
|
16
|
+
RNSkCanvasProvider(requestRedraw),
|
|
17
|
+
_context(context) {}
|
|
18
|
+
|
|
19
|
+
RNSkOpenGLCanvasProvider::~RNSkOpenGLCanvasProvider() {}
|
|
20
|
+
|
|
21
|
+
float RNSkOpenGLCanvasProvider::getScaledWidth() {
|
|
22
|
+
return _width;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
float RNSkOpenGLCanvasProvider::getScaledHeight() {
|
|
26
|
+
return _height;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
void RNSkOpenGLCanvasProvider::renderToCanvas(const std::function<void(SkCanvas *)> &cb) {
|
|
30
|
+
if(_renderer != nullptr) {
|
|
31
|
+
_renderer->run(cb, _width, _height);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
void RNSkOpenGLCanvasProvider::surfaceAvailable(jobject surface, int width, int height) {
|
|
36
|
+
_width = width;
|
|
37
|
+
_height = height;
|
|
38
|
+
|
|
39
|
+
if (_renderer == nullptr)
|
|
40
|
+
{
|
|
41
|
+
// Create renderer!
|
|
42
|
+
_renderer = std::make_unique<SkiaOpenGLRenderer>(surface);
|
|
43
|
+
|
|
44
|
+
// Redraw
|
|
45
|
+
_requestRedraw();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
void RNSkOpenGLCanvasProvider::surfaceDestroyed() {
|
|
49
|
+
if (_renderer != nullptr)
|
|
50
|
+
{
|
|
51
|
+
// teardown
|
|
52
|
+
_renderer->teardown();
|
|
53
|
+
|
|
54
|
+
// Teardown renderer on the render thread since OpenGL demands
|
|
55
|
+
// same thread access for OpenGL contexts.
|
|
56
|
+
std::condition_variable cv;
|
|
57
|
+
std::mutex m;
|
|
58
|
+
std::unique_lock<std::mutex> lock(m);
|
|
59
|
+
|
|
60
|
+
_context->runOnRenderThread([&cv, &m, weakSelf = weak_from_this()]() {
|
|
61
|
+
// Lock
|
|
62
|
+
std::unique_lock<std::mutex> lock(m);
|
|
63
|
+
|
|
64
|
+
auto self = weakSelf.lock();
|
|
65
|
+
if(self) {
|
|
66
|
+
if(self->_renderer != nullptr) {
|
|
67
|
+
self->_renderer->run(nullptr, 0, 0);
|
|
68
|
+
}
|
|
69
|
+
// Remove renderer
|
|
70
|
+
self->_renderer = nullptr;
|
|
71
|
+
}
|
|
72
|
+
cv.notify_one();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
cv.wait(lock);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
void RNSkOpenGLCanvasProvider::surfaceSizeChanged(int width, int height) {
|
|
80
|
+
if(width == 0 && height == 0) {
|
|
81
|
+
// Setting width/height to zero is nothing we need to care about when
|
|
82
|
+
// it comes to invalidating the surface.
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
_width = width;
|
|
86
|
+
_height = height;
|
|
87
|
+
|
|
88
|
+
// Redraw after size change
|
|
89
|
+
_requestRedraw();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <fbjni/fbjni.h>
|
|
4
|
+
|
|
5
|
+
#include <RNSkJsView.h>
|
|
6
|
+
|
|
7
|
+
#include <SkiaOpenGLRenderer.h>
|
|
8
|
+
#include <android/native_window.h>
|
|
9
|
+
|
|
10
|
+
namespace RNSkia {
|
|
11
|
+
|
|
12
|
+
class RNSkOpenGLCanvasProvider :
|
|
13
|
+
public RNSkia::RNSkCanvasProvider,
|
|
14
|
+
public std::enable_shared_from_this<RNSkOpenGLCanvasProvider> {
|
|
15
|
+
public:
|
|
16
|
+
RNSkOpenGLCanvasProvider(std::function<void()> requestRedraw,
|
|
17
|
+
std::shared_ptr <RNSkia::RNSkPlatformContext> context);
|
|
18
|
+
|
|
19
|
+
~RNSkOpenGLCanvasProvider();
|
|
20
|
+
|
|
21
|
+
float getScaledWidth() override;
|
|
22
|
+
|
|
23
|
+
float getScaledHeight() override;
|
|
24
|
+
|
|
25
|
+
void renderToCanvas(const std::function<void(SkCanvas * )> &cb) override;
|
|
26
|
+
|
|
27
|
+
void surfaceAvailable(jobject surface, int width, int height);
|
|
28
|
+
|
|
29
|
+
void surfaceDestroyed();
|
|
30
|
+
|
|
31
|
+
void surfaceSizeChanged(int width, int height);
|
|
32
|
+
|
|
33
|
+
private:
|
|
34
|
+
std::unique_ptr <SkiaOpenGLRenderer> _renderer = nullptr;
|
|
35
|
+
std::shared_ptr <RNSkPlatformContext> _context;
|
|
36
|
+
float _width = -1;
|
|
37
|
+
float _height = -1;
|
|
38
|
+
};
|
|
39
|
+
}
|