@shopify/react-native-skia 2.6.9 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/android/cpp/jni/include/JniSkiaBaseView.h +6 -4
  2. package/android/cpp/jni/include/JniSkiaPictureView.h +8 -6
  3. package/android/cpp/rnskia-android/OpenGLContext.h +10 -1
  4. package/android/cpp/rnskia-android/RNSkAndroidView.h +8 -8
  5. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +9 -5
  6. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.h +4 -2
  7. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +48 -12
  8. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +5 -0
  9. package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java +2 -2
  10. package/android/src/main/java/com/shopify/reactnative/skia/ViewScreenshotService.java +11 -7
  11. package/apple/MetalContext.h +7 -6
  12. package/apple/MetalLayerColorSpace.mm +39 -0
  13. package/apple/MetalLayerColorSpaceUtils.h +34 -0
  14. package/apple/MetalWindowContext.h +3 -1
  15. package/apple/MetalWindowContext.mm +9 -8
  16. package/apple/RNSkAppleView.h +6 -0
  17. package/apple/RNSkMetalCanvasProvider.h +2 -0
  18. package/apple/RNSkMetalCanvasProvider.mm +15 -2
  19. package/apple/SkiaPictureView.mm +1 -0
  20. package/apple/SkiaPictureViewManager.mm +5 -0
  21. package/apple/SkiaUIView.h +1 -0
  22. package/apple/SkiaUIView.mm +9 -0
  23. package/cpp/api/JsiSkParagraph.h +114 -0
  24. package/cpp/api/JsiSkSurface.h +8 -2
  25. package/cpp/rnskia/RNDawnContext.h +4 -3
  26. package/cpp/rnskia/RNDawnUtils.h +25 -6
  27. package/cpp/rnskia/RNDawnWindowContext.h +44 -10
  28. package/cpp/rnskia/RNMetalLayerColorSpace.h +16 -0
  29. package/cpp/rnskia/RNSkJsiViewApi.h +46 -24
  30. package/cpp/rnwgpu/SurfaceRegistry.h +10 -4
  31. package/lib/commonjs/Platform/Platform.web.js +2 -90
  32. package/lib/commonjs/Platform/Platform.web.js.map +1 -1
  33. package/lib/commonjs/external/reanimated/useVideoLoading.js +11 -2
  34. package/lib/commonjs/external/reanimated/useVideoLoading.js.map +1 -1
  35. package/lib/commonjs/mock/index.js +1 -0
  36. package/lib/commonjs/mock/index.js.map +1 -1
  37. package/lib/commonjs/renderer/Canvas.d.ts +10 -1
  38. package/lib/commonjs/renderer/Canvas.js +2 -0
  39. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  40. package/lib/commonjs/skia/core/SVG.web.js +4 -5
  41. package/lib/commonjs/skia/core/SVG.web.js.map +1 -1
  42. package/lib/commonjs/skia/types/Paragraph/Paragraph.d.ts +62 -0
  43. package/lib/commonjs/skia/types/Paragraph/Paragraph.js.map +1 -1
  44. package/lib/commonjs/skia/types/Surface/Surface.d.ts +5 -1
  45. package/lib/commonjs/skia/types/Surface/Surface.js.map +1 -1
  46. package/lib/commonjs/skia/web/Host.js +7 -0
  47. package/lib/commonjs/skia/web/Host.js.map +1 -1
  48. package/lib/commonjs/skia/web/JsiSkPaint.js +5 -0
  49. package/lib/commonjs/skia/web/JsiSkPaint.js.map +1 -1
  50. package/lib/commonjs/skia/web/JsiSkParagraph.d.ts +3 -1
  51. package/lib/commonjs/skia/web/JsiSkParagraph.js +6 -0
  52. package/lib/commonjs/skia/web/JsiSkParagraph.js.map +1 -1
  53. package/lib/commonjs/skia/web/JsiSkParagraphStyle.js +14 -3
  54. package/lib/commonjs/skia/web/JsiSkParagraphStyle.js.map +1 -1
  55. package/lib/commonjs/skia/web/JsiSkSurface.d.ts +1 -1
  56. package/lib/commonjs/skia/web/JsiSkSurface.js +2 -1
  57. package/lib/commonjs/skia/web/JsiSkSurface.js.map +1 -1
  58. package/lib/commonjs/sksg/Container.native.d.ts +1 -0
  59. package/lib/commonjs/sksg/Container.native.js +11 -0
  60. package/lib/commonjs/sksg/Container.native.js.map +1 -1
  61. package/lib/commonjs/sksg/Container.web.d.ts +1 -0
  62. package/lib/commonjs/sksg/Container.web.js +45 -3
  63. package/lib/commonjs/sksg/Container.web.js.map +1 -1
  64. package/lib/commonjs/sksg/Recorder/DrawingContext.d.ts +2 -0
  65. package/lib/commonjs/sksg/Recorder/DrawingContext.js +22 -6
  66. package/lib/commonjs/sksg/Recorder/DrawingContext.js.map +1 -1
  67. package/lib/commonjs/sksg/Recorder/FrameScope.d.ts +18 -0
  68. package/lib/commonjs/sksg/Recorder/FrameScope.js +66 -0
  69. package/lib/commonjs/sksg/Recorder/FrameScope.js.map +1 -0
  70. package/lib/commonjs/sksg/Recorder/FrameScope.native.d.ts +10 -0
  71. package/lib/commonjs/sksg/Recorder/FrameScope.native.js +26 -0
  72. package/lib/commonjs/sksg/Recorder/FrameScope.native.js.map +1 -0
  73. package/lib/commonjs/sksg/Recorder/Player.js +1 -2
  74. package/lib/commonjs/sksg/Recorder/Player.js.map +1 -1
  75. package/lib/commonjs/sksg/Recorder/Recorder.d.ts +3 -1
  76. package/lib/commonjs/sksg/Recorder/Recorder.js +12 -1
  77. package/lib/commonjs/sksg/Recorder/Recorder.js.map +1 -1
  78. package/lib/commonjs/sksg/Recorder/commands/Drawing.js +3 -3
  79. package/lib/commonjs/sksg/Recorder/commands/Drawing.js.map +1 -1
  80. package/lib/commonjs/sksg/Recorder/commands/Shaders.js +3 -3
  81. package/lib/commonjs/sksg/Recorder/commands/Shaders.js.map +1 -1
  82. package/lib/commonjs/sksg/StaticContainer.d.ts +1 -0
  83. package/lib/commonjs/sksg/StaticContainer.js +27 -1
  84. package/lib/commonjs/sksg/StaticContainer.js.map +1 -1
  85. package/lib/commonjs/specs/NativeSkiaModule.web.d.ts +2 -0
  86. package/lib/commonjs/specs/NativeSkiaModule.web.js +32 -7
  87. package/lib/commonjs/specs/NativeSkiaModule.web.js.map +1 -1
  88. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.d.ts +1 -0
  89. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  90. package/lib/commonjs/views/SkiaPictureView.js +2 -0
  91. package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
  92. package/lib/commonjs/views/SkiaPictureView.web.js +279 -94
  93. package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
  94. package/lib/commonjs/views/formats.d.ts +1 -0
  95. package/lib/commonjs/views/formats.js +28 -0
  96. package/lib/commonjs/views/formats.js.map +1 -0
  97. package/lib/commonjs/views/index.d.ts +1 -0
  98. package/lib/commonjs/views/index.js +11 -0
  99. package/lib/commonjs/views/index.js.map +1 -1
  100. package/lib/commonjs/views/types.d.ts +6 -0
  101. package/lib/commonjs/views/types.js.map +1 -1
  102. package/lib/module/Platform/Platform.web.js +3 -91
  103. package/lib/module/Platform/Platform.web.js.map +1 -1
  104. package/lib/module/external/reanimated/useVideoLoading.js +12 -2
  105. package/lib/module/external/reanimated/useVideoLoading.js.map +1 -1
  106. package/lib/module/mock/index.js +1 -0
  107. package/lib/module/mock/index.js.map +1 -1
  108. package/lib/module/renderer/Canvas.d.ts +10 -1
  109. package/lib/module/renderer/Canvas.js +2 -0
  110. package/lib/module/renderer/Canvas.js.map +1 -1
  111. package/lib/module/skia/core/SVG.web.js +4 -5
  112. package/lib/module/skia/core/SVG.web.js.map +1 -1
  113. package/lib/module/skia/types/Paragraph/Paragraph.d.ts +62 -0
  114. package/lib/module/skia/types/Paragraph/Paragraph.js.map +1 -1
  115. package/lib/module/skia/types/Surface/Surface.d.ts +5 -1
  116. package/lib/module/skia/types/Surface/Surface.js.map +1 -1
  117. package/lib/module/skia/web/Host.js +7 -0
  118. package/lib/module/skia/web/Host.js.map +1 -1
  119. package/lib/module/skia/web/JsiSkPaint.js +5 -0
  120. package/lib/module/skia/web/JsiSkPaint.js.map +1 -1
  121. package/lib/module/skia/web/JsiSkParagraph.d.ts +3 -1
  122. package/lib/module/skia/web/JsiSkParagraph.js +7 -1
  123. package/lib/module/skia/web/JsiSkParagraph.js.map +1 -1
  124. package/lib/module/skia/web/JsiSkParagraphStyle.js +14 -3
  125. package/lib/module/skia/web/JsiSkParagraphStyle.js.map +1 -1
  126. package/lib/module/skia/web/JsiSkSurface.d.ts +1 -1
  127. package/lib/module/skia/web/JsiSkSurface.js +2 -1
  128. package/lib/module/skia/web/JsiSkSurface.js.map +1 -1
  129. package/lib/module/sksg/Container.native.d.ts +1 -0
  130. package/lib/module/sksg/Container.native.js +11 -0
  131. package/lib/module/sksg/Container.native.js.map +1 -1
  132. package/lib/module/sksg/Container.web.d.ts +1 -0
  133. package/lib/module/sksg/Container.web.js +46 -4
  134. package/lib/module/sksg/Container.web.js.map +1 -1
  135. package/lib/module/sksg/Recorder/DrawingContext.d.ts +2 -0
  136. package/lib/module/sksg/Recorder/DrawingContext.js +22 -6
  137. package/lib/module/sksg/Recorder/DrawingContext.js.map +1 -1
  138. package/lib/module/sksg/Recorder/FrameScope.d.ts +18 -0
  139. package/lib/module/sksg/Recorder/FrameScope.js +59 -0
  140. package/lib/module/sksg/Recorder/FrameScope.js.map +1 -0
  141. package/lib/module/sksg/Recorder/FrameScope.native.d.ts +10 -0
  142. package/lib/module/sksg/Recorder/FrameScope.native.js +19 -0
  143. package/lib/module/sksg/Recorder/FrameScope.native.js.map +1 -0
  144. package/lib/module/sksg/Recorder/Player.js +1 -2
  145. package/lib/module/sksg/Recorder/Player.js.map +1 -1
  146. package/lib/module/sksg/Recorder/Recorder.d.ts +3 -1
  147. package/lib/module/sksg/Recorder/Recorder.js +10 -0
  148. package/lib/module/sksg/Recorder/Recorder.js.map +1 -1
  149. package/lib/module/sksg/Recorder/commands/Drawing.js +3 -3
  150. package/lib/module/sksg/Recorder/commands/Drawing.js.map +1 -1
  151. package/lib/module/sksg/Recorder/commands/Shaders.js +3 -3
  152. package/lib/module/sksg/Recorder/commands/Shaders.js.map +1 -1
  153. package/lib/module/sksg/StaticContainer.d.ts +1 -0
  154. package/lib/module/sksg/StaticContainer.js +28 -2
  155. package/lib/module/sksg/StaticContainer.js.map +1 -1
  156. package/lib/module/specs/NativeSkiaModule.web.d.ts +2 -0
  157. package/lib/module/specs/NativeSkiaModule.web.js +32 -7
  158. package/lib/module/specs/NativeSkiaModule.web.js.map +1 -1
  159. package/lib/module/specs/SkiaPictureViewNativeComponent.d.ts +1 -0
  160. package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  161. package/lib/module/views/SkiaPictureView.js +2 -0
  162. package/lib/module/views/SkiaPictureView.js.map +1 -1
  163. package/lib/module/views/SkiaPictureView.web.js +280 -95
  164. package/lib/module/views/SkiaPictureView.web.js.map +1 -1
  165. package/lib/module/views/formats.d.ts +1 -0
  166. package/lib/module/views/formats.js +22 -0
  167. package/lib/module/views/formats.js.map +1 -0
  168. package/lib/module/views/index.d.ts +1 -0
  169. package/lib/module/views/index.js +1 -0
  170. package/lib/module/views/index.js.map +1 -1
  171. package/lib/module/views/types.d.ts +6 -0
  172. package/lib/module/views/types.js.map +1 -1
  173. package/lib/typescript/lib/commonjs/Platform/Platform.web.d.ts +1 -2
  174. package/lib/typescript/lib/commonjs/mock/index.d.ts +1 -0
  175. package/lib/typescript/lib/commonjs/renderer/Canvas.d.ts +2 -1
  176. package/lib/typescript/lib/commonjs/skia/web/JsiSkParagraph.d.ts +2 -0
  177. package/lib/typescript/lib/commonjs/skia/web/JsiSkSurface.d.ts +1 -1
  178. package/lib/typescript/lib/commonjs/sksg/Container.native.d.ts +1 -1
  179. package/lib/typescript/lib/commonjs/sksg/Container.web.d.ts +3 -3
  180. package/lib/typescript/lib/commonjs/sksg/Recorder/DrawingContext.d.ts +2 -0
  181. package/lib/typescript/lib/commonjs/sksg/Recorder/FrameScope.d.ts +17 -0
  182. package/lib/typescript/lib/commonjs/sksg/Recorder/FrameScope.native.d.ts +13 -0
  183. package/lib/typescript/lib/commonjs/sksg/Recorder/Recorder.d.ts +1 -0
  184. package/lib/typescript/lib/commonjs/sksg/StaticContainer.d.ts +2 -2
  185. package/lib/typescript/lib/commonjs/views/formats.d.ts +2 -0
  186. package/lib/typescript/lib/module/Platform/Platform.web.d.ts +1 -3
  187. package/lib/typescript/lib/module/mock/index.d.ts +2 -2
  188. package/lib/typescript/lib/module/renderer/Canvas.d.ts +2 -1
  189. package/lib/typescript/lib/module/skia/web/JsiSkParagraph.d.ts +2 -0
  190. package/lib/typescript/lib/module/skia/web/JsiSkSurface.d.ts +1 -1
  191. package/lib/typescript/lib/module/sksg/Container.native.d.ts +1 -1
  192. package/lib/typescript/lib/module/sksg/Container.web.d.ts +3 -3
  193. package/lib/typescript/lib/module/sksg/Recorder/DrawingContext.d.ts +2 -0
  194. package/lib/typescript/lib/module/sksg/Recorder/FrameScope.d.ts +5 -0
  195. package/lib/typescript/lib/module/sksg/Recorder/FrameScope.native.d.ts +5 -0
  196. package/lib/typescript/lib/module/sksg/Recorder/Recorder.d.ts +1 -0
  197. package/lib/typescript/lib/module/sksg/StaticContainer.d.ts +2 -2
  198. package/lib/typescript/lib/module/views/formats.d.ts +1 -0
  199. package/lib/typescript/lib/module/views/index.d.ts +1 -0
  200. package/lib/typescript/src/renderer/Canvas.d.ts +10 -1
  201. package/lib/typescript/src/skia/types/Paragraph/Paragraph.d.ts +62 -0
  202. package/lib/typescript/src/skia/types/Surface/Surface.d.ts +5 -1
  203. package/lib/typescript/src/skia/web/JsiSkParagraph.d.ts +3 -1
  204. package/lib/typescript/src/skia/web/JsiSkSurface.d.ts +1 -1
  205. package/lib/typescript/src/sksg/Container.native.d.ts +1 -0
  206. package/lib/typescript/src/sksg/Container.web.d.ts +1 -0
  207. package/lib/typescript/src/sksg/Recorder/DrawingContext.d.ts +2 -0
  208. package/lib/typescript/src/sksg/Recorder/FrameScope.d.ts +18 -0
  209. package/lib/typescript/src/sksg/Recorder/FrameScope.native.d.ts +10 -0
  210. package/lib/typescript/src/sksg/Recorder/Recorder.d.ts +3 -1
  211. package/lib/typescript/src/sksg/StaticContainer.d.ts +1 -0
  212. package/lib/typescript/src/specs/NativeSkiaModule.web.d.ts +2 -0
  213. package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.d.ts +1 -0
  214. package/lib/typescript/src/views/formats.d.ts +1 -0
  215. package/lib/typescript/src/views/index.d.ts +1 -0
  216. package/lib/typescript/src/views/types.d.ts +6 -0
  217. package/package.json +4 -1
  218. package/react-native-skia.podspec +1 -0
  219. package/src/Platform/Platform.web.tsx +7 -99
  220. package/src/external/reanimated/useVideoLoading.ts +12 -2
  221. package/src/mock/index.ts +1 -0
  222. package/src/renderer/Canvas.tsx +11 -0
  223. package/src/skia/core/SVG.web.ts +5 -14
  224. package/src/skia/types/Paragraph/Paragraph.ts +67 -0
  225. package/src/skia/types/Surface/Surface.ts +5 -1
  226. package/src/skia/web/Host.ts +7 -0
  227. package/src/skia/web/JsiSkPaint.ts +5 -0
  228. package/src/skia/web/JsiSkParagraph.ts +9 -1
  229. package/src/skia/web/JsiSkParagraphStyle.ts +16 -2
  230. package/src/skia/web/JsiSkSurface.ts +2 -1
  231. package/src/sksg/Container.native.ts +12 -0
  232. package/src/sksg/Container.web.ts +43 -4
  233. package/src/sksg/Recorder/DrawingContext.ts +19 -6
  234. package/src/sksg/Recorder/FrameScope.native.ts +21 -0
  235. package/src/sksg/Recorder/FrameScope.ts +69 -0
  236. package/src/sksg/Recorder/Player.ts +1 -2
  237. package/src/sksg/Recorder/Recorder.ts +15 -1
  238. package/src/sksg/Recorder/commands/Drawing.ts +3 -3
  239. package/src/sksg/Recorder/commands/Shaders.ts +22 -16
  240. package/src/sksg/StaticContainer.ts +29 -2
  241. package/src/specs/NativeSkiaModule.web.ts +39 -7
  242. package/src/specs/SkiaPictureViewNativeComponent.ts +1 -0
  243. package/src/views/SkiaPictureView.tsx +2 -0
  244. package/src/views/SkiaPictureView.web.tsx +318 -106
  245. package/src/views/formats.ts +21 -0
  246. package/src/views/index.ts +1 -0
  247. package/src/views/types.ts +7 -0
