@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,227 @@
|
|
|
1
|
+
#include "DrawingContext.h"
|
|
2
|
+
|
|
3
|
+
namespace RNSkia {
|
|
4
|
+
|
|
5
|
+
DrawingContext::DrawingContext(std::shared_ptr<SkPaint> paint, double opacity)
|
|
6
|
+
: DrawingContext("root") {
|
|
7
|
+
_paint = paint;
|
|
8
|
+
_opacity = opacity;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
DrawingContext::DrawingContext(DrawingContext *parent, const char *source)
|
|
12
|
+
: DrawingContext(source) {
|
|
13
|
+
_parent = parent;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
std::shared_ptr<DrawingContext>
|
|
17
|
+
DrawingContext::inheritContext(const char *source) {
|
|
18
|
+
auto result = std::make_shared<DrawingContext>(this, source);
|
|
19
|
+
_children.push_back(result);
|
|
20
|
+
return result;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
size_t DrawingContext::getLevel() {
|
|
24
|
+
if (_parent != nullptr) {
|
|
25
|
+
return _parent->getLevel() + 1;
|
|
26
|
+
}
|
|
27
|
+
return 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
std::string DrawingContext::getDebugDescription() {
|
|
31
|
+
std::string v = "ctx for " + std::string(_source) + ":";
|
|
32
|
+
|
|
33
|
+
if (_paint != nullptr) {
|
|
34
|
+
auto clr = _paint->getColor();
|
|
35
|
+
auto a = SkColorGetA(clr);
|
|
36
|
+
auto r = SkColorGetR(clr);
|
|
37
|
+
auto g = SkColorGetG(clr);
|
|
38
|
+
auto b = SkColorGetB(clr);
|
|
39
|
+
|
|
40
|
+
if (r > 0 || g > 0 || b > 0) {
|
|
41
|
+
v += " color:rgba(" + std::to_string(r) + ", " + std::to_string(g) +
|
|
42
|
+
", " + std::to_string(b) + ", " + std::to_string(a) + ")";
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (_paint->getMaskFilter() != nullptr) {
|
|
46
|
+
v += " maskFilter:set";
|
|
47
|
+
}
|
|
48
|
+
auto blendMode = _paint->getBlendMode_or(SkBlendMode::kSrc);
|
|
49
|
+
if (blendMode != SkBlendMode::kSrc) {
|
|
50
|
+
v += " blendMode:" + std::to_string(static_cast<size_t>(blendMode));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
v += " opacity:" + std::to_string(_opacity);
|
|
54
|
+
if (_paint->getPathEffect() != nullptr) {
|
|
55
|
+
v += " [PathEffect]";
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
v = v + "[inherited] " +
|
|
59
|
+
(_parent != nullptr ? _parent->getDebugDescription() : "");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
v = v + "\n";
|
|
63
|
+
|
|
64
|
+
return v;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
Invalidate cache
|
|
69
|
+
*/
|
|
70
|
+
void DrawingContext::markAsChanged() {
|
|
71
|
+
markChildrenAsChanged();
|
|
72
|
+
_paint = nullptr;
|
|
73
|
+
_isChanged = true;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
Call to reset invalidate flag after render cycle
|
|
78
|
+
*/
|
|
79
|
+
void DrawingContext::resetChangedFlag() { _isChanged = false; }
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
Dispose and remove the drawing context from its parent.
|
|
83
|
+
*/
|
|
84
|
+
void DrawingContext::dispose() {
|
|
85
|
+
if (_parent != nullptr) {
|
|
86
|
+
auto position = std::find(_parent->_children.begin(),
|
|
87
|
+
_parent->_children.end(), shared_from_this());
|
|
88
|
+
|
|
89
|
+
if (position != _parent->_children.end()) {
|
|
90
|
+
_parent->_children.erase(position);
|
|
91
|
+
}
|
|
92
|
+
// TODO: This is called from the JS thread so we need somehow to avoid
|
|
93
|
+
// rendering after setting this to null, and we also need to protect this
|
|
94
|
+
// section.
|
|
95
|
+
_parent = nullptr;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
Returns true if the current cache is changed
|
|
101
|
+
*/
|
|
102
|
+
bool DrawingContext::isChanged() { return _isChanged; }
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
Get/Sets the canvas object
|
|
106
|
+
*/
|
|
107
|
+
SkCanvas *DrawingContext::getCanvas() {
|
|
108
|
+
if (_parent != nullptr) {
|
|
109
|
+
return _parent->getCanvas();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return _canvas;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
Sets the canvas
|
|
117
|
+
*/
|
|
118
|
+
void DrawingContext::setCanvas(SkCanvas *canvas) { _canvas = canvas; }
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
Gets the paint object
|
|
122
|
+
*/
|
|
123
|
+
std::shared_ptr<const SkPaint> DrawingContext::getPaint() {
|
|
124
|
+
if (_paint != nullptr) {
|
|
125
|
+
return _paint;
|
|
126
|
+
}
|
|
127
|
+
return _parent->getPaint();
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
To be able to mutate and change the paint in a context we need to mutate the
|
|
132
|
+
underlying paint object - otherwise we'll just use the parent paint object
|
|
133
|
+
(to avoid having to create multiple paint objects for nodes that does not
|
|
134
|
+
change the paint).
|
|
135
|
+
*/
|
|
136
|
+
std::shared_ptr<SkPaint> DrawingContext::getMutablePaint() {
|
|
137
|
+
if (_paint == nullptr) {
|
|
138
|
+
auto parentPaint = _parent->getPaint();
|
|
139
|
+
_paint = std::make_shared<SkPaint>(*parentPaint);
|
|
140
|
+
_opacity = _parent->getOpacity();
|
|
141
|
+
}
|
|
142
|
+
// Calling the getMutablePaint accessor implies that the paint
|
|
143
|
+
// is about to be mutatet and will therefore invalidate
|
|
144
|
+
// any child contexts to pick up changes from this context as
|
|
145
|
+
// the parent context.
|
|
146
|
+
markChildrenAsChanged();
|
|
147
|
+
return _paint;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
Sets the paint in the current sub context
|
|
152
|
+
*/
|
|
153
|
+
void DrawingContext::setMutablePaint(std::shared_ptr<SkPaint> paint) {
|
|
154
|
+
_paint = paint;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
Getd the opacity value
|
|
159
|
+
*/
|
|
160
|
+
double DrawingContext::getOpacity() {
|
|
161
|
+
if (_paint == nullptr) {
|
|
162
|
+
return _parent->getOpacity();
|
|
163
|
+
}
|
|
164
|
+
return _opacity;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
Sets the opacity value
|
|
169
|
+
*/
|
|
170
|
+
void DrawingContext::setOpacity(double opacity) {
|
|
171
|
+
getMutablePaint()->setAlphaf(_opacity);
|
|
172
|
+
_opacity = opacity;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
Clears the opacity value
|
|
177
|
+
*/
|
|
178
|
+
void DrawingContext::clearOpacity() {
|
|
179
|
+
if (_parent != nullptr) {
|
|
180
|
+
_opacity = _parent->getOpacity();
|
|
181
|
+
} else {
|
|
182
|
+
_opacity = 1.0;
|
|
183
|
+
}
|
|
184
|
+
markChildrenAsChanged();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
float DrawingContext::getScaledWidth() {
|
|
188
|
+
if (_parent != nullptr) {
|
|
189
|
+
return _parent->getScaledWidth();
|
|
190
|
+
}
|
|
191
|
+
return _scaledWidth;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
float DrawingContext::getScaledHeight() {
|
|
195
|
+
if (_parent != nullptr) {
|
|
196
|
+
return _parent->getScaledHeight();
|
|
197
|
+
}
|
|
198
|
+
return _scaledHeight;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
void DrawingContext::setScaledWidth(float v) { _scaledWidth = v; }
|
|
202
|
+
void DrawingContext::setScaledHeight(float v) { _scaledHeight = v; }
|
|
203
|
+
|
|
204
|
+
void DrawingContext::setRequestRedraw(std::function<void()> &&requestRedraw) {
|
|
205
|
+
if (_parent != nullptr) {
|
|
206
|
+
_parent->setRequestRedraw(std::move(requestRedraw));
|
|
207
|
+
} else {
|
|
208
|
+
_requestRedraw = std::move(requestRedraw);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const std::function<void()> &DrawingContext::getRequestRedraw() {
|
|
213
|
+
if (_parent != nullptr) {
|
|
214
|
+
return _parent->getRequestRedraw();
|
|
215
|
+
}
|
|
216
|
+
return _requestRedraw;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
DrawingContext::DrawingContext(const char *source) { _source = source; }
|
|
220
|
+
|
|
221
|
+
void DrawingContext::markChildrenAsChanged() {
|
|
222
|
+
for (auto &child : _children) {
|
|
223
|
+
child->markAsChanged();
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "JsiHostObject.h"
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <utility>
|
|
8
|
+
#include <vector>
|
|
9
|
+
|
|
10
|
+
#pragma clang diagnostic push
|
|
11
|
+
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
12
|
+
|
|
13
|
+
#include <SkCanvas.h>
|
|
14
|
+
#include <SkPaint.h>
|
|
15
|
+
|
|
16
|
+
#pragma clang diagnostic pop
|
|
17
|
+
|
|
18
|
+
namespace RNSkia {
|
|
19
|
+
|
|
20
|
+
class DrawingContext : public std::enable_shared_from_this<DrawingContext> {
|
|
21
|
+
public:
|
|
22
|
+
/**
|
|
23
|
+
Creates a root drawing context with paint and opacity
|
|
24
|
+
*/
|
|
25
|
+
DrawingContext(std::shared_ptr<SkPaint> paint, double opacity);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
Initilalizes a new draw context.
|
|
29
|
+
*/
|
|
30
|
+
DrawingContext(DrawingContext *parent, const char *source);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
Factory for creating a child context that inherits from this context
|
|
34
|
+
*/
|
|
35
|
+
std::shared_ptr<DrawingContext> inheritContext(const char *source);
|
|
36
|
+
|
|
37
|
+
size_t getLevel();
|
|
38
|
+
|
|
39
|
+
std::string getDebugDescription();
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
Mark the drawing context and any child contexts as changed
|
|
43
|
+
*/
|
|
44
|
+
void markAsChanged();
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
Call to reset invalidate flag after render cycle
|
|
48
|
+
*/
|
|
49
|
+
void resetChangedFlag();
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
Dispose and remove the drawing context from its parent.
|
|
53
|
+
*/
|
|
54
|
+
void dispose();
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
Returns true if the current cache is changed
|
|
58
|
+
*/
|
|
59
|
+
bool isChanged();
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
Get/Sets the canvas object
|
|
63
|
+
*/
|
|
64
|
+
SkCanvas *getCanvas();
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
Sets the canvas
|
|
68
|
+
*/
|
|
69
|
+
void setCanvas(SkCanvas *canvas);
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
Gets the paint object
|
|
73
|
+
*/
|
|
74
|
+
std::shared_ptr<const SkPaint> getPaint();
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
To be able to mutate and change the paint in a context we need to mutate the
|
|
78
|
+
underlying paint object - otherwise we'll just use the parent paint object
|
|
79
|
+
(to avoid having to create multiple paint objects for nodes that does not
|
|
80
|
+
change the paint).
|
|
81
|
+
*/
|
|
82
|
+
std::shared_ptr<SkPaint> getMutablePaint();
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
Sets the paint in the current sub context
|
|
86
|
+
*/
|
|
87
|
+
void setMutablePaint(std::shared_ptr<SkPaint> paint);
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
Getd the opacity value
|
|
91
|
+
*/
|
|
92
|
+
double getOpacity();
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
Sets the opacity value
|
|
96
|
+
*/
|
|
97
|
+
void setOpacity(double opacity);
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
Clears the opacity
|
|
101
|
+
*/
|
|
102
|
+
void clearOpacity();
|
|
103
|
+
|
|
104
|
+
float getScaledWidth();
|
|
105
|
+
|
|
106
|
+
float getScaledHeight();
|
|
107
|
+
|
|
108
|
+
void setScaledWidth(float v);
|
|
109
|
+
void setScaledHeight(float v);
|
|
110
|
+
|
|
111
|
+
void setRequestRedraw(std::function<void()> &&requestRedraw);
|
|
112
|
+
const std::function<void()> &getRequestRedraw();
|
|
113
|
+
|
|
114
|
+
private:
|
|
115
|
+
explicit DrawingContext(const char *source);
|
|
116
|
+
|
|
117
|
+
void markChildrenAsChanged();
|
|
118
|
+
|
|
119
|
+
bool _isChanged = true;
|
|
120
|
+
|
|
121
|
+
std::shared_ptr<SkPaint> _paint;
|
|
122
|
+
double _opacity = 1.0f;
|
|
123
|
+
|
|
124
|
+
SkCanvas *_canvas = nullptr;
|
|
125
|
+
const char *_source;
|
|
126
|
+
|
|
127
|
+
DrawingContext *_parent = nullptr;
|
|
128
|
+
std::vector<std::shared_ptr<DrawingContext>> _children;
|
|
129
|
+
|
|
130
|
+
float _scaledWidth = -1;
|
|
131
|
+
float _scaledHeight = -1;
|
|
132
|
+
|
|
133
|
+
std::function<void()> _requestRedraw;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "JsiHostObject.h"
|
|
4
|
+
|
|
5
|
+
#include "RNSkPlatformContext.h"
|
|
6
|
+
|
|
7
|
+
#include "JsiDomNode.h"
|
|
8
|
+
|
|
9
|
+
#include <map>
|
|
10
|
+
#include <memory>
|
|
11
|
+
#include <set>
|
|
12
|
+
#include <string>
|
|
13
|
+
#include <utility>
|
|
14
|
+
#include <vector>
|
|
15
|
+
|
|
16
|
+
namespace RNSkia {
|
|
17
|
+
|
|
18
|
+
static PropId PropNameSelector = JsiPropId::get("selector");
|
|
19
|
+
static PropId PropNameValue = JsiPropId::get("value");
|
|
20
|
+
|
|
21
|
+
class JsiDependencyManager
|
|
22
|
+
: public JsiHostObject,
|
|
23
|
+
public std::enable_shared_from_this<JsiDependencyManager> {
|
|
24
|
+
public:
|
|
25
|
+
JsiDependencyManager(std::shared_ptr<RNSkPlatformContext> context,
|
|
26
|
+
jsi::Object &®isterValuesCallback)
|
|
27
|
+
: _registerValuesCallback(std::move(registerValuesCallback)),
|
|
28
|
+
JsiHostObject() {}
|
|
29
|
+
|
|
30
|
+
~JsiDependencyManager() { unsubscribeAll(); }
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
Call to unsubscribe all value listeners from the given node based on the
|
|
34
|
+
current list of subscriptions for the node. This function is typically called
|
|
35
|
+
when the node is unmounted or when one or more properties have changed. NOTE:
|
|
36
|
+
In this implementation we call unsubscribe directly without going through the
|
|
37
|
+
JSI method - but the method is kept for compatibility with the JS
|
|
38
|
+
implementation
|
|
39
|
+
*/
|
|
40
|
+
JSI_HOST_FUNCTION(unsubscribeNode) {
|
|
41
|
+
// (node: Node<unknown>)
|
|
42
|
+
auto node =
|
|
43
|
+
getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
|
|
44
|
+
unsubscribeNode(node.get());
|
|
45
|
+
return jsi::Value::undefined();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
Adds listeners to the provided values so that the node is notified when a
|
|
50
|
+
value changes.
|
|
51
|
+
*/
|
|
52
|
+
JSI_HOST_FUNCTION(subscribeNode) {
|
|
53
|
+
// subscribeNode<P>(node: Node<unknown>, props: AnimatedProps<P>)
|
|
54
|
+
auto node =
|
|
55
|
+
getArgumentAsHostObject<JsiDomNode>(runtime, arguments, count, 0);
|
|
56
|
+
auto nextProps = getArgumentAsObject(runtime, arguments, count, 1);
|
|
57
|
+
|
|
58
|
+
// Save unsubscribe callbacks
|
|
59
|
+
std::vector<
|
|
60
|
+
std::pair<std::shared_ptr<RNSkReadonlyValue>, std::function<void()>>>
|
|
61
|
+
unsubscribers;
|
|
62
|
+
|
|
63
|
+
// Enumerate registered keys for the given node to only handle known
|
|
64
|
+
// properties
|
|
65
|
+
for (const auto &propMapping :
|
|
66
|
+
node->getPropsContainer()->getMappedProperties()) {
|
|
67
|
+
auto key = propMapping.first;
|
|
68
|
+
auto jsValue = nextProps.getProperty(runtime, key);
|
|
69
|
+
JsiValue nativeValue(runtime, jsValue);
|
|
70
|
+
|
|
71
|
+
if (isAnimatedValue(nativeValue)) {
|
|
72
|
+
// Handle Skia Animation Values
|
|
73
|
+
auto animatedValue = getAnimatedValue(nativeValue);
|
|
74
|
+
auto unsubscribe = animatedValue->addListener(
|
|
75
|
+
[animatedValue, propMapping](jsi::Runtime &runtime) {
|
|
76
|
+
// Get value from animation value
|
|
77
|
+
auto nextJsValue = animatedValue->getCurrent(runtime);
|
|
78
|
+
// Update all props that listens to this animation value
|
|
79
|
+
for (auto &prop : propMapping.second) {
|
|
80
|
+
prop->updateValue(runtime, nextJsValue);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// Save unsubscribe methods
|
|
85
|
+
unsubscribers.push_back(std::make_pair(animatedValue, unsubscribe));
|
|
86
|
+
|
|
87
|
+
} else if (isSelector(nativeValue)) {
|
|
88
|
+
// Handle Skia Animation Value Selectors
|
|
89
|
+
auto animatedValue = std::dynamic_pointer_cast<RNSkReadonlyValue>(
|
|
90
|
+
nativeValue.getValue(PropNameValue).getAsHostObject());
|
|
91
|
+
|
|
92
|
+
auto selector = nativeValue.getValue(PropNameSelector).getAsFunction();
|
|
93
|
+
// Add subscription to animated value in selector
|
|
94
|
+
auto unsubscribe = animatedValue->addListener(
|
|
95
|
+
[nativeValue, propMapping, selector = std::move(selector),
|
|
96
|
+
animatedValue](jsi::Runtime &runtime) {
|
|
97
|
+
// Get value from animation value
|
|
98
|
+
jsi::Value jsValue = animatedValue->getCurrent(runtime);
|
|
99
|
+
// Call selector to transform new value
|
|
100
|
+
auto selectedJsValue =
|
|
101
|
+
selector(runtime, jsi::Value::null(), &jsValue, 1);
|
|
102
|
+
// Update all props that listens to this animation value
|
|
103
|
+
for (auto &prop : propMapping.second) {
|
|
104
|
+
prop->updateValue(runtime, selectedJsValue);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// Save unsubscribe methods
|
|
109
|
+
unsubscribers.push_back(std::make_pair(animatedValue, unsubscribe));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Now let's store the subscription info
|
|
114
|
+
_subscriptions.emplace(node.get(), unsubscribers);
|
|
115
|
+
|
|
116
|
+
// Set callback for unsubscribing
|
|
117
|
+
node->setDisposeCallback(
|
|
118
|
+
[node = node.get(), weakSelf = weak_from_this()]() {
|
|
119
|
+
auto self = weakSelf.lock();
|
|
120
|
+
if (self) {
|
|
121
|
+
self->unsubscribeNode(node);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
return jsi::Value::undefined();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
Called when the hosting container is mounted or updated. This ensures that we
|
|
130
|
+
have a ref to the underlying SkiaView so that we can registers redraw
|
|
131
|
+
listeners on values used in the current View automatically.
|
|
132
|
+
*/
|
|
133
|
+
JSI_HOST_FUNCTION(update) {
|
|
134
|
+
if (_unregisterValues != nullptr) {
|
|
135
|
+
// unregisterValues is a pointer to unsubscribing to the automatic
|
|
136
|
+
// re-render when a value change
|
|
137
|
+
_unregisterValues->asFunction(runtime).call(runtime,
|
|
138
|
+
jsi::Value::undefined(), 0);
|
|
139
|
+
_unregisterValues = nullptr;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// Now let's create connection between view and unique values
|
|
143
|
+
std::set<std::shared_ptr<RNSkReadonlyValue>> uniqueValues;
|
|
144
|
+
|
|
145
|
+
for (auto &nodeSub : _subscriptions) {
|
|
146
|
+
for (auto &sub : nodeSub.second) {
|
|
147
|
+
if (uniqueValues.count(sub.first) == 0) {
|
|
148
|
+
uniqueValues.emplace(sub.first);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Copy to args
|
|
154
|
+
auto array = jsi::Array(runtime, uniqueValues.size());
|
|
155
|
+
size_t i = 0;
|
|
156
|
+
for (auto &el : uniqueValues) {
|
|
157
|
+
array.setValueAtIndex(runtime, i++,
|
|
158
|
+
jsi::Object::createFromHostObject(runtime, el));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Call JS registerValues callback
|
|
162
|
+
auto func = _registerValuesCallback.asFunction(runtime);
|
|
163
|
+
_unregisterValues = std::make_shared<jsi::Object>(
|
|
164
|
+
func.call(runtime, array, 1).asObject(runtime));
|
|
165
|
+
|
|
166
|
+
return jsi::Value::undefined();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
Called when the hosting container is unmounted or recreated. This ensures
|
|
171
|
+
that we remove all subscriptions to Skia values so that we don't have any
|
|
172
|
+
listeners left after the component is removed.
|
|
173
|
+
|
|
174
|
+
* Called when the hosting container is unmounted or recreated. This ensures
|
|
175
|
+
that we remove
|
|
176
|
+
* all subscriptions to Skia values so that we don't have any listeners left
|
|
177
|
+
after
|
|
178
|
+
* the component is removed.
|
|
179
|
+
*/
|
|
180
|
+
JSI_HOST_FUNCTION(remove) {
|
|
181
|
+
if (_unregisterValues != nullptr) {
|
|
182
|
+
// unregisterValues is a pointer to unsubscribing to the automatic
|
|
183
|
+
// re-render when a value change
|
|
184
|
+
_unregisterValues->asFunction(runtime).call(runtime,
|
|
185
|
+
jsi::Value::undefined(), 0);
|
|
186
|
+
_unregisterValues = nullptr;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
unsubscribeAll();
|
|
190
|
+
|
|
191
|
+
return jsi::Value::undefined();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiDependencyManager, unsubscribeNode),
|
|
195
|
+
JSI_EXPORT_FUNC(JsiDependencyManager, subscribeNode),
|
|
196
|
+
JSI_EXPORT_FUNC(JsiDependencyManager, update),
|
|
197
|
+
JSI_EXPORT_FUNC(JsiDependencyManager, remove))
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
Constructor to add to the Api object
|
|
201
|
+
*/
|
|
202
|
+
static const jsi::HostFunctionType
|
|
203
|
+
createCtor(std::shared_ptr<RNSkPlatformContext> context) {
|
|
204
|
+
return JSI_HOST_FUNCTION_LAMBDA {
|
|
205
|
+
// Params: registerValues: (values: Array<SkiaValue<unknown>>) => () =>
|
|
206
|
+
// void
|
|
207
|
+
auto obj = std::make_shared<JsiDependencyManager>(
|
|
208
|
+
context, getArgumentAsObject(runtime, arguments, count, 0));
|
|
209
|
+
|
|
210
|
+
return jsi::Object::createFromHostObject(runtime, std::move(obj));
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
private:
|
|
215
|
+
/**
|
|
216
|
+
Removes all subscriptions
|
|
217
|
+
*/
|
|
218
|
+
void unsubscribeAll() {
|
|
219
|
+
// Unregister all nodes
|
|
220
|
+
std::vector<JsiDomNode *> tmp;
|
|
221
|
+
tmp.reserve(_subscriptions.size());
|
|
222
|
+
for (auto &subInfo : _subscriptions) {
|
|
223
|
+
tmp.push_back(subInfo.first);
|
|
224
|
+
}
|
|
225
|
+
for (auto &node : tmp) {
|
|
226
|
+
unsubscribeNode(node);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Clear all subscriptions
|
|
230
|
+
_subscriptions.clear();
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
Unsubscribes from a given node
|
|
235
|
+
*/
|
|
236
|
+
void unsubscribeNode(JsiDomNode *node) {
|
|
237
|
+
if (_subscriptions.count(node) > 0) {
|
|
238
|
+
auto subscriptions = _subscriptions.at(node);
|
|
239
|
+
for (auto &p : subscriptions) {
|
|
240
|
+
p.second();
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Remove node's subscriptions
|
|
244
|
+
_subscriptions.erase(node);
|
|
245
|
+
|
|
246
|
+
// Remove node's callback to avoid keeping
|
|
247
|
+
// cyclic dependencies between dep manager and the node
|
|
248
|
+
node->setDisposeCallback(nullptr);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
Returns true if the given value is a HostObject and it inherits from
|
|
253
|
+
RNSkReadonlyValue.
|
|
254
|
+
*/
|
|
255
|
+
bool isAnimatedValue(JsiValue &value) {
|
|
256
|
+
return value.getType() == PropType::HostObject &&
|
|
257
|
+
std::dynamic_pointer_cast<RNSkReadonlyValue>(
|
|
258
|
+
value.getAsHostObject()) != nullptr;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
Returns the RNSkReadonlyValue pointer for a value that is an Animated value
|
|
263
|
+
*/
|
|
264
|
+
std::shared_ptr<RNSkReadonlyValue> getAnimatedValue(JsiValue &value) {
|
|
265
|
+
return std::dynamic_pointer_cast<RNSkReadonlyValue>(
|
|
266
|
+
value.getAsHostObject());
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
Returns true if the value is a selector. A Selector is a JS object that has
|
|
271
|
+
two properties, the selector and the the value. The selector is a function
|
|
272
|
+
that is used to transform the value - which is an animated skia value.
|
|
273
|
+
*/
|
|
274
|
+
bool isSelector(JsiValue &value) {
|
|
275
|
+
// Handling selectors is rather easy, we just add
|
|
276
|
+
// a listener on the selector's callback and then we'll do the javascript
|
|
277
|
+
// resolving in the callback (which will always be on the Javascript
|
|
278
|
+
// thread)!
|
|
279
|
+
if (value.getType() == PropType::Object) {
|
|
280
|
+
if (value.hasValue(PropNameSelector) && value.hasValue(PropNameValue)) {
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
jsi::Object _registerValuesCallback;
|
|
288
|
+
std::shared_ptr<jsi::Object> _unregisterValues;
|
|
289
|
+
std::map<JsiDomNode *,
|
|
290
|
+
std::vector<std::pair<std::shared_ptr<RNSkReadonlyValue>,
|
|
291
|
+
std::function<void()>>>>
|
|
292
|
+
_subscriptions;
|
|
293
|
+
};
|
|
294
|
+
} // namespace RNSkia
|