@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,267 @@
1
+
2
+ #pragma once
3
+
4
+ #include "ClipProp.h"
5
+ #include "DrawingContext.h"
6
+ #include "JsiDomDeclarationNode.h"
7
+ #include "JsiDomNode.h"
8
+ #include "LayerProp.h"
9
+ #include "MatrixProp.h"
10
+ #include "PaintProps.h"
11
+ #include "PointProp.h"
12
+ #include "RRectProp.h"
13
+ #include "RectProp.h"
14
+ #include "TransformProp.h"
15
+
16
+ #include <memory>
17
+ #include <string>
18
+
19
+ namespace RNSkia {
20
+
21
+ static PropId PropNameOrigin = JsiPropId::get("origin");
22
+ static PropId PropNameOpacity = JsiPropId::get("opacity");
23
+ static PropId PropNameClip = JsiPropId::get("clip");
24
+ static PropId PropNameInvertClip = JsiPropId::get("invertClip");
25
+ static PropId PropNameLayer = JsiPropId::get("layer");
26
+
27
+ class JsiDomRenderNode : public JsiDomNode {
28
+ public:
29
+ JsiDomRenderNode(std::shared_ptr<RNSkPlatformContext> context,
30
+ const char *type)
31
+ : JsiDomNode(context, type) {}
32
+
33
+ void render(DrawingContext *context) {
34
+ #if SKIA_DOM_DEBUG
35
+ printDebugInfo(context, "Begin Render");
36
+ #endif
37
+
38
+ // Ensure we have a local drawing context inheriting from the parent context
39
+ if (_localContext == nullptr) {
40
+ _localContext = context->inheritContext(getType());
41
+ }
42
+
43
+ auto shouldTransform = _matrixProp->isSet() || _transformProp->isSet();
44
+ auto shouldSave =
45
+ shouldTransform || _clipProp->isSet() || _layerProp->isSet();
46
+
47
+ // Handle matrix/transforms
48
+ if (shouldSave) {
49
+ // Save canvas state
50
+ if (_layerProp->isSet()) {
51
+ if (_layerProp->isBool()) {
52
+ #if SKIA_DOM_DEBUG
53
+ printDebugInfo(context, "canvas->saveLayer()");
54
+ #endif
55
+ _localContext->getCanvas()->saveLayer(
56
+ SkCanvas::SaveLayerRec(nullptr, nullptr, nullptr, 0));
57
+ } else {
58
+ #if SKIA_DOM_DEBUG
59
+ printDebugInfo(context, "canvas->saveLayer(paint)");
60
+ #endif
61
+ _localContext->getCanvas()->saveLayer(SkCanvas::SaveLayerRec(
62
+ nullptr, _layerProp->getDerivedValue().get(), nullptr, 0));
63
+ }
64
+ } else {
65
+ #if SKIA_DOM_DEBUG
66
+ printDebugInfo(context, "canvas->save()");
67
+ #endif
68
+ _localContext->getCanvas()->save();
69
+ }
70
+
71
+ if (_originProp->isSet()) {
72
+ #if SKIA_DOM_DEBUG
73
+ printDebugInfo(context, "canvas->translate(origin)");
74
+ #endif
75
+ // Handle origin
76
+ _localContext->getCanvas()->translate(
77
+ _originProp->getDerivedValue()->x(),
78
+ _originProp->getDerivedValue()->y());
79
+ }
80
+
81
+ if (shouldTransform) {
82
+ #if SKIA_DOM_DEBUG
83
+ printDebugInfo(
84
+ context,
85
+ "canvas->concat(" +
86
+ std::string(_matrixProp->isSet() ? "matrix" : "transform") +
87
+ std::string(")"));
88
+ #endif
89
+ auto matrix = _matrixProp->isSet() ? _matrixProp->getDerivedValue()
90
+ : _transformProp->getDerivedValue();
91
+
92
+ // Concat canvas' matrix with our matrix
93
+ _localContext->getCanvas()->concat(*matrix);
94
+ }
95
+
96
+ // Clipping
97
+ if (_clipProp->isSet()) {
98
+ auto invert = _invertClip->isSet() && _invertClip->value().getAsBool();
99
+ clip(context, _localContext->getCanvas(), invert);
100
+ }
101
+
102
+ if (_originProp->isSet()) {
103
+ #if SKIA_DOM_DEBUG
104
+ printDebugInfo(context, "canvas->translate(-origin)");
105
+ #endif
106
+ // Handle origin
107
+ _localContext->getCanvas()->translate(
108
+ -_originProp->getDerivedValue()->x(),
109
+ -_originProp->getDerivedValue()->y());
110
+ }
111
+ }
112
+
113
+ // Let any local paint props decorate the context
114
+ _paintProps->decorate(_localContext.get());
115
+
116
+ // Now let's make sure the local context is resolved correctly - ie. that
117
+ // all children of type declaration (except paint) is given the opportunity
118
+ // to decorate the context.
119
+ materializeDeclarations();
120
+
121
+ // Render the node
122
+ renderNode(_localContext.get());
123
+
124
+ // Restore if needed
125
+ if (shouldSave) {
126
+ #if SKIA_DOM_DEBUG
127
+ printDebugInfo(context, "canvas->restore()");
128
+ #endif
129
+ _localContext->getCanvas()->restore();
130
+ }
131
+
132
+ #if SKIA_DOM_DEBUG
133
+ printDebugInfo(context, "End Render");
134
+ #endif
135
+ }
136
+
137
+ /**
138
+ Override reset (last thing that happens in the render cycle) to also reset
139
+ the changed flag on the local drawing context if necessary.
140
+ */
141
+ void resetPendingChanges() override {
142
+ JsiDomNode::resetPendingChanges();
143
+ _localContext->resetChangedFlag();
144
+ }
145
+
146
+ /**
147
+ Signal from the JS side that the node is removed from the dom.
148
+ */
149
+ void dispose() override {
150
+ JsiDomNode::dispose();
151
+
152
+ // Clear local drawing context
153
+ if (_localContext != nullptr) {
154
+ _localContext->dispose();
155
+ _localContext = nullptr;
156
+ }
157
+ }
158
+
159
+ protected:
160
+ /**
161
+ Override to implement rendering where the current state of the drawing
162
+ context is correctly set.
163
+ */
164
+ virtual void renderNode(DrawingContext *context) = 0;
165
+
166
+ /**
167
+ Removes a child
168
+ */
169
+ void removeChild(std::shared_ptr<JsiDomNode> child) override {
170
+ JsiDomNode::removeChild(child);
171
+ if (_localContext != nullptr) {
172
+ _localContext->markAsChanged();
173
+ }
174
+ }
175
+
176
+ /**
177
+ Validates that only declaration nodes can be children
178
+ */
179
+ void addChild(std::shared_ptr<JsiDomNode> child) override {
180
+ JsiDomNode::addChild(child);
181
+ if (_localContext != nullptr) {
182
+ _localContext->markAsChanged();
183
+ }
184
+ }
185
+
186
+ /**
187
+ Validates that only declaration nodes can be children
188
+ */
189
+ void insertChildBefore(std::shared_ptr<JsiDomNode> child,
190
+ std::shared_ptr<JsiDomNode> before) override {
191
+ JsiDomNode::insertChildBefore(child, before);
192
+ if (_localContext != nullptr) {
193
+ _localContext->markAsChanged();
194
+ }
195
+ }
196
+
197
+ /**
198
+ Define common properties for all render nodes
199
+ */
200
+ void defineProperties(NodePropsContainer *container) override {
201
+ JsiDomNode::defineProperties(container);
202
+
203
+ _paintProps = container->defineProperty(std::make_shared<PaintProps>());
204
+
205
+ _matrixProp =
206
+ container->defineProperty(std::make_shared<MatrixProp>(PropNameMatrix));
207
+ _transformProp = container->defineProperty(
208
+ std::make_shared<TransformProp>(PropNameTransform));
209
+ _originProp =
210
+ container->defineProperty(std::make_shared<PointProp>(PropNameOrigin));
211
+ _clipProp =
212
+ container->defineProperty(std::make_shared<ClipProp>(PropNameClip));
213
+ _invertClip = container->defineProperty(
214
+ std::make_shared<NodeProp>(PropNameInvertClip));
215
+ _layerProp =
216
+ container->defineProperty(std::make_shared<LayerProp>(PropNameLayer));
217
+ }
218
+
219
+ private:
220
+ /**
221
+ Clips the canvas depending on the clip property
222
+ */
223
+ void clip(DrawingContext *context, SkCanvas *canvas, bool invert) {
224
+ auto op = invert ? SkClipOp::kDifference : SkClipOp::kIntersect;
225
+ if (_clipProp->getRect() != nullptr) {
226
+ #if SKIA_DOM_DEBUG
227
+ printDebugInfo(context, "canvas->clipRect()");
228
+ #endif
229
+ canvas->clipRect(*_clipProp->getRect(), op, true);
230
+ } else if (_clipProp->getRRect() != nullptr) {
231
+ #if SKIA_DOM_DEBUG
232
+ printDebugInfo(context, "canvas->clipRRect()");
233
+ #endif
234
+ canvas->clipRRect(*_clipProp->getRRect(), op, true);
235
+ } else if (_clipProp->getPath() != nullptr) {
236
+ #if SKIA_DOM_DEBUG
237
+ printDebugInfo(context, "canvas->clipPath()");
238
+ #endif
239
+ canvas->clipPath(*_clipProp->getPath(), op, true);
240
+ }
241
+ }
242
+
243
+ /**
244
+ Loops through all declaration nodes and gives each one of them the
245
+ opportunity to decorate the context
246
+ */
247
+ void materializeDeclarations() {
248
+ for (auto &child : getChildren()) {
249
+ auto ptr = std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child);
250
+ if (ptr != nullptr) {
251
+ ptr->decorateContext(_localContext.get());
252
+ }
253
+ }
254
+ }
255
+
256
+ PointProp *_originProp;
257
+ MatrixProp *_matrixProp;
258
+ TransformProp *_transformProp;
259
+ NodeProp *_invertClip;
260
+ ClipProp *_clipProp;
261
+ LayerProp *_layerProp;
262
+ PaintProps *_paintProps;
263
+
264
+ std::shared_ptr<DrawingContext> _localContext;
265
+ };
266
+
267
+ } // namespace RNSkia
@@ -0,0 +1,130 @@
1
+ #pragma once
2
+
3
+ #include "BaseNodeProp.h"
4
+ #include "JsiValue.h"
5
+
6
+ #include <chrono>
7
+ #include <memory>
8
+ #include <string>
9
+
10
+ namespace RNSkia {
11
+
12
+ /**
13
+ Simple class for reading a property by name from the Dom Node properties
14
+ object.
15
+ */
16
+ class NodeProp : public BaseNodeProp,
17
+ public std::enable_shared_from_this<NodeProp> {
18
+ public:
19
+ /**
20
+ Constructs a new optional dom node properrty
21
+ */
22
+ explicit NodeProp(PropId name) : _name(name), BaseNodeProp() {}
23
+
24
+ /**
25
+ Reads JS value and swaps out with a new value
26
+ */
27
+ void readValueFromJs(jsi::Runtime &runtime,
28
+ const ReadPropFunc &read) override {
29
+ // If the value is a nullptr this is the first call to the
30
+ // readValueFromJS Function (which comes from the reconciler
31
+ // setting a new property value on the property
32
+ if (_value == nullptr) {
33
+ _value = std::make_shared<JsiValue>(runtime, read(runtime, _name, this));
34
+ _isChanged = true;
35
+ _hasNewValue = false;
36
+ } else {
37
+ // Otherwise we'll just update the buffer and commit it later.
38
+ std::lock_guard<std::mutex> lock(_swapMutex);
39
+ if (_buffer == nullptr) {
40
+ _buffer =
41
+ std::make_shared<JsiValue>(runtime, read(runtime, _name, this));
42
+ } else {
43
+ _buffer->setCurrent(runtime, read(runtime, _name, this));
44
+ }
45
+ _hasNewValue = *_buffer.get() != *_value.get();
46
+ }
47
+ }
48
+
49
+ /**
50
+ Property value has changed - let's save this as a change to be commited later
51
+ */
52
+ void updateValue(jsi::Runtime &runtime, const jsi::Value &value) {
53
+ // Always use the next field since this method is called on the JS thread
54
+ // and we don't want to rip out the underlying value object.
55
+ std::lock_guard<std::mutex> lock(_swapMutex);
56
+ if (_buffer == nullptr) {
57
+ _buffer = std::make_shared<JsiValue>(runtime, value);
58
+ } else {
59
+ _buffer->setCurrent(runtime, value);
60
+ }
61
+ // This is almost always a change - meaning a swap is
62
+ // cheaper than comparing for equality.
63
+ _hasNewValue = true;
64
+ }
65
+
66
+ /**
67
+ Returns true if the property is set and is not undefined or null
68
+ */
69
+ bool isSet() override {
70
+ return _value != nullptr && !_value->isUndefinedOrNull();
71
+ }
72
+
73
+ /**
74
+ True if the property has changed since we last visited it
75
+ */
76
+ bool isChanged() override { return _isChanged; }
77
+
78
+ /**
79
+ Starts the process of updating and reading props
80
+ */
81
+ void updatePendingChanges() override {
82
+ // If the value has changed we should swap the
83
+ // buffers
84
+ if (_hasNewValue && _buffer != nullptr) {
85
+ {
86
+ // Swap buffers
87
+ std::lock_guard<std::mutex> lock(_swapMutex);
88
+ auto tmp = _value;
89
+ _value = _buffer;
90
+ _buffer = tmp;
91
+
92
+ // turn off pending changes flag
93
+ _hasNewValue = false;
94
+ }
95
+
96
+ // Mark as changed.
97
+ _isChanged = true;
98
+ }
99
+ }
100
+
101
+ /*
102
+ Ends the visit cycle
103
+ */
104
+ void markAsResolved() override { _isChanged = false; }
105
+
106
+ /**
107
+ Returns pointer to the value contained by the property if the property is
108
+ set.
109
+ */
110
+ const JsiValue &value() {
111
+ assert(isSet());
112
+ return *_value;
113
+ }
114
+
115
+ /**
116
+ Returns the name of the property
117
+ */
118
+ std::string getName() override { return std::string(_name); }
119
+
120
+ private:
121
+ PropId _name;
122
+
123
+ std::shared_ptr<JsiValue> _value;
124
+ std::shared_ptr<JsiValue> _buffer;
125
+ std::atomic<bool> _isChanged = {false};
126
+ std::atomic<bool> _hasNewValue = {false};
127
+ std::mutex _swapMutex;
128
+ };
129
+
130
+ } // namespace RNSkia
@@ -0,0 +1,119 @@
1
+ #pragma once
2
+
3
+ #include "DrawingContext.h"
4
+ #include "JsiValue.h"
5
+ #include "NodeProp.h"
6
+
7
+ #include <map>
8
+ #include <memory>
9
+ #include <string>
10
+ #include <utility>
11
+ #include <vector>
12
+
13
+ namespace RNSkia {
14
+
15
+ /**
16
+ This class manages marshalling from JS values over JSI to C++ values and is
17
+ typically called when a new node is created or an existing node is updated from
18
+ the reconciler.
19
+ */
20
+ class NodePropsContainer {
21
+ public:
22
+ /**
23
+ Constructor. Pass the runtime and the JS object representing the properties,
24
+ and a function that will be called when any property was changed from within
25
+ this class as a result of a Skia value change.
26
+ */
27
+ explicit NodePropsContainer(PropId componentType) : _type(componentType) {}
28
+
29
+ /**
30
+ Returns true if there are any changes in the props container in the current
31
+ being/end visit
32
+ */
33
+ bool isChanged() {
34
+ for (auto &prop : _properties) {
35
+ if (prop->isChanged()) {
36
+ return true;
37
+ }
38
+ }
39
+ return false;
40
+ }
41
+
42
+ /**
43
+ Returns a list of mappings betwen property names and property objects
44
+ */
45
+ const std::map<PropId, std::vector<NodeProp *>> &getMappedProperties() {
46
+ return _mappedProperties;
47
+ }
48
+
49
+ /**
50
+ Updates any props that has changes waiting, updates props that have derived
51
+ values
52
+ */
53
+ void updatePendingValues() {
54
+ for (auto &prop : _properties) {
55
+ prop->updatePendingChanges();
56
+ if (!prop->isSet() && prop->isRequired()) {
57
+ throw std::runtime_error("Missing one or more required properties " +
58
+ std::string(prop->getName()) + " in the " +
59
+ _type + " component.");
60
+ }
61
+ }
62
+ }
63
+
64
+ /**
65
+ We're done, mark any changes as committed in all props
66
+ */
67
+ void markAsResolved() {
68
+ for (auto &prop : _properties) {
69
+ prop->markAsResolved();
70
+ }
71
+ }
72
+
73
+ /**
74
+ Clears all props and data from the container
75
+ */
76
+ void dispose() {
77
+ _properties.clear();
78
+ _mappedProperties.clear();
79
+ }
80
+
81
+ /**
82
+ Called when the React / JS side sets properties on a node
83
+ */
84
+ void setProps(jsi::Runtime &runtime, jsi::Object &&props) {
85
+ // Clear property mapping
86
+ _mappedProperties.clear();
87
+
88
+ // Use specialized reader function to be able to intercept calls that
89
+ // reads specific named values from the js property object.
90
+ auto read = [&](jsi::Runtime &runtime, PropId name, NodeProp *prop) {
91
+ if (_mappedProperties.count(name) == 0) {
92
+ std::vector<NodeProp *> tmp;
93
+ _mappedProperties[name] = std::move(tmp);
94
+ }
95
+ _mappedProperties.at(name).push_back(prop);
96
+ return props.getProperty(runtime, name);
97
+ };
98
+
99
+ for (auto &prop : _properties) {
100
+ prop->readValueFromJs(runtime, read);
101
+ }
102
+ }
103
+
104
+ /**
105
+ Defines a property that will be updated with the container changes.
106
+ */
107
+ template <typename T = BaseNodeProp>
108
+ T *defineProperty(std::shared_ptr<T> prop) {
109
+ _properties.push_back(prop);
110
+ return prop.get();
111
+ }
112
+
113
+ private:
114
+ std::vector<std::shared_ptr<BaseNodeProp>> _properties;
115
+ std::map<PropId, std::vector<NodeProp *>> _mappedProperties;
116
+ PropId _type;
117
+ };
118
+
119
+ } // namespace RNSkia
@@ -0,0 +1,38 @@
1
+ #pragma once
2
+
3
+ #include "CircleProp.h"
4
+ #include "JsiDomDrawingNode.h"
5
+
6
+ #include <memory>
7
+
8
+ namespace RNSkia {
9
+
10
+ class JsiBackdropFilterNode : public JsiDomDrawingNode,
11
+ public JsiDomNodeCtor<JsiBackdropFilterNode> {
12
+ public:
13
+ explicit JsiBackdropFilterNode(std::shared_ptr<RNSkPlatformContext> context)
14
+ : JsiDomDrawingNode(context, "skBackdropFilter") {}
15
+
16
+ protected:
17
+ void draw(DrawingContext *context) override {
18
+ if (getChildren().size() == 0) {
19
+ throw std::runtime_error(
20
+ "Expected at least one child in the BackdropFilter node.");
21
+ }
22
+ auto child = getChildren()[0];
23
+ auto colorFilter = std::dynamic_pointer_cast<JsiBaseColorFilterNode>(child);
24
+ auto imageFilter = std::dynamic_pointer_cast<JsiBaseImageFilterNode>(child);
25
+
26
+ auto canvas = context->getCanvas();
27
+ auto filter =
28
+ colorFilter != nullptr
29
+ ? SkImageFilters::ColorFilter(colorFilter->getCurrent(), nullptr)
30
+ : imageFilter->getCurrent();
31
+
32
+ canvas->saveLayer(
33
+ SkCanvas::SaveLayerRec(nullptr, nullptr, filter.get(), 0));
34
+ canvas->restore();
35
+ }
36
+ };
37
+
38
+ } // namespace RNSkia
@@ -0,0 +1,112 @@
1
+ #pragma once
2
+
3
+ #include "JsiDomDeclarationNode.h"
4
+
5
+ #include <memory>
6
+ #include <string>
7
+
8
+ namespace RNSkia {
9
+
10
+ class JsiBlendNode : public JsiBaseDomDeclarationNode,
11
+ public JsiDomNodeCtor<JsiBlendNode> {
12
+ public:
13
+ explicit JsiBlendNode(std::shared_ptr<RNSkPlatformContext> context)
14
+ : JsiBaseDomDeclarationNode(context, "skBlend") {}
15
+
16
+ protected:
17
+ void decorate(DrawingContext *context) override {
18
+ if (context->isChanged() || getPropsContainer()->isChanged()) {
19
+ auto children = getChildren();
20
+ auto childSize = children.size();
21
+
22
+ // No need to do anything if there are no children here
23
+ if (childSize == 0) {
24
+ return;
25
+ }
26
+
27
+ // Blend mode
28
+ auto blendMode = *_blendProp->getDerivedValue();
29
+
30
+ // Find the latest child and check if it is a shader or image filter
31
+ bool asShader = std::dynamic_pointer_cast<JsiBaseShaderNode>(
32
+ children.at(childSize - 1)) != nullptr;
33
+
34
+ // Traverse children in reverse
35
+ sk_sp<SkShader> innerShader;
36
+ sk_sp<SkImageFilter> innerImageFilter;
37
+
38
+ for (size_t i = childSize - 1; i != (std::size_t)-1; i--) {
39
+ auto child = children.at(i);
40
+ auto maybeShader = std::dynamic_pointer_cast<JsiBaseShaderNode>(child);
41
+ auto maybeImageFilter =
42
+ std::dynamic_pointer_cast<JsiBaseImageFilterNode>(child);
43
+
44
+ if (asShader) {
45
+ sk_sp<SkShader> outer = maybeShader->getCurrent();
46
+ if (innerShader != nullptr) {
47
+ innerShader = SkShaders::Blend(blendMode, innerShader, outer);
48
+ } else {
49
+ innerShader = outer;
50
+ }
51
+
52
+ } else {
53
+ sk_sp<SkImageFilter> outer = maybeImageFilter->getCurrent();
54
+ if (innerImageFilter != nullptr) {
55
+ innerImageFilter = SkImageFilters::Blend(
56
+ blendMode, innerImageFilter, outer, nullptr);
57
+ } else {
58
+ innerImageFilter = outer;
59
+ }
60
+ }
61
+ }
62
+
63
+ // Materialize
64
+ if (asShader) {
65
+ context->getMutablePaint()->setShader(innerShader);
66
+ } else {
67
+ context->getMutablePaint()->setImageFilter(innerImageFilter);
68
+ }
69
+ }
70
+ }
71
+
72
+ void defineProperties(NodePropsContainer *container) override {
73
+ JsiBaseDomDeclarationNode::defineProperties(container);
74
+ _blendProp = container->defineProperty(
75
+ std::make_shared<BlendModeProp>(JsiPropId::get("mode")));
76
+ _blendProp->require();
77
+ }
78
+
79
+ /**
80
+ Validates that only declaration nodes can be children
81
+ */
82
+ void addChild(std::shared_ptr<JsiDomNode> child) override {
83
+ JsiBaseDomDeclarationNode::addChild(child);
84
+ // Verify declaration of either shader or image filter
85
+ verifyChild(child);
86
+ }
87
+
88
+ /**
89
+ Validates that only declaration nodes can be children
90
+ */
91
+ void insertChildBefore(std::shared_ptr<JsiDomNode> child,
92
+ std::shared_ptr<JsiDomNode> before) override {
93
+ JsiBaseDomDeclarationNode::insertChildBefore(child, before);
94
+ // Verify declaration of either shader or image filter
95
+ verifyChild(child);
96
+ }
97
+
98
+ private:
99
+ void verifyChild(std::shared_ptr<JsiDomNode> child) {
100
+ if (std::dynamic_pointer_cast<JsiBaseShaderNode>(child) == nullptr &&
101
+ std::dynamic_pointer_cast<JsiBaseImageFilterNode>(child) == nullptr) {
102
+ // We'll raise an error when other children are added.
103
+ std::runtime_error("Blend nodes only supports either shaders or image "
104
+ "filters as children, got " +
105
+ std::string(child->getType()) + ".");
106
+ }
107
+ }
108
+
109
+ BlendModeProp *_blendProp;
110
+ };
111
+
112
+ } // namespace RNSkia