@shopify/react-native-skia 2.2.19 → 2.2.20

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 (38) hide show
  1. package/android/CMakeLists.txt +2 -0
  2. package/apple/SkiaCVPixelBufferUtils.mm +8 -4
  3. package/cpp/api/JsiSkCanvas.h +22 -0
  4. package/cpp/api/JsiSkDispatcher.cpp +9 -0
  5. package/cpp/api/JsiSkDispatcher.h +149 -0
  6. package/cpp/api/JsiSkImage.h +27 -9
  7. package/cpp/api/JsiSkPicture.h +22 -1
  8. package/cpp/api/JsiSkSurface.h +15 -10
  9. package/cpp/api/recorder/Drawings.h +43 -9
  10. package/cpp/api/recorder/JsiRecorder.h +3 -1
  11. package/cpp/api/recorder/RNRecorder.h +10 -4
  12. package/lib/commonjs/external/reanimated/textures.js +31 -28
  13. package/lib/commonjs/external/reanimated/textures.js.map +1 -1
  14. package/lib/commonjs/renderer/Offscreen.js +1 -7
  15. package/lib/commonjs/renderer/Offscreen.js.map +1 -1
  16. package/lib/commonjs/skia/core/SVG.web.js +9 -2
  17. package/lib/commonjs/skia/core/SVG.web.js.map +1 -1
  18. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  19. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js +4 -0
  20. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
  21. package/lib/module/external/reanimated/textures.js +33 -30
  22. package/lib/module/external/reanimated/textures.js.map +1 -1
  23. package/lib/module/renderer/Offscreen.js +1 -8
  24. package/lib/module/renderer/Offscreen.js.map +1 -1
  25. package/lib/module/skia/core/SVG.web.js +9 -2
  26. package/lib/module/skia/core/SVG.web.js.map +1 -1
  27. package/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  28. package/lib/module/sksg/Recorder/ReanimatedRecorder.js +5 -0
  29. package/lib/module/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
  30. package/lib/typescript/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  31. package/lib/typescript/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  32. package/lib/typescript/src/sksg/Recorder/ReanimatedRecorder.d.ts +4 -0
  33. package/package.json +6 -1
  34. package/src/external/reanimated/textures.tsx +36 -27
  35. package/src/renderer/Offscreen.tsx +1 -7
  36. package/src/skia/core/SVG.web.ts +12 -8
  37. package/src/sksg/Recorder/ReanimatedRecorder.ts +4 -0
  38. package/cpp/api/JsiSkThreadSafeDeletion.h +0 -105
@@ -7,12 +7,36 @@ exports.useTexture = exports.usePictureAsTexture = exports.useImageAsTexture = v
7
7
  var _react = require("react");
8
8
  var _Offscreen = require("../../renderer/Offscreen");
9
9
  var _skia = require("../../skia");
10
+ var _Platform = require("../../Platform");
10
11
  var _ReanimatedProxy = _interopRequireDefault(require("./ReanimatedProxy"));
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ const createTextureFromImage = (texture, image) => {
14
+ "worklet";
15
+
16
+ const surface = _skia.Skia.Surface.MakeOffscreen(image.width(), image.height());
17
+ if (!surface) {
18
+ texture.value = null;
19
+ return;
20
+ }
21
+ const canvas = surface.getCanvas();
22
+ canvas.drawImage(image, 0, 0);
23
+ surface.flush();
24
+ texture.value = surface.makeImageSnapshot();
25
+ if (_Platform.Platform.OS === "web") {
26
+ texture.value = texture.value.makeNonTextureImage();
27
+ }
28
+ };
12
29
  const createTexture = (texture, picture, size) => {
13
30
  "worklet";
14
31
 
15
- texture.value = (0, _Offscreen.drawAsImageFromPicture)(picture, size);
32
+ const surface = _skia.Skia.Surface.MakeOffscreen(size.width, size.height);
33
+ const canvas = surface.getCanvas();
34
+ canvas.drawPicture(picture);
35
+ surface.flush();
36
+ texture.value = surface.makeImageSnapshot();
37
+ if (_Platform.Platform.OS === "web") {
38
+ texture.value = texture.value.makeNonTextureImage();
39
+ }
16
40
  };
