@shopify/react-native-skia 1.7.6 → 1.7.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (364) hide show
  1. package/android/cpp/rnskia-android/OpenGLWindowContext.h +8 -1
  2. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +4 -4
  3. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.h +2 -2
  4. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +13 -0
  5. package/android/src/main/java/com/shopify/reactnative/skia/SkiaTextureView.java +24 -1
  6. package/cpp/rnskia/RNSkJsiViewApi.h +0 -3
  7. package/cpp/rnskia/RNSkView.h +6 -6
  8. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.h +2 -2
  9. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +2 -2
  10. package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
  11. package/lib/commonjs/dom/nodes/datatypes/Circle.d.ts +2 -3
  12. package/lib/commonjs/dom/nodes/datatypes/Circle.js +11 -6
  13. package/lib/commonjs/dom/nodes/datatypes/Circle.js.map +1 -1
  14. package/lib/commonjs/dom/nodes/datatypes/Enum.js +1 -0
  15. package/lib/commonjs/dom/nodes/datatypes/Enum.js.map +1 -1
  16. package/lib/commonjs/dom/nodes/datatypes/Fitting.js +1 -10
  17. package/lib/commonjs/dom/nodes/datatypes/Fitting.js.map +1 -1
  18. package/lib/commonjs/dom/nodes/datatypes/Gradient.js +3 -2
  19. package/lib/commonjs/dom/nodes/datatypes/Gradient.js.map +1 -1
  20. package/lib/commonjs/dom/nodes/datatypes/Path.js +4 -1
  21. package/lib/commonjs/dom/nodes/datatypes/Path.js.map +1 -1
  22. package/lib/commonjs/dom/nodes/datatypes/Radius.js +1 -0
  23. package/lib/commonjs/dom/nodes/datatypes/Radius.js.map +1 -1
  24. package/lib/commonjs/dom/nodes/datatypes/Rect.d.ts +3 -1
  25. package/lib/commonjs/dom/nodes/datatypes/Rect.js +17 -7
  26. package/lib/commonjs/dom/nodes/datatypes/Rect.js.map +1 -1
  27. package/lib/commonjs/dom/nodes/datatypes/Transform.d.ts +2 -1
  28. package/lib/commonjs/dom/nodes/datatypes/Transform.js +32 -1
  29. package/lib/commonjs/dom/nodes/datatypes/Transform.js.map +1 -1
  30. package/lib/commonjs/dom/nodes/drawings/Box.js +4 -5
  31. package/lib/commonjs/dom/nodes/drawings/Box.js.map +1 -1
  32. package/lib/commonjs/dom/nodes/drawings/CircleNode.js +1 -1
  33. package/lib/commonjs/dom/nodes/drawings/CircleNode.js.map +1 -1
  34. package/lib/commonjs/dom/types/DeclarationContext.d.ts +4 -4
  35. package/lib/commonjs/dom/types/DeclarationContext.js +8 -2
  36. package/lib/commonjs/dom/types/DeclarationContext.js.map +1 -1
  37. package/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
  38. package/lib/commonjs/external/reanimated/renderHelpers.js +11 -6
  39. package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
  40. package/lib/commonjs/renderer/HostConfig.js +8 -4
  41. package/lib/commonjs/renderer/HostConfig.js.map +1 -1
  42. package/lib/commonjs/renderer/__tests__/setup.d.ts +2 -3
  43. package/lib/commonjs/renderer/processors/Animations/Animations.d.ts +1 -2
  44. package/lib/commonjs/renderer/processors/Animations/Animations.js.map +1 -1
  45. package/lib/commonjs/renderer/typeddash.js +5 -1
  46. package/lib/commonjs/renderer/typeddash.js.map +1 -1
  47. package/lib/commonjs/skia/__tests__/setup.d.ts +0 -3
  48. package/lib/commonjs/skia/types/Path/Path.js +5 -1
  49. package/lib/commonjs/skia/types/Path/Path.js.map +1 -1
  50. package/lib/commonjs/skia/types/Shader/Shader.js +8 -6
  51. package/lib/commonjs/skia/types/Shader/Shader.js.map +1 -1
  52. package/lib/commonjs/sksg/Container.d.ts +19 -0
  53. package/lib/commonjs/sksg/Container.js +102 -0
  54. package/lib/commonjs/sksg/Container.js.map +1 -0
  55. package/lib/commonjs/sksg/DrawingContext.d.ts +16 -0
  56. package/lib/commonjs/sksg/DrawingContext.js +186 -0
  57. package/lib/commonjs/sksg/DrawingContext.js.map +1 -0
  58. package/lib/commonjs/sksg/HostConfig.d.ts +19 -0
  59. package/lib/commonjs/sksg/HostConfig.js +168 -0
  60. package/lib/commonjs/sksg/HostConfig.js.map +1 -0
  61. package/lib/commonjs/sksg/Reconciler.d.ts +17 -0
  62. package/lib/commonjs/sksg/Reconciler.js +54 -0
  63. package/lib/commonjs/sksg/Reconciler.js.map +1 -0
  64. package/lib/commonjs/sksg/__tests__/MockDeclaration.d.ts +57 -0
  65. package/lib/commonjs/sksg/nodes/Node.d.ts +7 -0
  66. package/lib/commonjs/sksg/nodes/Node.js +6 -0
  67. package/lib/commonjs/sksg/nodes/Node.js.map +1 -0
  68. package/lib/commonjs/sksg/nodes/colorFilters.d.ts +7 -0
  69. package/lib/commonjs/sksg/nodes/colorFilters.js +55 -0
  70. package/lib/commonjs/sksg/nodes/colorFilters.js.map +1 -0
  71. package/lib/commonjs/sksg/nodes/context.d.ts +3 -0
  72. package/lib/commonjs/sksg/nodes/context.js +448 -0
  73. package/lib/commonjs/sksg/nodes/context.js.map +1 -0
  74. package/lib/commonjs/sksg/nodes/drawings.d.ts +31 -0
  75. package/lib/commonjs/sksg/nodes/drawings.js +361 -0
  76. package/lib/commonjs/sksg/nodes/drawings.js.map +1 -0
  77. package/lib/commonjs/sksg/nodes/imageFilters.d.ts +14 -0
  78. package/lib/commonjs/sksg/nodes/imageFilters.js +135 -0
  79. package/lib/commonjs/sksg/nodes/imageFilters.js.map +1 -0
  80. package/lib/commonjs/sksg/nodes/index.d.ts +3 -0
  81. package/lib/commonjs/sksg/nodes/index.js +39 -0
  82. package/lib/commonjs/sksg/nodes/index.js.map +1 -0
  83. package/lib/commonjs/sksg/nodes/paint.d.ts +2 -0
  84. package/lib/commonjs/sksg/nodes/paint.js +80 -0
  85. package/lib/commonjs/sksg/nodes/paint.js.map +1 -0
  86. package/lib/commonjs/sksg/nodes/pathEffects.d.ts +8 -0
  87. package/lib/commonjs/sksg/nodes/pathEffects.js +84 -0
  88. package/lib/commonjs/sksg/nodes/pathEffects.js.map +1 -0
  89. package/lib/commonjs/sksg/nodes/shaders.d.ts +10 -0
  90. package/lib/commonjs/sksg/nodes/shaders.js +156 -0
  91. package/lib/commonjs/sksg/nodes/shaders.js.map +1 -0
  92. package/lib/commonjs/sksg/nodes/utils.d.ts +3 -0
  93. package/lib/commonjs/sksg/nodes/utils.js +25 -0
  94. package/lib/commonjs/sksg/nodes/utils.js.map +1 -0
  95. package/lib/commonjs/views/SkiaPictureView.js +0 -2
  96. package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
  97. package/lib/commonjs/views/types.d.ts +2 -2
  98. package/lib/commonjs/views/types.js.map +1 -1
  99. package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
  100. package/lib/module/dom/nodes/datatypes/Circle.d.ts +2 -3
  101. package/lib/module/dom/nodes/datatypes/Circle.js +12 -6
  102. package/lib/module/dom/nodes/datatypes/Circle.js.map +1 -1
  103. package/lib/module/dom/nodes/datatypes/Enum.js +2 -0
  104. package/lib/module/dom/nodes/datatypes/Enum.js.map +1 -1
  105. package/lib/module/dom/nodes/datatypes/Fitting.js +2 -10
  106. package/lib/module/dom/nodes/datatypes/Fitting.js.map +1 -1
  107. package/lib/module/dom/nodes/datatypes/Gradient.js +4 -2
  108. package/lib/module/dom/nodes/datatypes/Gradient.js.map +1 -1
  109. package/lib/module/dom/nodes/datatypes/Path.js +5 -1
  110. package/lib/module/dom/nodes/datatypes/Path.js.map +1 -1
  111. package/lib/module/dom/nodes/datatypes/Radius.js +2 -0
  112. package/lib/module/dom/nodes/datatypes/Radius.js.map +1 -1
  113. package/lib/module/dom/nodes/datatypes/Rect.d.ts +3 -1
  114. package/lib/module/dom/nodes/datatypes/Rect.js +14 -5
  115. package/lib/module/dom/nodes/datatypes/Rect.js.map +1 -1
  116. package/lib/module/dom/nodes/datatypes/Transform.d.ts +2 -1
  117. package/lib/module/dom/nodes/datatypes/Transform.js +31 -0
  118. package/lib/module/dom/nodes/datatypes/Transform.js.map +1 -1
  119. package/lib/module/dom/nodes/drawings/Box.js +1 -2
  120. package/lib/module/dom/nodes/drawings/Box.js.map +1 -1
  121. package/lib/module/dom/nodes/drawings/CircleNode.js +1 -1
  122. package/lib/module/dom/nodes/drawings/CircleNode.js.map +1 -1
  123. package/lib/module/dom/types/DeclarationContext.d.ts +4 -4
  124. package/lib/module/dom/types/DeclarationContext.js +9 -2
  125. package/lib/module/dom/types/DeclarationContext.js.map +1 -1
  126. package/lib/module/external/reanimated/renderHelpers.d.ts +2 -0
  127. package/lib/module/external/reanimated/renderHelpers.js +8 -4
  128. package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
  129. package/lib/module/renderer/HostConfig.js +8 -4
  130. package/lib/module/renderer/HostConfig.js.map +1 -1
  131. package/lib/module/renderer/__tests__/setup.d.ts +2 -3
  132. package/lib/module/renderer/processors/Animations/Animations.d.ts +1 -2
  133. package/lib/module/renderer/processors/Animations/Animations.js.map +1 -1
  134. package/lib/module/renderer/typeddash.js +5 -1
  135. package/lib/module/renderer/typeddash.js.map +1 -1
  136. package/lib/module/skia/__tests__/setup.d.ts +0 -3
  137. package/lib/module/skia/types/Path/Path.js +5 -1
  138. package/lib/module/skia/types/Path/Path.js.map +1 -1
  139. package/lib/module/skia/types/Shader/Shader.js +9 -6
  140. package/lib/module/skia/types/Shader/Shader.js.map +1 -1
  141. package/lib/module/sksg/Container.d.ts +19 -0
  142. package/lib/module/sksg/Container.js +94 -0
  143. package/lib/module/sksg/Container.js.map +1 -0
  144. package/lib/module/sksg/DrawingContext.d.ts +16 -0
  145. package/lib/module/sksg/DrawingContext.js +180 -0
  146. package/lib/module/sksg/DrawingContext.js.map +1 -0
  147. package/lib/module/sksg/HostConfig.d.ts +19 -0
  148. package/lib/module/sksg/HostConfig.js +161 -0
  149. package/lib/module/sksg/HostConfig.js.map +1 -0
  150. package/lib/module/sksg/Reconciler.d.ts +17 -0
  151. package/lib/module/sksg/Reconciler.js +46 -0
  152. package/lib/module/sksg/Reconciler.js.map +1 -0
  153. package/lib/module/sksg/__tests__/MockDeclaration.d.ts +57 -0
  154. package/lib/module/sksg/nodes/Node.d.ts +7 -0
  155. package/lib/module/sksg/nodes/Node.js +2 -0
  156. package/lib/module/sksg/nodes/Node.js.map +1 -0
  157. package/lib/module/sksg/nodes/colorFilters.d.ts +7 -0
  158. package/lib/module/sksg/nodes/colorFilters.js +44 -0
  159. package/lib/module/sksg/nodes/colorFilters.js.map +1 -0
  160. package/lib/module/sksg/nodes/context.d.ts +3 -0
  161. package/lib/module/sksg/nodes/context.js +443 -0
  162. package/lib/module/sksg/nodes/context.js.map +1 -0
  163. package/lib/module/sksg/nodes/drawings.d.ts +31 -0
  164. package/lib/module/sksg/nodes/drawings.js +334 -0
  165. package/lib/module/sksg/nodes/drawings.js.map +1 -0
  166. package/lib/module/sksg/nodes/imageFilters.d.ts +14 -0
  167. package/lib/module/sksg/nodes/imageFilters.js +122 -0
  168. package/lib/module/sksg/nodes/imageFilters.js.map +1 -0
  169. package/lib/module/sksg/nodes/index.d.ts +3 -0
  170. package/lib/module/sksg/nodes/index.js +4 -0
  171. package/lib/module/sksg/nodes/index.js.map +1 -0
  172. package/lib/module/sksg/nodes/paint.d.ts +2 -0
  173. package/lib/module/sksg/nodes/paint.js +74 -0
  174. package/lib/module/sksg/nodes/paint.js.map +1 -0
  175. package/lib/module/sksg/nodes/pathEffects.d.ts +8 -0
  176. package/lib/module/sksg/nodes/pathEffects.js +72 -0
  177. package/lib/module/sksg/nodes/pathEffects.js.map +1 -0
  178. package/lib/module/sksg/nodes/shaders.d.ts +10 -0
  179. package/lib/module/sksg/nodes/shaders.js +142 -0
  180. package/lib/module/sksg/nodes/shaders.js.map +1 -0
  181. package/lib/module/sksg/nodes/utils.d.ts +3 -0
  182. package/lib/module/sksg/nodes/utils.js +18 -0
  183. package/lib/module/sksg/nodes/utils.js.map +1 -0
  184. package/lib/module/views/SkiaPictureView.js +0 -2
  185. package/lib/module/views/SkiaPictureView.js.map +1 -1
  186. package/lib/module/views/types.d.ts +2 -2
  187. package/lib/module/views/types.js.map +1 -1
  188. package/lib/typescript/lib/commonjs/dom/nodes/datatypes/Circle.d.ts +1 -1
  189. package/lib/typescript/lib/commonjs/dom/nodes/datatypes/Rect.d.ts +2 -0
  190. package/lib/typescript/lib/commonjs/dom/nodes/datatypes/Transform.d.ts +1 -0
  191. package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
  192. package/lib/typescript/lib/commonjs/renderer/HostConfig.d.ts +3 -1
  193. package/lib/typescript/lib/commonjs/sksg/Container.d.ts +16 -0
  194. package/lib/typescript/lib/commonjs/sksg/DrawingContext.d.ts +26 -0
  195. package/lib/typescript/lib/commonjs/sksg/HostConfig.d.ts +50 -0
  196. package/lib/typescript/lib/commonjs/sksg/Reconciler.d.ts +16 -0
  197. package/lib/typescript/lib/commonjs/sksg/nodes/Node.d.ts +1 -0
  198. package/lib/typescript/lib/commonjs/sksg/nodes/colorFilters.d.ts +7 -0
  199. package/lib/typescript/lib/commonjs/sksg/nodes/context.d.ts +2 -0
  200. package/lib/typescript/lib/commonjs/sksg/nodes/drawings.d.ts +23 -0
  201. package/lib/typescript/lib/commonjs/sksg/nodes/imageFilters.d.ts +10 -0
  202. package/lib/typescript/lib/commonjs/sksg/nodes/index.d.ts +1 -0
  203. package/lib/typescript/lib/commonjs/sksg/nodes/paint.d.ts +2 -0
  204. package/lib/typescript/lib/commonjs/sksg/nodes/pathEffects.d.ts +8 -0
  205. package/lib/typescript/lib/commonjs/sksg/nodes/shaders.d.ts +10 -0
  206. package/lib/typescript/lib/commonjs/sksg/nodes/utils.d.ts +3 -0
  207. package/lib/typescript/lib/module/dom/nodes/datatypes/Circle.d.ts +1 -1
  208. package/lib/typescript/lib/module/dom/nodes/datatypes/Rect.d.ts +2 -0
  209. package/lib/typescript/lib/module/dom/nodes/datatypes/Transform.d.ts +1 -0
  210. package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +2 -0
  211. package/lib/typescript/lib/module/mock/index.d.ts +4 -1
  212. package/lib/typescript/lib/module/renderer/HostConfig.d.ts +3 -1
  213. package/lib/typescript/lib/module/sksg/Container.d.ts +15 -0
  214. package/lib/typescript/lib/module/sksg/DrawingContext.d.ts +26 -0
  215. package/lib/typescript/lib/module/sksg/HostConfig.d.ts +49 -0
  216. package/lib/typescript/lib/module/sksg/Reconciler.d.ts +15 -0
  217. package/lib/typescript/lib/module/sksg/nodes/colorFilters.d.ts +6 -0
  218. package/lib/typescript/lib/module/sksg/nodes/context.d.ts +1 -0
  219. package/lib/typescript/lib/module/sksg/nodes/drawings.d.ts +22 -0
  220. package/lib/typescript/lib/module/sksg/nodes/imageFilters.d.ts +9 -0
  221. package/lib/typescript/lib/module/sksg/nodes/index.d.ts +3 -0
  222. package/lib/typescript/lib/module/sksg/nodes/paint.d.ts +1 -0
  223. package/lib/typescript/lib/module/sksg/nodes/pathEffects.d.ts +7 -0
  224. package/lib/typescript/lib/module/sksg/nodes/shaders.d.ts +9 -0
  225. package/lib/typescript/lib/module/sksg/nodes/utils.d.ts +2 -0
  226. package/lib/typescript/src/dom/nodes/datatypes/Circle.d.ts +2 -3
  227. package/lib/typescript/src/dom/nodes/datatypes/Rect.d.ts +3 -1
  228. package/lib/typescript/src/dom/nodes/datatypes/Transform.d.ts +2 -1
  229. package/lib/typescript/src/dom/types/DeclarationContext.d.ts +4 -4
  230. package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +2 -0
  231. package/lib/typescript/src/renderer/__tests__/setup.d.ts +2 -3
  232. package/lib/typescript/src/renderer/processors/Animations/Animations.d.ts +1 -2
  233. package/lib/typescript/src/skia/__tests__/setup.d.ts +0 -3
  234. package/lib/typescript/src/sksg/Container.d.ts +19 -0
  235. package/lib/typescript/src/sksg/DrawingContext.d.ts +16 -0
  236. package/lib/typescript/src/sksg/HostConfig.d.ts +19 -0
  237. package/lib/typescript/src/sksg/Reconciler.d.ts +17 -0
  238. package/lib/typescript/src/sksg/__tests__/MockDeclaration.d.ts +57 -0
  239. package/lib/typescript/src/sksg/nodes/Node.d.ts +7 -0
  240. package/lib/typescript/src/sksg/nodes/colorFilters.d.ts +7 -0
  241. package/lib/typescript/src/sksg/nodes/context.d.ts +3 -0
  242. package/lib/typescript/src/sksg/nodes/drawings.d.ts +31 -0
  243. package/lib/typescript/src/sksg/nodes/imageFilters.d.ts +14 -0
  244. package/lib/typescript/src/sksg/nodes/index.d.ts +3 -0
  245. package/lib/typescript/src/sksg/nodes/paint.d.ts +2 -0
  246. package/lib/typescript/src/sksg/nodes/pathEffects.d.ts +8 -0
  247. package/lib/typescript/src/sksg/nodes/shaders.d.ts +10 -0
  248. package/lib/typescript/src/sksg/nodes/utils.d.ts +3 -0
  249. package/lib/typescript/src/views/types.d.ts +2 -2
  250. package/libs/{ios → apple}/libskia.xcframework/Info.plist +15 -0
  251. package/libs/{ios → apple}/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  252. package/libs/{ios → apple}/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  253. package/libs/apple/libskia.xcframework/macos-arm64_x86_64/libskia.a +0 -0
  254. package/libs/{ios → apple}/libskottie.xcframework/Info.plist +20 -5
  255. package/libs/{ios → apple}/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  256. package/libs/{ios → apple}/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  257. package/libs/apple/libskottie.xcframework/macos-arm64_x86_64/libskottie.a +0 -0
  258. package/libs/{ios → apple}/libskparagraph.xcframework/Info.plist +20 -5
  259. package/libs/{ios → apple}/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  260. package/libs/{ios → apple}/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  261. package/libs/apple/libskparagraph.xcframework/macos-arm64_x86_64/libskparagraph.a +0 -0
  262. package/libs/{ios → apple}/libsksg.xcframework/Info.plist +15 -0
  263. package/libs/{ios → apple}/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  264. package/libs/{ios → apple}/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  265. package/libs/apple/libsksg.xcframework/macos-arm64_x86_64/libsksg.a +0 -0
  266. package/libs/{ios → apple}/libskshaper.xcframework/Info.plist +20 -5
  267. package/libs/{ios → apple}/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  268. package/libs/{ios → apple}/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  269. package/libs/apple/libskshaper.xcframework/macos-arm64_x86_64/libskshaper.a +0 -0
  270. package/libs/{ios → apple}/libskunicode_core.xcframework/Info.plist +18 -3
  271. package/libs/{ios → apple}/libskunicode_core.xcframework/ios-arm64_arm64e/libskunicode_core.a +0 -0
  272. package/libs/{ios → apple}/libskunicode_core.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_core.a +0 -0
  273. package/libs/apple/libskunicode_core.xcframework/macos-arm64_x86_64/libskunicode_core.a +0 -0
  274. package/libs/{ios → apple}/libskunicode_libgrapheme.xcframework/Info.plist +15 -0
  275. package/libs/{ios → apple}/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e/libskunicode_libgrapheme.a +0 -0
  276. package/libs/{ios → apple}/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_libgrapheme.a +0 -0
  277. package/libs/apple/libskunicode_libgrapheme.xcframework/macos-arm64_x86_64/libskunicode_libgrapheme.a +0 -0
  278. package/libs/{ios → apple}/libsvg.xcframework/Info.plist +15 -0
  279. package/libs/{ios → apple}/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  280. package/libs/{ios → apple}/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  281. package/libs/apple/libsvg.xcframework/macos-arm64_x86_64/libsvg.a +0 -0
  282. package/package.json +3 -3
  283. package/react-native-skia.podspec +9 -9
  284. package/src/__tests__/setup.ts +1 -1
  285. package/src/__tests__/snapshots/sksg/breathe-0.png +0 -0
  286. package/src/__tests__/snapshots/sksg/breathe.png +0 -0
  287. package/src/__tests__/snapshots/sksg/simple.png +0 -0
  288. package/src/__tests__/snapshots/sksg/simple2.png +0 -0
  289. package/src/dom/nodes/JsiSkDOM.ts +2 -1
  290. package/src/dom/nodes/datatypes/Circle.ts +7 -5
  291. package/src/dom/nodes/datatypes/Enum.ts +2 -0
  292. package/src/dom/nodes/datatypes/Fitting.ts +2 -5
  293. package/src/dom/nodes/datatypes/Gradient.ts +4 -7
  294. package/src/dom/nodes/datatypes/Path.ts +5 -2
  295. package/src/dom/nodes/datatypes/Radius.ts +2 -0
  296. package/src/dom/nodes/datatypes/Rect.ts +40 -6
  297. package/src/dom/nodes/datatypes/Transform.ts +29 -1
  298. package/src/dom/nodes/drawings/Box.ts +1 -29
  299. package/src/dom/nodes/drawings/CircleNode.ts +1 -1
  300. package/src/dom/types/DeclarationContext.ts +12 -2
  301. package/src/external/reanimated/renderHelpers.ts +8 -4
  302. package/src/renderer/HostConfig.ts +10 -4
  303. package/src/renderer/__tests__/documentation/shapes/Box.spec.tsx +2 -2
  304. package/src/renderer/__tests__/setup.tsx +17 -15
  305. package/src/renderer/processors/Animations/Animations.ts +1 -5
  306. package/src/renderer/typeddash.ts +4 -2
  307. package/src/skia/__tests__/setup.ts +1 -51
  308. package/src/skia/types/Path/Path.ts +4 -2
  309. package/src/skia/types/Shader/Shader.ts +7 -4
  310. package/src/sksg/Container.ts +102 -0
  311. package/src/sksg/DrawingContext.ts +221 -0
  312. package/src/sksg/HostConfig.ts +287 -0
  313. package/src/sksg/Reconciler.ts +59 -0
  314. package/src/sksg/__tests__/Declarations.spec.tsx +235 -0
  315. package/src/sksg/__tests__/MockDeclaration.ts +140 -0
  316. package/src/sksg/__tests__/Simple.spec.tsx +148 -0
  317. package/src/sksg/nodes/Node.ts +8 -0
  318. package/src/sksg/nodes/colorFilters.ts +60 -0
  319. package/src/sksg/nodes/context.ts +489 -0
  320. package/src/sksg/nodes/drawings.ts +393 -0
  321. package/src/sksg/nodes/imageFilters.ts +183 -0
  322. package/src/sksg/nodes/index.ts +3 -0
  323. package/src/sksg/nodes/paint.ts +75 -0
  324. package/src/sksg/nodes/pathEffects.ts +95 -0
  325. package/src/sksg/nodes/shaders.ts +203 -0
  326. package/src/sksg/nodes/utils.ts +23 -0
  327. package/src/views/SkiaPictureView.tsx +0 -2
  328. package/src/views/types.ts +2 -2
  329. package/lib/commonjs/dom/__tests__/Shaders.spec.d.ts +0 -1
  330. package/lib/commonjs/renderer/__tests__/SkiaDOM.spec.d.ts +0 -1
  331. package/lib/module/dom/__tests__/Compose.spec.d.ts +0 -1
  332. package/lib/module/dom/__tests__/Demos.spec.d.ts +0 -1
  333. package/lib/module/dom/__tests__/DrawingContext.spec.d.ts +0 -1
  334. package/lib/module/dom/__tests__/Drawings.spec.d.ts +0 -1
  335. package/lib/module/dom/__tests__/Group.spec.d.ts +0 -1
  336. package/lib/module/dom/__tests__/Paint.spec.d.ts +0 -1
  337. package/lib/module/dom/__tests__/RenderNodes.spec.d.ts +0 -1
  338. package/lib/module/dom/__tests__/Shaders.spec.d.ts +0 -1
  339. package/lib/module/renderer/__tests__/SkiaDOM.spec.d.ts +0 -1
  340. package/lib/typescript/src/dom/__tests__/Compose.spec.d.ts +0 -1
  341. package/lib/typescript/src/dom/__tests__/Demos.spec.d.ts +0 -1
  342. package/lib/typescript/src/dom/__tests__/DrawingContext.spec.d.ts +0 -1
  343. package/lib/typescript/src/dom/__tests__/Drawings.spec.d.ts +0 -1
  344. package/lib/typescript/src/dom/__tests__/Group.spec.d.ts +0 -1
  345. package/lib/typescript/src/dom/__tests__/Paint.spec.d.ts +0 -1
  346. package/lib/typescript/src/dom/__tests__/RenderNodes.spec.d.ts +0 -1
  347. package/lib/typescript/src/dom/__tests__/Shaders.spec.d.ts +0 -1
  348. package/lib/typescript/src/renderer/__tests__/SkiaDOM.spec.d.ts +0 -1
  349. package/src/dom/__tests__/Compose.spec.tsx +0 -42
  350. package/src/dom/__tests__/Demos.spec.tsx +0 -145
  351. package/src/dom/__tests__/DrawingContext.spec.tsx +0 -99
  352. package/src/dom/__tests__/Drawings.spec.tsx +0 -95
  353. package/src/dom/__tests__/Group.spec.tsx +0 -132
  354. package/src/dom/__tests__/Paint.spec.tsx +0 -100
  355. package/src/dom/__tests__/RenderNodes.spec.tsx +0 -44
  356. package/src/dom/__tests__/Shaders.spec.tsx +0 -123
  357. package/src/renderer/__tests__/SkiaDOM.spec.tsx +0 -46
  358. /package/lib/commonjs/{dom/__tests__/Compose.spec.d.ts → sksg/__tests__/Declarations.spec.d.ts} +0 -0
  359. /package/lib/commonjs/{dom/__tests__/Demos.spec.d.ts → sksg/__tests__/Simple.spec.d.ts} +0 -0
  360. /package/lib/{commonjs/dom/__tests__/DrawingContext.spec.d.ts → module/sksg/__tests__/Declarations.spec.d.ts} +0 -0
  361. /package/lib/{commonjs/dom/__tests__/Drawings.spec.d.ts → module/sksg/__tests__/Simple.spec.d.ts} +0 -0
  362. /package/lib/{commonjs/dom/__tests__/Group.spec.d.ts → typescript/lib/module/sksg/nodes/Node.d.ts} +0 -0
  363. /package/lib/{commonjs/dom/__tests__/Paint.spec.d.ts → typescript/src/sksg/__tests__/Declarations.spec.d.ts} +0 -0
  364. /package/lib/{commonjs/dom/__tests__/RenderNodes.spec.d.ts → typescript/src/sksg/__tests__/Simple.spec.d.ts} +0 -0
