@shopify/react-native-skia 0.1.227 → 0.1.228

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.
Files changed (137) hide show
  1. package/cpp/api/JsiSkCanvas.h +2 -1
  2. package/cpp/api/JsiSkMatrix.h +27 -11
  3. package/cpp/api/JsiSkTypeface.h +1 -0
  4. package/cpp/rnskia/dom/props/MatrixProp.h +14 -3
  5. package/lib/commonjs/dom/types/Common.d.ts +2 -2
  6. package/lib/commonjs/dom/types/Common.js.map +1 -1
  7. package/lib/commonjs/external/reanimated/interpolators.d.ts +1 -0
  8. package/lib/commonjs/external/reanimated/interpolators.js +16 -3
  9. package/lib/commonjs/external/reanimated/interpolators.js.map +1 -1
  10. package/lib/commonjs/external/reanimated/moduleWrapper.d.ts +2 -1
  11. package/lib/commonjs/external/reanimated/moduleWrapper.js +9 -7
  12. package/lib/commonjs/external/reanimated/moduleWrapper.js.map +1 -1
  13. package/lib/commonjs/skia/core/Vector.d.ts +0 -5
  14. package/lib/commonjs/skia/core/Vector.js +1 -17
  15. package/lib/commonjs/skia/core/Vector.js.map +1 -1
  16. package/lib/commonjs/skia/types/Matrix.d.ts +2 -13
  17. package/lib/commonjs/skia/types/Matrix.js +1 -16
  18. package/lib/commonjs/skia/types/Matrix.js.map +1 -1
  19. package/lib/commonjs/skia/types/Matrix4.d.ts +51 -0
  20. package/lib/commonjs/skia/types/Matrix4.js +111 -12
  21. package/lib/commonjs/skia/types/Matrix4.js.map +1 -1
  22. package/lib/commonjs/skia/web/Host.d.ts +2 -3
  23. package/lib/commonjs/skia/web/Host.js +4 -12
  24. package/lib/commonjs/skia/web/Host.js.map +1 -1
  25. package/lib/commonjs/skia/web/JsiSkCanvas.js +12 -12
  26. package/lib/commonjs/skia/web/JsiSkCanvas.js.map +1 -1
  27. package/lib/commonjs/skia/web/JsiSkColorFilterFactory.js +1 -1
  28. package/lib/commonjs/skia/web/JsiSkColorFilterFactory.js.map +1 -1
  29. package/lib/commonjs/skia/web/JsiSkFont.js +2 -2
  30. package/lib/commonjs/skia/web/JsiSkFont.js.map +1 -1
  31. package/lib/commonjs/skia/web/JsiSkImage.js +6 -6
  32. package/lib/commonjs/skia/web/JsiSkImage.js.map +1 -1
  33. package/lib/commonjs/skia/web/JsiSkImageFactory.js +2 -2
  34. package/lib/commonjs/skia/web/JsiSkImageFactory.js.map +1 -1
  35. package/lib/commonjs/skia/web/JsiSkImageFilterFactory.js +3 -3
  36. package/lib/commonjs/skia/web/JsiSkImageFilterFactory.js.map +1 -1
  37. package/lib/commonjs/skia/web/JsiSkMaskFilterFactory.js +1 -1
  38. package/lib/commonjs/skia/web/JsiSkMaskFilterFactory.js.map +1 -1
  39. package/lib/commonjs/skia/web/JsiSkMatrix.d.ts +2 -2
  40. package/lib/commonjs/skia/web/JsiSkMatrix.js +6 -1
  41. package/lib/commonjs/skia/web/JsiSkMatrix.js.map +1 -1
  42. package/lib/commonjs/skia/web/JsiSkPaint.js +3 -3
  43. package/lib/commonjs/skia/web/JsiSkPaint.js.map +1 -1
  44. package/lib/commonjs/skia/web/JsiSkPath.js +4 -4
  45. package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
  46. package/lib/commonjs/skia/web/JsiSkPathEffectFactory.js +1 -1
  47. package/lib/commonjs/skia/web/JsiSkPathEffectFactory.js.map +1 -1
  48. package/lib/commonjs/skia/web/JsiSkPathFactory.js +1 -1
  49. package/lib/commonjs/skia/web/JsiSkPathFactory.js.map +1 -1
  50. package/lib/commonjs/skia/web/JsiSkPicture.js +1 -1
  51. package/lib/commonjs/skia/web/JsiSkPicture.js.map +1 -1
  52. package/lib/commonjs/skia/web/JsiSkShaderFactory.js +5 -5
  53. package/lib/commonjs/skia/web/JsiSkShaderFactory.js.map +1 -1
  54. package/lib/commonjs/skia/web/JsiSkVerticesFactory.js +3 -3
  55. package/lib/commonjs/skia/web/JsiSkVerticesFactory.js.map +1 -1
  56. package/lib/module/dom/types/Common.d.ts +2 -2
  57. package/lib/module/dom/types/Common.js.map +1 -1
  58. package/lib/module/external/reanimated/interpolators.d.ts +1 -0
  59. package/lib/module/external/reanimated/interpolators.js +14 -4
  60. package/lib/module/external/reanimated/interpolators.js.map +1 -1
  61. package/lib/module/external/reanimated/moduleWrapper.d.ts +2 -1
  62. package/lib/module/external/reanimated/moduleWrapper.js +7 -6
  63. package/lib/module/external/reanimated/moduleWrapper.js.map +1 -1
  64. package/lib/module/skia/core/Vector.d.ts +0 -5
  65. package/lib/module/skia/core/Vector.js +0 -13
  66. package/lib/module/skia/core/Vector.js.map +1 -1
  67. package/lib/module/skia/types/Matrix.d.ts +2 -13
  68. package/lib/module/skia/types/Matrix.js +0 -14
  69. package/lib/module/skia/types/Matrix.js.map +1 -1
  70. package/lib/module/skia/types/Matrix4.d.ts +51 -0
  71. package/lib/module/skia/types/Matrix4.js +90 -16
  72. package/lib/module/skia/types/Matrix4.js.map +1 -1
  73. package/lib/module/skia/web/Host.d.ts +2 -3
  74. package/lib/module/skia/web/Host.js +2 -7
  75. package/lib/module/skia/web/Host.js.map +1 -1
  76. package/lib/module/skia/web/JsiSkCanvas.js +13 -13
  77. package/lib/module/skia/web/JsiSkCanvas.js.map +1 -1
  78. package/lib/module/skia/web/JsiSkColorFilterFactory.js +2 -2
  79. package/lib/module/skia/web/JsiSkColorFilterFactory.js.map +1 -1
  80. package/lib/module/skia/web/JsiSkFont.js +3 -3
  81. package/lib/module/skia/web/JsiSkFont.js.map +1 -1
  82. package/lib/module/skia/web/JsiSkImage.js +7 -7
  83. package/lib/module/skia/web/JsiSkImage.js.map +1 -1
  84. package/lib/module/skia/web/JsiSkImageFactory.js +3 -3
  85. package/lib/module/skia/web/JsiSkImageFactory.js.map +1 -1
  86. package/lib/module/skia/web/JsiSkImageFilterFactory.js +4 -4
  87. package/lib/module/skia/web/JsiSkImageFilterFactory.js.map +1 -1
  88. package/lib/module/skia/web/JsiSkMaskFilterFactory.js +2 -2
  89. package/lib/module/skia/web/JsiSkMaskFilterFactory.js.map +1 -1
  90. package/lib/module/skia/web/JsiSkMatrix.d.ts +2 -2
  91. package/lib/module/skia/web/JsiSkMatrix.js +6 -1
  92. package/lib/module/skia/web/JsiSkMatrix.js.map +1 -1
  93. package/lib/module/skia/web/JsiSkPaint.js +4 -4
  94. package/lib/module/skia/web/JsiSkPaint.js.map +1 -1
  95. package/lib/module/skia/web/JsiSkPath.js +5 -5
  96. package/lib/module/skia/web/JsiSkPath.js.map +1 -1
  97. package/lib/module/skia/web/JsiSkPathEffectFactory.js +2 -2
  98. package/lib/module/skia/web/JsiSkPathEffectFactory.js.map +1 -1
  99. package/lib/module/skia/web/JsiSkPathFactory.js +2 -2
  100. package/lib/module/skia/web/JsiSkPathFactory.js.map +1 -1
  101. package/lib/module/skia/web/JsiSkPicture.js +2 -2
  102. package/lib/module/skia/web/JsiSkPicture.js.map +1 -1
  103. package/lib/module/skia/web/JsiSkShaderFactory.js +6 -6
  104. package/lib/module/skia/web/JsiSkShaderFactory.js.map +1 -1
  105. package/lib/module/skia/web/JsiSkVerticesFactory.js +2 -2
  106. package/lib/module/skia/web/JsiSkVerticesFactory.js.map +1 -1
  107. package/lib/typescript/src/dom/types/Common.d.ts +2 -2
  108. package/lib/typescript/src/external/reanimated/interpolators.d.ts +1 -0
  109. package/lib/typescript/src/external/reanimated/moduleWrapper.d.ts +2 -1
  110. package/lib/typescript/src/skia/core/Vector.d.ts +0 -5
  111. package/lib/typescript/src/skia/types/Matrix.d.ts +2 -13
  112. package/lib/typescript/src/skia/types/Matrix4.d.ts +51 -0
  113. package/lib/typescript/src/skia/web/Host.d.ts +2 -3
  114. package/lib/typescript/src/skia/web/JsiSkMatrix.d.ts +2 -2
  115. package/package.json +2 -1
  116. package/src/dom/types/Common.ts +3 -1
  117. package/src/external/reanimated/interpolators.ts +20 -5
  118. package/src/external/reanimated/moduleWrapper.ts +6 -0
  119. package/src/skia/core/Vector.ts +0 -7
  120. package/src/skia/types/Matrix.ts +2 -13
  121. package/src/skia/types/Matrix4.ts +96 -18
  122. package/src/skia/web/Host.ts +4 -3
  123. package/src/skia/web/JsiSkCanvas.ts +22 -15
  124. package/src/skia/web/JsiSkColorFilterFactory.ts +5 -2
  125. package/src/skia/web/JsiSkFont.ts +3 -3
  126. package/src/skia/web/JsiSkImage.ts +14 -11
  127. package/src/skia/web/JsiSkImageFactory.ts +3 -3
  128. package/src/skia/web/JsiSkImageFilterFactory.ts +5 -5
  129. package/src/skia/web/JsiSkMaskFilterFactory.ts +6 -2
  130. package/src/skia/web/JsiSkMatrix.ts +12 -3
  131. package/src/skia/web/JsiSkPaint.ts +4 -4
  132. package/src/skia/web/JsiSkPath.ts +8 -5
  133. package/src/skia/web/JsiSkPathEffectFactory.ts +2 -2
  134. package/src/skia/web/JsiSkPathFactory.ts +2 -2
  135. package/src/skia/web/JsiSkPicture.ts +4 -4
  136. package/src/skia/web/JsiSkShaderFactory.ts +6 -6
  137. package/src/skia/web/JsiSkVerticesFactory.ts +2 -2