17
41
  const useTexture = (element, size, deps) => {
18
42
  const {
@@ -46,34 +70,13 @@ const usePictureAsTexture = (picture, size) => {
46
70
  exports.usePictureAsTexture = usePictureAsTexture;
47
71
  const useImageAsTexture = source => {
48
72
  const image = (0, _skia.useImage)(source);
49
- const size = (0, _react.useMemo)(() => {
50
- if (image) {
51
- return {
52
- width: image.width(),
53
- height: image.height()
54
- };
55
- }
56
- return {
57
- width: 0,
58
- height: 0
59
- };
60
- }, [image]);
61
- const picture = (0, _react.useMemo)(() => {
62
- if (image) {
63
- const recorder = _skia.Skia.PictureRecorder();
64
- const canvas = recorder.beginRecording({
65
- x: 0,
66
- y: 0,
67
- width: size.width,
68
- height: size.height
69
- });
70
- canvas.drawImage(image, 0, 0);
71
- return recorder.finishRecordingAsPicture();
72
- } else {
73
- return null;
73
+ const texture = _ReanimatedProxy.default.useSharedValue(null);
74
+ (0, _react.useEffect)(() => {
75
+ if (image !== null) {
76
+ _ReanimatedProxy.default.runOnUI(createTextureFromImage)(texture, image);
74
77
  }
75
- }, [size, image]);
76
- return usePictureAsTexture(picture, size);
78
+ }, [image, texture]);
79
+ return texture;
77
80
  };
78
81
  exports.useImageAsTexture = useImageAsTexture;
79
82
  //# sourceMappingURL=textures.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_Offscreen","_skia","_ReanimatedProxy","_interopRequireDefault","e","__esModule","default","createTexture","texture","picture","size","value","drawAsImageFromPicture","useTexture","element","deps","width","height","setPicture","useState","useEffect","drawAsPicture","x","y","then","pic","usePictureAsTexture","exports","Rea","useSharedValue","runOnUI","useImageAsTexture","source","image","useImage","useMemo","recorder","Skia","PictureRecorder","canvas","beginRecording","drawImage","finishRecordingAsPicture"],"sources":["textures.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport type { DependencyList, ReactElement } from \"react\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n DataSourceParam,\n SkImage,\n SkPicture,\n SkSize,\n} from \"../../skia/types\";\nimport {\n drawAsImageFromPicture,\n drawAsPicture,\n} from \"../../renderer/Offscreen\";\nimport { Skia, useImage } from \"../../skia\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst createTexture = (\n texture: SharedValue<SkImage | null>,\n picture: SkPicture,\n size: SkSize\n) => {\n \"worklet\";\n texture.value = drawAsImageFromPicture(picture, size);\n};\n\nexport const useTexture = (\n element: ReactElement,\n size: SkSize,\n deps?: DependencyList\n) => {\n const { width, height } = size;\n const [picture, setPicture] = useState<SkPicture | null>(null);\n useEffect(() => {\n drawAsPicture(element, {\n x: 0,\n y: 0,\n width,\n height,\n }).then((pic) => {\n setPicture(pic);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps ?? []);\n return usePictureAsTexture(picture, size);\n};\n\nexport const usePictureAsTexture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (picture !== null) {\n Rea.runOnUI(createTexture)(texture, picture, size);\n }\n }, [picture, size, texture]);\n return texture;\n};\n\nexport const useImageAsTexture = (source: DataSourceParam) => {\n const image = useImage(source);\n const size = useMemo(() => {\n if (image) {\n return { width: image.width(), height: image.height() };\n }\n return { width: 0, height: 0 };\n }, [image]);\n const picture = useMemo(() => {\n if (image) {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording({\n x: 0,\n y: 0,\n width: size.width,\n height: size.height,\n });\n canvas.drawImage(image, 0, 0);\n return recorder.finishRecordingAsPicture();\n } else {\n return null;\n }\n }, [size, image]);\n return usePictureAsTexture(picture, size);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_Offscreen","_skia","_Platform","_ReanimatedProxy","_interopRequireDefault","e","__esModule","default","createTextureFromImage","texture","image","surface","Skia","Surface","MakeOffscreen","width","height","value","canvas","getCanvas","drawImage","flush","makeImageSnapshot","Platform","OS","makeNonTextureImage","createTexture","picture","size","drawPicture","useTexture","element","deps","setPicture","useState","useEffect","drawAsPicture","x","y","then","pic","usePictureAsTexture","exports","Rea","useSharedValue","runOnUI","useImageAsTexture","source","useImage"],"sources":["textures.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { DependencyList, ReactElement } from \"react\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n DataSourceParam,\n SkImage,\n SkPicture,\n SkSize,\n} from \"../../skia/types\";\nimport { drawAsPicture } from \"../../renderer/Offscreen\";\nimport { Skia, useImage } from \"../../skia\";\nimport { Platform } from \"../../Platform\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst createTextureFromImage = (\n texture: SharedValue<SkImage | null>,\n image: SkImage\n) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(image.width(), image.height());\n if (!surface) {\n texture.value = null;\n return;\n }\n const canvas = surface.getCanvas();\n canvas.drawImage(image, 0, 0);\n surface.flush();\n texture.value = surface.makeImageSnapshot();\n if (Platform.OS === \"web\") {\n texture.value = texture.value.makeNonTextureImage();\n }\n};\n\nconst createTexture = (\n texture: SharedValue<SkImage | null>,\n picture: SkPicture,\n size: SkSize\n) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(size.width, size.height)!;\n const canvas = surface.getCanvas();\n canvas.drawPicture(picture);\n surface.flush();\n texture.value = surface.makeImageSnapshot();\n if (Platform.OS === \"web\") {\n texture.value = texture.value.makeNonTextureImage();\n }\n};\n\nexport const useTexture = (\n element: ReactElement,\n size: SkSize,\n deps?: DependencyList\n) => {\n const { width, height } = size;\n const [picture, setPicture] = useState<SkPicture | null>(null);\n useEffect(() => {\n drawAsPicture(element, {\n x: 0,\n y: 0,\n width,\n height,\n }).then((pic) => {\n setPicture(pic);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps ?? []);\n return usePictureAsTexture(picture, size);\n};\n\nexport const usePictureAsTexture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (picture !== null) {\n Rea.runOnUI(createTexture)(texture, picture, size);\n }\n }, [picture, size, texture]);\n return texture;\n};\n\nexport const useImageAsTexture = (source: DataSourceParam) => {\n const image = useImage(source);\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (image !== null) {\n Rea.runOnUI(createTextureFromImage)(texture, image);\n }\n }, [image, texture]);\n return texture;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -7,7 +7,6 @@ exports.isOnMainThread = exports.drawAsPicture = exports.drawAsImageFromPicture
7
7
  var _skia = require("../skia");
8
8
  var _Platform = require("../Platform");
9
9
  var _Reconciler = require("../sksg/Reconciler");
10
- // We call it main thread because on web main is JS thread
11
10
  const isOnMainThread = () => {
12
11
  "worklet";
13
12
 
@@ -37,12 +36,7 @@ const drawAsImageFromPicture = (picture, size) => {
37
36
  canvas.drawPicture(picture);
38
37
  surface.flush();
39
38
  const image = surface.makeImageSnapshot();
40
- // If we are not on the main thread or if we are on Web, we need to make the image non-texture.
41
- if (!isOnMainThread() || _Platform.Platform.OS === "web") {
42
- return image.makeNonTextureImage();
43
- } else {
44
- return image;
45
- }
39
+ return image.makeNonTextureImage();
46
40
  };
47
41
  exports.drawAsImageFromPicture = drawAsImageFromPicture;
48
42
  //# sourceMappingURL=Offscreen.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_skia","require","_Platform","_Reconciler","isOnMainThread","_WORKLET","Platform","OS","exports","drawAsPicture","element","bounds","recorder","Skia","PictureRecorder","canvas","beginRecording","root","SkiaSGRoot","render","drawOnCanvas","picture","finishRecordingAsPicture","unmount","drawAsImage","size","drawAsImageFromPicture","surface","Surface","MakeOffscreen","width","height","getCanvas","drawPicture","flush","image","makeImageSnapshot","makeNonTextureImage"],"sources":["Offscreen.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\n\nimport type { SkPicture, SkRect, SkSize } from \"../skia/types\";\nimport { Skia } from \"../skia\";\nimport { Platform } from \"../Platform\";\nimport { SkiaSGRoot } from \"../sksg/Reconciler\";\n\n// We call it main thread because on web main is JS thread\nexport const isOnMainThread = () => {\n \"worklet\";\n return (\n (typeof _WORKLET !== \"undefined\" && _WORKLET === true) ||\n Platform.OS === \"web\"\n );\n};\n\nexport const drawAsPicture = async (element: ReactElement, bounds?: SkRect) => {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording(bounds);\n const root = new SkiaSGRoot(Skia);\n await root.render(element);\n root.drawOnCanvas(canvas);\n const picture = recorder.finishRecordingAsPicture();\n root.unmount();\n return picture;\n};\n\nexport const drawAsImage = async (element: ReactElement, size: SkSize) => {\n return drawAsImageFromPicture(await drawAsPicture(element), size);\n};\n\nexport const drawAsImageFromPicture = (picture: SkPicture, size: SkSize) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(size.width, size.height)!;\n const canvas = surface.getCanvas();\n canvas.drawPicture(picture);\n surface.flush();\n const image = surface.makeImageSnapshot();\n // If we are not on the main thread or if we are on Web, we need to make the image non-texture.\n if (!isOnMainThread() || Platform.OS === \"web\") {\n return image.makeNonTextureImage();\n } else {\n return image;\n }\n};\n"],"mappings":";;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAEA;AACO,MAAMG,cAAc,GAAGA,CAAA,KAAM;EAClC,SAAS;;EACT,OACG,OAAOC,QAAQ,KAAK,WAAW,IAAIA,QAAQ,KAAK,IAAI,IACrDC,kBAAQ,CAACC,EAAE,KAAK,KAAK;AAEzB,CAAC;AAACC,OAAA,CAAAJ,cAAA,GAAAA,cAAA;AAEK,MAAMK,aAAa,GAAG,MAAAA,CAAOC,OAAqB,EAAEC,MAAe,KAAK;EAC7E,MAAMC,QAAQ,GAAGC,UAAI,CAACC,eAAe,CAAC,CAAC;EACvC,MAAMC,MAAM,GAAGH,QAAQ,CAACI,cAAc,CAACL,MAAM,CAAC;EAC9C,MAAMM,IAAI,GAAG,IAAIC,sBAAU,CAACL,UAAI,CAAC;EACjC,MAAMI,IAAI,CAACE,MAAM,CAACT,OAAO,CAAC;EAC1BO,IAAI,CAACG,YAAY,CAACL,MAAM,CAAC;EACzB,MAAMM,OAAO,GAAGT,QAAQ,CAACU,wBAAwB,CAAC,CAAC;EACnDL,IAAI,CAACM,OAAO,CAAC,CAAC;EACd,OAAOF,OAAO;AAChB,CAAC;AAACb,OAAA,CAAAC,aAAA,GAAAA,aAAA;AAEK,MAAMe,WAAW,GAAG,MAAAA,CAAOd,OAAqB,EAAEe,IAAY,KAAK;EACxE,OAAOC,sBAAsB,CAAC,MAAMjB,aAAa,CAACC,OAAO,CAAC,EAAEe,IAAI,CAAC;AACnE,CAAC;AAACjB,OAAA,CAAAgB,WAAA,GAAAA,WAAA;AAEK,MAAME,sBAAsB,GAAGA,CAACL,OAAkB,EAAEI,IAAY,KAAK;EAC1E,SAAS;;EACT,MAAME,OAAO,GAAGd,UAAI,CAACe,OAAO,CAACC,aAAa,CAACJ,IAAI,CAACK,KAAK,EAAEL,IAAI,CAACM,MAAM,CAAE;EACpE,MAAMhB,MAAM,GAAGY,OAAO,CAACK,SAAS,CAAC,CAAC;EAClCjB,MAAM,CAACkB,WAAW,CAACZ,OAAO,CAAC;EAC3BM,OAAO,CAACO,KAAK,CAAC,CAAC;EACf,MAAMC,KAAK,GAAGR,OAAO,CAACS,iBAAiB,CAAC,CAAC;EACzC;EACA,IAAI,CAAChC,cAAc,CAAC,CAAC,IAAIE,kBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IAC9C,OAAO4B,KAAK,CAACE,mBAAmB,CAAC,CAAC;EACpC,CAAC,MAAM;IACL,OAAOF,KAAK;EACd;AACF,CAAC;AAAC3B,OAAA,CAAAkB,sBAAA,GAAAA,sBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_skia","require","_Platform","_Reconciler","isOnMainThread","_WORKLET","Platform","OS","exports","drawAsPicture","element","bounds","recorder","Skia","PictureRecorder","canvas","beginRecording","root","SkiaSGRoot","render","drawOnCanvas","picture","finishRecordingAsPicture","unmount","drawAsImage","size","drawAsImageFromPicture","surface","Surface","MakeOffscreen","width","height","getCanvas","drawPicture","flush","image","makeImageSnapshot","makeNonTextureImage"],"sources":["Offscreen.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\n\nimport type { SkPicture, SkRect, SkSize } from \"../skia/types\";\nimport { Skia } from \"../skia\";\nimport { Platform } from \"../Platform\";\nimport { SkiaSGRoot } from \"../sksg/Reconciler\";\n\nexport const isOnMainThread = () => {\n \"worklet\";\n return (\n (typeof _WORKLET !== \"undefined\" && _WORKLET === true) ||\n Platform.OS === \"web\"\n );\n};\n\nexport const drawAsPicture = async (element: ReactElement, bounds?: SkRect) => {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording(bounds);\n const root = new SkiaSGRoot(Skia);\n await root.render(element);\n root.drawOnCanvas(canvas);\n const picture = recorder.finishRecordingAsPicture();\n root.unmount();\n return picture;\n};\n\nexport const drawAsImage = async (element: ReactElement, size: SkSize) => {\n return drawAsImageFromPicture(await drawAsPicture(element), size);\n};\n\nexport const drawAsImageFromPicture = (picture: SkPicture, size: SkSize) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(size.width, size.height)!;\n const canvas = surface.getCanvas();\n canvas.drawPicture(picture);\n surface.flush();\n const image = surface.makeImageSnapshot();\n return image.makeNonTextureImage();\n};\n"],"mappings":";;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAEO,MAAMG,cAAc,GAAGA,CAAA,KAAM;EAClC,SAAS;;EACT,OACG,OAAOC,QAAQ,KAAK,WAAW,IAAIA,QAAQ,KAAK,IAAI,IACrDC,kBAAQ,CAACC,EAAE,KAAK,KAAK;AAEzB,CAAC;AAACC,OAAA,CAAAJ,cAAA,GAAAA,cAAA;AAEK,MAAMK,aAAa,GAAG,MAAAA,CAAOC,OAAqB,EAAEC,MAAe,KAAK;EAC7E,MAAMC,QAAQ,GAAGC,UAAI,CAACC,eAAe,CAAC,CAAC;EACvC,MAAMC,MAAM,GAAGH,QAAQ,CAACI,cAAc,CAACL,MAAM,CAAC;EAC9C,MAAMM,IAAI,GAAG,IAAIC,sBAAU,CAACL,UAAI,CAAC;EACjC,MAAMI,IAAI,CAACE,MAAM,CAACT,OAAO,CAAC;EAC1BO,IAAI,CAACG,YAAY,CAACL,MAAM,CAAC;EACzB,MAAMM,OAAO,GAAGT,QAAQ,CAACU,wBAAwB,CAAC,CAAC;EACnDL,IAAI,CAACM,OAAO,CAAC,CAAC;EACd,OAAOF,OAAO;AAChB,CAAC;AAACb,OAAA,CAAAC,aAAA,GAAAA,aAAA;AAEK,MAAMe,WAAW,GAAG,MAAAA,CAAOd,OAAqB,EAAEe,IAAY,KAAK;EACxE,OAAOC,sBAAsB,CAAC,MAAMjB,aAAa,CAACC,OAAO,CAAC,EAAEe,IAAI,CAAC;AACnE,CAAC;AAACjB,OAAA,CAAAgB,WAAA,GAAAA,WAAA;AAEK,MAAME,sBAAsB,GAAGA,CAACL,OAAkB,EAAEI,IAAY,KAAK;EAC1E,SAAS;;EACT,MAAME,OAAO,GAAGd,UAAI,CAACe,OAAO,CAACC,aAAa,CAACJ,IAAI,CAACK,KAAK,EAAEL,IAAI,CAACM,MAAM,CAAE;EACpE,MAAMhB,MAAM,GAAGY,OAAO,CAACK,SAAS,CAAC,CAAC;EAClCjB,MAAM,CAACkB,WAAW,CAACZ,OAAO,CAAC;EAC3BM,OAAO,CAACO,KAAK,CAAC,CAAC;EACf,MAAMC,KAAK,GAAGR,OAAO,CAACS,iBAAiB,CAAC,CAAC;EACzC,OAAOD,KAAK,CAACE,mBAAmB,CAAC,CAAC;AACpC,CAAC;AAAC7B,OAAA,CAAAkB,sBAAA,GAAAA,sBAAA","ignoreList":[]}
@@ -9,10 +9,17 @@ const useSVG = (source, onError) => {
9
9
  if (source === null || source === undefined) {
10
10
  throw new Error(`Invalid svg data source. Got: ${source}`);
11
11
  }
12
- if (typeof source !== "object" || source instanceof Uint8Array || !("uri" in source) || typeof source.uri !== "string" || !("default" in source) || typeof source.default !== "string") {
12
+ let src;
13
+ if (typeof source === "string") {
14
+ src = source;
15
+ } else if (typeof source === "object" && "default" in source && typeof source.default === "string") {
16
+ src = source.default;
17
+ } else if (typeof source === "object" && "uri" in source) {
18
+ src = source.uri;
19
+ } else {
13
20
  throw new Error(`Invalid svg data source. Make sure that the source resolves to a string. Got: ${JSON.stringify(source, null, 2)}`);
14
21
  }
15
- const svg = _Skia.Skia.SVG.MakeFromString(source.default);
22
+ const svg = _Skia.Skia.SVG.MakeFromString(src);
16
23
  if (svg === null && onError !== undefined) {
17
24
  onError(new Error("Failed to create SVG from source."));
18
25
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_Skia","require","useSVG","source","onError","undefined","Error","Uint8Array","uri","default","JSON","stringify","svg","Skia","SVG","MakeFromString","exports"],"sources":["SVG.web.ts"],"sourcesContent":["import { Skia } from \"../Skia\";\nimport type { DataSourceParam } from \"../types\";\n\nexport const useSVG = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => {\n if (source === null || source === undefined) {\n throw new Error(`Invalid svg data source. Got: ${source}`);\n }\n if (\n typeof source !== \"object\" ||\n source instanceof Uint8Array ||\n !(\"uri\" in source) ||\n typeof source.uri !== \"string\" ||\n !(\"default\" in source) ||\n typeof source.default !== \"string\"\n ) {\n throw new Error(\n `Invalid svg data source. Make sure that the source resolves to a string. Got: ${JSON.stringify(\n source,\n null,\n 2\n )}`\n );\n }\n const svg = Skia.SVG.MakeFromString(source.default);\n if (svg === null && onError !== undefined) {\n onError(new Error(\"Failed to create SVG from source.\"));\n }\n return svg;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGO,MAAMC,MAAM,GAAGA,CACpBC,MAAuB,EACvBC,OAA8B,KAC3B;EACH,IAAID,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAKE,SAAS,EAAE;IAC3C,MAAM,IAAIC,KAAK,CAAC,iCAAiCH,MAAM,EAAE,CAAC;EAC5D;EACA,IACE,OAAOA,MAAM,KAAK,QAAQ,IAC1BA,MAAM,YAAYI,UAAU,IAC5B,EAAE,KAAK,IAAIJ,MAAM,CAAC,IAClB,OAAOA,MAAM,CAACK,GAAG,KAAK,QAAQ,IAC9B,EAAE,SAAS,IAAIL,MAAM,CAAC,IACtB,OAAOA,MAAM,CAACM,OAAO,KAAK,QAAQ,EAClC;IACA,MAAM,IAAIH,KAAK,CACb,iFAAiFI,IAAI,CAACC,SAAS,CAC7FR,MAAM,EACN,IAAI,EACJ,CACF,CAAC,EACH,CAAC;EACH;EACA,MAAMS,GAAG,GAAGC,UAAI,CAACC,GAAG,CAACC,cAAc,CAACZ,MAAM,CAACM,OAAO,CAAC;EACnD,IAAIG,GAAG,KAAK,IAAI,IAAIR,OAAO,KAAKC,SAAS,EAAE;IACzCD,OAAO,CAAC,IAAIE,KAAK,CAAC,mCAAmC,CAAC,CAAC;EACzD;EACA,OAAOM,GAAG;AACZ,CAAC;AAACI,OAAA,CAAAd,MAAA,GAAAA,MAAA","ignoreList":[]}
1
+ {"version":3,"names":["_Skia","require","useSVG","source","onError","undefined","Error","src","default","uri","JSON","stringify","svg","Skia","SVG","MakeFromString","exports"],"sources":["SVG.web.ts"],"sourcesContent":["import { Skia } from \"../Skia\";\nimport type { DataSourceParam } from \"../types\";\n\nexport const useSVG = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => {\n if (source === null || source === undefined) {\n throw new Error(`Invalid svg data source. Got: ${source}`);\n }\n let src: string;\n if (typeof source === \"string\") {\n src = source;\n } else if (\n typeof source === \"object\" &&\n \"default\" in source &&\n typeof source.default === \"string\"\n ) {\n src = source.default;\n } else if (typeof source === \"object\" && \"uri\" in source) {\n src = source.uri;\n } else {\n throw new Error(\n `Invalid svg data source. Make sure that the source resolves to a string. Got: ${JSON.stringify(\n source,\n null,\n 2\n )}`\n );\n }\n const svg = Skia.SVG.MakeFromString(src);\n if (svg === null && onError !== undefined) {\n onError(new Error(\"Failed to create SVG from source.\"));\n }\n return svg;\n};\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGO,MAAMC,MAAM,GAAGA,CACpBC,MAAuB,EACvBC,OAA8B,KAC3B;EACH,IAAID,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAKE,SAAS,EAAE;IAC3C,MAAM,IAAIC,KAAK,CAAC,iCAAiCH,MAAM,EAAE,CAAC;EAC5D;EACA,IAAII,GAAW;EACf,IAAI,OAAOJ,MAAM,KAAK,QAAQ,EAAE;IAC9BI,GAAG,GAAGJ,MAAM;EACd,CAAC,MAAM,IACL,OAAOA,MAAM,KAAK,QAAQ,IAC1B,SAAS,IAAIA,MAAM,IACnB,OAAOA,MAAM,CAACK,OAAO,KAAK,QAAQ,EAClC;IACAD,GAAG,GAAGJ,MAAM,CAACK,OAAO;EACtB,CAAC,MAAM,IAAI,OAAOL,MAAM,KAAK,QAAQ,IAAI,KAAK,IAAIA,MAAM,EAAE;IACxDI,GAAG,GAAGJ,MAAM,CAACM,GAAG;EAClB,CAAC,MAAM;IACL,MAAM,IAAIH,KAAK,CACb,iFAAiFI,IAAI,CAACC,SAAS,CAC7FR,MAAM,EACN,IAAI,EACJ,CACF,CAAC,EACH,CAAC;EACH;EACA,MAAMS,GAAG,GAAGC,UAAI,CAACC,GAAG,CAACC,cAAc,CAACR,GAAG,CAAC;EACxC,IAAIK,GAAG,KAAK,IAAI,IAAIR,OAAO,KAAKC,SAAS,EAAE;IACzCD,OAAO,CAAC,IAAIE,KAAK,CAAC,mCAAmC,CAAC,CAAC;EACzD;EACA,OAAOM,GAAG;AACZ,CAAC;AAACI,OAAA,CAAAd,MAAA,GAAAA,MAAA","ignoreList":[]}
@@ -2,6 +2,10 @@ import type { SharedValue } from "react-native-reanimated";
2
2
  import type { BaseRecorder, JsiRecorder, Skia } from "../../skia/types";
3
3
  import type { PaintProps, NodeType, BlurMaskFilterProps, CTMProps, BoxProps, BoxShadowProps, ImageProps, CircleProps, PointsProps, PathProps, RectProps, RoundedRectProps, OvalProps, LineProps, PatchProps, VerticesProps, DiffRectProps, TextProps, TextPathProps, TextBlobProps, GlyphsProps, PictureProps, ImageSVGProps, ParagraphProps, AtlasProps, SkottieProps } from "../../dom/types";
4
4
  import type { AnimatedProps } from "../../renderer";
5
+ /**
6
+ * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.
7
+ * It will crash otherwise on Ganesh (iOS/Android).
8
+ */
5
9
  export declare class ReanimatedRecorder implements BaseRecorder {
6
10
  private values;
7
11
  private recorder;
@@ -8,6 +8,10 @@ var _utils = require("../utils");
8
8
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
9
9
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
10
10
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
11
+ /**
12
+ * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.
13
+ * It will crash otherwise on Ganesh (iOS/Android).
14
+ */
11
15
  class ReanimatedRecorder {
12
16
  constructor(Skia) {
13
17
  _defineProperty(this, "values", new Set());
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ReanimatedRecorder","constructor","Skia","Set","recorder","Recorder","processAnimationValues","props","values","forEach","isSharedValue","has","name","size","add","getRecorder","getSharedValues","Array","from","saveGroup","restoreGroup","savePaint","standalone","restorePaint","restorePaintDeclaration","materializePaint","pushPathEffect","pathEffectType","pushImageFilter","imageFilterType","pushColorFilter","colorFilterType","pushShader","shaderType","children","pushBlurMaskFilter","composePathEffect","composeColorFilter","composeImageFilter","saveCTM","restoreCTM","drawPaint","saveLayer","saveBackdropFilter","drawBox","boxProps","shadows","shadow","map","s","drawImage","drawCircle","drawPoints","drawPath","drawRect","drawRRect","drawOval","drawLine","drawPatch","drawVertices","drawDiffRect","drawText","drawTextPath","drawTextBlob","drawGlyphs","drawPicture","drawImageSVG","drawParagraph","drawAtlas","drawSkottie","exports"],"sources":["ReanimatedRecorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport type { BaseRecorder, JsiRecorder, Skia } from \"../../skia/types\";\nimport type {\n PaintProps,\n NodeType,\n BlurMaskFilterProps,\n CTMProps,\n BoxProps,\n BoxShadowProps,\n ImageProps,\n CircleProps,\n PointsProps,\n PathProps,\n RectProps,\n RoundedRectProps,\n OvalProps,\n LineProps,\n PatchProps,\n VerticesProps,\n DiffRectProps,\n TextProps,\n TextPathProps,\n TextBlobProps,\n GlyphsProps,\n PictureProps,\n ImageSVGProps,\n ParagraphProps,\n AtlasProps,\n SkottieProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer\";\nimport { isSharedValue } from \"../utils\";\n\nexport class ReanimatedRecorder implements BaseRecorder {\n private values = new Set<SharedValue<unknown>>();\n private recorder: JsiRecorder;\n\n constructor(Skia: Skia) {\n this.recorder = Skia.Recorder();\n }\n\n private processAnimationValues(props?: Record<string, unknown>) {\n if (!props) {\n return;\n }\n Object.values(props).forEach((value) => {\n if (isSharedValue(value) && !this.values.has(value)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n value.name = `variable${this.values.size}`;\n this.values.add(value as SharedValue<unknown>);\n }\n });\n }\n\n getRecorder() {\n return this.recorder;\n }\n\n getSharedValues() {\n return Array.from(this.values);\n }\n\n saveGroup(): void {\n this.recorder.saveGroup();\n }\n\n restoreGroup(): void {\n this.recorder.restoreGroup();\n }\n\n savePaint(props: AnimatedProps<PaintProps>, standalone: boolean): void {\n this.processAnimationValues(props);\n this.recorder.savePaint(props, standalone);\n }\n\n restorePaint(): void {\n this.recorder.restorePaint();\n }\n\n restorePaintDeclaration(): void {\n this.recorder.restorePaintDeclaration();\n }\n\n materializePaint(): void {\n this.recorder.materializePaint();\n }\n\n pushPathEffect(\n pathEffectType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushPathEffect(pathEffectType, props);\n }\n\n pushImageFilter(\n imageFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushImageFilter(imageFilterType, props);\n }\n\n pushColorFilter(\n colorFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushColorFilter(colorFilterType, props);\n }\n\n pushShader(\n shaderType: NodeType,\n props: AnimatedProps<unknown>,\n children: number\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushShader(shaderType, props, children);\n }\n\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>): void {\n this.processAnimationValues(props);\n this.recorder.pushBlurMaskFilter(props);\n }\n\n composePathEffect(): void {\n this.recorder.composePathEffect();\n }\n\n composeColorFilter(): void {\n this.recorder.composeColorFilter();\n }\n\n composeImageFilter(): void {\n this.recorder.composeImageFilter();\n }\n\n saveCTM(props: AnimatedProps<CTMProps>): void {\n this.processAnimationValues(props);\n this.recorder.saveCTM(props);\n }\n\n restoreCTM(): void {\n this.recorder.restoreCTM();\n }\n\n drawPaint(): void {\n this.recorder.drawPaint();\n }\n\n saveLayer(): void {\n this.recorder.saveLayer();\n }\n\n saveBackdropFilter(): void {\n this.recorder.saveBackdropFilter();\n }\n\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n }[]\n ): void {\n this.processAnimationValues(boxProps);\n shadows.forEach((shadow) => {\n this.processAnimationValues(\n shadow.props as AnimatedProps<BoxShadowProps>\n );\n });\n this.recorder.drawBox(\n boxProps,\n // TODO: Fix this type BaseRecorder.drawBox()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shadows.map((s) => s.props)\n );\n }\n\n drawImage(props: AnimatedProps<ImageProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImage(props);\n }\n\n drawCircle(props: AnimatedProps<CircleProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawCircle(props);\n }\n\n drawPoints(props: AnimatedProps<PointsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPoints(props);\n }\n\n drawPath(props: AnimatedProps<PathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPath(props);\n }\n\n drawRect(props: AnimatedProps<RectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRect(props);\n }\n\n drawRRect(props: AnimatedProps<RoundedRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRRect(props);\n }\n\n drawOval(props: AnimatedProps<OvalProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawOval(props);\n }\n\n drawLine(props: AnimatedProps<LineProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawLine(props);\n }\n\n drawPatch(props: AnimatedProps<PatchProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPatch(props);\n }\n\n drawVertices(props: AnimatedProps<VerticesProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawVertices(props);\n }\n\n drawDiffRect(props: AnimatedProps<DiffRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawDiffRect(props);\n }\n\n drawText(props: AnimatedProps<TextProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawText(props);\n }\n\n drawTextPath(props: AnimatedProps<TextPathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextPath(props);\n }\n\n drawTextBlob(props: AnimatedProps<TextBlobProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextBlob(props);\n }\n\n drawGlyphs(props: AnimatedProps<GlyphsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawGlyphs(props);\n }\n\n drawPicture(props: AnimatedProps<PictureProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPicture(props);\n }\n\n drawImageSVG(props: AnimatedProps<ImageSVGProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImageSVG(props);\n }\n\n drawParagraph(props: AnimatedProps<ParagraphProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawParagraph(props);\n }\n\n drawAtlas(props: AnimatedProps<AtlasProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawAtlas(props);\n }\n\n drawSkottie(props: AnimatedProps<SkottieProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawSkottie(props);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_utils","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ReanimatedRecorder","constructor","Skia","Set","recorder","Recorder","processAnimationValues","props","values","forEach","isSharedValue","has","name","size","add","getRecorder","getSharedValues","Array","from","saveGroup","restoreGroup","savePaint","standalone","restorePaint","restorePaintDeclaration","materializePaint","pushPathEffect","pathEffectType","pushImageFilter","imageFilterType","pushColorFilter","colorFilterType","pushShader","shaderType","children","pushBlurMaskFilter","composePathEffect","composeColorFilter","composeImageFilter","saveCTM","restoreCTM","drawPaint","saveLayer","saveBackdropFilter","drawBox","boxProps","shadows","shadow","map","s","drawImage","drawCircle","drawPoints","drawPath","drawRect","drawRRect","drawOval","drawLine","drawPatch","drawVertices","drawDiffRect","drawText","drawTextPath","drawTextBlob","drawGlyphs","drawPicture","drawImageSVG","drawParagraph","drawAtlas","drawSkottie","exports"],"sources":["ReanimatedRecorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport type { BaseRecorder, JsiRecorder, Skia } from \"../../skia/types\";\nimport type {\n PaintProps,\n NodeType,\n BlurMaskFilterProps,\n CTMProps,\n BoxProps,\n BoxShadowProps,\n ImageProps,\n CircleProps,\n PointsProps,\n PathProps,\n RectProps,\n RoundedRectProps,\n OvalProps,\n LineProps,\n PatchProps,\n VerticesProps,\n DiffRectProps,\n TextProps,\n TextPathProps,\n TextBlobProps,\n GlyphsProps,\n PictureProps,\n ImageSVGProps,\n ParagraphProps,\n AtlasProps,\n SkottieProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer\";\nimport { isSharedValue } from \"../utils\";\n\n/**\n * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.\n * It will crash otherwise on Ganesh (iOS/Android).\n */\nexport class ReanimatedRecorder implements BaseRecorder {\n private values = new Set<SharedValue<unknown>>();\n private recorder: JsiRecorder;\n\n constructor(Skia: Skia) {\n this.recorder = Skia.Recorder();\n }\n\n private processAnimationValues(props?: Record<string, unknown>) {\n if (!props) {\n return;\n }\n Object.values(props).forEach((value) => {\n if (isSharedValue(value) && !this.values.has(value)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n value.name = `variable${this.values.size}`;\n this.values.add(value as SharedValue<unknown>);\n }\n });\n }\n\n getRecorder() {\n return this.recorder;\n }\n\n getSharedValues() {\n return Array.from(this.values);\n }\n\n saveGroup(): void {\n this.recorder.saveGroup();\n }\n\n restoreGroup(): void {\n this.recorder.restoreGroup();\n }\n\n savePaint(props: AnimatedProps<PaintProps>, standalone: boolean): void {\n this.processAnimationValues(props);\n this.recorder.savePaint(props, standalone);\n }\n\n restorePaint(): void {\n this.recorder.restorePaint();\n }\n\n restorePaintDeclaration(): void {\n this.recorder.restorePaintDeclaration();\n }\n\n materializePaint(): void {\n this.recorder.materializePaint();\n }\n\n pushPathEffect(\n pathEffectType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushPathEffect(pathEffectType, props);\n }\n\n pushImageFilter(\n imageFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushImageFilter(imageFilterType, props);\n }\n\n pushColorFilter(\n colorFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushColorFilter(colorFilterType, props);\n }\n\n pushShader(\n shaderType: NodeType,\n props: AnimatedProps<unknown>,\n children: number\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushShader(shaderType, props, children);\n }\n\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>): void {\n this.processAnimationValues(props);\n this.recorder.pushBlurMaskFilter(props);\n }\n\n composePathEffect(): void {\n this.recorder.composePathEffect();\n }\n\n composeColorFilter(): void {\n this.recorder.composeColorFilter();\n }\n\n composeImageFilter(): void {\n this.recorder.composeImageFilter();\n }\n\n saveCTM(props: AnimatedProps<CTMProps>): void {\n this.processAnimationValues(props);\n this.recorder.saveCTM(props);\n }\n\n restoreCTM(): void {\n this.recorder.restoreCTM();\n }\n\n drawPaint(): void {\n this.recorder.drawPaint();\n }\n\n saveLayer(): void {\n this.recorder.saveLayer();\n }\n\n saveBackdropFilter(): void {\n this.recorder.saveBackdropFilter();\n }\n\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n }[]\n ): void {\n this.processAnimationValues(boxProps);\n shadows.forEach((shadow) => {\n this.processAnimationValues(\n shadow.props as AnimatedProps<BoxShadowProps>\n );\n });\n this.recorder.drawBox(\n boxProps,\n // TODO: Fix this type BaseRecorder.drawBox()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shadows.map((s) => s.props)\n );\n }\n\n drawImage(props: AnimatedProps<ImageProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImage(props);\n }\n\n drawCircle(props: AnimatedProps<CircleProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawCircle(props);\n }\n\n drawPoints(props: AnimatedProps<PointsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPoints(props);\n }\n\n drawPath(props: AnimatedProps<PathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPath(props);\n }\n\n drawRect(props: AnimatedProps<RectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRect(props);\n }\n\n drawRRect(props: AnimatedProps<RoundedRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRRect(props);\n }\n\n drawOval(props: AnimatedProps<OvalProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawOval(props);\n }\n\n drawLine(props: AnimatedProps<LineProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawLine(props);\n }\n\n drawPatch(props: AnimatedProps<PatchProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPatch(props);\n }\n\n drawVertices(props: AnimatedProps<VerticesProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawVertices(props);\n }\n\n drawDiffRect(props: AnimatedProps<DiffRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawDiffRect(props);\n }\n\n drawText(props: AnimatedProps<TextProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawText(props);\n }\n\n drawTextPath(props: AnimatedProps<TextPathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextPath(props);\n }\n\n drawTextBlob(props: AnimatedProps<TextBlobProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextBlob(props);\n }\n\n drawGlyphs(props: AnimatedProps<GlyphsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawGlyphs(props);\n }\n\n drawPicture(props: AnimatedProps<PictureProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPicture(props);\n }\n\n drawImageSVG(props: AnimatedProps<ImageSVGProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImageSVG(props);\n }\n\n drawParagraph(props: AnimatedProps<ParagraphProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawParagraph(props);\n }\n\n drawAtlas(props: AnimatedProps<AtlasProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawAtlas(props);\n }\n\n drawSkottie(props: AnimatedProps<SkottieProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawSkottie(props);\n }\n}\n"],"mappings":";;;;;;AAgCA,IAAAA,MAAA,GAAAC,OAAA;AAAyC,SAAAC,gBAAAC,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAD,CAAA,GAAAI,MAAA,CAAAC,cAAA,CAAAL,CAAA,EAAAC,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAT,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAG,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAb,CAAA,QAAAU,CAAA,GAAAV,CAAA,CAAAc,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAEzC;AACA;AACA;AACA;AACO,MAAMgB,kBAAkB,CAAyB;EAItDC,WAAWA,CAACC,IAAU,EAAE;IAAArB,eAAA,iBAHP,IAAIsB,GAAG,CAAuB,CAAC;IAAAtB,eAAA;IAI9C,IAAI,CAACuB,QAAQ,GAAGF,IAAI,CAACG,QAAQ,CAAC,CAAC;EACjC;EAEQC,sBAAsBA,CAACC,KAA+B,EAAE;IAC9D,IAAI,CAACA,KAAK,EAAE;MACV;IACF;IACArB,MAAM,CAACsB,MAAM,CAACD,KAAK,CAAC,CAACE,OAAO,CAAErB,KAAK,IAAK;MACtC,IAAI,IAAAsB,oBAAa,EAACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAACoB,MAAM,CAACG,GAAG,CAACvB,KAAK,CAAC,EAAE;QACnD;QACA;QACAA,KAAK,CAACwB,IAAI,GAAG,WAAW,IAAI,CAACJ,MAAM,CAACK,IAAI,EAAE;QAC1C,IAAI,CAACL,MAAM,CAACM,GAAG,CAAC1B,KAA6B,CAAC;MAChD;IACF,CAAC,CAAC;EACJ;EAEA2B,WAAWA,CAAA,EAAG;IACZ,OAAO,IAAI,CAACX,QAAQ;EACtB;EAEAY,eAAeA,CAAA,EAAG;IAChB,OAAOC,KAAK,CAACC,IAAI,CAAC,IAAI,CAACV,MAAM,CAAC;EAChC;EAEAW,SAASA,CAAA,EAAS;IAChB,IAAI,CAACf,QAAQ,CAACe,SAAS,CAAC,CAAC;EAC3B;EAEAC,YAAYA,CAAA,EAAS;IACnB,IAAI,CAAChB,QAAQ,CAACgB,YAAY,CAAC,CAAC;EAC9B;EAEAC,SAASA,CAACd,KAAgC,EAAEe,UAAmB,EAAQ;IACrE,IAAI,CAAChB,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACiB,SAAS,CAACd,KAAK,EAAEe,UAAU,CAAC;EAC5C;EAEAC,YAAYA,CAAA,EAAS;IACnB,IAAI,CAACnB,QAAQ,CAACmB,YAAY,CAAC,CAAC;EAC9B;EAEAC,uBAAuBA,CAAA,EAAS;IAC9B,IAAI,CAACpB,QAAQ,CAACoB,uBAAuB,CAAC,CAAC;EACzC;EAEAC,gBAAgBA,CAAA,EAAS;IACvB,IAAI,CAACrB,QAAQ,CAACqB,gBAAgB,CAAC,CAAC;EAClC;EAEAC,cAAcA,CACZC,cAAwB,EACxBpB,KAA6B,EACvB;IACN,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACsB,cAAc,CAACC,cAAc,EAAEpB,KAAK,CAAC;EACrD;EAEAqB,eAAeA,CACbC,eAAyB,EACzBtB,KAA6B,EACvB;IACN,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACwB,eAAe,CAACC,eAAe,EAAEtB,KAAK,CAAC;EACvD;EAEAuB,eAAeA,CACbC,eAAyB,EACzBxB,KAA6B,EACvB;IACN,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC0B,eAAe,CAACC,eAAe,EAAExB,KAAK,CAAC;EACvD;EAEAyB,UAAUA,CACRC,UAAoB,EACpB1B,KAA6B,EAC7B2B,QAAgB,EACV;IACN,IAAI,CAAC5B,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC4B,UAAU,CAACC,UAAU,EAAE1B,KAAK,EAAE2B,QAAQ,CAAC;EACvD;EAEAC,kBAAkBA,CAAC5B,KAAyC,EAAQ;IAClE,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC+B,kBAAkB,CAAC5B,KAAK,CAAC;EACzC;EAEA6B,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAAChC,QAAQ,CAACgC,iBAAiB,CAAC,CAAC;EACnC;EAEAC,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACjC,QAAQ,CAACiC,kBAAkB,CAAC,CAAC;EACpC;EAEAC,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAAClC,QAAQ,CAACkC,kBAAkB,CAAC,CAAC;EACpC;EAEAC,OAAOA,CAAChC,KAA8B,EAAQ;IAC5C,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACmC,OAAO,CAAChC,KAAK,CAAC;EAC9B;EAEAiC,UAAUA,CAAA,EAAS;IACjB,IAAI,CAACpC,QAAQ,CAACoC,UAAU,CAAC,CAAC;EAC5B;EAEAC,SAASA,CAAA,EAAS;IAChB,IAAI,CAACrC,QAAQ,CAACqC,SAAS,CAAC,CAAC;EAC3B;EAEAC,SAASA,CAAA,EAAS;IAChB,IAAI,CAACtC,QAAQ,CAACsC,SAAS,CAAC,CAAC;EAC3B;EAEAC,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACvC,QAAQ,CAACuC,kBAAkB,CAAC,CAAC;EACpC;EAEAC,OAAOA,CACLC,QAAiC,EACjCC,OAEG,EACG;IACN,IAAI,CAACxC,sBAAsB,CAACuC,QAAQ,CAAC;IACrCC,OAAO,CAACrC,OAAO,CAAEsC,MAAM,IAAK;MAC1B,IAAI,CAACzC,sBAAsB,CACzByC,MAAM,CAACxC,KACT,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAACH,QAAQ,CAACwC,OAAO,CACnBC,QAAQ;IACR;IACA;IACA;IACAC,OAAO,CAACE,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAAC1C,KAAK,CAC5B,CAAC;EACH;EAEA2C,SAASA,CAAC3C,KAAgC,EAAQ;IAChD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC8C,SAAS,CAAC3C,KAAK,CAAC;EAChC;EAEA4C,UAAUA,CAAC5C,KAAiC,EAAQ;IAClD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC+C,UAAU,CAAC5C,KAAK,CAAC;EACjC;EAEA6C,UAAUA,CAAC7C,KAAiC,EAAQ;IAClD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACgD,UAAU,CAAC7C,KAAK,CAAC;EACjC;EAEA8C,QAAQA,CAAC9C,KAA+B,EAAQ;IAC9C,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACiD,QAAQ,CAAC9C,KAAK,CAAC;EAC/B;EAEA+C,QAAQA,CAAC/C,KAA+B,EAAQ;IAC9C,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACkD,QAAQ,CAAC/C,KAAK,CAAC;EAC/B;EAEAgD,SAASA,CAAChD,KAAsC,EAAQ;IACtD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACmD,SAAS,CAAChD,KAAK,CAAC;EAChC;EAEAiD,QAAQA,CAACjD,KAA+B,EAAQ;IAC9C,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACoD,QAAQ,CAACjD,KAAK,CAAC;EAC/B;EAEAkD,QAAQA,CAAClD,KAA+B,EAAQ;IAC9C,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACqD,QAAQ,CAAClD,KAAK,CAAC;EAC/B;EAEAmD,SAASA,CAACnD,KAAgC,EAAQ;IAChD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACsD,SAAS,CAACnD,KAAK,CAAC;EAChC;EAEAoD,YAAYA,CAACpD,KAAmC,EAAQ;IACtD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACuD,YAAY,CAACpD,KAAK,CAAC;EACnC;EAEAqD,YAAYA,CAACrD,KAAmC,EAAQ;IACtD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACwD,YAAY,CAACrD,KAAK,CAAC;EACnC;EAEAsD,QAAQA,CAACtD,KAA+B,EAAQ;IAC9C,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACyD,QAAQ,CAACtD,KAAK,CAAC;EAC/B;EAEAuD,YAAYA,CAACvD,KAAmC,EAAQ;IACtD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC0D,YAAY,CAACvD,KAAK,CAAC;EACnC;EAEAwD,YAAYA,CAACxD,KAAmC,EAAQ;IACtD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC2D,YAAY,CAACxD,KAAK,CAAC;EACnC;EAEAyD,UAAUA,CAACzD,KAAiC,EAAQ;IAClD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC4D,UAAU,CAACzD,KAAK,CAAC;EACjC;EAEA0D,WAAWA,CAAC1D,KAAkC,EAAQ;IACpD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC6D,WAAW,CAAC1D,KAAK,CAAC;EAClC;EAEA2D,YAAYA,CAAC3D,KAAmC,EAAQ;IACtD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC8D,YAAY,CAAC3D,KAAK,CAAC;EACnC;EAEA4D,aAAaA,CAAC5D,KAAoC,EAAQ;IACxD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAAC+D,aAAa,CAAC5D,KAAK,CAAC;EACpC;EAEA6D,SAASA,CAAC7D,KAAgC,EAAQ;IAChD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACgE,SAAS,CAAC7D,KAAK,CAAC;EAChC;EAEA8D,WAAWA,CAAC9D,KAAkC,EAAQ;IACpD,IAAI,CAACD,sBAAsB,CAACC,KAAK,CAAC;IAClC,IAAI,CAACH,QAAQ,CAACiE,WAAW,CAAC9D,KAAK,CAAC;EAClC;AACF;AAAC+D,OAAA,CAAAtE,kBAAA,GAAAA,kBAAA","ignoreList":[]}
@@ -1,11 +1,35 @@
1
- import { useEffect, useMemo, useState } from "react";
2
- import { drawAsImageFromPicture, drawAsPicture } from "../../renderer/Offscreen";
1
+ import { useEffect, useState } from "react";
2
+ import { drawAsPicture } from "../../renderer/Offscreen";
3
3
  import { Skia, useImage } from "../../skia";
4
+ import { Platform } from "../../Platform";
4
5
  import Rea from "./ReanimatedProxy";
6
+ const createTextureFromImage = (texture, image) => {
7
+ "worklet";
8
+
9
+ const surface = Skia.Surface.MakeOffscreen(image.width(), image.height());
10
+ if (!surface) {
11
+ texture.value = null;
12
+ return;
13
+ }
14
+ const canvas = surface.getCanvas();
15
+ canvas.drawImage(image, 0, 0);
16
+ surface.flush();
17
+ texture.value = surface.makeImageSnapshot();
18
+ if (Platform.OS === "web") {
19
+ texture.value = texture.value.makeNonTextureImage();
20
+ }
21
+ };
5
22
  const createTexture = (texture, picture, size) => {
6
23
  "worklet";
7
24
 
8
- texture.value = drawAsImageFromPicture(picture, size);
25
+ const surface = Skia.Surface.MakeOffscreen(size.width, size.height);
26
+ const canvas = surface.getCanvas();
27
+ canvas.drawPicture(picture);
28
+ surface.flush();
29
+ texture.value = surface.makeImageSnapshot();
30
+ if (Platform.OS === "web") {
31
+ texture.value = texture.value.makeNonTextureImage();
32
+ }
9
33
  };
10
34
  export const useTexture = (element, size, deps) => {
11
35
  const {
@@ -37,33 +61,12 @@ export const usePictureAsTexture = (picture, size) => {
37
61
  };
38
62
  export const useImageAsTexture = source => {
39
63
  const image = useImage(source);
40
- const size = useMemo(() => {
41
- if (image) {
42
- return {
43
- width: image.width(),
44
- height: image.height()
45
- };
46
- }
47
- return {
48
- width: 0,
49
- height: 0
50
- };
51
- }, [image]);
52
- const picture = useMemo(() => {
53
- if (image) {
54
- const recorder = Skia.PictureRecorder();
55
- const canvas = recorder.beginRecording({
56
- x: 0,
57
- y: 0,
58
- width: size.width,
59
- height: size.height
60
- });
61
- canvas.drawImage(image, 0, 0);
62
- return recorder.finishRecordingAsPicture();
63
- } else {
64
- return null;
64
+ const texture = Rea.useSharedValue(null);
65
+ useEffect(() => {
66
+ if (image !== null) {
67
+ Rea.runOnUI(createTextureFromImage)(texture, image);
65
68
  }
66
- }, [size, image]);
67
- return usePictureAsTexture(picture, size);
69
+ }, [image, texture]);
70
+ return texture;
68
71
  };
69
72
  //# sourceMappingURL=textures.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useMemo","useState","drawAsImageFromPicture","drawAsPicture","Skia","useImage","Rea","createTexture","texture","picture","size","value","useTexture","element","deps","width","height","setPicture","x","y","then","pic","usePictureAsTexture","useSharedValue","runOnUI","useImageAsTexture","source","image","recorder","PictureRecorder","canvas","beginRecording","drawImage","finishRecordingAsPicture"],"sources":["textures.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport type { DependencyList, ReactElement } from \"react\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n DataSourceParam,\n SkImage,\n SkPicture,\n SkSize,\n} from \"../../skia/types\";\nimport {\n drawAsImageFromPicture,\n drawAsPicture,\n} from \"../../renderer/Offscreen\";\nimport { Skia, useImage } from \"../../skia\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst createTexture = (\n texture: SharedValue<SkImage | null>,\n picture: SkPicture,\n size: SkSize\n) => {\n \"worklet\";\n texture.value = drawAsImageFromPicture(picture, size);\n};\n\nexport const useTexture = (\n element: ReactElement,\n size: SkSize,\n deps?: DependencyList\n) => {\n const { width, height } = size;\n const [picture, setPicture] = useState<SkPicture | null>(null);\n useEffect(() => {\n drawAsPicture(element, {\n x: 0,\n y: 0,\n width,\n height,\n }).then((pic) => {\n setPicture(pic);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps ?? []);\n return usePictureAsTexture(picture, size);\n};\n\nexport const usePictureAsTexture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (picture !== null) {\n Rea.runOnUI(createTexture)(texture, picture, size);\n }\n }, [picture, size, texture]);\n return texture;\n};\n\nexport const useImageAsTexture = (source: DataSourceParam) => {\n const image = useImage(source);\n const size = useMemo(() => {\n if (image) {\n return { width: image.width(), height: image.height() };\n }\n return { width: 0, height: 0 };\n }, [image]);\n const picture = useMemo(() => {\n if (image) {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording({\n x: 0,\n y: 0,\n width: size.width,\n height: size.height,\n });\n canvas.drawImage(image, 0, 0);\n return recorder.finishRecordingAsPicture();\n } else {\n return null;\n }\n }, [size, image]);\n return usePictureAsTexture(picture, size);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useState","drawAsPicture","Skia","useImage","Platform","Rea","createTextureFromImage","texture","image","surface","Surface","MakeOffscreen","width","height","value","canvas","getCanvas","drawImage","flush","makeImageSnapshot","OS","makeNonTextureImage","createTexture","picture","size","drawPicture","useTexture","element","deps","setPicture","x","y","then","pic","usePictureAsTexture","useSharedValue","runOnUI","useImageAsTexture","source"],"sources":["textures.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { DependencyList, ReactElement } from \"react\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n DataSourceParam,\n SkImage,\n SkPicture,\n SkSize,\n} from \"../../skia/types\";\nimport { drawAsPicture } from \"../../renderer/Offscreen\";\nimport { Skia, useImage } from \"../../skia\";\nimport { Platform } from \"../../Platform\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst createTextureFromImage = (\n texture: SharedValue<SkImage | null>,\n image: SkImage\n) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(image.width(), image.height());\n if (!surface) {\n texture.value = null;\n return;\n }\n const canvas = surface.getCanvas();\n canvas.drawImage(image, 0, 0);\n surface.flush();\n texture.value = surface.makeImageSnapshot();\n if (Platform.OS === \"web\") {\n texture.value = texture.value.makeNonTextureImage();\n }\n};\n\nconst createTexture = (\n texture: SharedValue<SkImage | null>,\n picture: SkPicture,\n size: SkSize\n) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(size.width, size.height)!;\n const canvas = surface.getCanvas();\n canvas.drawPicture(picture);\n surface.flush();\n texture.value = surface.makeImageSnapshot();\n if (Platform.OS === \"web\") {\n texture.value = texture.value.makeNonTextureImage();\n }\n};\n\nexport const useTexture = (\n element: ReactElement,\n size: SkSize,\n deps?: DependencyList\n) => {\n const { width, height } = size;\n const [picture, setPicture] = useState<SkPicture | null>(null);\n useEffect(() => {\n drawAsPicture(element, {\n x: 0,\n y: 0,\n width,\n height,\n }).then((pic) => {\n setPicture(pic);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps ?? []);\n return usePictureAsTexture(picture, size);\n};\n\nexport const usePictureAsTexture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (picture !== null) {\n Rea.runOnUI(createTexture)(texture, picture, size);\n }\n }, [picture, size, texture]);\n return texture;\n};\n\nexport const useImageAsTexture = (source: DataSourceParam) => {\n const image = useImage(source);\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (image !== null) {\n Rea.runOnUI(createTextureFromImage)(texture, image);\n }\n }, [image, texture]);\n return texture;\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAU3C,SAASC,aAAa,QAAQ,0BAA0B;AACxD,SAASC,IAAI,EAAEC,QAAQ,QAAQ,YAAY;AAC3C,SAASC,QAAQ,QAAQ,gBAAgB;AAEzC,OAAOC,GAAG,MAAM,mBAAmB;AAEnC,MAAMC,sBAAsB,GAAGA,CAC7BC,OAAoC,EACpCC,KAAc,KACX;EACH,SAAS;;EACT,MAAMC,OAAO,GAAGP,IAAI,CAACQ,OAAO,CAACC,aAAa,CAACH,KAAK,CAACI,KAAK,CAAC,CAAC,EAAEJ,KAAK,CAACK,MAAM,CAAC,CAAC,CAAC;EACzE,IAAI,CAACJ,OAAO,EAAE;IACZF,OAAO,CAACO,KAAK,GAAG,IAAI;IACpB;EACF;EACA,MAAMC,MAAM,GAAGN,OAAO,CAACO,SAAS,CAAC,CAAC;EAClCD,MAAM,CAACE,SAAS,CAACT,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;EAC7BC,OAAO,CAACS,KAAK,CAAC,CAAC;EACfX,OAAO,CAACO,KAAK,GAAGL,OAAO,CAACU,iBAAiB,CAAC,CAAC;EAC3C,IAAIf,QAAQ,CAACgB,EAAE,KAAK,KAAK,EAAE;IACzBb,OAAO,CAACO,KAAK,GAAGP,OAAO,CAACO,KAAK,CAACO,mBAAmB,CAAC,CAAC;EACrD;AACF,CAAC;AAED,MAAMC,aAAa,GAAGA,CACpBf,OAAoC,EACpCgB,OAAkB,EAClBC,IAAY,KACT;EACH,SAAS;;EACT,MAAMf,OAAO,GAAGP,IAAI,CAACQ,OAAO,CAACC,aAAa,CAACa,IAAI,CAACZ,KAAK,EAAEY,IAAI,CAACX,MAAM,CAAE;EACpE,MAAME,MAAM,GAAGN,OAAO,CAACO,SAAS,CAAC,CAAC;EAClCD,MAAM,CAACU,WAAW,CAACF,OAAO,CAAC;EAC3Bd,OAAO,CAACS,KAAK,CAAC,CAAC;EACfX,OAAO,CAACO,KAAK,GAAGL,OAAO,CAACU,iBAAiB,CAAC,CAAC;EAC3C,IAAIf,QAAQ,CAACgB,EAAE,KAAK,KAAK,EAAE;IACzBb,OAAO,CAACO,KAAK,GAAGP,OAAO,CAACO,KAAK,CAACO,mBAAmB,CAAC,CAAC;EACrD;AACF,CAAC;AAED,OAAO,MAAMK,UAAU,GAAGA,CACxBC,OAAqB,EACrBH,IAAY,EACZI,IAAqB,KAClB;EACH,MAAM;IAAEhB,KAAK;IAAEC;EAAO,CAAC,GAAGW,IAAI;EAC9B,MAAM,CAACD,OAAO,EAAEM,UAAU,CAAC,GAAG7B,QAAQ,CAAmB,IAAI,CAAC;EAC9DD,SAAS,CAAC,MAAM;IACdE,aAAa,CAAC0B,OAAO,EAAE;MACrBG,CAAC,EAAE,CAAC;MACJC,CAAC,EAAE,CAAC;MACJnB,KAAK;MACLC;IACF,CAAC,CAAC,CAACmB,IAAI,CAAEC,GAAG,IAAK;MACfJ,UAAU,CAACI,GAAG,CAAC;IACjB,CAAC,CAAC;IACF;EACF,CAAC,EAAEL,IAAI,aAAJA,IAAI,cAAJA,IAAI,GAAI,EAAE,CAAC;EACd,OAAOM,mBAAmB,CAACX,OAAO,EAAEC,IAAI,CAAC;AAC3C,CAAC;AAED,OAAO,MAAMU,mBAAmB,GAAGA,CACjCX,OAAyB,EACzBC,IAAY,KACT;EACH,MAAMjB,OAAO,GAAGF,GAAG,CAAC8B,cAAc,CAAiB,IAAI,CAAC;EACxDpC,SAAS,CAAC,MAAM;IACd,IAAIwB,OAAO,KAAK,IAAI,EAAE;MACpBlB,GAAG,CAAC+B,OAAO,CAACd,aAAa,CAAC,CAACf,OAAO,EAAEgB,OAAO,EAAEC,IAAI,CAAC;IACpD;EACF,CAAC,EAAE,CAACD,OAAO,EAAEC,IAAI,EAAEjB,OAAO,CAAC,CAAC;EAC5B,OAAOA,OAAO;AAChB,CAAC;AAED,OAAO,MAAM8B,iBAAiB,GAAIC,MAAuB,IAAK;EAC5D,MAAM9B,KAAK,GAAGL,QAAQ,CAACmC,MAAM,CAAC;EAC9B,MAAM/B,OAAO,GAAGF,GAAG,CAAC8B,cAAc,CAAiB,IAAI,CAAC;EACxDpC,SAAS,CAAC,MAAM;IACd,IAAIS,KAAK,KAAK,IAAI,EAAE;MAClBH,GAAG,CAAC+B,OAAO,CAAC9B,sBAAsB,CAAC,CAACC,OAAO,EAAEC,KAAK,CAAC;IACrD;EACF,CAAC,EAAE,CAACA,KAAK,EAAED,OAAO,CAAC,CAAC;EACpB,OAAOA,OAAO;AAChB,CAAC","ignoreList":[]}
@@ -1,8 +1,6 @@
1
1
  import { Skia } from "../skia";
2
2
  import { Platform } from "../Platform";
3
3
  import { SkiaSGRoot } from "../sksg/Reconciler";
4
-
5
- // We call it main thread because on web main is JS thread
6
4
  export const isOnMainThread = () => {
7
5
  "worklet";
8
6
 
@@ -29,11 +27,6 @@ export const drawAsImageFromPicture = (picture, size) => {
29
27
  canvas.drawPicture(picture);
30
28
  surface.flush();
31
29
  const image = surface.makeImageSnapshot();
32
- // If we are not on the main thread or if we are on Web, we need to make the image non-texture.
33
- if (!isOnMainThread() || Platform.OS === "web") {
34
- return image.makeNonTextureImage();
35
- } else {
36
- return image;
37
- }
30
+ return image.makeNonTextureImage();
38
31
  };
39
32
  //# sourceMappingURL=Offscreen.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Skia","Platform","SkiaSGRoot","isOnMainThread","_WORKLET","OS","drawAsPicture","element","bounds","recorder","PictureRecorder","canvas","beginRecording","root","render","drawOnCanvas","picture","finishRecordingAsPicture","unmount","drawAsImage","size","drawAsImageFromPicture","surface","Surface","MakeOffscreen","width","height","getCanvas","drawPicture","flush","image","makeImageSnapshot","makeNonTextureImage"],"sources":["Offscreen.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\n\nimport type { SkPicture, SkRect, SkSize } from \"../skia/types\";\nimport { Skia } from \"../skia\";\nimport { Platform } from \"../Platform\";\nimport { SkiaSGRoot } from \"../sksg/Reconciler\";\n\n// We call it main thread because on web main is JS thread\nexport const isOnMainThread = () => {\n \"worklet\";\n return (\n (typeof _WORKLET !== \"undefined\" && _WORKLET === true) ||\n Platform.OS === \"web\"\n );\n};\n\nexport const drawAsPicture = async (element: ReactElement, bounds?: SkRect) => {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording(bounds);\n const root = new SkiaSGRoot(Skia);\n await root.render(element);\n root.drawOnCanvas(canvas);\n const picture = recorder.finishRecordingAsPicture();\n root.unmount();\n return picture;\n};\n\nexport const drawAsImage = async (element: ReactElement, size: SkSize) => {\n return drawAsImageFromPicture(await drawAsPicture(element), size);\n};\n\nexport const drawAsImageFromPicture = (picture: SkPicture, size: SkSize) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(size.width, size.height)!;\n const canvas = surface.getCanvas();\n canvas.drawPicture(picture);\n surface.flush();\n const image = surface.makeImageSnapshot();\n // If we are not on the main thread or if we are on Web, we need to make the image non-texture.\n if (!isOnMainThread() || Platform.OS === \"web\") {\n return image.makeNonTextureImage();\n } else {\n return image;\n }\n};\n"],"mappings":"AAGA,SAASA,IAAI,QAAQ,SAAS;AAC9B,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,UAAU,QAAQ,oBAAoB;;AAE/C;AACA,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,SAAS;;EACT,OACG,OAAOC,QAAQ,KAAK,WAAW,IAAIA,QAAQ,KAAK,IAAI,IACrDH,QAAQ,CAACI,EAAE,KAAK,KAAK;AAEzB,CAAC;AAED,OAAO,MAAMC,aAAa,GAAG,MAAAA,CAAOC,OAAqB,EAAEC,MAAe,KAAK;EAC7E,MAAMC,QAAQ,GAAGT,IAAI,CAACU,eAAe,CAAC,CAAC;EACvC,MAAMC,MAAM,GAAGF,QAAQ,CAACG,cAAc,CAACJ,MAAM,CAAC;EAC9C,MAAMK,IAAI,GAAG,IAAIX,UAAU,CAACF,IAAI,CAAC;EACjC,MAAMa,IAAI,CAACC,MAAM,CAACP,OAAO,CAAC;EAC1BM,IAAI,CAACE,YAAY,CAACJ,MAAM,CAAC;EACzB,MAAMK,OAAO,GAAGP,QAAQ,CAACQ,wBAAwB,CAAC,CAAC;EACnDJ,IAAI,CAACK,OAAO,CAAC,CAAC;EACd,OAAOF,OAAO;AAChB,CAAC;AAED,OAAO,MAAMG,WAAW,GAAG,MAAAA,CAAOZ,OAAqB,EAAEa,IAAY,KAAK;EACxE,OAAOC,sBAAsB,CAAC,MAAMf,aAAa,CAACC,OAAO,CAAC,EAAEa,IAAI,CAAC;AACnE,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAGA,CAACL,OAAkB,EAAEI,IAAY,KAAK;EAC1E,SAAS;;EACT,MAAME,OAAO,GAAGtB,IAAI,CAACuB,OAAO,CAACC,aAAa,CAACJ,IAAI,CAACK,KAAK,EAAEL,IAAI,CAACM,MAAM,CAAE;EACpE,MAAMf,MAAM,GAAGW,OAAO,CAACK,SAAS,CAAC,CAAC;EAClChB,MAAM,CAACiB,WAAW,CAACZ,OAAO,CAAC;EAC3BM,OAAO,CAACO,KAAK,CAAC,CAAC;EACf,MAAMC,KAAK,GAAGR,OAAO,CAACS,iBAAiB,CAAC,CAAC;EACzC;EACA,IAAI,CAAC5B,cAAc,CAAC,CAAC,IAAIF,QAAQ,CAACI,EAAE,KAAK,KAAK,EAAE;IAC9C,OAAOyB,KAAK,CAACE,mBAAmB,CAAC,CAAC;EACpC,CAAC,MAAM;IACL,OAAOF,KAAK;EACd;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Skia","Platform","SkiaSGRoot","isOnMainThread","_WORKLET","OS","drawAsPicture","element","bounds","recorder","PictureRecorder","canvas","beginRecording","root","render","drawOnCanvas","picture","finishRecordingAsPicture","unmount","drawAsImage","size","drawAsImageFromPicture","surface","Surface","MakeOffscreen","width","height","getCanvas","drawPicture","flush","image","makeImageSnapshot","makeNonTextureImage"],"sources":["Offscreen.tsx"],"sourcesContent":["import type { ReactElement } from \"react\";\n\nimport type { SkPicture, SkRect, SkSize } from \"../skia/types\";\nimport { Skia } from \"../skia\";\nimport { Platform } from \"../Platform\";\nimport { SkiaSGRoot } from \"../sksg/Reconciler\";\n\nexport const isOnMainThread = () => {\n \"worklet\";\n return (\n (typeof _WORKLET !== \"undefined\" && _WORKLET === true) ||\n Platform.OS === \"web\"\n );\n};\n\nexport const drawAsPicture = async (element: ReactElement, bounds?: SkRect) => {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording(bounds);\n const root = new SkiaSGRoot(Skia);\n await root.render(element);\n root.drawOnCanvas(canvas);\n const picture = recorder.finishRecordingAsPicture();\n root.unmount();\n return picture;\n};\n\nexport const drawAsImage = async (element: ReactElement, size: SkSize) => {\n return drawAsImageFromPicture(await drawAsPicture(element), size);\n};\n\nexport const drawAsImageFromPicture = (picture: SkPicture, size: SkSize) => {\n \"worklet\";\n const surface = Skia.Surface.MakeOffscreen(size.width, size.height)!;\n const canvas = surface.getCanvas();\n canvas.drawPicture(picture);\n surface.flush();\n const image = surface.makeImageSnapshot();\n return image.makeNonTextureImage();\n};\n"],"mappings":"AAGA,SAASA,IAAI,QAAQ,SAAS;AAC9B,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,UAAU,QAAQ,oBAAoB;AAE/C,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAClC,SAAS;;EACT,OACG,OAAOC,QAAQ,KAAK,WAAW,IAAIA,QAAQ,KAAK,IAAI,IACrDH,QAAQ,CAACI,EAAE,KAAK,KAAK;AAEzB,CAAC;AAED,OAAO,MAAMC,aAAa,GAAG,MAAAA,CAAOC,OAAqB,EAAEC,MAAe,KAAK;EAC7E,MAAMC,QAAQ,GAAGT,IAAI,CAACU,eAAe,CAAC,CAAC;EACvC,MAAMC,MAAM,GAAGF,QAAQ,CAACG,cAAc,CAACJ,MAAM,CAAC;EAC9C,MAAMK,IAAI,GAAG,IAAIX,UAAU,CAACF,IAAI,CAAC;EACjC,MAAMa,IAAI,CAACC,MAAM,CAACP,OAAO,CAAC;EAC1BM,IAAI,CAACE,YAAY,CAACJ,MAAM,CAAC;EACzB,MAAMK,OAAO,GAAGP,QAAQ,CAACQ,wBAAwB,CAAC,CAAC;EACnDJ,IAAI,CAACK,OAAO,CAAC,CAAC;EACd,OAAOF,OAAO;AAChB,CAAC;AAED,OAAO,MAAMG,WAAW,GAAG,MAAAA,CAAOZ,OAAqB,EAAEa,IAAY,KAAK;EACxE,OAAOC,sBAAsB,CAAC,MAAMf,aAAa,CAACC,OAAO,CAAC,EAAEa,IAAI,CAAC;AACnE,CAAC;AAED,OAAO,MAAMC,sBAAsB,GAAGA,CAACL,OAAkB,EAAEI,IAAY,KAAK;EAC1E,SAAS;;EACT,MAAME,OAAO,GAAGtB,IAAI,CAACuB,OAAO,CAACC,aAAa,CAACJ,IAAI,CAACK,KAAK,EAAEL,IAAI,CAACM,MAAM,CAAE;EACpE,MAAMf,MAAM,GAAGW,OAAO,CAACK,SAAS,CAAC,CAAC;EAClChB,MAAM,CAACiB,WAAW,CAACZ,OAAO,CAAC;EAC3BM,OAAO,CAACO,KAAK,CAAC,CAAC;EACf,MAAMC,KAAK,GAAGR,OAAO,CAACS,iBAAiB,CAAC,CAAC;EACzC,OAAOD,KAAK,CAACE,mBAAmB,CAAC,CAAC;AACpC,CAAC","ignoreList":[]}
@@ -3,10 +3,17 @@ export const useSVG = (source, onError) => {
3
3
  if (source === null || source === undefined) {
4
4
  throw new Error(`Invalid svg data source. Got: ${source}`);
5
5
  }
6
- if (typeof source !== "object" || source instanceof Uint8Array || !("uri" in source) || typeof source.uri !== "string" || !("default" in source) || typeof source.default !== "string") {
6
+ let src;
7
+ if (typeof source === "string") {
8
+ src = source;
9
+ } else if (typeof source === "object" && "default" in source && typeof source.default === "string") {
10
+ src = source.default;
11
+ } else if (typeof source === "object" && "uri" in source) {
12
+ src = source.uri;
13
+ } else {
7
14
  throw new Error(`Invalid svg data source. Make sure that the source resolves to a string. Got: ${JSON.stringify(source, null, 2)}`);
8
15
  }
9
- const svg = Skia.SVG.MakeFromString(source.default);
16
+ const svg = Skia.SVG.MakeFromString(src);
10
17
  if (svg === null && onError !== undefined) {
11
18
  onError(new Error("Failed to create SVG from source."));
12
19
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Skia","useSVG","source","onError","undefined","Error","Uint8Array","uri","default","JSON","stringify","svg","SVG","MakeFromString"],"sources":["SVG.web.ts"],"sourcesContent":["import { Skia } from \"../Skia\";\nimport type { DataSourceParam } from \"../types\";\n\nexport const useSVG = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => {\n if (source === null || source === undefined) {\n throw new Error(`Invalid svg data source. Got: ${source}`);\n }\n if (\n typeof source !== \"object\" ||\n source instanceof Uint8Array ||\n !(\"uri\" in source) ||\n typeof source.uri !== \"string\" ||\n !(\"default\" in source) ||\n typeof source.default !== \"string\"\n ) {\n throw new Error(\n `Invalid svg data source. Make sure that the source resolves to a string. Got: ${JSON.stringify(\n source,\n null,\n 2\n )}`\n );\n }\n const svg = Skia.SVG.MakeFromString(source.default);\n if (svg === null && onError !== undefined) {\n onError(new Error(\"Failed to create SVG from source.\"));\n }\n return svg;\n};\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,SAAS;AAG9B,OAAO,MAAMC,MAAM,GAAGA,CACpBC,MAAuB,EACvBC,OAA8B,KAC3B;EACH,IAAID,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAKE,SAAS,EAAE;IAC3C,MAAM,IAAIC,KAAK,CAAC,iCAAiCH,MAAM,EAAE,CAAC;EAC5D;EACA,IACE,OAAOA,MAAM,KAAK,QAAQ,IAC1BA,MAAM,YAAYI,UAAU,IAC5B,EAAE,KAAK,IAAIJ,MAAM,CAAC,IAClB,OAAOA,MAAM,CAACK,GAAG,KAAK,QAAQ,IAC9B,EAAE,SAAS,IAAIL,MAAM,CAAC,IACtB,OAAOA,MAAM,CAACM,OAAO,KAAK,QAAQ,EAClC;IACA,MAAM,IAAIH,KAAK,CACb,iFAAiFI,IAAI,CAACC,SAAS,CAC7FR,MAAM,EACN,IAAI,EACJ,CACF,CAAC,EACH,CAAC;EACH;EACA,MAAMS,GAAG,GAAGX,IAAI,CAACY,GAAG,CAACC,cAAc,CAACX,MAAM,CAACM,OAAO,CAAC;EACnD,IAAIG,GAAG,KAAK,IAAI,IAAIR,OAAO,KAAKC,SAAS,EAAE;IACzCD,OAAO,CAAC,IAAIE,KAAK,CAAC,mCAAmC,CAAC,CAAC;EACzD;EACA,OAAOM,GAAG;AACZ,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Skia","useSVG","source","onError","undefined","Error","src","default","uri","JSON","stringify","svg","SVG","MakeFromString"],"sources":["SVG.web.ts"],"sourcesContent":["import { Skia } from \"../Skia\";\nimport type { DataSourceParam } from \"../types\";\n\nexport const useSVG = (\n source: DataSourceParam,\n onError?: (err: Error) => void\n) => {\n if (source === null || source === undefined) {\n throw new Error(`Invalid svg data source. Got: ${source}`);\n }\n let src: string;\n if (typeof source === \"string\") {\n src = source;\n } else if (\n typeof source === \"object\" &&\n \"default\" in source &&\n typeof source.default === \"string\"\n ) {\n src = source.default;\n } else if (typeof source === \"object\" && \"uri\" in source) {\n src = source.uri;\n } else {\n throw new Error(\n `Invalid svg data source. Make sure that the source resolves to a string. Got: ${JSON.stringify(\n source,\n null,\n 2\n )}`\n );\n }\n const svg = Skia.SVG.MakeFromString(src);\n if (svg === null && onError !== undefined) {\n onError(new Error(\"Failed to create SVG from source.\"));\n }\n return svg;\n};\n"],"mappings":"AAAA,SAASA,IAAI,QAAQ,SAAS;AAG9B,OAAO,MAAMC,MAAM,GAAGA,CACpBC,MAAuB,EACvBC,OAA8B,KAC3B;EACH,IAAID,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAKE,SAAS,EAAE;IAC3C,MAAM,IAAIC,KAAK,CAAC,iCAAiCH,MAAM,EAAE,CAAC;EAC5D;EACA,IAAII,GAAW;EACf,IAAI,OAAOJ,MAAM,KAAK,QAAQ,EAAE;IAC9BI,GAAG,GAAGJ,MAAM;EACd,CAAC,MAAM,IACL,OAAOA,MAAM,KAAK,QAAQ,IAC1B,SAAS,IAAIA,MAAM,IACnB,OAAOA,MAAM,CAACK,OAAO,KAAK,QAAQ,EAClC;IACAD,GAAG,GAAGJ,MAAM,CAACK,OAAO;EACtB,CAAC,MAAM,IAAI,OAAOL,MAAM,KAAK,QAAQ,IAAI,KAAK,IAAIA,MAAM,EAAE;IACxDI,GAAG,GAAGJ,MAAM,CAACM,GAAG;EAClB,CAAC,MAAM;IACL,MAAM,IAAIH,KAAK,CACb,iFAAiFI,IAAI,CAACC,SAAS,CAC7FR,MAAM,EACN,IAAI,EACJ,CACF,CAAC,EACH,CAAC;EACH;EACA,MAAMS,GAAG,GAAGX,IAAI,CAACY,GAAG,CAACC,cAAc,CAACP,GAAG,CAAC;EACxC,IAAIK,GAAG,KAAK,IAAI,IAAIR,OAAO,KAAKC,SAAS,EAAE;IACzCD,OAAO,CAAC,IAAIE,KAAK,CAAC,mCAAmC,CAAC,CAAC;EACzD;EACA,OAAOM,GAAG;AACZ,CAAC","ignoreList":[]}
@@ -2,6 +2,10 @@ import type { SharedValue } from "react-native-reanimated";
2
2
  import type { BaseRecorder, JsiRecorder, Skia } from "../../skia/types";
3
3
  import type { PaintProps, NodeType, BlurMaskFilterProps, CTMProps, BoxProps, BoxShadowProps, ImageProps, CircleProps, PointsProps, PathProps, RectProps, RoundedRectProps, OvalProps, LineProps, PatchProps, VerticesProps, DiffRectProps, TextProps, TextPathProps, TextBlobProps, GlyphsProps, PictureProps, ImageSVGProps, ParagraphProps, AtlasProps, SkottieProps } from "../../dom/types";
4
4
  import type { AnimatedProps } from "../../renderer";
5
+ /**
6
+ * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.
7
+ * It will crash otherwise on Ganesh (iOS/Android).
8
+ */
5
9
  export declare class ReanimatedRecorder implements BaseRecorder {
6
10
  private values;
7
11
  private recorder;
@@ -2,6 +2,11 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
2
2
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
3
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
4
  import { isSharedValue } from "../utils";
5
+
6
+ /**
7
+ * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.
8
+ * It will crash otherwise on Ganesh (iOS/Android).
9
+ */
5
10
  export class ReanimatedRecorder {
6
11
  constructor(Skia) {
7
12
  _defineProperty(this, "values", new Set());
@@ -1 +1 @@
1
- {"version":3,"names":["isSharedValue","ReanimatedRecorder","constructor","Skia","_defineProperty","Set","recorder","Recorder","processAnimationValues","props","Object","values","forEach","value","has","name","size","add","getRecorder","getSharedValues","Array","from","saveGroup","restoreGroup","savePaint","standalone","restorePaint","restorePaintDeclaration","materializePaint","pushPathEffect","pathEffectType","pushImageFilter","imageFilterType","pushColorFilter","colorFilterType","pushShader","shaderType","children","pushBlurMaskFilter","composePathEffect","composeColorFilter","composeImageFilter","saveCTM","restoreCTM","drawPaint","saveLayer","saveBackdropFilter","drawBox","boxProps","shadows","shadow","map","s","drawImage","drawCircle","drawPoints","drawPath","drawRect","drawRRect","drawOval","drawLine","drawPatch","drawVertices","drawDiffRect","drawText","drawTextPath","drawTextBlob","drawGlyphs","drawPicture","drawImageSVG","drawParagraph","drawAtlas","drawSkottie"],"sources":["ReanimatedRecorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport type { BaseRecorder, JsiRecorder, Skia } from \"../../skia/types\";\nimport type {\n PaintProps,\n NodeType,\n BlurMaskFilterProps,\n CTMProps,\n BoxProps,\n BoxShadowProps,\n ImageProps,\n CircleProps,\n PointsProps,\n PathProps,\n RectProps,\n RoundedRectProps,\n OvalProps,\n LineProps,\n PatchProps,\n VerticesProps,\n DiffRectProps,\n TextProps,\n TextPathProps,\n TextBlobProps,\n GlyphsProps,\n PictureProps,\n ImageSVGProps,\n ParagraphProps,\n AtlasProps,\n SkottieProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer\";\nimport { isSharedValue } from \"../utils\";\n\nexport class ReanimatedRecorder implements BaseRecorder {\n private values = new Set<SharedValue<unknown>>();\n private recorder: JsiRecorder;\n\n constructor(Skia: Skia) {\n this.recorder = Skia.Recorder();\n }\n\n private processAnimationValues(props?: Record<string, unknown>) {\n if (!props) {\n return;\n }\n Object.values(props).forEach((value) => {\n if (isSharedValue(value) && !this.values.has(value)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n value.name = `variable${this.values.size}`;\n this.values.add(value as SharedValue<unknown>);\n }\n });\n }\n\n getRecorder() {\n return this.recorder;\n }\n\n getSharedValues() {\n return Array.from(this.values);\n }\n\n saveGroup(): void {\n this.recorder.saveGroup();\n }\n\n restoreGroup(): void {\n this.recorder.restoreGroup();\n }\n\n savePaint(props: AnimatedProps<PaintProps>, standalone: boolean): void {\n this.processAnimationValues(props);\n this.recorder.savePaint(props, standalone);\n }\n\n restorePaint(): void {\n this.recorder.restorePaint();\n }\n\n restorePaintDeclaration(): void {\n this.recorder.restorePaintDeclaration();\n }\n\n materializePaint(): void {\n this.recorder.materializePaint();\n }\n\n pushPathEffect(\n pathEffectType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushPathEffect(pathEffectType, props);\n }\n\n pushImageFilter(\n imageFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushImageFilter(imageFilterType, props);\n }\n\n pushColorFilter(\n colorFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushColorFilter(colorFilterType, props);\n }\n\n pushShader(\n shaderType: NodeType,\n props: AnimatedProps<unknown>,\n children: number\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushShader(shaderType, props, children);\n }\n\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>): void {\n this.processAnimationValues(props);\n this.recorder.pushBlurMaskFilter(props);\n }\n\n composePathEffect(): void {\n this.recorder.composePathEffect();\n }\n\n composeColorFilter(): void {\n this.recorder.composeColorFilter();\n }\n\n composeImageFilter(): void {\n this.recorder.composeImageFilter();\n }\n\n saveCTM(props: AnimatedProps<CTMProps>): void {\n this.processAnimationValues(props);\n this.recorder.saveCTM(props);\n }\n\n restoreCTM(): void {\n this.recorder.restoreCTM();\n }\n\n drawPaint(): void {\n this.recorder.drawPaint();\n }\n\n saveLayer(): void {\n this.recorder.saveLayer();\n }\n\n saveBackdropFilter(): void {\n this.recorder.saveBackdropFilter();\n }\n\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n }[]\n ): void {\n this.processAnimationValues(boxProps);\n shadows.forEach((shadow) => {\n this.processAnimationValues(\n shadow.props as AnimatedProps<BoxShadowProps>\n );\n });\n this.recorder.drawBox(\n boxProps,\n // TODO: Fix this type BaseRecorder.drawBox()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shadows.map((s) => s.props)\n );\n }\n\n drawImage(props: AnimatedProps<ImageProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImage(props);\n }\n\n drawCircle(props: AnimatedProps<CircleProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawCircle(props);\n }\n\n drawPoints(props: AnimatedProps<PointsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPoints(props);\n }\n\n drawPath(props: AnimatedProps<PathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPath(props);\n }\n\n drawRect(props: AnimatedProps<RectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRect(props);\n }\n\n drawRRect(props: AnimatedProps<RoundedRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRRect(props);\n }\n\n drawOval(props: AnimatedProps<OvalProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawOval(props);\n }\n\n drawLine(props: AnimatedProps<LineProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawLine(props);\n }\n\n drawPatch(props: AnimatedProps<PatchProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPatch(props);\n }\n\n drawVertices(props: AnimatedProps<VerticesProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawVertices(props);\n }\n\n drawDiffRect(props: AnimatedProps<DiffRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawDiffRect(props);\n }\n\n drawText(props: AnimatedProps<TextProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawText(props);\n }\n\n drawTextPath(props: AnimatedProps<TextPathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextPath(props);\n }\n\n drawTextBlob(props: AnimatedProps<TextBlobProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextBlob(props);\n }\n\n drawGlyphs(props: AnimatedProps<GlyphsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawGlyphs(props);\n }\n\n drawPicture(props: AnimatedProps<PictureProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPicture(props);\n }\n\n drawImageSVG(props: AnimatedProps<ImageSVGProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImageSVG(props);\n }\n\n drawParagraph(props: AnimatedProps<ParagraphProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawParagraph(props);\n }\n\n drawAtlas(props: AnimatedProps<AtlasProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawAtlas(props);\n }\n\n drawSkottie(props: AnimatedProps<SkottieProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawSkottie(props);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isSharedValue","ReanimatedRecorder","constructor","Skia","_defineProperty","Set","recorder","Recorder","processAnimationValues","props","Object","values","forEach","value","has","name","size","add","getRecorder","getSharedValues","Array","from","saveGroup","restoreGroup","savePaint","standalone","restorePaint","restorePaintDeclaration","materializePaint","pushPathEffect","pathEffectType","pushImageFilter","imageFilterType","pushColorFilter","colorFilterType","pushShader","shaderType","children","pushBlurMaskFilter","composePathEffect","composeColorFilter","composeImageFilter","saveCTM","restoreCTM","drawPaint","saveLayer","saveBackdropFilter","drawBox","boxProps","shadows","shadow","map","s","drawImage","drawCircle","drawPoints","drawPath","drawRect","drawRRect","drawOval","drawLine","drawPatch","drawVertices","drawDiffRect","drawText","drawTextPath","drawTextBlob","drawGlyphs","drawPicture","drawImageSVG","drawParagraph","drawAtlas","drawSkottie"],"sources":["ReanimatedRecorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport type { BaseRecorder, JsiRecorder, Skia } from \"../../skia/types\";\nimport type {\n PaintProps,\n NodeType,\n BlurMaskFilterProps,\n CTMProps,\n BoxProps,\n BoxShadowProps,\n ImageProps,\n CircleProps,\n PointsProps,\n PathProps,\n RectProps,\n RoundedRectProps,\n OvalProps,\n LineProps,\n PatchProps,\n VerticesProps,\n DiffRectProps,\n TextProps,\n TextPathProps,\n TextBlobProps,\n GlyphsProps,\n PictureProps,\n ImageSVGProps,\n ParagraphProps,\n AtlasProps,\n SkottieProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer\";\nimport { isSharedValue } from \"../utils\";\n\n/**\n * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.\n * It will crash otherwise on Ganesh (iOS/Android).\n */\nexport class ReanimatedRecorder implements BaseRecorder {\n private values = new Set<SharedValue<unknown>>();\n private recorder: JsiRecorder;\n\n constructor(Skia: Skia) {\n this.recorder = Skia.Recorder();\n }\n\n private processAnimationValues(props?: Record<string, unknown>) {\n if (!props) {\n return;\n }\n Object.values(props).forEach((value) => {\n if (isSharedValue(value) && !this.values.has(value)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n value.name = `variable${this.values.size}`;\n this.values.add(value as SharedValue<unknown>);\n }\n });\n }\n\n getRecorder() {\n return this.recorder;\n }\n\n getSharedValues() {\n return Array.from(this.values);\n }\n\n saveGroup(): void {\n this.recorder.saveGroup();\n }\n\n restoreGroup(): void {\n this.recorder.restoreGroup();\n }\n\n savePaint(props: AnimatedProps<PaintProps>, standalone: boolean): void {\n this.processAnimationValues(props);\n this.recorder.savePaint(props, standalone);\n }\n\n restorePaint(): void {\n this.recorder.restorePaint();\n }\n\n restorePaintDeclaration(): void {\n this.recorder.restorePaintDeclaration();\n }\n\n materializePaint(): void {\n this.recorder.materializePaint();\n }\n\n pushPathEffect(\n pathEffectType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushPathEffect(pathEffectType, props);\n }\n\n pushImageFilter(\n imageFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushImageFilter(imageFilterType, props);\n }\n\n pushColorFilter(\n colorFilterType: NodeType,\n props: AnimatedProps<unknown>\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushColorFilter(colorFilterType, props);\n }\n\n pushShader(\n shaderType: NodeType,\n props: AnimatedProps<unknown>,\n children: number\n ): void {\n this.processAnimationValues(props);\n this.recorder.pushShader(shaderType, props, children);\n }\n\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>): void {\n this.processAnimationValues(props);\n this.recorder.pushBlurMaskFilter(props);\n }\n\n composePathEffect(): void {\n this.recorder.composePathEffect();\n }\n\n composeColorFilter(): void {\n this.recorder.composeColorFilter();\n }\n\n composeImageFilter(): void {\n this.recorder.composeImageFilter();\n }\n\n saveCTM(props: AnimatedProps<CTMProps>): void {\n this.processAnimationValues(props);\n this.recorder.saveCTM(props);\n }\n\n restoreCTM(): void {\n this.recorder.restoreCTM();\n }\n\n drawPaint(): void {\n this.recorder.drawPaint();\n }\n\n saveLayer(): void {\n this.recorder.saveLayer();\n }\n\n saveBackdropFilter(): void {\n this.recorder.saveBackdropFilter();\n }\n\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n }[]\n ): void {\n this.processAnimationValues(boxProps);\n shadows.forEach((shadow) => {\n this.processAnimationValues(\n shadow.props as AnimatedProps<BoxShadowProps>\n );\n });\n this.recorder.drawBox(\n boxProps,\n // TODO: Fix this type BaseRecorder.drawBox()\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shadows.map((s) => s.props)\n );\n }\n\n drawImage(props: AnimatedProps<ImageProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImage(props);\n }\n\n drawCircle(props: AnimatedProps<CircleProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawCircle(props);\n }\n\n drawPoints(props: AnimatedProps<PointsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPoints(props);\n }\n\n drawPath(props: AnimatedProps<PathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPath(props);\n }\n\n drawRect(props: AnimatedProps<RectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRect(props);\n }\n\n drawRRect(props: AnimatedProps<RoundedRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawRRect(props);\n }\n\n drawOval(props: AnimatedProps<OvalProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawOval(props);\n }\n\n drawLine(props: AnimatedProps<LineProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawLine(props);\n }\n\n drawPatch(props: AnimatedProps<PatchProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPatch(props);\n }\n\n drawVertices(props: AnimatedProps<VerticesProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawVertices(props);\n }\n\n drawDiffRect(props: AnimatedProps<DiffRectProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawDiffRect(props);\n }\n\n drawText(props: AnimatedProps<TextProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawText(props);\n }\n\n drawTextPath(props: AnimatedProps<TextPathProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextPath(props);\n }\n\n drawTextBlob(props: AnimatedProps<TextBlobProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawTextBlob(props);\n }\n\n drawGlyphs(props: AnimatedProps<GlyphsProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawGlyphs(props);\n }\n\n drawPicture(props: AnimatedProps<PictureProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawPicture(props);\n }\n\n drawImageSVG(props: AnimatedProps<ImageSVGProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawImageSVG(props);\n }\n\n drawParagraph(props: AnimatedProps<ParagraphProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawParagraph(props);\n }\n\n drawAtlas(props: AnimatedProps<AtlasProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawAtlas(props);\n }\n\n drawSkottie(props: AnimatedProps<SkottieProps>): void {\n this.processAnimationValues(props);\n this.recorder.drawSkottie(props);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,8 @@
1
1
  export const __esModule: boolean;
2
+ /**
3
+ * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.
4
+ * It will crash otherwise on Ganesh (iOS/Android).
5
+ */
2
6
  export class ReanimatedRecorder {
3
7
  constructor(Skia: any);
4
8
  recorder: any;
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Currently the recorder only work if the GPU resources (e.g Images) are owned by the main thread.
3
+ * It will crash otherwise on Ganesh (iOS/Android).
4
+ */
1
5
  export class ReanimatedRecorder {
2
6
  constructor(Skia: any);
3
7
  recorder: any;