@shopify/react-native-skia 0.1.158 → 0.1.159

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 (403) hide show
  1. package/android/CMakeLists.txt +35 -11
  2. package/android/build.gradle +21 -25
  3. package/android/cpp/jni/JniLoad.cpp +2 -0
  4. package/android/cpp/jni/include/JniSkiaDomView.h +89 -0
  5. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.cpp +4 -3
  6. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.h +4 -3
  7. package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaPackage.java +2 -1
  8. package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +45 -0
  9. package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomViewManager.java +64 -0
  10. package/cpp/api/JsiSkHostObjects.h +6 -0
  11. package/cpp/api/JsiSkImageFilterFactory.h +1 -1
  12. package/cpp/api/JsiSkPaint.h +9 -2
  13. package/cpp/api/JsiSkPath.h +1 -0
  14. package/cpp/api/JsiSkRuntimeEffect.h +36 -36
  15. package/cpp/jsi/JsiHostObject.cpp +16 -28
  16. package/cpp/jsi/JsiHostObject.h +127 -7
  17. package/cpp/jsi/JsiValue.cpp +346 -0
  18. package/cpp/jsi/JsiValue.h +222 -0
  19. package/cpp/jsi/JsiValueWrapper.h +33 -5
  20. package/cpp/rnskia/RNSkDomView.cpp +220 -0
  21. package/cpp/rnskia/RNSkDomView.h +140 -0
  22. package/cpp/rnskia/RNSkJsView.cpp +0 -4
  23. package/cpp/rnskia/RNSkJsView.h +6 -4
  24. package/cpp/rnskia/RNSkManager.cpp +7 -0
  25. package/cpp/rnskia/RNSkPictureView.h +5 -8
  26. package/cpp/rnskia/RNSkView.h +113 -5
  27. package/cpp/rnskia/dom/JsiDomApi.h +167 -0
  28. package/cpp/rnskia/dom/base/BaseNodeProp.h +72 -0
  29. package/cpp/rnskia/dom/base/DerivedNodeProp.h +187 -0
  30. package/cpp/rnskia/dom/base/DrawingContext.cpp +227 -0
  31. package/cpp/rnskia/dom/base/DrawingContext.h +136 -0
  32. package/cpp/rnskia/dom/base/JsiDependencyManager.h +294 -0
  33. package/cpp/rnskia/dom/base/JsiDomDeclarationNode.h +176 -0
  34. package/cpp/rnskia/dom/base/JsiDomDrawingNode.h +50 -0
  35. package/cpp/rnskia/dom/base/JsiDomNode.h +361 -0
  36. package/cpp/rnskia/dom/base/JsiDomRenderNode.h +267 -0
  37. package/cpp/rnskia/dom/base/NodeProp.h +130 -0
  38. package/cpp/rnskia/dom/base/NodePropsContainer.h +119 -0
  39. package/cpp/rnskia/dom/nodes/JsiBackdropFilterNode.h +38 -0
  40. package/cpp/rnskia/dom/nodes/JsiBlendNode.h +112 -0
  41. package/cpp/rnskia/dom/nodes/JsiBlurMaskNode.h +78 -0
  42. package/cpp/rnskia/dom/nodes/JsiBoxNode.h +104 -0
  43. package/cpp/rnskia/dom/nodes/JsiBoxShadowNode.h +33 -0
  44. package/cpp/rnskia/dom/nodes/JsiCircleNode.h +38 -0
  45. package/cpp/rnskia/dom/nodes/JsiColorFilterNodes.h +192 -0
  46. package/cpp/rnskia/dom/nodes/JsiCustomDrawingNode.h +123 -0
  47. package/cpp/rnskia/dom/nodes/JsiDiffRectNode.h +42 -0
  48. package/cpp/rnskia/dom/nodes/JsiFillNode.h +22 -0
  49. package/cpp/rnskia/dom/nodes/JsiGlyphsNode.h +56 -0
  50. package/cpp/rnskia/dom/nodes/JsiGroupNode.h +26 -0
  51. package/cpp/rnskia/dom/nodes/JsiImageFilterNodes.h +415 -0
  52. package/cpp/rnskia/dom/nodes/JsiImageNode.h +34 -0
  53. package/cpp/rnskia/dom/nodes/JsiImageSvgNode.h +44 -0
  54. package/cpp/rnskia/dom/nodes/JsiLayerNode.h +64 -0
  55. package/cpp/rnskia/dom/nodes/JsiLineNode.h +43 -0
  56. package/cpp/rnskia/dom/nodes/JsiOvalNode.h +34 -0
  57. package/cpp/rnskia/dom/nodes/JsiPaintNode.h +77 -0
  58. package/cpp/rnskia/dom/nodes/JsiPatchNode.h +54 -0
  59. package/cpp/rnskia/dom/nodes/JsiPathEffectNodes.h +315 -0
  60. package/cpp/rnskia/dom/nodes/JsiPathNode.h +181 -0
  61. package/cpp/rnskia/dom/nodes/JsiPictureNode.h +32 -0
  62. package/cpp/rnskia/dom/nodes/JsiPointsNode.h +51 -0
  63. package/cpp/rnskia/dom/nodes/JsiRRectNode.h +34 -0
  64. package/cpp/rnskia/dom/nodes/JsiRectNode.h +34 -0
  65. package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +517 -0
  66. package/cpp/rnskia/dom/nodes/JsiTextBlobNode.h +47 -0
  67. package/cpp/rnskia/dom/nodes/JsiTextNode.h +54 -0
  68. package/cpp/rnskia/dom/nodes/JsiTextPathNode.h +32 -0
  69. package/cpp/rnskia/dom/nodes/JsiVerticesNode.h +43 -0
  70. package/cpp/rnskia/dom/props/BezierProps.h +63 -0
  71. package/cpp/rnskia/dom/props/BlendModeProp.h +101 -0
  72. package/cpp/rnskia/dom/props/BoxShadowProps.h +61 -0
  73. package/cpp/rnskia/dom/props/CircleProp.h +46 -0
  74. package/cpp/rnskia/dom/props/ClipProp.h +62 -0
  75. package/cpp/rnskia/dom/props/ColorProp.h +80 -0
  76. package/cpp/rnskia/dom/props/DrawingProp.h +33 -0
  77. package/cpp/rnskia/dom/props/FontProp.h +34 -0
  78. package/cpp/rnskia/dom/props/GlyphsProp.h +53 -0
  79. package/cpp/rnskia/dom/props/ImageProps.h +173 -0
  80. package/cpp/rnskia/dom/props/LayerProp.h +50 -0
  81. package/cpp/rnskia/dom/props/MatrixProp.h +33 -0
  82. package/cpp/rnskia/dom/props/NumbersProp.h +63 -0
  83. package/cpp/rnskia/dom/props/PaintProps.h +172 -0
  84. package/cpp/rnskia/dom/props/PathProp.h +55 -0
  85. package/cpp/rnskia/dom/props/PictureProp.h +38 -0
  86. package/cpp/rnskia/dom/props/PointProp.h +72 -0
  87. package/cpp/rnskia/dom/props/PointsProp.h +83 -0
  88. package/cpp/rnskia/dom/props/RRectProp.h +134 -0
  89. package/cpp/rnskia/dom/props/RadiusProp.h +43 -0
  90. package/cpp/rnskia/dom/props/RectProp.h +118 -0
  91. package/cpp/rnskia/dom/props/StrokeProps.h +75 -0
  92. package/cpp/rnskia/dom/props/SvgProp.h +37 -0
  93. package/cpp/rnskia/dom/props/TextBlobProp.h +128 -0
  94. package/cpp/rnskia/dom/props/TileModeProp.h +50 -0
  95. package/cpp/rnskia/dom/props/TransformProp.h +80 -0
  96. package/cpp/rnskia/dom/props/TransformsProps.h +68 -0
  97. package/cpp/rnskia/dom/props/UniformsProp.h +194 -0
  98. package/cpp/rnskia/dom/props/VertexModeProp.h +47 -0
  99. package/cpp/rnskia/dom/props/VerticesProps.h +67 -0
  100. package/cpp/rnskia/values/RNSkReadonlyValue.h +13 -4
  101. package/cpp/skia/include/android/SkAndroidFrameworkUtils.h +35 -1
  102. package/cpp/skia/include/codec/SkAndroidCodec.h +17 -1
  103. package/cpp/skia/include/codec/SkCodec.h +8 -5
  104. package/cpp/skia/include/core/SkAnnotation.h +2 -0
  105. package/cpp/skia/include/core/SkBitmap.h +52 -1
  106. package/cpp/skia/include/core/SkBlendMode.h +2 -0
  107. package/cpp/skia/include/core/SkCanvas.h +52 -31
  108. package/cpp/skia/include/core/SkCapabilities.h +44 -0
  109. package/cpp/skia/include/core/SkColor.h +7 -0
  110. package/cpp/skia/include/core/SkColorFilter.h +37 -0
  111. package/cpp/skia/include/core/SkColorSpace.h +1 -1
  112. package/cpp/skia/include/core/SkFont.h +4 -0
  113. package/cpp/skia/include/core/SkFontMgr.h +3 -0
  114. package/cpp/skia/include/core/SkGraphics.h +9 -0
  115. package/cpp/skia/include/core/SkImage.h +77 -17
  116. package/cpp/skia/include/core/SkImageEncoder.h +5 -3
  117. package/cpp/skia/include/core/SkImageGenerator.h +27 -17
  118. package/cpp/skia/include/core/SkM44.h +1 -0
  119. package/cpp/skia/include/core/SkMesh.h +120 -34
  120. package/cpp/skia/include/core/SkMilestone.h +1 -1
  121. package/cpp/skia/include/core/SkOverdrawCanvas.h +2 -1
  122. package/cpp/skia/include/core/SkPaint.h +15 -2
  123. package/cpp/skia/include/core/SkPath.h +4 -0
  124. package/cpp/skia/include/core/SkPathBuilder.h +1 -1
  125. package/cpp/skia/include/core/SkPicture.h +0 -3
  126. package/cpp/skia/include/core/SkPictureRecorder.h +0 -2
  127. package/cpp/skia/include/core/SkPixmap.h +19 -0
  128. package/cpp/skia/include/core/SkRasterHandleAllocator.h +3 -1
  129. package/cpp/skia/include/core/SkRect.h +11 -4
  130. package/cpp/skia/include/core/SkRefCnt.h +13 -1
  131. package/cpp/skia/include/core/SkRegion.h +6 -0
  132. package/cpp/skia/include/core/SkSamplingOptions.h +8 -6
  133. package/cpp/skia/include/core/SkScalar.h +6 -25
  134. package/cpp/skia/include/core/SkShader.h +20 -12
  135. package/cpp/skia/include/core/SkSpan.h +51 -19
  136. package/cpp/skia/include/core/SkStream.h +2 -2
  137. package/cpp/skia/include/core/SkString.h +11 -3
  138. package/cpp/skia/include/core/SkSurface.h +85 -8
  139. package/cpp/skia/include/core/SkTextBlob.h +5 -2
  140. package/cpp/skia/include/core/SkTypes.h +11 -10
  141. package/cpp/skia/include/docs/SkPDFDocument.h +0 -5
  142. package/cpp/skia/include/effects/Sk1DPathEffect.h +6 -1
  143. package/cpp/skia/include/effects/Sk2DPathEffect.h +4 -1
  144. package/cpp/skia/include/effects/SkColorMatrix.h +1 -0
  145. package/cpp/skia/include/effects/SkColorMatrixFilter.h +5 -8
  146. package/cpp/skia/include/effects/SkCornerPathEffect.h +5 -1
  147. package/cpp/skia/include/effects/SkDashPathEffect.h +5 -1
  148. package/cpp/skia/include/effects/SkGradientShader.h +68 -38
  149. package/cpp/skia/include/effects/SkHighContrastFilter.h +5 -1
  150. package/cpp/skia/include/effects/SkImageFilters.h +5 -4
  151. package/cpp/skia/include/effects/SkLumaColorFilter.h +4 -1
  152. package/cpp/skia/include/effects/SkOpPathEffect.h +6 -2
  153. package/cpp/skia/include/effects/SkOverdrawColorFilter.h +5 -2
  154. package/cpp/skia/include/effects/SkRuntimeEffect.h +54 -62
  155. package/cpp/skia/include/effects/SkShaderMaskFilter.h +3 -1
  156. package/cpp/skia/include/effects/SkTableColorFilter.h +8 -21
  157. package/cpp/skia/include/effects/SkTableMaskFilter.h +5 -1
  158. package/cpp/skia/include/effects/SkTrimPathEffect.h +5 -1
  159. package/cpp/skia/include/encode/SkEncoder.h +17 -0
  160. package/cpp/skia/include/encode/SkWebpEncoder.h +17 -0
  161. package/cpp/skia/include/gpu/GpuTypes.h +18 -0
  162. package/cpp/skia/include/gpu/GrBackendSurface.h +38 -17
  163. package/cpp/skia/include/gpu/GrBackendSurfaceMutableState.h +6 -71
  164. package/cpp/skia/include/gpu/GrContextOptions.h +1 -1
  165. package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +10 -9
  166. package/cpp/skia/include/gpu/GrDirectContext.h +42 -22
  167. package/cpp/skia/include/gpu/GrRecordingContext.h +6 -3
  168. package/cpp/skia/include/gpu/GrTypes.h +11 -11
  169. package/cpp/skia/include/gpu/MutableTextureState.h +122 -0
  170. package/cpp/skia/include/gpu/gl/GrGLFunctions.h +1 -0
  171. package/cpp/skia/include/gpu/gl/GrGLInterface.h +1 -0
  172. package/cpp/skia/include/gpu/graphite/BackendTexture.h +7 -0
  173. package/cpp/skia/include/gpu/graphite/CombinationBuilder.h +195 -0
  174. package/cpp/skia/include/gpu/graphite/Context.h +47 -55
  175. package/cpp/skia/include/gpu/graphite/ContextOptions.h +85 -0
  176. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +1 -17
  177. package/cpp/skia/include/gpu/graphite/ImageProvider.h +61 -0
  178. package/cpp/skia/include/gpu/graphite/Recorder.h +87 -8
  179. package/cpp/skia/include/gpu/graphite/Recording.h +19 -9
  180. package/cpp/skia/include/gpu/graphite/TextureInfo.h +40 -8
  181. package/cpp/skia/include/gpu/graphite/dawn/DawnBackendContext.h +25 -0
  182. package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +3 -2
  183. package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +69 -0
  184. package/cpp/skia/include/gpu/mtl/MtlMemoryAllocator.h +39 -0
  185. package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +21 -19
  186. package/cpp/skia/include/gpu/vk/GrVkExtensions.h +2 -50
  187. package/cpp/skia/include/gpu/vk/GrVkMemoryAllocator.h +2 -127
  188. package/cpp/skia/include/gpu/vk/GrVkTypes.h +5 -43
  189. package/cpp/skia/include/gpu/vk/VulkanBackendContext.h +46 -0
  190. package/cpp/skia/include/gpu/vk/VulkanExtensions.h +67 -0
  191. package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +116 -0
  192. package/cpp/skia/include/gpu/vk/VulkanTypes.h +59 -0
  193. package/cpp/skia/include/pathops/SkPathOps.h +1 -1
  194. package/cpp/skia/include/private/SkColorData.h +10 -40
  195. package/cpp/skia/include/private/SkEncodedInfo.h +9 -3
  196. package/cpp/skia/include/private/SkFloatingPoint.h +9 -6
  197. package/cpp/skia/include/private/SkHalf.h +5 -52
  198. package/cpp/skia/include/private/SkMacros.h +1 -1
  199. package/cpp/skia/include/private/SkMalloc.h +4 -0
  200. package/cpp/skia/include/private/SkPathRef.h +10 -10
  201. package/cpp/skia/include/private/SkSLModifiers.h +59 -23
  202. package/cpp/skia/include/private/SkSLProgramKind.h +1 -0
  203. package/cpp/skia/include/private/SkSLSymbol.h +7 -3
  204. package/cpp/skia/include/private/SkStringView.h +4 -0
  205. package/cpp/skia/include/private/SkTArray.h +21 -7
  206. package/cpp/skia/include/private/SkTDArray.h +173 -285
  207. package/cpp/skia/include/private/SkTHash.h +33 -32
  208. package/cpp/skia/include/private/SkTemplates.h +24 -26
  209. package/cpp/skia/include/private/SkVx.h +218 -135
  210. package/cpp/skia/include/private/chromium/GrSlug.h +3 -65
  211. package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +6 -3
  212. package/cpp/skia/include/private/chromium/Slug.h +76 -0
  213. package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +6 -1
  214. package/cpp/skia/include/private/gpu/ganesh/GrVkTypesPriv.h +5 -39
  215. package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +63 -0
  216. package/cpp/skia/include/{gpu/vk/GrVkVulkan.h → private/gpu/vk/SkiaVulkan.h} +2 -2
  217. package/cpp/skia/include/private/gpu/vk/VulkanTypesPriv.h +57 -0
  218. package/cpp/skia/include/sksl/DSL.h +0 -1
  219. package/cpp/skia/include/sksl/DSLBlock.h +4 -18
  220. package/cpp/skia/include/sksl/DSLCase.h +2 -8
  221. package/cpp/skia/include/sksl/DSLCore.h +8 -15
  222. package/cpp/skia/include/sksl/DSLExpression.h +51 -142
  223. package/cpp/skia/include/sksl/DSLFunction.h +7 -15
  224. package/cpp/skia/include/sksl/DSLModifiers.h +5 -2
  225. package/cpp/skia/include/sksl/DSLStatement.h +4 -39
  226. package/cpp/skia/include/sksl/DSLSymbols.h +1 -11
  227. package/cpp/skia/include/sksl/DSLType.h +20 -12
  228. package/cpp/skia/include/sksl/DSLVar.h +56 -146
  229. package/cpp/skia/include/sksl/SkSLErrorReporter.h +2 -15
  230. package/cpp/skia/include/sksl/SkSLOperator.h +62 -59
  231. package/cpp/skia/include/sksl/SkSLPosition.h +2 -0
  232. package/cpp/skia/include/sksl/SkSLVersion.h +27 -0
  233. package/cpp/skia/include/svg/SkSVGCanvas.h +1 -0
  234. package/cpp/skia/include/utils/SkAnimCodecPlayer.h +1 -1
  235. package/cpp/skia/include/utils/SkBase64.h +2 -0
  236. package/cpp/skia/include/utils/SkCustomTypeface.h +24 -11
  237. package/cpp/skia/include/utils/SkEventTracer.h +12 -1
  238. package/cpp/skia/include/utils/SkNWayCanvas.h +11 -4
  239. package/cpp/skia/include/utils/SkPaintFilterCanvas.h +9 -4
  240. package/cpp/skia/include/utils/SkParse.h +3 -0
  241. package/cpp/skia/include/utils/SkShadowUtils.h +2 -0
  242. package/cpp/skia/include/utils/SkTextUtils.h +2 -1
  243. package/cpp/skia/{include/third_party → modules}/skcms/skcms.h +10 -0
  244. package/cpp/skia/modules/skcms/skcms_internal.h +56 -0
  245. package/cpp/skia/modules/skcms/src/Transform_inl.h +1609 -0
  246. package/cpp/skia/modules/skparagraph/include/DartTypes.h +153 -0
  247. package/cpp/skia/modules/skparagraph/include/FontArguments.h +46 -0
  248. package/cpp/skia/modules/skparagraph/include/FontCollection.h +84 -0
  249. package/cpp/skia/modules/skparagraph/include/Metrics.h +98 -0
  250. package/cpp/skia/modules/skparagraph/include/Paragraph.h +111 -0
  251. package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +69 -0
  252. package/cpp/skia/modules/skparagraph/include/ParagraphCache.h +77 -0
  253. package/cpp/skia/modules/skparagraph/include/ParagraphStyle.h +143 -0
  254. package/cpp/skia/modules/skparagraph/include/TextShadow.h +30 -0
  255. package/cpp/skia/modules/skparagraph/include/TextStyle.h +352 -0
  256. package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +81 -0
  257. package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +1 -1
  258. package/cpp/skia/modules/svg/include/SkSVGTypes.h +3 -3
  259. package/cpp/skia/src/core/SkLRUCache.h +126 -0
  260. package/cpp/skia/src/core/SkTInternalLList.h +302 -0
  261. package/cpp/utils/RNSkTimingInfo.h +1 -0
  262. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.h +15 -4
  263. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +40 -54
  264. package/ios/RNSkia-iOS/SkiaDomViewManager.h +8 -0
  265. package/ios/RNSkia-iOS/SkiaDomViewManager.mm +51 -0
  266. package/lib/commonjs/dom/nodes/JsiSkDOM.js +56 -56
  267. package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
  268. package/lib/commonjs/dom/nodes/RenderNode.js +1 -1
  269. package/lib/commonjs/dom/nodes/RenderNode.js.map +1 -1
  270. package/lib/commonjs/renderer/Canvas.js +19 -63
  271. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  272. package/lib/commonjs/renderer/DependencyManager.js +0 -5
  273. package/lib/commonjs/renderer/DependencyManager.js.map +1 -1
  274. package/lib/commonjs/renderer/HostComponents.js.map +1 -1
  275. package/lib/commonjs/renderer/useCanvas.js +4 -18
  276. package/lib/commonjs/renderer/useCanvas.js.map +1 -1
  277. package/lib/commonjs/views/SkiaBaseWebView.js +7 -0
  278. package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
  279. package/lib/commonjs/views/SkiaDomView.js +152 -0
  280. package/lib/commonjs/views/SkiaDomView.js.map +1 -0
  281. package/lib/commonjs/views/SkiaDomView.web.js +55 -0
  282. package/lib/commonjs/views/SkiaDomView.web.js.map +1 -0
  283. package/lib/commonjs/views/SkiaPictureView.js +16 -2
  284. package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
  285. package/lib/commonjs/views/SkiaView.js +17 -2
  286. package/lib/commonjs/views/SkiaView.js.map +1 -1
  287. package/lib/commonjs/views/index.js +13 -0
  288. package/lib/commonjs/views/index.js.map +1 -1
  289. package/lib/commonjs/views/types.js.map +1 -1
  290. package/lib/module/dom/nodes/JsiSkDOM.js +56 -56
  291. package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
  292. package/lib/module/dom/nodes/RenderNode.js +1 -1
  293. package/lib/module/dom/nodes/RenderNode.js.map +1 -1
  294. package/lib/module/renderer/Canvas.js +20 -64
  295. package/lib/module/renderer/Canvas.js.map +1 -1
  296. package/lib/module/renderer/DependencyManager.js +0 -5
  297. package/lib/module/renderer/DependencyManager.js.map +1 -1
  298. package/lib/module/renderer/HostComponents.js.map +1 -1
  299. package/lib/module/renderer/useCanvas.js +2 -13
  300. package/lib/module/renderer/useCanvas.js.map +1 -1
  301. package/lib/module/views/SkiaBaseWebView.js +7 -0
  302. package/lib/module/views/SkiaBaseWebView.js.map +1 -1
  303. package/lib/module/views/SkiaDomView.js +128 -0
  304. package/lib/module/views/SkiaDomView.js.map +1 -0
  305. package/lib/module/views/SkiaDomView.web.js +41 -0
  306. package/lib/module/views/SkiaDomView.web.js.map +1 -0
  307. package/lib/module/views/SkiaPictureView.js +14 -2
  308. package/lib/module/views/SkiaPictureView.js.map +1 -1
  309. package/lib/module/views/SkiaView.js +15 -2
  310. package/lib/module/views/SkiaView.js.map +1 -1
  311. package/lib/module/views/index.js +1 -0
  312. package/lib/module/views/index.js.map +1 -1
  313. package/lib/module/views/types.js.map +1 -1
  314. package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +57 -64
  315. package/lib/typescript/src/renderer/Canvas.d.ts +5 -8
  316. package/lib/typescript/src/renderer/DependencyManager.d.ts +0 -2
  317. package/lib/typescript/src/renderer/HostComponents.d.ts +66 -3
  318. package/lib/typescript/src/renderer/useCanvas.d.ts +0 -6
  319. package/lib/typescript/src/views/SkiaBaseWebView.d.ts +4 -0
  320. package/lib/typescript/src/views/SkiaDomView.d.ts +31 -0
  321. package/lib/typescript/src/views/SkiaDomView.web.d.ts +7 -0
  322. package/lib/typescript/src/views/index.d.ts +1 -0
  323. package/lib/typescript/src/views/types.d.ts +12 -2
  324. package/libs/android/arm64-v8a/libskia.a +0 -0
  325. package/libs/android/arm64-v8a/libskottie.a +0 -0
  326. package/libs/android/arm64-v8a/libskparagraph.a +0 -0
  327. package/libs/android/arm64-v8a/libsksg.a +0 -0
  328. package/libs/android/arm64-v8a/libskshaper.a +0 -0
  329. package/libs/android/arm64-v8a/libskunicode.a +0 -0
  330. package/libs/android/arm64-v8a/libsvg.a +0 -0
  331. package/libs/android/armeabi-v7a/libskia.a +0 -0
  332. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  333. package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
  334. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  335. package/libs/android/armeabi-v7a/libskshaper.a +0 -0
  336. package/libs/android/armeabi-v7a/libskunicode.a +0 -0
  337. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  338. package/libs/android/x86/libskia.a +0 -0
  339. package/libs/android/x86/libskottie.a +0 -0
  340. package/libs/android/x86/libskparagraph.a +0 -0
  341. package/libs/android/x86/libsksg.a +0 -0
  342. package/libs/android/x86/libskshaper.a +0 -0
  343. package/libs/android/x86/libskunicode.a +0 -0
  344. package/libs/android/x86/libsvg.a +0 -0
  345. package/libs/android/x86_64/libskia.a +0 -0
  346. package/libs/android/x86_64/libskottie.a +0 -0
  347. package/libs/android/x86_64/libskparagraph.a +0 -0
  348. package/libs/android/x86_64/libsksg.a +0 -0
  349. package/libs/android/x86_64/libskshaper.a +0 -0
  350. package/libs/android/x86_64/libskunicode.a +0 -0
  351. package/libs/android/x86_64/libsvg.a +0 -0
  352. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  353. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  354. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  355. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  356. package/libs/ios/libskparagraph.xcframework/Info.plist +42 -0
  357. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  358. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  359. package/libs/ios/libsksg.xcframework/Info.plist +5 -5
  360. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  361. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  362. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  363. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  364. package/libs/ios/libskunicode.xcframework/Info.plist +42 -0
  365. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  366. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  367. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  368. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  369. package/package.json +5 -3
  370. package/react-native-skia.podspec +3 -1
  371. package/src/dom/nodes/JsiSkDOM.ts +170 -56
  372. package/src/dom/nodes/RenderNode.ts +1 -1
  373. package/src/renderer/Canvas.tsx +32 -56
  374. package/src/renderer/DependencyManager.tsx +0 -5
  375. package/src/renderer/HostComponents.ts +152 -1
  376. package/src/renderer/useCanvas.ts +1 -15
  377. package/src/views/SkiaBaseWebView.tsx +4 -0
  378. package/src/views/SkiaDomView.tsx +120 -0
  379. package/src/views/SkiaDomView.web.tsx +37 -0
  380. package/src/views/SkiaPictureView.tsx +10 -2
  381. package/src/views/SkiaView.tsx +11 -3
  382. package/src/views/index.ts +1 -0
  383. package/src/views/types.ts +19 -2
  384. package/cpp/jsi/JsiSimpleValueWrapper.h +0 -99
  385. package/cpp/skia/include/c/sk_canvas.h +0 -159
  386. package/cpp/skia/include/c/sk_colorspace.h +0 -25
  387. package/cpp/skia/include/c/sk_data.h +0 -65
  388. package/cpp/skia/include/c/sk_image.h +0 -71
  389. package/cpp/skia/include/c/sk_imageinfo.h +0 -62
  390. package/cpp/skia/include/c/sk_maskfilter.h +0 -47
  391. package/cpp/skia/include/c/sk_matrix.h +0 -49
  392. package/cpp/skia/include/c/sk_paint.h +0 -145
  393. package/cpp/skia/include/c/sk_path.h +0 -102
  394. package/cpp/skia/include/c/sk_picture.h +0 -70
  395. package/cpp/skia/include/c/sk_shader.h +0 -143
  396. package/cpp/skia/include/c/sk_surface.h +0 -73
  397. package/cpp/skia/include/c/sk_types.h +0 -278
  398. package/cpp/skia/include/gpu/graphite/SkStuff.h +0 -47
  399. package/cpp/skia/include/private/SkNx.h +0 -430
  400. package/cpp/skia/include/private/SkNx_neon.h +0 -713
  401. package/cpp/skia/include/private/SkNx_sse.h +0 -823
  402. package/cpp/skia/include/sksl/DSLRuntimeEffects.h +0 -32
  403. package/cpp/skia/include/sksl/DSLWrapper.h +0 -77