@@ -16,6 +16,5 @@ export declare abstract class BaseHostObject<T, N extends string> extends Host i
16
16
  export declare abstract class HostObject<T, N extends string> extends BaseHostObject<T, N> {
17
17
  static fromValue<T>(value: SkJSIInstance<string>): T;
18
18
  }
19
- export declare const getCkEnum: (e: EmbindEnum, v: number) => EmbindEnumEntity;
20
- export declare const ckEnum: (value: number) => EmbindEnumEntity;
21
- export declare const optEnum: (value: number | undefined) => EmbindEnumEntity | undefined;
19
+ export declare const getEnum: (e: EmbindEnum, v: number) => EmbindEnumEntity;
20
+ export declare const optEnum: (e: EmbindEnum, value: number | undefined) => EmbindEnumEntity | undefined;
@@ -1,12 +1,12 @@
1
1
  import type { CanvasKit, Matrix3x3 } from "canvaskit-wasm";
2
- import type { SkMatrix } from "../types";
2
+ import { type Matrix3, type Matrix4, type SkMatrix } from "../types";
3
3
  import { HostObject } from "./Host";
4
4
  export declare class JsiSkMatrix extends HostObject<Matrix3x3, "Matrix"> implements SkMatrix {
5
5
  constructor(CanvasKit: CanvasKit, ref: Matrix3x3);
6
6
  private preMultiply;
7
7
  private postMultiply;
8
8
  dispose: () => void;
9
- concat(matrix: SkMatrix | number[]): this;
9
+ concat(matrix: SkMatrix | number[] | Matrix4 | Matrix3): this;
10
10
  translate(x: number, y: number): this;
11
11
  postTranslate(x: number, y: number): this;
12
12
  scale(x: number, y?: number): this;
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "setup-skia-web": "./scripts/setup-canvaskit.js"
8
8
  },
