@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,222 @@
1
+ #pragma once
2
+
3
+ #include <jsi/jsi.h>
4
+
5
+ #include <memory>
6
+ #include <string>
7
+ #include <unordered_map>
8
+ #include <utility>
9
+ #include <vector>
10
+
11
+ namespace RNJsi {
12
+
13
+ namespace jsi = facebook::jsi;
14
+
15
+ enum struct PropType {
16
+ Undefined = 1,
17
+ Null = 2,
18
+ Bool = 4,
19
+ Number = 8,
20
+ String = 16,
21
+ Object = 32,
22
+ HostObject = 64,
23
+ HostFunction = 128,
24
+ Array = 256
25
+ };
26
+
27
+ using PropId = const char *;
28
+
29
+ class JsiPropId {
30
+ public:
31
+ static const char *get(const std::string &name) { return _get(name); }
32
+
33
+ static const char *get(const std::string &&name) {
34
+ return _get(std::move(name));
35
+ }
36
+
37
+ private:
38
+ static const char *_get(const std::string &name) {
39
+ if (_impls().count(name) == 0) {
40
+ // Alloc string
41
+ char *impl = new char[name.size() + 1];
42
+ strncpy(impl, name.c_str(), name.size() + 1);
43
+ _impls().emplace(name, impl);
44
+ }
45
+ return _impls().at(name);
46
+ }
47
+
48
+ static std::unordered_map<std::string, PropId> &_impls() {
49
+ static std::unordered_map<std::string, PropId> impls;
50
+ return impls;
51
+ }
52
+ };
53
+
54
+ /**
55
+ This is a class that deep copies values from JS to C++.
56
+ */
57
+ class JsiValue {
58
+ public:
59
+ /**
60
+ Default constructor for an empty JsiValue
61
+ */
62
+ JsiValue();
63
+
64
+ /**
65
+ Constructs an instance of the JsiValue object with a current value
66
+ */
67
+ JsiValue(jsi::Runtime &runtime, const jsi::Value &value);
68
+
69
+ /**
70
+ Updates the current value from the Javascript value. This function will
71
+ perform a deep copy of the javascript value.
72
+ */
73
+ void setCurrent(jsi::Runtime &runtime, const jsi::Value &value);
74
+
75
+ /**
76
+ Returns the type of value contained in this JsiValue
77
+ */
78
+ PropType getType() const { return _type; }
79
+
80
+ /**
81
+ Returns true if the value is undefined or null.
82
+ */
83
+ bool isUndefinedOrNull() const { return isUndefined() || isNull(); }
84
+
85
+ /**
86
+ Returns true if the value is undefined.
87
+ */
88
+ bool isUndefined() const { return _type == PropType::Undefined; }
89
+
90
+ /**
91
+ Returns true if the value is null.
92
+ */
93
+ bool isNull() const { return _type == PropType::Null; }
94
+
95
+ /**
96
+ Returns the bool value. Requires that the underlying type is bool
97
+ */
98
+ bool getAsBool() const;
99
+
100
+ /**
101
+ Returns the numeric value. Requires that the underlying type is number
102
+ */
103
+ double getAsNumber() const;
104
+
105
+ /**
106
+ Returns the string value. Requires that the underlying type is string
107
+ */
108
+ const std::string &getAsString() const;
109
+
110
+ /**
111
+ Returns the array value. Requires that the underlying type is array
112
+ */
113
+ const std::vector<JsiValue> &getAsArray() const;
114
+
115
+ /**
116
+ Returns an inner value by name. Requires that the underlying type is Object
117
+ */
118
+ const JsiValue &getValue(PropId name) const;
119
+
120
+ /**
121
+ Returns true if the underlying type is Object and the property name exists.
122
+ */
123
+ bool hasValue(PropId name) const;
124
+
125
+ /**
126
+ Returns the names of the properties stored in this value
127
+ */
128
+ std::vector<PropId> getKeys() const;
129
+
130
+ /**
131
+ Returns the host object value. Requires that the underlying type is Host
132
+ Object
133
+ */
134
+ std::shared_ptr<jsi::HostObject> getAsHostObject() const;
135
+
136
+ /**
137
+ Returns a dynamic cast of the host object value. Requires that the underlying
138
+ type is Host Object
139
+ */
140
+ template <typename T> std::shared_ptr<T> getAs() const {
141
+ if (_type != PropType::HostObject) {
142
+ throw std::runtime_error("Expected type host object, got " +
143
+ getTypeAsString(_type));
144
+ }
145
+ return std::dynamic_pointer_cast<T>(_hostObject);
146
+ }
147
+
148
+ /**
149
+ Returns the host function. Requires that the type is HostFunction
150
+ */
151
+ jsi::HostFunctionType getAsHostFunction() const;
152
+
153
+ /**
154
+ Returns a callable HostFunction representing the undderlying js function.
155
+ Requires that the type is Function
156
+ */
157
+ const jsi::HostFunctionType getAsFunction() const;
158
+
159
+ /**
160
+ Returns a string representation of the value
161
+ */
162
+ std::string asString() const;
163
+
164
+ /**
165
+ Converts the underlying value back to a JS value
166
+ */
167
+ jsi::Value getAsJsiValue(jsi::Runtime &runtime) const;
168
+
169
+ /**
170
+ Returns a string representing the type.
171
+ */
172
+ static std::string getTypeAsString(PropType type);
173
+
174
+ /**
175
+ Implements the equals operator
176
+ */
177
+ bool operator==(const JsiValue &other) const;
178
+
179
+ /**
180
+ Implements the inequals operator
181
+ */
182
+ bool operator!=(const JsiValue &other) const;
183
+
184
+ protected:
185
+ const std::unordered_map<PropId, JsiValue> &getProps() const {
186
+ return _props;
187
+ }
188
+
189
+ bool boolValue() const { return _boolValue; }
190
+ double numberValue() const { return _numberValue; }
191
+ std::string stringValue() const { return _stringValue; }
192
+ std::shared_ptr<jsi::HostObject> hostObject() const { return _hostObject; }
193
+ jsi::HostFunctionType hostFunction() const { return _hostFunction; }
194
+ std::vector<JsiValue> array() const { return _array; }
195
+ std::unordered_map<PropId, JsiValue> props() const { return _props; }
196
+ const std::vector<PropId> &keysCache() const { return _keysCache; }
197
+
198
+ private:
199
+ void setObject(jsi::Runtime &runtime, const jsi::Value &value);
200
+ jsi::Object getObject(jsi::Runtime &runtime) const;
201
+
202
+ void setFunction(jsi::Runtime &runtime, const jsi::Value &value);
203
+ jsi::Object getHostFunction(jsi::Runtime &runtime) const;
204
+
205
+ void setArray(jsi::Runtime &runtime, const jsi::Object &obj);
206
+ jsi::Array getArray(jsi::Runtime &runtime) const;
207
+
208
+ void setHostObject(jsi::Runtime &runtime, const jsi::Object &obj);
209
+ jsi::Object getHostObject(jsi::Runtime &runtime) const;
210
+
211
+ PropType _type = PropType::Undefined;
212
+ bool _boolValue;
213
+ double _numberValue;
214
+ std::string _stringValue = "";
215
+ std::shared_ptr<jsi::HostObject> _hostObject;
216
+ jsi::HostFunctionType _hostFunction;
217
+ std::vector<JsiValue> _array;
218
+ std::unordered_map<PropId, JsiValue> _props;
219
+ std::vector<PropId> _keysCache;
220
+ };
221
+
222
+ } // namespace RNJsi
@@ -29,10 +29,10 @@ enum JsiWrapperValueType {
29
29
  class JsiValueWrapper {
30
30
  public:
31
31
  explicit JsiValueWrapper(jsi::Runtime &runtime)
32
- : _type(JsiWrapperValueType::NonInitialized) {}
32
+ : _type(JsiWrapperValueType::Undefined) {}
33
33
 
34
34
  JsiValueWrapper(jsi::Runtime &runtime, const jsi::Value &value)
35
- : _type(JsiWrapperValueType::NonInitialized) {
35
+ : JsiValueWrapper(runtime) {
36
36
  setCurrent(runtime, value);
37
37
  }
38
38
 
@@ -78,11 +78,19 @@ public:
78
78
  _valueHolder->setProperty(runtime, "current", value);
79
79
  }
80
80
 
81
- bool isUndefinedOrNull() {
82
- return _type == JsiWrapperValueType::Undefined ||
83
- _type == JsiWrapperValueType::Null;
81
+ jsi::Value getCurrent(jsi::Runtime &runtime) {
82
+ if (_valueHolder == nullptr) {
83
+ return jsi::Value::undefined();
84
+ }
85
+ return _valueHolder->getProperty(runtime, "current");
84
86
  }
85
87
 
88
+ bool isUndefinedOrNull() { return isUndefined() || isNull(); }
89
+
90
+ bool isUndefined() { return _type == JsiWrapperValueType::Undefined; }
91
+
92
+ bool isNull() { return _type == JsiWrapperValueType::Null; }
93
+
86
94
  bool getAsBool() {
87
95
  assert(_type == JsiWrapperValueType::Bool);
88
96
  return _boolValue;
@@ -120,6 +128,26 @@ public:
120
128
 
121
129
  JsiWrapperValueType getType() { return _type; }
122
130
 
131
+ bool equals(jsi::Runtime &runtime, const jsi::Value &value) {
132
+ if (value.isNumber() && _type == JsiWrapperValueType::Number) {
133
+ return _numberValue == value.asNumber();
134
+ } else if (value.isBool() && _type == JsiWrapperValueType::Bool) {
135
+ return _boolValue == value.getBool();
136
+ } else if (value.isUndefined()) {
137
+ return _type == JsiWrapperValueType::Undefined;
138
+ } else if (value.isNull()) {
139
+ return _type == JsiWrapperValueType::Null;
140
+ } else if (value.isString()) {
141
+ auto current = getCurrent(runtime);
142
+ if (current.isString()) {
143
+ return jsi::String::strictEquals(runtime, value.asString(runtime),
144
+ current.asString(runtime));
145
+ }
146
+ return false;
147
+ }
148
+ return false;
149
+ }
150
+
123
151
  private:
124
152
  std::shared_ptr<jsi::Object> _valueHolder;
125
153
 
@@ -0,0 +1,220 @@
1
+ #include "RNSkDomView.h"
2
+ #include "DrawingContext.h"
3
+
4
+ #include <chrono>
5
+ #include <utility>
6
+
7
+ #pragma clang diagnostic push
8
+ #pragma clang diagnostic ignored "-Wdocumentation"
9
+
10
+ #include <SkFont.h>
11
+
12
+ #pragma clang diagnostic pop
13
+
14
+ namespace RNSkia {
15
+
16
+ RNSkDomRenderer::RNSkDomRenderer(std::function<void()> requestRedraw,
17
+ std::shared_ptr<RNSkPlatformContext> context)
18
+ : RNSkRenderer(requestRedraw), _platformContext(std::move(context)),
19
+ _renderLock(std::make_shared<std::timed_mutex>()),
20
+ _touchCallbackLock(std::make_shared<std::timed_mutex>()),
21
+ _renderTimingInfo("SKIA/RENDER") {}
22
+
23
+ RNSkDomRenderer::~RNSkDomRenderer() {
24
+ if (_root != nullptr) {
25
+ _root->dispose();
26
+ _root = nullptr;
27
+ }
28
+ }
29
+
30
+ bool RNSkDomRenderer::tryRender(
31
+ std::shared_ptr<RNSkCanvasProvider> canvasProvider) {
32
+ // If we have touches we need to call the touch callback as well
33
+ if (_currentTouches.size() > 0) {
34
+ callOnTouch();
35
+ }
36
+
37
+ // We render on the main thread
38
+ if (_renderLock->try_lock()) {
39
+ // If we have a Dom Node we can render directly on the main thread
40
+ if (_root != nullptr) {
41
+ canvasProvider->renderToCanvas(std::bind(
42
+ &RNSkDomRenderer::renderCanvas, this, std::placeholders::_1,
43
+ canvasProvider->getScaledWidth(), canvasProvider->getScaledHeight()));
44
+ }
45
+
46
+ _renderLock->unlock();
47
+ return true;
48
+ } else {
49
+ return false;
50
+ }
51
+ }
52
+
53
+ void RNSkDomRenderer::renderImmediate(
54
+ std::shared_ptr<RNSkCanvasProvider> canvasProvider) {
55
+ auto prevDebugOverlay = getShowDebugOverlays();
56
+ setShowDebugOverlays(false);
57
+ canvasProvider->renderToCanvas(std::bind(
58
+ &RNSkDomRenderer::renderCanvas, this, std::placeholders::_1,
59
+ canvasProvider->getScaledWidth(), canvasProvider->getScaledHeight()));
60
+ setShowDebugOverlays(prevDebugOverlay);
61
+ }
62
+
63
+ void RNSkDomRenderer::setRoot(std::shared_ptr<JsiDomRenderNode> node) {
64
+ std::lock_guard<std::mutex> lock(_rootLock);
65
+ if (_root != nullptr) {
66
+ _root->dispose();
67
+ _root = nullptr;
68
+ }
69
+ _root = node;
70
+ }
71
+
72
+ void RNSkDomRenderer::setOnTouchCallback(
73
+ std::shared_ptr<jsi::Function> onTouchCallback) {
74
+ _touchCallback = onTouchCallback;
75
+ }
76
+
77
+ void RNSkDomRenderer::renderCanvas(SkCanvas *canvas, float scaledWidth,
78
+ float scaledHeight) {
79
+ _renderTimingInfo.beginTiming();
80
+
81
+ auto pd = _platformContext->getPixelDensity();
82
+
83
+ canvas->save();
84
+ canvas->scale(pd, pd);
85
+
86
+ if (_drawingContext == nullptr) {
87
+ _drawingContext =
88
+ std::make_shared<DrawingContext>(std::make_shared<SkPaint>(), 1.0f);
89
+
90
+ _drawingContext->setRequestRedraw([weakSelf = weak_from_this()]() {
91
+ auto self = weakSelf.lock();
92
+ if (self) {
93
+ self->_requestRedraw();
94
+ }
95
+ });
96
+ }
97
+
98
+ _drawingContext->setScaledWidth(scaledWidth);
99
+ _drawingContext->setScaledHeight(scaledHeight);
100
+
101
+ // Update canvas before drawing
102
+ _drawingContext->setCanvas(canvas);
103
+
104
+ try {
105
+ // Ask the root node to render to the provided canvas
106
+ std::lock_guard<std::mutex> lock(_rootLock);
107
+ if (_root != nullptr) {
108
+ _root->commitPendingChanges();
109
+ _root->render(_drawingContext.get());
110
+ _root->resetPendingChanges();
111
+ }
112
+ } catch (std::runtime_error err) {
113
+ _platformContext->raiseError(err);
114
+ } catch (jsi::JSError err) {
115
+ _platformContext->raiseError(err);
116
+ } catch (...) {
117
+ _platformContext->raiseError(
118
+ std::runtime_error("Error rendering the Skia view."));
119
+ }
120
+
121
+ renderDebugOverlays(canvas);
122
+
123
+ canvas->restore();
124
+
125
+ _renderTimingInfo.stopTiming();
126
+ }
127
+
128
+ void RNSkDomRenderer::updateTouches(std::vector<RNSkTouchInfo> &touches) {
129
+ std::lock_guard<std::mutex> lock(_touchMutex);
130
+ // Add timestamp
131
+ auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
132
+ std::chrono::system_clock::now().time_since_epoch())
133
+ .count();
134
+
135
+ for (size_t i = 0; i < touches.size(); i++) {
136
+ touches.at(i).timestamp = ms;
137
+ }
138
+ _currentTouches.push_back(std::move(touches));
139
+ }
140
+
141
+ void RNSkDomRenderer::callOnTouch() {
142
+
143
+ if (_touchCallback == nullptr) {
144
+ return;
145
+ }
146
+
147
+ if (_touchCallbackLock->try_lock()) {
148
+
149
+ {
150
+ std::lock_guard<std::mutex> lock(_touchMutex);
151
+ _touchesCache.clear();
152
+ _touchesCache.reserve(_currentTouches.size());
153
+ for (size_t i = 0; i < _currentTouches.size(); ++i) {
154
+ _touchesCache.push_back(_currentTouches.at(i));
155
+ }
156
+ _currentTouches.clear();
157
+ }
158
+
159
+ // We have an onDraw method - use it to render since we don't have a
160
+ // DOM-node yet.
161
+ _platformContext->runOnJavascriptThread([weakSelf = weak_from_this()]() {
162
+ auto self = weakSelf.lock();
163
+ if (self) {
164
+ jsi::Runtime &runtime = *self->_platformContext->getJsRuntime();
165
+ // Set up touches
166
+ auto size = self->_touchesCache.size();
167
+ auto ops = jsi::Array(runtime, size);
168
+ for (size_t i = 0; i < size; i++) {
169
+ auto cur = self->_touchesCache.at(i);
170
+ auto curSize = cur.size();
171
+ auto touches = jsi::Array(runtime, curSize);
172
+ for (size_t n = 0; n < curSize; n++) {
173
+ auto touchObj = jsi::Object(runtime);
174
+ auto t = cur.at(n);
175
+ touchObj.setProperty(runtime, "x", t.x);
176
+ touchObj.setProperty(runtime, "y", t.y);
177
+ touchObj.setProperty(runtime, "force", t.force);
178
+ touchObj.setProperty(runtime, "type", static_cast<double>(t.type));
179
+ touchObj.setProperty(runtime, "timestamp",
180
+ static_cast<double>(t.timestamp) / 1000.0);
181
+ touchObj.setProperty(runtime, "id", static_cast<double>(t.id));
182
+ touches.setValueAtIndex(runtime, n, touchObj);
183
+ }
184
+ ops.setValueAtIndex(runtime, i, touches);
185
+ }
186
+ // Call on touch callback
187
+ self->_touchCallback->call(runtime, ops, 1);
188
+ }
189
+ self->_touchCallbackLock->unlock();
190
+ });
191
+ } else {
192
+ // We'll try next time - schedule a new redraw
193
+ _requestRedraw();
194
+ }
195
+ }
196
+
197
+ void RNSkDomRenderer::renderDebugOverlays(SkCanvas *canvas) {
198
+ if (!getShowDebugOverlays()) {
199
+ return;
200
+ }
201
+ auto renderAvg = _renderTimingInfo.getAverage();
202
+ auto fps = _renderTimingInfo.getFps();
203
+
204
+ // Build string
205
+ std::ostringstream stream;
206
+ stream << "render: " << renderAvg << "ms"
207
+ << " fps: " << fps;
208
+
209
+ std::string debugString = stream.str();
210
+
211
+ // Set up debug font/paints
212
+ auto font = SkFont();
213
+ font.setSize(14);
214
+ auto paint = SkPaint();
215
+ paint.setColor(SkColors::kRed);
216
+ canvas->drawSimpleText(debugString.c_str(), debugString.size(),
217
+ SkTextEncoding::kUTF8, 8, 18, font, paint);
218
+ }
219
+
220
+ } // namespace RNSkia
@@ -0,0 +1,140 @@
1
+ #pragma once
2
+
3
+ #include <functional>
4
+ #include <memory>
5
+ #include <mutex>
6
+ #include <string>
7
+ #include <unordered_map>
8
+ #include <vector>
9
+
10
+ #include <jsi/jsi.h>
11
+
12
+ #include <JsiValueWrapper.h>
13
+ #include <RNSkView.h>
14
+
15
+ #include "JsiDomRenderNode.h"
16
+ #include <RNSkInfoParameter.h>
17
+ #include <RNSkLog.h>
18
+ #include <RNSkPlatformContext.h>
19
+ #include <RNSkTimingInfo.h>
20
+
21
+ #pragma clang diagnostic push
22
+ #pragma clang diagnostic ignored "-Wdocumentation"
23
+
24
+ #include <SkBBHFactory.h>
25
+ #include <SkCanvas.h>
26
+ #include <SkPictureRecorder.h>
27
+
28
+ #pragma clang diagnostic pop
29
+
30
+ class SkPicture;
31
+ class SkRect;
32
+ class SkImage;
33
+
34
+ namespace RNSkia {
35
+ class JsiSkCanvas;
36
+ namespace jsi = facebook::jsi;
37
+
38
+ class RNSkDomRenderer : public RNSkRenderer,
39
+ public std::enable_shared_from_this<RNSkDomRenderer> {
40
+ public:
41
+ RNSkDomRenderer(std::function<void()> requestRedraw,
42
+ std::shared_ptr<RNSkPlatformContext> context);
43
+
44
+ ~RNSkDomRenderer();
45
+
46
+ bool tryRender(std::shared_ptr<RNSkCanvasProvider> canvasProvider) override;
47
+
48
+ void
49
+ renderImmediate(std::shared_ptr<RNSkCanvasProvider> canvasProvider) override;
50
+
51
+ void setRoot(std::shared_ptr<JsiDomRenderNode> node);
52
+
53
+ void setOnTouchCallback(std::shared_ptr<jsi::Function> onTouchCallback);
54
+
55
+ void updateTouches(std::vector<RNSkTouchInfo> &touches);
56
+
57
+ private:
58
+ void callOnTouch();
59
+ void renderCanvas(SkCanvas *canvas, float scaledWidth, float scaledHeight);
60
+ void renderDebugOverlays(SkCanvas *canvas);
61
+
62
+ std::shared_ptr<RNSkPlatformContext> _platformContext;
63
+ std::shared_ptr<jsi::Function> _touchCallback;
64
+
65
+ std::shared_ptr<std::timed_mutex> _renderLock;
66
+ std::shared_ptr<std::timed_mutex> _touchCallbackLock;
67
+
68
+ std::shared_ptr<JsiDomRenderNode> _root;
69
+ std::shared_ptr<DrawingContext> _drawingContext;
70
+
71
+ RNSkTimingInfo _renderTimingInfo;
72
+
73
+ std::mutex _touchMutex;
74
+ std::vector<std::vector<RNSkTouchInfo>> _currentTouches;
75
+ std::vector<std::vector<RNSkTouchInfo>> _touchesCache;
76
+ std::mutex _rootLock;
77
+ };
78
+
79
+ class RNSkDomView : public RNSkView {
80
+ public:
81
+ /**
82
+ * Constructor
83
+ */
84
+ RNSkDomView(std::shared_ptr<RNSkPlatformContext> context,
85
+ std::shared_ptr<RNSkCanvasProvider> canvasProvider)
86
+ : RNSkView(context, canvasProvider,
87
+ std::make_shared<RNSkDomRenderer>(
88
+ std::bind(&RNSkView::requestRedraw, this), context)) {}
89
+
90
+ void updateTouchState(std::vector<RNSkTouchInfo> &touches) override {
91
+ std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
92
+ ->updateTouches(touches);
93
+ RNSkView::updateTouchState(touches);
94
+ }
95
+
96
+ void setJsiProperties(
97
+ std::unordered_map<std::string, JsiValueWrapper> &props) override {
98
+
99
+ RNSkView::setJsiProperties(props);
100
+
101
+ for (auto &prop : props) {
102
+ if (prop.first == "onTouch") {
103
+ if (prop.second.isUndefinedOrNull()) {
104
+ // Clear touchCallback
105
+ std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
106
+ ->setOnTouchCallback(nullptr);
107
+ requestRedraw();
108
+ continue;
109
+
110
+ } else if (prop.second.getType() != JsiWrapperValueType::Function) {
111
+ // We expect a function for the draw callback custom property
112
+ throw std::runtime_error(
113
+ "Expected a function for the onTouch property.");
114
+ }
115
+
116
+ // Save callback
117
+ std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
118
+ ->setOnTouchCallback(prop.second.getAsFunction());
119
+
120
+ // Request redraw
121
+ requestRedraw();
122
+
123
+ } else if (prop.first == "root") {
124
+ // Save root
125
+ if (prop.second.isUndefined() || prop.second.isNull()) {
126
+ std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
127
+ ->setRoot(nullptr);
128
+ } else {
129
+ std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
130
+ ->setRoot(std::dynamic_pointer_cast<JsiDomRenderNode>(
131
+ prop.second.getAsHostObject()));
132
+ }
133
+
134
+ // Request redraw
135
+ requestRedraw();
136
+ }
137
+ }
138
+ }
139
+ };
140
+ } // namespace RNSkia
@@ -202,10 +202,6 @@ void RNSkJsRenderer::drawInJsiCanvas(std::shared_ptr<JsiSkCanvas> jsiCanvas,
202
202
 
203
203
  // Call draw function.
204
204
  callJsDrawCallback(jsiCanvas, width / pd, height / pd, time);
205
-
206
- // Restore and flush canvas
207
- skCanvas->restore();
208
- skCanvas->flush();
209
205
  }
210
206
  }
211
207
 
@@ -89,13 +89,18 @@ public:
89
89
 
90
90
  void setJsiProperties(
91
91
  std::unordered_map<std::string, RNJsi::JsiValueWrapper> &props) override {
92
+
93
+ RNSkView::setJsiProperties(props);
94
+
92
95
  for (auto &prop : props) {
93
96
  if (prop.first == "drawCallback") {
94
97
  if (prop.second.isUndefinedOrNull()) {
95
98
  // Clear drawcallback
96
99
  std::static_pointer_cast<RNSkJsRenderer>(getRenderer())
97
100
  ->setDrawCallback(nullptr);
98
- return;
101
+ requestRedraw();
102
+ continue;
103
+
99
104
  } else if (prop.second.getType() !=
100
105
  RNJsi::JsiWrapperValueType::Function) {
101
106
  // We expect a function for the draw callback custom property
@@ -109,9 +114,6 @@ public:
109
114
 
110
115
  // Request redraw
111
116
  requestRedraw();
112
-
113
- } else {
114
- RNSkView::setJsiProperties(props);
115
117
  }
116
118
  }
117
119
  }
@@ -10,6 +10,8 @@
10
10
  #include <RNSkValueApi.h>
11
11
  #include <RNSkView.h>
12
12
 
13
+ #include <JsiDomApi.h>
14
+
13
15
  namespace RNSkia {
14
16
  namespace jsi = facebook::jsi;
15
17
 
@@ -78,5 +80,10 @@ void RNSkManager::installBindings() {
78
80
  _jsRuntime->global().setProperty(
79
81
  *_jsRuntime, "SkiaValueApi",
80
82
  jsi::Object::createFromHostObject(*_jsRuntime, std::move(skiaValueApi)));
83
+
84
+ auto skiaDomApi = std::make_shared<JsiDomApi>(_platformContext);
85
+ _jsRuntime->global().setProperty(
86
+ *_jsRuntime, "SkiaDomApi",
87
+ jsi::Object::createFromHostObject(*_jsRuntime, std::move(skiaDomApi)));
81
88
  }
82
89
  } // namespace RNSkia