@shopify/react-native-skia 0.1.219 → 0.1.221

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. package/cpp/api/JsiSkCanvas.h +38 -1
  2. package/cpp/api/JsiSkImage.h +66 -1
  3. package/cpp/api/JsiSkImageInfo.h +19 -0
  4. package/cpp/utils/RNSkTypedArray.h +41 -0
  5. package/jestEnv.mjs +23 -0
  6. package/jestSetup.mjs +22 -0
  7. package/lib/commonjs/skia/types/Canvas.d.ts +9 -1
  8. package/lib/commonjs/skia/types/Canvas.js.map +1 -1
  9. package/lib/commonjs/skia/types/Image/Image.d.ts +13 -0
  10. package/lib/commonjs/skia/types/Image/Image.js.map +1 -1
  11. package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +14 -11
  12. package/lib/commonjs/skia/types/Image/ImageFactory.js +14 -11
  13. package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
  14. package/lib/commonjs/skia/web/Host.d.ts +2 -1
  15. package/lib/commonjs/skia/web/Host.js +10 -1
  16. package/lib/commonjs/skia/web/Host.js.map +1 -1
  17. package/lib/commonjs/skia/web/JsiSkCanvas.d.ts +2 -1
  18. package/lib/commonjs/skia/web/JsiSkCanvas.js +11 -0
  19. package/lib/commonjs/skia/web/JsiSkCanvas.js.map +1 -1
  20. package/lib/commonjs/skia/web/JsiSkFontMgrFactory.js +1 -3
  21. package/lib/commonjs/skia/web/JsiSkFontMgrFactory.js.map +1 -1
  22. package/lib/commonjs/skia/web/JsiSkImage.d.ts +3 -1
  23. package/lib/commonjs/skia/web/JsiSkImage.js +28 -0
  24. package/lib/commonjs/skia/web/JsiSkImage.js.map +1 -1
  25. package/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.d.ts +2 -2
  26. package/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.js +0 -4
  27. package/lib/commonjs/skia/web/JsiSkTypefaceFontProvider.js.map +1 -1
  28. package/lib/module/skia/types/Canvas.d.ts +9 -1
  29. package/lib/module/skia/types/Canvas.js.map +1 -1
  30. package/lib/module/skia/types/Image/Image.d.ts +13 -0
  31. package/lib/module/skia/types/Image/Image.js.map +1 -1
  32. package/lib/module/skia/types/Image/ImageFactory.d.ts +14 -11
  33. package/lib/module/skia/types/Image/ImageFactory.js +14 -11
  34. package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
  35. package/lib/module/skia/web/Host.d.ts +2 -1
  36. package/lib/module/skia/web/Host.js +6 -0
  37. package/lib/module/skia/web/Host.js.map +1 -1
  38. package/lib/module/skia/web/JsiSkCanvas.d.ts +2 -1
  39. package/lib/module/skia/web/JsiSkCanvas.js +12 -1
  40. package/lib/module/skia/web/JsiSkCanvas.js.map +1 -1
  41. package/lib/module/skia/web/JsiSkFontMgrFactory.js +1 -3
  42. package/lib/module/skia/web/JsiSkFontMgrFactory.js.map +1 -1
  43. package/lib/module/skia/web/JsiSkImage.d.ts +3 -1
  44. package/lib/module/skia/web/JsiSkImage.js +31 -1
  45. package/lib/module/skia/web/JsiSkImage.js.map +1 -1
  46. package/lib/module/skia/web/JsiSkTypefaceFontProvider.d.ts +2 -2
  47. package/lib/module/skia/web/JsiSkTypefaceFontProvider.js +0 -4
  48. package/lib/module/skia/web/JsiSkTypefaceFontProvider.js.map +1 -1
  49. package/lib/typescript/src/skia/types/Canvas.d.ts +9 -1
  50. package/lib/typescript/src/skia/types/Image/Image.d.ts +13 -0
  51. package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +14 -11
  52. package/lib/typescript/src/skia/web/Host.d.ts +2 -1
  53. package/lib/typescript/src/skia/web/JsiSkCanvas.d.ts +2 -1
  54. package/lib/typescript/src/skia/web/JsiSkImage.d.ts +3 -1
  55. package/lib/typescript/src/skia/web/JsiSkTypefaceFontProvider.d.ts +2 -2
  56. package/package.json +5 -4
  57. package/src/skia/types/Canvas.ts +14 -1
  58. package/src/skia/types/Image/Image.ts +20 -0
  59. package/src/skia/types/Image/ImageFactory.ts +30 -25
  60. package/src/skia/web/Host.ts +3 -1
  61. package/src/skia/web/JsiSkCanvas.ts +13 -1
  62. package/src/skia/web/JsiSkFontMgrFactory.ts +0 -2
  63. package/src/skia/web/JsiSkImage.ts +42 -3
  64. package/src/skia/web/JsiSkTypefaceFontProvider.ts +0 -4
