@shopify/react-native-skia 0.1.202 → 0.1.204
Sign up to get free protection for your applications and to get access to all the features.
- package/android/CMakeLists.txt +9 -9
- package/android/cpp/jni/include/JniSkiaBaseView.h +0 -56
- package/android/cpp/jni/include/JniSkiaDomView.h +12 -20
- package/android/cpp/jni/include/JniSkiaDrawView.h +14 -20
- package/android/cpp/jni/include/JniSkiaPictureView.h +15 -24
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +11 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +32 -77
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +1 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +0 -3
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java +0 -3
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java +0 -4
- package/cpp/api/JsiSkApi.h +8 -0
- package/cpp/api/JsiSkFontMgr.h +54 -0
- package/cpp/api/JsiSkFontMgrFactory.h +40 -0
- package/cpp/api/JsiSkFontStyle.h +61 -0
- package/cpp/api/JsiSkTypeFaceFontProvider.h +80 -0
- package/cpp/api/JsiSkTypeFaceFontProviderFactory.h +32 -0
- package/cpp/rnskia/RNSkPlatformContext.h +6 -0
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +1 -0
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +7 -0
- package/lib/commonjs/skia/core/Data.d.ts +2 -0
- package/lib/commonjs/skia/core/Data.js +29 -1
- package/lib/commonjs/skia/core/Data.js.map +1 -1
- package/lib/commonjs/skia/core/Font.d.ts +14 -1
- package/lib/commonjs/skia/core/Font.js +93 -1
- package/lib/commonjs/skia/core/Font.js.map +1 -1
- package/lib/commonjs/skia/types/Font/FontMgr.d.ts +8 -0
- package/lib/commonjs/skia/types/Font/FontMgr.js +6 -0
- package/lib/commonjs/skia/types/Font/FontMgr.js.map +1 -0
- package/lib/commonjs/skia/types/Font/FontMgrFactory.d.ts +4 -0
- package/lib/commonjs/skia/types/Font/FontMgrFactory.js +6 -0
- package/lib/commonjs/skia/types/Font/FontMgrFactory.js.map +1 -0
- package/lib/commonjs/skia/types/Font/index.d.ts +2 -0
- package/lib/commonjs/skia/types/Font/index.js +26 -0
- package/lib/commonjs/skia/types/Font/index.js.map +1 -1
- package/lib/commonjs/skia/types/Paragraph/TypefaceFontProvider.d.ts +10 -0
- package/lib/commonjs/skia/types/Paragraph/TypefaceFontProvider.js +6 -0
- package/lib/commonjs/skia/types/Paragraph/TypefaceFontProvider.js.map +1 -0
- package/lib/commonjs/skia/types/Paragraph/TypefaceFontProviderFactory.d.ts +4 -0
- package/lib/commonjs/skia/types/Paragraph/TypefaceFontProviderFactory.js +6 -0
- package/lib/commonjs/skia/types/Paragraph/TypefaceFontProviderFactory.js.map +1 -0
- package/lib/commonjs/skia/types/Skia.d.ts +4 -1
- package/lib/commonjs/skia/types/Skia.js.map +1 -1
- package/lib/commonjs/skia/web/Host.d.ts +1 -1
- package/lib/commonjs/skia/web/Host.js +0 -2
- package/lib/commonjs/skia/web/Host.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkFontMgr.d.ts +10 -0
- package/lib/commonjs/skia/web/JsiSkFontMgr.js +34 -0
- package/lib/commonjs/skia/web/JsiSkFontMgr.js.map +1 -0
- package/lib/commonjs/skia/web/JsiSkFontMgrFactory.d.ts +8 -0
- package/lib/commonjs/skia/web/JsiSkFontMgrFactory.js +32 -0
- package/lib/commonjs/skia/web/JsiSkFontMgrFactory.js.map +1 -0
- package/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.d.ts +13 -0
- package/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.js +90 -0
- package/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.js.map +1 -0
- package/lib/commonjs/skia/web/JsiSkTypefaceFontProviderFactory.d.ts +7 -0
- package/lib/commonjs/skia/web/JsiSkTypefaceFontProviderFactory.js +25 -0
- package/lib/commonjs/skia/web/JsiSkTypefaceFontProviderFactory.js.map +1 -0
- package/lib/commonjs/skia/web/JsiSkia.js +7 -1
- package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
- package/lib/module/skia/core/Data.d.ts +2 -0
- package/lib/module/skia/core/Data.js +24 -1
- package/lib/module/skia/core/Data.js.map +1 -1
- package/lib/module/skia/core/Font.d.ts +14 -1
- package/lib/module/skia/core/Font.js +83 -1
- package/lib/module/skia/core/Font.js.map +1 -1
- package/lib/module/skia/types/Font/FontMgr.d.ts +8 -0
- package/lib/module/skia/types/Font/FontMgr.js +2 -0
- package/lib/module/skia/types/Font/FontMgr.js.map +1 -0
- package/lib/module/skia/types/Font/FontMgrFactory.d.ts +4 -0
- package/lib/module/skia/types/Font/FontMgrFactory.js +2 -0
- package/lib/module/skia/types/Font/FontMgrFactory.js.map +1 -0
- package/lib/module/skia/types/Font/index.d.ts +2 -0
- package/lib/module/skia/types/Font/index.js +2 -0
- package/lib/module/skia/types/Font/index.js.map +1 -1
- package/lib/module/skia/types/Paragraph/TypefaceFontProvider.d.ts +10 -0
- package/lib/module/skia/types/Paragraph/TypefaceFontProvider.js +2 -0
- package/lib/module/skia/types/Paragraph/TypefaceFontProvider.js.map +1 -0
- package/lib/module/skia/types/Paragraph/TypefaceFontProviderFactory.d.ts +4 -0
- package/lib/module/skia/types/Paragraph/TypefaceFontProviderFactory.js +2 -0
- package/lib/module/skia/types/Paragraph/TypefaceFontProviderFactory.js.map +1 -0
- package/lib/module/skia/types/Skia.d.ts +4 -1
- package/lib/module/skia/types/Skia.js.map +1 -1
- package/lib/module/skia/web/Host.d.ts +1 -1
- package/lib/module/skia/web/Host.js +0 -2
- package/lib/module/skia/web/Host.js.map +1 -1
- package/lib/module/skia/web/JsiSkFontMgr.d.ts +10 -0
- package/lib/module/skia/web/JsiSkFontMgr.js +24 -0
- package/lib/module/skia/web/JsiSkFontMgr.js.map +1 -0
- package/lib/module/skia/web/JsiSkFontMgrFactory.d.ts +8 -0
- package/lib/module/skia/web/JsiSkFontMgrFactory.js +21 -0
- package/lib/module/skia/web/JsiSkFontMgrFactory.js.map +1 -0
- package/lib/module/skia/web/JsiSkTypefaceFontProvider.d.ts +13 -0
- package/lib/module/skia/web/JsiSkTypefaceFontProvider.js +80 -0
- package/lib/module/skia/web/JsiSkTypefaceFontProvider.js.map +1 -0
- package/lib/module/skia/web/JsiSkTypefaceFontProviderFactory.d.ts +7 -0
- package/lib/module/skia/web/JsiSkTypefaceFontProviderFactory.js +14 -0
- package/lib/module/skia/web/JsiSkTypefaceFontProviderFactory.js.map +1 -0
- package/lib/module/skia/web/JsiSkia.js +5 -1
- package/lib/module/skia/web/JsiSkia.js.map +1 -1
- package/lib/typescript/src/skia/core/Data.d.ts +2 -0
- package/lib/typescript/src/skia/core/Font.d.ts +14 -1
- package/lib/typescript/src/skia/types/Font/FontMgr.d.ts +8 -0
- package/lib/typescript/src/skia/types/Font/FontMgrFactory.d.ts +4 -0
- package/lib/typescript/src/skia/types/Font/index.d.ts +2 -0
- package/lib/typescript/src/skia/types/Paragraph/TypefaceFontProvider.d.ts +10 -0
- package/lib/typescript/src/skia/types/Paragraph/TypefaceFontProviderFactory.d.ts +4 -0
- package/lib/typescript/src/skia/types/Skia.d.ts +4 -1
- package/lib/typescript/src/skia/web/Host.d.ts +1 -1
- package/lib/typescript/src/skia/web/JsiSkFontMgr.d.ts +10 -0
- package/lib/typescript/src/skia/web/JsiSkFontMgrFactory.d.ts +8 -0
- package/lib/typescript/src/skia/web/JsiSkTypefaceFontProvider.d.ts +13 -0
- package/lib/typescript/src/skia/web/JsiSkTypefaceFontProviderFactory.d.ts +7 -0
- package/libs/android/arm64-v8a/libskia.a +0 -0
- package/libs/android/arm64-v8a/libskottie.a +0 -0
- package/libs/android/arm64-v8a/libskparagraph.a +0 -0
- package/libs/android/arm64-v8a/libskshaper.a +0 -0
- package/libs/android/arm64-v8a/libskunicode.a +0 -0
- package/libs/android/armeabi-v7a/libskia.a +0 -0
- package/libs/android/armeabi-v7a/libskottie.a +0 -0
- package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
- package/libs/android/armeabi-v7a/libskshaper.a +0 -0
- package/libs/android/armeabi-v7a/libskunicode.a +0 -0
- package/libs/android/x86/libskia.a +0 -0
- package/libs/android/x86/libskottie.a +0 -0
- package/libs/android/x86/libskparagraph.a +0 -0
- package/libs/android/x86/libskshaper.a +0 -0
- package/libs/android/x86/libskunicode.a +0 -0
- package/libs/android/x86_64/libskia.a +0 -0
- package/libs/android/x86_64/libskottie.a +0 -0
- package/libs/android/x86_64/libskparagraph.a +0 -0
- package/libs/android/x86_64/libskshaper.a +0 -0
- package/libs/android/x86_64/libskunicode.a +0 -0
- package/libs/ios/libskia.xcframework/Info.plist +5 -5
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
- package/libs/ios/libskparagraph.xcframework/Info.plist +42 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
- package/libs/ios/libskunicode.xcframework/Info.plist +42 -0
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
- package/libs/ios/libsvg.xcframework/Info.plist +5 -5
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
- package/package.json +3 -1
- package/react-native-skia.podspec +2 -2
- package/src/skia/core/Data.ts +31 -1
- package/src/skia/core/Font.ts +109 -2
- package/src/skia/types/Font/FontMgr.ts +10 -0
- package/src/skia/types/Font/FontMgrFactory.ts +5 -0
- package/src/skia/types/Font/index.ts +2 -0
- package/src/skia/types/Paragraph/TypefaceFontProvider.ts +11 -0
- package/src/skia/types/Paragraph/TypefaceFontProviderFactory.ts +5 -0
- package/src/skia/types/Skia.ts +4 -2
- package/src/skia/web/Host.ts +1 -1
- package/src/skia/web/JsiSkFontMgr.ts +26 -0
- package/src/skia/web/JsiSkFontMgrFactory.ts +22 -0
- package/src/skia/web/JsiSkTypefaceFontProvider.ts +89 -0
- package/src/skia/web/JsiSkTypefaceFontProviderFactory.ts +18 -0
- package/src/skia/web/JsiSkia.ts +4 -0
package/android/CMakeLists.txt
CHANGED
@@ -9,8 +9,8 @@ set (PACKAGE_NAME "rnskia")
|
|
9
9
|
set (SKIA_LIB "skia")
|
10
10
|
set (SKIA_SVG_LIB "svg")
|
11
11
|
set (SKIA_SKSHAPER_LIB "skshaper")
|
12
|
-
|
13
|
-
|
12
|
+
set (SKIA_SKPARAGRAPH_LIB "skparagraph")
|
13
|
+
set (SKIA_SKUNICODE_LIB "skunicode")
|
14
14
|
|
15
15
|
# Clear some variables
|
16
16
|
unset(LIBRN_DIR CACHE)
|
@@ -84,7 +84,7 @@ target_include_directories(
|
|
84
84
|
../cpp/skia/include/utils/
|
85
85
|
../cpp/skia/include/pathops/
|
86
86
|
../cpp/skia/modules/
|
87
|
-
|
87
|
+
../cpp/skia/modules/skparagraph/include/
|
88
88
|
../cpp/skia/include/
|
89
89
|
../cpp/skia
|
90
90
|
|
@@ -113,11 +113,11 @@ set_property(TARGET svg PROPERTY IMPORTED_LOCATION "${SKIA_LIBS_PATH}/libsvg.a")
|
|
113
113
|
add_library(skshaper STATIC IMPORTED)
|
114
114
|
set_property(TARGET skshaper PROPERTY IMPORTED_LOCATION "${SKIA_LIBS_PATH}/libskshaper.a")
|
115
115
|
|
116
|
-
|
117
|
-
|
116
|
+
add_library(skparagraph STATIC IMPORTED)
|
117
|
+
set_property(TARGET skparagraph PROPERTY IMPORTED_LOCATION "${SKIA_LIBS_PATH}/libskparagraph.a")
|
118
118
|
|
119
|
-
|
120
|
-
|
119
|
+
add_library(skunicode STATIC IMPORTED)
|
120
|
+
set_property(TARGET skunicode PROPERTY IMPORTED_LOCATION "${SKIA_LIBS_PATH}/libskunicode.a")
|
121
121
|
|
122
122
|
|
123
123
|
find_library(
|
@@ -202,8 +202,8 @@ target_link_libraries(
|
|
202
202
|
${TURBOMODULES_LIB}
|
203
203
|
${SKIA_SVG_LIB}
|
204
204
|
${SKIA_SKSHAPER_LIB}
|
205
|
-
|
206
|
-
|
205
|
+
${SKIA_SKPARAGRAPH_LIB}
|
206
|
+
${SKIA_SKUNICODE_LIB}
|
207
207
|
${SKIA_LIB}
|
208
208
|
-ljnigraphics
|
209
209
|
-lGLESv2
|
@@ -62,62 +62,6 @@ protected:
|
|
62
62
|
_skiaAndroidView->viewDidUnmount();
|
63
63
|
}
|
64
64
|
|
65
|
-
/**
|
66
|
-
* Android specific method for rendering an offscreen GPU buffer to an Android
|
67
|
-
* bitmap. The result can be used to render the first frame of the Skia render
|
68
|
-
* to avoid flickering on android.
|
69
|
-
*/
|
70
|
-
/*
|
71
|
-
// TODO: Remove if we find another solution for first frame rendering
|
72
|
-
// protected native Object renderToBitmap(Object bitmap, int width, int
|
73
|
-
height); virtual jobject renderToBitmap(jobject bitmapIn, int width, int
|
74
|
-
height) { auto platformContext = getSkiaManager()->getPlatformContext(); auto
|
75
|
-
provider = std::make_shared<RNSkOffscreenCanvasProvider>( platformContext,
|
76
|
-
[]() {}, width, height);
|
77
|
-
|
78
|
-
// Render into a gpu backed buffer
|
79
|
-
_skiaAndroidView->getSkiaView()->getRenderer()->renderImmediate(provider);
|
80
|
-
auto rect = SkRect::MakeXYWH(0, 0, width, height);
|
81
|
-
auto image = provider->makeSnapshot(&rect);
|
82
|
-
|
83
|
-
AndroidBitmapInfo infoIn;
|
84
|
-
auto env = facebook::jni::Environment::current();
|
85
|
-
void *pixels;
|
86
|
-
|
87
|
-
// Get image info
|
88
|
-
if (AndroidBitmap_getInfo(env, bitmapIn, &infoIn) !=
|
89
|
-
ANDROID_BITMAP_RESULT_SUCCESS) {
|
90
|
-
return env->NewStringUTF("failed");
|
91
|
-
}
|
92
|
-
|
93
|
-
// Check image
|
94
|
-
if (infoIn.format != ANDROID_BITMAP_FORMAT_RGBA_8888 &&
|
95
|
-
infoIn.format != ANDROID_BITMAP_FORMAT_RGB_565) {
|
96
|
-
return env->NewStringUTF("Only support ANDROID_BITMAP_FORMAT_RGBA_8888 "
|
97
|
-
"and ANDROID_BITMAP_FORMAT_RGB_565");
|
98
|
-
}
|
99
|
-
|
100
|
-
auto imageInfo = SkImageInfo::Make(image->width(), image->height(),
|
101
|
-
image->colorType(), image->alphaType());
|
102
|
-
|
103
|
-
// Lock all images
|
104
|
-
if (AndroidBitmap_lockPixels(env, bitmapIn, &pixels) !=
|
105
|
-
ANDROID_BITMAP_RESULT_SUCCESS) {
|
106
|
-
return env->NewStringUTF("AndroidBitmap_lockPixels failed!");
|
107
|
-
}
|
108
|
-
|
109
|
-
// Set pixels from SkImage
|
110
|
-
image->readPixels(imageInfo, pixels, imageInfo.minRowBytes(), 0, 0);
|
111
|
-
|
112
|
-
// Unlocks everything
|
113
|
-
AndroidBitmap_unlockPixels(env, bitmapIn);
|
114
|
-
|
115
|
-
image = nullptr;
|
116
|
-
provider = nullptr;
|
117
|
-
|
118
|
-
return bitmapIn;
|
119
|
-
}*/
|
120
|
-
|
121
65
|
private:
|
122
66
|
JniSkiaManager *_manager;
|
123
67
|
std::shared_ptr<RNSkBaseAndroidView> _skiaAndroidView;
|
@@ -34,21 +34,18 @@ public:
|
|
34
34
|
}
|
35
35
|
|
36
36
|
static void registerNatives() {
|
37
|
-
registerHybrid(
|
38
|
-
makeNativeMethod("initHybrid", JniSkiaDomView::initHybrid),
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
// TODO: Remove if we find another solution for first frame rendering
|
50
|
-
// makeNativeMethod("renderToBitmap", JniSkiaDomView::renderToBitmap)
|
51
|
-
});
|
37
|
+
registerHybrid(
|
38
|
+
{makeNativeMethod("initHybrid", JniSkiaDomView::initHybrid),
|
39
|
+
makeNativeMethod("surfaceAvailable", JniSkiaDomView::surfaceAvailable),
|
40
|
+
makeNativeMethod("surfaceDestroyed", JniSkiaDomView::surfaceDestroyed),
|
41
|
+
makeNativeMethod("surfaceSizeChanged",
|
42
|
+
JniSkiaDomView::surfaceSizeChanged),
|
43
|
+
makeNativeMethod("setMode", JniSkiaDomView::setMode),
|
44
|
+
makeNativeMethod("setDebugMode", JniSkiaDomView::setDebugMode),
|
45
|
+
makeNativeMethod("updateTouchPoints",
|
46
|
+
JniSkiaDomView::updateTouchPoints),
|
47
|
+
makeNativeMethod("registerView", JniSkiaDomView::registerView),
|
48
|
+
makeNativeMethod("unregisterView", JniSkiaDomView::unregisterView)});
|
52
49
|
}
|
53
50
|
|
54
51
|
protected:
|
@@ -76,11 +73,6 @@ protected:
|
|
76
73
|
|
77
74
|
void unregisterView() override { JniSkiaBaseView::unregisterView(); }
|
78
75
|
|
79
|
-
// TODO: Remove if we find another solution for first frame rendering
|
80
|
-
/*jobject renderToBitmap(jobject bitmap, int width, int height) override {
|
81
|
-
return JniSkiaBaseView::renderToBitmap(bitmap, width, height);
|
82
|
-
}*/
|
83
|
-
|
84
76
|
private:
|
85
77
|
friend HybridBase;
|
86
78
|
|
@@ -33,21 +33,20 @@ public:
|
|
33
33
|
}
|
34
34
|
|
35
35
|
static void registerNatives() {
|
36
|
-
registerHybrid(
|
37
|
-
makeNativeMethod("initHybrid", JniSkiaDrawView::initHybrid),
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
});
|
36
|
+
registerHybrid(
|
37
|
+
{makeNativeMethod("initHybrid", JniSkiaDrawView::initHybrid),
|
38
|
+
makeNativeMethod("surfaceAvailable",
|
39
|
+
JniSkiaDrawView::surfaceAvailable),
|
40
|
+
makeNativeMethod("surfaceDestroyed",
|
41
|
+
JniSkiaDrawView::surfaceDestroyed),
|
42
|
+
makeNativeMethod("surfaceSizeChanged",
|
43
|
+
JniSkiaDrawView::surfaceSizeChanged),
|
44
|
+
makeNativeMethod("setMode", JniSkiaDrawView::setMode),
|
45
|
+
makeNativeMethod("setDebugMode", JniSkiaDrawView::setDebugMode),
|
46
|
+
makeNativeMethod("updateTouchPoints",
|
47
|
+
JniSkiaDrawView::updateTouchPoints),
|
48
|
+
makeNativeMethod("registerView", JniSkiaDrawView::registerView),
|
49
|
+
makeNativeMethod("unregisterView", JniSkiaDrawView::unregisterView)});
|
51
50
|
}
|
52
51
|
|
53
52
|
protected:
|
@@ -75,11 +74,6 @@ protected:
|
|
75
74
|
|
76
75
|
void unregisterView() override { JniSkiaBaseView::unregisterView(); }
|
77
76
|
|
78
|
-
// TODO: Remove if we find another solution for first frame rendering
|
79
|
-
/*jobject renderToBitmap(jobject bitmap, int width, int height) override {
|
80
|
-
return JniSkiaBaseView::renderToBitmap(bitmap, width, height);
|
81
|
-
}*/
|
82
|
-
|
83
77
|
private:
|
84
78
|
friend HybridBase;
|
85
79
|
|
@@ -33,24 +33,21 @@ public:
|
|
33
33
|
}
|
34
34
|
|
35
35
|
static void registerNatives() {
|
36
|
-
registerHybrid(
|
37
|
-
makeNativeMethod("initHybrid", JniSkiaPictureView::initHybrid),
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
// makeNativeMethod("renderToBitmap",
|
52
|
-
// JniSkiaPictureView::renderToBitmap)
|
53
|
-
});
|
36
|
+
registerHybrid(
|
37
|
+
{makeNativeMethod("initHybrid", JniSkiaPictureView::initHybrid),
|
38
|
+
makeNativeMethod("surfaceAvailable",
|
39
|
+
JniSkiaPictureView::surfaceAvailable),
|
40
|
+
makeNativeMethod("surfaceDestroyed",
|
41
|
+
JniSkiaPictureView::surfaceDestroyed),
|
42
|
+
makeNativeMethod("surfaceSizeChanged",
|
43
|
+
JniSkiaPictureView::surfaceSizeChanged),
|
44
|
+
makeNativeMethod("setMode", JniSkiaPictureView::setMode),
|
45
|
+
makeNativeMethod("setDebugMode", JniSkiaPictureView::setDebugMode),
|
46
|
+
makeNativeMethod("updateTouchPoints",
|
47
|
+
JniSkiaPictureView::updateTouchPoints),
|
48
|
+
makeNativeMethod("registerView", JniSkiaPictureView::registerView),
|
49
|
+
makeNativeMethod("unregisterView",
|
50
|
+
JniSkiaPictureView::unregisterView)});
|
54
51
|
}
|
55
52
|
|
56
53
|
protected:
|
@@ -78,12 +75,6 @@ protected:
|
|
78
75
|
|
79
76
|
void unregisterView() override { JniSkiaBaseView::unregisterView(); }
|
80
77
|
|
81
|
-
/*
|
82
|
-
TODO: Remove if we find another solution for first frame rendering
|
83
|
-
jobject renderToBitmap(jobject bitmap, int width, int height) override {
|
84
|
-
return JniSkiaBaseView::renderToBitmap(bitmap, width, height);
|
85
|
-
}*/
|
86
|
-
|
87
78
|
private:
|
88
79
|
friend HybridBase;
|
89
80
|
|
@@ -9,6 +9,13 @@
|
|
9
9
|
#include <RNSkPlatformContext.h>
|
10
10
|
#include <SkiaOpenGLSurfaceFactory.h>
|
11
11
|
|
12
|
+
#pragma clang diagnostic push
|
13
|
+
#pragma clang diagnostic ignored "-Wdocumentation"
|
14
|
+
|
15
|
+
#include "include/ports/SkFontMgr_android.h"
|
16
|
+
|
17
|
+
#pragma clang diagnostic pop
|
18
|
+
|
12
19
|
namespace RNSkia {
|
13
20
|
namespace jsi = facebook::jsi;
|
14
21
|
|
@@ -41,6 +48,10 @@ public:
|
|
41
48
|
return SkiaOpenGLSurfaceFactory::makeOffscreenSurface(width, height);
|
42
49
|
}
|
43
50
|
|
51
|
+
sk_sp<SkFontMgr> createFontMgr() override {
|
52
|
+
return SkFontMgr_New_Android(nullptr);
|
53
|
+
}
|
54
|
+
|
44
55
|
void runOnMainThread(std::function<void()> task) override {
|
45
56
|
_jniPlatformContext->runTaskOnMainThread(task);
|
46
57
|
}
|
@@ -9,53 +9,51 @@ import android.view.TextureView;
|
|
9
9
|
|
10
10
|
import com.facebook.jni.annotations.DoNotStrip;
|
11
11
|
import com.facebook.react.views.view.ReactViewGroup;
|
12
|
+
|
12
13
|
public abstract class SkiaBaseView extends ReactViewGroup implements TextureView.SurfaceTextureListener {
|
13
14
|
|
14
15
|
@DoNotStrip
|
15
16
|
private Surface mSurface;
|
16
17
|
private TextureView mTexture;
|
17
18
|
|
19
|
+
private String tag = "SkiaView";
|
20
|
+
|
18
21
|
public SkiaBaseView(Context context) {
|
19
22
|
super(context);
|
20
|
-
// TODO: Remove if we find another solution for first frame rendering
|
21
|
-
//setWillNotDraw(!shouldRenderFirstFrameAsBitmap());
|
22
23
|
mTexture = new TextureView(context);
|
23
24
|
mTexture.setSurfaceTextureListener(this);
|
24
25
|
mTexture.setOpaque(false);
|
25
26
|
addView(mTexture);
|
26
27
|
}
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
//
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
null);
|
51
|
-
|
52
|
-
bitmap.recycle();
|
53
|
-
}
|
29
|
+
public void destroySurface() {
|
30
|
+
Log.i(tag, "destroySurface");
|
31
|
+
surfaceDestroyed();
|
32
|
+
mSurface.release();
|
33
|
+
mSurface = null;
|
34
|
+
}
|
35
|
+
|
36
|
+
private void createSurfaceTexture() {
|
37
|
+
// This API Level is >= 26, we created our own SurfaceTexture to have a faster time to first frame
|
38
|
+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
39
|
+
Log.i(tag, "Create SurfaceTexture");
|
40
|
+
SurfaceTexture surface = new SurfaceTexture(false);
|
41
|
+
mTexture.setSurfaceTexture(surface);
|
42
|
+
this.onSurfaceTextureAvailable(surface, this.getMeasuredWidth(), this.getMeasuredHeight());
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
@Override
|
47
|
+
protected void onAttachedToWindow() {
|
48
|
+
super.onAttachedToWindow();
|
49
|
+
if (this.getMeasuredWidth() == 0) {
|
50
|
+
createSurfaceTexture();
|
54
51
|
}
|
55
|
-
}
|
52
|
+
}
|
56
53
|
|
57
54
|
@Override
|
58
55
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
56
|
+
Log.i(tag, "onLayout " + this.getMeasuredWidth() + "/" + this.getMeasuredHeight());
|
59
57
|
super.onLayout(changed, left, top, right, bottom);
|
60
58
|
mTexture.layout(0, 0, this.getMeasuredWidth(), this.getMeasuredHeight());
|
61
59
|
}
|
@@ -132,52 +130,23 @@ public abstract class SkiaBaseView extends ReactViewGroup implements TextureView
|
|
132
130
|
|
133
131
|
@Override
|
134
132
|
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
|
135
|
-
Log.i(
|
133
|
+
Log.i(tag, "onSurfaceTextureAvailable " + width + "/" + height);
|
136
134
|
mSurface = new Surface(surface);
|
137
135
|
surfaceAvailable(mSurface, width, height);
|
138
|
-
|
139
|
-
/*
|
140
|
-
TODO: Remove if we find another solution for first frame rendering
|
141
|
-
// Clear rendered bitmap when the surface texture has rendered
|
142
|
-
// We'll post a message to the main loop asking to invalidate
|
143
|
-
if (shouldRenderFirstFrameAsBitmap()) {
|
144
|
-
postUpdate(new AtomicInteger());
|
145
|
-
}*/
|
146
136
|
}
|
147
137
|
|
148
|
-
/**
|
149
|
-
* This method is a way for us to clear the bitmap rendered on the first frame
|
150
|
-
* after at least 16 frames have passed - to avoid seeing blinks on the screen caused by
|
151
|
-
* TextureView frame sync issues. This is a hack to avoid those pesky blinks. Have no
|
152
|
-
* idea on how to sync the TextureView OpenGL updates.
|
153
|
-
* @param counter
|
154
|
-
*/
|
155
|
-
/*
|
156
|
-
TODO: Remove if we find another solution for first frame rendering
|
157
|
-
void postUpdate(AtomicInteger counter) {
|
158
|
-
counter.getAndIncrement();
|
159
|
-
if (counter.get() > 16) {
|
160
|
-
invalidate();
|
161
|
-
} else {
|
162
|
-
this.post(() -> {
|
163
|
-
postUpdate(counter);
|
164
|
-
});
|
165
|
-
}
|
166
|
-
}*/
|
167
|
-
|
168
138
|
@Override
|
169
139
|
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
|
170
|
-
Log.i(
|
140
|
+
Log.i(tag, "onSurfaceTextureSizeChanged " + width + "/" + height);
|
171
141
|
surfaceSizeChanged(width, height);
|
172
142
|
}
|
173
143
|
|
174
144
|
@Override
|
175
145
|
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
|
176
|
-
Log.i(
|
146
|
+
Log.i(tag, "onSurfaceTextureDestroyed");
|
177
147
|
// https://developer.android.com/reference/android/view/TextureView.SurfaceTextureListener#onSurfaceTextureDestroyed(android.graphics.SurfaceTexture)
|
178
|
-
|
179
|
-
|
180
|
-
mSurface = null;
|
148
|
+
destroySurface();
|
149
|
+
createSurfaceTexture();
|
181
150
|
return false;
|
182
151
|
}
|
183
152
|
|
@@ -186,17 +155,6 @@ public abstract class SkiaBaseView extends ReactViewGroup implements TextureView
|
|
186
155
|
// Nothing special to do here
|
187
156
|
}
|
188
157
|
|
189
|
-
/**
|
190
|
-
* Returns true if the view is able to directly render on the
|
191
|
-
* main thread. This can f.ex then be used to create a first frame
|
192
|
-
* render of the view. Returns true by default - override if not.
|
193
|
-
*/
|
194
|
-
/*
|
195
|
-
TODO: Remove if we find another solution for first frame rendering
|
196
|
-
protected boolean shouldRenderFirstFrameAsBitmap() {
|
197
|
-
return false;
|
198
|
-
}*/
|
199
|
-
|
200
158
|
protected abstract void surfaceAvailable(Object surface, int width, int height);
|
201
159
|
|
202
160
|
protected abstract void surfaceSizeChanged(int width, int height);
|
@@ -212,7 +170,4 @@ public abstract class SkiaBaseView extends ReactViewGroup implements TextureView
|
|
212
170
|
protected abstract void registerView(int nativeId);
|
213
171
|
|
214
172
|
protected abstract void unregisterView();
|
215
|
-
|
216
|
-
// TODO: Remove if we find another solution for first frame rendering
|
217
|
-
// protected native Object renderToBitmap(Object bitmap, int width, int height);
|
218
173
|
}
|
@@ -41,7 +41,4 @@ public class SkiaDomView extends SkiaBaseView {
|
|
41
41
|
protected native void registerView(int nativeId);
|
42
42
|
|
43
43
|
protected native void unregisterView();
|
44
|
-
|
45
|
-
// TODO: Remove if we find another solution for first frame rendering
|
46
|
-
// protected native Object renderToBitmap(Object bitmap, int width, int height);
|
47
44
|
}
|
@@ -41,7 +41,4 @@ public class SkiaDrawView extends SkiaBaseView {
|
|
41
41
|
protected native void registerView(int nativeId);
|
42
42
|
|
43
43
|
protected native void unregisterView();
|
44
|
-
|
45
|
-
// TODO: Remove if we find another solution for first frame rendering
|
46
|
-
// protected native Object renderToBitmap(Object bitmap, int width, int height);
|
47
44
|
}
|
@@ -41,8 +41,4 @@ public class SkiaPictureView extends SkiaBaseView {
|
|
41
41
|
protected native void registerView(int nativeId);
|
42
42
|
|
43
43
|
protected native void unregisterView();
|
44
|
-
|
45
|
-
// TODO: Remove if we find another solution for first frame rendering
|
46
|
-
// protected native Object renderToBitmap(Object bitmap, int width, int height);
|
47
|
-
|
48
44
|
}
|
package/cpp/api/JsiSkApi.h
CHANGED
@@ -12,6 +12,8 @@
|
|
12
12
|
#include "JsiSkContourMeasureIter.h"
|
13
13
|
#include "JsiSkDataFactory.h"
|
14
14
|
#include "JsiSkFont.h"
|
15
|
+
#include "JsiSkFontMgr.h"
|
16
|
+
#include "JsiSkFontMgrFactory.h"
|
15
17
|
#include "JsiSkImage.h"
|
16
18
|
#include "JsiSkImageFactory.h"
|
17
19
|
#include "JsiSkImageFilter.h"
|
@@ -39,6 +41,7 @@
|
|
39
41
|
#include "JsiSkShaderFactory.h"
|
40
42
|
#include "JsiSkSurfaceFactory.h"
|
41
43
|
#include "JsiSkTextBlobFactory.h"
|
44
|
+
#include "JsiSkTypeFaceFontProviderFactory.h"
|
42
45
|
#include "JsiSkTypeface.h"
|
43
46
|
#include "JsiSkTypefaceFactory.h"
|
44
47
|
#include "JsiSkVertices.h"
|
@@ -100,6 +103,11 @@ public:
|
|
100
103
|
std::make_shared<JsiSkSurfaceFactory>(context));
|
101
104
|
installReadonlyProperty("Picture",
|
102
105
|
std::make_shared<JsiSkPictureFactory>(context));
|
106
|
+
installReadonlyProperty("FontMgr",
|
107
|
+
std::make_shared<JsiSkFontMgrFactory>(context));
|
108
|
+
installReadonlyProperty(
|
109
|
+
"TypefaceFontProvider",
|
110
|
+
std::make_shared<JsiSkTypefaceFontProviderFactory>(context));
|
103
111
|
}
|
104
112
|
};
|
105
113
|
} // namespace RNSkia
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include <memory>
|
4
|
+
#include <numeric>
|
5
|
+
#include <utility>
|
6
|
+
#include <vector>
|
7
|
+
|
8
|
+
#include "JsiSkFontStyle.h"
|
9
|
+
#include "JsiSkHostObjects.h"
|
10
|
+
#include "RNSkLog.h"
|
11
|
+
#include <jsi/jsi.h>
|
12
|
+
|
13
|
+
#pragma clang diagnostic push
|
14
|
+
#pragma clang diagnostic ignored "-Wdocumentation"
|
15
|
+
|
16
|
+
#include "SkFontMgr.h"
|
17
|
+
|
18
|
+
#pragma clang diagnostic pop
|
19
|
+
|
20
|
+
namespace RNSkia {
|
21
|
+
|
22
|
+
namespace jsi = facebook::jsi;
|
23
|
+
|
24
|
+
class JsiSkFontMgr : public JsiSkWrappingSkPtrHostObject<SkFontMgr> {
|
25
|
+
public:
|
26
|
+
EXPORT_JSI_API_TYPENAME(JsiSkFontMgr, "FontMgr")
|
27
|
+
|
28
|
+
JsiSkFontMgr(std::shared_ptr<RNSkPlatformContext> context,
|
29
|
+
sk_sp<SkFontMgr> fontMgr)
|
30
|
+
: JsiSkWrappingSkPtrHostObject(std::move(context), fontMgr) {}
|
31
|
+
|
32
|
+
JSI_HOST_FUNCTION(countFamilies) { return getObject()->countFamilies(); }
|
33
|
+
|
34
|
+
JSI_HOST_FUNCTION(getFamilyName) {
|
35
|
+
auto i = static_cast<int>(arguments[0].asNumber());
|
36
|
+
SkString name;
|
37
|
+
getObject()->getFamilyName(i, &name);
|
38
|
+
return jsi::String::createFromUtf8(runtime, name.c_str());
|
39
|
+
}
|
40
|
+
|
41
|
+
JSI_HOST_FUNCTION(matchFamilyStyle) {
|
42
|
+
auto name = arguments[0].asString(runtime).utf8(runtime);
|
43
|
+
auto fontStyle = JsiSkFontStyle::fromValue(runtime, arguments[1]);
|
44
|
+
auto typeface = getObject()->matchFamilyStyle(name.c_str(), *fontStyle);
|
45
|
+
return jsi::Object::createFromHostObject(
|
46
|
+
runtime, std::make_shared<JsiSkTypeface>(getContext(), typeface));
|
47
|
+
}
|
48
|
+
|
49
|
+
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkFontMgr, countFamilies),
|
50
|
+
JSI_EXPORT_FUNC(JsiSkFontMgr, getFamilyName),
|
51
|
+
JSI_EXPORT_FUNC(JsiSkFontMgr, matchFamilyStyle))
|
52
|
+
};
|
53
|
+
|
54
|
+
} // namespace RNSkia
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include <memory>
|
4
|
+
#include <utility>
|
5
|
+
#include <vector>
|
6
|
+
|
7
|
+
#include <jsi/jsi.h>
|
8
|
+
|
9
|
+
#include "JsiSkHostObjects.h"
|
10
|
+
|
11
|
+
#pragma clang diagnostic push
|
12
|
+
#pragma clang diagnostic ignored "-Wdocumentation"
|
13
|
+
|
14
|
+
#include "SkFontMgr.h"
|
15
|
+
#include "include/ports/SkFontMgr_data.h"
|
16
|
+
|
17
|
+
#pragma clang diagnostic pop
|
18
|
+
|
19
|
+
namespace RNSkia {
|
20
|
+
|
21
|
+
namespace jsi = facebook::jsi;
|
22
|
+
|
23
|
+
class JsiSkFontMgrFactory : public JsiSkHostObject {
|
24
|
+
public:
|
25
|
+
JSI_HOST_FUNCTION(System) {
|
26
|
+
auto context = getContext();
|
27
|
+
static SkOnce once;
|
28
|
+
static sk_sp<SkFontMgr> fontMgr;
|
29
|
+
once([&context, &runtime] { fontMgr = context->createFontMgr(); });
|
30
|
+
return jsi::Object::createFromHostObject(
|
31
|
+
runtime, std::make_shared<JsiSkFontMgr>(std::move(context), fontMgr));
|
32
|
+
}
|
33
|
+
|
34
|
+
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkFontMgrFactory, System))
|
35
|
+
|
36
|
+
explicit JsiSkFontMgrFactory(std::shared_ptr<RNSkPlatformContext> context)
|
37
|
+
: JsiSkHostObject(std::move(context)) {}
|
38
|
+
};
|
39
|
+
|
40
|
+
} // namespace RNSkia
|