@@ -94,14 +94,14 @@ export const drawTextPath = (ctx, props) => {
94
94
  const widths = font.getGlyphWidths(ids);
95
95
  const rsx = [];
96
96
  const meas = ctx.Skia.ContourMeasureIter(path, false, 1);
97
- let cont = meas.next();
97
+ let cont = ctx.track(meas.next());
98
98
  let dist = initialOffset;
99
99
  for (let i = 0; i < text.length && cont; i++) {
100
100
  const width = widths[i];
101
101
  dist += width / 2;
102
102
  if (dist > cont.length()) {
103
103
  // jump to next contour
104
- cont = meas.next();
104
+ cont = ctx.track(meas.next());
105
105
  if (!cont) {
106
106
  // We have come to the end of the path - terminate the string
107
107
  // right here.
@@ -177,7 +177,7 @@ export const drawPath = (ctx, props) => {
177
177
  if (hasFillType) {
178
178
  const builder = ctx.Skia.PathBuilder.MakeFromPath(path);
179
179
  builder.setFillType(FillType[enumKey(fillType)]);
180
- path = builder.build();
180
+ path = ctx.track(builder.build());
181
181
  }
182
182
 
183
183
  // Apply stroke using static Path.Stroke
@@ -1 +1 @@
1
- {"version":3,"names":["enumKey","fitRects","processCircle","processColor","processPath","processRect","processRRect","saturate","BlendMode","FillType","FilterMode","isCubicSampling","MipmapMode","PointMode","VertexMode","drawLine","ctx","props","p1","p2","canvas","x","y","paint","drawOval","rect","Skia","drawImage","image","sampling","_props$fit","fit","src","dst","width","height","drawImageRectCubic","B","C","_sampling$filter","_sampling$mipmap","drawImageRectOptions","filter","Linear","mipmap","None","drawPoints","points","mode","drawVertices","textures","colors","indices","blendMode","vertexMode","Triangles","vertices","MakeVertices","map","c","undefined","defaultBlendMode","DstOver","SrcOver","blend","drawDiffRect","outer","inner","drawDRRect","drawTextPath","path","font","initialOffset","text","ids","getGlyphIDs","widths","getGlyphWidths","rsx","meas","ContourMeasureIter","cont","next","dist","i","length","substring","p","t","getPosTan","adjustedX","adjustedY","push","RSXform","derived","TextBlob","MakeFromRSXform","drawTextBlob","drawText","drawPatch","texture","patch","pos","c2","c1","drawPath","start","trimStart","end","trimEnd","fillType","stroke","pathProps","Math","fround","hasStartOffset","hasEndOffset","hasStrokeOptions","hasFillType","builder","PathBuilder","MakeFromPath","setFillType","build","stroked","Path","Stroke","trimmed","Trim","drawRect","drawRRect","blob","drawGlyphs","glyphs","reduce","acc","glyph","id","positions","drawImageSVG","svg","save","translate","drawSvg","restore","drawParagraph","paragraph","layout","drawPicture","picture","drawAtlas","sprites","transforms","colorBlendMode","drawCircle","r","drawSkottie","animation","frame","seekFrame","render"],"sources":["Drawing.ts"],"sourcesContent":["import {\n enumKey,\n fitRects,\n processCircle,\n processColor,\n processPath,\n processRect,\n processRRect,\n} from \"../../../dom/nodes\";\nimport type {\n AtlasProps,\n CircleProps,\n DiffRectProps,\n GlyphsProps,\n ImageProps,\n ImageSVGProps,\n LineProps,\n OvalProps,\n ParagraphProps,\n PatchProps,\n PathProps,\n PictureProps,\n PointsProps,\n RectProps,\n RoundedRectProps,\n SkottieProps,\n TextBlobProps,\n TextPathProps,\n TextProps,\n VerticesProps,\n} from \"../../../dom/types\";\nimport { saturate } from \"../../../renderer/processors\";\nimport type { SkPoint, SkRSXform } from \"../../../skia/types\";\nimport {\n BlendMode,\n FillType,\n FilterMode,\n isCubicSampling,\n MipmapMode,\n PointMode,\n VertexMode,\n} from \"../../../skia/types\";\nimport type { DrawingContext } from \"../DrawingContext\";\n\nexport const drawLine = (ctx: DrawingContext, props: LineProps) => {\n \"worklet\";\n const { p1, p2 } = props;\n ctx.canvas.drawLine(p1.x, p1.y, p2.x, p2.y, ctx.paint);\n};\n\nexport const drawOval = (ctx: DrawingContext, props: OvalProps) => {\n \"worklet\";\n const rect = processRect(ctx.Skia, props);\n ctx.canvas.drawOval(rect, ctx.paint);\n};\n\nexport const drawImage = (ctx: DrawingContext, props: ImageProps) => {\n \"worklet\";\n const { image, sampling } = props;\n if (image) {\n const fit = props.fit ?? \"contain\";\n const rect = processRect(ctx.Skia, props);\n const { src, dst } = fitRects(\n fit,\n {\n x: 0,\n y: 0,\n width: image.width(),\n height: image.height(),\n },\n rect\n );\n if (sampling && isCubicSampling(sampling)) {\n ctx.canvas.drawImageRectCubic(\n image,\n src,\n dst,\n sampling.B,\n sampling.C,\n ctx.paint\n );\n } else {\n ctx.canvas.drawImageRectOptions(\n image,\n src,\n dst,\n sampling?.filter ?? FilterMode.Linear,\n sampling?.mipmap ?? MipmapMode.None,\n ctx.paint\n );\n }\n }\n};\n\nexport const drawPoints = (ctx: DrawingContext, props: PointsProps) => {\n \"worklet\";\n const { points, mode } = props;\n ctx.canvas.drawPoints(PointMode[enumKey(mode)], points, ctx.paint);\n};\n\nexport const drawVertices = (ctx: DrawingContext, props: VerticesProps) => {\n \"worklet\";\n const { mode, textures, colors, indices, blendMode } = props;\n const vertexMode = mode ? VertexMode[enumKey(mode)] : VertexMode.Triangles;\n const vertices = ctx.Skia.MakeVertices(\n vertexMode,\n props.vertices,\n textures,\n colors ? colors.map((c) => processColor(ctx.Skia, c)) : undefined,\n indices\n );\n const defaultBlendMode = colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n\n ctx.canvas.drawVertices(vertices, blend, ctx.paint);\n};\n\nexport const drawDiffRect = (ctx: DrawingContext, props: DiffRectProps) => {\n \"worklet\";\n const { outer, inner } = props;\n ctx.canvas.drawDRRect(outer, inner, ctx.paint);\n};\n\nexport const drawTextPath = (ctx: DrawingContext, props: TextPathProps) => {\n \"worklet\";\n const path = processPath(ctx.Skia, props.path);\n const { font, initialOffset } = props;\n if (font) {\n let { text } = props;\n const ids = font.getGlyphIDs(text);\n const widths = font.getGlyphWidths(ids);\n const rsx: SkRSXform[] = [];\n const meas = ctx.Skia.ContourMeasureIter(path, false, 1);\n let cont = meas.next();\n let dist = initialOffset;\n for (let i = 0; i < text.length && cont; i++) {\n const width = widths[i];\n dist += width / 2;\n if (dist > cont.length()) {\n // jump to next contour\n cont = meas.next();\n if (!cont) {\n // We have come to the end of the path - terminate the string\n // right here.\n text = text.substring(0, i);\n break;\n }\n dist = width / 2;\n }\n // Gives us the (x, y) coordinates as well as the cos/sin of the tangent\n // line at that position.\n const [p, t] = cont.getPosTan(dist);\n const adjustedX = p.x - (width / 2) * t.x;\n const adjustedY = p.y - (width / 2) * t.y;\n rsx.push(ctx.Skia.RSXform(t.x, t.y, adjustedX, adjustedY));\n dist += width / 2;\n }\n const derived = ctx.Skia.TextBlob.MakeFromRSXform(text, rsx, font);\n ctx.canvas.drawTextBlob(derived, 0, 0, ctx.paint);\n }\n};\n\nexport const drawText = (ctx: DrawingContext, props: TextProps) => {\n \"worklet\";\n const { text, x, y, font } = props;\n if (font != null) {\n ctx.canvas.drawText(text, x, y, ctx.paint, font);\n }\n};\n\nexport const drawPatch = (ctx: DrawingContext, props: PatchProps) => {\n \"worklet\";\n const { texture, blendMode, patch } = props;\n const defaultBlendMode = props.colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const mode = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n // Patch requires a path with the following constraints:\n // M tl\n // C c1 c2 br\n // C c1 c2 bl\n // C c1 c2 tl (the redundant point in the last command is removed)\n\n const points = [\n patch[0].pos,\n patch[0].c2,\n patch[1].c1,\n patch[1].pos,\n patch[1].c2,\n patch[2].c1,\n patch[2].pos,\n patch[2].c2,\n patch[3].c1,\n patch[3].pos,\n patch[3].c2,\n patch[0].c1,\n ];\n const colors = props.colors\n ? props.colors.map((c) => processColor(ctx.Skia, c))\n : undefined;\n ctx.canvas.drawPatch(points, colors, texture, mode, ctx.paint);\n};\n\nexport const drawPath = (ctx: DrawingContext, props: PathProps) => {\n \"worklet\";\n const {\n start: trimStart,\n end: trimEnd,\n fillType,\n stroke,\n ...pathProps\n } = props;\n const start = Math.fround(saturate(trimStart));\n const end = Math.fround(saturate(trimEnd));\n const hasStartOffset = start !== 0;\n const hasEndOffset = end !== 1;\n const hasStrokeOptions = stroke !== undefined;\n const hasFillType = !!fillType;\n\n let path = processPath(ctx.Skia, pathProps.path);\n\n // Apply fill type using PathBuilder\n if (hasFillType) {\n const builder = ctx.Skia.PathBuilder.MakeFromPath(path);\n builder.setFillType(FillType[enumKey(fillType)]);\n path = builder.build();\n }\n\n // Apply stroke using static Path.Stroke\n if (hasStrokeOptions) {\n const stroked = ctx.Skia.Path.Stroke(path, stroke);\n if (stroked) {\n path = stroked;\n }\n }\n\n // Apply trim using static Path.Trim\n if (hasStartOffset || hasEndOffset) {\n const trimmed = ctx.Skia.Path.Trim(path, start, end, false);\n if (trimmed) {\n path = trimmed;\n }\n }\n\n ctx.canvas.drawPath(path, ctx.paint);\n};\n\nexport const drawRect = (ctx: DrawingContext, props: RectProps) => {\n \"worklet\";\n const derived = processRect(ctx.Skia, props);\n ctx.canvas.drawRect(derived, ctx.paint);\n};\n\nexport const drawRRect = (ctx: DrawingContext, props: RoundedRectProps) => {\n \"worklet\";\n const derived = processRRect(ctx.Skia, props);\n ctx.canvas.drawRRect(derived, ctx.paint);\n};\n\nexport const drawTextBlob = (ctx: DrawingContext, props: TextBlobProps) => {\n \"worklet\";\n const { blob, x, y } = props;\n ctx.canvas.drawTextBlob(blob, x, y, ctx.paint);\n};\n\ninterface ProcessedGlyphs {\n glyphs: number[];\n positions: SkPoint[];\n}\n\nexport const drawGlyphs = (ctx: DrawingContext, props: GlyphsProps) => {\n \"worklet\";\n const derived = props.glyphs.reduce<ProcessedGlyphs>(\n (acc, glyph) => {\n const { id, pos } = glyph;\n acc.glyphs.push(id);\n acc.positions.push(pos);\n return acc;\n },\n { glyphs: [], positions: [] }\n );\n const { glyphs, positions } = derived;\n const { x, y, font } = props;\n if (font) {\n ctx.canvas.drawGlyphs(glyphs, positions, x, y, font, ctx.paint);\n }\n};\n\nexport const drawImageSVG = (ctx: DrawingContext, props: ImageSVGProps) => {\n \"worklet\";\n const { canvas } = ctx;\n const { svg } = props;\n const { x, y, width, height } = props.rect\n ? props.rect\n : { x: props.x, y: props.y, width: props.width, height: props.height };\n if (svg === null) {\n return;\n }\n canvas.save();\n if (x && y) {\n canvas.translate(x, y);\n }\n canvas.drawSvg(svg, width, height);\n canvas.restore();\n};\n\nexport const drawParagraph = (ctx: DrawingContext, props: ParagraphProps) => {\n \"worklet\";\n const { paragraph, x, y, width } = props;\n if (paragraph) {\n paragraph.layout(width);\n paragraph.paint(ctx.canvas, x, y);\n }\n};\n\nexport const drawPicture = (ctx: DrawingContext, props: PictureProps) => {\n \"worklet\";\n const { picture } = props;\n ctx.canvas.drawPicture(picture);\n};\n\nexport const drawAtlas = (ctx: DrawingContext, props: AtlasProps) => {\n \"worklet\";\n const { image, sprites, transforms, colors, colorBlendMode, sampling } =\n props;\n const blend = colorBlendMode ? BlendMode[enumKey(colorBlendMode)] : undefined;\n if (image) {\n ctx.canvas.drawAtlas(\n image,\n sprites,\n transforms,\n ctx.paint,\n blend,\n colors,\n sampling\n );\n }\n};\n\nexport const drawCircle = (ctx: DrawingContext, props: CircleProps) => {\n \"worklet\";\n const { c } = processCircle(props);\n const { r } = props;\n ctx.canvas.drawCircle(c.x, c.y, r, ctx.paint);\n};\n\nexport const drawSkottie = (ctx: DrawingContext, props: SkottieProps) => {\n \"worklet\";\n const { animation, frame } = props;\n if (animation) {\n props.animation.seekFrame(frame);\n props.animation.render(ctx.canvas);\n }\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["enumKey","fitRects","processCircle","processColor","processPath","processRect","processRRect","saturate","BlendMode","FillType","FilterMode","isCubicSampling","MipmapMode","PointMode","VertexMode","drawLine","ctx","props","p1","p2","canvas","x","y","paint","drawOval","rect","Skia","drawImage","image","sampling","_props$fit","fit","src","dst","width","height","drawImageRectCubic","B","C","_sampling$filter","_sampling$mipmap","drawImageRectOptions","filter","Linear","mipmap","None","drawPoints","points","mode","drawVertices","textures","colors","indices","blendMode","vertexMode","Triangles","vertices","MakeVertices","map","c","undefined","defaultBlendMode","DstOver","SrcOver","blend","drawDiffRect","outer","inner","drawDRRect","drawTextPath","path","font","initialOffset","text","ids","getGlyphIDs","widths","getGlyphWidths","rsx","meas","ContourMeasureIter","cont","track","next","dist","i","length","substring","p","t","getPosTan","adjustedX","adjustedY","push","RSXform","derived","TextBlob","MakeFromRSXform","drawTextBlob","drawText","drawPatch","texture","patch","pos","c2","c1","drawPath","start","trimStart","end","trimEnd","fillType","stroke","pathProps","Math","fround","hasStartOffset","hasEndOffset","hasStrokeOptions","hasFillType","builder","PathBuilder","MakeFromPath","setFillType","build","stroked","Path","Stroke","trimmed","Trim","drawRect","drawRRect","blob","drawGlyphs","glyphs","reduce","acc","glyph","id","positions","drawImageSVG","svg","save","translate","drawSvg","restore","drawParagraph","paragraph","layout","drawPicture","picture","drawAtlas","sprites","transforms","colorBlendMode","drawCircle","r","drawSkottie","animation","frame","seekFrame","render"],"sources":["Drawing.ts"],"sourcesContent":["import {\n enumKey,\n fitRects,\n processCircle,\n processColor,\n processPath,\n processRect,\n processRRect,\n} from \"../../../dom/nodes\";\nimport type {\n AtlasProps,\n CircleProps,\n DiffRectProps,\n GlyphsProps,\n ImageProps,\n ImageSVGProps,\n LineProps,\n OvalProps,\n ParagraphProps,\n PatchProps,\n PathProps,\n PictureProps,\n PointsProps,\n RectProps,\n RoundedRectProps,\n SkottieProps,\n TextBlobProps,\n TextPathProps,\n TextProps,\n VerticesProps,\n} from \"../../../dom/types\";\nimport { saturate } from \"../../../renderer/processors\";\nimport type { SkPoint, SkRSXform } from \"../../../skia/types\";\nimport {\n BlendMode,\n FillType,\n FilterMode,\n isCubicSampling,\n MipmapMode,\n PointMode,\n VertexMode,\n} from \"../../../skia/types\";\nimport type { DrawingContext } from \"../DrawingContext\";\n\nexport const drawLine = (ctx: DrawingContext, props: LineProps) => {\n \"worklet\";\n const { p1, p2 } = props;\n ctx.canvas.drawLine(p1.x, p1.y, p2.x, p2.y, ctx.paint);\n};\n\nexport const drawOval = (ctx: DrawingContext, props: OvalProps) => {\n \"worklet\";\n const rect = processRect(ctx.Skia, props);\n ctx.canvas.drawOval(rect, ctx.paint);\n};\n\nexport const drawImage = (ctx: DrawingContext, props: ImageProps) => {\n \"worklet\";\n const { image, sampling } = props;\n if (image) {\n const fit = props.fit ?? \"contain\";\n const rect = processRect(ctx.Skia, props);\n const { src, dst } = fitRects(\n fit,\n {\n x: 0,\n y: 0,\n width: image.width(),\n height: image.height(),\n },\n rect\n );\n if (sampling && isCubicSampling(sampling)) {\n ctx.canvas.drawImageRectCubic(\n image,\n src,\n dst,\n sampling.B,\n sampling.C,\n ctx.paint\n );\n } else {\n ctx.canvas.drawImageRectOptions(\n image,\n src,\n dst,\n sampling?.filter ?? FilterMode.Linear,\n sampling?.mipmap ?? MipmapMode.None,\n ctx.paint\n );\n }\n }\n};\n\nexport const drawPoints = (ctx: DrawingContext, props: PointsProps) => {\n \"worklet\";\n const { points, mode } = props;\n ctx.canvas.drawPoints(PointMode[enumKey(mode)], points, ctx.paint);\n};\n\nexport const drawVertices = (ctx: DrawingContext, props: VerticesProps) => {\n \"worklet\";\n const { mode, textures, colors, indices, blendMode } = props;\n const vertexMode = mode ? VertexMode[enumKey(mode)] : VertexMode.Triangles;\n const vertices = ctx.Skia.MakeVertices(\n vertexMode,\n props.vertices,\n textures,\n colors ? colors.map((c) => processColor(ctx.Skia, c)) : undefined,\n indices\n );\n const defaultBlendMode = colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n\n ctx.canvas.drawVertices(vertices, blend, ctx.paint);\n};\n\nexport const drawDiffRect = (ctx: DrawingContext, props: DiffRectProps) => {\n \"worklet\";\n const { outer, inner } = props;\n ctx.canvas.drawDRRect(outer, inner, ctx.paint);\n};\n\nexport const drawTextPath = (ctx: DrawingContext, props: TextPathProps) => {\n \"worklet\";\n const path = processPath(ctx.Skia, props.path);\n const { font, initialOffset } = props;\n if (font) {\n let { text } = props;\n const ids = font.getGlyphIDs(text);\n const widths = font.getGlyphWidths(ids);\n const rsx: SkRSXform[] = [];\n const meas = ctx.Skia.ContourMeasureIter(path, false, 1);\n let cont = ctx.track(meas.next());\n let dist = initialOffset;\n for (let i = 0; i < text.length && cont; i++) {\n const width = widths[i];\n dist += width / 2;\n if (dist > cont.length()) {\n // jump to next contour\n cont = ctx.track(meas.next());\n if (!cont) {\n // We have come to the end of the path - terminate the string\n // right here.\n text = text.substring(0, i);\n break;\n }\n dist = width / 2;\n }\n // Gives us the (x, y) coordinates as well as the cos/sin of the tangent\n // line at that position.\n const [p, t] = cont.getPosTan(dist);\n const adjustedX = p.x - (width / 2) * t.x;\n const adjustedY = p.y - (width / 2) * t.y;\n rsx.push(ctx.Skia.RSXform(t.x, t.y, adjustedX, adjustedY));\n dist += width / 2;\n }\n const derived = ctx.Skia.TextBlob.MakeFromRSXform(text, rsx, font);\n ctx.canvas.drawTextBlob(derived, 0, 0, ctx.paint);\n }\n};\n\nexport const drawText = (ctx: DrawingContext, props: TextProps) => {\n \"worklet\";\n const { text, x, y, font } = props;\n if (font != null) {\n ctx.canvas.drawText(text, x, y, ctx.paint, font);\n }\n};\n\nexport const drawPatch = (ctx: DrawingContext, props: PatchProps) => {\n \"worklet\";\n const { texture, blendMode, patch } = props;\n const defaultBlendMode = props.colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const mode = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n // Patch requires a path with the following constraints:\n // M tl\n // C c1 c2 br\n // C c1 c2 bl\n // C c1 c2 tl (the redundant point in the last command is removed)\n\n const points = [\n patch[0].pos,\n patch[0].c2,\n patch[1].c1,\n patch[1].pos,\n patch[1].c2,\n patch[2].c1,\n patch[2].pos,\n patch[2].c2,\n patch[3].c1,\n patch[3].pos,\n patch[3].c2,\n patch[0].c1,\n ];\n const colors = props.colors\n ? props.colors.map((c) => processColor(ctx.Skia, c))\n : undefined;\n ctx.canvas.drawPatch(points, colors, texture, mode, ctx.paint);\n};\n\nexport const drawPath = (ctx: DrawingContext, props: PathProps) => {\n \"worklet\";\n const {\n start: trimStart,\n end: trimEnd,\n fillType,\n stroke,\n ...pathProps\n } = props;\n const start = Math.fround(saturate(trimStart));\n const end = Math.fround(saturate(trimEnd));\n const hasStartOffset = start !== 0;\n const hasEndOffset = end !== 1;\n const hasStrokeOptions = stroke !== undefined;\n const hasFillType = !!fillType;\n\n let path = processPath(ctx.Skia, pathProps.path);\n\n // Apply fill type using PathBuilder\n if (hasFillType) {\n const builder = ctx.Skia.PathBuilder.MakeFromPath(path);\n builder.setFillType(FillType[enumKey(fillType)]);\n path = ctx.track(builder.build());\n }\n\n // Apply stroke using static Path.Stroke\n if (hasStrokeOptions) {\n const stroked = ctx.Skia.Path.Stroke(path, stroke);\n if (stroked) {\n path = stroked;\n }\n }\n\n // Apply trim using static Path.Trim\n if (hasStartOffset || hasEndOffset) {\n const trimmed = ctx.Skia.Path.Trim(path, start, end, false);\n if (trimmed) {\n path = trimmed;\n }\n }\n\n ctx.canvas.drawPath(path, ctx.paint);\n};\n\nexport const drawRect = (ctx: DrawingContext, props: RectProps) => {\n \"worklet\";\n const derived = processRect(ctx.Skia, props);\n ctx.canvas.drawRect(derived, ctx.paint);\n};\n\nexport const drawRRect = (ctx: DrawingContext, props: RoundedRectProps) => {\n \"worklet\";\n const derived = processRRect(ctx.Skia, props);\n ctx.canvas.drawRRect(derived, ctx.paint);\n};\n\nexport const drawTextBlob = (ctx: DrawingContext, props: TextBlobProps) => {\n \"worklet\";\n const { blob, x, y } = props;\n ctx.canvas.drawTextBlob(blob, x, y, ctx.paint);\n};\n\ninterface ProcessedGlyphs {\n glyphs: number[];\n positions: SkPoint[];\n}\n\nexport const drawGlyphs = (ctx: DrawingContext, props: GlyphsProps) => {\n \"worklet\";\n const derived = props.glyphs.reduce<ProcessedGlyphs>(\n (acc, glyph) => {\n const { id, pos } = glyph;\n acc.glyphs.push(id);\n acc.positions.push(pos);\n return acc;\n },\n { glyphs: [], positions: [] }\n );\n const { glyphs, positions } = derived;\n const { x, y, font } = props;\n if (font) {\n ctx.canvas.drawGlyphs(glyphs, positions, x, y, font, ctx.paint);\n }\n};\n\nexport const drawImageSVG = (ctx: DrawingContext, props: ImageSVGProps) => {\n \"worklet\";\n const { canvas } = ctx;\n const { svg } = props;\n const { x, y, width, height } = props.rect\n ? props.rect\n : { x: props.x, y: props.y, width: props.width, height: props.height };\n if (svg === null) {\n return;\n }\n canvas.save();\n if (x && y) {\n canvas.translate(x, y);\n }\n canvas.drawSvg(svg, width, height);\n canvas.restore();\n};\n\nexport const drawParagraph = (ctx: DrawingContext, props: ParagraphProps) => {\n \"worklet\";\n const { paragraph, x, y, width } = props;\n if (paragraph) {\n paragraph.layout(width);\n paragraph.paint(ctx.canvas, x, y);\n }\n};\n\nexport const drawPicture = (ctx: DrawingContext, props: PictureProps) => {\n \"worklet\";\n const { picture } = props;\n ctx.canvas.drawPicture(picture);\n};\n\nexport const drawAtlas = (ctx: DrawingContext, props: AtlasProps) => {\n \"worklet\";\n const { image, sprites, transforms, colors, colorBlendMode, sampling } =\n props;\n const blend = colorBlendMode ? BlendMode[enumKey(colorBlendMode)] : undefined;\n if (image) {\n ctx.canvas.drawAtlas(\n image,\n sprites,\n transforms,\n ctx.paint,\n blend,\n colors,\n sampling\n );\n }\n};\n\nexport const drawCircle = (ctx: DrawingContext, props: CircleProps) => {\n \"worklet\";\n const { c } = processCircle(props);\n const { r } = props;\n ctx.canvas.drawCircle(c.x, c.y, r, ctx.paint);\n};\n\nexport const drawSkottie = (ctx: DrawingContext, props: SkottieProps) => {\n \"worklet\";\n const { animation, frame } = props;\n if (animation) {\n props.animation.seekFrame(frame);\n props.animation.render(ctx.canvas);\n }\n};\n"],"mappings":"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","ignoreList":[]}
@@ -13,7 +13,7 @@ const declareShader = (ctx, props, children) => {
13
13
  } = props;
14
14
  const m3 = ctx.Skia.Matrix();
15
15
  processTransformProps(m3, transform);
16
- const shader = source.makeShaderWithChildren(processUniforms(source, uniforms), ctx.shaders.splice(0, children), m3);
16
+ const shader = ctx.track(source.makeShaderWithChildren(processUniforms(source, uniforms), ctx.shaders.splice(0, children), m3));
17
17
  ctx.shaders.push(shader);
18
18
  };
19
19
  const declareColorShader = (ctx, props) => {
@@ -156,10 +156,10 @@ const declareImageShader = (ctx, props) => {
156
156
  processTransformProps(lm, imageShaderProps);
157
157
  let shader;
158
158
  if (sampling && isCubicSampling(sampling)) {
159
- shader = image.makeShaderCubic(TileMode[enumKey(tx)], TileMode[enumKey(ty)], sampling.B, sampling.C, lm);
159
+ shader = ctx.track(image.makeShaderCubic(TileMode[enumKey(tx)], TileMode[enumKey(ty)], sampling.B, sampling.C, lm));
160
160
  } else {
161
161
  var _sampling$filter, _sampling$mipmap;
162
- shader = image.makeShaderCubic(TileMode[enumKey(tx)], TileMode[enumKey(ty)], (_sampling$filter = sampling === null || sampling === void 0 ? void 0 : sampling.filter) !== null && _sampling$filter !== void 0 ? _sampling$filter : FilterMode.Linear, (_sampling$mipmap = sampling === null || sampling === void 0 ? void 0 : sampling.mipmap) !== null && _sampling$mipmap !== void 0 ? _sampling$mipmap : MipmapMode.None, lm);
162
+ shader = ctx.track(image.makeShaderCubic(TileMode[enumKey(tx)], TileMode[enumKey(ty)], (_sampling$filter = sampling === null || sampling === void 0 ? void 0 : sampling.filter) !== null && _sampling$filter !== void 0 ? _sampling$filter : FilterMode.Linear, (_sampling$mipmap = sampling === null || sampling === void 0 ? void 0 : sampling.mipmap) !== null && _sampling$mipmap !== void 0 ? _sampling$mipmap : MipmapMode.None, lm));
163
163
  }
164
164
  ctx.shaders.push(shader);
165
165
  };
@@ -1 +1 @@
1
- {"version":3,"names":["enumKey","fitRects","getRect","processColor","processGradientProps","processTransformProps","rect2rect","NodeType","BlendMode","FilterMode","isCubicSampling","MipmapMode","processUniforms","TileMode","composeDeclarations","CommandType","declareShader","ctx","props","children","source","uniforms","transform","m3","Skia","Matrix","shader","makeShaderWithChildren","shaders","splice","push","declareColorShader","color","Shader","MakeColor","declareFractalNoiseShader","freqX","freqY","octaves","seed","tileWidth","tileHeight","MakeFractalNoise","declareTwoPointConicalGradientShader","startR","endR","start","end","colors","positions","mode","localMatrix","flags","MakeTwoPointConicalGradient","declareRadialGradientShader","c","r","MakeRadialGradient","declareSweepGradientShader","MakeSweepGradient","x","y","declareLinearGradientShader","MakeLinearGradient","declareTurbulenceShader","MakeTurbulence","declareImageShader","fit","image","tx","ty","sampling","imageShaderProps","rct","rects","width","height","sx","sy","src","dst","translate","translateX","translateY","scale","scaleX","scaleY","lm","concat","makeShaderCubic","B","C","_sampling$filter","_sampling$mipmap","filter","Linear","mipmap","None","declareBlend","blend","length","composer","MakeBlend","bind","isPushShader","command","type","PushShader","isShader","shaderType","pushShader","ImageShader","ColorShader","Turbulence","FractalNoise","LinearGradient","RadialGradient","SweepGradient","TwoPointConicalGradient","Blend","Error"],"sources":["Shaders.ts"],"sourcesContent":["import {\n enumKey,\n fitRects,\n getRect,\n processColor,\n processGradientProps,\n processTransformProps,\n rect2rect,\n} from \"../../../dom/nodes\";\nimport { NodeType } from \"../../../dom/types\";\nimport type {\n BlendProps,\n ColorProps,\n FractalNoiseProps,\n ImageShaderProps,\n LinearGradientProps,\n RadialGradientProps,\n ShaderProps,\n SweepGradientProps,\n TurbulenceProps,\n TwoPointConicalGradientProps,\n} from \"../../../dom/types\";\nimport type { SkShader } from \"../../../skia/types\";\nimport {\n BlendMode,\n FilterMode,\n isCubicSampling,\n MipmapMode,\n processUniforms,\n TileMode,\n} from \"../../../skia/types\";\nimport { composeDeclarations } from \"../../utils\";\nimport type { Command } from \"../Core\";\nimport { CommandType } from \"../Core\";\nimport type { DrawingContext } from \"../DrawingContext\";\n\nconst declareShader = (\n ctx: DrawingContext,\n props: ShaderProps,\n children: number\n) => {\n \"worklet\";\n const { source, uniforms, ...transform } = props;\n const m3 = ctx.Skia.Matrix();\n processTransformProps(m3, transform);\n const shader = source.makeShaderWithChildren(\n processUniforms(source, uniforms),\n ctx.shaders.splice(0, children),\n m3\n );\n ctx.shaders.push(shader);\n};\n\nconst declareColorShader = (ctx: DrawingContext, props: ColorProps) => {\n \"worklet\";\n const { color } = props;\n const shader = ctx.Skia.Shader.MakeColor(processColor(ctx.Skia, color));\n ctx.shaders.push(shader);\n};\n\nconst declareFractalNoiseShader = (\n ctx: DrawingContext,\n props: FractalNoiseProps\n) => {\n \"worklet\";\n const { freqX, freqY, octaves, seed, tileWidth, tileHeight } = props;\n const shader = ctx.Skia.Shader.MakeFractalNoise(\n freqX,\n freqY,\n octaves,\n seed,\n tileWidth,\n tileHeight\n );\n ctx.shaders.push(shader);\n};\n\nconst declareTwoPointConicalGradientShader = (\n ctx: DrawingContext,\n props: TwoPointConicalGradientProps\n) => {\n \"worklet\";\n const { startR, endR, start, end } = props;\n const { colors, positions, mode, localMatrix, flags } = processGradientProps(\n ctx.Skia,\n props\n );\n const shader = ctx.Skia.Shader.MakeTwoPointConicalGradient(\n start,\n startR,\n end,\n endR,\n colors,\n positions,\n mode,\n localMatrix,\n flags\n );\n ctx.shaders.push(shader);\n};\n\nconst declareRadialGradientShader = (\n ctx: DrawingContext,\n props: RadialGradientProps\n) => {\n \"worklet\";\n const { c, r } = props;\n const { colors, positions, mode, localMatrix, flags } = processGradientProps(\n ctx.Skia,\n props\n );\n const shader = ctx.Skia.Shader.MakeRadialGradient(\n c,\n r,\n colors,\n positions,\n mode,\n localMatrix,\n flags\n );\n ctx.shaders.push(shader);\n};\n\nconst declareSweepGradientShader = (\n ctx: DrawingContext,\n props: SweepGradientProps\n) => {\n \"worklet\";\n const { c, start, end } = props;\n const { colors, positions, mode, localMatrix, flags } = processGradientProps(\n ctx.Skia,\n props\n );\n const shader = ctx.Skia.Shader.MakeSweepGradient(\n c.x,\n c.y,\n colors,\n positions,\n mode,\n localMatrix,\n flags,\n start,\n end\n );\n ctx.shaders.push(shader);\n};\n\nconst declareLinearGradientShader = (\n ctx: DrawingContext,\n props: LinearGradientProps\n) => {\n \"worklet\";\n const { start, end } = props;\n const { colors, positions, mode, localMatrix, flags } = processGradientProps(\n ctx.Skia,\n props\n );\n const shader = ctx.Skia.Shader.MakeLinearGradient(\n start,\n end,\n colors,\n positions ?? null,\n mode,\n localMatrix,\n flags\n );\n ctx.shaders.push(shader);\n};\n\nconst declareTurbulenceShader = (\n ctx: DrawingContext,\n props: TurbulenceProps\n) => {\n \"worklet\";\n const { freqX, freqY, octaves, seed, tileWidth, tileHeight } = props;\n const shader = ctx.Skia.Shader.MakeTurbulence(\n freqX,\n freqY,\n octaves,\n seed,\n tileWidth,\n tileHeight\n );\n ctx.shaders.push(shader);\n};\n\nconst declareImageShader = (ctx: DrawingContext, props: ImageShaderProps) => {\n \"worklet\";\n const { fit, image, tx, ty, sampling, ...imageShaderProps } = props;\n if (!image) {\n return;\n }\n\n const rct = getRect(ctx.Skia, imageShaderProps);\n const m3 = ctx.Skia.Matrix();\n if (rct) {\n const rects = fitRects(\n fit,\n { x: 0, y: 0, width: image.width(), height: image.height() },\n rct\n );\n const [x, y, sx, sy] = rect2rect(rects.src, rects.dst);\n m3.translate(x.translateX, y.translateY);\n m3.scale(sx.scaleX, sy.scaleY);\n }\n const lm = ctx.Skia.Matrix();\n lm.concat(m3);\n processTransformProps(lm, imageShaderProps);\n let shader: SkShader;\n if (sampling && isCubicSampling(sampling)) {\n shader = image.makeShaderCubic(\n TileMode[enumKey(tx)],\n TileMode[enumKey(ty)],\n sampling.B,\n sampling.C,\n lm\n );\n } else {\n shader = image.makeShaderCubic(\n TileMode[enumKey(tx)],\n TileMode[enumKey(ty)],\n sampling?.filter ?? FilterMode.Linear,\n sampling?.mipmap ?? MipmapMode.None,\n lm\n );\n }\n ctx.shaders.push(shader);\n};\n\nconst declareBlend = (ctx: DrawingContext, props: BlendProps) => {\n \"worklet\";\n const blend = BlendMode[enumKey(props.mode as BlendProps[\"mode\"])];\n const shaders = ctx.shaders.splice(0, ctx.shaders.length);\n if (shaders.length > 0) {\n const composer = ctx.Skia.Shader.MakeBlend.bind(ctx.Skia.Shader, blend);\n ctx.shaders.push(composeDeclarations(shaders, composer));\n }\n};\n\nexport const isPushShader = (\n command: Command\n): command is Command<CommandType.PushShader> => {\n \"worklet\";\n return command.type === CommandType.PushShader;\n};\n\ntype Props = {\n [NodeType.Shader]: ShaderProps;\n [NodeType.ImageShader]: ImageShaderProps;\n [NodeType.ColorShader]: ColorProps;\n [NodeType.Turbulence]: TurbulenceProps;\n [NodeType.FractalNoise]: FractalNoiseProps;\n [NodeType.LinearGradient]: LinearGradientProps;\n [NodeType.RadialGradient]: RadialGradientProps;\n [NodeType.SweepGradient]: SweepGradientProps;\n [NodeType.TwoPointConicalGradient]: TwoPointConicalGradientProps;\n [NodeType.Blend]: BlendProps;\n};\n\ninterface PushShader<\n T extends keyof Props,\n> extends Command<CommandType.PushShader> {\n shaderType: T;\n props: Props[T];\n children: number;\n}\n\nconst isShader = <T extends keyof Props>(\n command: Command<CommandType.PushShader>,\n type: T\n): command is PushShader<T> => {\n \"worklet\";\n return command.shaderType === type;\n};\n\nexport const pushShader = (\n ctx: DrawingContext,\n command: Command<CommandType.PushShader>\n) => {\n \"worklet\";\n if (isShader(command, NodeType.Shader)) {\n declareShader(ctx, command.props, command.children);\n } else if (isShader(command, NodeType.ImageShader)) {\n declareImageShader(ctx, command.props);\n } else if (isShader(command, NodeType.ColorShader)) {\n declareColorShader(ctx, command.props);\n } else if (isShader(command, NodeType.Turbulence)) {\n declareTurbulenceShader(ctx, command.props);\n } else if (isShader(command, NodeType.FractalNoise)) {\n declareFractalNoiseShader(ctx, command.props);\n } else if (isShader(command, NodeType.LinearGradient)) {\n declareLinearGradientShader(ctx, command.props);\n } else if (isShader(command, NodeType.RadialGradient)) {\n declareRadialGradientShader(ctx, command.props);\n } else if (isShader(command, NodeType.SweepGradient)) {\n declareSweepGradientShader(ctx, command.props);\n } else if (isShader(command, NodeType.TwoPointConicalGradient)) {\n declareTwoPointConicalGradientShader(ctx, command.props);\n } else if (isShader(command, NodeType.Blend)) {\n declareBlend(ctx, command.props);\n } else {\n throw new Error(`Unknown shader type: ${command.shaderType}`);\n }\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["enumKey","fitRects","getRect","processColor","processGradientProps","processTransformProps","rect2rect","NodeType","BlendMode","FilterMode","isCubicSampling","MipmapMode","processUniforms","TileMode","composeDeclarations","CommandType","declareShader","ctx","props","children","source","uniforms","transform","m3","Skia","Matrix","shader","track","makeShaderWithChildren","shaders","splice","push","declareColorShader","color","Shader","MakeColor","declareFractalNoiseShader","freqX","freqY","octaves","seed","tileWidth","tileHeight","MakeFractalNoise","declareTwoPointConicalGradientShader","startR","endR","start","end","colors","positions","mode","localMatrix","flags","MakeTwoPointConicalGradient","declareRadialGradientShader","c","r","MakeRadialGradient","declareSweepGradientShader","MakeSweepGradient","x","y","declareLinearGradientShader","MakeLinearGradient","declareTurbulenceShader","MakeTurbulence","declareImageShader","fit","image","tx","ty","sampling","imageShaderProps","rct","rects","width","height","sx","sy","src","dst","translate","translateX","translateY","scale","scaleX","scaleY","lm","concat","makeShaderCubic","B","C","_sampling$filter","_sampling$mipmap","filter","Linear","mipmap","None","declareBlend","blend","length","composer","MakeBlend","bind","isPushShader","command","type","PushShader","isShader","shaderType","pushShader","ImageShader","ColorShader","Turbulence","FractalNoise","LinearGradient","RadialGradient","SweepGradient","TwoPointConicalGradient","Blend","Error"],"sources":["Shaders.ts"],"sourcesContent":["import {\n enumKey,\n fitRects,\n getRect,\n processColor,\n processGradientProps,\n processTransformProps,\n rect2rect,\n} from \"../../../dom/nodes\";\nimport { NodeType } from \"../../../dom/types\";\nimport type {\n BlendProps,\n ColorProps,\n FractalNoiseProps,\n ImageShaderProps,\n LinearGradientProps,\n RadialGradientProps,\n ShaderProps,\n SweepGradientProps,\n TurbulenceProps,\n TwoPointConicalGradientProps,\n} from \"../../../dom/types\";\nimport type { SkShader } from \"../../../skia/types\";\nimport {\n BlendMode,\n FilterMode,\n isCubicSampling,\n MipmapMode,\n processUniforms,\n TileMode,\n} from \"../../../skia/types\";\nimport { composeDeclarations } from \"../../utils\";\nimport type { Command } from \"../Core\";\nimport { CommandType } from \"../Core\";\nimport type { DrawingContext } from \"../DrawingContext\";\n\nconst declareShader = (\n ctx: DrawingContext,\n props: ShaderProps,\n children: number\n) => {\n \"worklet\";\n const { source, uniforms, ...transform } = props;\n const m3 = ctx.Skia.Matrix();\n processTransformProps(m3, transform);\n const shader = ctx.track(\n source.makeShaderWithChildren(\n processUniforms(source, uniforms),\n ctx.shaders.splice(0, children),\n m3\n )\n );\n ctx.shaders.push(shader);\n};\n\nconst declareColorShader = (ctx: DrawingContext, props: ColorProps) => {\n \"worklet\";\n const { color } = props;\n const shader = ctx.Skia.Shader.MakeColor(processColor(ctx.Skia, color));\n ctx.shaders.push(shader);\n};\n\nconst declareFractalNoiseShader = (\n ctx: DrawingContext,\n props: FractalNoiseProps\n) => {\n \"worklet\";\n const { freqX, freqY, octaves, seed, tileWidth, tileHeight } = props;\n const shader = ctx.Skia.Shader.MakeFractalNoise(\n freqX,\n freqY,\n octaves,\n seed,\n tileWidth,\n tileHeight\n );\n ctx.shaders.push(shader);\n};\n\nconst declareTwoPointConicalGradientShader = (\n ctx: DrawingContext,\n props: TwoPointConicalGradientProps\n) => {\n \"worklet\";\n const { startR, endR, start, end } = props;\n const { colors, positions, mode, localMatrix, flags } = processGradientProps(\n ctx.Skia,\n props\n );\n const shader = ctx.Skia.Shader.MakeTwoPointConicalGradient(\n start,\n startR,\n end,\n endR,\n colors,\n positions,\n mode,\n localMatrix,\n flags\n );\n ctx.shaders.push(shader);\n};\n\nconst declareRadialGradientShader = (\n ctx: DrawingContext,\n props: RadialGradientProps\n) => {\n \"worklet\";\n const { c, r } = props;\n const { colors, positions, mode, localMatrix, flags } = processGradientProps(\n ctx.Skia,\n props\n );\n const shader = ctx.Skia.Shader.MakeRadialGradient(\n c,\n r,\n colors,\n positions,\n mode,\n localMatrix,\n flags\n );\n ctx.shaders.push(shader);\n};\n\nconst declareSweepGradientShader = (\n ctx: DrawingContext,\n props: SweepGradientProps\n) => {\n \"worklet\";\n const { c, start, end } = props;\n const { colors, positions, mode, localMatrix, flags } = processGradientProps(\n ctx.Skia,\n props\n );\n const shader = ctx.Skia.Shader.MakeSweepGradient(\n c.x,\n c.y,\n colors,\n positions,\n mode,\n localMatrix,\n flags,\n start,\n end\n );\n ctx.shaders.push(shader);\n};\n\nconst declareLinearGradientShader = (\n ctx: DrawingContext,\n props: LinearGradientProps\n) => {\n \"worklet\";\n const { start, end } = props;\n const { colors, positions, mode, localMatrix, flags } = processGradientProps(\n ctx.Skia,\n props\n );\n const shader = ctx.Skia.Shader.MakeLinearGradient(\n start,\n end,\n colors,\n positions ?? null,\n mode,\n localMatrix,\n flags\n );\n ctx.shaders.push(shader);\n};\n\nconst declareTurbulenceShader = (\n ctx: DrawingContext,\n props: TurbulenceProps\n) => {\n \"worklet\";\n const { freqX, freqY, octaves, seed, tileWidth, tileHeight } = props;\n const shader = ctx.Skia.Shader.MakeTurbulence(\n freqX,\n freqY,\n octaves,\n seed,\n tileWidth,\n tileHeight\n );\n ctx.shaders.push(shader);\n};\n\nconst declareImageShader = (ctx: DrawingContext, props: ImageShaderProps) => {\n \"worklet\";\n const { fit, image, tx, ty, sampling, ...imageShaderProps } = props;\n if (!image) {\n return;\n }\n\n const rct = getRect(ctx.Skia, imageShaderProps);\n const m3 = ctx.Skia.Matrix();\n if (rct) {\n const rects = fitRects(\n fit,\n { x: 0, y: 0, width: image.width(), height: image.height() },\n rct\n );\n const [x, y, sx, sy] = rect2rect(rects.src, rects.dst);\n m3.translate(x.translateX, y.translateY);\n m3.scale(sx.scaleX, sy.scaleY);\n }\n const lm = ctx.Skia.Matrix();\n lm.concat(m3);\n processTransformProps(lm, imageShaderProps);\n let shader: SkShader;\n if (sampling && isCubicSampling(sampling)) {\n shader = ctx.track(\n image.makeShaderCubic(\n TileMode[enumKey(tx)],\n TileMode[enumKey(ty)],\n sampling.B,\n sampling.C,\n lm\n )\n );\n } else {\n shader = ctx.track(\n image.makeShaderCubic(\n TileMode[enumKey(tx)],\n TileMode[enumKey(ty)],\n sampling?.filter ?? FilterMode.Linear,\n sampling?.mipmap ?? MipmapMode.None,\n lm\n )\n );\n }\n ctx.shaders.push(shader);\n};\n\nconst declareBlend = (ctx: DrawingContext, props: BlendProps) => {\n \"worklet\";\n const blend = BlendMode[enumKey(props.mode as BlendProps[\"mode\"])];\n const shaders = ctx.shaders.splice(0, ctx.shaders.length);\n if (shaders.length > 0) {\n const composer = ctx.Skia.Shader.MakeBlend.bind(ctx.Skia.Shader, blend);\n ctx.shaders.push(composeDeclarations(shaders, composer));\n }\n};\n\nexport const isPushShader = (\n command: Command\n): command is Command<CommandType.PushShader> => {\n \"worklet\";\n return command.type === CommandType.PushShader;\n};\n\ntype Props = {\n [NodeType.Shader]: ShaderProps;\n [NodeType.ImageShader]: ImageShaderProps;\n [NodeType.ColorShader]: ColorProps;\n [NodeType.Turbulence]: TurbulenceProps;\n [NodeType.FractalNoise]: FractalNoiseProps;\n [NodeType.LinearGradient]: LinearGradientProps;\n [NodeType.RadialGradient]: RadialGradientProps;\n [NodeType.SweepGradient]: SweepGradientProps;\n [NodeType.TwoPointConicalGradient]: TwoPointConicalGradientProps;\n [NodeType.Blend]: BlendProps;\n};\n\ninterface PushShader<\n T extends keyof Props,\n> extends Command<CommandType.PushShader> {\n shaderType: T;\n props: Props[T];\n children: number;\n}\n\nconst isShader = <T extends keyof Props>(\n command: Command<CommandType.PushShader>,\n type: T\n): command is PushShader<T> => {\n \"worklet\";\n return command.shaderType === type;\n};\n\nexport const pushShader = (\n ctx: DrawingContext,\n command: Command<CommandType.PushShader>\n) => {\n \"worklet\";\n if (isShader(command, NodeType.Shader)) {\n declareShader(ctx, command.props, command.children);\n } else if (isShader(command, NodeType.ImageShader)) {\n declareImageShader(ctx, command.props);\n } else if (isShader(command, NodeType.ColorShader)) {\n declareColorShader(ctx, command.props);\n } else if (isShader(command, NodeType.Turbulence)) {\n declareTurbulenceShader(ctx, command.props);\n } else if (isShader(command, NodeType.FractalNoise)) {\n declareFractalNoiseShader(ctx, command.props);\n } else if (isShader(command, NodeType.LinearGradient)) {\n declareLinearGradientShader(ctx, command.props);\n } else if (isShader(command, NodeType.RadialGradient)) {\n declareRadialGradientShader(ctx, command.props);\n } else if (isShader(command, NodeType.SweepGradient)) {\n declareSweepGradientShader(ctx, command.props);\n } else if (isShader(command, NodeType.TwoPointConicalGradient)) {\n declareTwoPointConicalGradientShader(ctx, command.props);\n } else if (isShader(command, NodeType.Blend)) {\n declareBlend(ctx, command.props);\n } else {\n throw new Error(`Unknown shader type: ${command.shaderType}`);\n }\n};\n"],"mappings":"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","ignoreList":[]}
@@ -18,5 +18,6 @@ export declare abstract class Container {
18
18
  export declare class StaticContainer extends Container {
19
19
  private nativeId;
20
20
  constructor(Skia: Skia, nativeId: number);
21
+ unmount(): void;
21
22
  redraw(): void;
22
23
  }
@@ -1,7 +1,7 @@
1
1
  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; }
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
- import { Recorder } from "./Recorder/Recorder";
4
+ import { Recorder, disposeRecording } from "./Recorder/Recorder";
5
5
  import { visit } from "./Recorder/Visitor";
6
6
  import { replay } from "./Recorder/Player";
7
7
  import { createDrawingContext } from "./Recorder/DrawingContext";
@@ -30,7 +30,14 @@ export class Container {
30
30
  throw new Error("No recording to draw");
31
31
  }
32
32
  const ctx = createDrawingContext(this.Skia, this.recording.paintPool, canvas);
33
- replay(ctx, this.recording.commands);
33
+ try {
34
+ replay(ctx, this.recording.commands);
35
+ } finally {
36
+ // Frame-scoped objects created during the replay are no longer needed
37
+ // once drawn — delete them, otherwise they leak on Web where the GC
38
+ // cannot see WASM memory.
39
+ ctx.dispose();
40
+ }
34
41
  }
35
42
  }
36
43
  export class StaticContainer extends Container {
@@ -38,7 +45,23 @@ export class StaticContainer extends Container {
38
45
  super(Skia);
39
46
  this.nativeId = nativeId;
40
47
  }
48
+ unmount() {
49
+ super.unmount();
50
+ if (this.recording) {
51
+ disposeRecording(this.recording);
52
+ this.recording = null;
53
+ }
54
+ }
41
55
  redraw() {
56
+ if (this.unmounted) {
57
+ // The unmount commit triggers a last redraw — recording it would
58
+ // resurrect a recording for a container that has just disposed it.
59
+ return;
60
+ }
61
+ if (this.recording) {
62
+ disposeRecording(this.recording);
63
+ this.recording = null;
64
+ }
42
65
  const recorder = new Recorder();
43
66
  visit(recorder, this.root);
44
67
  this.recording = recorder.getRecording();
@@ -50,6 +73,9 @@ export class StaticContainer extends Container {
50
73
  const picture = rec.finishRecordingAsPicture();
51
74
  rec.dispose();
52
75
  SkiaViewApi.setJsiProperty(this.nativeId, "picture", picture);
76
+ // The view keeps its own reference to the picture it displays; this
77
+ // one is renderer-owned and disposed with the recording.
78
+ this.recording.lastPicture = picture;
53
79
  }
54
80
  }
55
81
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Recorder","visit","replay","createDrawingContext","Container","constructor","Skia","_defineProperty","root","_root","value","mount","unmounted","unmount","drawOnCanvas","canvas","recording","Error","ctx","paintPool","commands","StaticContainer","nativeId","redraw","recorder","getRecording","isOnScreen","rec","PictureRecorder","beginRecording","picture","finishRecordingAsPicture","dispose","SkiaViewApi","setJsiProperty"],"sources":["StaticContainer.ts"],"sourcesContent":["import type { Skia, SkCanvas } from \"../skia/types\";\n\nimport type { Node } from \"./Node\";\nimport type { Recording } from \"./Recorder/Recorder\";\nimport { Recorder } from \"./Recorder/Recorder\";\nimport { visit } from \"./Recorder/Visitor\";\nimport { replay } from \"./Recorder/Player\";\nimport { createDrawingContext } from \"./Recorder/DrawingContext\";\n\nimport \"../views/api\";\n\nexport abstract class Container {\n private _root: Node[] = [];\n protected recording: Recording | null = null;\n protected unmounted = false;\n\n constructor(protected Skia: Skia) {}\n\n get root() {\n return this._root;\n }\n\n set root(value: Node[]) {\n this._root = value;\n }\n\n mount() {\n this.unmounted = false;\n }\n\n unmount() {\n this.unmounted = true;\n }\n\n drawOnCanvas(canvas: SkCanvas) {\n if (!this.recording) {\n throw new Error(\"No recording to draw\");\n }\n const ctx = createDrawingContext(\n this.Skia,\n this.recording.paintPool,\n canvas\n );\n replay(ctx, this.recording.commands);\n }\n\n abstract redraw(): void;\n}\n\nexport class StaticContainer extends Container {\n constructor(\n Skia: Skia,\n private nativeId: number\n ) {\n super(Skia);\n }\n\n redraw() {\n const recorder = new Recorder();\n visit(recorder, this.root);\n this.recording = recorder.getRecording();\n const isOnScreen = this.nativeId !== -1;\n if (isOnScreen) {\n const rec = this.Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n this.drawOnCanvas(canvas);\n const picture = rec.finishRecordingAsPicture();\n rec.dispose();\n SkiaViewApi.setJsiProperty(this.nativeId, \"picture\", picture);\n }\n }\n}\n"],"mappings":";;;AAIA,SAASA,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,KAAK,QAAQ,oBAAoB;AAC1C,SAASC,MAAM,QAAQ,mBAAmB;AAC1C,SAASC,oBAAoB,QAAQ,2BAA2B;AAEhE,OAAO,cAAc;AAErB,OAAO,MAAeC,SAAS,CAAC;EAK9BC,WAAWA,CAAWC,IAAU,EAAE;IAAA,KAAZA,IAAU,GAAVA,IAAU;IAAAC,eAAA,gBAJR,EAAE;IAAAA,eAAA,oBACc,IAAI;IAAAA,eAAA,oBACtB,KAAK;EAEQ;EAEnC,IAAIC,IAAIA,CAAA,EAAG;IACT,OAAO,IAAI,CAACC,KAAK;EACnB;EAEA,IAAID,IAAIA,CAACE,KAAa,EAAE;IACtB,IAAI,CAACD,KAAK,GAAGC,KAAK;EACpB;EAEAC,KAAKA,CAAA,EAAG;IACN,IAAI,CAACC,SAAS,GAAG,KAAK;EACxB;EAEAC,OAAOA,CAAA,EAAG;IACR,IAAI,CAACD,SAAS,GAAG,IAAI;EACvB;EAEAE,YAAYA,CAACC,MAAgB,EAAE;IAC7B,IAAI,CAAC,IAAI,CAACC,SAAS,EAAE;MACnB,MAAM,IAAIC,KAAK,CAAC,sBAAsB,CAAC;IACzC;IACA,MAAMC,GAAG,GAAGf,oBAAoB,CAC9B,IAAI,CAACG,IAAI,EACT,IAAI,CAACU,SAAS,CAACG,SAAS,EACxBJ,MACF,CAAC;IACDb,MAAM,CAACgB,GAAG,EAAE,IAAI,CAACF,SAAS,CAACI,QAAQ,CAAC;EACtC;AAGF;AAEA,OAAO,MAAMC,eAAe,SAASjB,SAAS,CAAC;EAC7CC,WAAWA,CACTC,IAAU,EACFgB,QAAgB,EACxB;IACA,KAAK,CAAChB,IAAI,CAAC;IAAC,KAFJgB,QAAgB,GAAhBA,QAAgB;EAG1B;EAEAC,MAAMA,CAAA,EAAG;IACP,MAAMC,QAAQ,GAAG,IAAIxB,QAAQ,CAAC,CAAC;IAC/BC,KAAK,CAACuB,QAAQ,EAAE,IAAI,CAAChB,IAAI,CAAC;IAC1B,IAAI,CAACQ,SAAS,GAAGQ,QAAQ,CAACC,YAAY,CAAC,CAAC;IACxC,MAAMC,UAAU,GAAG,IAAI,CAACJ,QAAQ,KAAK,CAAC,CAAC;IACvC,IAAII,UAAU,EAAE;MACd,MAAMC,GAAG,GAAG,IAAI,CAACrB,IAAI,CAACsB,eAAe,CAAC,CAAC;MACvC,MAAMb,MAAM,GAAGY,GAAG,CAACE,cAAc,CAAC,CAAC;MACnC,IAAI,CAACf,YAAY,CAACC,MAAM,CAAC;MACzB,MAAMe,OAAO,GAAGH,GAAG,CAACI,wBAAwB,CAAC,CAAC;MAC9CJ,GAAG,CAACK,OAAO,CAAC,CAAC;MACbC,WAAW,CAACC,cAAc,CAAC,IAAI,CAACZ,QAAQ,EAAE,SAAS,EAAEQ,OAAO,CAAC;IAC/D;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"names":["Recorder","disposeRecording","visit","replay","createDrawingContext","Container","constructor","Skia","_defineProperty","root","_root","value","mount","unmounted","unmount","drawOnCanvas","canvas","recording","Error","ctx","paintPool","commands","dispose","StaticContainer","nativeId","redraw","recorder","getRecording","isOnScreen","rec","PictureRecorder","beginRecording","picture","finishRecordingAsPicture","SkiaViewApi","setJsiProperty","lastPicture"],"sources":["StaticContainer.ts"],"sourcesContent":["import type { Skia, SkCanvas } from \"../skia/types\";\n\nimport type { Node } from \"./Node\";\nimport type { Recording } from \"./Recorder/Recorder\";\nimport { Recorder, disposeRecording } from \"./Recorder/Recorder\";\nimport { visit } from \"./Recorder/Visitor\";\nimport { replay } from \"./Recorder/Player\";\nimport { createDrawingContext } from \"./Recorder/DrawingContext\";\n\nimport \"../views/api\";\n\nexport abstract class Container {\n private _root: Node[] = [];\n protected recording: Recording | null = null;\n protected unmounted = false;\n\n constructor(protected Skia: Skia) {}\n\n get root() {\n return this._root;\n }\n\n set root(value: Node[]) {\n this._root = value;\n }\n\n mount() {\n this.unmounted = false;\n }\n\n unmount() {\n this.unmounted = true;\n }\n\n drawOnCanvas(canvas: SkCanvas) {\n if (!this.recording) {\n throw new Error(\"No recording to draw\");\n }\n const ctx = createDrawingContext(\n this.Skia,\n this.recording.paintPool,\n canvas\n );\n try {\n replay(ctx, this.recording.commands);\n } finally {\n // Frame-scoped objects created during the replay are no longer needed\n // once drawn — delete them, otherwise they leak on Web where the GC\n // cannot see WASM memory.\n ctx.dispose();\n }\n }\n\n abstract redraw(): void;\n}\n\nexport class StaticContainer extends Container {\n constructor(\n Skia: Skia,\n private nativeId: number\n ) {\n super(Skia);\n }\n\n unmount() {\n super.unmount();\n if (this.recording) {\n disposeRecording(this.recording);\n this.recording = null;\n }\n }\n\n redraw() {\n if (this.unmounted) {\n // The unmount commit triggers a last redraw — recording it would\n // resurrect a recording for a container that has just disposed it.\n return;\n }\n if (this.recording) {\n disposeRecording(this.recording);\n this.recording = null;\n }\n const recorder = new Recorder();\n visit(recorder, this.root);\n this.recording = recorder.getRecording();\n const isOnScreen = this.nativeId !== -1;\n if (isOnScreen) {\n const rec = this.Skia.PictureRecorder();\n const canvas = rec.beginRecording();\n this.drawOnCanvas(canvas);\n const picture = rec.finishRecordingAsPicture();\n rec.dispose();\n SkiaViewApi.setJsiProperty(this.nativeId, \"picture\", picture);\n // The view keeps its own reference to the picture it displays; this\n // one is renderer-owned and disposed with the recording.\n this.recording.lastPicture = picture;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,7 +4,9 @@ import type { SkiaPictureViewHandle } from "../views/SkiaPictureView.web";
4
4
  export type ISkiaViewApiWeb = ISkiaViewApi & {
5
5
  views: Record<string, SkiaPictureViewHandle>;
6
6
  deferedPictures: Record<string, SkPicture>;
7
+ unregisteredViews: Set<string>;
7
8
  registerView(nativeId: string, view: SkiaPictureViewHandle): void;
9
+ unregisterView(nativeId: string): void;
8
10
  };
9
11
  declare const _default: {};
10
12
  export default _default;
@@ -3,23 +3,37 @@
3
3
  global.SkiaViewApi = {
4
4
  views: {},
5
5
  deferedPictures: {},
6
+ unregisteredViews: new Set(),
6
7
  deferedOnSize: {},
7
8
  web: true,
8
9
  registerView(nativeId, view) {
10
+ this.unregisteredViews.delete(nativeId);
9
11
  // Maybe a picture for this view was already set
10
12
  if (this.deferedPictures[nativeId]) {
11
13
  view.setPicture(this.deferedPictures[nativeId]);
14
+ delete this.deferedPictures[nativeId];
12
15
  }
13
16
  this.views[nativeId] = view;
14
17
  },
18
+ unregisterView(nativeId) {
19
+ // Views must be removed on unmount: the handle's closures capture the
20
+ // canvas element, so a stale entry retains the whole detached DOM tree.
21
+ this.unregisteredViews.add(nativeId);
22
+ delete this.views[nativeId];
23
+ delete this.deferedPictures[nativeId];
24
+ },
15
25
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
26
  setJsiProperty(nativeId, name, value) {
17
27
  if (name === "picture") {
18
- if (!this.views[`${nativeId}`]) {
19
- this.deferedPictures[`${nativeId}`] = value;
20
- } else {
21
- this.views[`${nativeId}`].setPicture(value);
28
+ const id = `${nativeId}`;
29
+ if (this.views[id]) {
30
+ this.views[id].setPicture(value);
31
+ } else if (!this.unregisteredViews.has(id)) {
32
+ this.deferedPictures[id] = value;
22
33
  }
34
+ // Otherwise the view has unmounted (e.g. a trailing animation frame):
35
+ // drop the picture instead of deferring it for an id that will never
36
+ // register again, which would retain it forever.
23
37
  }
24
38
  },
25
39
  size(nativeId) {
@@ -33,14 +47,25 @@ global.SkiaViewApi = {
33
47
  }
34
48
  },
35
49
  requestRedraw(nativeId) {
36
- this.views[`${nativeId}`].redraw();
50
+ var _this$views;
51
+ // The view may already have unmounted (e.g. a trailing animation frame).
52
+ (_this$views = this.views[`${nativeId}`]) === null || _this$views === void 0 || _this$views.redraw();
37
53
  },
38
54
  makeImageSnapshot(nativeId, rect) {
39
- return this.views[`${nativeId}`].makeImageSnapshot(rect);
55
+ const view = this.views[`${nativeId}`];
56
+ if (!view) {
57
+ throw new Error(`Cannot make image snapshot: view with nativeID ${nativeId} is not registered (it may have unmounted)`);
58
+ }
59
+ return view.makeImageSnapshot(rect);
40
60
  },
41
61
  makeImageSnapshotAsync(nativeId, rect) {
42
62
  return new Promise((resolve, reject) => {
43
- const result = this.views[`${nativeId}`].makeImageSnapshot(rect);
63
+ const view = this.views[`${nativeId}`];
64
+ if (!view) {
65
+ reject(new Error(`Cannot make image snapshot: view with nativeID ${nativeId} is not registered (it may have unmounted)`));
66
+ return;
67
+ }
68
+ const result = view.makeImageSnapshot(rect);
44
69
  if (result) {
45
70
  resolve(result);
46
71
  } else {
@@ -1 +1 @@
1
- {"version":3,"names":["global","SkiaViewApi","views","deferedPictures","deferedOnSize","web","registerView","nativeId","view","setPicture","setJsiProperty","name","value","size","getSize","width","height","requestRedraw","redraw","makeImageSnapshot","rect","makeImageSnapshotAsync","Promise","resolve","reject","result","Error"],"sources":["NativeSkiaModule.web.ts"],"sourcesContent":["/* eslint-disable import/no-anonymous-default-export */\nimport type { SkPicture, SkRect } from \"../skia/types\";\nimport type { ISkiaViewApi } from \"../views/types\";\nimport type { SkiaPictureViewHandle } from \"../views/SkiaPictureView.web\";\n\nexport type ISkiaViewApiWeb = ISkiaViewApi & {\n views: Record<string, SkiaPictureViewHandle>;\n deferedPictures: Record<string, SkPicture>;\n registerView(nativeId: string, view: SkiaPictureViewHandle): void;\n};\n\nglobal.SkiaViewApi = {\n views: {},\n deferedPictures: {},\n deferedOnSize: {},\n web: true,\n registerView(nativeId: string, view: SkiaPictureViewHandle) {\n // Maybe a picture for this view was already set\n if (this.deferedPictures[nativeId]) {\n view.setPicture(this.deferedPictures[nativeId] as SkPicture);\n }\n this.views[nativeId] = view;\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setJsiProperty(nativeId: number, name: string, value: any) {\n if (name === \"picture\") {\n if (!this.views[`${nativeId}`]) {\n this.deferedPictures[`${nativeId}`] = value;\n } else {\n this.views[`${nativeId}`].setPicture(value);\n }\n }\n },\n size(nativeId: number) {\n if (this.views[`${nativeId}`]) {\n return this.views[`${nativeId}`].getSize();\n } else {\n return { width: 0, height: 0 };\n }\n },\n requestRedraw(nativeId: number) {\n this.views[`${nativeId}`].redraw();\n },\n makeImageSnapshot(nativeId: number, rect?: SkRect) {\n return this.views[`${nativeId}`].makeImageSnapshot(rect);\n },\n makeImageSnapshotAsync(nativeId: number, rect?: SkRect) {\n return new Promise((resolve, reject) => {\n const result = this.views[`${nativeId}`].makeImageSnapshot(rect);\n if (result) {\n resolve(result);\n } else {\n reject(new Error(\"Failed to make image snapshot\"));\n }\n });\n },\n} as ISkiaViewApiWeb;\n\n// eslint-disable-next-line import/no-default-export\nexport default {};\n"],"mappings":"AAAA;;AAWAA,MAAM,CAACC,WAAW,GAAG;EACnBC,KAAK,EAAE,CAAC,CAAC;EACTC,eAAe,EAAE,CAAC,CAAC;EACnBC,aAAa,EAAE,CAAC,CAAC;EACjBC,GAAG,EAAE,IAAI;EACTC,YAAYA,CAACC,QAAgB,EAAEC,IAA2B,EAAE;IAC1D;IACA,IAAI,IAAI,CAACL,eAAe,CAACI,QAAQ,CAAC,EAAE;MAClCC,IAAI,CAACC,UAAU,CAAC,IAAI,CAACN,eAAe,CAACI,QAAQ,CAAc,CAAC;IAC9D;IACA,IAAI,CAACL,KAAK,CAACK,QAAQ,CAAC,GAAGC,IAAI;EAC7B,CAAC;EACD;EACAE,cAAcA,CAACH,QAAgB,EAAEI,IAAY,EAAEC,KAAU,EAAE;IACzD,IAAID,IAAI,KAAK,SAAS,EAAE;MACtB,IAAI,CAAC,IAAI,CAACT,KAAK,CAAC,GAAGK,QAAQ,EAAE,CAAC,EAAE;QAC9B,IAAI,CAACJ,eAAe,CAAC,GAAGI,QAAQ,EAAE,CAAC,GAAGK,KAAK;MAC7C,CAAC,MAAM;QACL,IAAI,CAACV,KAAK,CAAC,GAAGK,QAAQ,EAAE,CAAC,CAACE,UAAU,CAACG,KAAK,CAAC;MAC7C;IACF;EACF,CAAC;EACDC,IAAIA,CAACN,QAAgB,EAAE;IACrB,IAAI,IAAI,CAACL,KAAK,CAAC,GAAGK,QAAQ,EAAE,CAAC,EAAE;MAC7B,OAAO,IAAI,CAACL,KAAK,CAAC,GAAGK,QAAQ,EAAE,CAAC,CAACO,OAAO,CAAC,CAAC;IAC5C,CAAC,MAAM;MACL,OAAO;QAAEC,KAAK,EAAE,CAAC;QAAEC,MAAM,EAAE;MAAE,CAAC;IAChC;EACF,CAAC;EACDC,aAAaA,CAACV,QAAgB,EAAE;IAC9B,IAAI,CAACL,KAAK,CAAC,GAAGK,QAAQ,EAAE,CAAC,CAACW,MAAM,CAAC,CAAC;EACpC,CAAC;EACDC,iBAAiBA,CAACZ,QAAgB,EAAEa,IAAa,EAAE;IACjD,OAAO,IAAI,CAAClB,KAAK,CAAC,GAAGK,QAAQ,EAAE,CAAC,CAACY,iBAAiB,CAACC,IAAI,CAAC;EAC1D,CAAC;EACDC,sBAAsBA,CAACd,QAAgB,EAAEa,IAAa,EAAE;IACtD,OAAO,IAAIE,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtC,MAAMC,MAAM,GAAG,IAAI,CAACvB,KAAK,CAAC,GAAGK,QAAQ,EAAE,CAAC,CAACY,iBAAiB,CAACC,IAAI,CAAC;MAChE,IAAIK,MAAM,EAAE;QACVF,OAAO,CAACE,MAAM,CAAC;MACjB,CAAC,MAAM;QACLD,MAAM,CAAC,IAAIE,KAAK,CAAC,+BAA+B,CAAC,CAAC;MACpD;IACF,CAAC,CAAC;EACJ;AACF,CAAoB;;AAEpB;AACA,eAAe,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["global","SkiaViewApi","views","deferedPictures","unregisteredViews","Set","deferedOnSize","web","registerView","nativeId","view","delete","setPicture","unregisterView","add","setJsiProperty","name","value","id","has","size","getSize","width","height","requestRedraw","_this$views","redraw","makeImageSnapshot","rect","Error","makeImageSnapshotAsync","Promise","resolve","reject","result"],"sources":["NativeSkiaModule.web.ts"],"sourcesContent":["/* eslint-disable import/no-anonymous-default-export */\nimport type { SkPicture, SkRect } from \"../skia/types\";\nimport type { ISkiaViewApi } from \"../views/types\";\nimport type { SkiaPictureViewHandle } from \"../views/SkiaPictureView.web\";\n\nexport type ISkiaViewApiWeb = ISkiaViewApi & {\n views: Record<string, SkiaPictureViewHandle>;\n deferedPictures: Record<string, SkPicture>;\n unregisteredViews: Set<string>;\n registerView(nativeId: string, view: SkiaPictureViewHandle): void;\n unregisterView(nativeId: string): void;\n};\n\nglobal.SkiaViewApi = {\n views: {},\n deferedPictures: {},\n unregisteredViews: new Set<string>(),\n deferedOnSize: {},\n web: true,\n registerView(nativeId: string, view: SkiaPictureViewHandle) {\n this.unregisteredViews.delete(nativeId);\n // Maybe a picture for this view was already set\n if (this.deferedPictures[nativeId]) {\n view.setPicture(this.deferedPictures[nativeId] as SkPicture);\n delete this.deferedPictures[nativeId];\n }\n this.views[nativeId] = view;\n },\n unregisterView(nativeId: string) {\n // Views must be removed on unmount: the handle's closures capture the\n // canvas element, so a stale entry retains the whole detached DOM tree.\n this.unregisteredViews.add(nativeId);\n delete this.views[nativeId];\n delete this.deferedPictures[nativeId];\n },\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n setJsiProperty(nativeId: number, name: string, value: any) {\n if (name === \"picture\") {\n const id = `${nativeId}`;\n if (this.views[id]) {\n this.views[id].setPicture(value);\n } else if (!this.unregisteredViews.has(id)) {\n this.deferedPictures[id] = value;\n }\n // Otherwise the view has unmounted (e.g. a trailing animation frame):\n // drop the picture instead of deferring it for an id that will never\n // register again, which would retain it forever.\n }\n },\n size(nativeId: number) {\n if (this.views[`${nativeId}`]) {\n return this.views[`${nativeId}`].getSize();\n } else {\n return { width: 0, height: 0 };\n }\n },\n requestRedraw(nativeId: number) {\n // The view may already have unmounted (e.g. a trailing animation frame).\n this.views[`${nativeId}`]?.redraw();\n },\n makeImageSnapshot(nativeId: number, rect?: SkRect) {\n const view = this.views[`${nativeId}`];\n if (!view) {\n throw new Error(\n `Cannot make image snapshot: view with nativeID ${nativeId} is not registered (it may have unmounted)`\n );\n }\n return view.makeImageSnapshot(rect);\n },\n makeImageSnapshotAsync(nativeId: number, rect?: SkRect) {\n return new Promise((resolve, reject) => {\n const view = this.views[`${nativeId}`];\n if (!view) {\n reject(\n new Error(\n `Cannot make image snapshot: view with nativeID ${nativeId} is not registered (it may have unmounted)`\n )\n );\n return;\n }\n const result = view.makeImageSnapshot(rect);\n if (result) {\n resolve(result);\n } else {\n reject(new Error(\"Failed to make image snapshot\"));\n }\n });\n },\n} as ISkiaViewApiWeb;\n\n// eslint-disable-next-line import/no-default-export\nexport default {};\n"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@ export interface NativeProps extends ViewProps {
4
4
  debug?: boolean;
5
5
  opaque?: boolean;
6
6
  colorSpace?: string;
7
+ highBitDepth?: boolean;
7
8
  androidWarmup?: boolean;
8
9
  pointerEvents?: WithDefault<"auto" | "none" | "box-none" | "box-only", "auto">;
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"names":["codegenNativeComponent"],"sources":["SkiaPictureViewNativeComponent.ts"],"sourcesContent":["import { codegenNativeComponent, type ViewProps } from \"react-native\";\nimport type { WithDefault } from \"react-native/Libraries/Types/CodegenTypes\";\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore - pointerEvents needs to be redeclared for codegen to generate native bindings\nexport interface NativeProps extends ViewProps {\n debug?: boolean;\n opaque?: boolean;\n colorSpace?: string;\n androidWarmup?: boolean;\n pointerEvents?: WithDefault<\n \"auto\" | \"none\" | \"box-none\" | \"box-only\",\n \"auto\"\n >;\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default codegenNativeComponent<NativeProps>(\"SkiaPictureView\");\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAwB,cAAc;;AAGrE;AACA;;AAYA;AACA,eAAeA,sBAAsB,CAAc,iBAAiB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["codegenNativeComponent"],"sources":["SkiaPictureViewNativeComponent.ts"],"sourcesContent":["import { codegenNativeComponent, type ViewProps } from \"react-native\";\nimport type { WithDefault } from \"react-native/Libraries/Types/CodegenTypes\";\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore - pointerEvents needs to be redeclared for codegen to generate native bindings\nexport interface NativeProps extends ViewProps {\n debug?: boolean;\n opaque?: boolean;\n colorSpace?: string;\n highBitDepth?: boolean;\n androidWarmup?: boolean;\n pointerEvents?: WithDefault<\n \"auto\" | \"none\" | \"box-none\" | \"box-only\",\n \"auto\"\n >;\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default codegenNativeComponent<NativeProps>(\"SkiaPictureView\");\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAwB,cAAc;;AAGrE;AACA;;AAaA;AACA,eAAeA,sBAAsB,CAAc,iBAAiB,CAAC","ignoreList":[]}
@@ -79,6 +79,7 @@ export class SkiaPictureView extends React.Component {
79
79
  mode,
80
80
  debug = false,
81
81
  opaque = false,
82
+ highBitDepth = false,
82
83
  androidWarmup = false,
83
84
  ...viewProps
84
85
  } = this.props;
@@ -87,6 +88,7 @@ export class SkiaPictureView extends React.Component {
87
88
  nativeID: `${this._nativeId}`,
88
89
  debug: debug,
89
90
  opaque: opaque,
91
+ highBitDepth: highBitDepth,
90
92
  androidWarmup: androidWarmup
91
93
  }, viewProps));
92
94
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","SkiaPictureViewNativeComponent","SkiaViewApi","SkiaViewNativeId","NativeSkiaPictureView","SkiaPictureView","Component","constructor","props","_defineProperty","_nativeId","current","picture","onSize","assertSkiaViewApi","setJsiProperty","tick","nativeId","componentDidUpdate","prevProps","componentWillUnmount","requestId","cancelAnimationFrame","redraw","mode","requestAnimationFrame","bind","makeImageSnapshot","rect","requestRedraw","render","debug","opaque","androidWarmup","viewProps","createElement","_extends","collapsable","nativeID","Error"],"sources":["SkiaPictureView.tsx"],"sourcesContent":["import React from \"react\";\n\nimport type { SkRect } from \"../skia/types\";\nimport SkiaPictureViewNativeComponent from \"../specs/SkiaPictureViewNativeComponent\";\n\nimport { SkiaViewApi } from \"./api\";\nimport type { SkiaPictureViewNativeProps } from \"./types\";\nimport { SkiaViewNativeId } from \"./SkiaViewNativeId\";\n\nconst NativeSkiaPictureView = SkiaPictureViewNativeComponent;\n\ninterface SkiaPictureViewProps extends SkiaPictureViewNativeProps {\n mode?: \"default\" | \"continuous\";\n androidWarmup?: boolean;\n}\n\nexport class SkiaPictureView extends React.Component<SkiaPictureViewProps> {\n private requestId = 0;\n\n constructor(props: SkiaPictureViewProps) {\n super(props);\n this._nativeId = SkiaViewNativeId.current++;\n const { picture, onSize } = props;\n if (picture) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", picture);\n }\n if (onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n private _nativeId: number;\n\n public get nativeId() {\n return this._nativeId;\n }\n\n componentDidUpdate(prevProps: SkiaPictureViewProps) {\n const { picture, onSize } = this.props;\n if (picture !== prevProps.picture) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", picture);\n }\n if (onSize !== prevProps.onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n componentWillUnmount() {\n if (this.requestId) {\n cancelAnimationFrame(this.requestId);\n }\n }\n\n private tick() {\n this.redraw();\n if (this.props.mode === \"continuous\") {\n this.requestId = requestAnimationFrame(this.tick.bind(this));\n }\n }\n\n /**\n * Creates a snapshot from the canvas in the surface\n * @param rect Rect to use as bounds. Optional.\n * @returns An Image object.\n */\n public makeImageSnapshot(rect?: SkRect) {\n assertSkiaViewApi();\n return SkiaViewApi.makeImageSnapshot(this._nativeId, rect);\n }\n\n /**\n * Sends a redraw request to the native SkiaView.\n */\n public redraw() {\n assertSkiaViewApi();\n SkiaViewApi.requestRedraw(this._nativeId);\n }\n\n render() {\n const {\n mode,\n debug = false,\n opaque = false,\n androidWarmup = false,\n ...viewProps\n } = this.props;\n return (\n <NativeSkiaPictureView\n collapsable={false}\n nativeID={`${this._nativeId}`}\n debug={debug}\n opaque={opaque}\n androidWarmup={androidWarmup}\n {...viewProps}\n />\n );\n }\n}\n\nconst assertSkiaViewApi = () => {\n if (\n SkiaViewApi === null ||\n SkiaViewApi.setJsiProperty === null ||\n SkiaViewApi.requestRedraw === null ||\n SkiaViewApi.makeImageSnapshot === null\n ) {\n throw Error(\"Skia View Api was not found.\");\n }\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","SkiaPictureViewNativeComponent","SkiaViewApi","SkiaViewNativeId","NativeSkiaPictureView","SkiaPictureView","Component","constructor","props","_defineProperty","_nativeId","current","picture","onSize","assertSkiaViewApi","setJsiProperty","tick","nativeId","componentDidUpdate","prevProps","componentWillUnmount","requestId","cancelAnimationFrame","redraw","mode","requestAnimationFrame","bind","makeImageSnapshot","rect","requestRedraw","render","debug","opaque","highBitDepth","androidWarmup","viewProps","createElement","_extends","collapsable","nativeID","Error"],"sources":["SkiaPictureView.tsx"],"sourcesContent":["import React from \"react\";\n\nimport type { SkRect } from \"../skia/types\";\nimport SkiaPictureViewNativeComponent from \"../specs/SkiaPictureViewNativeComponent\";\n\nimport { SkiaViewApi } from \"./api\";\nimport type { SkiaPictureViewNativeProps } from \"./types\";\nimport { SkiaViewNativeId } from \"./SkiaViewNativeId\";\n\nconst NativeSkiaPictureView = SkiaPictureViewNativeComponent;\n\ninterface SkiaPictureViewProps extends SkiaPictureViewNativeProps {\n mode?: \"default\" | \"continuous\";\n androidWarmup?: boolean;\n}\n\nexport class SkiaPictureView extends React.Component<SkiaPictureViewProps> {\n private requestId = 0;\n\n constructor(props: SkiaPictureViewProps) {\n super(props);\n this._nativeId = SkiaViewNativeId.current++;\n const { picture, onSize } = props;\n if (picture) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", picture);\n }\n if (onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n private _nativeId: number;\n\n public get nativeId() {\n return this._nativeId;\n }\n\n componentDidUpdate(prevProps: SkiaPictureViewProps) {\n const { picture, onSize } = this.props;\n if (picture !== prevProps.picture) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"picture\", picture);\n }\n if (onSize !== prevProps.onSize) {\n assertSkiaViewApi();\n SkiaViewApi.setJsiProperty(this._nativeId, \"onSize\", onSize);\n }\n this.tick();\n }\n\n componentWillUnmount() {\n if (this.requestId) {\n cancelAnimationFrame(this.requestId);\n }\n }\n\n private tick() {\n this.redraw();\n if (this.props.mode === \"continuous\") {\n this.requestId = requestAnimationFrame(this.tick.bind(this));\n }\n }\n\n /**\n * Creates a snapshot from the canvas in the surface\n * @param rect Rect to use as bounds. Optional.\n * @returns An Image object.\n */\n public makeImageSnapshot(rect?: SkRect) {\n assertSkiaViewApi();\n return SkiaViewApi.makeImageSnapshot(this._nativeId, rect);\n }\n\n /**\n * Sends a redraw request to the native SkiaView.\n */\n public redraw() {\n assertSkiaViewApi();\n SkiaViewApi.requestRedraw(this._nativeId);\n }\n\n render() {\n const {\n mode,\n debug = false,\n opaque = false,\n highBitDepth = false,\n androidWarmup = false,\n ...viewProps\n } = this.props;\n return (\n <NativeSkiaPictureView\n collapsable={false}\n nativeID={`${this._nativeId}`}\n debug={debug}\n opaque={opaque}\n highBitDepth={highBitDepth}\n androidWarmup={androidWarmup}\n {...viewProps}\n />\n );\n }\n}\n\nconst assertSkiaViewApi = () => {\n if (\n SkiaViewApi === null ||\n SkiaViewApi.setJsiProperty === null ||\n SkiaViewApi.requestRedraw === null ||\n SkiaViewApi.makeImageSnapshot === null\n ) {\n throw Error(\"Skia View Api was not found.\");\n }\n};\n"],"mappings":"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","ignoreList":[]}