@shopify/react-native-skia 0.1.172 → 0.1.174

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 (324) hide show
  1. package/android/CMakeLists.txt +1 -0
  2. package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +5 -0
  3. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.cpp +106 -5
  4. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.h +3 -1
  5. package/cpp/api/JsiSkSurface.h +7 -1
  6. package/cpp/api/JsiSkSurfaceFactory.h +15 -2
  7. package/cpp/rnskia/RNSkDomView.cpp +2 -4
  8. package/cpp/rnskia/RNSkJsView.cpp +3 -0
  9. package/cpp/rnskia/RNSkPictureView.h +3 -0
  10. package/cpp/rnskia/RNSkPlatformContext.h +9 -0
  11. package/cpp/rnskia/dom/JsiDomApi.h +1 -0
  12. package/cpp/rnskia/dom/base/ConcatablePaint.cpp +117 -0
  13. package/cpp/rnskia/dom/base/ConcatablePaint.h +49 -0
  14. package/cpp/rnskia/dom/base/Declaration.h +88 -0
  15. package/cpp/rnskia/dom/base/DeclarationContext.h +79 -0
  16. package/cpp/rnskia/dom/base/DerivedNodeProp.h +25 -9
  17. package/cpp/rnskia/dom/base/DrawingContext.cpp +32 -186
  18. package/cpp/rnskia/dom/base/DrawingContext.h +45 -64
  19. package/cpp/rnskia/dom/base/JsiDomDeclarationNode.h +35 -106
  20. package/cpp/rnskia/dom/base/JsiDomDrawingNode.h +28 -9
  21. package/cpp/rnskia/dom/base/JsiDomNode.h +46 -17
  22. package/cpp/rnskia/dom/base/JsiDomRenderNode.h +81 -67
  23. package/cpp/rnskia/dom/base/NodeProp.h +12 -2
  24. package/cpp/rnskia/dom/base/NodePropsContainer.h +15 -16
  25. package/cpp/rnskia/dom/nodes/JsiBackdropFilterNode.h +22 -11
  26. package/cpp/rnskia/dom/nodes/JsiBlendNode.h +43 -59
  27. package/cpp/rnskia/dom/nodes/JsiBlurMaskNode.h +16 -17
  28. package/cpp/rnskia/dom/nodes/JsiBoxShadowNode.h +6 -5
  29. package/cpp/rnskia/dom/nodes/JsiColorFilterNodes.h +45 -69
  30. package/cpp/rnskia/dom/nodes/JsiGroupNode.h +1 -1
  31. package/cpp/rnskia/dom/nodes/JsiImageFilterNodes.h +121 -161
  32. package/cpp/rnskia/dom/nodes/JsiImageNode.h +1 -0
  33. package/cpp/rnskia/dom/nodes/JsiLayerNode.h +28 -18
  34. package/cpp/rnskia/dom/nodes/JsiPaintNode.h +82 -45
  35. package/cpp/rnskia/dom/nodes/JsiPathEffectNodes.h +68 -101
  36. package/cpp/rnskia/dom/nodes/JsiPathNode.h +3 -2
  37. package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +150 -207
  38. package/cpp/rnskia/dom/props/BezierProps.h +4 -2
  39. package/cpp/rnskia/dom/props/BlendModeProp.h +4 -2
  40. package/cpp/rnskia/dom/props/BoxShadowProps.h +8 -10
  41. package/cpp/rnskia/dom/props/CircleProp.h +6 -5
  42. package/cpp/rnskia/dom/props/ClipProp.h +6 -4
  43. package/cpp/rnskia/dom/props/ColorProp.h +8 -4
  44. package/cpp/rnskia/dom/props/DrawingProp.h +5 -3
  45. package/cpp/rnskia/dom/props/FontProp.h +4 -2
  46. package/cpp/rnskia/dom/props/GlyphsProp.h +4 -2
  47. package/cpp/rnskia/dom/props/ImageProps.h +9 -6
  48. package/cpp/rnskia/dom/props/LayerProp.h +6 -4
  49. package/cpp/rnskia/dom/props/MatrixProp.h +4 -2
  50. package/cpp/rnskia/dom/props/NumbersProp.h +8 -4
  51. package/cpp/rnskia/dom/props/PaintProps.h +55 -92
  52. package/cpp/rnskia/dom/props/PathProp.h +4 -2
  53. package/cpp/rnskia/dom/props/PictureProp.h +4 -2
  54. package/cpp/rnskia/dom/props/PointProp.h +4 -2
  55. package/cpp/rnskia/dom/props/PointsProp.h +8 -4
  56. package/cpp/rnskia/dom/props/RRectProp.h +23 -16
  57. package/cpp/rnskia/dom/props/RadiusProp.h +4 -2
  58. package/cpp/rnskia/dom/props/RectProp.h +18 -12
  59. package/cpp/rnskia/dom/props/StrokeProps.h +8 -4
  60. package/cpp/rnskia/dom/props/SvgProp.h +4 -2
  61. package/cpp/rnskia/dom/props/TextBlobProp.h +10 -8
  62. package/cpp/rnskia/dom/props/TileModeProp.h +4 -2
  63. package/cpp/rnskia/dom/props/TransformProp.h +4 -2
  64. package/cpp/rnskia/dom/props/TransformsProps.h +5 -7
  65. package/cpp/rnskia/dom/props/UniformsProp.h +4 -2
  66. package/cpp/rnskia/dom/props/VertexModeProp.h +4 -2
  67. package/cpp/rnskia/dom/props/VerticesProps.h +7 -11
  68. package/ios/RNSkia-iOS/DisplayLink.mm +22 -24
  69. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +53 -50
  70. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +2 -0
  71. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +56 -25
  72. package/ios/RNSkia-iOS/SkiaDomViewManager.mm +17 -17
  73. package/ios/RNSkia-iOS/SkiaDrawViewManager.mm +17 -17
  74. package/ios/RNSkia-iOS/SkiaManager.mm +12 -10
  75. package/ios/RNSkia-iOS/SkiaMetalRenderer.h +5 -0
  76. package/ios/RNSkia-iOS/SkiaMetalRenderer.mm +53 -0
  77. package/ios/RNSkia-iOS/SkiaPictureViewManager.mm +17 -17
  78. package/ios/RNSkia-iOS/SkiaUIView.mm +63 -53
  79. package/ios/RNSkiaModule.mm +5 -7
  80. package/lib/commonjs/dom/nodes/DrawingNode.js +5 -1
  81. package/lib/commonjs/dom/nodes/DrawingNode.js.map +1 -1
  82. package/lib/commonjs/dom/nodes/JsiSkDOM.d.ts +33 -34
  83. package/lib/commonjs/dom/nodes/LayerNode.js +13 -6
  84. package/lib/commonjs/dom/nodes/LayerNode.js.map +1 -1
  85. package/lib/commonjs/dom/nodes/Node.d.ts +6 -11
  86. package/lib/commonjs/dom/nodes/Node.js +8 -26
  87. package/lib/commonjs/dom/nodes/Node.js.map +1 -1
  88. package/lib/commonjs/dom/nodes/PaintContext.js.map +1 -1
  89. package/lib/commonjs/dom/nodes/PaintNode.d.ts +3 -3
  90. package/lib/commonjs/dom/nodes/PaintNode.js +32 -15
  91. package/lib/commonjs/dom/nodes/PaintNode.js.map +1 -1
  92. package/lib/commonjs/dom/nodes/RenderNode.d.ts +2 -3
  93. package/lib/commonjs/dom/nodes/RenderNode.js +19 -187
  94. package/lib/commonjs/dom/nodes/RenderNode.js.map +1 -1
  95. package/lib/commonjs/dom/nodes/drawings/BackdropFilterNode.d.ts +1 -1
  96. package/lib/commonjs/dom/nodes/drawings/BackdropFilterNode.js +25 -7
  97. package/lib/commonjs/dom/nodes/drawings/BackdropFilterNode.js.map +1 -1
  98. package/lib/commonjs/dom/nodes/drawings/Box.d.ts +3 -1
  99. package/lib/commonjs/dom/nodes/drawings/Box.js +3 -0
  100. package/lib/commonjs/dom/nodes/drawings/Box.js.map +1 -1
  101. package/lib/commonjs/dom/nodes/paint/BlendNode.d.ts +3 -7
  102. package/lib/commonjs/dom/nodes/paint/BlendNode.js +16 -47
  103. package/lib/commonjs/dom/nodes/paint/BlendNode.js.map +1 -1
  104. package/lib/commonjs/dom/nodes/paint/ColorFilters.d.ts +10 -11
  105. package/lib/commonjs/dom/nodes/paint/ColorFilters.js +29 -43
  106. package/lib/commonjs/dom/nodes/paint/ColorFilters.js.map +1 -1
  107. package/lib/commonjs/dom/nodes/paint/ImageFilters.d.ts +11 -11
  108. package/lib/commonjs/dom/nodes/paint/ImageFilters.js +45 -42
  109. package/lib/commonjs/dom/nodes/paint/ImageFilters.js.map +1 -1
  110. package/lib/commonjs/dom/nodes/paint/MaskFilters.d.ts +3 -3
  111. package/lib/commonjs/dom/nodes/paint/MaskFilters.js +3 -2
  112. package/lib/commonjs/dom/nodes/paint/MaskFilters.js.map +1 -1
  113. package/lib/commonjs/dom/nodes/paint/PathEffects.d.ts +15 -18
  114. package/lib/commonjs/dom/nodes/paint/PathEffects.js +30 -72
  115. package/lib/commonjs/dom/nodes/paint/PathEffects.js.map +1 -1
  116. package/lib/commonjs/dom/nodes/paint/Shaders.d.ts +11 -12
  117. package/lib/commonjs/dom/nodes/paint/Shaders.js +28 -18
  118. package/lib/commonjs/dom/nodes/paint/Shaders.js.map +1 -1
  119. package/lib/commonjs/dom/types/DeclarationContext.d.ts +29 -0
  120. package/lib/commonjs/dom/types/DeclarationContext.js +118 -0
  121. package/lib/commonjs/dom/types/DeclarationContext.js.map +1 -0
  122. package/lib/commonjs/dom/types/DrawingContext.d.ts +18 -1
  123. package/lib/commonjs/dom/types/DrawingContext.js +330 -0
  124. package/lib/commonjs/dom/types/DrawingContext.js.map +1 -1
  125. package/lib/commonjs/dom/types/Node.d.ts +4 -10
  126. package/lib/commonjs/dom/types/Node.js.map +1 -1
  127. package/lib/commonjs/dom/types/SkDOM.d.ts +22 -23
  128. package/lib/commonjs/dom/types/SkDOM.js.map +1 -1
  129. package/lib/commonjs/dom/types/index.d.ts +1 -0
  130. package/lib/commonjs/dom/types/index.js +13 -0
  131. package/lib/commonjs/dom/types/index.js.map +1 -1
  132. package/lib/commonjs/index.d.ts +1 -0
  133. package/lib/commonjs/index.js +13 -0
  134. package/lib/commonjs/index.js.map +1 -1
  135. package/lib/commonjs/renderer/Canvas.js +3 -3
  136. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  137. package/lib/commonjs/renderer/DrawingContext.d.ts +4 -3
  138. package/lib/commonjs/renderer/DrawingContext.js.map +1 -1
  139. package/lib/commonjs/renderer/HostComponents.d.ts +35 -35
  140. package/lib/commonjs/renderer/HostComponents.js.map +1 -1
  141. package/lib/commonjs/renderer/HostConfig.js +1 -0
  142. package/lib/commonjs/renderer/HostConfig.js.map +1 -1
  143. package/lib/commonjs/renderer/Offscreen.d.ts +2 -0
  144. package/lib/commonjs/renderer/Offscreen.js +31 -0
  145. package/lib/commonjs/renderer/Offscreen.js.map +1 -0
  146. package/lib/commonjs/renderer/Reconciler.js +0 -1
  147. package/lib/commonjs/renderer/Reconciler.js.map +1 -1
  148. package/lib/commonjs/skia/types/Surface/Surface.d.ts +4 -0
  149. package/lib/commonjs/skia/types/Surface/Surface.js.map +1 -1
  150. package/lib/commonjs/skia/types/Surface/SurfaceFactory.d.ts +6 -0
  151. package/lib/commonjs/skia/types/Surface/SurfaceFactory.js.map +1 -1
  152. package/lib/commonjs/skia/web/JsiSkDataFactory.js +0 -1
  153. package/lib/commonjs/skia/web/JsiSkDataFactory.js.map +1 -1
  154. package/lib/commonjs/skia/web/JsiSkImage.d.ts +1 -0
  155. package/lib/commonjs/skia/web/JsiSkImage.js +34 -3
  156. package/lib/commonjs/skia/web/JsiSkImage.js.map +1 -1
  157. package/lib/commonjs/skia/web/JsiSkSurface.d.ts +1 -0
  158. package/lib/commonjs/skia/web/JsiSkSurface.js +4 -0
  159. package/lib/commonjs/skia/web/JsiSkSurface.js.map +1 -1
  160. package/lib/commonjs/skia/web/JsiSkSurfaceFactory.d.ts +2 -1
  161. package/lib/commonjs/skia/web/JsiSkSurfaceFactory.js +21 -1
  162. package/lib/commonjs/skia/web/JsiSkSurfaceFactory.js.map +1 -1
  163. package/lib/commonjs/views/SkiaBaseWebView.js +14 -8
  164. package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
  165. package/lib/commonjs/views/SkiaDomView.web.js +3 -14
  166. package/lib/commonjs/views/SkiaDomView.web.js.map +1 -1
  167. package/lib/commonjs/views/SkiaPictureView.web.js +0 -7
  168. package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
  169. package/lib/commonjs/views/SkiaView.web.js +0 -7
  170. package/lib/commonjs/views/SkiaView.web.js.map +1 -1
  171. package/lib/module/dom/nodes/DrawingNode.js +5 -1
  172. package/lib/module/dom/nodes/DrawingNode.js.map +1 -1
  173. package/lib/module/dom/nodes/JsiSkDOM.d.ts +33 -34
  174. package/lib/module/dom/nodes/LayerNode.js +13 -7
  175. package/lib/module/dom/nodes/LayerNode.js.map +1 -1
  176. package/lib/module/dom/nodes/Node.d.ts +6 -11
  177. package/lib/module/dom/nodes/Node.js +8 -25
  178. package/lib/module/dom/nodes/Node.js.map +1 -1
  179. package/lib/module/dom/nodes/PaintContext.js.map +1 -1
  180. package/lib/module/dom/nodes/PaintNode.d.ts +3 -3
  181. package/lib/module/dom/nodes/PaintNode.js +32 -15
  182. package/lib/module/dom/nodes/PaintNode.js.map +1 -1
  183. package/lib/module/dom/nodes/RenderNode.d.ts +2 -3
  184. package/lib/module/dom/nodes/RenderNode.js +20 -187
  185. package/lib/module/dom/nodes/RenderNode.js.map +1 -1
  186. package/lib/module/dom/nodes/drawings/BackdropFilterNode.d.ts +1 -1
  187. package/lib/module/dom/nodes/drawings/BackdropFilterNode.js +23 -4
  188. package/lib/module/dom/nodes/drawings/BackdropFilterNode.js.map +1 -1
  189. package/lib/module/dom/nodes/drawings/Box.d.ts +3 -1
  190. package/lib/module/dom/nodes/drawings/Box.js +3 -0
  191. package/lib/module/dom/nodes/drawings/Box.js.map +1 -1
  192. package/lib/module/dom/nodes/paint/BlendNode.d.ts +3 -7
  193. package/lib/module/dom/nodes/paint/BlendNode.js +15 -46
  194. package/lib/module/dom/nodes/paint/BlendNode.js.map +1 -1
  195. package/lib/module/dom/nodes/paint/ColorFilters.d.ts +10 -11
  196. package/lib/module/dom/nodes/paint/ColorFilters.js +29 -43
  197. package/lib/module/dom/nodes/paint/ColorFilters.js.map +1 -1
  198. package/lib/module/dom/nodes/paint/ImageFilters.d.ts +11 -11
  199. package/lib/module/dom/nodes/paint/ImageFilters.js +48 -41
  200. package/lib/module/dom/nodes/paint/ImageFilters.js.map +1 -1
  201. package/lib/module/dom/nodes/paint/MaskFilters.d.ts +3 -3
  202. package/lib/module/dom/nodes/paint/MaskFilters.js +3 -2
  203. package/lib/module/dom/nodes/paint/MaskFilters.js.map +1 -1
  204. package/lib/module/dom/nodes/paint/PathEffects.d.ts +15 -18
  205. package/lib/module/dom/nodes/paint/PathEffects.js +29 -72
  206. package/lib/module/dom/nodes/paint/PathEffects.js.map +1 -1
  207. package/lib/module/dom/nodes/paint/Shaders.d.ts +11 -12
  208. package/lib/module/dom/nodes/paint/Shaders.js +28 -18
  209. package/lib/module/dom/nodes/paint/Shaders.js.map +1 -1
  210. package/lib/module/dom/types/DeclarationContext.d.ts +29 -0
  211. package/lib/module/dom/types/DeclarationContext.js +107 -0
  212. package/lib/module/dom/types/DeclarationContext.js.map +1 -0
  213. package/lib/module/dom/types/DrawingContext.d.ts +18 -1
  214. package/lib/module/dom/types/DrawingContext.js +322 -1
  215. package/lib/module/dom/types/DrawingContext.js.map +1 -1
  216. package/lib/module/dom/types/Node.d.ts +4 -10
  217. package/lib/module/dom/types/Node.js.map +1 -1
  218. package/lib/module/dom/types/SkDOM.d.ts +22 -23
  219. package/lib/module/dom/types/SkDOM.js.map +1 -1
  220. package/lib/module/dom/types/index.d.ts +1 -0
  221. package/lib/module/dom/types/index.js +1 -0
  222. package/lib/module/dom/types/index.js.map +1 -1
  223. package/lib/module/index.d.ts +1 -0
  224. package/lib/module/index.js +1 -0
  225. package/lib/module/index.js.map +1 -1
  226. package/lib/module/renderer/Canvas.js +3 -3
  227. package/lib/module/renderer/Canvas.js.map +1 -1
  228. package/lib/module/renderer/DrawingContext.d.ts +4 -3
  229. package/lib/module/renderer/DrawingContext.js.map +1 -1
  230. package/lib/module/renderer/HostComponents.d.ts +35 -35
  231. package/lib/module/renderer/HostComponents.js.map +1 -1
  232. package/lib/module/renderer/HostConfig.js +1 -0
  233. package/lib/module/renderer/HostConfig.js.map +1 -1
  234. package/lib/module/renderer/Offscreen.d.ts +2 -0
  235. package/lib/module/renderer/Offscreen.js +19 -0
  236. package/lib/module/renderer/Offscreen.js.map +1 -0
  237. package/lib/module/renderer/Reconciler.js +0 -1
  238. package/lib/module/renderer/Reconciler.js.map +1 -1
  239. package/lib/module/skia/types/Surface/Surface.d.ts +4 -0
  240. package/lib/module/skia/types/Surface/Surface.js.map +1 -1
  241. package/lib/module/skia/types/Surface/SurfaceFactory.d.ts +6 -0
  242. package/lib/module/skia/types/Surface/SurfaceFactory.js.map +1 -1
  243. package/lib/module/skia/web/JsiSkDataFactory.js +0 -1
  244. package/lib/module/skia/web/JsiSkDataFactory.js.map +1 -1
  245. package/lib/module/skia/web/JsiSkImage.d.ts +1 -0
  246. package/lib/module/skia/web/JsiSkImage.js +31 -3
  247. package/lib/module/skia/web/JsiSkImage.js.map +1 -1
  248. package/lib/module/skia/web/JsiSkSurface.d.ts +1 -0
  249. package/lib/module/skia/web/JsiSkSurface.js +4 -0
  250. package/lib/module/skia/web/JsiSkSurface.js.map +1 -1
  251. package/lib/module/skia/web/JsiSkSurfaceFactory.d.ts +2 -1
  252. package/lib/module/skia/web/JsiSkSurfaceFactory.js +21 -1
  253. package/lib/module/skia/web/JsiSkSurfaceFactory.js.map +1 -1
  254. package/lib/module/views/SkiaBaseWebView.js +14 -8
  255. package/lib/module/views/SkiaBaseWebView.js.map +1 -1
  256. package/lib/module/views/SkiaDomView.web.js +2 -11
  257. package/lib/module/views/SkiaDomView.web.js.map +1 -1
  258. package/lib/module/views/SkiaPictureView.web.js +0 -5
  259. package/lib/module/views/SkiaPictureView.web.js.map +1 -1
  260. package/lib/module/views/SkiaView.web.js +0 -5
  261. package/lib/module/views/SkiaView.web.js.map +1 -1
  262. package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +33 -34
  263. package/lib/typescript/src/dom/nodes/Node.d.ts +6 -11
  264. package/lib/typescript/src/dom/nodes/PaintNode.d.ts +3 -3
  265. package/lib/typescript/src/dom/nodes/RenderNode.d.ts +2 -3
  266. package/lib/typescript/src/dom/nodes/drawings/BackdropFilterNode.d.ts +1 -1
  267. package/lib/typescript/src/dom/nodes/drawings/Box.d.ts +3 -1
  268. package/lib/typescript/src/dom/nodes/paint/BlendNode.d.ts +3 -7
  269. package/lib/typescript/src/dom/nodes/paint/ColorFilters.d.ts +10 -11
  270. package/lib/typescript/src/dom/nodes/paint/ImageFilters.d.ts +11 -11
  271. package/lib/typescript/src/dom/nodes/paint/MaskFilters.d.ts +3 -3
  272. package/lib/typescript/src/dom/nodes/paint/PathEffects.d.ts +15 -18
  273. package/lib/typescript/src/dom/nodes/paint/Shaders.d.ts +11 -12
  274. package/lib/typescript/src/dom/types/DeclarationContext.d.ts +29 -0
  275. package/lib/typescript/src/dom/types/DrawingContext.d.ts +18 -1
  276. package/lib/typescript/src/dom/types/Node.d.ts +4 -10
  277. package/lib/typescript/src/dom/types/SkDOM.d.ts +22 -23
  278. package/lib/typescript/src/dom/types/index.d.ts +1 -0
  279. package/lib/typescript/src/index.d.ts +1 -0
  280. package/lib/typescript/src/renderer/DrawingContext.d.ts +4 -3
  281. package/lib/typescript/src/renderer/HostComponents.d.ts +35 -35
  282. package/lib/typescript/src/renderer/Offscreen.d.ts +2 -0
  283. package/lib/typescript/src/skia/types/Surface/Surface.d.ts +4 -0
  284. package/lib/typescript/src/skia/types/Surface/SurfaceFactory.d.ts +6 -0
  285. package/lib/typescript/src/skia/web/JsiSkImage.d.ts +1 -0
  286. package/lib/typescript/src/skia/web/JsiSkSurface.d.ts +1 -0
  287. package/lib/typescript/src/skia/web/JsiSkSurfaceFactory.d.ts +2 -1
  288. package/package.json +1 -1
  289. package/src/dom/nodes/DrawingNode.ts +5 -1
  290. package/src/dom/nodes/LayerNode.ts +13 -11
  291. package/src/dom/nodes/Node.ts +18 -41
  292. package/src/dom/nodes/PaintContext.ts +1 -0
  293. package/src/dom/nodes/PaintNode.ts +28 -18
  294. package/src/dom/nodes/RenderNode.ts +25 -183
  295. package/src/dom/nodes/drawings/BackdropFilterNode.ts +18 -11
  296. package/src/dom/nodes/drawings/Box.ts +6 -4
  297. package/src/dom/nodes/paint/BlendNode.ts +16 -63
  298. package/src/dom/nodes/paint/ColorFilters.ts +32 -55
  299. package/src/dom/nodes/paint/ImageFilters.ts +58 -53
  300. package/src/dom/nodes/paint/MaskFilters.ts +5 -7
  301. package/src/dom/nodes/paint/PathEffects.ts +37 -90
  302. package/src/dom/nodes/paint/Shaders.ts +31 -29
  303. package/src/dom/types/DeclarationContext.ts +105 -0
  304. package/src/dom/types/DrawingContext.ts +304 -1
  305. package/src/dom/types/Node.ts +4 -20
  306. package/src/dom/types/SkDOM.ts +22 -43
  307. package/src/dom/types/index.ts +1 -0
  308. package/src/index.ts +1 -0
  309. package/src/renderer/Canvas.tsx +3 -3
  310. package/src/renderer/DrawingContext.ts +4 -5
  311. package/src/renderer/HostComponents.ts +34 -53
  312. package/src/renderer/HostConfig.ts +1 -0
  313. package/src/renderer/Offscreen.tsx +24 -0
  314. package/src/renderer/Reconciler.tsx +0 -1
  315. package/src/skia/types/Surface/Surface.ts +5 -0
  316. package/src/skia/types/Surface/SurfaceFactory.ts +7 -0
  317. package/src/skia/web/JsiSkDataFactory.ts +0 -1
  318. package/src/skia/web/JsiSkImage.ts +26 -2
  319. package/src/skia/web/JsiSkSurface.ts +4 -0
  320. package/src/skia/web/JsiSkSurfaceFactory.ts +21 -2
  321. package/src/views/SkiaBaseWebView.tsx +9 -2
  322. package/src/views/SkiaDomView.web.tsx +2 -13
  323. package/src/views/SkiaPictureView.web.tsx +0 -7
  324. package/src/views/SkiaView.web.tsx +0 -7
