@shopify/react-native-skia 0.1.202 → 0.1.203
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 +9 -9
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +11 -0
- 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/cpp/skia/include/core/SkColorTable.h +1 -1
- 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
|
|
@@ -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
|
}
|
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
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
#include <utility>
|
|
5
|
+
|
|
6
|
+
#include <jsi/jsi.h>
|
|
7
|
+
|
|
8
|
+
#include "JsiSkHostObjects.h"
|
|
9
|
+
|
|
10
|
+
#pragma clang diagnostic push
|
|
11
|
+
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
12
|
+
|
|
13
|
+
#include "SkFontStyle.h"
|
|
14
|
+
|
|
15
|
+
#pragma clang diagnostic pop
|
|
16
|
+
|
|
17
|
+
namespace RNSkia {
|
|
18
|
+
|
|
19
|
+
namespace jsi = facebook::jsi;
|
|
20
|
+
|
|
21
|
+
class JsiSkFontStyle : public JsiSkWrappingSharedPtrHostObject<SkFontStyle> {
|
|
22
|
+
public:
|
|
23
|
+
JSI_API_TYPENAME("FontStyle");
|
|
24
|
+
|
|
25
|
+
JsiSkFontStyle(std::shared_ptr<RNSkPlatformContext> context,
|
|
26
|
+
const SkFontStyle &fontStyle)
|
|
27
|
+
: JsiSkWrappingSharedPtrHostObject<SkFontStyle>(
|
|
28
|
+
std::move(context), std::make_shared<SkFontStyle>(fontStyle)) {}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
Returns the underlying object from a host object of this type
|
|
32
|
+
*/
|
|
33
|
+
static std::shared_ptr<SkFontStyle> fromValue(jsi::Runtime &runtime,
|
|
34
|
+
const jsi::Value &obj) {
|
|
35
|
+
const auto &object = obj.asObject(runtime);
|
|
36
|
+
if (object.isHostObject(runtime)) {
|
|
37
|
+
return object.asHostObject<JsiSkFontStyle>(runtime)->getObject();
|
|
38
|
+
} else {
|
|
39
|
+
auto weight =
|
|
40
|
+
static_cast<int>(object.getProperty(runtime, "weight").asNumber());
|
|
41
|
+
auto width =
|
|
42
|
+
static_cast<int>(object.getProperty(runtime, "width").asNumber());
|
|
43
|
+
auto slant = static_cast<SkFontStyle::Slant>(
|
|
44
|
+
object.getProperty(runtime, "slant").asNumber());
|
|
45
|
+
SkFontStyle style(weight, width, slant);
|
|
46
|
+
return std::make_shared<SkFontStyle>(style);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
Returns the jsi object from a host object of this type
|
|
52
|
+
*/
|
|
53
|
+
static jsi::Value toValue(jsi::Runtime &runtime,
|
|
54
|
+
std::shared_ptr<RNSkPlatformContext> context,
|
|
55
|
+
const SkFontStyle &fontStyle) {
|
|
56
|
+
return jsi::Object::createFromHostObject(
|
|
57
|
+
runtime,
|
|
58
|
+
std::make_shared<JsiSkFontStyle>(std::move(context), fontStyle));
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
#include <utility>
|
|
5
|
+
|
|
6
|
+
#include <jsi/jsi.h>
|
|
7
|
+
|
|
8
|
+
#include "JsiSkFontStyle.h"
|
|
9
|
+
#include "JsiSkHostObjects.h"
|
|
10
|
+
#include "JsiSkTypeface.h"
|
|
11
|
+
|
|
12
|
+
#include "RNSkLog.h"
|
|
13
|
+
|
|
14
|
+
#pragma clang diagnostic push
|
|
15
|
+
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
16
|
+
|
|
17
|
+
#include "SkFont.h"
|
|
18
|
+
#include "skparagraph/include/TypefaceFontProvider.h"
|
|
19
|
+
|
|
20
|
+
#pragma clang diagnostic pop
|
|
21
|
+
|
|
22
|
+
namespace RNSkia {
|
|
23
|
+
|
|
24
|
+
namespace jsi = facebook::jsi;
|
|
25
|
+
namespace para = skia::textlayout;
|
|
26
|
+
|
|
27
|
+
class JsiSkTypefaceFontProvider
|
|
28
|
+
: public JsiSkWrappingSkPtrHostObject<para::TypefaceFontProvider> {
|
|
29
|
+
public:
|
|
30
|
+
EXPORT_JSI_API_TYPENAME(JsiSkTypefaceFontProvider, "FontMgr")
|
|
31
|
+
JSI_EXPORT_FUNCTIONS(
|
|
32
|
+
JSI_EXPORT_FUNC(JsiSkTypefaceFontProvider, dispose),
|
|
33
|
+
JSI_EXPORT_FUNC(JsiSkTypefaceFontProvider, registerFont),
|
|
34
|
+
JSI_EXPORT_FUNC(JsiSkTypefaceFontProvider, matchFamilyStyle),
|
|
35
|
+
JSI_EXPORT_FUNC(JsiSkTypefaceFontProvider, countFamilies),
|
|
36
|
+
JSI_EXPORT_FUNC(JsiSkTypefaceFontProvider, getFamilyName))
|
|
37
|
+
|
|
38
|
+
JSI_HOST_FUNCTION(registerFont) {
|
|
39
|
+
sk_sp<SkTypeface> typeface =
|
|
40
|
+
JsiSkTypeface::fromValue(runtime, arguments[0]);
|
|
41
|
+
SkString familyName(arguments[1].asString(runtime).utf8(runtime).c_str());
|
|
42
|
+
auto result = getObject()->registerTypeface(typeface, familyName);
|
|
43
|
+
return jsi::Value::undefined();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
JSI_HOST_FUNCTION(matchFamilyStyle) {
|
|
47
|
+
auto name = arguments[0].asString(runtime).utf8(runtime);
|
|
48
|
+
auto fontStyle = JsiSkFontStyle::fromValue(runtime, arguments[1]);
|
|
49
|
+
auto typeface = getObject()->matchFamilyStyle(name.c_str(), *fontStyle);
|
|
50
|
+
return jsi::Object::createFromHostObject(
|
|
51
|
+
runtime, std::make_shared<JsiSkTypeface>(getContext(), typeface));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
JSI_HOST_FUNCTION(countFamilies) { return getObject()->countFamilies(); }
|
|
55
|
+
|
|
56
|
+
JSI_HOST_FUNCTION(getFamilyName) {
|
|
57
|
+
auto i = static_cast<int>(arguments[0].asNumber());
|
|
58
|
+
SkString name;
|
|
59
|
+
getObject()->getFamilyName(i, &name);
|
|
60
|
+
return jsi::String::createFromUtf8(runtime, name.c_str());
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
JsiSkTypefaceFontProvider(std::shared_ptr<RNSkPlatformContext> context,
|
|
64
|
+
sk_sp<para::TypefaceFontProvider> tfProvider)
|
|
65
|
+
: JsiSkWrappingSkPtrHostObject(std::move(context),
|
|
66
|
+
std::move(tfProvider)) {}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
Returns the jsi object from a host object of this type
|
|
70
|
+
*/
|
|
71
|
+
static jsi::Value toValue(jsi::Runtime &runtime,
|
|
72
|
+
std::shared_ptr<RNSkPlatformContext> context,
|
|
73
|
+
sk_sp<para::TypefaceFontProvider> tfProvider) {
|
|
74
|
+
return jsi::Object::createFromHostObject(
|
|
75
|
+
runtime, std::make_shared<JsiSkTypefaceFontProvider>(
|
|
76
|
+
std::move(context), std::move(tfProvider)));
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
#include <utility>
|
|
5
|
+
|
|
6
|
+
#include <jsi/jsi.h>
|
|
7
|
+
|
|
8
|
+
#include "JsiSkData.h"
|
|
9
|
+
#include "JsiSkHostObjects.h"
|
|
10
|
+
#include "JsiSkTypefaceFontProvider.h"
|
|
11
|
+
|
|
12
|
+
namespace RNSkia {
|
|
13
|
+
|
|
14
|
+
namespace jsi = facebook::jsi;
|
|
15
|
+
namespace para = skia::textlayout;
|
|
16
|
+
|
|
17
|
+
class JsiSkTypefaceFontProviderFactory : public JsiSkHostObject {
|
|
18
|
+
public:
|
|
19
|
+
JSI_HOST_FUNCTION(Make) {
|
|
20
|
+
return jsi::Object::createFromHostObject(
|
|
21
|
+
runtime, std::make_shared<JsiSkTypefaceFontProvider>(
|
|
22
|
+
getContext(), sk_make_sp<para::TypefaceFontProvider>()));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkTypefaceFontProviderFactory, Make))
|
|
26
|
+
|
|
27
|
+
explicit JsiSkTypefaceFontProviderFactory(
|
|
28
|
+
std::shared_ptr<RNSkPlatformContext> context)
|
|
29
|
+
: JsiSkHostObject(std::move(context)) {}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
} // namespace RNSkia
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
16
16
|
|
|
17
17
|
#include "SkData.h"
|
|
18
|
+
#include "SkFontMgr.h"
|
|
18
19
|
#include "SkImage.h"
|
|
19
20
|
#include "SkStream.h"
|
|
20
21
|
#include "SkSurface.h"
|
|
@@ -132,6 +133,11 @@ public:
|
|
|
132
133
|
*/
|
|
133
134
|
virtual sk_sp<SkSurface> makeOffscreenSurface(int width, int height) = 0;
|
|
134
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Return the Platform specific font manager
|
|
138
|
+
*/
|
|
139
|
+
virtual sk_sp<SkFontMgr> createFontMgr() = 0;
|
|
140
|
+
|
|
135
141
|
/**
|
|
136
142
|
* Creates an skImage containing the screenshot of a native view and its
|
|
137
143
|
* children.
|
|
@@ -19,7 +19,7 @@ class SkWriteBuffer;
|
|
|
19
19
|
* of `SkColorFilters::Table`, and provides a way to share the table data between client code and
|
|
20
20
|
* the returned SkColorFilter. Once created, an SkColorTable is immutable.
|
|
21
21
|
*/
|
|
22
|
-
class SkColorTable : public SkRefCnt {
|
|
22
|
+
class SK_API SkColorTable : public SkRefCnt {
|
|
23
23
|
public:
|
|
24
24
|
// Creates a new SkColorTable with 'table' used for all four channels. The table is copied into
|
|
25
25
|
// the SkColorTable.
|
|
@@ -64,6 +64,7 @@ public:
|
|
|
64
64
|
|
|
65
65
|
void raiseError(const std::exception &err) override;
|
|
66
66
|
sk_sp<SkSurface> makeOffscreenSurface(int width, int height) override;
|
|
67
|
+
sk_sp<SkFontMgr> createFontMgr() override;
|
|
67
68
|
|
|
68
69
|
void willInvalidateModules() {
|
|
69
70
|
// We need to do some house-cleaning here!
|
|
@@ -9,8 +9,11 @@
|
|
|
9
9
|
#pragma clang diagnostic push
|
|
10
10
|
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
11
11
|
|
|
12
|
+
#include "SkFontMgr.h"
|
|
12
13
|
#include "SkSurface.h"
|
|
13
14
|
|
|
15
|
+
#include "include/ports/SkFontMgr_mac_ct.h"
|
|
16
|
+
|
|
14
17
|
#pragma clang diagnostic pop
|
|
15
18
|
|
|
16
19
|
namespace RNSkia {
|
|
@@ -62,6 +65,10 @@ sk_sp<SkSurface> RNSkiOSPlatformContext::makeOffscreenSurface(int width,
|
|
|
62
65
|
return SkiaMetalSurfaceFactory::makeOffscreenSurface(width, height);
|
|
63
66
|
}
|
|
64
67
|
|
|
68
|
+
sk_sp<SkFontMgr> RNSkiOSPlatformContext::createFontMgr() {
|
|
69
|
+
return SkFontMgr_New_CoreText(nullptr);
|
|
70
|
+
}
|
|
71
|
+
|
|
65
72
|
void RNSkiOSPlatformContext::runOnMainThread(std::function<void()> func) {
|
|
66
73
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
67
74
|
func();
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import type { SkData, DataSourceParam, SkJSIInstance } from "../types";
|
|
2
|
+
export declare const loadData: <T>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: ((err: Error) => void) | undefined) => Promise<T | null>;
|
|
3
|
+
export declare const useCollectionLoading: <T extends SkJSIInstance<string>>(source: DataSourceParam[], loader: () => Promise<(T | null)[]>) => T[] | null;
|
|
2
4
|
export declare const useRawData: <T extends SkJSIInstance<string>>(source: DataSourceParam, factory: (data: SkData) => T | null, onError?: ((err: Error) => void) | undefined) => T | null;
|
|
3
5
|
export declare const useData: (source: DataSourceParam, onError?: ((err: Error) => void) | undefined) => SkData | null;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.useRawData = exports.useData = void 0;
|
|
6
|
+
exports.useRawData = exports.useData = exports.useCollectionLoading = exports.loadData = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
|
|
@@ -33,6 +33,8 @@ const loadData = (source, factory, onError) => {
|
|
|
33
33
|
}
|
|
34
34
|
};
|
|
35
35
|
|
|
36
|
+
exports.loadData = loadData;
|
|
37
|
+
|
|
36
38
|
const useLoading = (source, loader) => {
|
|
37
39
|
const mounted = (0, _react.useRef)(false);
|
|
38
40
|
const [data, setData] = (0, _react.useState)(null);
|
|
@@ -55,6 +57,32 @@ const useLoading = (source, loader) => {
|
|
|
55
57
|
return data;
|
|
56
58
|
};
|
|
57
59
|
|
|
60
|
+
const useCollectionLoading = (source, loader) => {
|
|
61
|
+
const mounted = (0, _react.useRef)(false);
|
|
62
|
+
const [data, setData] = (0, _react.useState)(null);
|
|
63
|
+
const dataRef = (0, _react.useRef)(null);
|
|
64
|
+
(0, _react.useEffect)(() => {
|
|
65
|
+
mounted.current = true;
|
|
66
|
+
loader().then(result => {
|
|
67
|
+
const value = result.filter(r => r !== null);
|
|
68
|
+
|
|
69
|
+
if (mounted.current) {
|
|
70
|
+
setData(value);
|
|
71
|
+
dataRef.current = value;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
return () => {
|
|
75
|
+
var _dataRef$current2;
|
|
76
|
+
|
|
77
|
+
(_dataRef$current2 = dataRef.current) === null || _dataRef$current2 === void 0 ? void 0 : _dataRef$current2.forEach(instance => instance === null || instance === void 0 ? void 0 : instance.dispose());
|
|
78
|
+
mounted.current = false;
|
|
79
|
+
}; // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
80
|
+
}, [source]);
|
|
81
|
+
return data;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
exports.useCollectionLoading = useCollectionLoading;
|
|
85
|
+
|
|
58
86
|
const useRawData = (source, factory, onError) => useLoading(source, () => loadData(source, factory, onError));
|
|
59
87
|
|
|
60
88
|
exports.useRawData = useRawData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["factoryWrapper","data2","factory","onError","factoryResult","Error","loadData","source","undefined","Promise","resolve","Uint8Array","Skia","Data","fromBytes","uri","Platform","resolveAsset","fromURI","then","d","useLoading","loader","mounted","useRef","data","setData","useState","dataRef","useEffect","current","value","dispose","useRawData","identity","useData"],"sources":["Data.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { Skia } from \"../Skia\";\nimport type { SkData, DataSourceParam, SkJSIInstance } from \"../types\";\nimport { Platform } from \"../../Platform\";\n\nconst factoryWrapper = <T>(\n data2: SkData,\n factory: (data: SkData) => T,\n onError?: (err: Error) => void\n) => {\n const factoryResult = factory(data2);\n if (factoryResult === null) {\n onError && onError(new Error(\"Could not load data\"));\n return null;\n } else {\n return factoryResult;\n }\n};\n\
|
|
1
|
+
{"version":3,"names":["factoryWrapper","data2","factory","onError","factoryResult","Error","loadData","source","undefined","Promise","resolve","Uint8Array","Skia","Data","fromBytes","uri","Platform","resolveAsset","fromURI","then","d","useLoading","loader","mounted","useRef","data","setData","useState","dataRef","useEffect","current","value","dispose","useCollectionLoading","result","filter","r","forEach","instance","useRawData","identity","useData"],"sources":["Data.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport { Skia } from \"../Skia\";\nimport type { SkData, DataSourceParam, SkJSIInstance } from \"../types\";\nimport { Platform } from \"../../Platform\";\n\nconst factoryWrapper = <T>(\n data2: SkData,\n factory: (data: SkData) => T,\n onError?: (err: Error) => void\n) => {\n const factoryResult = factory(data2);\n if (factoryResult === null) {\n onError && onError(new Error(\"Could not load data\"));\n return null;\n } else {\n return factoryResult;\n }\n};\n\nexport const loadData = <T>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void\n): Promise<T | null> => {\n if (source === null || source === undefined) {\n return new Promise((resolve) => resolve(null));\n } else if (source instanceof Uint8Array) {\n return new Promise((resolve) =>\n resolve(factoryWrapper(Skia.Data.fromBytes(source), factory, onError))\n );\n } else {\n const uri =\n typeof source === \"string\" ? source : Platform.resolveAsset(source);\n return Skia.Data.fromURI(uri).then((d) =>\n factoryWrapper(d, factory, onError)\n );\n }\n};\n\nconst useLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n loader: () => Promise<T | null>\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T | null>(null);\n const dataRef = useRef<T | null>(null);\n useEffect(() => {\n mounted.current = true;\n loader().then((value) => {\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n return () => {\n dataRef.current?.dispose();\n mounted.current = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n return data;\n};\n\nexport const useCollectionLoading = <T extends SkJSIInstance<string>>(\n source: DataSourceParam[],\n loader: () => Promise<(T | null)[]>\n) => {\n const mounted = useRef(false);\n const [data, setData] = useState<T[] | null>(null);\n const dataRef = useRef<T[] | null>(null);\n\n useEffect(() => {\n mounted.current = true;\n loader().then((result) => {\n const value = result.filter((r) => r !== null) as T[];\n if (mounted.current) {\n setData(value);\n dataRef.current = value;\n }\n });\n\n return () => {\n dataRef.current?.forEach((instance) => instance?.dispose());\n mounted.current = false;\n };\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [source]);\n\n return data;\n};\n\nexport const useRawData = <T extends SkJSIInstance<string>>(\n source: DataSourceParam,\n factory: (data: SkData) => T | null,\n onError?: (err: Error) => void\n) => useLoading(source, () => loadData<T>(source, factory, onError));\n\nconst identity = (data: SkData) => data;\n\nexport const useData = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => useRawData(source, identity, onError);\n"],"mappings":"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"}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
|
-
import type { DataSourceParam } from "../types";
|
|
1
|
+
import type { DataModule, DataSourceParam, SkFontMgr } from "../types";
|
|
2
|
+
import type { SkTypefaceFontProvider } from "../types/Paragraph/TypefaceFontProvider";
|
|
2
3
|
/**
|
|
3
4
|
* Returns a Skia Font object
|
|
4
5
|
* */
|
|
5
6
|
export declare const useFont: (font: DataSourceParam, size?: number, onError?: ((err: Error) => void) | undefined) => import("../types").SkFont | null;
|
|
7
|
+
declare type Slant = "normal" | "italic" | "oblique";
|
|
8
|
+
declare type Weight = "normal" | "bold" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900";
|
|
9
|
+
interface RNFontStyle {
|
|
10
|
+
fontFamily: string;
|
|
11
|
+
fontSize: number;
|
|
12
|
+
fontStyle: Slant;
|
|
13
|
+
fontWeight: Weight;
|
|
14
|
+
}
|
|
15
|
+
export declare const matchFont: (inputStyle?: Partial<RNFontStyle>, fontMgr?: SkFontMgr) => import("../types").SkFont;
|
|
16
|
+
export declare const listFontFamilies: (fontMgr?: SkFontMgr) => string[];
|
|
17
|
+
export declare const useFonts: (sources: Record<string, DataModule[]>) => SkTypefaceFontProvider | null;
|
|
18
|
+
export {};
|
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.useFont = void 0;
|
|
6
|
+
exports.useFonts = exports.useFont = exports.matchFont = exports.listFontFamilies = void 0;
|
|
7
7
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
|
|
10
10
|
var _Skia = require("../Skia");
|
|
11
11
|
|
|
12
|
+
var _types = require("../types");
|
|
13
|
+
|
|
14
|
+
var _Platform = require("../../Platform");
|
|
15
|
+
|
|
12
16
|
var _Typeface = require("./Typeface");
|
|
13
17
|
|
|
14
18
|
/*global SkiaApi*/
|
|
@@ -30,4 +34,92 @@ const useFont = (font, size, onError) => {
|
|
|
30
34
|
};
|
|
31
35
|
|
|
32
36
|
exports.useFont = useFont;
|
|
37
|
+
const defaultFontStyle = {
|
|
38
|
+
fontFamily: "System",
|
|
39
|
+
fontSize: 14,
|
|
40
|
+
fontStyle: "normal",
|
|
41
|
+
fontWeight: "normal"
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const slant = s => {
|
|
45
|
+
if (s === "italic") {
|
|
46
|
+
return _types.FontSlant.Italic;
|
|
47
|
+
} else if (s === "oblique") {
|
|
48
|
+
return _types.FontSlant.Oblique;
|
|
49
|
+
} else {
|
|
50
|
+
return _types.FontSlant.Upright;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const weight = fontWeight => {
|
|
55
|
+
switch (fontWeight) {
|
|
56
|
+
case "normal":
|
|
57
|
+
return 400;
|
|
58
|
+
|
|
59
|
+
case "bold":
|
|
60
|
+
return 700;
|
|
61
|
+
|
|
62
|
+
default:
|
|
63
|
+
return parseInt(fontWeight, 10);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const matchFont = function () {
|
|
68
|
+
let inputStyle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
69
|
+
let fontMgr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _Skia.Skia.FontMgr.System();
|
|
70
|
+
const fontStyle = { ...defaultFontStyle,
|
|
71
|
+
...inputStyle
|
|
72
|
+
};
|
|
73
|
+
const style = {
|
|
74
|
+
weight: weight(fontStyle.fontWeight),
|
|
75
|
+
width: 5,
|
|
76
|
+
slant: slant(fontStyle.fontStyle)
|
|
77
|
+
};
|
|
78
|
+
const typeface = fontMgr.matchFamilyStyle(fontStyle.fontFamily, style);
|
|
79
|
+
return _Skia.Skia.Font(typeface, fontStyle.fontSize);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
exports.matchFont = matchFont;
|
|
83
|
+
|
|
84
|
+
const listFontFamilies = function () {
|
|
85
|
+
let fontMgr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _Skia.Skia.FontMgr.System();
|
|
86
|
+
return new Array(fontMgr.countFamilies()).fill(0).map((_, i) => fontMgr.getFamilyName(i));
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
exports.listFontFamilies = listFontFamilies;
|
|
90
|
+
|
|
91
|
+
const loadTypefaces = typefacesToLoad => {
|
|
92
|
+
const promises = Object.keys(typefacesToLoad).flatMap(familyName => {
|
|
93
|
+
return typefacesToLoad[familyName].map(typefaceToLoad => {
|
|
94
|
+
return _Skia.Skia.Data.fromURI(_Platform.Platform.resolveAsset(typefaceToLoad)).then(data => {
|
|
95
|
+
const tf = _Skia.Skia.Typeface.MakeFreeTypeFaceFromData(data);
|
|
96
|
+
|
|
97
|
+
if (tf === null) {
|
|
98
|
+
throw new Error(`Couldn't create typeface for ${familyName}`);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return [familyName, tf];
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
return Promise.all(promises);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
const useFonts = sources => {
|
|
109
|
+
const [fontMgr, setFontMgr] = (0, _react.useState)(null);
|
|
110
|
+
(0, _react.useEffect)(() => {
|
|
111
|
+
loadTypefaces(sources).then(result => {
|
|
112
|
+
const fMgr = _Skia.Skia.TypefaceFontProvider.Make();
|
|
113
|
+
|
|
114
|
+
result.forEach(_ref => {
|
|
115
|
+
let [familyName, typeface] = _ref;
|
|
116
|
+
fMgr.registerFont(typeface, familyName);
|
|
117
|
+
});
|
|
118
|
+
setFontMgr(fMgr);
|
|
119
|
+
}); // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
120
|
+
}, []);
|
|
121
|
+
return fontMgr;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
exports.useFonts = useFonts;
|
|
33
125
|
//# sourceMappingURL=Font.js.map
|