@@ -0,0 +1,176 @@
1
+
2
+ #pragma once
3
+
4
+ #include "DrawingContext.h"
5
+ #include "JsiDomNode.h"
6
+
7
+ #include <memory>
8
+ #include <string>
9
+
10
+ namespace RNSkia {
11
+
12
+ class JsiBaseDomDeclarationNode : public JsiDomNode {
13
+ public:
14
+ JsiBaseDomDeclarationNode(std::shared_ptr<RNSkPlatformContext> context,
15
+ const char *type)
16
+ : JsiDomNode(context, type) {}
17
+
18
+ JSI_PROPERTY_GET(declarationType) {
19
+ return jsi::String::createFromUtf8(runtime, std::string(getType()));
20
+ }
21
+
22
+ JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(JsiBaseDomDeclarationNode,
23
+ declarationType),
24
+ JSI_EXPORT_PROP_GET(JsiDomNode, type))
25
+
26
+ JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiDomNode, addChild),
27
+ JSI_EXPORT_FUNC(JsiDomNode, removeChild),
28
+ JSI_EXPORT_FUNC(JsiDomNode, insertChildBefore),
29
+ JSI_EXPORT_FUNC(JsiDomNode, setProps),
30
+ JSI_EXPORT_FUNC(JsiDomNode, setProp),
31
+ JSI_EXPORT_FUNC(JsiDomNode, dispose),
32
+ JSI_EXPORT_FUNC(JsiDomNode, children))
33
+
34
+ /**
35
+ Called when rendering the tree to create all derived values from all nodes.
36
+ */
37
+ virtual void decorateContext(DrawingContext *context) {
38
+ #if SKIA_DOM_DEBUG
39
+ printDebugInfo(context, "Begin Materialize");
40
+ #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
+ auto decl = std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child);
45
+ if (decl != nullptr) {
46
+ decl->decorateContext(context);
47
+ }
48
+ }
49
+
50
+ // decorate drawing context
51
+ decorate(context);
52
+
53
+ #if SKIA_DOM_DEBUG
54
+ printDebugInfo(context, "End Materialize");
55
+ #endif
56
+ }
57
+
58
+ protected:
59
+ /**
60
+ Override to implement materialization
61
+ */
62
+ virtual void decorate(DrawingContext *context) = 0;
63
+
64
+ /**
65
+ Validates that only declaration nodes can be children
66
+ */
67
+ void addChild(std::shared_ptr<JsiDomNode> child) override {
68
+ if (std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child) ==
69
+ nullptr) {
70
+ getContext()->raiseError(std::runtime_error(
71
+ "Cannot add a child of type \"" + std::string(child->getType()) +
72
+ "\" to a \"" + std::string(getType()) + "\"."));
73
+ }
74
+ JsiDomNode::addChild(child);
75
+ }
76
+
77
+ /**
78
+ Validates that only declaration nodes can be children
79
+ */
80
+ void insertChildBefore(std::shared_ptr<JsiDomNode> child,
81
+ std::shared_ptr<JsiDomNode> before) override {
82
+ if (std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child) ==
83
+ nullptr) {
84
+ getContext()->raiseError(std::runtime_error(
85
+ "Cannot add a child of type \"" + std::string(child->getType()) +
86
+ "\" to a \"" + std::string(getType()) + "\"."));
87
+ }
88
+ JsiDomNode::insertChildBefore(child, before);
89
+ }
90
+ };
91
+
92
+ template <typename T, typename ST>
93
+ class JsiDomDeclarationNode : public JsiBaseDomDeclarationNode {
94
+ public:
95
+ JsiDomDeclarationNode(std::shared_ptr<RNSkPlatformContext> context,
96
+ const char *type)
97
+ : JsiBaseDomDeclarationNode(context, type) {}
98
+
99
+ bool isChanged(DrawingContext *context) {
100
+ return getCurrent() == nullptr || context->isChanged() ||
101
+ getPropsContainer()->isChanged();
102
+ }
103
+
104
+ /**
105
+ Returns the inner element
106
+ */
107
+ ST getCurrent() { return _current; }
108
+
109
+ /**
110
+ Clears the current
111
+ */
112
+ void clearCurrent() { _current = nullptr; }
113
+
114
+ protected:
115
+ /**
116
+ Sets the current value
117
+ */
118
+ void setCurrent(ST c) { _current = c; }
119
+
120
+ /**
121
+ Returns a required child image filter by index
122
+ */
123
+ ST requireChild(size_t index) {
124
+ auto filter = optionalChild(index);
125
+ if (filter == nullptr) {
126
+ throw std::runtime_error("Expected child node at index " +
127
+ std::to_string(index) + " in node " + getType());
128
+ }
129
+ return filter;
130
+ }
131
+
132
+ /**
133
+ Returns an optional child image filter by index
134
+ */
135
+ ST optionalChild(size_t index) {
136
+ if (index >= getChildren().size()) {
137
+ return nullptr;
138
+ }
139
+
140
+ auto child = getChildren()[index];
141
+ // Support all types here!! ImageFilters, ColorFilters
142
+ // package/src/dom/nodes/paint/ImageFilters.ts#80
143
+ return resolve(child);
144
+ }
145
+
146
+ /**
147
+ Returns child as inner type or nullptr
148
+ */
149
+ virtual ST resolve(std::shared_ptr<JsiDomNode> child) = 0;
150
+
151
+ /**
152
+ Sets or composes the image filter
153
+ */
154
+ virtual void set(DrawingContext *context, ST imageFilter) = 0;
155
+
156
+ void removeChild(std::shared_ptr<JsiDomNode> child) override {
157
+ JsiBaseDomDeclarationNode::removeChild(child);
158
+ clearCurrent();
159
+ }
160
+
161
+ void addChild(std::shared_ptr<JsiDomNode> child) override {
162
+ JsiBaseDomDeclarationNode::addChild(child);
163
+ clearCurrent();
164
+ }
165
+
166
+ void insertChildBefore(std::shared_ptr<JsiDomNode> child,
167
+ std::shared_ptr<JsiDomNode> before) override {
168
+ JsiBaseDomDeclarationNode::insertChildBefore(child, before);
169
+ clearCurrent();
170
+ }
171
+
172
+ private:
173
+ ST _current;
174
+ };
175
+
176
+ } // namespace RNSkia
@@ -0,0 +1,50 @@
1
+ #pragma once
2
+
3
+ #include "JsiDomRenderNode.h"
4
+ #include "JsiPaintNode.h"
5
+
6
+ #include <memory>
7
+
8
+ namespace RNSkia {
9
+
10
+ class JsiDomDrawingNode : public JsiDomRenderNode {
11
+ public:
12
+ JsiDomDrawingNode(std::shared_ptr<RNSkPlatformContext> context,
13
+ const char *type)
14
+ : JsiDomRenderNode(context, type) {}
15
+
16
+ protected:
17
+ void defineProperties(NodePropsContainer *container) override {
18
+ JsiDomRenderNode::defineProperties(container);
19
+ container->defineProperty(std::make_shared<PaintProp>());
20
+ }
21
+
22
+ /**
23
+ Override to implement drawing.
24
+ */
25
+ virtual void draw(DrawingContext *context) = 0;
26
+
27
+ void renderNode(DrawingContext *context) override {
28
+ #if SKIA_DOM_DEBUG
29
+ printDebugInfo(context, "Begin Draw", 1);
30
+ #endif
31
+
32
+ #if SKIA_DOM_DEBUG
33
+ printDebugInfo(context, context->getDebugDescription(), 2);
34
+ #endif
35
+ draw(context);
36
+
37
+ // Draw once more for each child paint node
38
+ for (auto &child : getChildren()) {
39
+ auto ptr = std::dynamic_pointer_cast<JsiPaintNode>(child);
40
+ if (ptr != nullptr) {
41
+ draw(ptr->getDrawingContext());
42
+ }
43
+ }
44
+ #if SKIA_DOM_DEBUG
45
+ printDebugInfo(context, "End Draw", 1);
46
+ #endif
47
+ }
48
+ };
49
+
50
+ } // namespace RNSkia
@@ -0,0 +1,361 @@
1
+ #pragma once
2
+
3
+ #include "JsiHostObject.h"
4
+ #include "NodeProp.h"
5
+ #include "NodePropsContainer.h"
6
+
7
+ #include <memory>
8
+ #include <string>
9
+ #include <utility>
10
+ #include <vector>
11
+
12
+ #include "RNSkPlatformContext.h"
13
+
14
+ namespace RNSkia {
15
+
16
+ template <class TNode> class JsiDomNodeCtor {
17
+ public:
18
+ /**
19
+ Constructor to add to the Api object
20
+ */
21
+ static const jsi::HostFunctionType
22
+ createCtor(std::shared_ptr<RNSkPlatformContext> context) {
23
+ return JSI_HOST_FUNCTION_LAMBDA {
24
+ auto node = std::make_shared<TNode>(context);
25
+ node->initializeNode(runtime, thisValue, arguments, count);
26
+ return jsi::Object::createFromHostObject(runtime, std::move(node));
27
+ };
28
+ }
29
+ };
30
+
31
+ static std::atomic<size_t> NodeIdent = 1000;
32
+
33
+ /**
34
+ Implements an abstract base class for nodes in the Skia Reconciler. This node
35
+ coresponds to the native implementation of the Node.ts class in Javascript.
36
+ */
37
+ class JsiDomNode : public JsiHostObject,
38
+ public std::enable_shared_from_this<JsiDomNode> {
39
+ public:
40
+ /**
41
+ Contructor. Takes as parameters the values comming from the JS world that
42
+ initialized the class.
43
+ */
44
+ JsiDomNode(std::shared_ptr<RNSkPlatformContext> context, const char *type)
45
+ : _type(type), _context(context), _nodeId(NodeIdent++), JsiHostObject() {}
46
+
47
+ /**
48
+ Called when creating the node, resolves properties from the node constructor.
49
+ These properties are materialized, ie. no animated values or anything.
50
+ */
51
+ JSI_HOST_FUNCTION(initializeNode) {
52
+ return setProps(runtime, thisValue, arguments, count);
53
+ }
54
+
55
+ /**
56
+ JS-function for setting the properties from the JS reconciler on the node.
57
+ */
58
+ JSI_HOST_FUNCTION(setProps) {
59
+ if (count == 1) {
60
+ // Initialize properties container
61
+ setProps(runtime, getArgumentAsObject(runtime, arguments, count, 0));
62
+ } else {
63
+ setEmptyProps();
64
+ }
65
+ return jsi::Value::undefined();
66
+ }
67
+
68
+ /**
69
+ Empty setProp implementation - compatibility with JS node
70
+ */
71
+ JSI_HOST_FUNCTION(setProp) { return jsi::Value::undefined(); }
72
+
73
+ /**
74
+ JS Function to be called when the node is no longer part of the reconciler
75
+ tree. Use for cleaning up.
76
+ */
77
+ JSI_HOST_FUNCTION(dispose) {
78
+ dispose();
79
+ return jsi::Value::undefined();
80
+ }
81
+
82
+ /**
83
+ JS Function for adding a child node to this node.
84
+ */
85
+ JSI_HOST_FUNCTION(addChild) {
86
+ // child: Node<unknown>
87
+ auto newChild =
88
+ getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
89
+ addChild(newChild);
90
+ return jsi::Value::undefined();
91
+ }
92
+
93
+ /*
94
+ JS Function for removing a child node from this node
95
+ */
96
+ JSI_HOST_FUNCTION(removeChild) {
97
+ auto child =
98
+ getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
99
+ removeChild(child);
100
+ return jsi::Value::undefined();
101
+ }
102
+
103
+ /**
104
+ JS Function for insering a child node to a specific location in the children
105
+ array on this node
106
+ */
107
+ JSI_HOST_FUNCTION(insertChildBefore) {
108
+ // child: Node<unknown>, before: Node<unknown>
109
+ auto child =
110
+ getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
111
+ auto before =
112
+ getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 1);
113
+ insertChildBefore(child, before);
114
+ return jsi::Value::undefined();
115
+ }
116
+
117
+ /**
118
+ JS Function for getting child nodes for this node
119
+ */
120
+ JSI_HOST_FUNCTION(children) {
121
+ auto array = jsi::Array(runtime, _children.size());
122
+
123
+ size_t index = 0;
124
+ for (auto child : _children) {
125
+ array.setValueAtIndex(runtime, index++, child->asHostObject(runtime));
126
+ }
127
+ return array;
128
+ }
129
+
130
+ /**
131
+ JS Property for getting the type of node
132
+ */
133
+ JSI_PROPERTY_GET(type) {
134
+ return jsi::String::createFromUtf8(runtime, getType());
135
+ }
136
+
137
+ JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(JsiDomNode, type))
138
+
139
+ JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiDomNode, setProps),
140
+ JSI_EXPORT_FUNC(JsiDomNode, setProp),
141
+ JSI_EXPORT_FUNC(JsiDomNode, addChild),
142
+ JSI_EXPORT_FUNC(JsiDomNode, removeChild),
143
+ JSI_EXPORT_FUNC(JsiDomNode, insertChildBefore),
144
+ JSI_EXPORT_FUNC(JsiDomNode, children),
145
+ JSI_EXPORT_FUNC(JsiDomNode, dispose))
146
+
147
+ /**
148
+ Returns the node type.
149
+ */
150
+ const char *getType() { return _type; }
151
+
152
+ size_t getNodeId() { return _nodeId; }
153
+
154
+ /**
155
+ Returns the container for node properties
156
+ */
157
+ NodePropsContainer *getPropsContainer() { return _propsContainer.get(); }
158
+
159
+ /**
160
+ Callback that will be called when the node is disposed - typically registered
161
+ from the dependency manager so that nodes can be removed and unsubscribed
162
+ from when removed from the reconciler tree.
163
+ */
164
+ void setDisposeCallback(std::function<void()> disposeCallback) {
165
+ _disposeCallback = disposeCallback;
166
+ }
167
+
168
+ /**
169
+ Updates any pending property changes in all nodes and child nodes. This
170
+ function will swap any pending property changes in this and children with any
171
+ waiting values that has been set by the javascript thread. Props will also be
172
+ marked as changed so that we can calculate wether updates are required or
173
+ not.
174
+ */
175
+ void commitPendingChanges() {
176
+ if (_propsContainer != nullptr) {
177
+ _propsContainer->updatePendingValues();
178
+ }
179
+
180
+ for (auto &child : _children) {
181
+ child->commitPendingChanges();
182
+ }
183
+ }
184
+
185
+ /**
186
+ When pending properties has been updated and all rendering is done, we call
187
+ this function to mark any changes as processed. This call also resolves all
188
+ child nodes
189
+ */
190
+ virtual void resetPendingChanges() {
191
+ // Mark self as resolved
192
+ if (_propsContainer != nullptr) {
193
+ _propsContainer->markAsResolved();
194
+ }
195
+
196
+ // Resolve children
197
+ for (auto &child : _children) {
198
+ child->resetPendingChanges();
199
+ }
200
+ }
201
+
202
+ protected:
203
+ /**
204
+ Override to define properties in node implementations
205
+ */
206
+ virtual void defineProperties(NodePropsContainer *container) {}
207
+
208
+ /**
209
+ Returns the platform context
210
+ */
211
+ std::shared_ptr<RNSkPlatformContext> getContext() { return _context; }
212
+
213
+ /**
214
+ Returns this node as a host object that can be returned to the JS side.
215
+ */
216
+ jsi::Object asHostObject(jsi::Runtime &runtime) {
217
+ return jsi::Object::createFromHostObject(runtime, shared_from_this());
218
+ }
219
+
220
+ /**
221
+ Native implementation of the set properties method. This is called from the
222
+ reconciler when properties are set due to changes in React. This method will
223
+ always call the onPropsSet method as a signal that things have changed.
224
+ */
225
+ void setProps(jsi::Runtime &runtime, jsi::Object &&props) {
226
+ if (_propsContainer == nullptr) {
227
+
228
+ // Initialize properties container
229
+ _propsContainer = std::make_shared<NodePropsContainer>(getType());
230
+
231
+ // Ask sub classes to define their properties
232
+ defineProperties(_propsContainer.get());
233
+ }
234
+ // Update properties container
235
+ _propsContainer->setProps(runtime, std::move(props));
236
+ }
237
+
238
+ /**
239
+ Called for components that has no properties
240
+ */
241
+ void setEmptyProps() {
242
+ if (_propsContainer == nullptr) {
243
+
244
+ // Initialize properties container
245
+ _propsContainer = std::make_shared<NodePropsContainer>(getType());
246
+
247
+ // Ask sub classes to define their properties
248
+ defineProperties(_propsContainer.get());
249
+ }
250
+ }
251
+
252
+ /**
253
+ Returns all child JsiDomNodes for this node.
254
+ */
255
+ const std::vector<std::shared_ptr<JsiDomNode>> &getChildren() {
256
+ std::lock_guard<std::mutex> lock(_childrenLock);
257
+ return _children;
258
+ }
259
+
260
+ /**
261
+ Adds a child node to the array of children for this node
262
+ */
263
+ virtual void addChild(std::shared_ptr<JsiDomNode> child) {
264
+ std::lock_guard<std::mutex> lock(_childrenLock);
265
+ _children.push_back(child);
266
+ }
267
+
268
+ /**
269
+ Inserts a child node before a given child node in the children array for this
270
+ node
271
+ */
272
+ virtual void insertChildBefore(std::shared_ptr<JsiDomNode> child,
273
+ std::shared_ptr<JsiDomNode> before) {
274
+ auto position = std::find(_children.begin(), _children.end(), before);
275
+ std::lock_guard<std::mutex> lock(_childrenLock);
276
+ _children.insert(position, child);
277
+ }
278
+
279
+ /**
280
+ Removes a child. Removing a child will remove the child from the array of
281
+ children and call dispose on the child node.
282
+ */
283
+ virtual void removeChild(std::shared_ptr<JsiDomNode> child) {
284
+ std::lock_guard<std::mutex> lock(_childrenLock);
285
+ // Delete child itself
286
+ _children.erase(
287
+ std::remove_if(_children.begin(), _children.end(),
288
+ [child](const auto &node) { return node == child; }),
289
+ _children.end());
290
+
291
+ // We don't need to call dispose since the dtor handles disposing
292
+ child->dispose();
293
+ }
294
+
295
+ /**
296
+ Called when a node has been removed from the dom tree and needs to be cleaned
297
+ up.
298
+ */
299
+ virtual void dispose() {
300
+ if (_isDisposed) {
301
+ return;
302
+ }
303
+
304
+ _isDisposed = true;
305
+
306
+ // Callback signaling that we're done
307
+ if (_disposeCallback != nullptr) {
308
+ _disposeCallback();
309
+ _disposeCallback = nullptr;
310
+ }
311
+
312
+ // Clear props
313
+ if (_propsContainer != nullptr) {
314
+ _propsContainer->dispose();
315
+ }
316
+
317
+ // Remove children
318
+ std::vector<std::shared_ptr<JsiDomNode>> tmp;
319
+ {
320
+ std::lock_guard<std::mutex> lock(_childrenLock);
321
+ tmp.reserve(_children.size());
322
+ for (auto &child : _children) {
323
+ tmp.push_back(child);
324
+ }
325
+ _children.clear();
326
+ }
327
+ for (auto &child : tmp) {
328
+ child->dispose();
329
+ }
330
+ }
331
+
332
+ #if SKIA_DOM_DEBUG
333
+ std::string getLevelIndentation(DrawingContext *ctx, size_t indentation = 0) {
334
+ return std::string((ctx->getLevel() + indentation), ' ');
335
+ }
336
+
337
+ void printDebugInfo(DrawingContext *context, const std::string &message,
338
+ size_t indentation = 0) {
339
+ RNSkLogger::logToConsole("%s%s %lu: %s",
340
+ getLevelIndentation(context, indentation).c_str(),
341
+ getType(), getNodeId(), message.c_str());
342
+ }
343
+ #endif
344
+
345
+ private:
346
+ const char *_type;
347
+ std::shared_ptr<RNSkPlatformContext> _context;
348
+
349
+ std::shared_ptr<NodePropsContainer> _propsContainer;
350
+
351
+ std::function<void()> _disposeCallback;
352
+
353
+ std::vector<std::shared_ptr<JsiDomNode>> _children;
354
+ std::mutex _childrenLock;
355
+
356
+ std::atomic<bool> _isDisposed = {false};
357
+
358
+ size_t _nodeId;
359
+ };
360
+
361
+ } // namespace RNSkia