@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,227 @@
1
+ #include "DrawingContext.h"
2
+
3
+ namespace RNSkia {
4
+
5
+ DrawingContext::DrawingContext(std::shared_ptr<SkPaint> paint, double opacity)
6
+ : DrawingContext("root") {
7
+ _paint = paint;
8
+ _opacity = opacity;
9
+ }
10
+
11
+ DrawingContext::DrawingContext(DrawingContext *parent, const char *source)
12
+ : DrawingContext(source) {
13
+ _parent = parent;
14
+ }
15
+
16
+ std::shared_ptr<DrawingContext>
17
+ DrawingContext::inheritContext(const char *source) {
18
+ auto result = std::make_shared<DrawingContext>(this, source);
19
+ _children.push_back(result);
20
+ return result;
21
+ }
22
+
23
+ size_t DrawingContext::getLevel() {
24
+ if (_parent != nullptr) {
25
+ return _parent->getLevel() + 1;
26
+ }
27
+ return 0;
28
+ }
29
+
30
+ std::string DrawingContext::getDebugDescription() {
31
+ std::string v = "ctx for " + std::string(_source) + ":";
32
+
33
+ if (_paint != nullptr) {
34
+ auto clr = _paint->getColor();
35
+ auto a = SkColorGetA(clr);
36
+ auto r = SkColorGetR(clr);
37
+ auto g = SkColorGetG(clr);
38
+ auto b = SkColorGetB(clr);
39
+
40
+ if (r > 0 || g > 0 || b > 0) {
41
+ v += " color:rgba(" + std::to_string(r) + ", " + std::to_string(g) +
42
+ ", " + std::to_string(b) + ", " + std::to_string(a) + ")";
43
+ }
44
+
45
+ if (_paint->getMaskFilter() != nullptr) {
46
+ v += " maskFilter:set";
47
+ }
48
+ auto blendMode = _paint->getBlendMode_or(SkBlendMode::kSrc);
49
+ if (blendMode != SkBlendMode::kSrc) {
50
+ v += " blendMode:" + std::to_string(static_cast<size_t>(blendMode));
51
+ }
52
+
53
+ v += " opacity:" + std::to_string(_opacity);
54
+ if (_paint->getPathEffect() != nullptr) {
55
+ v += " [PathEffect]";
56
+ }
57
+ } else {
58
+ v = v + "[inherited] " +
59
+ (_parent != nullptr ? _parent->getDebugDescription() : "");
60
+ }
61
+
62
+ v = v + "\n";
63
+
64
+ return v;
65
+ }
66
+
67
+ /**
68
+ Invalidate cache
69
+ */
70
+ void DrawingContext::markAsChanged() {
71
+ markChildrenAsChanged();
72
+ _paint = nullptr;
73
+ _isChanged = true;
74
+ }
75
+
76
+ /**
77
+ Call to reset invalidate flag after render cycle
78
+ */
79
+ void DrawingContext::resetChangedFlag() { _isChanged = false; }
80
+
81
+ /**
82
+ Dispose and remove the drawing context from its parent.
83
+ */
84
+ void DrawingContext::dispose() {
85
+ if (_parent != nullptr) {
86
+ auto position = std::find(_parent->_children.begin(),
87
+ _parent->_children.end(), shared_from_this());
88
+
89
+ if (position != _parent->_children.end()) {
90
+ _parent->_children.erase(position);
91
+ }
92
+ // TODO: This is called from the JS thread so we need somehow to avoid
93
+ // rendering after setting this to null, and we also need to protect this
94
+ // section.
95
+ _parent = nullptr;
96
+ }
97
+ }
98
+
99
+ /**
100
+ Returns true if the current cache is changed
101
+ */
102
+ bool DrawingContext::isChanged() { return _isChanged; }
103
+
104
+ /**
105
+ Get/Sets the canvas object
106
+ */
107
+ SkCanvas *DrawingContext::getCanvas() {
108
+ if (_parent != nullptr) {
109
+ return _parent->getCanvas();
110
+ }
111
+
112
+ return _canvas;
113
+ }
114
+
115
+ /**
116
+ Sets the canvas
117
+ */
118
+ void DrawingContext::setCanvas(SkCanvas *canvas) { _canvas = canvas; }
119
+
120
+ /**
121
+ Gets the paint object
122
+ */
123
+ std::shared_ptr<const SkPaint> DrawingContext::getPaint() {
124
+ if (_paint != nullptr) {
125
+ return _paint;
126
+ }
127
+ return _parent->getPaint();
128
+ }
129
+
130
+ /**
131
+ To be able to mutate and change the paint in a context we need to mutate the
132
+ underlying paint object - otherwise we'll just use the parent paint object
133
+ (to avoid having to create multiple paint objects for nodes that does not
134
+ change the paint).
135
+ */
136
+ std::shared_ptr<SkPaint> DrawingContext::getMutablePaint() {
137
+ if (_paint == nullptr) {
138
+ auto parentPaint = _parent->getPaint();
139
+ _paint = std::make_shared<SkPaint>(*parentPaint);
140
+ _opacity = _parent->getOpacity();
141
+ }
142
+ // Calling the getMutablePaint accessor implies that the paint
143
+ // is about to be mutatet and will therefore invalidate
144
+ // any child contexts to pick up changes from this context as
145
+ // the parent context.
146
+ markChildrenAsChanged();
147
+ return _paint;
148
+ }
149
+
150
+ /**
151
+ Sets the paint in the current sub context
152
+ */
153
+ void DrawingContext::setMutablePaint(std::shared_ptr<SkPaint> paint) {
154
+ _paint = paint;
155
+ }
156
+
157
+ /**
158
+ Getd the opacity value
159
+ */
160
+ double DrawingContext::getOpacity() {
161
+ if (_paint == nullptr) {
162
+ return _parent->getOpacity();
163
+ }
164
+ return _opacity;
165
+ }
166
+
167
+ /**
168
+ Sets the opacity value
169
+ */
170
+ void DrawingContext::setOpacity(double opacity) {
171
+ getMutablePaint()->setAlphaf(_opacity);
172
+ _opacity = opacity;
173
+ }
174
+
175
+ /**
176
+ Clears the opacity value
177
+ */
178
+ void DrawingContext::clearOpacity() {
179
+ if (_parent != nullptr) {
180
+ _opacity = _parent->getOpacity();
181
+ } else {
182
+ _opacity = 1.0;
183
+ }
184
+ markChildrenAsChanged();
185
+ }
186
+
187
+ float DrawingContext::getScaledWidth() {
188
+ if (_parent != nullptr) {
189
+ return _parent->getScaledWidth();
190
+ }
191
+ return _scaledWidth;
192
+ }
193
+
194
+ float DrawingContext::getScaledHeight() {
195
+ if (_parent != nullptr) {
196
+ return _parent->getScaledHeight();
197
+ }
198
+ return _scaledHeight;
199
+ }
200
+
201
+ void DrawingContext::setScaledWidth(float v) { _scaledWidth = v; }
202
+ void DrawingContext::setScaledHeight(float v) { _scaledHeight = v; }
203
+
204
+ void DrawingContext::setRequestRedraw(std::function<void()> &&requestRedraw) {
205
+ if (_parent != nullptr) {
206
+ _parent->setRequestRedraw(std::move(requestRedraw));
207
+ } else {
208
+ _requestRedraw = std::move(requestRedraw);
209
+ }
210
+ }
211
+
212
+ const std::function<void()> &DrawingContext::getRequestRedraw() {
213
+ if (_parent != nullptr) {
214
+ return _parent->getRequestRedraw();
215
+ }
216
+ return _requestRedraw;
217
+ }
218
+
219
+ DrawingContext::DrawingContext(const char *source) { _source = source; }
220
+
221
+ void DrawingContext::markChildrenAsChanged() {
222
+ for (auto &child : _children) {
223
+ child->markAsChanged();
224
+ }
225
+ }
226
+
227
+ } // namespace RNSkia
@@ -0,0 +1,136 @@
1
+ #pragma once
2
+
3
+ #include "JsiHostObject.h"
4
+
5
+ #include <memory>
6
+ #include <string>
7
+ #include <utility>
8
+ #include <vector>
9
+
10
+ #pragma clang diagnostic push
11
+ #pragma clang diagnostic ignored "-Wdocumentation"
12
+
13
+ #include <SkCanvas.h>
14
+ #include <SkPaint.h>
15
+
16
+ #pragma clang diagnostic pop
17
+
18
+ namespace RNSkia {
19
+
20
+ class DrawingContext : public std::enable_shared_from_this<DrawingContext> {
21
+ public:
22
+ /**
23
+ Creates a root drawing context with paint and opacity
24
+ */
25
+ DrawingContext(std::shared_ptr<SkPaint> paint, double opacity);
26
+
27
+ /**
28
+ Initilalizes a new draw context.
29
+ */
30
+ DrawingContext(DrawingContext *parent, const char *source);
31
+
32
+ /**
33
+ Factory for creating a child context that inherits from this context
34
+ */
35
+ std::shared_ptr<DrawingContext> inheritContext(const char *source);
36
+
37
+ size_t getLevel();
38
+
39
+ std::string getDebugDescription();
40
+
41
+ /**
42
+ Mark the drawing context and any child contexts as changed
43
+ */
44
+ void markAsChanged();
45
+
46
+ /**
47
+ Call to reset invalidate flag after render cycle
48
+ */
49
+ void resetChangedFlag();
50
+
51
+ /**
52
+ Dispose and remove the drawing context from its parent.
53
+ */
54
+ void dispose();
55
+
56
+ /**
57
+ Returns true if the current cache is changed
58
+ */
59
+ bool isChanged();
60
+
61
+ /**
62
+ Get/Sets the canvas object
63
+ */
64
+ SkCanvas *getCanvas();
65
+
66
+ /**
67
+ Sets the canvas
68
+ */
69
+ void setCanvas(SkCanvas *canvas);
70
+
71
+ /**
72
+ Gets the paint object
73
+ */
74
+ std::shared_ptr<const SkPaint> getPaint();
75
+
76
+ /**
77
+ To be able to mutate and change the paint in a context we need to mutate the
78
+ underlying paint object - otherwise we'll just use the parent paint object
79
+ (to avoid having to create multiple paint objects for nodes that does not
80
+ change the paint).
81
+ */
82
+ std::shared_ptr<SkPaint> getMutablePaint();
83
+
84
+ /**
85
+ Sets the paint in the current sub context
86
+ */
87
+ void setMutablePaint(std::shared_ptr<SkPaint> paint);
88
+
89
+ /**
90
+ Getd the opacity value
91
+ */
92
+ double getOpacity();
93
+
94
+ /**
95
+ Sets the opacity value
96
+ */
97
+ void setOpacity(double opacity);
98
+
99
+ /**
100
+ Clears the opacity
101
+ */
102
+ void clearOpacity();
103
+
104
+ float getScaledWidth();
105
+
106
+ float getScaledHeight();
107
+
108
+ void setScaledWidth(float v);
109
+ void setScaledHeight(float v);
110
+
111
+ void setRequestRedraw(std::function<void()> &&requestRedraw);
112
+ const std::function<void()> &getRequestRedraw();
113
+
114
+ private:
115
+ explicit DrawingContext(const char *source);
116
+
117
+ void markChildrenAsChanged();
118
+
119
+ bool _isChanged = true;
120
+
121
+ std::shared_ptr<SkPaint> _paint;
122
+ double _opacity = 1.0f;
123
+
124
+ SkCanvas *_canvas = nullptr;
125
+ const char *_source;
126
+
127
+ DrawingContext *_parent = nullptr;
128
+ std::vector<std::shared_ptr<DrawingContext>> _children;
129
+
130
+ float _scaledWidth = -1;
131
+ float _scaledHeight = -1;
132
+
133
+ std::function<void()> _requestRedraw;
134
+ };
135
+
136
+ } // namespace RNSkia
@@ -0,0 +1,294 @@
1
+ #pragma once
2
+
3
+ #include "JsiHostObject.h"
4
+
5
+ #include "RNSkPlatformContext.h"
6
+
7
+ #include "JsiDomNode.h"
8
+
9
+ #include <map>
10
+ #include <memory>
11
+ #include <set>
12
+ #include <string>
13
+ #include <utility>
14
+ #include <vector>
15
+
16
+ namespace RNSkia {
17
+
18
+ static PropId PropNameSelector = JsiPropId::get("selector");
19
+ static PropId PropNameValue = JsiPropId::get("value");
20
+
21
+ class JsiDependencyManager
22
+ : public JsiHostObject,
23
+ public std::enable_shared_from_this<JsiDependencyManager> {
24
+ public:
25
+ JsiDependencyManager(std::shared_ptr<RNSkPlatformContext> context,
26
+ jsi::Object &&registerValuesCallback)
27
+ : _registerValuesCallback(std::move(registerValuesCallback)),
28
+ JsiHostObject() {}
29
+
30
+ ~JsiDependencyManager() { unsubscribeAll(); }
31
+
32
+ /**
33
+ Call to unsubscribe all value listeners from the given node based on the
34
+ current list of subscriptions for the node. This function is typically called
35
+ when the node is unmounted or when one or more properties have changed. NOTE:
36
+ In this implementation we call unsubscribe directly without going through the
37
+ JSI method - but the method is kept for compatibility with the JS
38
+ implementation
39
+ */
40
+ JSI_HOST_FUNCTION(unsubscribeNode) {
41
+ // (node: Node<unknown>)
42
+ auto node =
43
+ getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
44
+ unsubscribeNode(node.get());
45
+ return jsi::Value::undefined();
46
+ }
47
+
48
+ /**
49
+ Adds listeners to the provided values so that the node is notified when a
50
+ value changes.
51
+ */
52
+ JSI_HOST_FUNCTION(subscribeNode) {
53
+ // subscribeNode<P>(node: Node<unknown>, props: AnimatedProps<P>)
54
+ auto node =
55
+ getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
56
+ auto nextProps = getArgumentAsObject(runtime, arguments, count, 1);
57
+
58
+ // Save unsubscribe callbacks
59
+ std::vector<
60
+ std::pair<std::shared_ptr<RNSkReadonlyValue>, std::function<void()>>>
61
+ unsubscribers;
62
+
63
+ // Enumerate registered keys for the given node to only handle known
64
+ // properties
65
+ for (const auto &propMapping :
66
+ node->getPropsContainer()->getMappedProperties()) {
67
+ auto key = propMapping.first;
68
+ auto jsValue = nextProps.getProperty(runtime, key);
69
+ JsiValue nativeValue(runtime, jsValue);
70
+
71
+ if (isAnimatedValue(nativeValue)) {
72
+ // Handle Skia Animation Values
73
+ auto animatedValue = getAnimatedValue(nativeValue);
74
+ auto unsubscribe = animatedValue->addListener(
75
+ [animatedValue, propMapping](jsi::Runtime &runtime) {
76
+ // Get value from animation value
77
+ auto nextJsValue = animatedValue->getCurrent(runtime);
78
+ // Update all props that listens to this animation value
79
+ for (auto &prop : propMapping.second) {
80
+ prop->updateValue(runtime, nextJsValue);
81
+ }
82
+ });
83
+
84
+ // Save unsubscribe methods
85
+ unsubscribers.push_back(std::make_pair(animatedValue, unsubscribe));
86
+
87
+ } else if (isSelector(nativeValue)) {
88
+ // Handle Skia Animation Value Selectors
89
+ auto animatedValue = std::dynamic_pointer_cast<RNSkReadonlyValue>(
90
+ nativeValue.getValue(PropNameValue).getAsHostObject());
91
+
92
+ auto selector = nativeValue.getValue(PropNameSelector).getAsFunction();
93
+ // Add subscription to animated value in selector
94
+ auto unsubscribe = animatedValue->addListener(
95
+ [nativeValue, propMapping, selector = std::move(selector),
96
+ animatedValue](jsi::Runtime &runtime) {
97
+ // Get value from animation value
98
+ jsi::Value jsValue = animatedValue->getCurrent(runtime);
99
+ // Call selector to transform new value
100
+ auto selectedJsValue =
101
+ selector(runtime, jsi::Value::null(), &jsValue, 1);
102
+ // Update all props that listens to this animation value
103
+ for (auto &prop : propMapping.second) {
104
+ prop->updateValue(runtime, selectedJsValue);
105
+ }
106
+ });
107
+
108
+ // Save unsubscribe methods
109
+ unsubscribers.push_back(std::make_pair(animatedValue, unsubscribe));
110
+ }
111
+ }
112
+
113
+ // Now let's store the subscription info
114
+ _subscriptions.emplace(node.get(), unsubscribers);
115
+
116
+ // Set callback for unsubscribing
117
+ node->setDisposeCallback(
118
+ [node = node.get(), weakSelf = weak_from_this()]() {
119
+ auto self = weakSelf.lock();
120
+ if (self) {
121
+ self->unsubscribeNode(node);
122
+ }
123
+ });
124
+
125
+ return jsi::Value::undefined();
126
+ }
127
+
128
+ /**
129
+ Called when the hosting container is mounted or updated. This ensures that we
130
+ have a ref to the underlying SkiaView so that we can registers redraw
131
+ listeners on values used in the current View automatically.
132
+ */
133
+ JSI_HOST_FUNCTION(update) {
134
+ if (_unregisterValues != nullptr) {
135
+ // unregisterValues is a pointer to unsubscribing to the automatic
136
+ // re-render when a value change
137
+ _unregisterValues->asFunction(runtime).call(runtime,
138
+ jsi::Value::undefined(), 0);
139
+ _unregisterValues = nullptr;
140
+ }
141
+
142
+ // Now let's create connection between view and unique values
143
+ std::set<std::shared_ptr<RNSkReadonlyValue>> uniqueValues;
144
+
145
+ for (auto &nodeSub : _subscriptions) {
146
+ for (auto &sub : nodeSub.second) {
147
+ if (uniqueValues.count(sub.first) == 0) {
148
+ uniqueValues.emplace(sub.first);
149
+ }
150
+ }
151
+ }
152
+
153
+ // Copy to args
154
+ auto array = jsi::Array(runtime, uniqueValues.size());
155
+ size_t i = 0;
156
+ for (auto &el : uniqueValues) {
157
+ array.setValueAtIndex(runtime, i++,
158
+ jsi::Object::createFromHostObject(runtime, el));
159
+ }
160
+
161
+ // Call JS registerValues callback
162
+ auto func = _registerValuesCallback.asFunction(runtime);
163
+ _unregisterValues = std::make_shared<jsi::Object>(
164
+ func.call(runtime, array, 1).asObject(runtime));
165
+
166
+ return jsi::Value::undefined();
167
+ }
168
+
169
+ /**
170
+ Called when the hosting container is unmounted or recreated. This ensures
171
+ that we remove all subscriptions to Skia values so that we don't have any
172
+ listeners left after the component is removed.
173
+
174
+ * Called when the hosting container is unmounted or recreated. This ensures
175
+ that we remove
176
+ * all subscriptions to Skia values so that we don't have any listeners left
177
+ after
178
+ * the component is removed.
179
+ */
180
+ JSI_HOST_FUNCTION(remove) {
181
+ if (_unregisterValues != nullptr) {
182
+ // unregisterValues is a pointer to unsubscribing to the automatic
183
+ // re-render when a value change
184
+ _unregisterValues->asFunction(runtime).call(runtime,
185
+ jsi::Value::undefined(), 0);
186
+ _unregisterValues = nullptr;
187
+ }
188
+
189
+ unsubscribeAll();
190
+
191
+ return jsi::Value::undefined();
192
+ }
193
+
194
+ JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiDependencyManager, unsubscribeNode),
195
+ JSI_EXPORT_FUNC(JsiDependencyManager, subscribeNode),
196
+ JSI_EXPORT_FUNC(JsiDependencyManager, update),
197
+ JSI_EXPORT_FUNC(JsiDependencyManager, remove))
198
+
199
+ /**
200
+ Constructor to add to the Api object
201
+ */
202
+ static const jsi::HostFunctionType
203
+ createCtor(std::shared_ptr<RNSkPlatformContext> context) {
204
+ return JSI_HOST_FUNCTION_LAMBDA {
205
+ // Params: registerValues: (values: Array<SkiaValue<unknown>>) => () =>
206
+ // void
207
+ auto obj = std::make_shared<JsiDependencyManager>(
208
+ context, getArgumentAsObject(runtime, arguments, count, 0));
209
+
210
+ return jsi::Object::createFromHostObject(runtime, std::move(obj));
211
+ };
212
+ }
213
+
214
+ private:
215
+ /**
216
+ Removes all subscriptions
217
+ */
218
+ void unsubscribeAll() {
219
+ // Unregister all nodes
220
+ std::vector<JsiDomNode *> tmp;
221
+ tmp.reserve(_subscriptions.size());
222
+ for (auto &subInfo : _subscriptions) {
223
+ tmp.push_back(subInfo.first);
224
+ }
225
+ for (auto &node : tmp) {
226
+ unsubscribeNode(node);
227
+ }
228
+
229
+ // Clear all subscriptions
230
+ _subscriptions.clear();
231
+ }
232
+
233
+ /**
234
+ Unsubscribes from a given node
235
+ */
236
+ void unsubscribeNode(JsiDomNode *node) {
237
+ if (_subscriptions.count(node) > 0) {
238
+ auto subscriptions = _subscriptions.at(node);
239
+ for (auto &p : subscriptions) {
240
+ p.second();
241
+ }
242
+
243
+ // Remove node's subscriptions
244
+ _subscriptions.erase(node);
245
+
246
+ // Remove node's callback to avoid keeping
247
+ // cyclic dependencies between dep manager and the node
248
+ node->setDisposeCallback(nullptr);
249
+ }
250
+ }
251
+ /**
252
+ Returns true if the given value is a HostObject and it inherits from
253
+ RNSkReadonlyValue.
254
+ */
255
+ bool isAnimatedValue(JsiValue &value) {
256
+ return value.getType() == PropType::HostObject &&
257
+ std::dynamic_pointer_cast<RNSkReadonlyValue>(
258
+ value.getAsHostObject()) != nullptr;
259
+ }
260
+
261
+ /**
262
+ Returns the RNSkReadonlyValue pointer for a value that is an Animated value
263
+ */
264
+ std::shared_ptr<RNSkReadonlyValue> getAnimatedValue(JsiValue &value) {
265
+ return std::dynamic_pointer_cast<RNSkReadonlyValue>(
266
+ value.getAsHostObject());
267
+ }
268
+
269
+ /**
270
+ Returns true if the value is a selector. A Selector is a JS object that has
271
+ two properties, the selector and the the value. The selector is a function
272
+ that is used to transform the value - which is an animated skia value.
273
+ */
274
+ bool isSelector(JsiValue &value) {
275
+ // Handling selectors is rather easy, we just add
276
+ // a listener on the selector's callback and then we'll do the javascript
277
+ // resolving in the callback (which will always be on the Javascript
278
+ // thread)!
279
+ if (value.getType() == PropType::Object) {
280
+ if (value.hasValue(PropNameSelector) && value.hasValue(PropNameValue)) {
281
+ return true;
282
+ }
283
+ }
284
+ return false;
285
+ }
286
+
287
+ jsi::Object _registerValuesCallback;
288
+ std::shared_ptr<jsi::Object> _unregisterValues;
289
+ std::map<JsiDomNode *,
290
+ std::vector<std::pair<std::shared_ptr<RNSkReadonlyValue>,
291
+ std::function<void()>>>>
292
+ _subscriptions;
293
+ };
294
+ } // namespace RNSkia