@shopify/react-native-skia 2.11.2 → 2.12.0
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/Package.swift +117 -0
- package/android/CMakeLists.txt +1 -2
- package/cpp/api/JsiSkSVGFactory.h +4 -0
- package/cpp/jsi/JSICache.cpp +99 -0
- package/cpp/jsi/JSICache.h +90 -0
- package/cpp/jsi/NativeObject.h +30 -97
- package/cpp/jsi/ViewProperty.h +0 -24
- package/cpp/rnskia/RNDawnContext.h +2 -1
- package/cpp/rnskia/RNDawnWindowContext.h +22 -0
- package/cpp/rnskia/RNSkManager.cpp +0 -11
- package/cpp/skia/include/core/RasterContext.h +25 -0
- package/cpp/skia/include/core/SkCanvas.h +0 -1
- package/cpp/skia/include/core/SkContext.h +62 -0
- package/cpp/skia/include/core/SkContextOptions.h +15 -0
- package/cpp/skia/include/core/SkMilestone.h +1 -1
- package/cpp/skia/include/core/SkPicture.h +36 -18
- package/cpp/skia/include/core/SkRecorder.h +8 -0
- package/cpp/skia/include/core/SkSerialProcs.h +2 -6
- package/cpp/skia/include/effects/SkImageFilters.h +15 -2
- package/cpp/skia/include/gpu/ganesh/GrDirectContext.h +73 -47
- package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +7 -4
- package/cpp/skia/include/gpu/ganesh/d3d/GrD3DDirectContext.h +12 -0
- package/cpp/skia/include/gpu/ganesh/gl/GrGLDirectContext.h +11 -0
- package/cpp/skia/include/gpu/ganesh/mtl/GrMtlDirectContext.h +11 -0
- package/cpp/skia/include/gpu/ganesh/vk/GrVkDirectContext.h +13 -0
- package/cpp/skia/include/gpu/graphite/ContextOptions.h +6 -0
- package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +5 -4
- package/cpp/skia/include/gpu/graphite/PrecompileContext.h +9 -1
- package/cpp/skia/include/gpu/graphite/Recorder.h +0 -2
- package/cpp/skia/include/gpu/graphite/Recording.h +3 -0
- package/cpp/skia/include/gpu/graphite/dawn/DawnBackendContext.h +8 -0
- package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +11 -0
- package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteContext.h +11 -0
- package/cpp/skia/include/private/SkLog.h +1 -19
- package/cpp/skia/include/private/chromium/GrVkSecondaryCBDrawContext.h +2 -1
- package/cpp/skia/include/utils/SkLogHandler.h +53 -0
- package/cpp/skia/include/utils/SkNWayCanvas.h +1 -0
- package/cpp/skia/modules/skcms/src/Transform_inl.h +9 -10
- package/cpp/skia/modules/skcms/src/skcms_internals.h +8 -3
- package/cpp/skia/modules/skottie/include/SkottieProperty.h +2 -0
- package/cpp/skia/modules/skottie/include/TextShaper.h +1 -0
- package/cpp/skia/modules/skshaper/include/SkShaper.h +23 -1
- package/include/ReactNativeSkia.h +6 -0
- package/lib/commonjs/skia/web/JsiSkCanvas.js +4 -4
- package/lib/commonjs/skia/web/JsiSkCanvas.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkImage.js +6 -3
- package/lib/commonjs/skia/web/JsiSkImage.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkPathBuilder.d.ts +1 -1
- package/lib/commonjs/skia/web/JsiSkPathBuilder.js +2 -2
- package/lib/commonjs/skia/web/JsiSkPathBuilder.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkTextStyle.js +5 -5
- package/lib/commonjs/skia/web/JsiSkTextStyle.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkottieAnimation.js +8 -8
- package/lib/commonjs/skia/web/JsiSkottieAnimation.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/commands/Drawing.js +2 -1
- package/lib/commonjs/sksg/Recorder/commands/Drawing.js.map +1 -1
- package/lib/commonjs/views/SkiaPictureView.web.js +228 -43
- package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
- package/lib/module/skia/web/JsiSkCanvas.js +4 -4
- package/lib/module/skia/web/JsiSkCanvas.js.map +1 -1
- package/lib/module/skia/web/JsiSkImage.js +6 -3
- package/lib/module/skia/web/JsiSkImage.js.map +1 -1
- package/lib/module/skia/web/JsiSkPathBuilder.d.ts +1 -1
- package/lib/module/skia/web/JsiSkPathBuilder.js +2 -2
- package/lib/module/skia/web/JsiSkPathBuilder.js.map +1 -1
- package/lib/module/skia/web/JsiSkTextStyle.js +5 -5
- package/lib/module/skia/web/JsiSkTextStyle.js.map +1 -1
- package/lib/module/skia/web/JsiSkottieAnimation.js +8 -8
- package/lib/module/skia/web/JsiSkottieAnimation.js.map +1 -1
- package/lib/module/sksg/Recorder/commands/Drawing.js +2 -1
- package/lib/module/sksg/Recorder/commands/Drawing.js.map +1 -1
- package/lib/module/views/SkiaPictureView.web.js +228 -43
- package/lib/module/views/SkiaPictureView.web.js.map +1 -1
- package/lib/typescript/lib/commonjs/skia/web/JsiSkPathBuilder.d.ts +1 -1
- package/lib/typescript/lib/module/skia/web/JsiSkPathBuilder.d.ts +1 -1
- package/lib/typescript/react-native.config.d.ts +3 -0
- package/lib/typescript/src/skia/web/JsiSkPathBuilder.d.ts +1 -1
- package/package.json +12 -9
- package/react-native.config.js +5 -0
- package/src/skia/web/JsiSkCanvas.ts +11 -6
- package/src/skia/web/JsiSkImage.ts +6 -3
- package/src/skia/web/JsiSkPathBuilder.ts +2 -2
- package/src/skia/web/JsiSkTextStyle.ts +20 -15
- package/src/skia/web/JsiSkottieAnimation.ts +8 -8
- package/src/sksg/Recorder/commands/Drawing.ts +2 -1
- package/src/views/SkiaPictureView.web.tsx +228 -43
- package/cpp/jsi/RuntimeAwareCache.cpp +0 -8
- package/cpp/jsi/RuntimeAwareCache.h +0 -146
- package/cpp/jsi/RuntimeLifecycleMonitor.cpp +0 -72
- package/cpp/jsi/RuntimeLifecycleMonitor.h +0 -32
|
@@ -266,8 +266,7 @@ enum DrawTypeFlags : uint16_t {
|
|
|
266
266
|
|
|
267
267
|
// kDrawVertices should be used to generate Pipelines that use the following RenderSteps:
|
|
268
268
|
// VerticesRenderStep[*] for:
|
|
269
|
-
// [
|
|
270
|
-
// [Tristrips], [TristripsTexCoords], [TristripsColor], [TristripsColorTexCoords]
|
|
269
|
+
// [Pos], [PosTexCoords], [PosColor], [PosColorTexCoords],
|
|
271
270
|
kDrawVertices = 1 << 5,
|
|
272
271
|
|
|
273
272
|
// kCircularArc renders filled circular arcs, with or without the center included, and
|
|
@@ -297,7 +296,7 @@ enum DrawTypeFlags : uint16_t {
|
|
|
297
296
|
// This draw type covers all the methods Skia uses to draw drop shadows. It can be used to
|
|
298
297
|
// generate Pipelines which, as part of their labels, have:
|
|
299
298
|
// the AnalyticBlurRenderStep
|
|
300
|
-
// VerticesRenderStep[
|
|
299
|
+
// VerticesRenderStep[PosColor] with a GaussianColorFilter
|
|
301
300
|
// For this draw type the PaintOptions parameter to Precompile() will be ignored.
|
|
302
301
|
kDropShadows = 1 << 11,
|
|
303
302
|
|
|
@@ -307,7 +306,9 @@ enum DrawTypeFlags : uint16_t {
|
|
|
307
306
|
// AnalyticAndAtlasClip
|
|
308
307
|
kAnalyticClip = 1 << 12,
|
|
309
308
|
|
|
310
|
-
|
|
309
|
+
kDrawMesh = 1 << 13,
|
|
310
|
+
|
|
311
|
+
kLast = kDrawMesh,
|
|
311
312
|
};
|
|
312
313
|
|
|
313
314
|
} // namespace skgpu::graphite
|
|
@@ -24,6 +24,14 @@ class SharedContext;
|
|
|
24
24
|
class PrecompileContextPriv;
|
|
25
25
|
class ResourceProvider;
|
|
26
26
|
|
|
27
|
+
// The PrecompileContext is spawned from a generating Context via Context::makePrecompileContext.
|
|
28
|
+
// It should only be used on a single thread but that can be different from the main thread (i.e.,
|
|
29
|
+
// the one the Context is operating on). Many PrecompileContext's can be operating in parallel
|
|
30
|
+
// but the majority of the benefit will be from the threaded compilation within the
|
|
31
|
+
// PrecompileContext. As for that, the PipelineContext(s) borrow(s) the Executor from the
|
|
32
|
+
// generating Context. To make lifetime management of the Executor reasonable, if the
|
|
33
|
+
// Context is deleted before its PrecompileContexts, the PrecompileContexts will lose access
|
|
34
|
+
// to the Executor and revert to single threaded compilation.
|
|
27
35
|
class SK_API PrecompileContext {
|
|
28
36
|
public:
|
|
29
37
|
~PrecompileContext();
|
|
@@ -99,9 +107,9 @@ private:
|
|
|
99
107
|
|
|
100
108
|
explicit PrecompileContext(sk_sp<SharedContext>);
|
|
101
109
|
|
|
110
|
+
// The PrecompileContext should not be used on multiple threads
|
|
102
111
|
mutable SingleOwner fSingleOwner;
|
|
103
112
|
sk_sp<SharedContext> fSharedContext;
|
|
104
|
-
std::unique_ptr<ResourceProvider> fResourceProvider;
|
|
105
113
|
};
|
|
106
114
|
|
|
107
115
|
} // namespace skgpu::graphite
|
|
@@ -52,7 +52,6 @@ class BackendTexture;
|
|
|
52
52
|
class Context;
|
|
53
53
|
class Device;
|
|
54
54
|
class DrawBufferManager;
|
|
55
|
-
class StorageBufferManager;
|
|
56
55
|
class ImageProvider;
|
|
57
56
|
class PaintParamsKeyBuilder;
|
|
58
57
|
class PipelineDataGatherer;
|
|
@@ -299,7 +298,6 @@ private:
|
|
|
299
298
|
std::unique_ptr<UploadBufferManager> fUploadBufferManager;
|
|
300
299
|
// Depends on fUploadBufferManager (holds a pointer to it). Must be destroyed first.
|
|
301
300
|
std::unique_ptr<DrawBufferManager> fDrawBufferManager;
|
|
302
|
-
sk_sp<StorageBufferManager> fStorageBufferManager;
|
|
303
301
|
std::unique_ptr<ProxyReadCountMap> fProxyReadCounts;
|
|
304
302
|
|
|
305
303
|
skia_private::STArray<kMaxKeyAndDataBuilders, std::unique_ptr<KeyAndDataBuilder>>
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#include <vector>
|
|
19
19
|
|
|
20
20
|
struct SkISize;
|
|
21
|
+
class SkPicture;
|
|
21
22
|
|
|
22
23
|
namespace skgpu {
|
|
23
24
|
class RefCntedCallback;
|
|
@@ -93,6 +94,8 @@ private:
|
|
|
93
94
|
std::unique_ptr<LazyProxyData> fTargetProxyData;
|
|
94
95
|
|
|
95
96
|
skia_private::TArray<sk_sp<RefCntedCallback>> fFinishedProcs;
|
|
97
|
+
|
|
98
|
+
skia_private::TArray<sk_sp<SkPicture>> fCapturedPictures;
|
|
96
99
|
};
|
|
97
100
|
|
|
98
101
|
} // namespace skgpu::graphite
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
|
|
14
14
|
#include <memory>
|
|
15
15
|
|
|
16
|
+
class SkContext;
|
|
17
|
+
struct SkContextOptions;
|
|
18
|
+
|
|
16
19
|
namespace skgpu::graphite {
|
|
17
20
|
|
|
18
21
|
class Context;
|
|
@@ -74,4 +77,9 @@ SK_API std::unique_ptr<Context> MakeDawn(const DawnBackendContext&, const Contex
|
|
|
74
77
|
|
|
75
78
|
} // namespace skgpu::graphite
|
|
76
79
|
|
|
80
|
+
namespace SkContexts {
|
|
81
|
+
std::unique_ptr<SkContext> MakeGraphite(const skgpu::graphite::DawnBackendContext& dawnContext,
|
|
82
|
+
const SkContextOptions& options);
|
|
83
|
+
} // namespace SkContexts
|
|
84
|
+
|
|
77
85
|
#endif // skgpu_graphite_DawnBackendContext_DEFINED
|
|
@@ -15,6 +15,9 @@
|
|
|
15
15
|
#import <CoreFoundation/CoreFoundation.h>
|
|
16
16
|
#include <memory>
|
|
17
17
|
|
|
18
|
+
class SkContext;
|
|
19
|
+
struct SkContextOptions;
|
|
20
|
+
|
|
18
21
|
namespace skgpu::graphite {
|
|
19
22
|
|
|
20
23
|
// The MtlBackendContext contains all of the base Metal objects needed by the graphite Metal
|
|
@@ -31,4 +34,12 @@ SK_API std::unique_ptr<Context> MakeMetal(const MtlBackendContext&, const Contex
|
|
|
31
34
|
|
|
32
35
|
} // namespace skgpu::graphite
|
|
33
36
|
|
|
37
|
+
namespace SkContexts {
|
|
38
|
+
|
|
39
|
+
// Creates a context wrapping a Graphite GPU backend using Metal
|
|
40
|
+
std::unique_ptr<SkContext> MakeGraphite(const skgpu::graphite::MtlBackendContext& mtlContext,
|
|
41
|
+
const SkContextOptions& options);
|
|
42
|
+
|
|
43
|
+
} // namespace SkContexts
|
|
44
|
+
|
|
34
45
|
#endif // skgpu_graphite_MtlBackendContext_DEFINED
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
|
|
13
13
|
#include "include/private/SkAPI.h"
|
|
14
14
|
|
|
15
|
+
struct SkContextOptions;
|
|
16
|
+
class SkContext;
|
|
17
|
+
|
|
15
18
|
// NOTE: Because there is already a VulkanBackendContext header shared between Ganesh and Graphite,
|
|
16
19
|
// this is named VulkanGraphiteContext.h to supply just the factory function (differing from the
|
|
17
20
|
// public headers exposed by other backends).
|
|
@@ -28,4 +31,12 @@ SK_API std::unique_ptr<Context> MakeVulkan(const VulkanBackendContext&, const Co
|
|
|
28
31
|
|
|
29
32
|
} // namespace skgpu::graphite
|
|
30
33
|
|
|
34
|
+
namespace SkContexts {
|
|
35
|
+
|
|
36
|
+
// Creates a context wrapping a Graphite GPU backend with Vulkan
|
|
37
|
+
std::unique_ptr<SkContext> MakeGraphite(const skgpu::VulkanBackendContext& vkContext,
|
|
38
|
+
const SkContextOptions& options);
|
|
39
|
+
|
|
40
|
+
} // namespace SkContexts
|
|
41
|
+
|
|
31
42
|
#endif // skgpu_graphite_VulkanGraphiteUtils_DEFINED
|
|
@@ -16,29 +16,11 @@
|
|
|
16
16
|
#include "include/private/SkLogPriority.h"
|
|
17
17
|
|
|
18
18
|
#if !defined(SkLog)
|
|
19
|
-
//
|
|
19
|
+
// Implemented per platform.
|
|
20
20
|
void SkLogVAList(SkLogPriority priority, const char format[], va_list args) SK_PRINTF_LIKE(2, 0);
|
|
21
21
|
void SK_SPI SkLog(SkLogPriority priority, const char format[], ...) SK_PRINTF_LIKE(2, 3);
|
|
22
22
|
#endif
|
|
23
23
|
|
|
24
|
-
/**
|
|
25
|
-
* TODO (b/469441457): SKGPU_GRAPHITE_LOWEST_ACTIVE_LOG_PRIORITY Was the config used to set the log
|
|
26
|
-
* priority, so we check for that define as well. Eventually, we should move clients using this
|
|
27
|
-
* define to the new one.
|
|
28
|
-
*/
|
|
29
|
-
#if defined(SKGPU_GRAPHITE_LOWEST_ACTIVE_LOG_PRIORITY)
|
|
30
|
-
static constexpr SkLogPriority MapGraphitePriority(skgpu::graphite::LogPriority priority) {
|
|
31
|
-
switch (priority) {
|
|
32
|
-
case skgpu::graphite::LogPriority::kError: return SkLogPriority::kError;
|
|
33
|
-
case skgpu::graphite::LogPriority::kWarning: return SkLogPriority::kWarning;
|
|
34
|
-
case skgpu::graphite::LogPriority::kInfo: return SkLogPriority::kInfo;
|
|
35
|
-
case skgpu::graphite::LogPriority::kDebug: return SkLogPriority::kDebug;
|
|
36
|
-
default: return SkLogPriority::kDebug;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
#define SKIA_LOWEST_ACTIVE_LOG_PRIORITY MapGraphitePriority(SKGPU_GRAPHITE_LOWEST_ACTIVE_LOG_PRIORITY)
|
|
40
|
-
#endif
|
|
41
|
-
|
|
42
24
|
#if !defined(SKIA_LOWEST_ACTIVE_LOG_PRIORITY)
|
|
43
25
|
#ifdef SK_DEBUG
|
|
44
26
|
#define SKIA_LOWEST_ACTIVE_LOG_PRIORITY SkLogPriority::kDebug
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
#include "include/core/SkRefCnt.h"
|
|
12
12
|
#include "include/core/SkSurfaceProps.h"
|
|
13
13
|
#include "include/core/SkTypes.h"
|
|
14
|
+
#include "include/gpu/ganesh/GrDirectContext.h"
|
|
14
15
|
|
|
15
16
|
#include <memory>
|
|
16
17
|
|
|
@@ -72,7 +73,7 @@ public:
|
|
|
72
73
|
|
|
73
74
|
// Records all the draws to the imported secondary command buffer and sets any dependent
|
|
74
75
|
// offscreen draws to the GPU.
|
|
75
|
-
|
|
76
|
+
GrDirectContext::FlushResult flush();
|
|
76
77
|
|
|
77
78
|
/** Inserts a list of GPU semaphores that Skia will have the driver wait on before executing
|
|
78
79
|
commands for this secondary CB. The wait semaphores will get added to the VkCommandBuffer
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2026 Google LLC
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed by a BSD-style license that can be
|
|
5
|
+
* found in the LICENSE file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#ifndef SkLogHandler_DEFINED
|
|
9
|
+
#define SkLogHandler_DEFINED
|
|
10
|
+
|
|
11
|
+
#include "include/core/SkRefCnt.h"
|
|
12
|
+
#include "include/core/SkTypes.h"
|
|
13
|
+
#include "include/private/SkLogPriority.h"
|
|
14
|
+
|
|
15
|
+
#include <cstdarg>
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* SkLogHandler defines an interface for receiving Skia log messages.
|
|
19
|
+
* Clients can implement this interface and install it via SetInstance.
|
|
20
|
+
*/
|
|
21
|
+
class SK_API SkLogHandler : public SkRefCnt {
|
|
22
|
+
public:
|
|
23
|
+
~SkLogHandler() override = default;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Called when a log message is generated (must pass compile-time priority).
|
|
27
|
+
* Must be thread-safe since multiple threads may be logging at the same time.
|
|
28
|
+
* @param priority The priority of the log message.
|
|
29
|
+
* @param format The format string of the log message.
|
|
30
|
+
* @param args The arguments for the format string.
|
|
31
|
+
*/
|
|
32
|
+
virtual void onLog(SkLogPriority priority, const char format[], va_list args) = 0;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Installs a custom log handler. Returns true if successful (i.e., it's the first call).
|
|
36
|
+
* Skia only allows one SkLogHandler to be set and it cannot change after being set.
|
|
37
|
+
*/
|
|
38
|
+
static bool SetInstance(sk_sp<SkLogHandler>);
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Returns the current log handler. If none has been set, returns nullptr.
|
|
42
|
+
*/
|
|
43
|
+
static sk_sp<SkLogHandler> GetInstance();
|
|
44
|
+
|
|
45
|
+
protected:
|
|
46
|
+
SkLogHandler() = default;
|
|
47
|
+
|
|
48
|
+
private:
|
|
49
|
+
SkLogHandler(const SkLogHandler&) = delete;
|
|
50
|
+
SkLogHandler& operator=(const SkLogHandler&) = delete;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
#endif // SkLogHandler_DEFINED
|
|
@@ -95,6 +95,7 @@ protected:
|
|
|
95
95
|
const SkPaint*) override;
|
|
96
96
|
void onDrawAtlas2(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int,
|
|
97
97
|
SkBlendMode, const SkSamplingOptions&, const SkRect*, const SkPaint*) override;
|
|
98
|
+
void onDrawMesh(const SkMesh&, sk_sp<SkBlender>, const SkPaint&) override;
|
|
98
99
|
|
|
99
100
|
void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override;
|
|
100
101
|
void onDrawShadowRec(const SkPath&, const SkDrawShadowRec&) override;
|
|
@@ -1113,11 +1113,9 @@ STAGE(unpremul, NoCtx) {
|
|
|
1113
1113
|
}
|
|
1114
1114
|
|
|
1115
1115
|
STAGE(matrix_3x3, const skcms_Matrix3x3* matrix) {
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
G = m[3]*r + m[4]*g + m[5]*b,
|
|
1120
|
-
B = m[6]*r + m[7]*g + m[8]*b;
|
|
1116
|
+
F R = matrix->vals[0][0]*r + matrix->vals[0][1]*g + matrix->vals[0][2]*b,
|
|
1117
|
+
G = matrix->vals[1][0]*r + matrix->vals[1][1]*g + matrix->vals[1][2]*b,
|
|
1118
|
+
B = matrix->vals[2][0]*r + matrix->vals[2][1]*g + matrix->vals[2][2]*b;
|
|
1121
1119
|
|
|
1122
1120
|
r = R;
|
|
1123
1121
|
g = G;
|
|
@@ -1125,11 +1123,12 @@ STAGE(matrix_3x3, const skcms_Matrix3x3* matrix) {
|
|
|
1125
1123
|
}
|
|
1126
1124
|
|
|
1127
1125
|
STAGE(matrix_3x4, const skcms_Matrix3x4* matrix) {
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
B =
|
|
1126
|
+
F R = matrix->vals[0][0]*r + matrix->vals[0][1]*g + matrix->vals[0][2]*b
|
|
1127
|
+
+ matrix->vals[0][3],
|
|
1128
|
+
G = matrix->vals[1][0]*r + matrix->vals[1][1]*g + matrix->vals[1][2]*b
|
|
1129
|
+
+ matrix->vals[1][3],
|
|
1130
|
+
B = matrix->vals[2][0]*r + matrix->vals[2][1]*g + matrix->vals[2][2]*b
|
|
1131
|
+
+ matrix->vals[2][3];
|
|
1133
1132
|
|
|
1134
1133
|
r = R;
|
|
1135
1134
|
g = G;
|
|
@@ -57,9 +57,14 @@ extern "C" {
|
|
|
57
57
|
#define SKCMS_HAS_MUSTTAIL 1
|
|
58
58
|
#endif
|
|
59
59
|
#elif defined(__GNUC__) && !defined(SKCMS_HAS_MUSTTAIL)
|
|
60
|
-
// GCC on
|
|
61
|
-
//
|
|
62
|
-
|
|
60
|
+
// GCC on RISCV, MIPS, PowerPC, LoongArch, and Windows (MinGW)
|
|
61
|
+
// does not support our tail call functions
|
|
62
|
+
// (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121784).
|
|
63
|
+
#if __has_cpp_attribute(clang::musttail) && !defined(__riscv) \
|
|
64
|
+
&& !defined(__mips__) \
|
|
65
|
+
&& !defined(__powerpc__) \
|
|
66
|
+
&& !defined(__loongarch__) \
|
|
67
|
+
&& !defined(_WIN32)
|
|
63
68
|
#define SKCMS_HAS_MUSTTAIL 1
|
|
64
69
|
#else
|
|
65
70
|
#define SKCMS_HAS_MUSTTAIL 0
|
|
@@ -100,6 +100,8 @@ struct TextPropertyValue {
|
|
|
100
100
|
// Optional font family name, to be passed to the font manager for
|
|
101
101
|
// fallback.
|
|
102
102
|
SkString fFontFamily;
|
|
103
|
+
// Extra spacing between glyphs (letter tracking), in 1/1000 em units.
|
|
104
|
+
float fTextTracking = 0;
|
|
103
105
|
|
|
104
106
|
bool operator==(const TextPropertyValue& other) const;
|
|
105
107
|
bool operator!=(const TextPropertyValue& other) const;
|
|
@@ -13,12 +13,14 @@
|
|
|
13
13
|
#include "include/core/SkPoint.h"
|
|
14
14
|
#include "include/core/SkRefCnt.h"
|
|
15
15
|
#include "include/core/SkScalar.h"
|
|
16
|
+
#include "include/core/SkSpan.h"
|
|
16
17
|
#include "include/core/SkString.h"
|
|
17
18
|
#include "include/core/SkTextBlob.h"
|
|
18
19
|
#include "include/core/SkTypes.h"
|
|
19
20
|
|
|
20
21
|
#include <cstddef>
|
|
21
22
|
#include <cstdint>
|
|
23
|
+
#include <limits>
|
|
22
24
|
#include <memory>
|
|
23
25
|
#include <type_traits>
|
|
24
26
|
|
|
@@ -258,7 +260,7 @@ public:
|
|
|
258
260
|
LanguageRunIterator&,
|
|
259
261
|
SkScalar width,
|
|
260
262
|
RunHandler*) const = 0;
|
|
261
|
-
|
|
263
|
+
|
|
262
264
|
virtual void shape(const char* utf8,
|
|
263
265
|
size_t utf8Bytes,
|
|
264
266
|
FontRunIterator&,
|
|
@@ -269,6 +271,26 @@ public:
|
|
|
269
271
|
size_t featuresSize,
|
|
270
272
|
SkScalar width,
|
|
271
273
|
RunHandler*) const = 0;
|
|
274
|
+
#endif // !defined(SK_DISABLE_LEGACY_SKSHAPER_FUNCTIONS)
|
|
275
|
+
|
|
276
|
+
struct Options {
|
|
277
|
+
// Width available for horizontal layout, before wrapping kicks in.
|
|
278
|
+
float width = std::numeric_limits<float>::max();
|
|
279
|
+
|
|
280
|
+
// Extra advance added after each glyph, expressed as a fraction of the font size
|
|
281
|
+
// (i.e. em units, thus it scales with the text). It applies on top of font kerning
|
|
282
|
+
// and participates in line breaking.
|
|
283
|
+
float tracking = 0;
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
virtual void shape(SkSpan<const char> utf8,
|
|
287
|
+
FontRunIterator& font,
|
|
288
|
+
BiDiRunIterator& bidi,
|
|
289
|
+
ScriptRunIterator& script,
|
|
290
|
+
LanguageRunIterator& language,
|
|
291
|
+
SkSpan<const Feature> features,
|
|
292
|
+
const Options& opts,
|
|
293
|
+
RunHandler* handler) const = 0;
|
|
272
294
|
|
|
273
295
|
private:
|
|
274
296
|
SkShaper(const SkShaper&) = delete;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
// Umbrella header for the SwiftPM target's publicHeadersPath. Nothing outside
|
|
4
|
+
// this package includes Skia or RNSkia headers — React Native resolves the
|
|
5
|
+
// Fabric component and TurboModule by class name — so the public surface is
|
|
6
|
+
// deliberately empty.
|
|
@@ -63,7 +63,7 @@ class JsiSkCanvas extends _Host.HostObject {
|
|
|
63
63
|
this.ref.drawPatch(cubics.map(({
|
|
64
64
|
x,
|
|
65
65
|
y
|
|
66
|
-
}) => [x, y]).flat(), colors, texs ? texs.flatMap(p => Array.from(_JsiSkPoint.JsiSkPoint.fromValue(p))) : texs, mode ? (0, _Host.getEnum)(this.CanvasKit, "BlendMode", mode) : null, paint ? _JsiSkPaint.JsiSkPaint.fromValue(paint) : undefined);
|
|
66
|
+
}) => [x, y]).flat(), colors, texs ? texs.flatMap(p => Array.from(_JsiSkPoint.JsiSkPoint.fromValue(p))) : texs, mode !== undefined && mode !== null ? (0, _Host.getEnum)(this.CanvasKit, "BlendMode", mode) : null, paint ? _JsiSkPaint.JsiSkPaint.fromValue(paint) : undefined);
|
|
67
67
|
}
|
|
68
68
|
restoreToCount(saveCount) {
|
|
69
69
|
this.ref.restoreToCount(saveCount);
|
|
@@ -129,7 +129,7 @@ class JsiSkCanvas extends _Host.HostObject {
|
|
|
129
129
|
this.ref.translate(dx, dy);
|
|
130
130
|
}
|
|
131
131
|
drawColor(color, blendMode) {
|
|
132
|
-
this.ref.drawColor(color, blendMode ? (0, _Host.getEnum)(this.CanvasKit, "BlendMode", blendMode) : undefined);
|
|
132
|
+
this.ref.drawColor(color, blendMode !== undefined ? (0, _Host.getEnum)(this.CanvasKit, "BlendMode", blendMode) : undefined);
|
|
133
133
|
}
|
|
134
134
|
clear(color) {
|
|
135
135
|
this.ref.clear(color);
|
|
@@ -171,10 +171,10 @@ class JsiSkCanvas extends _Host.HostObject {
|
|
|
171
171
|
} else if (sampling) {
|
|
172
172
|
ckSampling = {
|
|
173
173
|
filter: (0, _Host.getEnum)(this.CanvasKit, "FilterMode", sampling.filter),
|
|
174
|
-
mipmap: sampling.mipmap ? (0, _Host.getEnum)(this.CanvasKit, "MipmapMode", sampling.mipmap) : this.CanvasKit.MipmapMode.None
|
|
174
|
+
mipmap: sampling.mipmap !== undefined ? (0, _Host.getEnum)(this.CanvasKit, "MipmapMode", sampling.mipmap) : this.CanvasKit.MipmapMode.None
|
|
175
175
|
};
|
|
176
176
|
}
|
|
177
|
-
this.ref.drawAtlas(_JsiSkImage.JsiSkImage.fromValue(atlas), src, dst, _JsiSkPaint.JsiSkPaint.fromValue(paint), blendMode ? (0, _Host.getEnum)(this.CanvasKit, "BlendMode", blendMode) : this.CanvasKit.BlendMode.DstOver, cls, ckSampling);
|
|
177
|
+
this.ref.drawAtlas(_JsiSkImage.JsiSkImage.fromValue(atlas), src, dst, _JsiSkPaint.JsiSkPaint.fromValue(paint), blendMode !== undefined ? (0, _Host.getEnum)(this.CanvasKit, "BlendMode", blendMode) : this.CanvasKit.BlendMode.DstOver, cls, ckSampling);
|
|
178
178
|
}
|
|
179
179
|
readPixels(srcX, srcY, imageInfo) {
|
|
180
180
|
const pxInfo = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_Host","_JsiSkPaint","_JsiSkRect","_JsiSkRRect","_JsiSkImage","_JsiSkVertices","_JsiSkPath","_JsiSkFont","_JsiSkTextBlob","_JsiSkPicture","_JsiSkMatrix","_JsiSkImageFilter","_JsiSkPoint","_JsiSkRSXform","JsiSkCanvas","HostObject","constructor","CanvasKit","ref","drawRect","rect","paint","JsiSkRect","fromValue","JsiSkPaint","drawImage","image","x","y","JsiSkImage","drawImageRect","img","src","dest","fastSample","drawImageCubic","left","top","B","C","drawImageOptions","fm","mm","getEnum","drawImageNine","center","filter","Array","from","drawImageRectCubic","drawImageRectOptions","drawPaint","drawLine","x0","y0","x1","y1","drawCircle","cx","cy","radius","drawVertices","verts","mode","JsiSkVertices","drawPatch","cubics","colors","texs","map","flat","flatMap","p","JsiSkPoint","undefined","restoreToCount","saveCount","getTotalMatrix","JsiSkMatrix","Float32Array","of","drawPoints","points","drawArc","oval","startAngle","sweepAngle","useCenter","drawRRect","rrect","JsiSkRRect","drawDRRect","outer","inner","drawOval","drawPath","path","JsiSkPath","pathFromValue","delete","drawText","str","font","JsiSkFont","drawTextBlob","blob","JsiSkTextBlob","drawGlyphs","glyphs","positions","drawSvg","svg","_width","_height","MakeImageFromCanvasImageSource","save","saveLayer","bounds","backdrop","flags","JsiSkImageFilter","restore","rotate","rotationInDegrees","rx","ry","scale","sx","sy","skew","translate","dx","dy","drawColor","color","blendMode","clear","clipPath","op","doAntiAlias","clipRect","clipRRect","concat","m","isArray","drawPicture","skp","JsiSkPicture","drawAtlas","atlas","srcs","dsts","sampling","s","dst","JsiSkRSXform","cls","Uint32Array","length","i","r","g","b","a","ColorAsInt","ckSampling","FilterMode","Linear","mipmap","MipmapMode","None","isCubicSampling","BlendMode","DstOver","readPixels","srcX","srcY","imageInfo","pxInfo","width","height","colorSpace","ColorSpace","SRGB","alphaType","colorType","exports"],"sources":["JsiSkCanvas.ts"],"sourcesContent":["import type {\n Canvas,\n CanvasKit,\n CubicResampler as CKCubicResampler,\n FilterOptions as CKFilterOptions,\n} from \"canvaskit-wasm\";\n\nimport {\n type BlendMode,\n type ClipOp,\n type FilterMode,\n type MipmapMode,\n type PointMode,\n type SaveLayerFlag,\n type ImageInfo,\n type SkCanvas,\n type SkColor,\n type SkFont,\n type SkImage,\n type SkImageFilter,\n type SkMatrix,\n type SkPaint,\n type SkPath,\n type SkPicture,\n type SkPoint,\n type SkRect,\n type InputRRect,\n type SkSVG,\n type SkTextBlob,\n type SkVertices,\n type SkRSXform,\n type CubicResampler,\n type FilterOptions,\n isCubicSampling,\n} from \"../types\";\n\nimport { getEnum, HostObject } from \"./Host\";\nimport { JsiSkPaint } from \"./JsiSkPaint\";\nimport { JsiSkRect } from \"./JsiSkRect\";\nimport { JsiSkRRect } from \"./JsiSkRRect\";\nimport { JsiSkImage } from \"./JsiSkImage\";\nimport { JsiSkVertices } from \"./JsiSkVertices\";\nimport { JsiSkPath } from \"./JsiSkPath\";\nimport { JsiSkFont } from \"./JsiSkFont\";\nimport { JsiSkTextBlob } from \"./JsiSkTextBlob\";\nimport { JsiSkPicture } from \"./JsiSkPicture\";\nimport { JsiSkMatrix } from \"./JsiSkMatrix\";\nimport { JsiSkImageFilter } from \"./JsiSkImageFilter\";\nimport { JsiSkPoint } from \"./JsiSkPoint\";\nimport { JsiSkRSXform } from \"./JsiSkRSXform\";\nimport type { JsiSkSVG } from \"./JsiSkSVG\";\n\nexport class JsiSkCanvas\n extends HostObject<Canvas, \"Canvas\">\n implements SkCanvas\n{\n constructor(CanvasKit: CanvasKit, ref: Canvas) {\n super(CanvasKit, ref, \"Canvas\");\n }\n\n drawRect(rect: SkRect, paint: SkPaint) {\n this.ref.drawRect(\n JsiSkRect.fromValue(this.CanvasKit, rect),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawImage(image: SkImage, x: number, y: number, paint?: SkPaint) {\n this.ref.drawImage(\n JsiSkImage.fromValue(image),\n x,\n y,\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageRect(\n img: SkImage,\n src: SkRect,\n dest: SkRect,\n paint: SkPaint,\n fastSample?: boolean\n ) {\n this.ref.drawImageRect(\n JsiSkImage.fromValue(img),\n JsiSkRect.fromValue(this.CanvasKit, src),\n JsiSkRect.fromValue(this.CanvasKit, dest),\n JsiSkPaint.fromValue(paint),\n fastSample\n );\n }\n\n drawImageCubic(\n img: SkImage,\n left: number,\n top: number,\n B: number,\n C: number,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageCubic(\n JsiSkImage.fromValue(img),\n left,\n top,\n B,\n C,\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageOptions(\n img: SkImage,\n left: number,\n top: number,\n fm: FilterMode,\n mm: MipmapMode,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageOptions(\n JsiSkImage.fromValue(img),\n left,\n top,\n getEnum(this.CanvasKit, \"FilterMode\", fm),\n getEnum(this.CanvasKit, \"MipmapMode\", mm),\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageNine(\n img: SkImage,\n center: SkRect,\n dest: SkRect,\n filter: FilterMode,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageNine(\n JsiSkImage.fromValue(img),\n Array.from(JsiSkRect.fromValue(this.CanvasKit, center)),\n JsiSkRect.fromValue(this.CanvasKit, dest),\n getEnum(this.CanvasKit, \"FilterMode\", filter),\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageRectCubic(\n img: SkImage,\n src: SkRect,\n dest: SkRect,\n B: number,\n C: number,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageRectCubic(\n JsiSkImage.fromValue(img),\n JsiSkRect.fromValue(this.CanvasKit, src),\n JsiSkRect.fromValue(this.CanvasKit, dest),\n B,\n C,\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageRectOptions(\n img: SkImage,\n src: SkRect,\n dest: SkRect,\n fm: FilterMode,\n mm: MipmapMode,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageRectOptions(\n JsiSkImage.fromValue(img),\n JsiSkRect.fromValue(this.CanvasKit, src),\n JsiSkRect.fromValue(this.CanvasKit, dest),\n getEnum(this.CanvasKit, \"FilterMode\", fm),\n getEnum(this.CanvasKit, \"MipmapMode\", mm),\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawPaint(paint: SkPaint) {\n this.ref.drawPaint(JsiSkPaint.fromValue(paint));\n }\n\n drawLine(x0: number, y0: number, x1: number, y1: number, paint: SkPaint) {\n this.ref.drawLine(x0, y0, x1, y1, JsiSkPaint.fromValue(paint));\n }\n\n drawCircle(cx: number, cy: number, radius: number, paint: SkPaint) {\n this.ref.drawCircle(cx, cy, radius, JsiSkPaint.fromValue(paint));\n }\n\n drawVertices(verts: SkVertices, mode: BlendMode, paint: SkPaint) {\n this.ref.drawVertices(\n JsiSkVertices.fromValue(verts),\n getEnum(this.CanvasKit, \"BlendMode\", mode),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawPatch(\n cubics: SkPoint[],\n colors?: SkColor[] | null,\n texs?: SkPoint[] | null,\n mode?: BlendMode | null,\n paint?: SkPaint\n ) {\n this.ref.drawPatch(\n cubics.map(({ x, y }) => [x, y]).flat(),\n colors,\n texs ? texs.flatMap((p) => Array.from(JsiSkPoint.fromValue(p))) : texs,\n mode ? getEnum(this.CanvasKit, \"BlendMode\", mode) : null,\n paint ? JsiSkPaint.fromValue(paint) : undefined\n );\n }\n\n restoreToCount(saveCount: number) {\n this.ref.restoreToCount(saveCount);\n }\n\n getTotalMatrix(): SkMatrix {\n return new JsiSkMatrix(\n this.CanvasKit,\n Float32Array.of(...this.ref.getTotalMatrix())\n );\n }\n\n drawPoints(mode: PointMode, points: SkPoint[], paint: SkPaint) {\n this.ref.drawPoints(\n getEnum(this.CanvasKit, \"PointMode\", mode),\n points.map(({ x, y }) => [x, y]).flat(),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawArc(\n oval: SkRect,\n startAngle: number,\n sweepAngle: number,\n useCenter: boolean,\n paint: SkPaint\n ) {\n this.ref.drawArc(\n JsiSkRect.fromValue(this.CanvasKit, oval),\n startAngle,\n sweepAngle,\n useCenter,\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawRRect(rrect: InputRRect, paint: SkPaint) {\n this.ref.drawRRect(\n JsiSkRRect.fromValue(this.CanvasKit, rrect),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawDRRect(outer: InputRRect, inner: InputRRect, paint: SkPaint) {\n this.ref.drawDRRect(\n JsiSkRRect.fromValue(this.CanvasKit, outer),\n JsiSkRRect.fromValue(this.CanvasKit, inner),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawOval(oval: SkRect, paint: SkPaint) {\n this.ref.drawOval(\n JsiSkRect.fromValue(this.CanvasKit, oval),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawPath(path: SkPath, paint: SkPaint) {\n const p = JsiSkPath.pathFromValue(path);\n this.ref.drawPath(p, JsiSkPaint.fromValue(paint));\n p.delete();\n }\n\n drawText(str: string, x: number, y: number, paint: SkPaint, font: SkFont) {\n this.ref.drawText(\n str,\n x,\n y,\n JsiSkPaint.fromValue(paint),\n JsiSkFont.fromValue(font)\n );\n }\n\n drawTextBlob(blob: SkTextBlob, x: number, y: number, paint: SkPaint) {\n this.ref.drawTextBlob(\n JsiSkTextBlob.fromValue(blob),\n x,\n y,\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawGlyphs(\n glyphs: number[],\n positions: SkPoint[],\n x: number,\n y: number,\n font: SkFont,\n paint: SkPaint\n ) {\n this.ref.drawGlyphs(\n glyphs,\n positions.map((p) => [p.x, p.y]).flat(),\n x,\n y,\n JsiSkFont.fromValue(font),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawSvg(svg: SkSVG, _width?: number, _height?: number) {\n const image = this.CanvasKit.MakeImageFromCanvasImageSource(\n (svg as JsiSkSVG).ref\n );\n this.ref.drawImage(image, 0, 0);\n }\n\n save() {\n return this.ref.save();\n }\n\n saveLayer(\n paint?: SkPaint,\n bounds?: SkRect | null,\n backdrop?: SkImageFilter | null,\n flags?: SaveLayerFlag\n ) {\n return this.ref.saveLayer(\n paint ? JsiSkPaint.fromValue(paint) : undefined,\n bounds ? JsiSkRect.fromValue(this.CanvasKit, bounds) : bounds,\n backdrop ? JsiSkImageFilter.fromValue(backdrop) : backdrop,\n flags\n );\n }\n\n restore() {\n this.ref.restore();\n }\n\n rotate(rotationInDegrees: number, rx: number, ry: number) {\n this.ref.rotate(rotationInDegrees, rx, ry);\n }\n\n scale(sx: number, sy: number) {\n this.ref.scale(sx, sy);\n }\n\n skew(sx: number, sy: number) {\n this.ref.skew(sx, sy);\n }\n\n translate(dx: number, dy: number) {\n this.ref.translate(dx, dy);\n }\n\n drawColor(color: SkColor, blendMode?: BlendMode) {\n this.ref.drawColor(\n color,\n blendMode ? getEnum(this.CanvasKit, \"BlendMode\", blendMode) : undefined\n );\n }\n\n clear(color: SkColor) {\n this.ref.clear(color);\n }\n\n clipPath(path: SkPath, op: ClipOp, doAntiAlias: boolean) {\n const p = JsiSkPath.pathFromValue(path);\n this.ref.clipPath(p, getEnum(this.CanvasKit, \"PathOp\", op), doAntiAlias);\n p.delete();\n }\n\n clipRect(rect: SkRect, op: ClipOp, doAntiAlias: boolean) {\n this.ref.clipRect(\n JsiSkRect.fromValue(this.CanvasKit, rect),\n getEnum(this.CanvasKit, \"PathOp\", op),\n doAntiAlias\n );\n }\n\n clipRRect(rrect: InputRRect, op: ClipOp, doAntiAlias: boolean) {\n this.ref.clipRRect(\n JsiSkRRect.fromValue(this.CanvasKit, rrect),\n getEnum(this.CanvasKit, \"PathOp\", op),\n doAntiAlias\n );\n }\n\n concat(m: SkMatrix | number[]) {\n this.ref.concat(Array.isArray(m) ? m : JsiSkMatrix.fromValue(m));\n }\n\n drawPicture(skp: SkPicture) {\n this.ref.drawPicture(JsiSkPicture.fromValue(skp));\n }\n\n drawAtlas(\n atlas: SkImage,\n srcs: SkRect[],\n dsts: SkRSXform[],\n paint: SkPaint,\n blendMode?: BlendMode,\n colors?: SkColor[],\n sampling?: CubicResampler | FilterOptions\n ) {\n const src = srcs.flatMap((s) =>\n Array.from(JsiSkRect.fromValue(this.CanvasKit, s))\n );\n const dst = dsts.flatMap((s) => Array.from(JsiSkRSXform.fromValue(s)));\n let cls: Uint32Array | undefined;\n if (colors) {\n cls = new Uint32Array(colors.length);\n for (let i = 0; i < colors.length; i++) {\n const [r, g, b, a] = colors[i];\n cls[i] = this.CanvasKit.ColorAsInt(r * 255, g * 255, b * 255, a * 255);\n }\n }\n let ckSampling: CKCubicResampler | CKFilterOptions = {\n filter: this.CanvasKit.FilterMode.Linear,\n mipmap: this.CanvasKit.MipmapMode.None,\n };\n if (sampling && isCubicSampling(sampling)) {\n ckSampling = sampling;\n } else if (sampling) {\n ckSampling = {\n filter: getEnum(this.CanvasKit, \"FilterMode\", sampling.filter),\n mipmap: sampling.mipmap\n ? getEnum(this.CanvasKit, \"MipmapMode\", sampling.mipmap)\n : this.CanvasKit.MipmapMode.None,\n };\n }\n this.ref.drawAtlas(\n JsiSkImage.fromValue(atlas),\n src,\n dst,\n JsiSkPaint.fromValue(paint),\n blendMode\n ? getEnum(this.CanvasKit, \"BlendMode\", blendMode)\n : this.CanvasKit.BlendMode.DstOver,\n cls,\n ckSampling\n );\n }\n\n readPixels(srcX: number, srcY: number, imageInfo: ImageInfo) {\n const pxInfo = {\n width: imageInfo.width,\n height: imageInfo.height,\n colorSpace: this.CanvasKit.ColorSpace.SRGB,\n alphaType: getEnum(this.CanvasKit, \"AlphaType\", imageInfo.alphaType),\n colorType: getEnum(this.CanvasKit, \"ColorType\", imageInfo.colorType),\n };\n return this.ref.readPixels(srcX, srcY, pxInfo);\n }\n}\n"],"mappings":";;;;;;AAOA,IAAAA,MAAA,GAAAC,OAAA;AA6BA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,WAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAN,OAAA;AACA,IAAAO,UAAA,GAAAP,OAAA;AACA,IAAAQ,UAAA,GAAAR,OAAA;AACA,IAAAS,cAAA,GAAAT,OAAA;AACA,IAAAU,aAAA,GAAAV,OAAA;AACA,IAAAW,YAAA,GAAAX,OAAA;AACA,IAAAY,iBAAA,GAAAZ,OAAA;AACA,IAAAa,WAAA,GAAAb,OAAA;AACA,IAAAc,aAAA,GAAAd,OAAA;AAGO,MAAMe,WAAW,SACdC,gBAAU,CAEpB;EACEC,WAAWA,CAACC,SAAoB,EAAEC,GAAW,EAAE;IAC7C,KAAK,CAACD,SAAS,EAAEC,GAAG,EAAE,QAAQ,CAAC;EACjC;EAEAC,QAAQA,CAACC,IAAY,EAAEC,KAAc,EAAE;IACrC,IAAI,CAACH,GAAG,CAACC,QAAQ,CACfG,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEG,IAAI,CAAC,EACzCI,sBAAU,CAACD,SAAS,CAACF,KAAK,CAC5B,CAAC;EACH;EAEAI,SAASA,CAACC,KAAc,EAAEC,CAAS,EAAEC,CAAS,EAAEP,KAAe,EAAE;IAC/D,IAAI,CAACH,GAAG,CAACO,SAAS,CAChBI,sBAAU,CAACN,SAAS,CAACG,KAAK,CAAC,EAC3BC,CAAC,EACDC,CAAC,EACDP,KAAK,GAAGG,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,GAAGA,KACxC,CAAC;EACH;EAEAS,aAAaA,CACXC,GAAY,EACZC,GAAW,EACXC,IAAY,EACZZ,KAAc,EACda,UAAoB,EACpB;IACA,IAAI,CAAChB,GAAG,CAACY,aAAa,CACpBD,sBAAU,CAACN,SAAS,CAACQ,GAAG,CAAC,EACzBT,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEe,GAAG,CAAC,EACxCV,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEgB,IAAI,CAAC,EACzCT,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,EAC3Ba,UACF,CAAC;EACH;EAEAC,cAAcA,CACZJ,GAAY,EACZK,IAAY,EACZC,GAAW,EACXC,CAAS,EACTC,CAAS,EACTlB,KAAsB,EACtB;IACA,IAAI,CAACH,GAAG,CAACiB,cAAc,CACrBN,sBAAU,CAACN,SAAS,CAACQ,GAAG,CAAC,EACzBK,IAAI,EACJC,GAAG,EACHC,CAAC,EACDC,CAAC,EACDlB,KAAK,GAAGG,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,GAAGA,KACxC,CAAC;EACH;EAEAmB,gBAAgBA,CACdT,GAAY,EACZK,IAAY,EACZC,GAAW,EACXI,EAAc,EACdC,EAAc,EACdrB,KAAsB,EACtB;IACA,IAAI,CAACH,GAAG,CAACsB,gBAAgB,CACvBX,sBAAU,CAACN,SAAS,CAACQ,GAAG,CAAC,EACzBK,IAAI,EACJC,GAAG,EACH,IAAAM,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,YAAY,EAAEwB,EAAE,CAAC,EACzC,IAAAE,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,YAAY,EAAEyB,EAAE,CAAC,EACzCrB,KAAK,GAAGG,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,GAAGA,KACxC,CAAC;EACH;EAEAuB,aAAaA,CACXb,GAAY,EACZc,MAAc,EACdZ,IAAY,EACZa,MAAkB,EAClBzB,KAAsB,EACtB;IACA,IAAI,CAACH,GAAG,CAAC0B,aAAa,CACpBf,sBAAU,CAACN,SAAS,CAACQ,GAAG,CAAC,EACzBgB,KAAK,CAACC,IAAI,CAAC1B,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAE4B,MAAM,CAAC,CAAC,EACvDvB,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEgB,IAAI,CAAC,EACzC,IAAAU,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,YAAY,EAAE6B,MAAM,CAAC,EAC7CzB,KAAK,GAAGG,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,GAAGA,KACxC,CAAC;EACH;EAEA4B,kBAAkBA,CAChBlB,GAAY,EACZC,GAAW,EACXC,IAAY,EACZK,CAAS,EACTC,CAAS,EACTlB,KAAsB,EACtB;IACA,IAAI,CAACH,GAAG,CAAC+B,kBAAkB,CACzBpB,sBAAU,CAACN,SAAS,CAACQ,GAAG,CAAC,EACzBT,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEe,GAAG,CAAC,EACxCV,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEgB,IAAI,CAAC,EACzCK,CAAC,EACDC,CAAC,EACDlB,KAAK,GAAGG,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,GAAGA,KACxC,CAAC;EACH;EAEA6B,oBAAoBA,CAClBnB,GAAY,EACZC,GAAW,EACXC,IAAY,EACZQ,EAAc,EACdC,EAAc,EACdrB,KAAsB,EACtB;IACA,IAAI,CAACH,GAAG,CAACgC,oBAAoB,CAC3BrB,sBAAU,CAACN,SAAS,CAACQ,GAAG,CAAC,EACzBT,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEe,GAAG,CAAC,EACxCV,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEgB,IAAI,CAAC,EACzC,IAAAU,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,YAAY,EAAEwB,EAAE,CAAC,EACzC,IAAAE,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,YAAY,EAAEyB,EAAE,CAAC,EACzCrB,KAAK,GAAGG,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,GAAGA,KACxC,CAAC;EACH;EAEA8B,SAASA,CAAC9B,KAAc,EAAE;IACxB,IAAI,CAACH,GAAG,CAACiC,SAAS,CAAC3B,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,CAAC;EACjD;EAEA+B,QAAQA,CAACC,EAAU,EAAEC,EAAU,EAAEC,EAAU,EAAEC,EAAU,EAAEnC,KAAc,EAAE;IACvE,IAAI,CAACH,GAAG,CAACkC,QAAQ,CAACC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEhC,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,CAAC;EAChE;EAEAoC,UAAUA,CAACC,EAAU,EAAEC,EAAU,EAAEC,MAAc,EAAEvC,KAAc,EAAE;IACjE,IAAI,CAACH,GAAG,CAACuC,UAAU,CAACC,EAAE,EAAEC,EAAE,EAAEC,MAAM,EAAEpC,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,CAAC;EAClE;EAEAwC,YAAYA,CAACC,KAAiB,EAAEC,IAAe,EAAE1C,KAAc,EAAE;IAC/D,IAAI,CAACH,GAAG,CAAC2C,YAAY,CACnBG,4BAAa,CAACzC,SAAS,CAACuC,KAAK,CAAC,EAC9B,IAAAnB,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,WAAW,EAAE8C,IAAI,CAAC,EAC1CvC,sBAAU,CAACD,SAAS,CAACF,KAAK,CAC5B,CAAC;EACH;EAEA4C,SAASA,CACPC,MAAiB,EACjBC,MAAyB,EACzBC,IAAuB,EACvBL,IAAuB,EACvB1C,KAAe,EACf;IACA,IAAI,CAACH,GAAG,CAAC+C,SAAS,CAChBC,MAAM,CAACG,GAAG,CAAC,CAAC;MAAE1C,CAAC;MAAEC;IAAE,CAAC,KAAK,CAACD,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC0C,IAAI,CAAC,CAAC,EACvCH,MAAM,EACNC,IAAI,GAAGA,IAAI,CAACG,OAAO,CAAEC,CAAC,IAAKzB,KAAK,CAACC,IAAI,CAACyB,sBAAU,CAAClD,SAAS,CAACiD,CAAC,CAAC,CAAC,CAAC,GAAGJ,IAAI,EACtEL,IAAI,GAAG,IAAApB,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,WAAW,EAAE8C,IAAI,CAAC,GAAG,IAAI,EACxD1C,KAAK,GAAGG,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,GAAGqD,SACxC,CAAC;EACH;EAEAC,cAAcA,CAACC,SAAiB,EAAE;IAChC,IAAI,CAAC1D,GAAG,CAACyD,cAAc,CAACC,SAAS,CAAC;EACpC;EAEAC,cAAcA,CAAA,EAAa;IACzB,OAAO,IAAIC,wBAAW,CACpB,IAAI,CAAC7D,SAAS,EACd8D,YAAY,CAACC,EAAE,CAAC,GAAG,IAAI,CAAC9D,GAAG,CAAC2D,cAAc,CAAC,CAAC,CAC9C,CAAC;EACH;EAEAI,UAAUA,CAAClB,IAAe,EAAEmB,MAAiB,EAAE7D,KAAc,EAAE;IAC7D,IAAI,CAACH,GAAG,CAAC+D,UAAU,CACjB,IAAAtC,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,WAAW,EAAE8C,IAAI,CAAC,EAC1CmB,MAAM,CAACb,GAAG,CAAC,CAAC;MAAE1C,CAAC;MAAEC;IAAE,CAAC,KAAK,CAACD,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC0C,IAAI,CAAC,CAAC,EACvC9C,sBAAU,CAACD,SAAS,CAACF,KAAK,CAC5B,CAAC;EACH;EAEA8D,OAAOA,CACLC,IAAY,EACZC,UAAkB,EAClBC,UAAkB,EAClBC,SAAkB,EAClBlE,KAAc,EACd;IACA,IAAI,CAACH,GAAG,CAACiE,OAAO,CACd7D,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEmE,IAAI,CAAC,EACzCC,UAAU,EACVC,UAAU,EACVC,SAAS,EACT/D,sBAAU,CAACD,SAAS,CAACF,KAAK,CAC5B,CAAC;EACH;EAEAmE,SAASA,CAACC,KAAiB,EAAEpE,KAAc,EAAE;IAC3C,IAAI,CAACH,GAAG,CAACsE,SAAS,CAChBE,sBAAU,CAACnE,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEwE,KAAK,CAAC,EAC3CjE,sBAAU,CAACD,SAAS,CAACF,KAAK,CAC5B,CAAC;EACH;EAEAsE,UAAUA,CAACC,KAAiB,EAAEC,KAAiB,EAAExE,KAAc,EAAE;IAC/D,IAAI,CAACH,GAAG,CAACyE,UAAU,CACjBD,sBAAU,CAACnE,SAAS,CAAC,IAAI,CAACN,SAAS,EAAE2E,KAAK,CAAC,EAC3CF,sBAAU,CAACnE,SAAS,CAAC,IAAI,CAACN,SAAS,EAAE4E,KAAK,CAAC,EAC3CrE,sBAAU,CAACD,SAAS,CAACF,KAAK,CAC5B,CAAC;EACH;EAEAyE,QAAQA,CAACV,IAAY,EAAE/D,KAAc,EAAE;IACrC,IAAI,CAACH,GAAG,CAAC4E,QAAQ,CACfxE,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEmE,IAAI,CAAC,EACzC5D,sBAAU,CAACD,SAAS,CAACF,KAAK,CAC5B,CAAC;EACH;EAEA0E,QAAQA,CAACC,IAAY,EAAE3E,KAAc,EAAE;IACrC,MAAMmD,CAAC,GAAGyB,oBAAS,CAACC,aAAa,CAACF,IAAI,CAAC;IACvC,IAAI,CAAC9E,GAAG,CAAC6E,QAAQ,CAACvB,CAAC,EAAEhD,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,CAAC;IACjDmD,CAAC,CAAC2B,MAAM,CAAC,CAAC;EACZ;EAEAC,QAAQA,CAACC,GAAW,EAAE1E,CAAS,EAAEC,CAAS,EAAEP,KAAc,EAAEiF,IAAY,EAAE;IACxE,IAAI,CAACpF,GAAG,CAACkF,QAAQ,CACfC,GAAG,EACH1E,CAAC,EACDC,CAAC,EACDJ,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,EAC3BkF,oBAAS,CAAChF,SAAS,CAAC+E,IAAI,CAC1B,CAAC;EACH;EAEAE,YAAYA,CAACC,IAAgB,EAAE9E,CAAS,EAAEC,CAAS,EAAEP,KAAc,EAAE;IACnE,IAAI,CAACH,GAAG,CAACsF,YAAY,CACnBE,4BAAa,CAACnF,SAAS,CAACkF,IAAI,CAAC,EAC7B9E,CAAC,EACDC,CAAC,EACDJ,sBAAU,CAACD,SAAS,CAACF,KAAK,CAC5B,CAAC;EACH;EAEAsF,UAAUA,CACRC,MAAgB,EAChBC,SAAoB,EACpBlF,CAAS,EACTC,CAAS,EACT0E,IAAY,EACZjF,KAAc,EACd;IACA,IAAI,CAACH,GAAG,CAACyF,UAAU,CACjBC,MAAM,EACNC,SAAS,CAACxC,GAAG,CAAEG,CAAC,IAAK,CAACA,CAAC,CAAC7C,CAAC,EAAE6C,CAAC,CAAC5C,CAAC,CAAC,CAAC,CAAC0C,IAAI,CAAC,CAAC,EACvC3C,CAAC,EACDC,CAAC,EACD2E,oBAAS,CAAChF,SAAS,CAAC+E,IAAI,CAAC,EACzB9E,sBAAU,CAACD,SAAS,CAACF,KAAK,CAC5B,CAAC;EACH;EAEAyF,OAAOA,CAACC,GAAU,EAAEC,MAAe,EAAEC,OAAgB,EAAE;IACrD,MAAMvF,KAAK,GAAG,IAAI,CAACT,SAAS,CAACiG,8BAA8B,CACxDH,GAAG,CAAc7F,GACpB,CAAC;IACD,IAAI,CAACA,GAAG,CAACO,SAAS,CAACC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;EACjC;EAEAyF,IAAIA,CAAA,EAAG;IACL,OAAO,IAAI,CAACjG,GAAG,CAACiG,IAAI,CAAC,CAAC;EACxB;EAEAC,SAASA,CACP/F,KAAe,EACfgG,MAAsB,EACtBC,QAA+B,EAC/BC,KAAqB,EACrB;IACA,OAAO,IAAI,CAACrG,GAAG,CAACkG,SAAS,CACvB/F,KAAK,GAAGG,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,GAAGqD,SAAS,EAC/C2C,MAAM,GAAG/F,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEoG,MAAM,CAAC,GAAGA,MAAM,EAC7DC,QAAQ,GAAGE,kCAAgB,CAACjG,SAAS,CAAC+F,QAAQ,CAAC,GAAGA,QAAQ,EAC1DC,KACF,CAAC;EACH;EAEAE,OAAOA,CAAA,EAAG;IACR,IAAI,CAACvG,GAAG,CAACuG,OAAO,CAAC,CAAC;EACpB;EAEAC,MAAMA,CAACC,iBAAyB,EAAEC,EAAU,EAAEC,EAAU,EAAE;IACxD,IAAI,CAAC3G,GAAG,CAACwG,MAAM,CAACC,iBAAiB,EAAEC,EAAE,EAAEC,EAAE,CAAC;EAC5C;EAEAC,KAAKA,CAACC,EAAU,EAAEC,EAAU,EAAE;IAC5B,IAAI,CAAC9G,GAAG,CAAC4G,KAAK,CAACC,EAAE,EAAEC,EAAE,CAAC;EACxB;EAEAC,IAAIA,CAACF,EAAU,EAAEC,EAAU,EAAE;IAC3B,IAAI,CAAC9G,GAAG,CAAC+G,IAAI,CAACF,EAAE,EAAEC,EAAE,CAAC;EACvB;EAEAE,SAASA,CAACC,EAAU,EAAEC,EAAU,EAAE;IAChC,IAAI,CAAClH,GAAG,CAACgH,SAAS,CAACC,EAAE,EAAEC,EAAE,CAAC;EAC5B;EAEAC,SAASA,CAACC,KAAc,EAAEC,SAAqB,EAAE;IAC/C,IAAI,CAACrH,GAAG,CAACmH,SAAS,CAChBC,KAAK,EACLC,SAAS,GAAG,IAAA5F,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,WAAW,EAAEsH,SAAS,CAAC,GAAG7D,SAChE,CAAC;EACH;EAEA8D,KAAKA,CAACF,KAAc,EAAE;IACpB,IAAI,CAACpH,GAAG,CAACsH,KAAK,CAACF,KAAK,CAAC;EACvB;EAEAG,QAAQA,CAACzC,IAAY,EAAE0C,EAAU,EAAEC,WAAoB,EAAE;IACvD,MAAMnE,CAAC,GAAGyB,oBAAS,CAACC,aAAa,CAACF,IAAI,CAAC;IACvC,IAAI,CAAC9E,GAAG,CAACuH,QAAQ,CAACjE,CAAC,EAAE,IAAA7B,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,QAAQ,EAAEyH,EAAE,CAAC,EAAEC,WAAW,CAAC;IACxEnE,CAAC,CAAC2B,MAAM,CAAC,CAAC;EACZ;EAEAyC,QAAQA,CAACxH,IAAY,EAAEsH,EAAU,EAAEC,WAAoB,EAAE;IACvD,IAAI,CAACzH,GAAG,CAAC0H,QAAQ,CACftH,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEG,IAAI,CAAC,EACzC,IAAAuB,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,QAAQ,EAAEyH,EAAE,CAAC,EACrCC,WACF,CAAC;EACH;EAEAE,SAASA,CAACpD,KAAiB,EAAEiD,EAAU,EAAEC,WAAoB,EAAE;IAC7D,IAAI,CAACzH,GAAG,CAAC2H,SAAS,CAChBnD,sBAAU,CAACnE,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEwE,KAAK,CAAC,EAC3C,IAAA9C,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,QAAQ,EAAEyH,EAAE,CAAC,EACrCC,WACF,CAAC;EACH;EAEAG,MAAMA,CAACC,CAAsB,EAAE;IAC7B,IAAI,CAAC7H,GAAG,CAAC4H,MAAM,CAAC/F,KAAK,CAACiG,OAAO,CAACD,CAAC,CAAC,GAAGA,CAAC,GAAGjE,wBAAW,CAACvD,SAAS,CAACwH,CAAC,CAAC,CAAC;EAClE;EAEAE,WAAWA,CAACC,GAAc,EAAE;IAC1B,IAAI,CAAChI,GAAG,CAAC+H,WAAW,CAACE,0BAAY,CAAC5H,SAAS,CAAC2H,GAAG,CAAC,CAAC;EACnD;EAEAE,SAASA,CACPC,KAAc,EACdC,IAAc,EACdC,IAAiB,EACjBlI,KAAc,EACdkH,SAAqB,EACrBpE,MAAkB,EAClBqF,QAAyC,EACzC;IACA,MAAMxH,GAAG,GAAGsH,IAAI,CAAC/E,OAAO,CAAEkF,CAAC,IACzB1G,KAAK,CAACC,IAAI,CAAC1B,oBAAS,CAACC,SAAS,CAAC,IAAI,CAACN,SAAS,EAAEwI,CAAC,CAAC,CACnD,CAAC;IACD,MAAMC,GAAG,GAAGH,IAAI,CAAChF,OAAO,CAAEkF,CAAC,IAAK1G,KAAK,CAACC,IAAI,CAAC2G,0BAAY,CAACpI,SAAS,CAACkI,CAAC,CAAC,CAAC,CAAC;IACtE,IAAIG,GAA4B;IAChC,IAAIzF,MAAM,EAAE;MACVyF,GAAG,GAAG,IAAIC,WAAW,CAAC1F,MAAM,CAAC2F,MAAM,CAAC;MACpC,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG5F,MAAM,CAAC2F,MAAM,EAAEC,CAAC,EAAE,EAAE;QACtC,MAAM,CAACC,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC,GAAGhG,MAAM,CAAC4F,CAAC,CAAC;QAC9BH,GAAG,CAACG,CAAC,CAAC,GAAG,IAAI,CAAC9I,SAAS,CAACmJ,UAAU,CAACJ,CAAC,GAAG,GAAG,EAAEC,CAAC,GAAG,GAAG,EAAEC,CAAC,GAAG,GAAG,EAAEC,CAAC,GAAG,GAAG,CAAC;MACxE;IACF;IACA,IAAIE,UAA8C,GAAG;MACnDvH,MAAM,EAAE,IAAI,CAAC7B,SAAS,CAACqJ,UAAU,CAACC,MAAM;MACxCC,MAAM,EAAE,IAAI,CAACvJ,SAAS,CAACwJ,UAAU,CAACC;IACpC,CAAC;IACD,IAAIlB,QAAQ,IAAI,IAAAmB,sBAAe,EAACnB,QAAQ,CAAC,EAAE;MACzCa,UAAU,GAAGb,QAAQ;IACvB,CAAC,MAAM,IAAIA,QAAQ,EAAE;MACnBa,UAAU,GAAG;QACXvH,MAAM,EAAE,IAAAH,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,YAAY,EAAEuI,QAAQ,CAAC1G,MAAM,CAAC;QAC9D0H,MAAM,EAAEhB,QAAQ,CAACgB,MAAM,GACnB,IAAA7H,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,YAAY,EAAEuI,QAAQ,CAACgB,MAAM,CAAC,GACtD,IAAI,CAACvJ,SAAS,CAACwJ,UAAU,CAACC;MAChC,CAAC;IACH;IACA,IAAI,CAACxJ,GAAG,CAACkI,SAAS,CAChBvH,sBAAU,CAACN,SAAS,CAAC8H,KAAK,CAAC,EAC3BrH,GAAG,EACH0H,GAAG,EACHlI,sBAAU,CAACD,SAAS,CAACF,KAAK,CAAC,EAC3BkH,SAAS,GACL,IAAA5F,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,WAAW,EAAEsH,SAAS,CAAC,GAC/C,IAAI,CAACtH,SAAS,CAAC2J,SAAS,CAACC,OAAO,EACpCjB,GAAG,EACHS,UACF,CAAC;EACH;EAEAS,UAAUA,CAACC,IAAY,EAAEC,IAAY,EAAEC,SAAoB,EAAE;IAC3D,MAAMC,MAAM,GAAG;MACbC,KAAK,EAAEF,SAAS,CAACE,KAAK;MACtBC,MAAM,EAAEH,SAAS,CAACG,MAAM;MACxBC,UAAU,EAAE,IAAI,CAACpK,SAAS,CAACqK,UAAU,CAACC,IAAI;MAC1CC,SAAS,EAAE,IAAA7I,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,WAAW,EAAEgK,SAAS,CAACO,SAAS,CAAC;MACpEC,SAAS,EAAE,IAAA9I,aAAO,EAAC,IAAI,CAAC1B,SAAS,EAAE,WAAW,EAAEgK,SAAS,CAACQ,SAAS;IACrE,CAAC;IACD,OAAO,IAAI,CAACvK,GAAG,CAAC4J,UAAU,CAACC,IAAI,EAAEC,IAAI,EAAEE,MAAM,CAAC;EAChD;AACF;AAACQ,OAAA,CAAA5K,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_types","require","_Host","_JsiSkPaint","_JsiSkRect","_JsiSkRRect","_JsiSkImage","_JsiSkVertices","_JsiSkPath","_JsiSkFont","_JsiSkTextBlob","_JsiSkPicture","_JsiSkMatrix","_JsiSkImageFilter","_JsiSkPoint","_JsiSkRSXform","JsiSkCanvas","HostObject","constructor","CanvasKit","ref","drawRect","rect","paint","JsiSkRect","fromValue","JsiSkPaint","drawImage","image","x","y","JsiSkImage","drawImageRect","img","src","dest","fastSample","drawImageCubic","left","top","B","C","drawImageOptions","fm","mm","getEnum","drawImageNine","center","filter","Array","from","drawImageRectCubic","drawImageRectOptions","drawPaint","drawLine","x0","y0","x1","y1","drawCircle","cx","cy","radius","drawVertices","verts","mode","JsiSkVertices","drawPatch","cubics","colors","texs","map","flat","flatMap","p","JsiSkPoint","undefined","restoreToCount","saveCount","getTotalMatrix","JsiSkMatrix","Float32Array","of","drawPoints","points","drawArc","oval","startAngle","sweepAngle","useCenter","drawRRect","rrect","JsiSkRRect","drawDRRect","outer","inner","drawOval","drawPath","path","JsiSkPath","pathFromValue","delete","drawText","str","font","JsiSkFont","drawTextBlob","blob","JsiSkTextBlob","drawGlyphs","glyphs","positions","drawSvg","svg","_width","_height","MakeImageFromCanvasImageSource","save","saveLayer","bounds","backdrop","flags","JsiSkImageFilter","restore","rotate","rotationInDegrees","rx","ry","scale","sx","sy","skew","translate","dx","dy","drawColor","color","blendMode","clear","clipPath","op","doAntiAlias","clipRect","clipRRect","concat","m","isArray","drawPicture","skp","JsiSkPicture","drawAtlas","atlas","srcs","dsts","sampling","s","dst","JsiSkRSXform","cls","Uint32Array","length","i","r","g","b","a","ColorAsInt","ckSampling","FilterMode","Linear","mipmap","MipmapMode","None","isCubicSampling","BlendMode","DstOver","readPixels","srcX","srcY","imageInfo","pxInfo","width","height","colorSpace","ColorSpace","SRGB","alphaType","colorType","exports"],"sources":["JsiSkCanvas.ts"],"sourcesContent":["import type {\n Canvas,\n CanvasKit,\n CubicResampler as CKCubicResampler,\n FilterOptions as CKFilterOptions,\n} from \"canvaskit-wasm\";\n\nimport {\n type BlendMode,\n type ClipOp,\n type FilterMode,\n type MipmapMode,\n type PointMode,\n type SaveLayerFlag,\n type ImageInfo,\n type SkCanvas,\n type SkColor,\n type SkFont,\n type SkImage,\n type SkImageFilter,\n type SkMatrix,\n type SkPaint,\n type SkPath,\n type SkPicture,\n type SkPoint,\n type SkRect,\n type InputRRect,\n type SkSVG,\n type SkTextBlob,\n type SkVertices,\n type SkRSXform,\n type CubicResampler,\n type FilterOptions,\n isCubicSampling,\n} from \"../types\";\n\nimport { getEnum, HostObject } from \"./Host\";\nimport { JsiSkPaint } from \"./JsiSkPaint\";\nimport { JsiSkRect } from \"./JsiSkRect\";\nimport { JsiSkRRect } from \"./JsiSkRRect\";\nimport { JsiSkImage } from \"./JsiSkImage\";\nimport { JsiSkVertices } from \"./JsiSkVertices\";\nimport { JsiSkPath } from \"./JsiSkPath\";\nimport { JsiSkFont } from \"./JsiSkFont\";\nimport { JsiSkTextBlob } from \"./JsiSkTextBlob\";\nimport { JsiSkPicture } from \"./JsiSkPicture\";\nimport { JsiSkMatrix } from \"./JsiSkMatrix\";\nimport { JsiSkImageFilter } from \"./JsiSkImageFilter\";\nimport { JsiSkPoint } from \"./JsiSkPoint\";\nimport { JsiSkRSXform } from \"./JsiSkRSXform\";\nimport type { JsiSkSVG } from \"./JsiSkSVG\";\n\nexport class JsiSkCanvas\n extends HostObject<Canvas, \"Canvas\">\n implements SkCanvas\n{\n constructor(CanvasKit: CanvasKit, ref: Canvas) {\n super(CanvasKit, ref, \"Canvas\");\n }\n\n drawRect(rect: SkRect, paint: SkPaint) {\n this.ref.drawRect(\n JsiSkRect.fromValue(this.CanvasKit, rect),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawImage(image: SkImage, x: number, y: number, paint?: SkPaint) {\n this.ref.drawImage(\n JsiSkImage.fromValue(image),\n x,\n y,\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageRect(\n img: SkImage,\n src: SkRect,\n dest: SkRect,\n paint: SkPaint,\n fastSample?: boolean\n ) {\n this.ref.drawImageRect(\n JsiSkImage.fromValue(img),\n JsiSkRect.fromValue(this.CanvasKit, src),\n JsiSkRect.fromValue(this.CanvasKit, dest),\n JsiSkPaint.fromValue(paint),\n fastSample\n );\n }\n\n drawImageCubic(\n img: SkImage,\n left: number,\n top: number,\n B: number,\n C: number,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageCubic(\n JsiSkImage.fromValue(img),\n left,\n top,\n B,\n C,\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageOptions(\n img: SkImage,\n left: number,\n top: number,\n fm: FilterMode,\n mm: MipmapMode,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageOptions(\n JsiSkImage.fromValue(img),\n left,\n top,\n getEnum(this.CanvasKit, \"FilterMode\", fm),\n getEnum(this.CanvasKit, \"MipmapMode\", mm),\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageNine(\n img: SkImage,\n center: SkRect,\n dest: SkRect,\n filter: FilterMode,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageNine(\n JsiSkImage.fromValue(img),\n Array.from(JsiSkRect.fromValue(this.CanvasKit, center)),\n JsiSkRect.fromValue(this.CanvasKit, dest),\n getEnum(this.CanvasKit, \"FilterMode\", filter),\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageRectCubic(\n img: SkImage,\n src: SkRect,\n dest: SkRect,\n B: number,\n C: number,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageRectCubic(\n JsiSkImage.fromValue(img),\n JsiSkRect.fromValue(this.CanvasKit, src),\n JsiSkRect.fromValue(this.CanvasKit, dest),\n B,\n C,\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawImageRectOptions(\n img: SkImage,\n src: SkRect,\n dest: SkRect,\n fm: FilterMode,\n mm: MipmapMode,\n paint?: SkPaint | null\n ) {\n this.ref.drawImageRectOptions(\n JsiSkImage.fromValue(img),\n JsiSkRect.fromValue(this.CanvasKit, src),\n JsiSkRect.fromValue(this.CanvasKit, dest),\n getEnum(this.CanvasKit, \"FilterMode\", fm),\n getEnum(this.CanvasKit, \"MipmapMode\", mm),\n paint ? JsiSkPaint.fromValue(paint) : paint\n );\n }\n\n drawPaint(paint: SkPaint) {\n this.ref.drawPaint(JsiSkPaint.fromValue(paint));\n }\n\n drawLine(x0: number, y0: number, x1: number, y1: number, paint: SkPaint) {\n this.ref.drawLine(x0, y0, x1, y1, JsiSkPaint.fromValue(paint));\n }\n\n drawCircle(cx: number, cy: number, radius: number, paint: SkPaint) {\n this.ref.drawCircle(cx, cy, radius, JsiSkPaint.fromValue(paint));\n }\n\n drawVertices(verts: SkVertices, mode: BlendMode, paint: SkPaint) {\n this.ref.drawVertices(\n JsiSkVertices.fromValue(verts),\n getEnum(this.CanvasKit, \"BlendMode\", mode),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawPatch(\n cubics: SkPoint[],\n colors?: SkColor[] | null,\n texs?: SkPoint[] | null,\n mode?: BlendMode | null,\n paint?: SkPaint\n ) {\n this.ref.drawPatch(\n cubics.map(({ x, y }) => [x, y]).flat(),\n colors,\n texs ? texs.flatMap((p) => Array.from(JsiSkPoint.fromValue(p))) : texs,\n mode !== undefined && mode !== null\n ? getEnum(this.CanvasKit, \"BlendMode\", mode)\n : null,\n paint ? JsiSkPaint.fromValue(paint) : undefined\n );\n }\n\n restoreToCount(saveCount: number) {\n this.ref.restoreToCount(saveCount);\n }\n\n getTotalMatrix(): SkMatrix {\n return new JsiSkMatrix(\n this.CanvasKit,\n Float32Array.of(...this.ref.getTotalMatrix())\n );\n }\n\n drawPoints(mode: PointMode, points: SkPoint[], paint: SkPaint) {\n this.ref.drawPoints(\n getEnum(this.CanvasKit, \"PointMode\", mode),\n points.map(({ x, y }) => [x, y]).flat(),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawArc(\n oval: SkRect,\n startAngle: number,\n sweepAngle: number,\n useCenter: boolean,\n paint: SkPaint\n ) {\n this.ref.drawArc(\n JsiSkRect.fromValue(this.CanvasKit, oval),\n startAngle,\n sweepAngle,\n useCenter,\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawRRect(rrect: InputRRect, paint: SkPaint) {\n this.ref.drawRRect(\n JsiSkRRect.fromValue(this.CanvasKit, rrect),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawDRRect(outer: InputRRect, inner: InputRRect, paint: SkPaint) {\n this.ref.drawDRRect(\n JsiSkRRect.fromValue(this.CanvasKit, outer),\n JsiSkRRect.fromValue(this.CanvasKit, inner),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawOval(oval: SkRect, paint: SkPaint) {\n this.ref.drawOval(\n JsiSkRect.fromValue(this.CanvasKit, oval),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawPath(path: SkPath, paint: SkPaint) {\n const p = JsiSkPath.pathFromValue(path);\n this.ref.drawPath(p, JsiSkPaint.fromValue(paint));\n p.delete();\n }\n\n drawText(str: string, x: number, y: number, paint: SkPaint, font: SkFont) {\n this.ref.drawText(\n str,\n x,\n y,\n JsiSkPaint.fromValue(paint),\n JsiSkFont.fromValue(font)\n );\n }\n\n drawTextBlob(blob: SkTextBlob, x: number, y: number, paint: SkPaint) {\n this.ref.drawTextBlob(\n JsiSkTextBlob.fromValue(blob),\n x,\n y,\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawGlyphs(\n glyphs: number[],\n positions: SkPoint[],\n x: number,\n y: number,\n font: SkFont,\n paint: SkPaint\n ) {\n this.ref.drawGlyphs(\n glyphs,\n positions.map((p) => [p.x, p.y]).flat(),\n x,\n y,\n JsiSkFont.fromValue(font),\n JsiSkPaint.fromValue(paint)\n );\n }\n\n drawSvg(svg: SkSVG, _width?: number, _height?: number) {\n const image = this.CanvasKit.MakeImageFromCanvasImageSource(\n (svg as JsiSkSVG).ref\n );\n this.ref.drawImage(image, 0, 0);\n }\n\n save() {\n return this.ref.save();\n }\n\n saveLayer(\n paint?: SkPaint,\n bounds?: SkRect | null,\n backdrop?: SkImageFilter | null,\n flags?: SaveLayerFlag\n ) {\n return this.ref.saveLayer(\n paint ? JsiSkPaint.fromValue(paint) : undefined,\n bounds ? JsiSkRect.fromValue(this.CanvasKit, bounds) : bounds,\n backdrop ? JsiSkImageFilter.fromValue(backdrop) : backdrop,\n flags\n );\n }\n\n restore() {\n this.ref.restore();\n }\n\n rotate(rotationInDegrees: number, rx: number, ry: number) {\n this.ref.rotate(rotationInDegrees, rx, ry);\n }\n\n scale(sx: number, sy: number) {\n this.ref.scale(sx, sy);\n }\n\n skew(sx: number, sy: number) {\n this.ref.skew(sx, sy);\n }\n\n translate(dx: number, dy: number) {\n this.ref.translate(dx, dy);\n }\n\n drawColor(color: SkColor, blendMode?: BlendMode) {\n this.ref.drawColor(\n color,\n blendMode !== undefined\n ? getEnum(this.CanvasKit, \"BlendMode\", blendMode)\n : undefined\n );\n }\n\n clear(color: SkColor) {\n this.ref.clear(color);\n }\n\n clipPath(path: SkPath, op: ClipOp, doAntiAlias: boolean) {\n const p = JsiSkPath.pathFromValue(path);\n this.ref.clipPath(p, getEnum(this.CanvasKit, \"PathOp\", op), doAntiAlias);\n p.delete();\n }\n\n clipRect(rect: SkRect, op: ClipOp, doAntiAlias: boolean) {\n this.ref.clipRect(\n JsiSkRect.fromValue(this.CanvasKit, rect),\n getEnum(this.CanvasKit, \"PathOp\", op),\n doAntiAlias\n );\n }\n\n clipRRect(rrect: InputRRect, op: ClipOp, doAntiAlias: boolean) {\n this.ref.clipRRect(\n JsiSkRRect.fromValue(this.CanvasKit, rrect),\n getEnum(this.CanvasKit, \"PathOp\", op),\n doAntiAlias\n );\n }\n\n concat(m: SkMatrix | number[]) {\n this.ref.concat(Array.isArray(m) ? m : JsiSkMatrix.fromValue(m));\n }\n\n drawPicture(skp: SkPicture) {\n this.ref.drawPicture(JsiSkPicture.fromValue(skp));\n }\n\n drawAtlas(\n atlas: SkImage,\n srcs: SkRect[],\n dsts: SkRSXform[],\n paint: SkPaint,\n blendMode?: BlendMode,\n colors?: SkColor[],\n sampling?: CubicResampler | FilterOptions\n ) {\n const src = srcs.flatMap((s) =>\n Array.from(JsiSkRect.fromValue(this.CanvasKit, s))\n );\n const dst = dsts.flatMap((s) => Array.from(JsiSkRSXform.fromValue(s)));\n let cls: Uint32Array | undefined;\n if (colors) {\n cls = new Uint32Array(colors.length);\n for (let i = 0; i < colors.length; i++) {\n const [r, g, b, a] = colors[i];\n cls[i] = this.CanvasKit.ColorAsInt(r * 255, g * 255, b * 255, a * 255);\n }\n }\n let ckSampling: CKCubicResampler | CKFilterOptions = {\n filter: this.CanvasKit.FilterMode.Linear,\n mipmap: this.CanvasKit.MipmapMode.None,\n };\n if (sampling && isCubicSampling(sampling)) {\n ckSampling = sampling;\n } else if (sampling) {\n ckSampling = {\n filter: getEnum(this.CanvasKit, \"FilterMode\", sampling.filter),\n mipmap:\n sampling.mipmap !== undefined\n ? getEnum(this.CanvasKit, \"MipmapMode\", sampling.mipmap)\n : this.CanvasKit.MipmapMode.None,\n };\n }\n this.ref.drawAtlas(\n JsiSkImage.fromValue(atlas),\n src,\n dst,\n JsiSkPaint.fromValue(paint),\n blendMode !== undefined\n ? getEnum(this.CanvasKit, \"BlendMode\", blendMode)\n : this.CanvasKit.BlendMode.DstOver,\n cls,\n ckSampling\n );\n }\n\n readPixels(srcX: number, srcY: number, imageInfo: ImageInfo) {\n const pxInfo = {\n width: imageInfo.width,\n height: imageInfo.height,\n colorSpace: this.CanvasKit.ColorSpace.SRGB,\n alphaType: getEnum(this.CanvasKit, \"AlphaType\", imageInfo.alphaType),\n colorType: getEnum(this.CanvasKit, \"ColorType\", imageInfo.colorType),\n };\n return this.ref.readPixels(srcX, srcY, pxInfo);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -61,9 +61,12 @@ class JsiSkImage extends _Host.HostObject {
|
|
|
61
61
|
}
|
|
62
62
|
encodeToBytes(fmt, quality) {
|
|
63
63
|
let result;
|
|
64
|
-
if (fmt && quality) {
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
if (fmt !== undefined && quality !== undefined) {
|
|
65
|
+
// CanvasKit's encodeToBytes() applies `quality || 100`, which would
|
|
66
|
+
// turn a valid quality of 0 into 100. The encoders clamp any quality
|
|
67
|
+
// below 1 up to 1 anyway, so pass 1 to get the same output as 0.
|
|
68
|
+
result = this.ref.encodeToBytes((0, _Host.getEnum)(this.CanvasKit, "ImageFormat", fmt), Math.max(quality, 1));
|
|
69
|
+
} else if (fmt !== undefined) {
|
|
67
70
|
result = this.ref.encodeToBytes((0, _Host.getEnum)(this.CanvasKit, "ImageFormat", fmt));
|
|
68
71
|
} else {
|
|
69
72
|
result = this.ref.encodeToBytes();
|