@@ -1,5 +1,7 @@
1
+ "worklet";
2
+
1
3
  import type { TransformProps } from "../../types";
2
- import type { SkMatrix } from "../../../skia/types";
4
+ import type { Skia, SkMatrix } from "../../../skia/types";
3
5
  import { processTransform } from "../../../skia/types";
4
6
 
5
7
  export const processTransformProps = (m3: SkMatrix, props: TransformProps) => {
@@ -22,3 +24,29 @@ export const processTransformProps = (m3: SkMatrix, props: TransformProps) => {
22
24
  }
23
25
  }
24
26
  };
27
+
28
+ export const processTransformProps2 = (Skia: Skia, props: TransformProps) => {
29
+ const { transform, origin, matrix } = props;
30
+ if (matrix) {
31
+ const m3 = Skia.Matrix();
32
+ if (origin) {
33
+ m3.translate(origin.x, origin.y);
34
+ m3.concat(matrix);
35
+ m3.translate(-origin.x, -origin.y);
36
+ } else {
37
+ m3.concat(matrix);
38
+ }
39
+ return m3;
40
+ } else if (transform) {
41
+ const m3 = Skia.Matrix();
42
+ if (origin) {
43
+ m3.translate(origin.x, origin.y);
44
+ }
45
+ processTransform(m3, transform);
46
+ if (origin) {
47
+ m3.translate(-origin.x, -origin.y);
48
+ }
49
+ return m3;
50
+ }
51
+ return null;
52
+ };
@@ -1,4 +1,3 @@
1
- import type { SkRRect, Skia } from "../../../skia/types";
2
1
  import { BlurStyle, ClipOp, isRRect } from "../../../skia/types";
