@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,126 @@
1
+ /*
2
+ * Copyright 2016 Google Inc.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkLRUCache_DEFINED
9
+ #define SkLRUCache_DEFINED
10
+
11
+ #include "include/private/SkChecksum.h"
12
+ #include "include/private/SkTHash.h"
13
+ #include "src/core/SkTInternalLList.h"
14
+
15
+ /**
16
+ * A generic LRU cache.
17
+ */
18
+ template <typename K, typename V, typename HashK = SkGoodHash>
19
+ class SkLRUCache : public SkNoncopyable {
20
+ private:
21
+ struct Entry {
22
+ Entry(const K& key, V&& value)
23
+ : fKey(key)
24
+ , fValue(std::move(value)) {}
25
+
26
+ K fKey;
27
+ V fValue;
28
+
29
+ SK_DECLARE_INTERNAL_LLIST_INTERFACE(Entry);
30
+ };
31
+
32
+ public:
33
+ explicit SkLRUCache(int maxCount)
34
+ : fMaxCount(maxCount) {}
35
+
36
+ ~SkLRUCache() {
37
+ Entry* node = fLRU.head();
38
+ while (node) {
39
+ fLRU.remove(node);
40
+ delete node;
41
+ node = fLRU.head();
42
+ }
43
+ }
44
+
45
+ V* find(const K& key) {
46
+ Entry** value = fMap.find(key);
47
+ if (!value) {
48
+ return nullptr;
49
+ }
50
+ Entry* entry = *value;
51
+ if (entry != fLRU.head()) {
52
+ fLRU.remove(entry);
53
+ fLRU.addToHead(entry);
54
+ } // else it's already at head position, don't need to do anything
55
+ return &entry->fValue;
56
+ }
57
+
58
+ V* insert(const K& key, V value) {
59
+ SkASSERT(!this->find(key));
60
+
61
+ Entry* entry = new Entry(key, std::move(value));
62
+ fMap.set(entry);
63
+ fLRU.addToHead(entry);
64
+ while (fMap.count() > fMaxCount) {
65
+ this->remove(fLRU.tail()->fKey);
66
+ }
67
+ return &entry->fValue;
68
+ }
69
+
70
+ V* insert_or_update(const K& key, V value) {
71
+ if (V* found = this->find(key)) {
72
+ *found = std::move(value);
73
+ return found;
74
+ } else {
75
+ return this->insert(key, std::move(value));
76
+ }
77
+ }
78
+
79
+ int count() {
80
+ return fMap.count();
81
+ }
82
+
83
+ template <typename Fn> // f(K*, V*)
84
+ void foreach(Fn&& fn) {
85
+ typename SkTInternalLList<Entry>::Iter iter;
86
+ for (Entry* e = iter.init(fLRU, SkTInternalLList<Entry>::Iter::kHead_IterStart); e;
87
+ e = iter.next()) {
88
+ fn(&e->fKey, &e->fValue);
89
+ }
90
+ }
91
+
92
+ void reset() {
93
+ fMap.reset();
94
+ for (Entry* e = fLRU.head(); e; e = fLRU.head()) {
95
+ fLRU.remove(e);
96
+ delete e;
97
+ }
98
+ }
99
+
100
+ private:
101
+ struct Traits {
102
+ static const K& GetKey(Entry* e) {
103
+ return e->fKey;
104
+ }
105
+
106
+ static uint32_t Hash(const K& k) {
107
+ return HashK()(k);
108
+ }
109
+ };
110
+
111
+ void remove(const K& key) {
112
+ Entry** value = fMap.find(key);
113
+ SkASSERT(value);
114
+ Entry* entry = *value;
115
+ SkASSERT(key == entry->fKey);
116
+ fMap.remove(key);
117
+ fLRU.remove(entry);
118
+ delete entry;
119
+ }
120
+
121
+ int fMaxCount;
122
+ SkTHashTable<Entry*, K, Traits> fMap;
123
+ SkTInternalLList<Entry> fLRU;
124
+ };
125
+
126
+ #endif
@@ -0,0 +1,302 @@
1
+ /*
2
+ * Copyright 2012 Google Inc.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkTInternalLList_DEFINED
9
+ #define SkTInternalLList_DEFINED
10
+
11
+ #include "include/core/SkTypes.h"
12
+
13
+ /**
14
+ * This macro creates the member variables required by the SkTInternalLList class. It should be
15
+ * placed in the private section of any class that will be stored in a double linked list.
16
+ */
17
+ #define SK_DECLARE_INTERNAL_LLIST_INTERFACE(ClassName) \
18
+ friend class SkTInternalLList<ClassName>; \
19
+ /* back pointer to the owning list - for debugging */ \
20
+ SkDEBUGCODE(SkTInternalLList<ClassName>* fList = nullptr;) \
21
+ ClassName* fPrev = nullptr; \
22
+ ClassName* fNext = nullptr
23
+
24
+ /**
25
+ * This class implements a templated internal doubly linked list data structure.
26
+ */
27
+ template <class T> class SkTInternalLList {
28
+ public:
29
+ SkTInternalLList() {}
30
+
31
+ void reset() {
32
+ fHead = nullptr;
33
+ fTail = nullptr;
34
+ }
35
+
36
+ void remove(T* entry) {
37
+ SkASSERT(fHead && fTail);
38
+ SkASSERT(this->isInList(entry));
39
+
40
+ T* prev = entry->fPrev;
41
+ T* next = entry->fNext;
42
+
43
+ if (prev) {
44
+ prev->fNext = next;
45
+ } else {
46
+ fHead = next;
47
+ }
48
+ if (next) {
49
+ next->fPrev = prev;
50
+ } else {
51
+ fTail = prev;
52
+ }
53
+
54
+ entry->fPrev = nullptr;
55
+ entry->fNext = nullptr;
56
+
57
+ #ifdef SK_DEBUG
58
+ entry->fList = nullptr;
59
+ #endif
60
+ }
61
+
62
+ void addToHead(T* entry) {
63
+ SkASSERT(nullptr == entry->fPrev && nullptr == entry->fNext);
64
+ SkASSERT(nullptr == entry->fList);
65
+
66
+ entry->fPrev = nullptr;
67
+ entry->fNext = fHead;
68
+ if (fHead) {
69
+ fHead->fPrev = entry;
70
+ }
71
+ fHead = entry;
72
+ if (nullptr == fTail) {
73
+ fTail = entry;
74
+ }
75
+
76
+ #ifdef SK_DEBUG
77
+ entry->fList = this;
78
+ #endif
79
+ }
80
+
81
+ void addToTail(T* entry) {
82
+ SkASSERT(nullptr == entry->fPrev && nullptr == entry->fNext);
83
+ SkASSERT(nullptr == entry->fList);
84
+
85
+ entry->fPrev = fTail;
86
+ entry->fNext = nullptr;
87
+ if (fTail) {
88
+ fTail->fNext = entry;
89
+ }
90
+ fTail = entry;
91
+ if (nullptr == fHead) {
92
+ fHead = entry;
93
+ }
94
+
95
+ #ifdef SK_DEBUG
96
+ entry->fList = this;
97
+ #endif
98
+ }
99
+
100
+ /**
101
+ * Inserts a new list entry before an existing list entry. The new entry must not already be
102
+ * a member of this or any other list. If existingEntry is NULL then the new entry is added
103
+ * at the tail.
104
+ */
105
+ void addBefore(T* newEntry, T* existingEntry) {
106
+ SkASSERT(newEntry);
107
+
108
+ if (nullptr == existingEntry) {
109
+ this->addToTail(newEntry);
110
+ return;
111
+ }
112
+
113
+ SkASSERT(this->isInList(existingEntry));
114
+ newEntry->fNext = existingEntry;
115
+ T* prev = existingEntry->fPrev;
116
+ existingEntry->fPrev = newEntry;
117
+ newEntry->fPrev = prev;
118
+ if (nullptr == prev) {
119
+ SkASSERT(fHead == existingEntry);
120
+ fHead = newEntry;
121
+ } else {
122
+ prev->fNext = newEntry;
123
+ }
124
+ #ifdef SK_DEBUG
125
+ newEntry->fList = this;
126
+ #endif
127
+ }
128
+
129
+ /**
130
+ * Inserts a new list entry after an existing list entry. The new entry must not already be
131
+ * a member of this or any other list. If existingEntry is NULL then the new entry is added
132
+ * at the head.
133
+ */
134
+ void addAfter(T* newEntry, T* existingEntry) {
135
+ SkASSERT(newEntry);
136
+
137
+ if (nullptr == existingEntry) {
138
+ this->addToHead(newEntry);
139
+ return;
140
+ }
141
+
142
+ SkASSERT(this->isInList(existingEntry));
143
+ newEntry->fPrev = existingEntry;
144
+ T* next = existingEntry->fNext;
145
+ existingEntry->fNext = newEntry;
146
+ newEntry->fNext = next;
147
+ if (nullptr == next) {
148
+ SkASSERT(fTail == existingEntry);
149
+ fTail = newEntry;
150
+ } else {
151
+ next->fPrev = newEntry;
152
+ }
153
+ #ifdef SK_DEBUG
154
+ newEntry->fList = this;
155
+ #endif
156
+ }
157
+
158
+ void concat(SkTInternalLList&& list) {
159
+ if (list.isEmpty()) {
160
+ return;
161
+ }
162
+
163
+ list.fHead->fPrev = fTail;
164
+ if (!fHead) {
165
+ SkASSERT(!list.fHead->fPrev);
166
+ fHead = list.fHead;
167
+ } else {
168
+ SkASSERT(fTail);
169
+ fTail->fNext = list.fHead;
170
+ }
171
+ fTail = list.fTail;
172
+
173
+ #ifdef SK_DEBUG
174
+ for (T* node = list.fHead; node; node = node->fNext) {
175
+ SkASSERT(node->fList == &list);
176
+ node->fList = this;
177
+ }
178
+ #endif
179
+
180
+ list.fHead = list.fTail = nullptr;
181
+ }
182
+
183
+ bool isEmpty() const {
184
+ SkASSERT(SkToBool(fHead) == SkToBool(fTail));
185
+ return !fHead;
186
+ }
187
+
188
+ T* head() const { return fHead; }
189
+ T* tail() const { return fTail; }
190
+
191
+ class Iter {
192
+ public:
193
+ enum IterStart {
194
+ kHead_IterStart,
195
+ kTail_IterStart
196
+ };
197
+
198
+ Iter() : fCurr(nullptr) {}
199
+ Iter(const Iter& iter) : fCurr(iter.fCurr) {}
200
+ Iter& operator= (const Iter& iter) { fCurr = iter.fCurr; return *this; }
201
+
202
+ T* init(const SkTInternalLList& list, IterStart startLoc) {
203
+ if (kHead_IterStart == startLoc) {
204
+ fCurr = list.fHead;
205
+ } else {
206
+ SkASSERT(kTail_IterStart == startLoc);
207
+ fCurr = list.fTail;
208
+ }
209
+
210
+ return fCurr;
211
+ }
212
+
213
+ T* get() { return fCurr; }
214
+
215
+ /**
216
+ * Return the next/previous element in the list or NULL if at the end.
217
+ */
218
+ T* next() {
219
+ if (nullptr == fCurr) {
220
+ return nullptr;
221
+ }
222
+
223
+ fCurr = fCurr->fNext;
224
+ return fCurr;
225
+ }
226
+
227
+ T* prev() {
228
+ if (nullptr == fCurr) {
229
+ return nullptr;
230
+ }
231
+
232
+ fCurr = fCurr->fPrev;
233
+ return fCurr;
234
+ }
235
+
236
+ /**
237
+ * C++11 range-for interface.
238
+ */
239
+ bool operator!=(const Iter& that) { return fCurr != that.fCurr; }
240
+ T* operator*() { return this->get(); }
241
+ void operator++() { this->next(); }
242
+
243
+ private:
244
+ T* fCurr;
245
+ };
246
+
247
+ Iter begin() const {
248
+ Iter iter;
249
+ iter.init(*this, Iter::kHead_IterStart);
250
+ return iter;
251
+ }
252
+
253
+ Iter end() const { return Iter(); }
254
+
255
+ #ifdef SK_DEBUG
256
+ void validate() const {
257
+ SkASSERT(!fHead == !fTail);
258
+ Iter iter;
259
+ for (T* item = iter.init(*this, Iter::kHead_IterStart); item; item = iter.next()) {
260
+ SkASSERT(this->isInList(item));
261
+ if (nullptr == item->fPrev) {
262
+ SkASSERT(fHead == item);
263
+ } else {
264
+ SkASSERT(item->fPrev->fNext == item);
265
+ }
266
+ if (nullptr == item->fNext) {
267
+ SkASSERT(fTail == item);
268
+ } else {
269
+ SkASSERT(item->fNext->fPrev == item);
270
+ }
271
+ }
272
+ }
273
+
274
+ /**
275
+ * Debugging-only method that uses the list back pointer to check if 'entry' is indeed in 'this'
276
+ * list.
277
+ */
278
+ bool isInList(const T* entry) const {
279
+ return entry->fList == this;
280
+ }
281
+
282
+ /**
283
+ * Debugging-only method that laboriously counts the list entries.
284
+ */
285
+ int countEntries() const {
286
+ int count = 0;
287
+ for (T* entry = fHead; entry; entry = entry->fNext) {
288
+ ++count;
289
+ }
290
+ return count;
291
+ }
292
+ #endif // SK_DEBUG
293
+
294
+ private:
295
+ T* fHead = nullptr;
296
+ T* fTail = nullptr;
297
+
298
+ SkTInternalLList(const SkTInternalLList&) = delete;
299
+ SkTInternalLList& operator=(const SkTInternalLList&) = delete;
300
+ };
301
+
302
+ #endif
@@ -29,6 +29,7 @@ public:
29
29
  _frameCount = 0;
