@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,77 @@
1
+ #pragma once
2
+
3
+ #include "JsiDomDeclarationNode.h"
4
+ #include "PaintProps.h"
5
+
6
+ #include <memory>
7
+
8
+ namespace RNSkia {
9
+
10
+ // TODO: implement feature: A paint node has its own paint not inherited,
11
+ // and when found the drawing node should render an extra time for
12
+ // each paint node in its children.
13
+
14
+ class JsiPaintNode : public JsiBaseDomDeclarationNode,
15
+ public JsiDomNodeCtor<JsiPaintNode> {
16
+ public:
17
+ explicit JsiPaintNode(std::shared_ptr<RNSkPlatformContext> context)
18
+ : JsiBaseDomDeclarationNode(context, "skPaint") {}
19
+
20
+ /**
21
+ Returns a pointer to the local paint context in the paint node. This is a
22
+ special case for declaration nodes since the Paint node has a bit different
23
+ semantic than other declaration nodes.
24
+ */
25
+ DrawingContext *getDrawingContext() { return _localContext.get(); }
26
+
27
+ /**
28
+ We need to override the decorate node call to avoid letting children
29
+ decorate before we have created our child context.
30
+ */
31
+ void decorateContext(DrawingContext *context) override {
32
+ // A paint node should have its own local paint
33
+ if (_localContext == nullptr) {
34
+ _localContext = context->inheritContext("PaintNode");
35
+ }
36
+
37
+ // ...and it should be a totally new paint, not inheriting from parent
38
+ // paint.
39
+ if (_localContext->isChanged()) {
40
+ _localContext->setMutablePaint(std::make_shared<SkPaint>());
41
+ }
42
+
43
+ // Let's decorate paint props
44
+ _paintProps->decorate(_localContext.get());
45
+
46
+ // Materialize children who will now only change the paint node's paint
47
+ for (auto &child : getChildren()) {
48
+ auto decl = std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child);
49
+ if (decl != nullptr) {
50
+ decl->decorateContext(_localContext.get());
51
+ }
52
+ }
53
+ }
54
+
55
+ std::shared_ptr<const SkPaint> getPaint() {
56
+ return _localContext->getPaint();
57
+ }
58
+
59
+ protected:
60
+ void decorate(DrawingContext *context) override {}
61
+
62
+ void defineProperties(NodePropsContainer *container) override {
63
+ JsiBaseDomDeclarationNode::defineProperties(container);
64
+
65
+ _paintProps = container->defineProperty(std::make_shared<PaintProps>());
66
+ _opacityProp =
67
+ container->defineProperty(std::make_shared<NodeProp>(PropNameOpacity));
68
+ }
69
+
70
+ private:
71
+ NodeProp *_opacityProp;
72
+ PaintProps *_paintProps;
73
+
74
+ std::shared_ptr<DrawingContext> _localContext;
75
+ };
76
+
77
+ } // namespace RNSkia
@@ -0,0 +1,54 @@
1
+ #pragma once
2
+
3
+ #include "BezierProps.h"
4
+ #include "BlendModeProp.h"
5
+ #include "ColorProp.h"
6
+ #include "JsiDomDrawingNode.h"
7
+ #include "PointsProp.h"
8
+
9
+ #include <memory>
10
+
11
+ namespace RNSkia {
12
+
13
+ class JsiPatchNode : public JsiDomDrawingNode,
14
+ public JsiDomNodeCtor<JsiPatchNode> {
15
+ public:
16
+ explicit JsiPatchNode(std::shared_ptr<RNSkPlatformContext> context)
17
+ : JsiDomDrawingNode(context, "skPatch") {}
18
+
19
+ protected:
20
+ void draw(DrawingContext *context) override {
21
+ SkBlendMode defaultBlendMode =
22
+ _colorsProp->isSet() ? SkBlendMode::kDstOver : SkBlendMode::kSrcOver;
23
+ context->getCanvas()->drawPatch(
24
+ _patchProp->getDerivedValue()->data(),
25
+ _colorsProp->isSet() ? _colorsProp->getDerivedValue()->data() : nullptr,
26
+ _textureProp->isSet() ? _textureProp->getDerivedValue()->data()
27
+ : nullptr,
28
+ _blendModeProp->isSet() ? *_blendModeProp->getDerivedValue()
29
+ : defaultBlendMode,
30
+ *context->getPaint());
31
+ }
32
+
33
+ void defineProperties(NodePropsContainer *container) override {
34
+ JsiDomDrawingNode::defineProperties(container);
35
+ _colorsProp = container->defineProperty(
36
+ std::make_shared<ColorsProp>(JsiPropId::get("colors")));
37
+ _textureProp = container->defineProperty(
38
+ std::make_shared<PointsProp>(JsiPropId::get("texture")));
39
+ _blendModeProp = container->defineProperty(
40
+ std::make_shared<BlendModeProp>(JsiPropId::get("blendMode")));
41
+ _patchProp = container->defineProperty(
42
+ std::make_shared<BezierProp>(JsiPropId::get("patch")));
43
+
44
+ _patchProp->require();
45
+ }
46
+
47
+ private:
48
+ ColorsProp *_colorsProp;
49
+ PointsProp *_textureProp;
50
+ BlendModeProp *_blendModeProp;
51
+ BezierProp *_patchProp;
52
+ };
53
+
54
+ } // namespace RNSkia
@@ -0,0 +1,315 @@
1
+ #pragma once
2
+
3
+ #include "JsiDomDeclarationNode.h"
4
+
5
+ #include "NodeProp.h"
6
+
7
+ #include <memory>
8
+ #include <string>
9
+ #include <vector>
10
+
11
+ #pragma clang diagnostic push
12
+ #pragma clang diagnostic ignored "-Wdocumentation"
13
+
14
+ #include <SkPathEffect.h>
15
+
16
+ #pragma clang diagnostic pop
17
+
18
+ namespace RNSkia {
19
+
20
+ class JsiBasePathEffectNode
21
+ : public JsiDomDeclarationNode<JsiBasePathEffectNode, sk_sp<SkPathEffect>> {
22
+ public:
23
+ JsiBasePathEffectNode(std::shared_ptr<RNSkPlatformContext> context,
24
+ const char *type)
25
+ : JsiDomDeclarationNode<JsiBasePathEffectNode, sk_sp<SkPathEffect>>(
26
+ context, type) {}
27
+
28
+ protected:
29
+ void setPathEffect(DrawingContext *context, sk_sp<SkPathEffect> f) {
30
+ set(context, f);
31
+ }
32
+
33
+ sk_sp<SkPathEffect> resolve(std::shared_ptr<JsiDomNode> child) override {
34
+ auto ptr = std::dynamic_pointer_cast<JsiBasePathEffectNode>(child);
35
+ if (ptr) {
36
+ return ptr->getCurrent();
37
+ }
38
+ return nullptr;
39
+ }
40
+
41
+ /**
42
+ Sets or composes the path effect
43
+ */
44
+ void set(DrawingContext *context, sk_sp<SkPathEffect> pathEffect) override {
45
+ auto paint = context->getMutablePaint();
46
+ if (paint->getPathEffect() != nullptr &&
47
+ paint->getPathEffect() != getCurrent().get()) {
48
+ paint->setPathEffect(
49
+ SkPathEffect::MakeCompose(paint->refPathEffect(), pathEffect));
50
+ } else {
51
+ paint->setPathEffect(pathEffect);
52
+ }
53
+ setCurrent(pathEffect);
54
+ }
55
+ };
56
+
57
+ class JsiDashPathEffectNode : public JsiBasePathEffectNode,
58
+ public JsiDomNodeCtor<JsiDashPathEffectNode> {
59
+ public:
60
+ explicit JsiDashPathEffectNode(std::shared_ptr<RNSkPlatformContext> context)
61
+ : JsiBasePathEffectNode(context, "skDashPathEffect") {}
62
+
63
+ protected:
64
+ void decorate(DrawingContext *context) override {
65
+ if (isChanged(context)) {
66
+
67
+ // Phase
68
+ auto phase = _phase->isSet() ? _phase->value().getAsNumber() : 0;
69
+
70
+ // Copy intervals
71
+ std::vector<SkScalar> intervals;
72
+ auto intervalsArray = _intervals->value().getAsArray();
73
+ for (size_t i = 0; i < intervalsArray.size(); ++i) {
74
+ intervals.push_back(intervalsArray[i].getAsNumber());
75
+ }
76
+
77
+ // Create effect
78
+ auto pathEffect = SkDashPathEffect::Make(
79
+ intervals.data(), static_cast<int>(intervals.size()), phase);
80
+
81
+ setPathEffect(context, pathEffect);
82
+ }
83
+ }
84
+
85
+ void defineProperties(NodePropsContainer *container) override {
86
+ JsiBaseDomDeclarationNode::defineProperties(container);
87
+
88
+ _intervals = container->defineProperty(
89
+ std::make_shared<NodeProp>(JsiPropId::get("intervals")));
90
+ _phase = container->defineProperty(
91
+ std::make_shared<NodeProp>(JsiPropId::get("phase")));
92
+
93
+ _intervals->require();
94
+ }
95
+
96
+ private:
97
+ NodeProp *_intervals;
98
+ NodeProp *_phase;
99
+ };
100
+
101
+ class JsiDiscretePathEffectNode
102
+ : public JsiBasePathEffectNode,
103
+ public JsiDomNodeCtor<JsiDiscretePathEffectNode> {
104
+ public:
105
+ explicit JsiDiscretePathEffectNode(
106
+ std::shared_ptr<RNSkPlatformContext> context)
107
+ : JsiBasePathEffectNode(context, "skDiscretePathEffect") {}
108
+
109
+ protected:
110
+ void decorate(DrawingContext *context) override {
111
+ if (isChanged(context)) {
112
+
113
+ // Create effect
114
+ auto pathEffect =
115
+ SkDiscretePathEffect::Make(_lengthProp->value().getAsNumber(),
116
+ _deviationProp->value().getAsNumber(),
117
+ _seedProp->value().getAsNumber());
118
+
119
+ setPathEffect(context, pathEffect);
120
+ }
121
+ }
122
+
123
+ void defineProperties(NodePropsContainer *container) override {
124
+ JsiBaseDomDeclarationNode::defineProperties(container);
125
+
126
+ _lengthProp = container->defineProperty(
127
+ std::make_shared<NodeProp>(JsiPropId::get("length")));
128
+ _deviationProp = container->defineProperty(
129
+ std::make_shared<NodeProp>(JsiPropId::get("deviation")));
130
+ _seedProp = container->defineProperty(
131
+ std::make_shared<NodeProp>(JsiPropId::get("seed")));
132
+
133
+ _lengthProp->require();
134
+ _deviationProp->require();
135
+ _seedProp->require();
136
+ }
137
+
138
+ private:
139
+ NodeProp *_lengthProp;
140
+ NodeProp *_deviationProp;
141
+ NodeProp *_seedProp;
142
+ };
143
+
144
+ class JsiCornerPathEffectNode : public JsiBasePathEffectNode,
145
+ public JsiDomNodeCtor<JsiCornerPathEffectNode> {
146
+ public:
147
+ explicit JsiCornerPathEffectNode(std::shared_ptr<RNSkPlatformContext> context)
148
+ : JsiBasePathEffectNode(context, "skCornerPathEffect") {}
149
+
150
+ protected:
151
+ void decorate(DrawingContext *context) override {
152
+ if (isChanged(context)) {
153
+
154
+ // Create effect
155
+ auto pathEffect = SkCornerPathEffect::Make(_rProp->value().getAsNumber());
156
+
157
+ setPathEffect(context, pathEffect);
158
+ }
159
+ }
160
+
161
+ void defineProperties(NodePropsContainer *container) override {
162
+ JsiBaseDomDeclarationNode::defineProperties(container);
163
+
164
+ _rProp = container->defineProperty(
165
+ std::make_shared<NodeProp>(JsiPropId::get("r")));
166
+ _rProp->require();
167
+ }
168
+
169
+ private:
170
+ NodeProp *_rProp;
171
+ };
172
+
173
+ class JsiPath1DPathEffectNode : public JsiBasePathEffectNode,
174
+ public JsiDomNodeCtor<JsiPath1DPathEffectNode> {
175
+ public:
176
+ explicit JsiPath1DPathEffectNode(std::shared_ptr<RNSkPlatformContext> context)
177
+ : JsiBasePathEffectNode(context, "skPath1DPathEffect") {}
178
+
179
+ protected:
180
+ void decorate(DrawingContext *context) override {
181
+ if (isChanged(context)) {
182
+
183
+ // Create effect
184
+ auto pathEffect = SkPath1DPathEffect::Make(
185
+ *_pathProp->getDerivedValue(), _advanceProp->value().getAsNumber(),
186
+ _phaseProp->value().getAsNumber(),
187
+ getStyleFromStringValue(_styleProp->value().getAsString()));
188
+
189
+ setPathEffect(context, pathEffect);
190
+ }
191
+ }
192
+
193
+ void defineProperties(NodePropsContainer *container) override {
194
+ JsiBaseDomDeclarationNode::defineProperties(container);
195
+
196
+ _phaseProp = container->defineProperty(
197
+ std::make_shared<NodeProp>(JsiPropId::get("phase")));
198
+ _advanceProp = container->defineProperty(
199
+ std::make_shared<NodeProp>(JsiPropId::get("advance")));
200
+ _pathProp = container->defineProperty(
201
+ std::make_shared<PathProp>(JsiPropId::get("path")));
202
+ _styleProp = container->defineProperty(
203
+ std::make_shared<NodeProp>(JsiPropId::get("style")));
204
+
205
+ _phaseProp->require();
206
+ _advanceProp->require();
207
+ _pathProp->require();
208
+ _styleProp->require();
209
+ }
210
+
211
+ private:
212
+ SkPath1DPathEffect::Style getStyleFromStringValue(const std::string &value) {
213
+ if (value == "translate") {
214
+ return SkPath1DPathEffect::kTranslate_Style;
215
+ } else if (value == "rotate") {
216
+ return SkPath1DPathEffect::kRotate_Style;
217
+ } else if (value == "morph") {
218
+ return SkPath1DPathEffect::kMorph_Style;
219
+ }
220
+ throw std::runtime_error("Value \"" + value +
221
+ "\" is not a valid Path1D effect style.");
222
+ }
223
+
224
+ NodeProp *_phaseProp;
225
+ NodeProp *_advanceProp;
226
+ NodeProp *_styleProp;
227
+ PathProp *_pathProp;
228
+ };
229
+
230
+ class JsiPath2DPathEffectNode : public JsiBasePathEffectNode,
231
+ public JsiDomNodeCtor<JsiPath2DPathEffectNode> {
232
+ public:
233
+ explicit JsiPath2DPathEffectNode(std::shared_ptr<RNSkPlatformContext> context)
234
+ : JsiBasePathEffectNode(context, "skPath2DPathEffect") {}
235
+
236
+ protected:
237
+ void decorate(DrawingContext *context) override {
238
+ if (isChanged(context)) {
239
+
240
+ // Create effect
241
+ auto pathEffect = SkPath2DPathEffect::Make(
242
+ *_matrixProp->getDerivedValue(), *_pathProp->getDerivedValue());
243
+
244
+ setPathEffect(context, pathEffect);
245
+ }
246
+ }
247
+
248
+ void defineProperties(NodePropsContainer *container) override {
249
+ JsiBaseDomDeclarationNode::defineProperties(container);
250
+
251
+ _matrixProp = container->defineProperty(
252
+ std::make_shared<MatrixProp>(JsiPropId::get("matrix")));
253
+ _pathProp = container->defineProperty(
254
+ std::make_shared<PathProp>(JsiPropId::get("path")));
255
+
256
+ _matrixProp->require();
257
+ _pathProp->require();
258
+ }
259
+
260
+ private:
261
+ MatrixProp *_matrixProp;
262
+ PathProp *_pathProp;
263
+ };
264
+
265
+ class JsiLine2DPathEffectNode : public JsiBasePathEffectNode,
266
+ public JsiDomNodeCtor<JsiLine2DPathEffectNode> {
267
+ public:
268
+ explicit JsiLine2DPathEffectNode(std::shared_ptr<RNSkPlatformContext> context)
269
+ : JsiBasePathEffectNode(context, "skLine2DPathEffect") {}
270
+
271
+ protected:
272
+ void decorate(DrawingContext *context) override {
273
+ if (isChanged(context)) {
274
+
275
+ // Create effect
276
+ auto pathEffect = SkLine2DPathEffect::Make(
277
+ _widthProp->value().getAsNumber(), *_matrixProp->getDerivedValue());
278
+
279
+ setPathEffect(context, pathEffect);
280
+ }
281
+ }
282
+
283
+ void defineProperties(NodePropsContainer *container) override {
284
+ JsiBaseDomDeclarationNode::defineProperties(container);
285
+
286
+ _matrixProp = container->defineProperty(
287
+ std::make_shared<MatrixProp>(JsiPropId::get("matrix")));
288
+ _widthProp = container->defineProperty(
289
+ std::make_shared<NodeProp>(JsiPropId::get("width")));
290
+
291
+ _matrixProp->require();
292
+ _widthProp->require();
293
+ }
294
+
295
+ private:
296
+ MatrixProp *_matrixProp;
297
+ NodeProp *_widthProp;
298
+ };
299
+
300
+ class JsiSumPathEffectNode : public JsiBasePathEffectNode,
301
+ public JsiDomNodeCtor<JsiSumPathEffectNode> {
302
+ public:
303
+ explicit JsiSumPathEffectNode(std::shared_ptr<RNSkPlatformContext> context)
304
+ : JsiBasePathEffectNode(context, "skSumPathEffect") {}
305
+
306
+ protected:
307
+ void decorate(DrawingContext *context) override {
308
+ if (isChanged(context)) {
309
+ auto inner = requireChild(0);
310
+ auto outer = requireChild(1);
311
+ setPathEffect(context, SkPathEffect::MakeSum(inner, outer));
312
+ }
313
+ }
314
+ };
315
+ } // namespace RNSkia
@@ -0,0 +1,181 @@
1
+ #pragma once
2
+
3
+ #include "JsiDomDrawingNode.h"
4
+ #include "PathProp.h"
5
+
6
+ #include <memory>
7
+ #include <string>
8
+
9
+ #pragma clang diagnostic push
10
+ #pragma clang diagnostic ignored "-Wdocumentation"
11
+
12
+ #include <SkTrimPathEffect.h>
13
+
14
+ #pragma clang diagnostic pop
15
+
16
+ namespace RNSkia {
17
+
18
+ static PropId PropNamePath = JsiPropId::get("path");
19
+ static PropId PropNameStart = JsiPropId::get("start");
20
+ static PropId PropNameEnd = JsiPropId::get("end");
21
+ static PropId PropNameFillType = JsiPropId::get("fillType");
22
+ static PropId PropNameMiterLimit = JsiPropId::get("miter_limit");
23
+ static PropId PropNameStroke = JsiPropId::get("stroke");
24
+ static PropId PropNamePrecision = JsiPropId::get("precision");
25
+
26
+ class JsiPathNode : public JsiDomDrawingNode,
27
+ public JsiDomNodeCtor<JsiPathNode> {
28
+ public:
29
+ explicit JsiPathNode(std::shared_ptr<RNSkPlatformContext> context)
30
+ : JsiDomDrawingNode(context, "skPath") {}
31
+
32
+ protected:
33
+ void draw(DrawingContext *context) override {
34
+ if (getPropsContainer()->isChanged()) {
35
+ // Can we use the path directly, or do we need to copy to
36
+ // mutate / modify the path?
37
+ auto hasStartOffset =
38
+ _startProp->isSet() && _startProp->value().getAsNumber() != 0.0;
39
+ auto hasEndOffset =
40
+ _endProp->isSet() && _endProp->value().getAsNumber() != 1.0;
41
+ auto hasFillStyle = _fillTypeProp->isSet();
42
+ auto hasStrokeOptions =
43
+ _strokeOptsProp->isSet() &&
44
+ _strokeOptsProp->value().getType() == PropType::Object;
45
+
46
+ auto willMutatePath =
47
+ hasStartOffset || hasEndOffset || hasFillStyle || hasStrokeOptions;
48
+
49
+ if (willMutatePath) {
50
+ // We'll trim the path
51
+ SkPath filteredPath(*_pathProp->getDerivedValue());
52
+ auto pe = SkTrimPathEffect::Make(_startProp->value().getAsNumber(),
53
+ _endProp->value().getAsNumber(),
54
+ SkTrimPathEffect::Mode::kNormal);
55
+
56
+ if (pe != nullptr) {
57
+ SkStrokeRec rec(SkStrokeRec::InitStyle::kHairline_InitStyle);
58
+ if (!pe->filterPath(_pathProp->getDerivedValue().get(), filteredPath,
59
+ &rec, nullptr)) {
60
+ throw std::runtime_error(
61
+ "Failed trimming path with parameters start: " +
62
+ std::to_string(_startProp->value().getAsNumber()) +
63
+ ", end: " + std::to_string(_endProp->value().getAsNumber()));
64
+ }
65
+ _path = std::make_shared<SkPath>(filteredPath);
66
+ } else if (hasStartOffset || hasEndOffset) {
67
+ throw std::runtime_error(
68
+ "Failed trimming path with parameters start: " +
69
+ std::to_string(_startProp->value().getAsNumber()) +
70
+ ", end: " + std::to_string(_endProp->value().getAsNumber()));
71
+ } else {
72
+ _path = std::make_shared<SkPath>(*_pathProp->getDerivedValue());
73
+ }
74
+
75
+ // Set fill style
76
+ if (_fillTypeProp->isSet()) {
77
+ auto fillType = _fillTypeProp->value().getAsString();
78
+ _path->setFillType(getFillTypeFromStringValue(fillType));
79
+ }
80
+
81
+ // do we have a special paint here?
82
+ if (_strokeOptsProp->isSet()) {
83
+ auto opts = _strokeOptsProp->value();
84
+ SkPaint strokePaint;
85
+
86
+ if (opts.hasValue(JsiPropId::get("strokeCap"))) {
87
+ strokePaint.setStrokeCap(StrokeCapProp::getCapFromString(
88
+ opts.getValue(JsiPropId::get("strokeCap")).getAsString()));
89
+ }
90
+
91
+ if (opts.hasValue(JsiPropId::get("strokeJoin"))) {
92
+ strokePaint.setStrokeJoin(StrokeJoinProp::getJoinFromString(
93
+ opts.getValue(JsiPropId::get("strokeJoin")).getAsString()));
94
+ }
95
+
96
+ if (opts.hasValue(PropNameWidth)) {
97
+ strokePaint.setStrokeWidth(
98
+ opts.getValue(PropNameWidth).getAsNumber());
99
+ }
100
+
101
+ if (opts.hasValue(PropNameMiterLimit)) {
102
+ strokePaint.setStrokeMiter(
103
+ opts.getValue(PropNameMiterLimit).getAsNumber());
104
+ }
105
+
106
+ double precision = 1.0;
107
+ if (opts.hasValue(PropNamePrecision)) {
108
+ precision = opts.getValue(PropNamePrecision).getAsNumber();
109
+ }
110
+
111
+ if (!strokePaint.getFillPath(*_path.get(), _path.get(), nullptr,
112
+ precision)) {
113
+ _path = nullptr;
114
+ }
115
+ }
116
+
117
+ } else {
118
+ // We'll just draw the pure path
119
+ _path = _pathProp->getDerivedValue();
120
+ }
121
+ }
122
+
123
+ if (_path == nullptr) {
124
+ throw std::runtime_error(
125
+ "Path node could not resolve path props correctly.");
126
+ }
127
+
128
+ context->getCanvas()->drawPath(*_path, *context->getPaint());
129
+ }
130
+
131
+ void defineProperties(NodePropsContainer *container) override {
132
+ JsiDomDrawingNode::defineProperties(container);
133
+ _pathProp =
134
+ container->defineProperty(std::make_shared<PathProp>(PropNamePath));
135
+ _startProp =
136
+ container->defineProperty(std::make_shared<NodeProp>(PropNameStart));
137
+ _endProp =
138
+ container->defineProperty(std::make_shared<NodeProp>(PropNameEnd));
139
+ _fillTypeProp =
140
+ container->defineProperty(std::make_shared<NodeProp>(PropNameFillType));
141
+ _strokeOptsProp =
142
+ container->defineProperty(std::make_shared<NodeProp>(PropNameStroke));
143
+
144
+ _pathProp->require();
145
+ }
146
+
147
+ private:
148
+ SkPathFillType getFillTypeFromStringValue(const std::string &value) {
149
+ if (value == "winding") {
150
+ return SkPathFillType::kWinding;
151
+ } else if (value == "evenOdd") {
152
+ return SkPathFillType::kEvenOdd;
153
+ } else if (value == "inverseWinding") {
154
+ return SkPathFillType::kInverseWinding;
155
+ } else if (value == "inverseEvenOdd") {
156
+ return SkPathFillType::kInverseEvenOdd;
157
+ }
158
+ throw std::runtime_error("Could not convert value \"" + value +
159
+ "\" to path fill type.");
160
+ }
161
+
162
+ PathProp *_pathProp;
163
+ NodeProp *_startProp;
164
+ NodeProp *_endProp;
165
+ NodeProp *_fillTypeProp;
166
+ NodeProp *_strokeOptsProp;
167
+
168
+ std::shared_ptr<SkPath> _path;
169
+ };
170
+
171
+ class StrokeOptsProps : public BaseDerivedProp {
172
+ public:
173
+ StrokeOptsProps() : BaseDerivedProp() {
174
+ _strokeProp = addProperty(std::make_shared<NodeProp>(PropNameStroke));
175
+ }
176
+
177
+ private:
178
+ NodeProp *_strokeProp;
179
+ };
180
+
181
+ } // namespace RNSkia
@@ -0,0 +1,32 @@
1
+ #pragma once
2
+
3
+ #include "JsiDomDrawingNode.h"
4
+ #include "PictureProp.h"
5
+
6
+ #include <memory>
7
+
8
+ namespace RNSkia {
9
+
10
+ class JsiPictureNode : public JsiDomDrawingNode,
11
+ public JsiDomNodeCtor<JsiPictureNode> {
12
+ public:
13
+ explicit JsiPictureNode(std::shared_ptr<RNSkPlatformContext> context)
14
+ : JsiDomDrawingNode(context, "skPicture") {}
15
+
16
+ protected:
17
+ void draw(DrawingContext *context) override {
18
+ context->getCanvas()->drawPicture(_pictureProp->getDerivedValue());
19
+ }
20
+
21
+ void defineProperties(NodePropsContainer *container) override {
22
+ JsiDomDrawingNode::defineProperties(container);
23
+ _pictureProp = container->defineProperty(
24
+ std::make_shared<PictureProp>(JsiPropId::get("picture")));
25
+ _pictureProp->require();
26
+ }
27
+
28
+ private:
29
+ PictureProp *_pictureProp;
30
+ };
31
+
32
+ } // namespace RNSkia