9
9
  "title": "React Native Skia",
10
- "version": "0.1.227",
10
+ "version": "0.1.228",
11
11
  "description": "High-performance React Native Graphics using Skia",
12
12
  "main": "lib/module/index.js",
13
13
  "files": [
@@ -94,6 +94,7 @@
94
94
  "eslint-config-react-native-wcandillon": "3.10.2",
95
95
  "eslint-plugin-reanimated": "2.0.0",
96
96
  "jest": "29.6.4",
97
+ "jest-diff": "^29.7.0",
97
98
  "merge-dirs": "^0.2.1",
98
99
  "pixelmatch": "^5.3.0",
99
100
  "pngjs": "^6.0.0",
@@ -3,6 +3,8 @@ import type { ReactNode } from "react";
3
3
  import type {
4
4
  BlendMode,
5
5
  Color,
6
+ Matrix3,
7
+ Matrix4,
6
8
  PaintStyle,
7
9
  SkMatrix,
8
10
  SkPaint,
@@ -66,7 +68,7 @@ export type CircleDef = PointCircleDef | ScalarCircleDef;
66
68
  export interface TransformProps {
67
69
  transform?: Transforms3d;
68
70
  origin?: Vector;
69
- matrix?: SkMatrix | number[];
71
+ matrix?: SkMatrix | Matrix4 | Matrix3 | number[];
70
72
  }
71
73
 
72
74
  export interface PaintProps extends ChildrenProps {
@@ -3,7 +3,7 @@ import type {
3
3
  FrameInfo,
4
4
  SharedValue,
5
5
  } from "react-native-reanimated";
6
- import { useMemo, useRef } from "react";
6
+ import { useCallback, useMemo } from "react";
7
7
 
8
8
  import type { SkPath, SkPoint } from "../../skia/types";
9
9
  import { interpolatePaths, interpolateVector } from "../../animation";
@@ -13,6 +13,7 @@ import {
13
13
  useAnimatedReaction,
14
14
  useFrameCallback,
15
15
  useSharedValue,
16
+ useDerivedValue,
16
17
  } from "./moduleWrapper";
17
18
 
18
19
  export const notifyChange = (value: SharedValue<unknown>) => {
@@ -23,12 +24,26 @@ export const notifyChange = (value: SharedValue<unknown>) => {
23
24
  }
24
25
  };
25
26
 
27
+ export const usePathValue = (cb: (path: SkPath) => void) => {
28
+ const pathInit = useMemo(() => Skia.Path.Make(), []);
29
+ const path = useSharedValue(pathInit);
30
+ useDerivedValue(() => {
31
+ path.value.reset();
32
+ cb(path.value);
33
+ notifyChange(path);
34
+ });
35
+ return path;
36
+ };
37
+
26
38
  export const useClock = () => {
27
39
  const clock = useSharedValue(0);
28
- const callback = useRef((info: FrameInfo) => {
29
- "worklet";
30
- clock.value = info.timeSinceFirstFrame;
31
- }).current;
40
+ const callback = useCallback(
41
+ (info: FrameInfo) => {
42
+ "worklet";
43
+ clock.value = info.timeSinceFirstFrame;
44
+ },
45
+ [clock]
46
+ );
32
47
  useFrameCallback(callback);
33
48
  return clock;
34
49
  };
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import type { DependencyList } from "react";
3
3
  import type {
4
+ DerivedValue,
4
5
  FrameCallback,
5
6
  FrameInfo,
6
7
  SharedValue,
@@ -42,6 +43,11 @@ export const useSharedValue: <T>(
42
43
  oneWayReadsOnly?: boolean
43
44
  ) => SharedValue<T> = Reanimated2?.useSharedValue || throwOnMissingReanimated;
44
45
 
46
+ export const useDerivedValue: <T>(
47
+ processor: () => T,
48
+ dependencies?: DependencyList
49
+ ) => DerivedValue<T> = Reanimated2?.useDerivedValue || throwOnMissingReanimated;
50
+
45
51
  export const useFrameCallback: (
46
52
  callback: (frameInfo: FrameInfo) => void,
47
53
  autostart?: boolean
@@ -22,10 +22,3 @@ export const dist = (a: Vector, b: Vector) => {
22
22
  "worklet";
23
23
  return Math.hypot(a.x - b.x, a.y - b.y);
24
24
  };
25
- export const translate = ({
26
- x,
27
- y,
28
- }: Vector): [{ translateX: number }, { translateY: number }] => {
29
- "worklet";
30
- return [{ translateX: x }, { translateY: y }];
31
- };
@@ -1,24 +1,13 @@
1
1
  import type { SkJSIInstance } from "./JsiInstance";
2
2
  import type { SkCanvas } from "./Canvas";
3
- import type { Transforms3d } from "./Matrix4";
3
+ import type { Matrix3, Matrix4, Transforms3d } from "./Matrix4";
4
4
  import { processTransform3d } from "./Matrix4";
5
- export enum MatrixIndex {
6
- ScaleX = 0,
7
- SkewX = 1,
8
- TransX = 2,
9
- SkewY = 3,
10
- ScaleY = 4,
11
- TransY = 5,
12
- Persp0 = 6,
13
- Persp1 = 7,
14
- Persp2 = 8,
15
- }
16
5
 
17
6
  export const isMatrix = (obj: unknown): obj is SkMatrix =>
18
7
  obj !== null && (obj as SkJSIInstance<string>).__typename__ === "Matrix";
19
8
 
20
9
  export interface SkMatrix extends SkJSIInstance<"Matrix"> {
21
- concat: (matrix: SkMatrix | number[]) => SkMatrix;
10
+ concat: (matrix: SkMatrix | Matrix4 | Matrix3 | number[]) => SkMatrix;
22
11
  translate: (x: number, y: number) => SkMatrix;
23
12
  scale: (x: number, y?: number) => SkMatrix;
24
13
  skew: (x: number, y: number) => SkMatrix;
@@ -1,7 +1,20 @@
1
+ type Point = { x: number; y: number };
1
2
  type Vec2 = readonly [number, number];
2
3
  type Vec3 = readonly [number, number, number];
3
4
  type Vec4 = readonly [number, number, number, number];
4
5
 
6
+ export type Matrix3 = readonly [
7
+ number,
8
+ number,
9
+ number,
10
+ number,
11
+ number,
12
+ number,
13
+ number,
14
+ number,
15
+ number
16
+ ];
17
+
5
18
  export type Matrix4 = readonly [
6
19
  number,
7
20
  number,
@@ -78,17 +91,18 @@ export const Matrix4 = (): Matrix4 => {
78
91
  return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
79
92
  };
80
93
 
81
- const translate = (x: number, y: number, z: number): Matrix4 => {
94
+ /**
95
+ * @worklet
96
+ */
97
+ export const translate = (x: number, y: number, z: number = 0): Matrix4 => {
82
98
  "worklet";
83
99
  return [1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1];
84
100
  };
85
101
 
86
- const scale = (sx: number, sy: number, sz: number): Matrix4 => {
87
- "worklet";
88
- return [sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1];
89
- };
90
-
91
- const perspective = (p: number): Matrix4 => {
102
+ /**
103
+ * @worklet
104
+ */
105
+ export const perspective = (p: number): Matrix4 => {
92
106
  "worklet";
93
107
  return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -1 / p, 1];
94
108
  };
@@ -136,15 +150,6 @@ const rotatedUnitSinCos = (
136
150
  ];
137
151
  };
138
152
 
139
- const rotate = (axis: Vec3, value: number) => {
140
- "worklet";
141
- return rotatedUnitSinCos(
142
- normalizeVec(axis),
143
- Math.sin(value),
144
- Math.cos(value)
145
- );
146
- };
147
-
148
153
  const matrixVecMul4 = (m: Matrix4, v: Vec4) => {
149
154
  "worklet";
150
155
  const [vx, vy, vz, vw] = v;
@@ -165,7 +170,10 @@ export const mapPoint3d = (m: Matrix4, v: Vec3) => {
165
170
  return [r[0] / r[3], r[1] / r[3], r[2] / r[3]] as const;
166
171
  };
167
172
 
168
- const multiply4 = (a: Matrix4, b: Matrix4): Matrix4 => {
173
+ /**
174
+ * @worklet
175
+ */
176
+ export const multiply4 = (a: Matrix4, b: Matrix4): Matrix4 => {
169
177
  "worklet";
170
178
  const result = new Array(16).fill(0);
171
179
  for (let i = 0; i < 4; i++) {
@@ -190,11 +198,81 @@ const skewX = (angle: number): Matrix4 => {
190
198
  return [1, 0, 0, 0, Math.tan(angle), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
191
199
  };
192
200
 
193
- const toMatrix3 = (m: Matrix4) => {
201
+ /**
202
+ * @worklet
203
+ */
204
+ export const toMatrix3 = (m: Matrix4) => {
194
205
  "worklet";
195
206
  return [m[0], m[1], m[3], m[4], m[5], m[7], m[12], m[13], m[15]];
196
207
  };
197
208
 
209
+ const rotate = (axis: Vec3, value: number) => {
210
+ "worklet";
211
+ return rotatedUnitSinCos(
212
+ normalizeVec(axis),
213
+ Math.sin(value),
214
+ Math.cos(value)
215
+ );
216
+ };
217
+
218
+ /**
219
+ * @worklet
220
+ */
221
+ export const pivot = (m: Matrix4, p: Point) => {
222
+ "worklet";
223
+ return multiply4(translate(p.x, p.y), multiply4(m, translate(-p.x, -p.y)));
224
+ };
225
+
226
+ /**
227
+ * @worklet
228
+ */
229
+ export const scale = (
230
+ sx: number,
231
+ sy: number,
232
+ sz: number = 1,
233
+ p?: Point
234
+ ): Matrix4 => {
235
+ "worklet";
236
+ const m4: Matrix4 = [sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1];
237
+ if (p) {
238
+ return pivot(m4, p);
239
+ }
240
+ return m4;
241
+ };
242
+
243
+ const rotateAxis = (axis: Vec3, angle: number, p?: Point) => {
244
+ "worklet";
245
+ const result = rotate(axis, angle);
246
+ if (p) {
247
+ return pivot(result, p);
248
+ }
249
+ return result;
250
+ };
251
+
252
+ /**
253
+ * @worklet
254
+ */
255
+ export const rotateZ = (value: number, p?: Point) => {
256
+ "worklet";
257
+ return rotateAxis([0, 0, 1], value, p);
258
+ };
259
+
260
+ /**
261
+ * @worklet
262
+ */
263
+ export const rotateX = (value: number, p?: Point) => {
264
+ "worklet";
265
+ return rotateAxis([1, 0, 0], value, p);
266
+ };
267
+
268
+ /**
269
+ * @worklet
270
+ */
271
+ export const rotateY = (value: number, p?: Point) => {
272
+ "worklet";
273
+ return rotateAxis([0, 1, 0], value, p);
274
+ };
275
+
198
276
  /**
199
277
  * @worklet
200
278
  */
@@ -41,10 +41,11 @@ export abstract class HostObject<T, N extends string> extends BaseHostObject<
41
41
  }
42
42
  }
43
43
 
44
- export const getCkEnum = (e: EmbindEnum, v: number): EmbindEnumEntity =>
44
+ export const getEnum = (e: EmbindEnum, v: number): EmbindEnumEntity =>
45
45
  Object.values(e).find(({ value }) => value === v);
46
- export const ckEnum = (value: number): EmbindEnumEntity => ({ value });
46
+
47
47
  export const optEnum = (
48
+ e: EmbindEnum,
48
49
  value: number | undefined
49
50
  ): EmbindEnumEntity | undefined =>
50
- value === undefined ? undefined : { value };
51
+ value === undefined ? undefined : getEnum(e, value);
@@ -25,7 +25,7 @@ import type {
25
25
  SkVertices,
26
26
  } from "../types";
27
27
 
28
- import { ckEnum, getCkEnum, HostObject } from "./Host";
28
+ import { getEnum, HostObject } from "./Host";
29
29
  import { JsiSkPaint } from "./JsiSkPaint";
30
30
  import { JsiSkRect } from "./JsiSkRect";
31
31
  import { JsiSkRRect } from "./JsiSkRRect";
@@ -113,8 +113,8 @@ export class JsiSkCanvas
113
113
  JsiSkImage.fromValue(img),
114
114
  left,
115
115
  top,
116
- ckEnum(fm),
117
- ckEnum(mm),
116
+ getEnum(this.CanvasKit.FilterMode, fm),
117
+ getEnum(this.CanvasKit.MipmapMode, mm),
118
118
  paint ? JsiSkPaint.fromValue(paint) : paint
119
119
  );
120
120
  }
@@ -130,7 +130,7 @@ export class JsiSkCanvas
130
130
  JsiSkImage.fromValue(img),
131
131
  Array.from(JsiSkRect.fromValue(this.CanvasKit, center)),
132
132
  JsiSkRect.fromValue(this.CanvasKit, dest),
133
- ckEnum(filter),
133
+ getEnum(this.CanvasKit.FilterMode, filter),
134
134
  paint ? JsiSkPaint.fromValue(paint) : paint
135
135
  );
136
136
  }
@@ -165,8 +165,8 @@ export class JsiSkCanvas
165
165
  JsiSkImage.fromValue(img),
166
166
  JsiSkRect.fromValue(this.CanvasKit, src),
167
167
  JsiSkRect.fromValue(this.CanvasKit, dest),
168
- ckEnum(fm),
169
- ckEnum(mm),
168
+ getEnum(this.CanvasKit.FilterMode, fm),
169
+ getEnum(this.CanvasKit.MipmapMode, mm),
170
170
  paint ? JsiSkPaint.fromValue(paint) : paint
171
171
  );
172
172
  }
@@ -186,7 +186,7 @@ export class JsiSkCanvas
186
186
  drawVertices(verts: SkVertices, mode: BlendMode, paint: SkPaint) {
187
187
  this.ref.drawVertices(
188
188
  JsiSkVertices.fromValue(verts),
189
- ckEnum(mode),
189
+ getEnum(this.CanvasKit.BlendMode, mode),
190
190
  JsiSkPaint.fromValue(paint)
191
191
  );
192
192
  }
@@ -202,7 +202,7 @@ export class JsiSkCanvas
202
202
  cubics.map(({ x, y }) => [x, y]).flat(),
203
203
  colors,
204
204
  texs ? texs.flatMap((p) => Array.from(JsiSkPoint.fromValue(p))) : texs,
205
- mode ? ckEnum(mode) : null,
205
+ mode ? getEnum(this.CanvasKit.BlendMode, mode) : null,
206
206
  paint ? JsiSkPaint.fromValue(paint) : undefined
207
207
  );
208
208
  }
@@ -213,7 +213,7 @@ export class JsiSkCanvas
213
213
 
214
214
  drawPoints(mode: PointMode, points: SkPoint[], paint: SkPaint) {
215
215
  this.ref.drawPoints(
216
- ckEnum(mode),
216
+ getEnum(this.CanvasKit.PointMode, mode),
217
217
  points.map(({ x, y }) => [x, y]).flat(),
218
218
  JsiSkPaint.fromValue(paint)
219
219
  );
@@ -341,7 +341,10 @@ export class JsiSkCanvas
341
341
  }
342
342
 
343
343
  drawColor(color: SkColor, blendMode?: BlendMode) {
344
- this.ref.drawColor(color, blendMode ? ckEnum(blendMode) : undefined);
344
+ this.ref.drawColor(
345
+ color,
346
+ blendMode ? getEnum(this.CanvasKit.BlendMode, blendMode) : undefined
347
+ );
345
348
  }
346
349
 
347
350
  clear(color: SkColor) {
@@ -349,13 +352,17 @@ export class JsiSkCanvas
349
352
  }
350
353
 
351
354
  clipPath(path: SkPath, op: ClipOp, doAntiAlias: boolean) {
352
- this.ref.clipPath(JsiSkPath.fromValue(path), ckEnum(op), doAntiAlias);
355
+ this.ref.clipPath(
356
+ JsiSkPath.fromValue(path),
357
+ getEnum(this.CanvasKit.PathOp, op),
358
+ doAntiAlias
359
+ );
353
360
  }
354
361
 
355
362
  clipRect(rect: SkRect, op: ClipOp, doAntiAlias: boolean) {
356
363
  this.ref.clipRect(
357
364
  JsiSkRect.fromValue(this.CanvasKit, rect),
358
- ckEnum(op),
365
+ getEnum(this.CanvasKit.PathOp, op),
359
366
  doAntiAlias
360
367
  );
361
368
  }
@@ -363,7 +370,7 @@ export class JsiSkCanvas
363
370
  clipRRect(rrect: SkRRect, op: ClipOp, doAntiAlias: boolean) {
364
371
  this.ref.clipRRect(
365
372
  JsiSkRRect.fromValue(this.CanvasKit, rrect),
366
- ckEnum(op),
373
+ getEnum(this.CanvasKit.PathOp, op),
367
374
  doAntiAlias
368
375
  );
369
376
  }
@@ -381,8 +388,8 @@ export class JsiSkCanvas
381
388
  width: imageInfo.width,
382
389
  height: imageInfo.height,
383
390
  colorSpace: this.CanvasKit.ColorSpace.SRGB,
384
- alphaType: getCkEnum(this.CanvasKit.AlphaType, imageInfo.alphaType),
385
- colorType: getCkEnum(this.CanvasKit.ColorType, imageInfo.colorType),
391
+ alphaType: getEnum(this.CanvasKit.AlphaType, imageInfo.alphaType),
392
+ colorType: getEnum(this.CanvasKit.ColorType, imageInfo.colorType),
386
393
  };
387
394
  return this.ref.readPixels(srcX, srcY, pxInfo);
388
395
  }
@@ -8,7 +8,7 @@ import type {
8
8
  BlendMode,
9
9
  } from "../types";
10
10
 
11
- import { ckEnum, Host } from "./Host";
11
+ import { getEnum, Host } from "./Host";
12
12
  import { JsiSkColorFilter } from "./JsiSkColorFilter";
13
13
 
14
14
  export class JsiSkColorFilterFactory
@@ -29,7 +29,10 @@ export class JsiSkColorFilterFactory
29
29
  MakeBlend(color: SkColor, mode: BlendMode) {
30
30
  return new JsiSkColorFilter(
31
31
  this.CanvasKit,
32
- this.CanvasKit.ColorFilter.MakeBlend(color, ckEnum(mode))
32
+ this.CanvasKit.ColorFilter.MakeBlend(
33
+ color,
34
+ getEnum(this.CanvasKit.BlendMode, mode)
35
+ )
33
36
  );
34
37
  }
35
38
 
@@ -10,7 +10,7 @@ import type {
10
10
  SkTypeface,
11
11
  } from "../types";
12
12
 
13
- import { HostObject, NotImplementedOnRNWeb, ckEnum } from "./Host";
13
+ import { HostObject, NotImplementedOnRNWeb, getEnum } from "./Host";
14
14
  import { JsiSkPaint } from "./JsiSkPaint";
15
15
  import { JsiSkPoint } from "./JsiSkPoint";
16
16
  import { JsiSkRect } from "./JsiSkRect";
@@ -100,7 +100,7 @@ export class JsiSkFont extends HostObject<Font, "Font"> implements SkFont {
100
100
  }
101
101
 
102
102
  setEdging(edging: FontEdging) {
103
- this.ref.setEdging(ckEnum(edging));
103
+ this.ref.setEdging(getEnum(this.CanvasKit.FontEdging, edging));
104
104
  }
105
105
 
106
106
  setEmbeddedBitmaps(embeddedBitmaps: boolean) {
@@ -108,7 +108,7 @@ export class JsiSkFont extends HostObject<Font, "Font"> implements SkFont {
108
108
  }
109
109
 
110
110
  setHinting(hinting: FontHinting) {
111
- this.ref.setHinting(ckEnum(hinting));
111
+ this.ref.setHinting(getEnum(this.CanvasKit.FontHinting, hinting));
112
112
  }
113
113
 
114
114
  setLinearMetrics(linearMetrics: boolean) {
@@ -15,7 +15,7 @@ import type {
15
15
  ImageInfo,
16
16
  } from "../types";
17
17
 
18
- import { ckEnum, getCkEnum, HostObject } from "./Host";
18
+ import { getEnum, HostObject } from "./Host";
19
19
  import { JsiSkMatrix } from "./JsiSkMatrix";
20
20
  import { JsiSkShader } from "./JsiSkShader";
21
21
 
@@ -77,10 +77,10 @@ export class JsiSkImage extends HostObject<Image, "Image"> implements SkImage {
77
77
  return new JsiSkShader(
78
78
  this.CanvasKit,
79
79
  this.ref.makeShaderOptions(
80
- ckEnum(tx),
81
- ckEnum(ty),
82
- ckEnum(fm),
83
- ckEnum(mm),
80
+ getEnum(this.CanvasKit.TileMode, tx),
81
+ getEnum(this.CanvasKit.TileMode, ty),
82
+ getEnum(this.CanvasKit.FilterMode, fm),
83
+ getEnum(this.CanvasKit.MipmapMode, mm),
84
84
  localMatrix ? JsiSkMatrix.fromValue(localMatrix) : undefined
85
85
  )
86
86
  );
@@ -96,8 +96,8 @@ export class JsiSkImage extends HostObject<Image, "Image"> implements SkImage {
96
96
  return new JsiSkShader(
97
97
  this.CanvasKit,
98
98
  this.ref.makeShaderCubic(
99
- ckEnum(tx),
100
- ckEnum(ty),
99
+ getEnum(this.CanvasKit.TileMode, tx),
100
+ getEnum(this.CanvasKit.TileMode, ty),
101
101
  B,
102
102
  C,
103
103
  localMatrix ? JsiSkMatrix.fromValue(localMatrix) : undefined
@@ -108,9 +108,12 @@ export class JsiSkImage extends HostObject<Image, "Image"> implements SkImage {
108
108
  encodeToBytes(fmt?: ImageFormat, quality?: number) {
109
109
  let result: Uint8Array | null;
110
110
  if (fmt && quality) {
111
- result = this.ref.encodeToBytes(ckEnum(fmt), quality);
111
+ result = this.ref.encodeToBytes(
112
+ getEnum(this.CanvasKit.ImageFormat, fmt),
113
+ quality
114
+ );
112
115
  } else if (fmt) {
113
- result = this.ref.encodeToBytes(ckEnum(fmt));
116
+ result = this.ref.encodeToBytes(getEnum(this.CanvasKit.ImageFormat, fmt));
114
117
  } else {
115
118
  result = this.ref.encodeToBytes();
116
119
  }
@@ -131,11 +134,11 @@ export class JsiSkImage extends HostObject<Image, "Image"> implements SkImage {
131
134
  colorSpace: this.CanvasKit.ColorSpace.SRGB,
132
135
  width: imageInfo?.width ?? info.width,
133
136
  height: imageInfo?.height ?? info.height,
134
- alphaType: getCkEnum(
137
+ alphaType: getEnum(
135
138
  this.CanvasKit.AlphaType,
136
139
  (imageInfo ?? info).alphaType
137
140
  ),
138
- colorType: getCkEnum(
141
+ colorType: getEnum(
139
142
  this.CanvasKit.ColorType,
140
143
  (imageInfo ?? info).colorType
141
144
  ),
@@ -3,7 +3,7 @@ import type { CanvasKit } from "canvaskit-wasm";
3
3
  import type { SkData, ImageInfo, SkImage } from "../types";
4
4
  import type { ImageFactory } from "../types/Image/ImageFactory";
5
5
 
6
- import { Host, ckEnum } from "./Host";
6
+ import { Host, getEnum } from "./Host";
7
7
  import { JsiSkImage } from "./JsiSkImage";
8
8
  import { JsiSkData } from "./JsiSkData";
9
9
 
@@ -33,9 +33,9 @@ export class JsiSkImageFactory extends Host implements ImageFactory {
33
33
  // see toSkImageInfo() from canvaskit
34
34
  const image = this.CanvasKit.MakeImage(
35
35
  {
36
- alphaType: ckEnum(info.alphaType),
36
+ alphaType: getEnum(this.CanvasKit.AlphaType, info.alphaType),
37
37
  colorSpace: this.CanvasKit.ColorSpace.SRGB,
38
- colorType: ckEnum(info.colorType),
38
+ colorType: getEnum(this.CanvasKit.ColorType, info.colorType),
39
39
  height: info.height,
40
40
  width: info.width,
41
41
  },
@@ -13,7 +13,7 @@ import type {
13
13
  TileMode,
14
14
  } from "../types";
15
15
 
16
- import { Host, NotImplementedOnRNWeb, ckEnum } from "./Host";
16
+ import { Host, NotImplementedOnRNWeb, getEnum } from "./Host";
17
17
  import { JsiSkImageFilter } from "./JsiSkImageFilter";
18
18
  import { JsiSkColorFilter } from "./JsiSkColorFilter";
19
19
 
@@ -42,8 +42,8 @@ export class JsiSkImageFilterFactory
42
42
  const inputFilter =
43
43
  input === null ? null : JsiSkImageFilter.fromValue<ImageFilter>(input);
44
44
  const filter = this.CanvasKit.ImageFilter.MakeDisplacementMap(
45
- ckEnum(channelX),
46
- ckEnum(channelY),
45
+ getEnum(this.CanvasKit.ColorChannel, channelX),
46
+ getEnum(this.CanvasKit.ColorChannel, channelY),
47
47
  scale,
48
48
  JsiSkImageFilter.fromValue(in1),
49
49
  inputFilter
@@ -69,7 +69,7 @@ export class JsiSkImageFilterFactory
69
69
  this.CanvasKit.ImageFilter.MakeBlur(
70
70
  sigmaX,
71
71
  sigmaY,
72
- ckEnum(mode),
72
+ getEnum(this.CanvasKit.TileMode, mode),
73
73
  input === null ? null : JsiSkImageFilter.fromValue(input)
74
74
  )
75
75
  );
@@ -199,7 +199,7 @@ export class JsiSkImageFilterFactory
199
199
  );
200
200
  }
201
201
  const filter = this.CanvasKit.ImageFilter.MakeBlend(
202
- ckEnum(mode),
202
+ getEnum(this.CanvasKit.BlendMode, mode),
203
203
  JsiSkImageFilter.fromValue(background),
204
204
  inputFilter
205
205
  );
@@ -3,7 +3,7 @@ import type { CanvasKit } from "canvaskit-wasm";
3
3
  import type { BlurStyle } from "../types";
4
4
  import type { MaskFilterFactory } from "../types/MaskFilter";
5
5
 
6
- import { Host, ckEnum } from "./Host";
6
+ import { Host, getEnum } from "./Host";
7
7
  import { JsiSkMaskFilter } from "./JsiSkMaskFilter";
8
8
 
9
9
  export class JsiSkMaskFilterFactory extends Host implements MaskFilterFactory {
@@ -14,7 +14,11 @@ export class JsiSkMaskFilterFactory extends Host implements MaskFilterFactory {
14
14
  MakeBlur(style: BlurStyle, sigma: number, respectCTM: boolean) {
15
15
  return new JsiSkMaskFilter(
16
16
  this.CanvasKit,
17
- this.CanvasKit.MaskFilter.MakeBlur(ckEnum(style), sigma, respectCTM)
17
+ this.CanvasKit.MaskFilter.MakeBlur(
18
+ getEnum(this.CanvasKit.BlurStyle, style),
19
+ sigma,
20
+ respectCTM
21
+ )
18
22
  );
19
23
  }
20
24
  }