@shopify/react-native-skia 0.1.157 → 0.1.159

Sign up to get free protection for your applications and to get access to all the features.
Files changed (482) hide show
  1. package/android/CMakeLists.txt +35 -11
  2. package/android/build.gradle +31 -30
  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/JsiSkContourMeasure.h +7 -5
  11. package/cpp/api/JsiSkHostObjects.h +6 -0
  12. package/cpp/api/JsiSkImageFilterFactory.h +1 -1
  13. package/cpp/api/JsiSkPaint.h +9 -2
  14. package/cpp/api/JsiSkPath.h +1 -0
  15. package/cpp/api/JsiSkRuntimeEffect.h +36 -36
  16. package/cpp/jsi/JsiHostObject.cpp +16 -28
  17. package/cpp/jsi/JsiHostObject.h +127 -7
  18. package/cpp/jsi/JsiValue.cpp +346 -0
  19. package/cpp/jsi/JsiValue.h +222 -0
  20. package/cpp/jsi/JsiValueWrapper.h +33 -5
  21. package/cpp/rnskia/RNSkDomView.cpp +220 -0
  22. package/cpp/rnskia/RNSkDomView.h +140 -0
  23. package/cpp/rnskia/RNSkJsView.cpp +0 -4
  24. package/cpp/rnskia/RNSkJsView.h +6 -4
  25. package/cpp/rnskia/RNSkManager.cpp +7 -0
  26. package/cpp/rnskia/RNSkPictureView.h +5 -8
  27. package/cpp/rnskia/RNSkView.h +113 -5
  28. package/cpp/rnskia/dom/JsiDomApi.h +167 -0
  29. package/cpp/rnskia/dom/base/BaseNodeProp.h +72 -0
  30. package/cpp/rnskia/dom/base/DerivedNodeProp.h +187 -0
  31. package/cpp/rnskia/dom/base/DrawingContext.cpp +227 -0
  32. package/cpp/rnskia/dom/base/DrawingContext.h +136 -0
  33. package/cpp/rnskia/dom/base/JsiDependencyManager.h +294 -0
  34. package/cpp/rnskia/dom/base/JsiDomDeclarationNode.h +176 -0
  35. package/cpp/rnskia/dom/base/JsiDomDrawingNode.h +50 -0
  36. package/cpp/rnskia/dom/base/JsiDomNode.h +361 -0
  37. package/cpp/rnskia/dom/base/JsiDomRenderNode.h +267 -0
  38. package/cpp/rnskia/dom/base/NodeProp.h +130 -0
  39. package/cpp/rnskia/dom/base/NodePropsContainer.h +119 -0
  40. package/cpp/rnskia/dom/nodes/JsiBackdropFilterNode.h +38 -0
  41. package/cpp/rnskia/dom/nodes/JsiBlendNode.h +112 -0
  42. package/cpp/rnskia/dom/nodes/JsiBlurMaskNode.h +78 -0
  43. package/cpp/rnskia/dom/nodes/JsiBoxNode.h +104 -0
  44. package/cpp/rnskia/dom/nodes/JsiBoxShadowNode.h +33 -0
  45. package/cpp/rnskia/dom/nodes/JsiCircleNode.h +38 -0
  46. package/cpp/rnskia/dom/nodes/JsiColorFilterNodes.h +192 -0
  47. package/cpp/rnskia/dom/nodes/JsiCustomDrawingNode.h +123 -0
  48. package/cpp/rnskia/dom/nodes/JsiDiffRectNode.h +42 -0
  49. package/cpp/rnskia/dom/nodes/JsiFillNode.h +22 -0
  50. package/cpp/rnskia/dom/nodes/JsiGlyphsNode.h +56 -0
  51. package/cpp/rnskia/dom/nodes/JsiGroupNode.h +26 -0
  52. package/cpp/rnskia/dom/nodes/JsiImageFilterNodes.h +415 -0
  53. package/cpp/rnskia/dom/nodes/JsiImageNode.h +34 -0
  54. package/cpp/rnskia/dom/nodes/JsiImageSvgNode.h +44 -0
  55. package/cpp/rnskia/dom/nodes/JsiLayerNode.h +64 -0
  56. package/cpp/rnskia/dom/nodes/JsiLineNode.h +43 -0
  57. package/cpp/rnskia/dom/nodes/JsiOvalNode.h +34 -0
  58. package/cpp/rnskia/dom/nodes/JsiPaintNode.h +77 -0
  59. package/cpp/rnskia/dom/nodes/JsiPatchNode.h +54 -0
  60. package/cpp/rnskia/dom/nodes/JsiPathEffectNodes.h +315 -0
  61. package/cpp/rnskia/dom/nodes/JsiPathNode.h +181 -0
  62. package/cpp/rnskia/dom/nodes/JsiPictureNode.h +32 -0
  63. package/cpp/rnskia/dom/nodes/JsiPointsNode.h +51 -0
  64. package/cpp/rnskia/dom/nodes/JsiRRectNode.h +34 -0
  65. package/cpp/rnskia/dom/nodes/JsiRectNode.h +34 -0
  66. package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +517 -0
  67. package/cpp/rnskia/dom/nodes/JsiTextBlobNode.h +47 -0
  68. package/cpp/rnskia/dom/nodes/JsiTextNode.h +54 -0
  69. package/cpp/rnskia/dom/nodes/JsiTextPathNode.h +32 -0
  70. package/cpp/rnskia/dom/nodes/JsiVerticesNode.h +43 -0
  71. package/cpp/rnskia/dom/props/BezierProps.h +63 -0
  72. package/cpp/rnskia/dom/props/BlendModeProp.h +101 -0
  73. package/cpp/rnskia/dom/props/BoxShadowProps.h +61 -0
  74. package/cpp/rnskia/dom/props/CircleProp.h +46 -0
  75. package/cpp/rnskia/dom/props/ClipProp.h +62 -0
  76. package/cpp/rnskia/dom/props/ColorProp.h +80 -0
  77. package/cpp/rnskia/dom/props/DrawingProp.h +33 -0
  78. package/cpp/rnskia/dom/props/FontProp.h +34 -0
  79. package/cpp/rnskia/dom/props/GlyphsProp.h +53 -0
  80. package/cpp/rnskia/dom/props/ImageProps.h +173 -0
  81. package/cpp/rnskia/dom/props/LayerProp.h +50 -0
  82. package/cpp/rnskia/dom/props/MatrixProp.h +33 -0
  83. package/cpp/rnskia/dom/props/NumbersProp.h +63 -0
  84. package/cpp/rnskia/dom/props/PaintProps.h +172 -0
  85. package/cpp/rnskia/dom/props/PathProp.h +55 -0
  86. package/cpp/rnskia/dom/props/PictureProp.h +38 -0
  87. package/cpp/rnskia/dom/props/PointProp.h +72 -0
  88. package/cpp/rnskia/dom/props/PointsProp.h +83 -0
  89. package/cpp/rnskia/dom/props/RRectProp.h +134 -0
  90. package/cpp/rnskia/dom/props/RadiusProp.h +43 -0
  91. package/cpp/rnskia/dom/props/RectProp.h +118 -0
  92. package/cpp/rnskia/dom/props/StrokeProps.h +75 -0
  93. package/cpp/rnskia/dom/props/SvgProp.h +37 -0
  94. package/cpp/rnskia/dom/props/TextBlobProp.h +128 -0
  95. package/cpp/rnskia/dom/props/TileModeProp.h +50 -0
  96. package/cpp/rnskia/dom/props/TransformProp.h +80 -0
  97. package/cpp/rnskia/dom/props/TransformsProps.h +68 -0
  98. package/cpp/rnskia/dom/props/UniformsProp.h +194 -0
  99. package/cpp/rnskia/dom/props/VertexModeProp.h +47 -0
  100. package/cpp/rnskia/dom/props/VerticesProps.h +67 -0
  101. package/cpp/rnskia/values/RNSkReadonlyValue.h +13 -4
  102. package/cpp/skia/include/android/SkAndroidFrameworkUtils.h +35 -1
  103. package/cpp/skia/include/codec/SkAndroidCodec.h +17 -1
  104. package/cpp/skia/include/codec/SkCodec.h +8 -5
  105. package/cpp/skia/include/core/SkAnnotation.h +2 -0
  106. package/cpp/skia/include/core/SkBitmap.h +52 -1
  107. package/cpp/skia/include/core/SkBlendMode.h +2 -0
  108. package/cpp/skia/include/core/SkCanvas.h +52 -31
  109. package/cpp/skia/include/core/SkCapabilities.h +44 -0
  110. package/cpp/skia/include/core/SkColor.h +7 -0
  111. package/cpp/skia/include/core/SkColorFilter.h +37 -0
  112. package/cpp/skia/include/core/SkColorSpace.h +1 -1
  113. package/cpp/skia/include/core/SkFont.h +4 -0
  114. package/cpp/skia/include/core/SkFontMgr.h +3 -0
  115. package/cpp/skia/include/core/SkGraphics.h +9 -0
  116. package/cpp/skia/include/core/SkImage.h +77 -17
  117. package/cpp/skia/include/core/SkImageEncoder.h +5 -3
  118. package/cpp/skia/include/core/SkImageGenerator.h +27 -17
  119. package/cpp/skia/include/core/SkM44.h +1 -0
  120. package/cpp/skia/include/core/SkMesh.h +120 -34
  121. package/cpp/skia/include/core/SkMilestone.h +1 -1
  122. package/cpp/skia/include/core/SkOverdrawCanvas.h +2 -1
  123. package/cpp/skia/include/core/SkPaint.h +15 -2
  124. package/cpp/skia/include/core/SkPath.h +4 -0
  125. package/cpp/skia/include/core/SkPathBuilder.h +1 -1
  126. package/cpp/skia/include/core/SkPicture.h +0 -3
  127. package/cpp/skia/include/core/SkPictureRecorder.h +0 -2
  128. package/cpp/skia/include/core/SkPixmap.h +19 -0
  129. package/cpp/skia/include/core/SkRasterHandleAllocator.h +3 -1
  130. package/cpp/skia/include/core/SkRect.h +11 -4
  131. package/cpp/skia/include/core/SkRefCnt.h +13 -1
  132. package/cpp/skia/include/core/SkRegion.h +6 -0
  133. package/cpp/skia/include/core/SkSamplingOptions.h +8 -6
  134. package/cpp/skia/include/core/SkScalar.h +6 -25
  135. package/cpp/skia/include/core/SkShader.h +20 -12
  136. package/cpp/skia/include/core/SkSpan.h +51 -19
  137. package/cpp/skia/include/core/SkStream.h +2 -2
  138. package/cpp/skia/include/core/SkString.h +11 -3
  139. package/cpp/skia/include/core/SkSurface.h +85 -8
  140. package/cpp/skia/include/core/SkTextBlob.h +5 -2
  141. package/cpp/skia/include/core/SkTypes.h +11 -10
  142. package/cpp/skia/include/docs/SkPDFDocument.h +0 -5
  143. package/cpp/skia/include/effects/Sk1DPathEffect.h +6 -1
  144. package/cpp/skia/include/effects/Sk2DPathEffect.h +4 -1
  145. package/cpp/skia/include/effects/SkColorMatrix.h +1 -0
  146. package/cpp/skia/include/effects/SkColorMatrixFilter.h +5 -8
  147. package/cpp/skia/include/effects/SkCornerPathEffect.h +5 -1
  148. package/cpp/skia/include/effects/SkDashPathEffect.h +5 -1
  149. package/cpp/skia/include/effects/SkGradientShader.h +68 -38
  150. package/cpp/skia/include/effects/SkHighContrastFilter.h +5 -1
  151. package/cpp/skia/include/effects/SkImageFilters.h +5 -4
  152. package/cpp/skia/include/effects/SkLumaColorFilter.h +4 -1
  153. package/cpp/skia/include/effects/SkOpPathEffect.h +6 -2
  154. package/cpp/skia/include/effects/SkOverdrawColorFilter.h +5 -2
  155. package/cpp/skia/include/effects/SkRuntimeEffect.h +54 -62
  156. package/cpp/skia/include/effects/SkShaderMaskFilter.h +3 -1
  157. package/cpp/skia/include/effects/SkTableColorFilter.h +8 -21
  158. package/cpp/skia/include/effects/SkTableMaskFilter.h +5 -1
  159. package/cpp/skia/include/effects/SkTrimPathEffect.h +5 -1
  160. package/cpp/skia/include/encode/SkEncoder.h +17 -0
  161. package/cpp/skia/include/encode/SkWebpEncoder.h +17 -0
  162. package/cpp/skia/include/gpu/GpuTypes.h +18 -0
  163. package/cpp/skia/include/gpu/GrBackendSurface.h +38 -17
  164. package/cpp/skia/include/gpu/GrBackendSurfaceMutableState.h +6 -71
  165. package/cpp/skia/include/gpu/GrContextOptions.h +1 -1
  166. package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +10 -9
  167. package/cpp/skia/include/gpu/GrDirectContext.h +42 -22
  168. package/cpp/skia/include/gpu/GrRecordingContext.h +6 -3
  169. package/cpp/skia/include/gpu/GrTypes.h +11 -11
  170. package/cpp/skia/include/gpu/MutableTextureState.h +122 -0
  171. package/cpp/skia/include/gpu/gl/GrGLFunctions.h +1 -0
  172. package/cpp/skia/include/gpu/gl/GrGLInterface.h +1 -0
  173. package/cpp/skia/include/gpu/graphite/BackendTexture.h +7 -0
  174. package/cpp/skia/include/gpu/graphite/CombinationBuilder.h +195 -0
  175. package/cpp/skia/include/gpu/graphite/Context.h +47 -55
  176. package/cpp/skia/include/gpu/graphite/ContextOptions.h +85 -0
  177. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +1 -17
  178. package/cpp/skia/include/gpu/graphite/ImageProvider.h +61 -0
  179. package/cpp/skia/include/gpu/graphite/Recorder.h +87 -8
  180. package/cpp/skia/include/gpu/graphite/Recording.h +19 -9
  181. package/cpp/skia/include/gpu/graphite/TextureInfo.h +40 -8
  182. package/cpp/skia/include/gpu/graphite/dawn/DawnBackendContext.h +25 -0
  183. package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +3 -2
  184. package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +69 -0
  185. package/cpp/skia/include/gpu/mtl/MtlMemoryAllocator.h +39 -0
  186. package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +21 -19
  187. package/cpp/skia/include/gpu/vk/GrVkExtensions.h +2 -50
  188. package/cpp/skia/include/gpu/vk/GrVkMemoryAllocator.h +2 -127
  189. package/cpp/skia/include/gpu/vk/GrVkTypes.h +5 -43
  190. package/cpp/skia/include/gpu/vk/VulkanBackendContext.h +46 -0
  191. package/cpp/skia/include/gpu/vk/VulkanExtensions.h +67 -0
  192. package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +116 -0
  193. package/cpp/skia/include/gpu/vk/VulkanTypes.h +59 -0
  194. package/cpp/skia/include/pathops/SkPathOps.h +1 -1
  195. package/cpp/skia/include/private/SkColorData.h +10 -40
  196. package/cpp/skia/include/private/SkEncodedInfo.h +9 -3
  197. package/cpp/skia/include/private/SkFloatingPoint.h +9 -6
  198. package/cpp/skia/include/private/SkHalf.h +5 -52
  199. package/cpp/skia/include/private/SkMacros.h +1 -1
  200. package/cpp/skia/include/private/SkMalloc.h +4 -0
  201. package/cpp/skia/include/private/SkPathRef.h +10 -10
  202. package/cpp/skia/include/private/SkSLModifiers.h +59 -23
  203. package/cpp/skia/include/private/SkSLProgramKind.h +1 -0
  204. package/cpp/skia/include/private/SkSLSymbol.h +7 -3
  205. package/cpp/skia/include/private/SkStringView.h +4 -0
  206. package/cpp/skia/include/private/SkTArray.h +21 -7
  207. package/cpp/skia/include/private/SkTDArray.h +173 -285
  208. package/cpp/skia/include/private/SkTHash.h +33 -32
  209. package/cpp/skia/include/private/SkTemplates.h +24 -26
  210. package/cpp/skia/include/private/SkVx.h +218 -135
  211. package/cpp/skia/include/private/chromium/GrSlug.h +3 -65
  212. package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +6 -3
  213. package/cpp/skia/include/private/chromium/Slug.h +76 -0
  214. package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +6 -1
  215. package/cpp/skia/include/private/gpu/ganesh/GrVkTypesPriv.h +5 -39
  216. package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +63 -0
  217. package/cpp/skia/include/{gpu/vk/GrVkVulkan.h → private/gpu/vk/SkiaVulkan.h} +2 -2
  218. package/cpp/skia/include/private/gpu/vk/VulkanTypesPriv.h +57 -0
  219. package/cpp/skia/include/sksl/DSL.h +0 -1
  220. package/cpp/skia/include/sksl/DSLBlock.h +4 -18
  221. package/cpp/skia/include/sksl/DSLCase.h +2 -8
  222. package/cpp/skia/include/sksl/DSLCore.h +8 -15
  223. package/cpp/skia/include/sksl/DSLExpression.h +51 -142
  224. package/cpp/skia/include/sksl/DSLFunction.h +7 -15
  225. package/cpp/skia/include/sksl/DSLModifiers.h +5 -2
  226. package/cpp/skia/include/sksl/DSLStatement.h +4 -39
  227. package/cpp/skia/include/sksl/DSLSymbols.h +1 -11
  228. package/cpp/skia/include/sksl/DSLType.h +20 -12
  229. package/cpp/skia/include/sksl/DSLVar.h +56 -146
  230. package/cpp/skia/include/sksl/SkSLErrorReporter.h +2 -15
  231. package/cpp/skia/include/sksl/SkSLOperator.h +62 -59
  232. package/cpp/skia/include/sksl/SkSLPosition.h +2 -0
  233. package/cpp/skia/include/sksl/SkSLVersion.h +27 -0
  234. package/cpp/skia/include/svg/SkSVGCanvas.h +1 -0
  235. package/cpp/skia/include/utils/SkAnimCodecPlayer.h +1 -1
  236. package/cpp/skia/include/utils/SkBase64.h +2 -0
  237. package/cpp/skia/include/utils/SkCustomTypeface.h +24 -11
  238. package/cpp/skia/include/utils/SkEventTracer.h +12 -1
  239. package/cpp/skia/include/utils/SkNWayCanvas.h +11 -4
  240. package/cpp/skia/include/utils/SkPaintFilterCanvas.h +9 -4
  241. package/cpp/skia/include/utils/SkParse.h +3 -0
  242. package/cpp/skia/include/utils/SkShadowUtils.h +2 -0
  243. package/cpp/skia/include/utils/SkTextUtils.h +2 -1
  244. package/cpp/skia/{include/third_party → modules}/skcms/skcms.h +10 -0
  245. package/cpp/skia/modules/skcms/skcms_internal.h +56 -0
  246. package/cpp/skia/modules/skcms/src/Transform_inl.h +1609 -0
  247. package/cpp/skia/modules/skparagraph/include/DartTypes.h +153 -0
  248. package/cpp/skia/modules/skparagraph/include/FontArguments.h +46 -0
  249. package/cpp/skia/modules/skparagraph/include/FontCollection.h +84 -0
  250. package/cpp/skia/modules/skparagraph/include/Metrics.h +98 -0
  251. package/cpp/skia/modules/skparagraph/include/Paragraph.h +111 -0
  252. package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +69 -0
  253. package/cpp/skia/modules/skparagraph/include/ParagraphCache.h +77 -0
  254. package/cpp/skia/modules/skparagraph/include/ParagraphStyle.h +143 -0
  255. package/cpp/skia/modules/skparagraph/include/TextShadow.h +30 -0
  256. package/cpp/skia/modules/skparagraph/include/TextStyle.h +352 -0
  257. package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +81 -0
  258. package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +1 -1
  259. package/cpp/skia/modules/svg/include/SkSVGTypes.h +3 -3
  260. package/cpp/skia/src/core/SkLRUCache.h +126 -0
  261. package/cpp/skia/src/core/SkTInternalLList.h +302 -0
  262. package/cpp/utils/RNSkTimingInfo.h +1 -0
  263. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.h +15 -4
  264. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +40 -54
  265. package/ios/RNSkia-iOS/SkiaDomViewManager.h +8 -0
  266. package/ios/RNSkia-iOS/SkiaDomViewManager.mm +51 -0
  267. package/lib/commonjs/dom/nodes/DrawingNode.js +1 -5
  268. package/lib/commonjs/dom/nodes/DrawingNode.js.map +1 -1
  269. package/lib/commonjs/dom/nodes/JsiSkDOM.js +56 -56
  270. package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
  271. package/lib/commonjs/dom/nodes/RenderNode.js +3 -9
  272. package/lib/commonjs/dom/nodes/RenderNode.js.map +1 -1
  273. package/lib/commonjs/dom/nodes/drawings/Text.js +4 -9
  274. package/lib/commonjs/dom/nodes/drawings/Text.js.map +1 -1
  275. package/lib/commonjs/dom/types/Common.js.map +1 -1
  276. package/lib/commonjs/dom/types/Drawings.js.map +1 -1
  277. package/lib/commonjs/mock/index.js +0 -1
  278. package/lib/commonjs/mock/index.js.map +1 -1
  279. package/lib/commonjs/renderer/Canvas.js +21 -57
  280. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  281. package/lib/commonjs/renderer/DependencyManager.js +0 -5
  282. package/lib/commonjs/renderer/DependencyManager.js.map +1 -1
  283. package/lib/commonjs/renderer/HostComponents.js.map +1 -1
  284. package/lib/commonjs/renderer/components/Mask.js +1 -3
  285. package/lib/commonjs/renderer/components/Mask.js.map +1 -1
  286. package/lib/commonjs/renderer/components/Paint.js +5 -18
  287. package/lib/commonjs/renderer/components/Paint.js.map +1 -1
  288. package/lib/commonjs/renderer/useCanvas.js +8 -6
  289. package/lib/commonjs/renderer/useCanvas.js.map +1 -1
  290. package/lib/commonjs/skia/core/Picture.js +1 -24
  291. package/lib/commonjs/skia/core/Picture.js.map +1 -1
  292. package/lib/commonjs/skia/core/Rect.js +1 -1
  293. package/lib/commonjs/skia/core/Rect.js.map +1 -1
  294. package/lib/commonjs/skia/types/ContourMeasure.js.map +1 -1
  295. package/lib/commonjs/skia/types/Size.js +2 -0
  296. package/lib/commonjs/skia/types/Size.js.map +1 -0
  297. package/lib/commonjs/skia/types/index.js +13 -0
  298. package/lib/commonjs/skia/types/index.js.map +1 -1
  299. package/lib/commonjs/skia/web/JsiSkColor.js +8 -0
  300. package/lib/commonjs/skia/web/JsiSkColor.js.map +1 -1
  301. package/lib/commonjs/skia/web/JsiSkContourMeasure.js +4 -7
  302. package/lib/commonjs/skia/web/JsiSkContourMeasure.js.map +1 -1
  303. package/lib/commonjs/values/web/RNSkReadonlyValue.js +4 -2
  304. package/lib/commonjs/values/web/RNSkReadonlyValue.js.map +1 -1
  305. package/lib/commonjs/views/SkiaBaseWebView.js +9 -2
  306. package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
  307. package/lib/commonjs/views/SkiaDomView.js +152 -0
  308. package/lib/commonjs/views/SkiaDomView.js.map +1 -0
  309. package/lib/commonjs/views/SkiaDomView.web.js +55 -0
  310. package/lib/commonjs/views/SkiaDomView.web.js.map +1 -0
  311. package/lib/commonjs/views/SkiaPictureView.js +16 -2
  312. package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
  313. package/lib/commonjs/views/SkiaView.js +17 -2
  314. package/lib/commonjs/views/SkiaView.js.map +1 -1
  315. package/lib/commonjs/views/index.js +13 -0
  316. package/lib/commonjs/views/index.js.map +1 -1
  317. package/lib/commonjs/views/types.js.map +1 -1
  318. package/lib/module/dom/nodes/DrawingNode.js +2 -6
  319. package/lib/module/dom/nodes/DrawingNode.js.map +1 -1
  320. package/lib/module/dom/nodes/JsiSkDOM.js +56 -56
  321. package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
  322. package/lib/module/dom/nodes/RenderNode.js +2 -5
  323. package/lib/module/dom/nodes/RenderNode.js.map +1 -1
  324. package/lib/module/dom/nodes/drawings/Text.js +4 -9
  325. package/lib/module/dom/nodes/drawings/Text.js.map +1 -1
  326. package/lib/module/dom/types/Common.js.map +1 -1
  327. package/lib/module/dom/types/Drawings.js.map +1 -1
  328. package/lib/module/mock/index.js +0 -1
  329. package/lib/module/mock/index.js.map +1 -1
  330. package/lib/module/renderer/Canvas.js +22 -58
  331. package/lib/module/renderer/Canvas.js.map +1 -1
  332. package/lib/module/renderer/DependencyManager.js +0 -5
  333. package/lib/module/renderer/DependencyManager.js.map +1 -1
  334. package/lib/module/renderer/HostComponents.js.map +1 -1
  335. package/lib/module/renderer/components/Mask.js +2 -4
  336. package/lib/module/renderer/components/Mask.js.map +1 -1
  337. package/lib/module/renderer/components/Paint.js +3 -14
  338. package/lib/module/renderer/components/Paint.js.map +1 -1
  339. package/lib/module/renderer/useCanvas.js +6 -4
  340. package/lib/module/renderer/useCanvas.js.map +1 -1
  341. package/lib/module/skia/core/Picture.js +0 -18
  342. package/lib/module/skia/core/Picture.js.map +1 -1
  343. package/lib/module/skia/core/Rect.js +1 -1
  344. package/lib/module/skia/core/Rect.js.map +1 -1
  345. package/lib/module/skia/types/ContourMeasure.js.map +1 -1
  346. package/lib/module/skia/types/Size.js +2 -0
  347. package/lib/module/skia/types/Size.js.map +1 -0
  348. package/lib/module/skia/types/index.js +1 -0
  349. package/lib/module/skia/types/index.js.map +1 -1
  350. package/lib/module/skia/web/JsiSkColor.js +8 -0
  351. package/lib/module/skia/web/JsiSkColor.js.map +1 -1
  352. package/lib/module/skia/web/JsiSkContourMeasure.js +3 -7
  353. package/lib/module/skia/web/JsiSkContourMeasure.js.map +1 -1
  354. package/lib/module/values/web/RNSkReadonlyValue.js +4 -2
  355. package/lib/module/values/web/RNSkReadonlyValue.js.map +1 -1
  356. package/lib/module/views/SkiaBaseWebView.js +9 -2
  357. package/lib/module/views/SkiaBaseWebView.js.map +1 -1
  358. package/lib/module/views/SkiaDomView.js +128 -0
  359. package/lib/module/views/SkiaDomView.js.map +1 -0
  360. package/lib/module/views/SkiaDomView.web.js +41 -0
  361. package/lib/module/views/SkiaDomView.web.js.map +1 -0
  362. package/lib/module/views/SkiaPictureView.js +14 -2
  363. package/lib/module/views/SkiaPictureView.js.map +1 -1
  364. package/lib/module/views/SkiaView.js +15 -2
  365. package/lib/module/views/SkiaView.js.map +1 -1
  366. package/lib/module/views/index.js +1 -0
  367. package/lib/module/views/index.js.map +1 -1
  368. package/lib/module/views/types.js.map +1 -1
  369. package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +57 -64
  370. package/lib/typescript/src/dom/nodes/RenderNode.d.ts +1 -3
  371. package/lib/typescript/src/dom/types/Common.d.ts +2 -3
  372. package/lib/typescript/src/dom/types/Drawings.d.ts +1 -3
  373. package/lib/typescript/src/renderer/Canvas.d.ts +5 -5
  374. package/lib/typescript/src/renderer/DependencyManager.d.ts +0 -2
  375. package/lib/typescript/src/renderer/HostComponents.d.ts +67 -8
  376. package/lib/typescript/src/renderer/components/Paint.d.ts +3 -4
  377. package/lib/typescript/src/renderer/useCanvas.d.ts +1 -6
  378. package/lib/typescript/src/skia/core/Picture.d.ts +0 -8
  379. package/lib/typescript/src/skia/types/ContourMeasure.d.ts +3 -2
  380. package/lib/typescript/src/skia/types/Size.d.ts +4 -0
  381. package/lib/typescript/src/skia/types/index.d.ts +1 -0
  382. package/lib/typescript/src/skia/web/JsiSkContourMeasure.d.ts +2 -6
  383. package/lib/typescript/src/views/SkiaBaseWebView.d.ts +4 -0
  384. package/lib/typescript/src/views/SkiaDomView.d.ts +31 -0
  385. package/lib/typescript/src/views/SkiaDomView.web.d.ts +7 -0
  386. package/lib/typescript/src/views/index.d.ts +1 -0
  387. package/lib/typescript/src/views/types.d.ts +12 -2
  388. package/libs/android/arm64-v8a/libskia.a +0 -0
  389. package/libs/android/arm64-v8a/libskottie.a +0 -0
  390. package/libs/android/arm64-v8a/libskparagraph.a +0 -0
  391. package/libs/android/arm64-v8a/libsksg.a +0 -0
  392. package/libs/android/arm64-v8a/libskshaper.a +0 -0
  393. package/libs/android/arm64-v8a/libskunicode.a +0 -0
  394. package/libs/android/arm64-v8a/libsvg.a +0 -0
  395. package/libs/android/armeabi-v7a/libskia.a +0 -0
  396. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  397. package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
  398. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  399. package/libs/android/armeabi-v7a/libskshaper.a +0 -0
  400. package/libs/android/armeabi-v7a/libskunicode.a +0 -0
  401. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  402. package/libs/android/x86/libskia.a +0 -0
  403. package/libs/android/x86/libskottie.a +0 -0
  404. package/libs/android/x86/libskparagraph.a +0 -0
  405. package/libs/android/x86/libsksg.a +0 -0
  406. package/libs/android/x86/libskshaper.a +0 -0
  407. package/libs/android/x86/libskunicode.a +0 -0
  408. package/libs/android/x86/libsvg.a +0 -0
  409. package/libs/android/x86_64/libskia.a +0 -0
  410. package/libs/android/x86_64/libskottie.a +0 -0
  411. package/libs/android/x86_64/libskparagraph.a +0 -0
  412. package/libs/android/x86_64/libsksg.a +0 -0
  413. package/libs/android/x86_64/libskshaper.a +0 -0
  414. package/libs/android/x86_64/libskunicode.a +0 -0
  415. package/libs/android/x86_64/libsvg.a +0 -0
  416. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  417. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  418. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  419. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  420. package/libs/ios/libskparagraph.xcframework/Info.plist +42 -0
  421. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  422. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  423. package/libs/ios/libsksg.xcframework/Info.plist +5 -5
  424. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  425. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  426. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  427. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  428. package/libs/ios/libskunicode.xcframework/Info.plist +42 -0
  429. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  430. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  431. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  432. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  433. package/package.json +6 -4
  434. package/react-native-skia.podspec +3 -1
  435. package/src/dom/nodes/DrawingNode.ts +2 -4
  436. package/src/dom/nodes/JsiSkDOM.ts +170 -56
  437. package/src/dom/nodes/RenderNode.ts +2 -14
  438. package/src/dom/nodes/drawings/Text.ts +4 -4
  439. package/src/dom/types/Common.ts +2 -4
  440. package/src/dom/types/Drawings.ts +1 -4
  441. package/src/mock/index.ts +0 -1
  442. package/src/renderer/Canvas.tsx +32 -51
  443. package/src/renderer/DependencyManager.tsx +0 -5
  444. package/src/renderer/HostComponents.ts +153 -5
  445. package/src/renderer/components/Mask.tsx +2 -2
  446. package/src/renderer/components/Paint.tsx +3 -14
  447. package/src/renderer/useCanvas.ts +5 -5
  448. package/src/skia/core/Picture.ts +0 -24
  449. package/src/skia/core/Rect.ts +1 -1
  450. package/src/skia/types/ContourMeasure.tsx +3 -2
  451. package/src/skia/types/Size.ts +4 -0
  452. package/src/skia/types/index.ts +1 -0
  453. package/src/skia/web/JsiSkColor.ts +11 -0
  454. package/src/skia/web/JsiSkContourMeasure.ts +7 -3
  455. package/src/values/web/RNSkReadonlyValue.ts +4 -2
  456. package/src/views/SkiaBaseWebView.tsx +6 -2
  457. package/src/views/SkiaDomView.tsx +120 -0
  458. package/src/views/SkiaDomView.web.tsx +37 -0
  459. package/src/views/SkiaPictureView.tsx +10 -2
  460. package/src/views/SkiaView.tsx +11 -3
  461. package/src/views/index.ts +1 -0
  462. package/src/views/types.ts +19 -2
  463. package/cpp/jsi/JsiSimpleValueWrapper.h +0 -99
  464. package/cpp/skia/include/c/sk_canvas.h +0 -159
  465. package/cpp/skia/include/c/sk_colorspace.h +0 -25
  466. package/cpp/skia/include/c/sk_data.h +0 -65
  467. package/cpp/skia/include/c/sk_image.h +0 -71
  468. package/cpp/skia/include/c/sk_imageinfo.h +0 -62
  469. package/cpp/skia/include/c/sk_maskfilter.h +0 -47
  470. package/cpp/skia/include/c/sk_matrix.h +0 -49
  471. package/cpp/skia/include/c/sk_paint.h +0 -145
  472. package/cpp/skia/include/c/sk_path.h +0 -102
  473. package/cpp/skia/include/c/sk_picture.h +0 -70
  474. package/cpp/skia/include/c/sk_shader.h +0 -143
  475. package/cpp/skia/include/c/sk_surface.h +0 -73
  476. package/cpp/skia/include/c/sk_types.h +0 -278
  477. package/cpp/skia/include/gpu/graphite/SkStuff.h +0 -47
  478. package/cpp/skia/include/private/SkNx.h +0 -430
  479. package/cpp/skia/include/private/SkNx_neon.h +0 -713
  480. package/cpp/skia/include/private/SkNx_sse.h +0 -823
  481. package/cpp/skia/include/sksl/DSLRuntimeEffects.h +0 -32
  482. 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
@@ -56,14 +56,10 @@ class JsiDrawingNode extends _RenderNode.JsiRenderNode {
56
56
  }
57
57
 
58
58
  renderNode(ctx) {
59
- if (this.props.paint && (0, _RenderNode.isSkPaint)(this.props.paint)) {
59
+ if (this.props.paint) {
60
60
  this.draw({ ...ctx,
61
61
  paint: this.props.paint
62
62
  });
63
- } else if (this.props.paint && this.props.paint.current != null) {
64
- this.draw({ ...ctx,
65
- paint: this.props.paint.current.materialize()
66
- });
67
63
  } else {
68
64
  this.draw(ctx);
69
65
  }