3
2
  import type { DrawingContext } from "../../types";
4
3
  import { NodeType } from "../../types";
@@ -7,34 +6,7 @@ import type { NodeContext } from "../Node";
7
6
  import { JsiDeclarationNode } from "../Node";
8
7
  import { JsiRenderNode } from "../RenderNode";
9
8
  import type { DeclarationContext } from "../../types/DeclarationContext";
10
-
11
- const inflate = (
12
- Skia: Skia,
13
- box: SkRRect,
14
- dx: number,
15
- dy: number,
16
- tx = 0,
17
- ty = 0
18
- ) =>
19
- Skia.RRectXY(
20
- Skia.XYWHRect(
21
- box.rect.x - dx + tx,
22
- box.rect.y - dy + ty,
23
- box.rect.width + 2 * dx,
24
- box.rect.height + 2 * dy
25
- ),
26
- box.rx + dx,
27
- box.ry + dy
28
- );
29
-
30
- const deflate = (
31
- Skia: Skia,
32
- box: SkRRect,
33
- dx: number,
34
- dy: number,
35
- tx = 0,
36
- ty = 0
37
- ) => inflate(Skia, box, -dx, -dy, tx, ty);
9
+ import { deflate, inflate } from "../datatypes";
38
10
 
39
11
  export class BoxShadowNode extends JsiDeclarationNode<BoxShadowProps> {
40
12
  constructor(ctx: NodeContext, props: BoxShadowProps) {
@@ -11,7 +11,7 @@ export class CircleNode extends JsiDrawingNode<CircleProps, SkPoint> {
11
11
  }
12
12
 
13
13
  protected deriveProps() {
14
- return processCircle(this.Skia, this.props).c;
14
+ return processCircle(this.props).c;
15
15
  }
16
16
 
17
17
  draw({ canvas, paint }: DrawingContext) {
@@ -1,3 +1,5 @@
1
+ "worklet";
2
+
1
3
  import type {
2
4
  SkShader,
3
5
  SkPaint,
@@ -25,8 +27,11 @@ export const composeDeclarations = <T>(filters: T[], composer: Composer<T>) => {
25
27
  class Declaration<T> {
26
28
  private decls: T[] = [];
27
29
  private indexes = [0];
30
+ private composer?: Composer<T>;
28
31
 
29
- constructor(private composer?: Composer<T>) {}
32
+ constructor(composer?: Composer<T>) {
33
+ this.composer = composer;
34
+ }
30
35
 
31
36
  private get index() {
32
37
  return this.indexes[this.indexes.length - 1];
@@ -53,6 +58,9 @@ class Declaration<T> {
53
58
  }
54
59
 
55
60
  popAllAsOne() {
61
+ if (this.decls.length === 0) {
62
+ return undefined;
63
+ }
56
64
  if (!this.composer) {
57
65
  throw new Error("No composer for this type of declaration");
58
66
  }
@@ -62,6 +70,7 @@ class Declaration<T> {
62
70
  }
63
71
 
64
72
  export class DeclarationContext {
73
+ public Skia: Skia;
65
74
  readonly paints: Declaration<SkPaint>;
66
75
  readonly maskFilters: Declaration<SkMaskFilter>;
67
76
  readonly shaders: Declaration<SkShader>;
@@ -69,7 +78,8 @@ export class DeclarationContext {
69
78
  readonly imageFilters: Declaration<SkImageFilter>;
70
79
  readonly colorFilters: Declaration<SkColorFilter>;
71
80
 
72
- constructor(private Skia: Skia) {
81
+ constructor(Skia: Skia) {
82
+ this.Skia = Skia;
73
83
  const peComp = this.Skia.PathEffect.MakeCompose.bind(this.Skia.PathEffect);
74
84
  const ifComp = this.Skia.ImageFilter.MakeCompose.bind(
75
85
  this.Skia.ImageFilter
@@ -6,13 +6,17 @@ import type { Node } from "../../dom/types";
6
6
 
7
7
  import Rea from "./ReanimatedProxy";
8
8
 
9
- let HAS_REANIMATED = false;
10
- let HAS_REANIMATED_3 = false;
9
+ export let HAS_REANIMATED = false;
10
+ export let HAS_REANIMATED_3 = false;
11
11
  try {
12
- require("react-native-reanimated");
13
- HAS_REANIMATED = true;
12
+ // This logic is convoluted but necessary
13
+ // In most systems, `require("react-native-reanimated")` throws an error, all is well.
14
+ // In webpack, in some configuration it will return an empty object.
15
+ // So it will not throw an error and we need to check the version to know if it's there.
14
16
  const reanimatedVersion =
15
17
  require("react-native-reanimated/package.json").version;
18
+ require("react-native-reanimated");
19
+ HAS_REANIMATED = !!reanimatedVersion;
16
20
  if (
17
21
  reanimatedVersion &&
18
22
  (reanimatedVersion >= "3.0.0" || reanimatedVersion.includes("3.0.0-"))
@@ -1,5 +1,5 @@
1
1
  /*global NodeJS*/
2
- import type { HostConfig } from "react-reconciler";
2
+ import type { Fiber, HostConfig } from "react-reconciler";
3
3
  import { DefaultEventPriority } from "react-reconciler/constants";
4
4
 
5
5
  import type { NodeType, Node } from "../dom/types";
@@ -78,7 +78,6 @@ export const skHostConfig: SkiaHostConfig = {
78
78
  /**
79
79
  * This function is used by the reconciler in order to calculate current time for prioritising work.
80
80
  */
81
- now: Date.now,
82
81
  supportsMutation: true,
83
82
  isPrimaryRenderer: false,
84
83
  supportsPersistence: false,
@@ -242,11 +241,18 @@ export const skHostConfig: SkiaHostConfig = {
242
241
  insertBefore: (parent, child, before) => {
243
242
  insertBefore(parent, child, before);
244
243
  },
244
+
245
245
  // see https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874
246
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
247
- // @ts-expect-error
248
246
  getCurrentEventPriority: () => DefaultEventPriority,
249
247
  beforeActiveInstanceBlur: () => {},
250
248
  afterActiveInstanceBlur: () => {},
251
249
  detachDeletedInstance: () => {},
250
+
251
+ getInstanceFromNode: function (_node): Fiber | null | undefined {
252
+ return null;
253
+ },
254
+ prepareScopeUpdate: function (_scopeInstance, _instance): void {},
255
+ getInstanceFromScope: function (_scopeInstance): Instance | null {
256
+ return null;
257
+ },
252
258
  };
@@ -27,7 +27,7 @@ describe("Box", () => {
27
27
  </Box>
28
28
  </>
29
29
  );
30
- processResult(surface, docPath("box/shadows.png"), true);
30
+ processResult(surface, docPath("box/shadows.png"));
31
31
  });
32
32
  it("should draw a box with red stroke", () => {
33
33
  const size = width / 2;
@@ -41,6 +41,6 @@ describe("Box", () => {
41
41
  />
42
42
  </>
43
43
  );
44
- processResult(surface, docPath("box/box-stroke.png"), true);
44
+ processResult(surface, docPath("box/box-stroke.png"));
45
45
  });
46
46
  });
@@ -8,15 +8,13 @@ import type { Server, WebSocket } from "ws";
8
8
 
9
9
  import type * as SkiaExports from "../../index";
10
10
  import { JsiSkApi } from "../../skia/web/JsiSkia";
11
- import type { Node } from "../../dom/nodes";
12
- import { JsiSkDOM } from "../../dom/nodes";
13
11
  import { Group } from "../components";
14
12
  import type { SkImage, SkFont, Skia, SkCanvas } from "../../skia/types";
15
13
  import { isPath } from "../../skia/types";
16
14
  import { E2E } from "../../__tests__/setup";
17
- import { SkiaRoot } from "../Reconciler";
18
- import { JsiDrawingContext } from "../../dom/types/DrawingContext";
19
15
  import { LoadSkiaWeb } from "../../web/LoadSkiaWeb";
16
+ import { SkiaSGRoot } from "../../sksg/Reconciler";
17
+ import type { Node } from "../../sksg/nodes";
20
18
 
21
19
  import { SkiaObject } from "./e2e/setup";
22
20
 
@@ -172,11 +170,6 @@ export const importSkia = (): typeof SkiaExports => {
172
170
  };
173
171
  };
174
172
 
175
- export const getSkDOM = () => {
176
- const { Skia } = importSkia();
177
- return new JsiSkDOM({ Skia }, false);
178
- };
179
-
180
173
  export const PIXEL_RATIO = 3;
181
174
  export const fontSize = 32 * PIXEL_RATIO;
182
175
  export const width = 256 * PIXEL_RATIO;
@@ -197,21 +190,20 @@ export const mountCanvas = (element: ReactNode) => {
197
190
  expect(ckSurface).toBeDefined();
198
191
  const canvas = ckSurface.getCanvas();
199
192
 
200
- const root = new SkiaRoot(Skia, false);
193
+ const root = new SkiaSGRoot(Skia);
201
194
  root.render(element);
202
195
  return {
203
196
  surface: ckSurface,
204
197
  root,
205
198
  draw: () => {
206
- const ctx = new JsiDrawingContext(Skia, canvas);
207
- root.dom.render(ctx);
199
+ root.drawOnCanvas(canvas);
208
200
  },
209
201
  };
210
202
  };
211
203
 
212
204
  export const serialize = (element: ReactNode) => {
213
205
  const { root } = mountCanvas(element);
214
- const serialized = serializeNode(root.dom);
206
+ const serialized = serializeNode(root.sg);
215
207
  return JSON.stringify(serialized);
216
208
  };
217
209
 
@@ -228,6 +220,8 @@ interface SerializedNode {
228
220
  const serializeSkOjects = (obj: any): any => {
229
221
  if (typeof obj === "function") {
230
222
  return { __typename__: "Function", source: `${obj.toString()}` };
223
+ } else if (obj instanceof Float32Array) {
224
+ return { __typename__: "Float32Array", value: Array.from(obj) };
231
225
  } else if (Array.isArray(obj)) {
232
226
  return obj.map((item) => serializeSkOjects(item));
233
227
  } else if (obj && typeof obj === "object" && "__typename__" in obj) {
@@ -302,13 +296,21 @@ const serializeSkOjects = (obj: any): any => {
302
296
  ty: obj.ty,
303
297
  };
304
298
  }
299
+ } else if (obj && typeof obj === "object") {
300
+ const result = Object.keys(obj).reduce((acc, key) => {
301
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
302
+ // @ts-ignore
303
+ acc[key] = serializeSkOjects(obj[key]);
304
+ return acc;
305
+ }, {});
306
+ return result;
305
307
  }
306
308
  return obj;
307
309
  };
308
310
 
309
311
  const serializeNode = (node: Node<any>): SerializedNode => {
310
312
  const props: any = {};
311
- const ogProps = node.getProps();
313
+ const ogProps = node.props;
312
314
  if (ogProps) {
313
315
  Object.keys(ogProps)
314
316
  .filter((key) => key !== "children")
@@ -319,7 +321,7 @@ const serializeNode = (node: Node<any>): SerializedNode => {
319
321
  return {
320
322
  type: node.type,
321
323
  props,
322
- children: node.children().map((child) => serializeNode(child)),
324
+ children: node.children.map((child) => serializeNode(child)),
323
325
  };
324
326
  };
325
327
 
@@ -1,8 +1,4 @@
1
- export type SharedValueType<T = number> = {
2
- value: T;
3
- };
4
-
5
- export type AnimatedProp<T> = T | SharedValueType<T>;
1
+ export type AnimatedProp<T> = T | { value: T };
6
2
 
7
3
  export type AnimatedProps<T, O extends keyof T | never = never> = {
8
4
  [K in keyof T]: K extends "children"
@@ -1,5 +1,7 @@
1
- export const mapKeys = <T extends object>(obj: T) =>
2
- Object.keys(obj) as (keyof T)[];
1
+ export const mapKeys = <T extends object>(obj: T) => {
2
+ "worklet";
3
+ return Object.keys(obj) as (keyof T)[];
4
+ };
3
5
 
4
6
  export const exhaustiveCheck = (a: never): never => {
5
7
  "worklet";
@@ -1,7 +1,5 @@
1
- import type { Node } from "../../dom/types";
2
- import { mapKeys } from "../../renderer/typeddash";
3
1
  import { LoadSkiaWeb } from "../../web/LoadSkiaWeb";
4
- import { isMatrix, Skia } from "../types";
2
+ import { Skia } from "../types";
5
3
  import { JsiSkApi } from "../web";
6
4
 
7
5
  let Skia: ReturnType<typeof JsiSkApi>;
@@ -27,51 +25,3 @@ export const setupSkia = (width = 256, height = 256) => {
27
25
  CanvasKit: global.CanvasKit,
28
26
  };
29
27
  };
30
-
31
- const asValue = (value: unknown) => {
32
- if (value instanceof Float32Array) {
33
- return Array.from(value)
34
- .map((v) => Math.round(v * 100) / 100)
35
- .join(", ");
36
- } else if (isMatrix(value)) {
37
- // TODO: https://github.com/Shopify/react-native-skia/issues/715
38
- return "m3x3";
39
- } else if (
40
- typeof value === "object" &&
41
- value !== null &&
42
- "x" in value &&
43
- "y" in value
44
- ) {
45
- const v = value as { x: number; y: number };
46
- return `{x:${v.x}, y:${v.y}}`;
47
- }
48
- return value;
49
- };
50
-
51
- export const printAsXML = (node: Node<unknown>) => {
52
- console.log(asXML(node));
53
- };
54
-
55
- // Print nodes as XML tree
56
- export const asXML = (node: Node<unknown>, indent = 0): string => {
57
- // TODO: remove cast
58
- const hasChildren = node.children().length > 0;
59
- const props = node.getProps() as object;
60
- const space = new Array(indent).fill(" ").join("");
61
- const keys = mapKeys(props).filter((key) => props[key] !== undefined);
62
- if (hasChildren) {
63
- return `${space}<${node.type}${keys.length > 0 ? " " : ""}${keys
64
- .map((name) => `${name}="${asValue(props[name])}"`)
65
- .join(" ")}>
66
- ${node
67
- .children()
68
-
69
- .map((child) => asXML(child, indent + 2)).join(`
70
- `)}
71
- ${space}</${node.type}>`;
72
- } else {
73
- return `${space}<${node.type} ${keys
74
- .map((name) => `${name}="${asValue(props[name])}"`)
75
- .join(" ")} />`;
76
- }
77
- };
@@ -47,8 +47,10 @@ export enum PathVerb {
47
47
 
48
48
  export type PathCommand = number[];
49
49
 
50
- export const isPath = (obj: SkJSIInstance<string> | null): obj is SkPath =>
51
- obj !== null && obj.__typename__ === "Path";
50
+ export const isPath = (obj: SkJSIInstance<string> | null): obj is SkPath => {
51
+ "worklet";
52
+ return obj !== null && obj.__typename__ === "Path";
53
+ };
52
54
 
53
55
  export interface SkPath extends SkJSIInstance<"Path"> {
54
56
  /**
@@ -1,3 +1,5 @@
1
+ "worklet";
2
+
1
3
  import type { SkJSIInstance } from "../JsiInstance";
2
4
  import type { Vector } from "../Point";
3
5
  import type { SkRuntimeEffect, SkRuntimeShaderBuilder } from "../RuntimeEffect";
@@ -18,12 +20,13 @@ export interface Uniforms {
18
20
  [name: string]: Uniform;
19
21
  }
20
22
 
21
- const isVector = (obj: unknown): obj is Vector =>
23
+ const isVector = (obj: unknown): obj is Vector => {
22
24
  // We have an issue to check property existence on JSI backed instances
23
25
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
- (obj as any).x !== undefined && (obj as any).y !== undefined;
26
+ return (obj as any).x !== undefined && (obj as any).y !== undefined;
27
+ };
25
28
 
26
- const processValue = (values: number[], value: Uniform) => {
29
+ function processValue(values: number[], value: Uniform) {
27
30
  if (typeof value === "number") {
28
31
  values.push(value);
29
32
  } else if (Array.isArray(value)) {
@@ -33,7 +36,7 @@ const processValue = (values: number[], value: Uniform) => {
33
36
  } else if (value instanceof Float32Array) {
34
37
  values.push(...value);
35
38
  }
36
- };
39
+ }
37
40
 
38
41
  export const processUniforms = (
39
42
  source: SkRuntimeEffect,
@@ -0,0 +1,102 @@
1
+ import { type SharedValue } from "react-native-reanimated";
2
+
3
+ import Rea from "../external/reanimated/ReanimatedProxy";
4
+ import type { Skia, SkCanvas } from "../skia/types";
5
+ import {
6
+ HAS_REANIMATED,
7
+ HAS_REANIMATED_3,
8
+ } from "../external/reanimated/renderHelpers";
9
+
10
+ import { DrawingContext } from "./DrawingContext";
11
+ import type { Node } from "./nodes";
12
+ import { draw, isSharedValue } from "./nodes";
13
+
14
+ const drawOnscreen = (Skia: Skia, nativeId: number, root: Node[]) => {
15
+ "worklet";
16
+ const rec = Skia.PictureRecorder();
17
+ const canvas = rec.beginRecording();
18
+ // TODO: This is only support from 3.15 and above (check the exact version)
19
+ // This could be polyfilled in C++ if needed (or in JS via functions only?)
20
+ const ctx = new DrawingContext(Skia, canvas);
21
+ root.forEach((node) => {
22
+ draw(ctx, node);
23
+ });
24
+ const picture = rec.finishRecordingAsPicture();
25
+ SkiaViewApi.setJsiProperty(nativeId, "picture", picture);
26
+ };
27
+
28
+ export class Container {
29
+ public _root: Node[] = [];
30
+ public unmounted = false;
31
+
32
+ private values = new Set<SharedValue<unknown>>();
33
+ private mapperId: number | null = null;
34
+
35
+ constructor(public Skia: Skia, private nativeId: number) {}
36
+
37
+ get root() {
38
+ return this._root;
39
+ }
40
+
41
+ set root(root: Node[]) {
42
+ const isOnscreen = this.nativeId !== -1;
43
+ if (HAS_REANIMATED && !HAS_REANIMATED_3) {
44
+ throw new Error("React Native Skia only supports Reanimated 3 and above");
45
+ }
46
+ if (isOnscreen) {
47
+ if (this.mapperId !== null) {
48
+ Rea.stopMapper(this.mapperId);
49
+ }
50
+ const { nativeId, Skia } = this;
51
+ this.mapperId = Rea.startMapper(() => {
52
+ "worklet";
53
+ drawOnscreen(Skia, nativeId, root);
54
+ }, Array.from(this.values));
55
+ }
56
+ this._root = root;
57
+ }
58
+
59
+ clear() {
60
+ console.log("clear container");
61
+ }
62
+
63
+ redraw() {
64
+ const isOnscreen = this.nativeId !== -1;
65
+ if (HAS_REANIMATED && !HAS_REANIMATED_3) {
66
+ throw new Error("React Native Skia only supports Reanimated 3 and above");
67
+ }
68
+ if (isOnscreen) {
69
+ const { nativeId, Skia, root } = this;
70
+ Rea.runOnUI(() => {
71
+ drawOnscreen(Skia, nativeId, root);
72
+ })();
73
+ }
74
+ }
75
+
76
+ getNativeId() {
77
+ return this.nativeId;
78
+ }
79
+
80
+ unregisterValues(values: object) {
81
+ Object.values(values)
82
+ .filter(isSharedValue)
83
+ .forEach((value) => {
84
+ this.values.delete(value);
85
+ });
86
+ }
87
+
88
+ registerValues(values: object) {
89
+ Object.values(values)
90
+ .filter(isSharedValue)
91
+ .forEach((value) => {
92
+ this.values.add(value);
93
+ });
94
+ }
95
+
96
+ drawOnCanvas(canvas: SkCanvas) {
97
+ const ctx = new DrawingContext(this.Skia, canvas);
98
+ this.root.forEach((node) => {
99
+ draw(ctx, node);
100
+ });
101
+ }
102
+ }