@@ -10,36 +10,41 @@ export enum AlphaType {
10
10
  }
11
11
 
12
12
  export enum ColorType {
13
- Unknown, //!< uninitialized
14
- Alpha_8, //!< pixel with alpha in 8-bit byte
15
- RGB_565, //!< pixel with 5 bits red, 6 bits green, 5 bits blue, in 16-bit word
16
- ARGB_4444, //!< pixel with 4 bits for alpha, red, green, blue; in 16-bit word
17
- RGBA_8888, //!< pixel with 8 bits for red, green, blue, alpha; in 32-bit word
18
- RGB_888x, //!< pixel with 8 bits each for red, green, blue; in 32-bit word
19
- BGRA_8888, //!< pixel with 8 bits for blue, green, red, alpha; in 32-bit word
20
- RGBA_1010102, //!< 10 bits for red, green, blue; 2 bits for alpha; in 32-bit word
21
- BGRA_1010102, //!< 10 bits for blue, green, red; 2 bits for alpha; in 32-bit word
22
- RGB_101010x, //!< pixel with 10 bits each for red, green, blue; in 32-bit word
23
- BGR_101010x, //!< pixel with 10 bits each for blue, green, red; in 32-bit word
24
- BGR_101010x_XR, //!< pixel with 10 bits each for blue, green, red; in 32-bit word, extended range
25
- Gray_8, //!< pixel with grayscale level in 8-bit byte
26
- RGBA_F16Norm, //!< pixel with half floats in [0,1] for red, green, blue, alpha;
27
- // in 64-bit word
28
- RGBA_F16, //!< pixel with half floats for red, green, blue, alpha;
29
- // in 64-bit word
30
- RGBA_F32, //!< pixel using C float for red, green, blue, alpha; in 128-bit word
13
+ Unknown, // uninitialized
14
+ Alpha_8, // pixel with alpha in 8-bit byte
15
+ RGB_565, // pixel with 5 bits red, 6 bits green, 5 bits blue, in 16-bit word
16
+ ARGB_4444, // pixel with 4 bits for alpha, red, green, blue; in 16-bit word
17
+ RGBA_8888, // pixel with 8 bits for red, green, blue, alpha; in 32-bit word
18
+ RGB_888x, // pixel with 8 bits each for red, green, blue; in 32-bit word
19
+ BGRA_8888, // pixel with 8 bits for blue, green, red, alpha; in 32-bit word
20
+ RGBA_1010102, // 10 bits for red, green, blue; 2 bits for alpha; in 32-bit word
21
+ BGRA_1010102, // 10 bits for blue, green, red; 2 bits for alpha; in 32-bit word
22
+ RGB_101010x, // pixel with 10 bits each for red, green, blue; in 32-bit word
23
+ BGR_101010x, // pixel with 10 bits each for blue, green, red; in 32-bit word
24
+ BGR_101010x_XR, // pixel with 10 bits each for blue, green, red; in 32-bit word, extended range
25
+ RGBA_10x6, // pixel with 10 used bits (most significant) followed by 6 unused
26
+ Gray_8, // pixel with grayscale level in 8-bit byte
27
+ RGBA_F16Norm, // pixel with half floats in [0,1] for red, green, blue, alpha; in 64-bit word
28
+ RGBA_F16, // pixel with half floats for red, green, blue, alpha; in 64-bit word
29
+ RGBA_F32, // pixel using C float for red, green, blue, alpha; in 128-bit word
31
30
 
32
31
  // The following 6 colortypes are just for reading from - not for rendering to
33
- R8G8_unorm, //!< pixel with a uint8_t for red and green
32
+ R8G8_unorm, // pixel with a uint8_t for red and green
34
33
 
35
- A16_float, //!< pixel with a half float for alpha
36
- R16G16_float, //!< pixel with a half float for red and green
34
+ A16_float, // pixel with a half float for alpha
35
+ R16G16_float, // pixel with a half float for red and green
36
+
37
+ A16_unorm, // pixel with a little endian uint16_t for alpha
38
+ R16G16_unorm, // pixel with a little endian uint16_t for red and green
39
+ R16G16B16A16_unorm, // pixel with a little endian uint16_t for red, green, blue, and alpha
37
40
 
38
- A16_unorm, //!< pixel with a little endian uint16_t for alpha
39
- R16G16_unorm, //!< pixel with a little endian uint16_t for red and green
40
- R16G16B16A16_unorm, //!< pixel with a little endian uint16_t for red, green, blue
41
- // and alpha
42
41
  SRGBA_8888,
42
+ R8_unorm,
43
+
44
+ // The `kN32_SkColorType` is platform dependent in the original enum,
45
+ // and TypeScript doesn't support conditional compilation natively.
46
+ // You might need to handle it differently based on your use case.
47
+ N32_SkColorType, // either BGRA_8888 or RGBA_8888 based on the platform
43
48
  }