@@ -15,7 +15,8 @@ namespace RNSkia {
15
15
  */
16
16
  class BaseDerivedProp : public BaseNodeProp {
17
17
  public:
18
- BaseDerivedProp() : BaseNodeProp() {}
18
+ explicit BaseDerivedProp(const std::function<void(BaseNodeProp *)> &onChange)
19
+ : _onChange(onChange), BaseNodeProp() {}
19
20
 
20
21
  /**
21
22
  Starts the process of updating and reading props
@@ -70,7 +71,11 @@ public:
70
71
  /**
71
72
  Adds a property to the derived property child props.
72
73
  */
73
- template <typename P = BaseNodeProp> P *addProperty(std::shared_ptr<P> prop) {
74
+ template <class _Tp, class... _Args,
75
+ class = std::_EnableIf<!std::is_array<_Tp>::value>>
76
+ _Tp *defineProperty(_Args &&...__args) {
77
+ auto prop =
78
+ std::make_shared<_Tp>(std::forward<_Args>(__args)..., _onChange);
74
79
  _properties.push_back(prop);
75
80
  return prop.get();
76
81
  }
@@ -104,6 +109,7 @@ protected:
104
109
  private:
105
110
  std::vector<std::shared_ptr<BaseNodeProp>> _properties;
106
111
  std::atomic<bool> _isChanged = {false};
112
+ std::function<void(BaseNodeProp *)> _onChange;
107
113
  };
108
114
 
109
115
  /**
@@ -111,12 +117,21 @@ private:
111
117
  */
112
118
  template <typename T> class DerivedProp : public BaseDerivedProp {
113
119
  public:
114
- DerivedProp() : BaseDerivedProp() {}
120
+ explicit DerivedProp(const std::function<void(BaseNodeProp *)> &onChange)
121
+ : BaseDerivedProp(onChange) {}
115
122
 
116
123
  /**
117
124
  Returns the derived value
118
125
  */
119
- std::shared_ptr<const T> getDerivedValue() { return _derivedValue; }
126
+ std::shared_ptr<const T> getDerivedValue() {
127
+ return std::const_pointer_cast<const T>(_derivedValue);
128
+ }
129
+
130
+ /**
131
+ Returns a mutable version of the derived value. Used by the paint props to
132
+ keep a drawing context
133
+ */
134
+ std::shared_ptr<T> getUnsafeDerivedValue() { return _derivedValue; }
120
135
 
121
136
  /**
122
137
  Returns true if is optional and one of the child props has a value, or all
@@ -128,7 +143,7 @@ protected:
128
143
  /**
129
144
  Set derived value from sub classes
130
145
  */
131
- void setDerivedValue(std::shared_ptr<const T> value) {
146
+ void setDerivedValue(std::shared_ptr<T> value) {
132
147
  setIsChanged(_derivedValue != value);
133
148
  _derivedValue = value;
134
149
  }
@@ -136,13 +151,13 @@ protected:
136
151
  /**
137
152
  Set derived value from sub classes
138
153
  */
139
- void setDerivedValue(const T &&value) {
154
+ void setDerivedValue(T &&value) {
140
155
  setIsChanged(true);
141
- _derivedValue = std::make_shared<const T>(std::move(value));
156
+ _derivedValue = std::make_shared<T>(std::move(value));
142
157
  }
143
158
 
144
159
  private:
145
- std::shared_ptr<const T> _derivedValue;
160
+ std::shared_ptr<T> _derivedValue;
146
161
  };
147
162
 
148
163
  /**
@@ -150,7 +165,8 @@ private:
150
165
  */
151
166
  template <typename T> class DerivedSkProp : public BaseDerivedProp {
152
167
  public:
153
- DerivedSkProp() : BaseDerivedProp() {}
168
+ explicit DerivedSkProp(const std::function<void(BaseNodeProp *)> &onChange)
169
+ : BaseDerivedProp(onChange) {}
154
170
 
155
171
  /**
156
172
  Returns the derived value
@@ -1,209 +1,55 @@
1
1
  #include "DrawingContext.h"
2
2
 
3
- namespace RNSkia {
4
-
5
- DrawingContext::DrawingContext(std::shared_ptr<SkPaint> paint)
6
- : DrawingContext("root") {
7
- _paint = paint;
8
- }
9
-
10
- DrawingContext::DrawingContext(DrawingContext *parent, const char *source)
11
- : DrawingContext(source) {
12
- _parent = parent;
13
- }
14
-
15
- std::shared_ptr<DrawingContext>
16
- DrawingContext::inheritContext(const char *source) {
17
- auto result = std::make_shared<DrawingContext>(this, source);
18
- _children.push_back(result);
19
- return result;
20
- }
21
-
22
- std::string DrawingContext::getDebugDescription() {
23
- std::string v = "ctx for " + std::string(_source) + ":";
24
-
25
- if (_paint != nullptr) {
26
- auto clr = _paint->getColor();
27
- auto a = SkColorGetA(clr);
28
- auto r = SkColorGetR(clr);
29
- auto g = SkColorGetG(clr);
30
- auto b = SkColorGetB(clr);
31
-
32
- if (r > 0 || g > 0 || b > 0) {
33
- v += " color:rgba(" + std::to_string(r) + ", " + std::to_string(g) +
34
- ", " + std::to_string(b) + ", " + std::to_string(a) + ")";
35
- }
36
-
37
- if (_paint->getMaskFilter() != nullptr) {
38
- v += " maskFilter:set";
39
- }
40
- auto blendMode = _paint->getBlendMode_or(SkBlendMode::kSrc);
41
- if (blendMode != SkBlendMode::kSrc) {
42
- v += " blendMode:" + std::to_string(static_cast<size_t>(blendMode));
43
- }
44
-
45
- auto opacity = _paint->getAlphaf();
46
- v += " opacity:" + std::to_string(opacity);
3
+ #include "ConcatablePaint.h"
4
+ #include "JsiDomNode.h"
5
+ #include "PaintProps.h"
47
6
 
48
- if (_paint->getPathEffect() != nullptr) {
49
- v += " [PathEffect]";
50
- }
51
-
52
- if (_paint->getShader() != nullptr) {
53
- v += " [Shader]";
54
- }
55
-
56
- if (_paint->getImageFilter() != nullptr) {
57
- v += " [ImageFilter]";
58
- }
59
-
60
- if (_paint->getMaskFilter() != nullptr) {
61
- v += " [MaskFilter]";
62
- }
63
-
64
- if (_paint->getColorFilter() != nullptr) {
65
- v += " [ColorFilter]";
66
- }
67
-
68
- } else {
69
- v = v + "[inherited] " +
70
- (_parent != nullptr ? _parent->getDebugDescription() : "");
71
- }
72
-
73
- v = v + "\n";
74
-
75
- return v;
76
- }
77
-
78
- /**
79
- Invalidate cache
80
- */
81
- void DrawingContext::markAsChanged() {
82
- markChildrenAsChanged();
83
- _paint = nullptr;
84
- _isChanged = true;
85
- }
7
+ #include <numeric>
86
8
 
87
- /**
88
- Call to reset invalidate flag after render cycle
89
- */
90
- void DrawingContext::resetChangedFlag() { _isChanged = false; }
91
-
92
- /**
93
- Dispose and remove the drawing context from its parent.
94
- */
95
- void DrawingContext::dispose() {
96
- if (_parent != nullptr) {
97
- auto position = std::find(_parent->_children.begin(),
98
- _parent->_children.end(), shared_from_this());
9
+ namespace RNSkia {
99
10
 
100
- if (position != _parent->_children.end()) {
101
- _parent->_children.erase(position);
102
- }
103
- // TODO: This is called from the JS thread so we need somehow to avoid
104
- // rendering after setting this to null, and we also need to protect this
105
- // section.
106
- _parent = nullptr;
107
- }
11
+ DrawingContext::DrawingContext(std::shared_ptr<SkPaint> paint) {
12
+ _declarationContext = std::make_unique<DeclarationContext>();
13
+ paint->setAntiAlias(true);
14
+ _paints.push_back(paint);
108
15
  }
109
16
 
110
- /**
111
- Returns true if the current cache is changed
112
- */
113
- bool DrawingContext::isChanged() { return _isChanged; }
17
+ DrawingContext::DrawingContext()
18
+ : DrawingContext(std::make_shared<SkPaint>()) {}
114
19
 
115
- /**
116
- Get/Sets the canvas object
117
- */
118
- SkCanvas *DrawingContext::getCanvas() {
119
- if (_parent != nullptr) {
120
- return _parent->getCanvas();
121
- }
122
-
123
- return _canvas;
124
- }
20
+ bool DrawingContext::saveAndConcat(
21
+ PaintProps *paintProps,
22
+ const std::vector<std::shared_ptr<JsiDomNode>> &children,
23
+ std::shared_ptr<SkPaint> paintCache) {
125
24
 
126
- /**
127
- Sets the canvas
128
- */
129
- void DrawingContext::setCanvas(SkCanvas *canvas) { _canvas = canvas; }
130
-
131
- /**
132
- Gets the paint object
133
- */
134
- std::shared_ptr<const SkPaint> DrawingContext::getPaint() {
135
- if (_paint != nullptr) {
136
- return _paint;
25
+ if (paintCache) {
26
+ _paints.push_back(paintCache);
27
+ return true;
137
28
  }
138
- return _parent->getPaint();
139
- }
140
29
 
141
- /**
142
- To be able to mutate and change the paint in a context we need to mutate the
143
- underlying paint object - otherwise we'll just use the parent paint object
144
- (to avoid having to create multiple paint objects for nodes that does not
145
- change the paint).
146
- */
147
- std::shared_ptr<SkPaint> DrawingContext::getMutablePaint() {
148
- if (_paint == nullptr) {
149
- auto parentPaint = _parent->getPaint();
150
- _paint = std::make_shared<SkPaint>(*parentPaint);
30
+ ConcatablePaint paint(_declarationContext.get(), paintProps, children);
31
+ if (!paint.isEmpty()) {
32
+ save();
33
+ paint.concatTo(getPaint());
34
+ return true;
151
35
  }
152
- // Calling the getMutablePaint accessor implies that the paint
153
- // is about to be mutatet and will therefore invalidate
154
- // any child contexts to pick up changes from this context as
155
- // the parent context.
156
- markChildrenAsChanged();
157
- return _paint;
158
- }
159
-
160
- /**
161
- Sets the paint in the current sub context
162
- */
163
- void DrawingContext::setMutablePaint(std::shared_ptr<SkPaint> paint) {
164
- _paint = paint;
165
- }
166
36
 
167
- float DrawingContext::getScaledWidth() {
168
- if (_parent != nullptr) {
169
- return _parent->getScaledWidth();
170
- }
171
- return _scaledWidth;
37
+ return false;
172
38
  }
173
39
 
174
- float DrawingContext::getScaledHeight() {
175
- if (_parent != nullptr) {
176
- return _parent->getScaledHeight();
177
- }
178
- return _scaledHeight;
40
+ void DrawingContext::save() {
41
+ // Copy paint and push
42
+ _paints.push_back(std::make_shared<SkPaint>(*getPaint()));
179
43
  }
180
44
 
181
- DrawingContext *DrawingContext::getParent() { return _parent; }
45
+ void DrawingContext::restore() { _paints.pop_back(); }
182
46
 
183
- void DrawingContext::setScaledWidth(float v) { _scaledWidth = v; }
184
- void DrawingContext::setScaledHeight(float v) { _scaledHeight = v; }
185
-
186
- void DrawingContext::setRequestRedraw(std::function<void()> &&requestRedraw) {
187
- if (_parent != nullptr) {
188
- _parent->setRequestRedraw(std::move(requestRedraw));
189
- } else {
190
- _requestRedraw = std::move(requestRedraw);
191
- }
192
- }
47
+ SkCanvas *DrawingContext::getCanvas() { return _canvas; }
193
48
 
194
- const std::function<void()> &DrawingContext::getRequestRedraw() {
195
- if (_parent != nullptr) {
196
- return _parent->getRequestRedraw();
197
- }
198
- return _requestRedraw;
199
- }
200
-
201
- DrawingContext::DrawingContext(const char *source) { _source = source; }
49
+ void DrawingContext::setCanvas(SkCanvas *canvas) { _canvas = canvas; }
202
50
 
203
- void DrawingContext::markChildrenAsChanged() {
204
- for (auto &child : _children) {
205
- child->markAsChanged();
206
- }
51
+ std::shared_ptr<SkPaint> DrawingContext::getPaint() {
52
+ return _paints[_paints.size() - 1];
207
53
  }
208
54
 
209
55
  } // namespace RNSkia
@@ -2,6 +2,9 @@
2
2
 
3
3
  #include "JsiHostObject.h"
4
4
 
5
+ #include "Declaration.h"
6
+ #include "DeclarationContext.h"
7
+
5
8
  #include <memory>
6
9
  #include <string>
7
10
  #include <utility>
@@ -12,47 +15,55 @@
12
15
 
13
16
  #include <SkCanvas.h>
14
17
  #include <SkPaint.h>
18
+ #include <SkRefCnt.h>
15
19
 
16
20
  #pragma clang diagnostic pop
17
21
 
18
22
  namespace RNSkia {
19
23
 
20
- class DrawingContext : public std::enable_shared_from_this<DrawingContext> {
24
+ class PaintProps;
25
+ class JsiDomNode;
26
+
27
+ class DomRenderContext {
21
28
  public:
22
- /**
23
- Creates a root drawing context with paint and opacity
24
- */
25
- explicit DrawingContext(std::shared_ptr<SkPaint> paint);
29
+ float getScaledWidth() { return _scaledWidth; }
30
+ float getScaledHeight() { return _scaledHeight; }
26
31
 
27
- /**
28
- Initilalizes a new draw context.
29
- */
30
- DrawingContext(DrawingContext *parent, const char *source);
32
+ void setScaledWidth(float v) { _scaledWidth = v; }
33
+ void setScaledHeight(float v) { _scaledHeight = v; }
31
34
 
32
- /**
33
- Factory for creating a child context that inherits from this context
34
- */
35
- std::shared_ptr<DrawingContext> inheritContext(const char *source);
35
+ void setRequestRedraw(std::function<void()> &&requestRedraw) {
36
+ _requestRedraw = std::move(requestRedraw);
37
+ }
36
38
 
37
- /**
38
- Returns the debug description for the context
39
- */
40
- std::string getDebugDescription();
39
+ const std::function<void()> &getRequestRedraw() { return _requestRedraw; }
40
+
41
+ private:
42
+ float _scaledWidth = -1;
43
+ float _scaledHeight = -1;
44
+ std::function<void()> _requestRedraw;
45
+ };
41
46
 
47
+ class DrawingContext : public DomRenderContext,
48
+ public std::enable_shared_from_this<DrawingContext> {
49
+ public:
42
50
  /**
43
- Mark the drawing context and any child contexts as changed
51
+ Creates a root drawing context with paint and opacity
44
52
  */
45
- void markAsChanged();
53
+ DrawingContext();
46
54
 
47
55
  /**
48
- Call to reset invalidate flag after render cycle
49
- */
50
- void resetChangedFlag();
56
+ Creates a drawing context with the given paint as its starting paint object
57
+ */
58
+ explicit DrawingContext(std::shared_ptr<SkPaint> paint);
51
59
 
52
60
  /**
53
- Dispose and remove the drawing context from its parent.
61
+ Factory for saving/restoring the context for a node
54
62
  */
55
- void dispose();
63
+ bool saveAndConcat(PaintProps *paintProps,
64
+ const std::vector<std::shared_ptr<JsiDomNode>> &children,
65
+ std::shared_ptr<SkPaint> paintCache);
66
+ void restore();
56
67
 
57
68
  /**
58
69
  Returns true if the current cache is changed
@@ -72,52 +83,22 @@ public:
72
83
  /**
73
84
  Gets the paint object
74
85
  */
75
- std::shared_ptr<const SkPaint> getPaint();
76
-
77
- /**
78
- To be able to mutate and change the paint in a context we need to mutate the
79
- underlying paint object - otherwise we'll just use the parent paint object
80
- (to avoid having to create multiple paint objects for nodes that does not
81
- change the paint).
82
- */
83
- std::shared_ptr<SkPaint> getMutablePaint();
86
+ std::shared_ptr<SkPaint> getPaint();
84
87
 
85
- /**
86
- Sets the paint in the current sub context
88
+ /*
89
+ Returns the root declaratiins object
87
90
  */
88
- void setMutablePaint(std::shared_ptr<SkPaint> paint);
89
-
90
- float getScaledWidth();
91
-
92
- float getScaledHeight();
93
-
94
- void setScaledWidth(float v);
95
- void setScaledHeight(float v);
96
-
97
- void setRequestRedraw(std::function<void()> &&requestRedraw);
98
- const std::function<void()> &getRequestRedraw();
99
-
100
- DrawingContext *getParent();
91
+ DeclarationContext *getDeclarationContext() {
92
+ return _declarationContext.get();
93
+ }
101
94
 
102
95
  private:
103
- explicit DrawingContext(const char *source);
104
-
105
- void markChildrenAsChanged();
106
-
107
- bool _isChanged = true;
108
-
109
- std::shared_ptr<SkPaint> _paint;
96
+ void save();
110
97
 
98
+ explicit DrawingContext(const char *source);
111
99
  SkCanvas *_canvas = nullptr;
112
- const char *_source;
113
-
114
- DrawingContext *_parent = nullptr;
115
- std::vector<std::shared_ptr<DrawingContext>> _children;
116
-
117
- float _scaledWidth = -1;
118
- float _scaledHeight = -1;
119
-
120
- std::function<void()> _requestRedraw;
100
+ std::vector<std::shared_ptr<SkPaint>> _paints;
101
+ std::unique_ptr<DeclarationContext> _declarationContext;
121
102
  };
122
103
 
123
104
  } // namespace RNSkia
@@ -9,17 +9,29 @@
9
9
 
10
10
  namespace RNSkia {
11
11
 
12
- class JsiBaseDomDeclarationNode : public JsiDomNode {
12
+ enum DeclarationType {
13
+ Unknown = 0,
14
+ Paint = 1,
15
+ Shader = 2,
16
+ ImageFilter = 3,
17
+ ColorFilter = 4,
18
+ PathEffect = 5,
19
+ MaskFilter = 6,
20
+ };
21
+
22
+ class JsiDomDeclarationNode : public JsiDomNode {
13
23
  public:
14
- JsiBaseDomDeclarationNode(std::shared_ptr<RNSkPlatformContext> context,
15
- const char *type)
16
- : JsiDomNode(context, type) {}
24
+ JsiDomDeclarationNode(std::shared_ptr<RNSkPlatformContext> context,
25
+ const char *type, DeclarationType declarationType)
26
+ : JsiDomNode(context, type, NodeClass::DeclarationNode),
27
+ _declarationType(declarationType) {}
17
28
 
18
29
  JSI_PROPERTY_GET(declarationType) {
30
+ // FIXME: Shouldn't this be the declaration type instead? It has been
19
31
  return jsi::String::createFromUtf8(runtime, std::string(getType()));
20
32
  }
21
33
 
22
- JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(JsiBaseDomDeclarationNode,
34
+ JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(JsiDomDeclarationNode,
23
35
  declarationType),
24
36
  JSI_EXPORT_PROP_GET(JsiDomNode, type))
25
37
 
@@ -34,30 +46,27 @@ public:
34
46
  /**
35
47
  Called when rendering the tree to create all derived values from all nodes.
36
48
  */
37
- virtual void decorateContext(DrawingContext *context) {
49
+ void decorateContext(DeclarationContext *context) override {
50
+ JsiDomNode::decorateContext(context);
51
+
38
52
  #if SKIA_DOM_DEBUG
39
- printDebugInfo("Begin Materialize " + std::string(getType()));
53
+ printDebugInfo("Begin decorate " + std::string(getType()));
40
54
  #endif
41
- // Materialize children first so that any inner nodes get the opportunity
42
- // to calculate their state before this node continues.
43
- for (auto &child : getChildren()) {
44
- if (child->getNodeClass() == JsiDomNodeClass::DeclarationNode) {
45
- std::static_pointer_cast<JsiBaseDomDeclarationNode>(child)
46
- ->decorateContext(context);
47
- }
48
- }
49
55
 
50
56
  // decorate drawing context
51
57
  decorate(context);
52
58
 
53
59
  #if SKIA_DOM_DEBUG
54
- printDebugInfo("End / Commit Materialize " + std::string(getType()));
60
+ printDebugInfo("End / Commit decorate " + std::string(getType()));
55
61
  #endif
56
62
  }
57
63
 
58
- JsiDomNodeClass getNodeClass() override {
59
- return JsiDomNodeClass::DeclarationNode;
60
- }
64
+ DeclarationType getDeclarationType() { return _declarationType; }
65
+
66
+ /**
67
+ Override to implement materialization
68
+ */
69
+ virtual void decorate(DeclarationContext *context) = 0;
61
70
 
62
71
  protected:
63
72
  /**
@@ -71,16 +80,15 @@ protected:
71
80
  }
72
81
 
73
82
  /**
74
- Override to implement materialization
83
+ A property changed
75
84
  */
76
- virtual void decorate(DrawingContext *context) = 0;
85
+ void onPropertyChanged(BaseNodeProp *prop) override { invalidateContext(); }
77
86
 
78
87
  /**
79
88
  Validates that only declaration nodes can be children
80
89
  */
81
90
  void addChild(std::shared_ptr<JsiDomNode> child) override {
82
- if (std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child) ==
83
- nullptr) {
91
+ if (child->getNodeClass() != NodeClass::DeclarationNode) {
84
92
  getContext()->raiseError(std::runtime_error(
85
93
  "Cannot add a child of type \"" + std::string(child->getType()) +
86
94
  "\" to a \"" + std::string(getType()) + "\"."));
@@ -93,98 +101,19 @@ protected:
93
101
  */
94
102
  void insertChildBefore(std::shared_ptr<JsiDomNode> child,
95
103
  std::shared_ptr<JsiDomNode> before) override {
96
- if (std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child) ==
97
- nullptr) {
104
+ if (child->getNodeClass() != NodeClass::DeclarationNode) {
98
105
  getContext()->raiseError(std::runtime_error(
99
106
  "Cannot add a child of type \"" + std::string(child->getType()) +
100
107
  "\" to a \"" + std::string(getType()) + "\"."));
101
108
  }
102
109
  JsiDomNode::insertChildBefore(child, before);
103
110
  }
104
- };
105
-
106
- template <typename T, typename ST>
107
- class JsiDomDeclarationNode : public JsiBaseDomDeclarationNode {
108
- public:
109
- JsiDomDeclarationNode(std::shared_ptr<RNSkPlatformContext> context,
110
- const char *type)
111
- : JsiBaseDomDeclarationNode(context, type) {}
112
-
113
- bool isChanged(DrawingContext *context) {
114
- return getCurrent() == nullptr || context->isChanged() ||
115
- getPropsContainer()->isChanged();
116
- }
117
-
118
- /**
119
- Returns the inner element
120
- */
121
- ST getCurrent() { return _current; }
122
-
123
- /**
124
- Clears the current
125
- */
126
- void clearCurrent() { _current = nullptr; }
127
-
128
- protected:
129
- /**
130
- Sets the current value
131
- */
132
- void setCurrent(ST c) { _current = c; }
133
-
134
- /**
135
- Returns a required child image filter by index
136
- */
137
- ST requireChild(size_t index) {
138
- auto filter = optionalChild(index);
139
- if (filter == nullptr) {
140
- throw std::runtime_error("Expected child node at index " +
141
- std::to_string(index) + " in node " + getType());
142
- }
143
- return filter;
144
- }
145
-
146
- /**
147
- Returns an optional child image filter by index
148
- */
149
- ST optionalChild(size_t index) {
150
- if (index >= getChildren().size()) {
151
- return nullptr;
152
- }
153
-
154
- auto child = getChildren()[index];
155
- // Support all types here!! ImageFilters, ColorFilters
156
- // package/src/dom/nodes/paint/ImageFilters.ts#80
157
- return resolve(child);
158
- }
159
-
160
- /**
161
- Returns child as inner type or nullptr
162
- */
163
- virtual ST resolve(std::shared_ptr<JsiDomNode> child) = 0;
164
111
 
112
+ private:
165
113
  /**
166
- Sets or composes the image filter
114
+ Type of declaration
167
115
  */
168
- virtual void set(DrawingContext *context, ST imageFilter) = 0;
169
-
170
- void removeChild(std::shared_ptr<JsiDomNode> child) override {
171
- JsiBaseDomDeclarationNode::removeChild(child);
172
- clearCurrent();
173
- }
174
-
175
- void addChild(std::shared_ptr<JsiDomNode> child) override {
176
- JsiBaseDomDeclarationNode::addChild(child);
177
- clearCurrent();
178
- }
179
-
180
- void insertChildBefore(std::shared_ptr<JsiDomNode> child,
181
- std::shared_ptr<JsiDomNode> before) override {
182
- JsiBaseDomDeclarationNode::insertChildBefore(child, before);
183
- clearCurrent();
184
- }
185
-
186
- private:
187
- ST _current;
116
+ DeclarationType _declarationType;
188
117
  };
189
118
 
190
119
  } // namespace RNSkia