@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.
- package/android/CMakeLists.txt +35 -11
- package/android/build.gradle +21 -25
- package/android/cpp/jni/JniLoad.cpp +2 -0
- package/android/cpp/jni/include/JniSkiaDomView.h +89 -0
- package/android/cpp/rnskia-android/SkiaOpenGLRenderer.cpp +4 -3
- package/android/cpp/rnskia-android/SkiaOpenGLRenderer.h +4 -3
- package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaPackage.java +2 -1
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +45 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomViewManager.java +64 -0
- package/cpp/api/JsiSkHostObjects.h +6 -0
- package/cpp/api/JsiSkImageFilterFactory.h +1 -1
- package/cpp/api/JsiSkPaint.h +9 -2
- package/cpp/api/JsiSkPath.h +1 -0
- package/cpp/api/JsiSkRuntimeEffect.h +36 -36
- package/cpp/jsi/JsiHostObject.cpp +16 -28
- package/cpp/jsi/JsiHostObject.h +127 -7
- package/cpp/jsi/JsiValue.cpp +346 -0
- package/cpp/jsi/JsiValue.h +222 -0
- package/cpp/jsi/JsiValueWrapper.h +33 -5
- package/cpp/rnskia/RNSkDomView.cpp +220 -0
- package/cpp/rnskia/RNSkDomView.h +140 -0
- package/cpp/rnskia/RNSkJsView.cpp +0 -4
- package/cpp/rnskia/RNSkJsView.h +6 -4
- package/cpp/rnskia/RNSkManager.cpp +7 -0
- package/cpp/rnskia/RNSkPictureView.h +5 -8
- package/cpp/rnskia/RNSkView.h +113 -5
- package/cpp/rnskia/dom/JsiDomApi.h +167 -0
- package/cpp/rnskia/dom/base/BaseNodeProp.h +72 -0
- package/cpp/rnskia/dom/base/DerivedNodeProp.h +187 -0
- package/cpp/rnskia/dom/base/DrawingContext.cpp +227 -0
- package/cpp/rnskia/dom/base/DrawingContext.h +136 -0
- package/cpp/rnskia/dom/base/JsiDependencyManager.h +294 -0
- package/cpp/rnskia/dom/base/JsiDomDeclarationNode.h +176 -0
- package/cpp/rnskia/dom/base/JsiDomDrawingNode.h +50 -0
- package/cpp/rnskia/dom/base/JsiDomNode.h +361 -0
- package/cpp/rnskia/dom/base/JsiDomRenderNode.h +267 -0
- package/cpp/rnskia/dom/base/NodeProp.h +130 -0
- package/cpp/rnskia/dom/base/NodePropsContainer.h +119 -0
- package/cpp/rnskia/dom/nodes/JsiBackdropFilterNode.h +38 -0
- package/cpp/rnskia/dom/nodes/JsiBlendNode.h +112 -0
- package/cpp/rnskia/dom/nodes/JsiBlurMaskNode.h +78 -0
- package/cpp/rnskia/dom/nodes/JsiBoxNode.h +104 -0
- package/cpp/rnskia/dom/nodes/JsiBoxShadowNode.h +33 -0
- package/cpp/rnskia/dom/nodes/JsiCircleNode.h +38 -0
- package/cpp/rnskia/dom/nodes/JsiColorFilterNodes.h +192 -0
- package/cpp/rnskia/dom/nodes/JsiCustomDrawingNode.h +123 -0
- package/cpp/rnskia/dom/nodes/JsiDiffRectNode.h +42 -0
- package/cpp/rnskia/dom/nodes/JsiFillNode.h +22 -0
- package/cpp/rnskia/dom/nodes/JsiGlyphsNode.h +56 -0
- package/cpp/rnskia/dom/nodes/JsiGroupNode.h +26 -0
- package/cpp/rnskia/dom/nodes/JsiImageFilterNodes.h +415 -0
- package/cpp/rnskia/dom/nodes/JsiImageNode.h +34 -0
- package/cpp/rnskia/dom/nodes/JsiImageSvgNode.h +44 -0
- package/cpp/rnskia/dom/nodes/JsiLayerNode.h +64 -0
- package/cpp/rnskia/dom/nodes/JsiLineNode.h +43 -0
- package/cpp/rnskia/dom/nodes/JsiOvalNode.h +34 -0
- package/cpp/rnskia/dom/nodes/JsiPaintNode.h +77 -0
- package/cpp/rnskia/dom/nodes/JsiPatchNode.h +54 -0
- package/cpp/rnskia/dom/nodes/JsiPathEffectNodes.h +315 -0
- package/cpp/rnskia/dom/nodes/JsiPathNode.h +181 -0
- package/cpp/rnskia/dom/nodes/JsiPictureNode.h +32 -0
- package/cpp/rnskia/dom/nodes/JsiPointsNode.h +51 -0
- package/cpp/rnskia/dom/nodes/JsiRRectNode.h +34 -0
- package/cpp/rnskia/dom/nodes/JsiRectNode.h +34 -0
- package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +517 -0
- package/cpp/rnskia/dom/nodes/JsiTextBlobNode.h +47 -0
- package/cpp/rnskia/dom/nodes/JsiTextNode.h +54 -0
- package/cpp/rnskia/dom/nodes/JsiTextPathNode.h +32 -0
- package/cpp/rnskia/dom/nodes/JsiVerticesNode.h +43 -0
- package/cpp/rnskia/dom/props/BezierProps.h +63 -0
- package/cpp/rnskia/dom/props/BlendModeProp.h +101 -0
- package/cpp/rnskia/dom/props/BoxShadowProps.h +61 -0
- package/cpp/rnskia/dom/props/CircleProp.h +46 -0
- package/cpp/rnskia/dom/props/ClipProp.h +62 -0
- package/cpp/rnskia/dom/props/ColorProp.h +80 -0
- package/cpp/rnskia/dom/props/DrawingProp.h +33 -0
- package/cpp/rnskia/dom/props/FontProp.h +34 -0
- package/cpp/rnskia/dom/props/GlyphsProp.h +53 -0
- package/cpp/rnskia/dom/props/ImageProps.h +173 -0
- package/cpp/rnskia/dom/props/LayerProp.h +50 -0
- package/cpp/rnskia/dom/props/MatrixProp.h +33 -0
- package/cpp/rnskia/dom/props/NumbersProp.h +63 -0
- package/cpp/rnskia/dom/props/PaintProps.h +172 -0
- package/cpp/rnskia/dom/props/PathProp.h +55 -0
- package/cpp/rnskia/dom/props/PictureProp.h +38 -0
- package/cpp/rnskia/dom/props/PointProp.h +72 -0
- package/cpp/rnskia/dom/props/PointsProp.h +83 -0
- package/cpp/rnskia/dom/props/RRectProp.h +134 -0
- package/cpp/rnskia/dom/props/RadiusProp.h +43 -0
- package/cpp/rnskia/dom/props/RectProp.h +118 -0
- package/cpp/rnskia/dom/props/StrokeProps.h +75 -0
- package/cpp/rnskia/dom/props/SvgProp.h +37 -0
- package/cpp/rnskia/dom/props/TextBlobProp.h +128 -0
- package/cpp/rnskia/dom/props/TileModeProp.h +50 -0
- package/cpp/rnskia/dom/props/TransformProp.h +80 -0
- package/cpp/rnskia/dom/props/TransformsProps.h +68 -0
- package/cpp/rnskia/dom/props/UniformsProp.h +194 -0
- package/cpp/rnskia/dom/props/VertexModeProp.h +47 -0
- package/cpp/rnskia/dom/props/VerticesProps.h +67 -0
- package/cpp/rnskia/values/RNSkReadonlyValue.h +13 -4
- package/cpp/skia/include/android/SkAndroidFrameworkUtils.h +35 -1
- package/cpp/skia/include/codec/SkAndroidCodec.h +17 -1
- package/cpp/skia/include/codec/SkCodec.h +8 -5
- package/cpp/skia/include/core/SkAnnotation.h +2 -0
- package/cpp/skia/include/core/SkBitmap.h +52 -1
- package/cpp/skia/include/core/SkBlendMode.h +2 -0
- package/cpp/skia/include/core/SkCanvas.h +52 -31
- package/cpp/skia/include/core/SkCapabilities.h +44 -0
- package/cpp/skia/include/core/SkColor.h +7 -0
- package/cpp/skia/include/core/SkColorFilter.h +37 -0
- package/cpp/skia/include/core/SkColorSpace.h +1 -1
- package/cpp/skia/include/core/SkFont.h +4 -0
- package/cpp/skia/include/core/SkFontMgr.h +3 -0
- package/cpp/skia/include/core/SkGraphics.h +9 -0
- package/cpp/skia/include/core/SkImage.h +77 -17
- package/cpp/skia/include/core/SkImageEncoder.h +5 -3
- package/cpp/skia/include/core/SkImageGenerator.h +27 -17
- package/cpp/skia/include/core/SkM44.h +1 -0
- package/cpp/skia/include/core/SkMesh.h +120 -34
- package/cpp/skia/include/core/SkMilestone.h +1 -1
- package/cpp/skia/include/core/SkOverdrawCanvas.h +2 -1
- package/cpp/skia/include/core/SkPaint.h +15 -2
- package/cpp/skia/include/core/SkPath.h +4 -0
- package/cpp/skia/include/core/SkPathBuilder.h +1 -1
- package/cpp/skia/include/core/SkPicture.h +0 -3
- package/cpp/skia/include/core/SkPictureRecorder.h +0 -2
- package/cpp/skia/include/core/SkPixmap.h +19 -0
- package/cpp/skia/include/core/SkRasterHandleAllocator.h +3 -1
- package/cpp/skia/include/core/SkRect.h +11 -4
- package/cpp/skia/include/core/SkRefCnt.h +13 -1
- package/cpp/skia/include/core/SkRegion.h +6 -0
- package/cpp/skia/include/core/SkSamplingOptions.h +8 -6
- package/cpp/skia/include/core/SkScalar.h +6 -25
- package/cpp/skia/include/core/SkShader.h +20 -12
- package/cpp/skia/include/core/SkSpan.h +51 -19
- package/cpp/skia/include/core/SkStream.h +2 -2
- package/cpp/skia/include/core/SkString.h +11 -3
- package/cpp/skia/include/core/SkSurface.h +85 -8
- package/cpp/skia/include/core/SkTextBlob.h +5 -2
- package/cpp/skia/include/core/SkTypes.h +11 -10
- package/cpp/skia/include/docs/SkPDFDocument.h +0 -5
- package/cpp/skia/include/effects/Sk1DPathEffect.h +6 -1
- package/cpp/skia/include/effects/Sk2DPathEffect.h +4 -1
- package/cpp/skia/include/effects/SkColorMatrix.h +1 -0
- package/cpp/skia/include/effects/SkColorMatrixFilter.h +5 -8
- package/cpp/skia/include/effects/SkCornerPathEffect.h +5 -1
- package/cpp/skia/include/effects/SkDashPathEffect.h +5 -1
- package/cpp/skia/include/effects/SkGradientShader.h +68 -38
- package/cpp/skia/include/effects/SkHighContrastFilter.h +5 -1
- package/cpp/skia/include/effects/SkImageFilters.h +5 -4
- package/cpp/skia/include/effects/SkLumaColorFilter.h +4 -1
- package/cpp/skia/include/effects/SkOpPathEffect.h +6 -2
- package/cpp/skia/include/effects/SkOverdrawColorFilter.h +5 -2
- package/cpp/skia/include/effects/SkRuntimeEffect.h +54 -62
- package/cpp/skia/include/effects/SkShaderMaskFilter.h +3 -1
- package/cpp/skia/include/effects/SkTableColorFilter.h +8 -21
- package/cpp/skia/include/effects/SkTableMaskFilter.h +5 -1
- package/cpp/skia/include/effects/SkTrimPathEffect.h +5 -1
- package/cpp/skia/include/encode/SkEncoder.h +17 -0
- package/cpp/skia/include/encode/SkWebpEncoder.h +17 -0
- package/cpp/skia/include/gpu/GpuTypes.h +18 -0
- package/cpp/skia/include/gpu/GrBackendSurface.h +38 -17
- package/cpp/skia/include/gpu/GrBackendSurfaceMutableState.h +6 -71
- package/cpp/skia/include/gpu/GrContextOptions.h +1 -1
- package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +10 -9
- package/cpp/skia/include/gpu/GrDirectContext.h +42 -22
- package/cpp/skia/include/gpu/GrRecordingContext.h +6 -3
- package/cpp/skia/include/gpu/GrTypes.h +11 -11
- package/cpp/skia/include/gpu/MutableTextureState.h +122 -0
- package/cpp/skia/include/gpu/gl/GrGLFunctions.h +1 -0
- package/cpp/skia/include/gpu/gl/GrGLInterface.h +1 -0
- package/cpp/skia/include/gpu/graphite/BackendTexture.h +7 -0
- package/cpp/skia/include/gpu/graphite/CombinationBuilder.h +195 -0
- package/cpp/skia/include/gpu/graphite/Context.h +47 -55
- package/cpp/skia/include/gpu/graphite/ContextOptions.h +85 -0
- package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +1 -17
- package/cpp/skia/include/gpu/graphite/ImageProvider.h +61 -0
- package/cpp/skia/include/gpu/graphite/Recorder.h +87 -8
- package/cpp/skia/include/gpu/graphite/Recording.h +19 -9
- package/cpp/skia/include/gpu/graphite/TextureInfo.h +40 -8
- package/cpp/skia/include/gpu/graphite/dawn/DawnBackendContext.h +25 -0
- package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +3 -2
- package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +69 -0
- package/cpp/skia/include/gpu/mtl/MtlMemoryAllocator.h +39 -0
- package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +21 -19
- package/cpp/skia/include/gpu/vk/GrVkExtensions.h +2 -50
- package/cpp/skia/include/gpu/vk/GrVkMemoryAllocator.h +2 -127
- package/cpp/skia/include/gpu/vk/GrVkTypes.h +5 -43
- package/cpp/skia/include/gpu/vk/VulkanBackendContext.h +46 -0
- package/cpp/skia/include/gpu/vk/VulkanExtensions.h +67 -0
- package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +116 -0
- package/cpp/skia/include/gpu/vk/VulkanTypes.h +59 -0
- package/cpp/skia/include/pathops/SkPathOps.h +1 -1
- package/cpp/skia/include/private/SkColorData.h +10 -40
- package/cpp/skia/include/private/SkEncodedInfo.h +9 -3
- package/cpp/skia/include/private/SkFloatingPoint.h +9 -6
- package/cpp/skia/include/private/SkHalf.h +5 -52
- package/cpp/skia/include/private/SkMacros.h +1 -1
- package/cpp/skia/include/private/SkMalloc.h +4 -0
- package/cpp/skia/include/private/SkPathRef.h +10 -10
- package/cpp/skia/include/private/SkSLModifiers.h +59 -23
- package/cpp/skia/include/private/SkSLProgramKind.h +1 -0
- package/cpp/skia/include/private/SkSLSymbol.h +7 -3
- package/cpp/skia/include/private/SkStringView.h +4 -0
- package/cpp/skia/include/private/SkTArray.h +21 -7
- package/cpp/skia/include/private/SkTDArray.h +173 -285
- package/cpp/skia/include/private/SkTHash.h +33 -32
- package/cpp/skia/include/private/SkTemplates.h +24 -26
- package/cpp/skia/include/private/SkVx.h +218 -135
- package/cpp/skia/include/private/chromium/GrSlug.h +3 -65
- package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +6 -3
- package/cpp/skia/include/private/chromium/Slug.h +76 -0
- package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +6 -1
- package/cpp/skia/include/private/gpu/ganesh/GrVkTypesPriv.h +5 -39
- package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +63 -0
- package/cpp/skia/include/{gpu/vk/GrVkVulkan.h → private/gpu/vk/SkiaVulkan.h} +2 -2
- package/cpp/skia/include/private/gpu/vk/VulkanTypesPriv.h +57 -0
- package/cpp/skia/include/sksl/DSL.h +0 -1
- package/cpp/skia/include/sksl/DSLBlock.h +4 -18
- package/cpp/skia/include/sksl/DSLCase.h +2 -8
- package/cpp/skia/include/sksl/DSLCore.h +8 -15
- package/cpp/skia/include/sksl/DSLExpression.h +51 -142
- package/cpp/skia/include/sksl/DSLFunction.h +7 -15
- package/cpp/skia/include/sksl/DSLModifiers.h +5 -2
- package/cpp/skia/include/sksl/DSLStatement.h +4 -39
- package/cpp/skia/include/sksl/DSLSymbols.h +1 -11
- package/cpp/skia/include/sksl/DSLType.h +20 -12
- package/cpp/skia/include/sksl/DSLVar.h +56 -146
- package/cpp/skia/include/sksl/SkSLErrorReporter.h +2 -15
- package/cpp/skia/include/sksl/SkSLOperator.h +62 -59
- package/cpp/skia/include/sksl/SkSLPosition.h +2 -0
- package/cpp/skia/include/sksl/SkSLVersion.h +27 -0
- package/cpp/skia/include/svg/SkSVGCanvas.h +1 -0
- package/cpp/skia/include/utils/SkAnimCodecPlayer.h +1 -1
- package/cpp/skia/include/utils/SkBase64.h +2 -0
- package/cpp/skia/include/utils/SkCustomTypeface.h +24 -11
- package/cpp/skia/include/utils/SkEventTracer.h +12 -1
- package/cpp/skia/include/utils/SkNWayCanvas.h +11 -4
- package/cpp/skia/include/utils/SkPaintFilterCanvas.h +9 -4
- package/cpp/skia/include/utils/SkParse.h +3 -0
- package/cpp/skia/include/utils/SkShadowUtils.h +2 -0
- package/cpp/skia/include/utils/SkTextUtils.h +2 -1
- package/cpp/skia/{include/third_party → modules}/skcms/skcms.h +10 -0
- package/cpp/skia/modules/skcms/skcms_internal.h +56 -0
- package/cpp/skia/modules/skcms/src/Transform_inl.h +1609 -0
- package/cpp/skia/modules/skparagraph/include/DartTypes.h +153 -0
- package/cpp/skia/modules/skparagraph/include/FontArguments.h +46 -0
- package/cpp/skia/modules/skparagraph/include/FontCollection.h +84 -0
- package/cpp/skia/modules/skparagraph/include/Metrics.h +98 -0
- package/cpp/skia/modules/skparagraph/include/Paragraph.h +111 -0
- package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +69 -0
- package/cpp/skia/modules/skparagraph/include/ParagraphCache.h +77 -0
- package/cpp/skia/modules/skparagraph/include/ParagraphStyle.h +143 -0
- package/cpp/skia/modules/skparagraph/include/TextShadow.h +30 -0
- package/cpp/skia/modules/skparagraph/include/TextStyle.h +352 -0
- package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +81 -0
- package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGTypes.h +3 -3
- package/cpp/skia/src/core/SkLRUCache.h +126 -0
- package/cpp/skia/src/core/SkTInternalLList.h +302 -0
- package/cpp/utils/RNSkTimingInfo.h +1 -0
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.h +15 -4
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +40 -54
- package/ios/RNSkia-iOS/SkiaDomViewManager.h +8 -0
- package/ios/RNSkia-iOS/SkiaDomViewManager.mm +51 -0
- package/lib/commonjs/dom/nodes/JsiSkDOM.js +56 -56
- package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
- package/lib/commonjs/dom/nodes/RenderNode.js +1 -1
- package/lib/commonjs/dom/nodes/RenderNode.js.map +1 -1
- package/lib/commonjs/renderer/Canvas.js +19 -63
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/renderer/DependencyManager.js +0 -5
- package/lib/commonjs/renderer/DependencyManager.js.map +1 -1
- package/lib/commonjs/renderer/HostComponents.js.map +1 -1
- package/lib/commonjs/renderer/useCanvas.js +4 -18
- package/lib/commonjs/renderer/useCanvas.js.map +1 -1
- package/lib/commonjs/views/SkiaBaseWebView.js +7 -0
- package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
- package/lib/commonjs/views/SkiaDomView.js +152 -0
- package/lib/commonjs/views/SkiaDomView.js.map +1 -0
- package/lib/commonjs/views/SkiaDomView.web.js +55 -0
- package/lib/commonjs/views/SkiaDomView.web.js.map +1 -0
- package/lib/commonjs/views/SkiaPictureView.js +16 -2
- package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
- package/lib/commonjs/views/SkiaView.js +17 -2
- package/lib/commonjs/views/SkiaView.js.map +1 -1
- package/lib/commonjs/views/index.js +13 -0
- package/lib/commonjs/views/index.js.map +1 -1
- package/lib/commonjs/views/types.js.map +1 -1
- package/lib/module/dom/nodes/JsiSkDOM.js +56 -56
- package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
- package/lib/module/dom/nodes/RenderNode.js +1 -1
- package/lib/module/dom/nodes/RenderNode.js.map +1 -1
- package/lib/module/renderer/Canvas.js +20 -64
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/renderer/DependencyManager.js +0 -5
- package/lib/module/renderer/DependencyManager.js.map +1 -1
- package/lib/module/renderer/HostComponents.js.map +1 -1
- package/lib/module/renderer/useCanvas.js +2 -13
- package/lib/module/renderer/useCanvas.js.map +1 -1
- package/lib/module/views/SkiaBaseWebView.js +7 -0
- package/lib/module/views/SkiaBaseWebView.js.map +1 -1
- package/lib/module/views/SkiaDomView.js +128 -0
- package/lib/module/views/SkiaDomView.js.map +1 -0
- package/lib/module/views/SkiaDomView.web.js +41 -0
- package/lib/module/views/SkiaDomView.web.js.map +1 -0
- package/lib/module/views/SkiaPictureView.js +14 -2
- package/lib/module/views/SkiaPictureView.js.map +1 -1
- package/lib/module/views/SkiaView.js +15 -2
- package/lib/module/views/SkiaView.js.map +1 -1
- package/lib/module/views/index.js +1 -0
- package/lib/module/views/index.js.map +1 -1
- package/lib/module/views/types.js.map +1 -1
- package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +57 -64
- package/lib/typescript/src/renderer/Canvas.d.ts +5 -8
- package/lib/typescript/src/renderer/DependencyManager.d.ts +0 -2
- package/lib/typescript/src/renderer/HostComponents.d.ts +66 -3
- package/lib/typescript/src/renderer/useCanvas.d.ts +0 -6
- package/lib/typescript/src/views/SkiaBaseWebView.d.ts +4 -0
- package/lib/typescript/src/views/SkiaDomView.d.ts +31 -0
- package/lib/typescript/src/views/SkiaDomView.web.d.ts +7 -0
- package/lib/typescript/src/views/index.d.ts +1 -0
- package/lib/typescript/src/views/types.d.ts +12 -2
- package/libs/android/arm64-v8a/libskia.a +0 -0
- package/libs/android/arm64-v8a/libskottie.a +0 -0
- package/libs/android/arm64-v8a/libskparagraph.a +0 -0
- package/libs/android/arm64-v8a/libsksg.a +0 -0
- package/libs/android/arm64-v8a/libskshaper.a +0 -0
- package/libs/android/arm64-v8a/libskunicode.a +0 -0
- package/libs/android/arm64-v8a/libsvg.a +0 -0
- package/libs/android/armeabi-v7a/libskia.a +0 -0
- package/libs/android/armeabi-v7a/libskottie.a +0 -0
- package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
- package/libs/android/armeabi-v7a/libsksg.a +0 -0
- package/libs/android/armeabi-v7a/libskshaper.a +0 -0
- package/libs/android/armeabi-v7a/libskunicode.a +0 -0
- package/libs/android/armeabi-v7a/libsvg.a +0 -0
- package/libs/android/x86/libskia.a +0 -0
- package/libs/android/x86/libskottie.a +0 -0
- package/libs/android/x86/libskparagraph.a +0 -0
- package/libs/android/x86/libsksg.a +0 -0
- package/libs/android/x86/libskshaper.a +0 -0
- package/libs/android/x86/libskunicode.a +0 -0
- package/libs/android/x86/libsvg.a +0 -0
- package/libs/android/x86_64/libskia.a +0 -0
- package/libs/android/x86_64/libskottie.a +0 -0
- package/libs/android/x86_64/libskparagraph.a +0 -0
- package/libs/android/x86_64/libsksg.a +0 -0
- package/libs/android/x86_64/libskshaper.a +0 -0
- package/libs/android/x86_64/libskunicode.a +0 -0
- package/libs/android/x86_64/libsvg.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
- package/libs/ios/libskparagraph.xcframework/Info.plist +42 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
- package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
- package/libs/ios/libsksg.xcframework/Info.plist +5 -5
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
- package/libs/ios/libskunicode.xcframework/Info.plist +42 -0
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
- package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
- package/package.json +5 -3
- package/react-native-skia.podspec +3 -1
- package/src/dom/nodes/JsiSkDOM.ts +170 -56
- package/src/dom/nodes/RenderNode.ts +1 -1
- package/src/renderer/Canvas.tsx +32 -56
- package/src/renderer/DependencyManager.tsx +0 -5
- package/src/renderer/HostComponents.ts +152 -1
- package/src/renderer/useCanvas.ts +1 -15
- package/src/views/SkiaBaseWebView.tsx +4 -0
- package/src/views/SkiaDomView.tsx +120 -0
- package/src/views/SkiaDomView.web.tsx +37 -0
- package/src/views/SkiaPictureView.tsx +10 -2
- package/src/views/SkiaView.tsx +11 -3
- package/src/views/index.ts +1 -0
- package/src/views/types.ts +19 -2
- package/cpp/jsi/JsiSimpleValueWrapper.h +0 -99
- package/cpp/skia/include/c/sk_canvas.h +0 -159
- package/cpp/skia/include/c/sk_colorspace.h +0 -25
- package/cpp/skia/include/c/sk_data.h +0 -65
- package/cpp/skia/include/c/sk_image.h +0 -71
- package/cpp/skia/include/c/sk_imageinfo.h +0 -62
- package/cpp/skia/include/c/sk_maskfilter.h +0 -47
- package/cpp/skia/include/c/sk_matrix.h +0 -49
- package/cpp/skia/include/c/sk_paint.h +0 -145
- package/cpp/skia/include/c/sk_path.h +0 -102
- package/cpp/skia/include/c/sk_picture.h +0 -70
- package/cpp/skia/include/c/sk_shader.h +0 -143
- package/cpp/skia/include/c/sk_surface.h +0 -73
- package/cpp/skia/include/c/sk_types.h +0 -278
- package/cpp/skia/include/gpu/graphite/SkStuff.h +0 -47
- package/cpp/skia/include/private/SkNx.h +0 -430
- package/cpp/skia/include/private/SkNx_neon.h +0 -713
- package/cpp/skia/include/private/SkNx_sse.h +0 -823
- package/cpp/skia/include/sksl/DSLRuntimeEffects.h +0 -32
- package/cpp/skia/include/sksl/DSLWrapper.h +0 -77
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
|
|
2
|
+
#pragma once
|
|
3
|
+
|
|
4
|
+
#include "DrawingContext.h"
|
|
5
|
+
#include "JsiDomNode.h"
|
|
6
|
+
|
|
7
|
+
#include <memory>
|
|
8
|
+
#include <string>
|
|
9
|
+
|
|
10
|
+
namespace RNSkia {
|
|
11
|
+
|
|
12
|
+
class JsiBaseDomDeclarationNode : public JsiDomNode {
|
|
13
|
+
public:
|
|
14
|
+
JsiBaseDomDeclarationNode(std::shared_ptr<RNSkPlatformContext> context,
|
|
15
|
+
const char *type)
|
|
16
|
+
: JsiDomNode(context, type) {}
|
|
17
|
+
|
|
18
|
+
JSI_PROPERTY_GET(declarationType) {
|
|
19
|
+
return jsi::String::createFromUtf8(runtime, std::string(getType()));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(JsiBaseDomDeclarationNode,
|
|
23
|
+
declarationType),
|
|
24
|
+
JSI_EXPORT_PROP_GET(JsiDomNode, type))
|
|
25
|
+
|
|
26
|
+
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiDomNode, addChild),
|
|
27
|
+
JSI_EXPORT_FUNC(JsiDomNode, removeChild),
|
|
28
|
+
JSI_EXPORT_FUNC(JsiDomNode, insertChildBefore),
|
|
29
|
+
JSI_EXPORT_FUNC(JsiDomNode, setProps),
|
|
30
|
+
JSI_EXPORT_FUNC(JsiDomNode, setProp),
|
|
31
|
+
JSI_EXPORT_FUNC(JsiDomNode, dispose),
|
|
32
|
+
JSI_EXPORT_FUNC(JsiDomNode, children))
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
Called when rendering the tree to create all derived values from all nodes.
|
|
36
|
+
*/
|
|
37
|
+
virtual void decorateContext(DrawingContext *context) {
|
|
38
|
+
#if SKIA_DOM_DEBUG
|
|
39
|
+
printDebugInfo(context, "Begin Materialize");
|
|
40
|
+
#endif
|
|
41
|
+
// Materialize children first so that any inner nodes get the opportunity
|
|
42
|
+
// to calculate their state before this node continues.
|
|
43
|
+
for (auto &child : getChildren()) {
|
|
44
|
+
auto decl = std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child);
|
|
45
|
+
if (decl != nullptr) {
|
|
46
|
+
decl->decorateContext(context);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// decorate drawing context
|
|
51
|
+
decorate(context);
|
|
52
|
+
|
|
53
|
+
#if SKIA_DOM_DEBUG
|
|
54
|
+
printDebugInfo(context, "End Materialize");
|
|
55
|
+
#endif
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
protected:
|
|
59
|
+
/**
|
|
60
|
+
Override to implement materialization
|
|
61
|
+
*/
|
|
62
|
+
virtual void decorate(DrawingContext *context) = 0;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
Validates that only declaration nodes can be children
|
|
66
|
+
*/
|
|
67
|
+
void addChild(std::shared_ptr<JsiDomNode> child) override {
|
|
68
|
+
if (std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child) ==
|
|
69
|
+
nullptr) {
|
|
70
|
+
getContext()->raiseError(std::runtime_error(
|
|
71
|
+
"Cannot add a child of type \"" + std::string(child->getType()) +
|
|
72
|
+
"\" to a \"" + std::string(getType()) + "\"."));
|
|
73
|
+
}
|
|
74
|
+
JsiDomNode::addChild(child);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
Validates that only declaration nodes can be children
|
|
79
|
+
*/
|
|
80
|
+
void insertChildBefore(std::shared_ptr<JsiDomNode> child,
|
|
81
|
+
std::shared_ptr<JsiDomNode> before) override {
|
|
82
|
+
if (std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child) ==
|
|
83
|
+
nullptr) {
|
|
84
|
+
getContext()->raiseError(std::runtime_error(
|
|
85
|
+
"Cannot add a child of type \"" + std::string(child->getType()) +
|
|
86
|
+
"\" to a \"" + std::string(getType()) + "\"."));
|
|
87
|
+
}
|
|
88
|
+
JsiDomNode::insertChildBefore(child, before);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
template <typename T, typename ST>
|
|
93
|
+
class JsiDomDeclarationNode : public JsiBaseDomDeclarationNode {
|
|
94
|
+
public:
|
|
95
|
+
JsiDomDeclarationNode(std::shared_ptr<RNSkPlatformContext> context,
|
|
96
|
+
const char *type)
|
|
97
|
+
: JsiBaseDomDeclarationNode(context, type) {}
|
|
98
|
+
|
|
99
|
+
bool isChanged(DrawingContext *context) {
|
|
100
|
+
return getCurrent() == nullptr || context->isChanged() ||
|
|
101
|
+
getPropsContainer()->isChanged();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
Returns the inner element
|
|
106
|
+
*/
|
|
107
|
+
ST getCurrent() { return _current; }
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
Clears the current
|
|
111
|
+
*/
|
|
112
|
+
void clearCurrent() { _current = nullptr; }
|
|
113
|
+
|
|
114
|
+
protected:
|
|
115
|
+
/**
|
|
116
|
+
Sets the current value
|
|
117
|
+
*/
|
|
118
|
+
void setCurrent(ST c) { _current = c; }
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
Returns a required child image filter by index
|
|
122
|
+
*/
|
|
123
|
+
ST requireChild(size_t index) {
|
|
124
|
+
auto filter = optionalChild(index);
|
|
125
|
+
if (filter == nullptr) {
|
|
126
|
+
throw std::runtime_error("Expected child node at index " +
|
|
127
|
+
std::to_string(index) + " in node " + getType());
|
|
128
|
+
}
|
|
129
|
+
return filter;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
Returns an optional child image filter by index
|
|
134
|
+
*/
|
|
135
|
+
ST optionalChild(size_t index) {
|
|
136
|
+
if (index >= getChildren().size()) {
|
|
137
|
+
return nullptr;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
auto child = getChildren()[index];
|
|
141
|
+
// Support all types here!! ImageFilters, ColorFilters
|
|
142
|
+
// package/src/dom/nodes/paint/ImageFilters.ts#80
|
|
143
|
+
return resolve(child);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
Returns child as inner type or nullptr
|
|
148
|
+
*/
|
|
149
|
+
virtual ST resolve(std::shared_ptr<JsiDomNode> child) = 0;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
Sets or composes the image filter
|
|
153
|
+
*/
|
|
154
|
+
virtual void set(DrawingContext *context, ST imageFilter) = 0;
|
|
155
|
+
|
|
156
|
+
void removeChild(std::shared_ptr<JsiDomNode> child) override {
|
|
157
|
+
JsiBaseDomDeclarationNode::removeChild(child);
|
|
158
|
+
clearCurrent();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
void addChild(std::shared_ptr<JsiDomNode> child) override {
|
|
162
|
+
JsiBaseDomDeclarationNode::addChild(child);
|
|
163
|
+
clearCurrent();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
void insertChildBefore(std::shared_ptr<JsiDomNode> child,
|
|
167
|
+
std::shared_ptr<JsiDomNode> before) override {
|
|
168
|
+
JsiBaseDomDeclarationNode::insertChildBefore(child, before);
|
|
169
|
+
clearCurrent();
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
private:
|
|
173
|
+
ST _current;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "JsiDomRenderNode.h"
|
|
4
|
+
#include "JsiPaintNode.h"
|
|
5
|
+
|
|
6
|
+
#include <memory>
|
|
7
|
+
|
|
8
|
+
namespace RNSkia {
|
|
9
|
+
|
|
10
|
+
class JsiDomDrawingNode : public JsiDomRenderNode {
|
|
11
|
+
public:
|
|
12
|
+
JsiDomDrawingNode(std::shared_ptr<RNSkPlatformContext> context,
|
|
13
|
+
const char *type)
|
|
14
|
+
: JsiDomRenderNode(context, type) {}
|
|
15
|
+
|
|
16
|
+
protected:
|
|
17
|
+
void defineProperties(NodePropsContainer *container) override {
|
|
18
|
+
JsiDomRenderNode::defineProperties(container);
|
|
19
|
+
container->defineProperty(std::make_shared<PaintProp>());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
Override to implement drawing.
|
|
24
|
+
*/
|
|
25
|
+
virtual void draw(DrawingContext *context) = 0;
|
|
26
|
+
|
|
27
|
+
void renderNode(DrawingContext *context) override {
|
|
28
|
+
#if SKIA_DOM_DEBUG
|
|
29
|
+
printDebugInfo(context, "Begin Draw", 1);
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
#if SKIA_DOM_DEBUG
|
|
33
|
+
printDebugInfo(context, context->getDebugDescription(), 2);
|
|
34
|
+
#endif
|
|
35
|
+
draw(context);
|
|
36
|
+
|
|
37
|
+
// Draw once more for each child paint node
|
|
38
|
+
for (auto &child : getChildren()) {
|
|
39
|
+
auto ptr = std::dynamic_pointer_cast<JsiPaintNode>(child);
|
|
40
|
+
if (ptr != nullptr) {
|
|
41
|
+
draw(ptr->getDrawingContext());
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
#if SKIA_DOM_DEBUG
|
|
45
|
+
printDebugInfo(context, "End Draw", 1);
|
|
46
|
+
#endif
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "JsiHostObject.h"
|
|
4
|
+
#include "NodeProp.h"
|
|
5
|
+
#include "NodePropsContainer.h"
|
|
6
|
+
|
|
7
|
+
#include <memory>
|
|
8
|
+
#include <string>
|
|
9
|
+
#include <utility>
|
|
10
|
+
#include <vector>
|
|
11
|
+
|
|
12
|
+
#include "RNSkPlatformContext.h"
|
|
13
|
+
|
|
14
|
+
namespace RNSkia {
|
|
15
|
+
|
|
16
|
+
template <class TNode> class JsiDomNodeCtor {
|
|
17
|
+
public:
|
|
18
|
+
/**
|
|
19
|
+
Constructor to add to the Api object
|
|
20
|
+
*/
|
|
21
|
+
static const jsi::HostFunctionType
|
|
22
|
+
createCtor(std::shared_ptr<RNSkPlatformContext> context) {
|
|
23
|
+
return JSI_HOST_FUNCTION_LAMBDA {
|
|
24
|
+
auto node = std::make_shared<TNode>(context);
|
|
25
|
+
node->initializeNode(runtime, thisValue, arguments, count);
|
|
26
|
+
return jsi::Object::createFromHostObject(runtime, std::move(node));
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
static std::atomic<size_t> NodeIdent = 1000;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
Implements an abstract base class for nodes in the Skia Reconciler. This node
|
|
35
|
+
coresponds to the native implementation of the Node.ts class in Javascript.
|
|
36
|
+
*/
|
|
37
|
+
class JsiDomNode : public JsiHostObject,
|
|
38
|
+
public std::enable_shared_from_this<JsiDomNode> {
|
|
39
|
+
public:
|
|
40
|
+
/**
|
|
41
|
+
Contructor. Takes as parameters the values comming from the JS world that
|
|
42
|
+
initialized the class.
|
|
43
|
+
*/
|
|
44
|
+
JsiDomNode(std::shared_ptr<RNSkPlatformContext> context, const char *type)
|
|
45
|
+
: _type(type), _context(context), _nodeId(NodeIdent++), JsiHostObject() {}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
Called when creating the node, resolves properties from the node constructor.
|
|
49
|
+
These properties are materialized, ie. no animated values or anything.
|
|
50
|
+
*/
|
|
51
|
+
JSI_HOST_FUNCTION(initializeNode) {
|
|
52
|
+
return setProps(runtime, thisValue, arguments, count);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
JS-function for setting the properties from the JS reconciler on the node.
|
|
57
|
+
*/
|
|
58
|
+
JSI_HOST_FUNCTION(setProps) {
|
|
59
|
+
if (count == 1) {
|
|
60
|
+
// Initialize properties container
|
|
61
|
+
setProps(runtime, getArgumentAsObject(runtime, arguments, count, 0));
|
|
62
|
+
} else {
|
|
63
|
+
setEmptyProps();
|
|
64
|
+
}
|
|
65
|
+
return jsi::Value::undefined();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
Empty setProp implementation - compatibility with JS node
|
|
70
|
+
*/
|
|
71
|
+
JSI_HOST_FUNCTION(setProp) { return jsi::Value::undefined(); }
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
JS Function to be called when the node is no longer part of the reconciler
|
|
75
|
+
tree. Use for cleaning up.
|
|
76
|
+
*/
|
|
77
|
+
JSI_HOST_FUNCTION(dispose) {
|
|
78
|
+
dispose();
|
|
79
|
+
return jsi::Value::undefined();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
JS Function for adding a child node to this node.
|
|
84
|
+
*/
|
|
85
|
+
JSI_HOST_FUNCTION(addChild) {
|
|
86
|
+
// child: Node<unknown>
|
|
87
|
+
auto newChild =
|
|
88
|
+
getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
|
|
89
|
+
addChild(newChild);
|
|
90
|
+
return jsi::Value::undefined();
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/*
|
|
94
|
+
JS Function for removing a child node from this node
|
|
95
|
+
*/
|
|
96
|
+
JSI_HOST_FUNCTION(removeChild) {
|
|
97
|
+
auto child =
|
|
98
|
+
getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
|
|
99
|
+
removeChild(child);
|
|
100
|
+
return jsi::Value::undefined();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
JS Function for insering a child node to a specific location in the children
|
|
105
|
+
array on this node
|
|
106
|
+
*/
|
|
107
|
+
JSI_HOST_FUNCTION(insertChildBefore) {
|
|
108
|
+
// child: Node<unknown>, before: Node<unknown>
|
|
109
|
+
auto child =
|
|
110
|
+
getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
|
|
111
|
+
auto before =
|
|
112
|
+
getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 1);
|
|
113
|
+
insertChildBefore(child, before);
|
|
114
|
+
return jsi::Value::undefined();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
JS Function for getting child nodes for this node
|
|
119
|
+
*/
|
|
120
|
+
JSI_HOST_FUNCTION(children) {
|
|
121
|
+
auto array = jsi::Array(runtime, _children.size());
|
|
122
|
+
|
|
123
|
+
size_t index = 0;
|
|
124
|
+
for (auto child : _children) {
|
|
125
|
+
array.setValueAtIndex(runtime, index++, child->asHostObject(runtime));
|
|
126
|
+
}
|
|
127
|
+
return array;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
JS Property for getting the type of node
|
|
132
|
+
*/
|
|
133
|
+
JSI_PROPERTY_GET(type) {
|
|
134
|
+
return jsi::String::createFromUtf8(runtime, getType());
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(JsiDomNode, type))
|
|
138
|
+
|
|
139
|
+
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiDomNode, setProps),
|
|
140
|
+
JSI_EXPORT_FUNC(JsiDomNode, setProp),
|
|
141
|
+
JSI_EXPORT_FUNC(JsiDomNode, addChild),
|
|
142
|
+
JSI_EXPORT_FUNC(JsiDomNode, removeChild),
|
|
143
|
+
JSI_EXPORT_FUNC(JsiDomNode, insertChildBefore),
|
|
144
|
+
JSI_EXPORT_FUNC(JsiDomNode, children),
|
|
145
|
+
JSI_EXPORT_FUNC(JsiDomNode, dispose))
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
Returns the node type.
|
|
149
|
+
*/
|
|
150
|
+
const char *getType() { return _type; }
|
|
151
|
+
|
|
152
|
+
size_t getNodeId() { return _nodeId; }
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
Returns the container for node properties
|
|
156
|
+
*/
|
|
157
|
+
NodePropsContainer *getPropsContainer() { return _propsContainer.get(); }
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
Callback that will be called when the node is disposed - typically registered
|
|
161
|
+
from the dependency manager so that nodes can be removed and unsubscribed
|
|
162
|
+
from when removed from the reconciler tree.
|
|
163
|
+
*/
|
|
164
|
+
void setDisposeCallback(std::function<void()> disposeCallback) {
|
|
165
|
+
_disposeCallback = disposeCallback;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
Updates any pending property changes in all nodes and child nodes. This
|
|
170
|
+
function will swap any pending property changes in this and children with any
|
|
171
|
+
waiting values that has been set by the javascript thread. Props will also be
|
|
172
|
+
marked as changed so that we can calculate wether updates are required or
|
|
173
|
+
not.
|
|
174
|
+
*/
|
|
175
|
+
void commitPendingChanges() {
|
|
176
|
+
if (_propsContainer != nullptr) {
|
|
177
|
+
_propsContainer->updatePendingValues();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
for (auto &child : _children) {
|
|
181
|
+
child->commitPendingChanges();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
When pending properties has been updated and all rendering is done, we call
|
|
187
|
+
this function to mark any changes as processed. This call also resolves all
|
|
188
|
+
child nodes
|
|
189
|
+
*/
|
|
190
|
+
virtual void resetPendingChanges() {
|
|
191
|
+
// Mark self as resolved
|
|
192
|
+
if (_propsContainer != nullptr) {
|
|
193
|
+
_propsContainer->markAsResolved();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Resolve children
|
|
197
|
+
for (auto &child : _children) {
|
|
198
|
+
child->resetPendingChanges();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
protected:
|
|
203
|
+
/**
|
|
204
|
+
Override to define properties in node implementations
|
|
205
|
+
*/
|
|
206
|
+
virtual void defineProperties(NodePropsContainer *container) {}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
Returns the platform context
|
|
210
|
+
*/
|
|
211
|
+
std::shared_ptr<RNSkPlatformContext> getContext() { return _context; }
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
Returns this node as a host object that can be returned to the JS side.
|
|
215
|
+
*/
|
|
216
|
+
jsi::Object asHostObject(jsi::Runtime &runtime) {
|
|
217
|
+
return jsi::Object::createFromHostObject(runtime, shared_from_this());
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
Native implementation of the set properties method. This is called from the
|
|
222
|
+
reconciler when properties are set due to changes in React. This method will
|
|
223
|
+
always call the onPropsSet method as a signal that things have changed.
|
|
224
|
+
*/
|
|
225
|
+
void setProps(jsi::Runtime &runtime, jsi::Object &&props) {
|
|
226
|
+
if (_propsContainer == nullptr) {
|
|
227
|
+
|
|
228
|
+
// Initialize properties container
|
|
229
|
+
_propsContainer = std::make_shared<NodePropsContainer>(getType());
|
|
230
|
+
|
|
231
|
+
// Ask sub classes to define their properties
|
|
232
|
+
defineProperties(_propsContainer.get());
|
|
233
|
+
}
|
|
234
|
+
// Update properties container
|
|
235
|
+
_propsContainer->setProps(runtime, std::move(props));
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
Called for components that has no properties
|
|
240
|
+
*/
|
|
241
|
+
void setEmptyProps() {
|
|
242
|
+
if (_propsContainer == nullptr) {
|
|
243
|
+
|
|
244
|
+
// Initialize properties container
|
|
245
|
+
_propsContainer = std::make_shared<NodePropsContainer>(getType());
|
|
246
|
+
|
|
247
|
+
// Ask sub classes to define their properties
|
|
248
|
+
defineProperties(_propsContainer.get());
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
Returns all child JsiDomNodes for this node.
|
|
254
|
+
*/
|
|
255
|
+
const std::vector<std::shared_ptr<JsiDomNode>> &getChildren() {
|
|
256
|
+
std::lock_guard<std::mutex> lock(_childrenLock);
|
|
257
|
+
return _children;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
Adds a child node to the array of children for this node
|
|
262
|
+
*/
|
|
263
|
+
virtual void addChild(std::shared_ptr<JsiDomNode> child) {
|
|
264
|
+
std::lock_guard<std::mutex> lock(_childrenLock);
|
|
265
|
+
_children.push_back(child);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
Inserts a child node before a given child node in the children array for this
|
|
270
|
+
node
|
|
271
|
+
*/
|
|
272
|
+
virtual void insertChildBefore(std::shared_ptr<JsiDomNode> child,
|
|
273
|
+
std::shared_ptr<JsiDomNode> before) {
|
|
274
|
+
auto position = std::find(_children.begin(), _children.end(), before);
|
|
275
|
+
std::lock_guard<std::mutex> lock(_childrenLock);
|
|
276
|
+
_children.insert(position, child);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
Removes a child. Removing a child will remove the child from the array of
|
|
281
|
+
children and call dispose on the child node.
|
|
282
|
+
*/
|
|
283
|
+
virtual void removeChild(std::shared_ptr<JsiDomNode> child) {
|
|
284
|
+
std::lock_guard<std::mutex> lock(_childrenLock);
|
|
285
|
+
// Delete child itself
|
|
286
|
+
_children.erase(
|
|
287
|
+
std::remove_if(_children.begin(), _children.end(),
|
|
288
|
+
[child](const auto &node) { return node == child; }),
|
|
289
|
+
_children.end());
|
|
290
|
+
|
|
291
|
+
// We don't need to call dispose since the dtor handles disposing
|
|
292
|
+
child->dispose();
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
Called when a node has been removed from the dom tree and needs to be cleaned
|
|
297
|
+
up.
|
|
298
|
+
*/
|
|
299
|
+
virtual void dispose() {
|
|
300
|
+
if (_isDisposed) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
_isDisposed = true;
|
|
305
|
+
|
|
306
|
+
// Callback signaling that we're done
|
|
307
|
+
if (_disposeCallback != nullptr) {
|
|
308
|
+
_disposeCallback();
|
|
309
|
+
_disposeCallback = nullptr;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Clear props
|
|
313
|
+
if (_propsContainer != nullptr) {
|
|
314
|
+
_propsContainer->dispose();
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Remove children
|
|
318
|
+
std::vector<std::shared_ptr<JsiDomNode>> tmp;
|
|
319
|
+
{
|
|
320
|
+
std::lock_guard<std::mutex> lock(_childrenLock);
|
|
321
|
+
tmp.reserve(_children.size());
|
|
322
|
+
for (auto &child : _children) {
|
|
323
|
+
tmp.push_back(child);
|
|
324
|
+
}
|
|
325
|
+
_children.clear();
|
|
326
|
+
}
|
|
327
|
+
for (auto &child : tmp) {
|
|
328
|
+
child->dispose();
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
#if SKIA_DOM_DEBUG
|
|
333
|
+
std::string getLevelIndentation(DrawingContext *ctx, size_t indentation = 0) {
|
|
334
|
+
return std::string((ctx->getLevel() + indentation), ' ');
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
void printDebugInfo(DrawingContext *context, const std::string &message,
|
|
338
|
+
size_t indentation = 0) {
|
|
339
|
+
RNSkLogger::logToConsole("%s%s %lu: %s",
|
|
340
|
+
getLevelIndentation(context, indentation).c_str(),
|
|
341
|
+
getType(), getNodeId(), message.c_str());
|
|
342
|
+
}
|
|
343
|
+
#endif
|
|
344
|
+
|
|
345
|
+
private:
|
|
346
|
+
const char *_type;
|
|
347
|
+
std::shared_ptr<RNSkPlatformContext> _context;
|
|
348
|
+
|
|
349
|
+
std::shared_ptr<NodePropsContainer> _propsContainer;
|
|
350
|
+
|
|
351
|
+
std::function<void()> _disposeCallback;
|
|
352
|
+
|
|
353
|
+
std::vector<std::shared_ptr<JsiDomNode>> _children;
|
|
354
|
+
std::mutex _childrenLock;
|
|
355
|
+
|
|
356
|
+
std::atomic<bool> _isDisposed = {false};
|
|
357
|
+
|
|
358
|
+
size_t _nodeId;
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
} // namespace RNSkia
|