44
49
 
45
50
  export interface ImageInfo {
@@ -1,4 +1,4 @@
1
- import type { CanvasKit, EmbindEnumEntity } from "canvaskit-wasm";
1
+ import type { CanvasKit, EmbindEnumEntity, EmbindEnum } from "canvaskit-wasm";
2
2
 
3
3
  import type { SkJSIInstance } from "../types";
4
4
 
@@ -41,6 +41,8 @@ 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 =>
45
+ Object.values(e).find(({ value }) => value === v);
44
46
  export const ckEnum = (value: number): EmbindEnumEntity => ({ value });
45
47
  export const optEnum = (
46
48
  value: number | undefined
@@ -7,6 +7,7 @@ import type {
7
7
  MipmapMode,
8
8
  PointMode,
9
9
  SaveLayerFlag,
10
+ ImageInfo,
10
11
  SkCanvas,
11
12
  SkColor,
12
13
  SkFont,
@@ -24,7 +25,7 @@ import type {
24
25
  SkVertices,
25
26
  } from "../types";
26
27
 
27
- import { ckEnum, HostObject } from "./Host";
28
+ import { ckEnum, getCkEnum, HostObject } from "./Host";
28
29
  import { JsiSkPaint } from "./JsiSkPaint";
29
30
  import { JsiSkRect } from "./JsiSkRect";
30
31
  import { JsiSkRRect } from "./JsiSkRRect";
@@ -374,4 +375,15 @@ export class JsiSkCanvas
374
375
  drawPicture(skp: SkPicture) {
375
376
  this.ref.drawPicture(JsiSkPicture.fromValue(skp));
376
377
  }
378
+
379
+ readPixels(srcX: number, srcY: number, imageInfo: ImageInfo) {
380
+ const pxInfo = {
381
+ width: imageInfo.width,
382
+ height: imageInfo.height,
383
+ colorSpace: this.CanvasKit.ColorSpace.SRGB,
384
+ alphaType: getCkEnum(this.CanvasKit.AlphaType, imageInfo.alphaType),
385
+ colorType: getCkEnum(this.CanvasKit.ColorType, imageInfo.colorType),
386
+ };
387
+ return this.ref.readPixels(srcX, srcY, pxInfo);
388
+ }
377
389
  }
@@ -15,8 +15,6 @@ export class JsiSkFontMgrFactory extends Host implements FontMgrFactory {
15
15
  if (!fontMgr) {
16
16
  throw new Error("Couldn't create system font manager");
17
17
  }
18
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
19
- // @ts-expect-error
20
18
  return new JsiSkFontMgr(this.CanvasKit, fontMgr);
21
19
  }
22
20
  }
@@ -1,16 +1,21 @@
1
- import type { CanvasKit, Image } from "canvaskit-wasm";
1
+ import type {
2
+ CanvasKit,
3
+ ImageInfo as CKImageInfo,
4
+ Image,
5
+ } from "canvaskit-wasm";
2
6
 
3
7
  import type {
4
- ImageFormat,
5
8
  FilterMode,
6
9
  MipmapMode,
7
10
  SkImage,
8
11
  SkMatrix,
9
12
  SkShader,
10
13
  TileMode,
14
+ ImageFormat,
15
+ ImageInfo,
11
16
  } from "../types";
12
17
 
13
- import { ckEnum, HostObject } from "./Host";
18
+ import { ckEnum, getCkEnum, HostObject } from "./Host";
14
19
  import { JsiSkMatrix } from "./JsiSkMatrix";
15
20
  import { JsiSkShader } from "./JsiSkShader";
16
21
 
@@ -52,6 +57,16 @@ export class JsiSkImage extends HostObject<Image, "Image"> implements SkImage {
52
57
  return this.ref.width();
53
58
  }
54
59
 
60
+ getImageInfo(): ImageInfo {
61
+ const info = this.ref.getImageInfo();
62
+ return {
63
+ width: info.width,
64
+ height: info.height,
65
+ colorType: info.colorType.value,
66
+ alphaType: info.alphaType.value,
67
+ };
68
+ }
69
+
55
70
  makeShaderOptions(
56
71
  tx: TileMode,
57
72
  ty: TileMode,
@@ -110,6 +125,30 @@ export class JsiSkImage extends HostObject<Image, "Image"> implements SkImage {
110
125
  return toBase64String(bytes);
111
126
  }
112
127
 
128
+ readPixels(srcX?: number, srcY?: number, imageInfo?: ImageInfo) {
129
+ const info = this.getImageInfo();
130
+ console.log({
131
+ alphaType: ckEnum(info.alphaType),
132
+ colorType: ckEnum(info.colorType),
133
+ realAlphaType: this.CanvasKit.AlphaType.Opaque.value,
134
+ realColorType: this.CanvasKit.ColorType.RGBA_8888.value,
135
+ });
136
+ const pxInfo: CKImageInfo = {
137
+ colorSpace: this.CanvasKit.ColorSpace.SRGB,
138
+ width: imageInfo?.width ?? info.width,
139
+ height: imageInfo?.height ?? info.height,
140
+ alphaType: getCkEnum(
141
+ this.CanvasKit.AlphaType,
142
+ (imageInfo ?? info).alphaType
143
+ ),
144
+ colorType: getCkEnum(
145
+ this.CanvasKit.ColorType,
146
+ (imageInfo ?? info).colorType
147
+ ),
148
+ };
149
+ return this.ref.readPixels(srcX ?? 0, srcY ?? 0, pxInfo);
150
+ }
151
+
113
152
  dispose = () => {
114
153
  this.ref.delete();
115
154
  };
@@ -19,13 +19,9 @@ export class JsiSkTypefaceFontProvider
19
19
  throw new NotImplementedOnRNWeb();
20
20
  }
21
21
  countFamilies() {
22
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
23
- // @ts-expect-error
24
22
  return this.ref.countFamilies();
25
23
  }
26
24
  getFamilyName(index: number) {
27
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
28
- // @ts-expect-error
29
25
  return this.ref.getFamilyName(index);
30
26
  }
31
27
  registerFont(typeface: SkTypeface, familyName: string) {