30
30
  _lastFrameCount = -1;
31
31
  _didSkip = false;
32
+ _average = 0;
32
33
  }
33
34
 
34
35
  void beginTiming() { _start = high_resolution_clock::now(); }
@@ -6,6 +6,14 @@
6
6
  #import <MetalKit/MetalKit.h>
7
7
  #import <QuartzCore/CAMetalLayer.h>
8
8
 
9
+ using MetalRenderContext = struct {
10
+ id<MTLCommandQueue> commandQueue;
11
+ sk_sp<GrDirectContext> skContext;
12
+ };
13
+
14
+ static std::unordered_map<std::thread::id, std::shared_ptr<MetalRenderContext>>
15
+ renderContexts;
16
+
9
17
  class RNSkMetalCanvasProvider : public RNSkia::RNSkCanvasProvider {
10
18
  public:
11
19
  RNSkMetalCanvasProvider(std::function<void()> requestRedraw,
@@ -23,6 +31,13 @@ public:
23
31
  CALayer *getLayer();
24
32
 
25
33
  private:
34
+ /**
35
+ * To be able to use static contexts (and avoid reloading the skia context for
36
+ * each new view, we track the Skia drawing context per thread.
37
+ * @return The drawing context for the current thread
38
+ */
39
+ static std::shared_ptr<MetalRenderContext> getMetalRenderContext();
40
+
26
41
  std::shared_ptr<RNSkia::RNSkPlatformContext> _context;
27
42
  float _width = -1;
28
43
  float _height = -1;
@@ -30,8 +45,4 @@ private:
30
45
  #pragma clang diagnostic ignored "-Wunguarded-availability-new"
31
46
  CAMetalLayer *_layer;
32
47
  #pragma clang diagnostic pop
33
-
34
- static id<MTLCommandQueue> _commandQueue;
35
- static id<MTLDevice> _device;
36
- static sk_sp<GrDirectContext> _skContext;
37
48
  };
@@ -12,50 +12,40 @@
12
12
 
13
13
  #pragma clang diagnostic pop
14
14
 
15
- // These static class members are used by all Skia Views
16
- id<MTLDevice> RNSkMetalCanvasProvider::_device = nullptr;
17
- id<MTLCommandQueue> RNSkMetalCanvasProvider::_commandQueue = nullptr;
18
- sk_sp<GrDirectContext> RNSkMetalCanvasProvider::_skContext = nullptr;
15
+ /** Static members */
16
+ std::shared_ptr<MetalRenderContext>
17
+ RNSkMetalCanvasProvider::getMetalRenderContext() {
18
+ auto threadId = std::this_thread::get_id();
19
+ if (renderContexts.count(threadId) == 0) {
20
+ auto drawingContext = std::make_shared<MetalRenderContext>();
21
+ drawingContext->commandQueue = nullptr;
22
+ drawingContext->skContext = nullptr;
23
+ renderContexts.emplace(threadId, drawingContext);
24
+ }
25
+ return renderContexts.at(threadId);
26
+ }
19
27
 
20
28
  RNSkMetalCanvasProvider::RNSkMetalCanvasProvider(std::function<void()> requestRedraw,
21
29
  std::shared_ptr<RNSkia::RNSkPlatformContext> context):
22
30
  RNSkCanvasProvider(requestRedraw),
23
31
  _context(context) {
24
- if (!_device) {
25
- _device = MTLCreateSystemDefaultDevice();
26
- }
27
- if (!_commandQueue) {
28
- _commandQueue = id<MTLCommandQueue>(CFRetain((GrMTLHandle)[_device newCommandQueue]));
29
- }
30
-
31
32
  #pragma clang diagnostic push
32
33
  #pragma clang diagnostic ignored "-Wunguarded-availability-new"
33
34
  _layer = [CAMetalLayer layer];
34
35
  #pragma clang diagnostic pop
35
36
 
37
+ auto device = MTLCreateSystemDefaultDevice();
38
+
36
39
  _layer.framebufferOnly = NO;
37
- _layer.device = _device;
40
+ _layer.device = device;
38
41
  _layer.opaque = false;
39
42
  _layer.contentsScale = _context->getPixelDensity();
40
43
  _layer.pixelFormat = MTLPixelFormatBGRA8Unorm;
44
+ _layer.contentsGravity = kCAGravityBottomRight;
41
45
  }
42
46
 
43
47
  RNSkMetalCanvasProvider::~RNSkMetalCanvasProvider() {
44
- if([[NSThread currentThread] isMainThread]) {
45
- _layer = NULL;
46
- } else {
47
- __block auto tempLayer = _layer;
48
- dispatch_async(dispatch_get_main_queue(), ^{
49
- // By using the tempLayer variable in the block we capture it and it will be
50
- // released after the block has finished. This way the CAMetalLayer dealloc will
51
- // only be called on the main thread. Problem: this destructor might be called from
52
- // releasing the RNSkDrawViewImpl from a thread capture (after dtor has started),
53
- // which would cause the CAMetalLayer dealloc to be called on another thread which
54
- // causes a crash.
55
- // https://github.com/Shopify/react-native-skia/issues/398
56
- tempLayer = tempLayer;
57
- });
58
- }
48
+
59
49
  }
60
50
 
61
51
  /**
@@ -76,11 +66,13 @@ void RNSkMetalCanvasProvider::renderToCanvas(const std::function<void(SkCanvas*)
76
66
  return;
77
67
  }
78
68
 
79
- if(_skContext == nullptr) {
80
- GrContextOptions grContextOptions;
81
- _skContext = GrDirectContext::MakeMetal((__bridge void*)_device,
82
- (__bridge void*)_commandQueue,
83
- grContextOptions);
69
+ // Get render context for current thread
70
+ auto renderContext = getMetalRenderContext();
71
+
72
+ if (renderContext->skContext == nullptr) {
73
+ auto device = MTLCreateSystemDefaultDevice();
74
+ renderContext->commandQueue = id<MTLCommandQueue>(CFRetain((GrMTLHandle)[device newCommandQueue]));
75
+ renderContext->skContext = GrDirectContext::MakeMetal((__bridge void*)device, (__bridge void*)renderContext->commandQueue);
84
76
  }
85
77
 
86
78
  // Wrap in auto release pool since we want the system to clean up after rendering
@@ -88,35 +80,29 @@ void RNSkMetalCanvasProvider::renderToCanvas(const std::function<void(SkCanvas*)
88
80
  // fast in the simulator without this.
89
81
  @autoreleasepool
90
82
  {
91
- id<CAMetalDrawable> currentDrawable = [_layer nextDrawable];
92
- if(currentDrawable == nullptr) {
93
- return;
94
- }
95
-
96
- GrMtlTextureInfo fbInfo;
97
- fbInfo.fTexture.retain((__bridge void*)currentDrawable.texture);
98
-
99
- GrBackendRenderTarget backendRT(_layer.drawableSize.width,
100
- _layer.drawableSize.height,
101
- 1,
102
- fbInfo);
103
-
104
- auto skSurface = SkSurface::MakeFromBackendRenderTarget(_skContext.get(),
105
- backendRT,
106
- kTopLeft_GrSurfaceOrigin,
107
- kBGRA_8888_SkColorType,
108
- nullptr,
109
- nullptr);
83
+ GrMTLHandle drawableHandle;
84
+ auto skSurface = SkSurface::MakeFromCAMetalLayer(renderContext->skContext.get(),
85
+ (__bridge GrMTLHandle)_layer,
86
+ kTopLeft_GrSurfaceOrigin,
87
+ 1,
88
+ kBGRA_8888_SkColorType,
89
+ nullptr,
90
+ nullptr,
91
+ &drawableHandle);
110
92
 
111
93
  if(skSurface == nullptr || skSurface->getCanvas() == nullptr) {
112
94
  RNSkia::RNSkLogger::logToConsole("Skia surface could not be created from parameters.");
113
95
  return;
114
96
  }
115
97
 
116
- skSurface->getCanvas()->clear(SK_AlphaTRANSPARENT);
117
- cb(skSurface->getCanvas());
98
+ SkCanvas *canvas = skSurface->getCanvas();
99
+ canvas->clear(SK_AlphaTRANSPARENT);
100
+ cb(canvas);
101
+ skSurface->flushAndSubmit();
118
102
 
119
- id<MTLCommandBuffer> commandBuffer([_commandQueue commandBuffer]);
103
+ id<CAMetalDrawable> currentDrawable = (__bridge id<CAMetalDrawable>)drawableHandle;
104
+ id<MTLCommandBuffer> commandBuffer([renderContext->commandQueue commandBuffer]);
105
+ commandBuffer.label = @"PresentSkia";
120
106
  [commandBuffer presentDrawable:currentDrawable];
121
107
  [commandBuffer commit];
122
108
  }
@@ -0,0 +1,8 @@
1
+
2
+ #pragma once
3
+
4
+ #import <React/RCTViewManager.h>
5
+
6
+ @interface SkiaDomViewManager : RCTViewManager
7
+
8
+ @end
@@ -0,0 +1,51 @@
1
+
2
+ #include <SkiaDomViewManager.h>
3
+ #include <React/RCTBridge+Private.h>
4
+
5
+ #include <RNSkPlatformContext.h>
6
+ #include <RNSkDomView.h>
7
+ #include <RNSkIOSView.h>
8
+
9
+ #include <SkiaManager.h>
10
+ #include <RNSkiaModule.h>
11
+ #include <SkiaUIView.h>
12
+
13
+
14
+
15
+ @implementation SkiaDomViewManager
16
+
17
+ RCT_EXPORT_MODULE(SkiaDomView)
18
+
19
+ - (SkiaManager*) skiaManager {
20
+ auto bridge = [RCTBridge currentBridge];
21
+ auto skiaModule = (RNSkiaModule*)[bridge moduleForName:@"RNSkia"];
22
+ return [skiaModule manager];
23
+ }
24
+
25
+ RCT_CUSTOM_VIEW_PROPERTY(nativeID, NSNumber, SkiaUIView) {
26
+ // Get parameter
27
+ int nativeId = [[RCTConvert NSString:json] intValue];
28
+ [(SkiaUIView*)view setNativeId:nativeId];
29
+ }
30
+
31
+ RCT_CUSTOM_VIEW_PROPERTY(mode, NSString, SkiaUIView) {
32
+ std::string mode = json != NULL ? [[RCTConvert NSString:json] UTF8String] : "default";
33
+ [(SkiaUIView*)view setDrawingMode: mode];
34
+ }
35
+
36
+ RCT_CUSTOM_VIEW_PROPERTY(debug, BOOL, SkiaUIView) {
37
+ bool debug = json != NULL ? [RCTConvert BOOL:json] : false;
38
+ [(SkiaUIView*)view setDebugMode: debug];
39
+ }
40
+
41
+ - (UIView *)view
42
+ {
43
+ auto skManager = [[self skiaManager] skManager];
44
+ // Pass SkManager as a raw pointer to avoid circular dependenciesr
45
+ return [[SkiaUIView alloc] initWithManager: skManager.get()
46
+ factory: [](std::shared_ptr<RNSkia::RNSkPlatformContext> context) {
47
+ return std::make_shared<RNSkiOSView<RNSkia::RNSkDomView>>(context);
48
+ }];
49
+ }
50
+
51
+ @end