@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,267 @@
|
|
|
1
|
+
|
|
2
|
+
#pragma once
|
|
3
|
+
|
|
4
|
+
#include "ClipProp.h"
|
|
5
|
+
#include "DrawingContext.h"
|
|
6
|
+
#include "JsiDomDeclarationNode.h"
|
|
7
|
+
#include "JsiDomNode.h"
|
|
8
|
+
#include "LayerProp.h"
|
|
9
|
+
#include "MatrixProp.h"
|
|
10
|
+
#include "PaintProps.h"
|
|
11
|
+
#include "PointProp.h"
|
|
12
|
+
#include "RRectProp.h"
|
|
13
|
+
#include "RectProp.h"
|
|
14
|
+
#include "TransformProp.h"
|
|
15
|
+
|
|
16
|
+
#include <memory>
|
|
17
|
+
#include <string>
|
|
18
|
+
|
|
19
|
+
namespace RNSkia {
|
|
20
|
+
|
|
21
|
+
static PropId PropNameOrigin = JsiPropId::get("origin");
|
|
22
|
+
static PropId PropNameOpacity = JsiPropId::get("opacity");
|
|
23
|
+
static PropId PropNameClip = JsiPropId::get("clip");
|
|
24
|
+
static PropId PropNameInvertClip = JsiPropId::get("invertClip");
|
|
25
|
+
static PropId PropNameLayer = JsiPropId::get("layer");
|
|
26
|
+
|
|
27
|
+
class JsiDomRenderNode : public JsiDomNode {
|
|
28
|
+
public:
|
|
29
|
+
JsiDomRenderNode(std::shared_ptr<RNSkPlatformContext> context,
|
|
30
|
+
const char *type)
|
|
31
|
+
: JsiDomNode(context, type) {}
|
|
32
|
+
|
|
33
|
+
void render(DrawingContext *context) {
|
|
34
|
+
#if SKIA_DOM_DEBUG
|
|
35
|
+
printDebugInfo(context, "Begin Render");
|
|
36
|
+
#endif
|
|
37
|
+
|
|
38
|
+
// Ensure we have a local drawing context inheriting from the parent context
|
|
39
|
+
if (_localContext == nullptr) {
|
|
40
|
+
_localContext = context->inheritContext(getType());
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
auto shouldTransform = _matrixProp->isSet() || _transformProp->isSet();
|
|
44
|
+
auto shouldSave =
|
|
45
|
+
shouldTransform || _clipProp->isSet() || _layerProp->isSet();
|
|
46
|
+
|
|
47
|
+
// Handle matrix/transforms
|
|
48
|
+
if (shouldSave) {
|
|
49
|
+
// Save canvas state
|
|
50
|
+
if (_layerProp->isSet()) {
|
|
51
|
+
if (_layerProp->isBool()) {
|
|
52
|
+
#if SKIA_DOM_DEBUG
|
|
53
|
+
printDebugInfo(context, "canvas->saveLayer()");
|
|
54
|
+
#endif
|
|
55
|
+
_localContext->getCanvas()->saveLayer(
|
|
56
|
+
SkCanvas::SaveLayerRec(nullptr, nullptr, nullptr, 0));
|
|
57
|
+
} else {
|
|
58
|
+
#if SKIA_DOM_DEBUG
|
|
59
|
+
printDebugInfo(context, "canvas->saveLayer(paint)");
|
|
60
|
+
#endif
|
|
61
|
+
_localContext->getCanvas()->saveLayer(SkCanvas::SaveLayerRec(
|
|
62
|
+
nullptr, _layerProp->getDerivedValue().get(), nullptr, 0));
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
#if SKIA_DOM_DEBUG
|
|
66
|
+
printDebugInfo(context, "canvas->save()");
|
|
67
|
+
#endif
|
|
68
|
+
_localContext->getCanvas()->save();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (_originProp->isSet()) {
|
|
72
|
+
#if SKIA_DOM_DEBUG
|
|
73
|
+
printDebugInfo(context, "canvas->translate(origin)");
|
|
74
|
+
#endif
|
|
75
|
+
// Handle origin
|
|
76
|
+
_localContext->getCanvas()->translate(
|
|
77
|
+
_originProp->getDerivedValue()->x(),
|
|
78
|
+
_originProp->getDerivedValue()->y());
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (shouldTransform) {
|
|
82
|
+
#if SKIA_DOM_DEBUG
|
|
83
|
+
printDebugInfo(
|
|
84
|
+
context,
|
|
85
|
+
"canvas->concat(" +
|
|
86
|
+
std::string(_matrixProp->isSet() ? "matrix" : "transform") +
|
|
87
|
+
std::string(")"));
|
|
88
|
+
#endif
|
|
89
|
+
auto matrix = _matrixProp->isSet() ? _matrixProp->getDerivedValue()
|
|
90
|
+
: _transformProp->getDerivedValue();
|
|
91
|
+
|
|
92
|
+
// Concat canvas' matrix with our matrix
|
|
93
|
+
_localContext->getCanvas()->concat(*matrix);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Clipping
|
|
97
|
+
if (_clipProp->isSet()) {
|
|
98
|
+
auto invert = _invertClip->isSet() && _invertClip->value().getAsBool();
|
|
99
|
+
clip(context, _localContext->getCanvas(), invert);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (_originProp->isSet()) {
|
|
103
|
+
#if SKIA_DOM_DEBUG
|
|
104
|
+
printDebugInfo(context, "canvas->translate(-origin)");
|
|
105
|
+
#endif
|
|
106
|
+
// Handle origin
|
|
107
|
+
_localContext->getCanvas()->translate(
|
|
108
|
+
-_originProp->getDerivedValue()->x(),
|
|
109
|
+
-_originProp->getDerivedValue()->y());
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Let any local paint props decorate the context
|
|
114
|
+
_paintProps->decorate(_localContext.get());
|
|
115
|
+
|
|
116
|
+
// Now let's make sure the local context is resolved correctly - ie. that
|
|
117
|
+
// all children of type declaration (except paint) is given the opportunity
|
|
118
|
+
// to decorate the context.
|
|
119
|
+
materializeDeclarations();
|
|
120
|
+
|
|
121
|
+
// Render the node
|
|
122
|
+
renderNode(_localContext.get());
|
|
123
|
+
|
|
124
|
+
// Restore if needed
|
|
125
|
+
if (shouldSave) {
|
|
126
|
+
#if SKIA_DOM_DEBUG
|
|
127
|
+
printDebugInfo(context, "canvas->restore()");
|
|
128
|
+
#endif
|
|
129
|
+
_localContext->getCanvas()->restore();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
#if SKIA_DOM_DEBUG
|
|
133
|
+
printDebugInfo(context, "End Render");
|
|
134
|
+
#endif
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
Override reset (last thing that happens in the render cycle) to also reset
|
|
139
|
+
the changed flag on the local drawing context if necessary.
|
|
140
|
+
*/
|
|
141
|
+
void resetPendingChanges() override {
|
|
142
|
+
JsiDomNode::resetPendingChanges();
|
|
143
|
+
_localContext->resetChangedFlag();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
Signal from the JS side that the node is removed from the dom.
|
|
148
|
+
*/
|
|
149
|
+
void dispose() override {
|
|
150
|
+
JsiDomNode::dispose();
|
|
151
|
+
|
|
152
|
+
// Clear local drawing context
|
|
153
|
+
if (_localContext != nullptr) {
|
|
154
|
+
_localContext->dispose();
|
|
155
|
+
_localContext = nullptr;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
protected:
|
|
160
|
+
/**
|
|
161
|
+
Override to implement rendering where the current state of the drawing
|
|
162
|
+
context is correctly set.
|
|
163
|
+
*/
|
|
164
|
+
virtual void renderNode(DrawingContext *context) = 0;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
Removes a child
|
|
168
|
+
*/
|
|
169
|
+
void removeChild(std::shared_ptr<JsiDomNode> child) override {
|
|
170
|
+
JsiDomNode::removeChild(child);
|
|
171
|
+
if (_localContext != nullptr) {
|
|
172
|
+
_localContext->markAsChanged();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
Validates that only declaration nodes can be children
|
|
178
|
+
*/
|
|
179
|
+
void addChild(std::shared_ptr<JsiDomNode> child) override {
|
|
180
|
+
JsiDomNode::addChild(child);
|
|
181
|
+
if (_localContext != nullptr) {
|
|
182
|
+
_localContext->markAsChanged();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
Validates that only declaration nodes can be children
|
|
188
|
+
*/
|
|
189
|
+
void insertChildBefore(std::shared_ptr<JsiDomNode> child,
|
|
190
|
+
std::shared_ptr<JsiDomNode> before) override {
|
|
191
|
+
JsiDomNode::insertChildBefore(child, before);
|
|
192
|
+
if (_localContext != nullptr) {
|
|
193
|
+
_localContext->markAsChanged();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
Define common properties for all render nodes
|
|
199
|
+
*/
|
|
200
|
+
void defineProperties(NodePropsContainer *container) override {
|
|
201
|
+
JsiDomNode::defineProperties(container);
|
|
202
|
+
|
|
203
|
+
_paintProps = container->defineProperty(std::make_shared<PaintProps>());
|
|
204
|
+
|
|
205
|
+
_matrixProp =
|
|
206
|
+
container->defineProperty(std::make_shared<MatrixProp>(PropNameMatrix));
|
|
207
|
+
_transformProp = container->defineProperty(
|
|
208
|
+
std::make_shared<TransformProp>(PropNameTransform));
|
|
209
|
+
_originProp =
|
|
210
|
+
container->defineProperty(std::make_shared<PointProp>(PropNameOrigin));
|
|
211
|
+
_clipProp =
|
|
212
|
+
container->defineProperty(std::make_shared<ClipProp>(PropNameClip));
|
|
213
|
+
_invertClip = container->defineProperty(
|
|
214
|
+
std::make_shared<NodeProp>(PropNameInvertClip));
|
|
215
|
+
_layerProp =
|
|
216
|
+
container->defineProperty(std::make_shared<LayerProp>(PropNameLayer));
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
private:
|
|
220
|
+
/**
|
|
221
|
+
Clips the canvas depending on the clip property
|
|
222
|
+
*/
|
|
223
|
+
void clip(DrawingContext *context, SkCanvas *canvas, bool invert) {
|
|
224
|
+
auto op = invert ? SkClipOp::kDifference : SkClipOp::kIntersect;
|
|
225
|
+
if (_clipProp->getRect() != nullptr) {
|
|
226
|
+
#if SKIA_DOM_DEBUG
|
|
227
|
+
printDebugInfo(context, "canvas->clipRect()");
|
|
228
|
+
#endif
|
|
229
|
+
canvas->clipRect(*_clipProp->getRect(), op, true);
|
|
230
|
+
} else if (_clipProp->getRRect() != nullptr) {
|
|
231
|
+
#if SKIA_DOM_DEBUG
|
|
232
|
+
printDebugInfo(context, "canvas->clipRRect()");
|
|
233
|
+
#endif
|
|
234
|
+
canvas->clipRRect(*_clipProp->getRRect(), op, true);
|
|
235
|
+
} else if (_clipProp->getPath() != nullptr) {
|
|
236
|
+
#if SKIA_DOM_DEBUG
|
|
237
|
+
printDebugInfo(context, "canvas->clipPath()");
|
|
238
|
+
#endif
|
|
239
|
+
canvas->clipPath(*_clipProp->getPath(), op, true);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
Loops through all declaration nodes and gives each one of them the
|
|
245
|
+
opportunity to decorate the context
|
|
246
|
+
*/
|
|
247
|
+
void materializeDeclarations() {
|
|
248
|
+
for (auto &child : getChildren()) {
|
|
249
|
+
auto ptr = std::dynamic_pointer_cast<JsiBaseDomDeclarationNode>(child);
|
|
250
|
+
if (ptr != nullptr) {
|
|
251
|
+
ptr->decorateContext(_localContext.get());
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
PointProp *_originProp;
|
|
257
|
+
MatrixProp *_matrixProp;
|
|
258
|
+
TransformProp *_transformProp;
|
|
259
|
+
NodeProp *_invertClip;
|
|
260
|
+
ClipProp *_clipProp;
|
|
261
|
+
LayerProp *_layerProp;
|
|
262
|
+
PaintProps *_paintProps;
|
|
263
|
+
|
|
264
|
+
std::shared_ptr<DrawingContext> _localContext;
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "BaseNodeProp.h"
|
|
4
|
+
#include "JsiValue.h"
|
|
5
|
+
|
|
6
|
+
#include <chrono>
|
|
7
|
+
#include <memory>
|
|
8
|
+
#include <string>
|
|
9
|
+
|
|
10
|
+
namespace RNSkia {
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
Simple class for reading a property by name from the Dom Node properties
|
|
14
|
+
object.
|
|
15
|
+
*/
|
|
16
|
+
class NodeProp : public BaseNodeProp,
|
|
17
|
+
public std::enable_shared_from_this<NodeProp> {
|
|
18
|
+
public:
|
|
19
|
+
/**
|
|
20
|
+
Constructs a new optional dom node properrty
|
|
21
|
+
*/
|
|
22
|
+
explicit NodeProp(PropId name) : _name(name), BaseNodeProp() {}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
Reads JS value and swaps out with a new value
|
|
26
|
+
*/
|
|
27
|
+
void readValueFromJs(jsi::Runtime &runtime,
|
|
28
|
+
const ReadPropFunc &read) override {
|
|
29
|
+
// If the value is a nullptr this is the first call to the
|
|
30
|
+
// readValueFromJS Function (which comes from the reconciler
|
|
31
|
+
// setting a new property value on the property
|
|
32
|
+
if (_value == nullptr) {
|
|
33
|
+
_value = std::make_shared<JsiValue>(runtime, read(runtime, _name, this));
|
|
34
|
+
_isChanged = true;
|
|
35
|
+
_hasNewValue = false;
|
|
36
|
+
} else {
|
|
37
|
+
// Otherwise we'll just update the buffer and commit it later.
|
|
38
|
+
std::lock_guard<std::mutex> lock(_swapMutex);
|
|
39
|
+
if (_buffer == nullptr) {
|
|
40
|
+
_buffer =
|
|
41
|
+
std::make_shared<JsiValue>(runtime, read(runtime, _name, this));
|
|
42
|
+
} else {
|
|
43
|
+
_buffer->setCurrent(runtime, read(runtime, _name, this));
|
|
44
|
+
}
|
|
45
|
+
_hasNewValue = *_buffer.get() != *_value.get();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
Property value has changed - let's save this as a change to be commited later
|
|
51
|
+
*/
|
|
52
|
+
void updateValue(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
53
|
+
// Always use the next field since this method is called on the JS thread
|
|
54
|
+
// and we don't want to rip out the underlying value object.
|
|
55
|
+
std::lock_guard<std::mutex> lock(_swapMutex);
|
|
56
|
+
if (_buffer == nullptr) {
|
|
57
|
+
_buffer = std::make_shared<JsiValue>(runtime, value);
|
|
58
|
+
} else {
|
|
59
|
+
_buffer->setCurrent(runtime, value);
|
|
60
|
+
}
|
|
61
|
+
// This is almost always a change - meaning a swap is
|
|
62
|
+
// cheaper than comparing for equality.
|
|
63
|
+
_hasNewValue = true;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
Returns true if the property is set and is not undefined or null
|
|
68
|
+
*/
|
|
69
|
+
bool isSet() override {
|
|
70
|
+
return _value != nullptr && !_value->isUndefinedOrNull();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
True if the property has changed since we last visited it
|
|
75
|
+
*/
|
|
76
|
+
bool isChanged() override { return _isChanged; }
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
Starts the process of updating and reading props
|
|
80
|
+
*/
|
|
81
|
+
void updatePendingChanges() override {
|
|
82
|
+
// If the value has changed we should swap the
|
|
83
|
+
// buffers
|
|
84
|
+
if (_hasNewValue && _buffer != nullptr) {
|
|
85
|
+
{
|
|
86
|
+
// Swap buffers
|
|
87
|
+
std::lock_guard<std::mutex> lock(_swapMutex);
|
|
88
|
+
auto tmp = _value;
|
|
89
|
+
_value = _buffer;
|
|
90
|
+
_buffer = tmp;
|
|
91
|
+
|
|
92
|
+
// turn off pending changes flag
|
|
93
|
+
_hasNewValue = false;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Mark as changed.
|
|
97
|
+
_isChanged = true;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/*
|
|
102
|
+
Ends the visit cycle
|
|
103
|
+
*/
|
|
104
|
+
void markAsResolved() override { _isChanged = false; }
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
Returns pointer to the value contained by the property if the property is
|
|
108
|
+
set.
|
|
109
|
+
*/
|
|
110
|
+
const JsiValue &value() {
|
|
111
|
+
assert(isSet());
|
|
112
|
+
return *_value;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
Returns the name of the property
|
|
117
|
+
*/
|
|
118
|
+
std::string getName() override { return std::string(_name); }
|
|
119
|
+
|
|
120
|
+
private:
|
|
121
|
+
PropId _name;
|
|
122
|
+
|
|
123
|
+
std::shared_ptr<JsiValue> _value;
|
|
124
|
+
std::shared_ptr<JsiValue> _buffer;
|
|
125
|
+
std::atomic<bool> _isChanged = {false};
|
|
126
|
+
std::atomic<bool> _hasNewValue = {false};
|
|
127
|
+
std::mutex _swapMutex;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "DrawingContext.h"
|
|
4
|
+
#include "JsiValue.h"
|
|
5
|
+
#include "NodeProp.h"
|
|
6
|
+
|
|
7
|
+
#include <map>
|
|
8
|
+
#include <memory>
|
|
9
|
+
#include <string>
|
|
10
|
+
#include <utility>
|
|
11
|
+
#include <vector>
|
|
12
|
+
|
|
13
|
+
namespace RNSkia {
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
This class manages marshalling from JS values over JSI to C++ values and is
|
|
17
|
+
typically called when a new node is created or an existing node is updated from
|
|
18
|
+
the reconciler.
|
|
19
|
+
*/
|
|
20
|
+
class NodePropsContainer {
|
|
21
|
+
public:
|
|
22
|
+
/**
|
|
23
|
+
Constructor. Pass the runtime and the JS object representing the properties,
|
|
24
|
+
and a function that will be called when any property was changed from within
|
|
25
|
+
this class as a result of a Skia value change.
|
|
26
|
+
*/
|
|
27
|
+
explicit NodePropsContainer(PropId componentType) : _type(componentType) {}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
Returns true if there are any changes in the props container in the current
|
|
31
|
+
being/end visit
|
|
32
|
+
*/
|
|
33
|
+
bool isChanged() {
|
|
34
|
+
for (auto &prop : _properties) {
|
|
35
|
+
if (prop->isChanged()) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
Returns a list of mappings betwen property names and property objects
|
|
44
|
+
*/
|
|
45
|
+
const std::map<PropId, std::vector<NodeProp *>> &getMappedProperties() {
|
|
46
|
+
return _mappedProperties;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
Updates any props that has changes waiting, updates props that have derived
|
|
51
|
+
values
|
|
52
|
+
*/
|
|
53
|
+
void updatePendingValues() {
|
|
54
|
+
for (auto &prop : _properties) {
|
|
55
|
+
prop->updatePendingChanges();
|
|
56
|
+
if (!prop->isSet() && prop->isRequired()) {
|
|
57
|
+
throw std::runtime_error("Missing one or more required properties " +
|
|
58
|
+
std::string(prop->getName()) + " in the " +
|
|
59
|
+
_type + " component.");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
We're done, mark any changes as committed in all props
|
|
66
|
+
*/
|
|
67
|
+
void markAsResolved() {
|
|
68
|
+
for (auto &prop : _properties) {
|
|
69
|
+
prop->markAsResolved();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
Clears all props and data from the container
|
|
75
|
+
*/
|
|
76
|
+
void dispose() {
|
|
77
|
+
_properties.clear();
|
|
78
|
+
_mappedProperties.clear();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
Called when the React / JS side sets properties on a node
|
|
83
|
+
*/
|
|
84
|
+
void setProps(jsi::Runtime &runtime, jsi::Object &&props) {
|
|
85
|
+
// Clear property mapping
|
|
86
|
+
_mappedProperties.clear();
|
|
87
|
+
|
|
88
|
+
// Use specialized reader function to be able to intercept calls that
|
|
89
|
+
// reads specific named values from the js property object.
|
|
90
|
+
auto read = [&](jsi::Runtime &runtime, PropId name, NodeProp *prop) {
|
|
91
|
+
if (_mappedProperties.count(name) == 0) {
|
|
92
|
+
std::vector<NodeProp *> tmp;
|
|
93
|
+
_mappedProperties[name] = std::move(tmp);
|
|
94
|
+
}
|
|
95
|
+
_mappedProperties.at(name).push_back(prop);
|
|
96
|
+
return props.getProperty(runtime, name);
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
for (auto &prop : _properties) {
|
|
100
|
+
prop->readValueFromJs(runtime, read);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
Defines a property that will be updated with the container changes.
|
|
106
|
+
*/
|
|
107
|
+
template <typename T = BaseNodeProp>
|
|
108
|
+
T *defineProperty(std::shared_ptr<T> prop) {
|
|
109
|
+
_properties.push_back(prop);
|
|
110
|
+
return prop.get();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private:
|
|
114
|
+
std::vector<std::shared_ptr<BaseNodeProp>> _properties;
|
|
115
|
+
std::map<PropId, std::vector<NodeProp *>> _mappedProperties;
|
|
116
|
+
PropId _type;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "CircleProp.h"
|
|
4
|
+
#include "JsiDomDrawingNode.h"
|
|
5
|
+
|
|
6
|
+
#include <memory>
|
|
7
|
+
|
|
8
|
+
namespace RNSkia {
|
|
9
|
+
|
|
10
|
+
class JsiBackdropFilterNode : public JsiDomDrawingNode,
|
|
11
|
+
public JsiDomNodeCtor<JsiBackdropFilterNode> {
|
|
12
|
+
public:
|
|
13
|
+
explicit JsiBackdropFilterNode(std::shared_ptr<RNSkPlatformContext> context)
|
|
14
|
+
: JsiDomDrawingNode(context, "skBackdropFilter") {}
|
|
15
|
+
|
|
16
|
+
protected:
|
|
17
|
+
void draw(DrawingContext *context) override {
|
|
18
|
+
if (getChildren().size() == 0) {
|
|
19
|
+
throw std::runtime_error(
|
|
20
|
+
"Expected at least one child in the BackdropFilter node.");
|
|
21
|
+
}
|
|
22
|
+
auto child = getChildren()[0];
|
|
23
|
+
auto colorFilter = std::dynamic_pointer_cast<JsiBaseColorFilterNode>(child);
|
|
24
|
+
auto imageFilter = std::dynamic_pointer_cast<JsiBaseImageFilterNode>(child);
|
|
25
|
+
|
|
26
|
+
auto canvas = context->getCanvas();
|
|
27
|
+
auto filter =
|
|
28
|
+
colorFilter != nullptr
|
|
29
|
+
? SkImageFilters::ColorFilter(colorFilter->getCurrent(), nullptr)
|
|
30
|
+
: imageFilter->getCurrent();
|
|
31
|
+
|
|
32
|
+
canvas->saveLayer(
|
|
33
|
+
SkCanvas::SaveLayerRec(nullptr, nullptr, filter.get(), 0));
|
|
34
|
+
canvas->restore();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "JsiDomDeclarationNode.h"
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <string>
|
|
7
|
+
|
|
8
|
+
namespace RNSkia {
|
|
9
|
+
|
|
10
|
+
class JsiBlendNode : public JsiBaseDomDeclarationNode,
|
|
11
|
+
public JsiDomNodeCtor<JsiBlendNode> {
|
|
12
|
+
public:
|
|
13
|
+
explicit JsiBlendNode(std::shared_ptr<RNSkPlatformContext> context)
|
|
14
|
+
: JsiBaseDomDeclarationNode(context, "skBlend") {}
|
|
15
|
+
|
|
16
|
+
protected:
|
|
17
|
+
void decorate(DrawingContext *context) override {
|
|
18
|
+
if (context->isChanged() || getPropsContainer()->isChanged()) {
|
|
19
|
+
auto children = getChildren();
|
|
20
|
+
auto childSize = children.size();
|
|
21
|
+
|
|
22
|
+
// No need to do anything if there are no children here
|
|
23
|
+
if (childSize == 0) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Blend mode
|
|
28
|
+
auto blendMode = *_blendProp->getDerivedValue();
|
|
29
|
+
|
|
30
|
+
// Find the latest child and check if it is a shader or image filter
|
|
31
|
+
bool asShader = std::dynamic_pointer_cast<JsiBaseShaderNode>(
|
|
32
|
+
children.at(childSize - 1)) != nullptr;
|
|
33
|
+
|
|
34
|
+
// Traverse children in reverse
|
|
35
|
+
sk_sp<SkShader> innerShader;
|
|
36
|
+
sk_sp<SkImageFilter> innerImageFilter;
|
|
37
|
+
|
|
38
|
+
for (size_t i = childSize - 1; i != (std::size_t)-1; i--) {
|
|
39
|
+
auto child = children.at(i);
|
|
40
|
+
auto maybeShader = std::dynamic_pointer_cast<JsiBaseShaderNode>(child);
|
|
41
|
+
auto maybeImageFilter =
|
|
42
|
+
std::dynamic_pointer_cast<JsiBaseImageFilterNode>(child);
|
|
43
|
+
|
|
44
|
+
if (asShader) {
|
|
45
|
+
sk_sp<SkShader> outer = maybeShader->getCurrent();
|
|
46
|
+
if (innerShader != nullptr) {
|
|
47
|
+
innerShader = SkShaders::Blend(blendMode, innerShader, outer);
|
|
48
|
+
} else {
|
|
49
|
+
innerShader = outer;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
} else {
|
|
53
|
+
sk_sp<SkImageFilter> outer = maybeImageFilter->getCurrent();
|
|
54
|
+
if (innerImageFilter != nullptr) {
|
|
55
|
+
innerImageFilter = SkImageFilters::Blend(
|
|
56
|
+
blendMode, innerImageFilter, outer, nullptr);
|
|
57
|
+
} else {
|
|
58
|
+
innerImageFilter = outer;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Materialize
|
|
64
|
+
if (asShader) {
|
|
65
|
+
context->getMutablePaint()->setShader(innerShader);
|
|
66
|
+
} else {
|
|
67
|
+
context->getMutablePaint()->setImageFilter(innerImageFilter);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void defineProperties(NodePropsContainer *container) override {
|
|
73
|
+
JsiBaseDomDeclarationNode::defineProperties(container);
|
|
74
|
+
_blendProp = container->defineProperty(
|
|
75
|
+
std::make_shared<BlendModeProp>(JsiPropId::get("mode")));
|
|
76
|
+
_blendProp->require();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
Validates that only declaration nodes can be children
|
|
81
|
+
*/
|
|
82
|
+
void addChild(std::shared_ptr<JsiDomNode> child) override {
|
|
83
|
+
JsiBaseDomDeclarationNode::addChild(child);
|
|
84
|
+
// Verify declaration of either shader or image filter
|
|
85
|
+
verifyChild(child);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
Validates that only declaration nodes can be children
|
|
90
|
+
*/
|
|
91
|
+
void insertChildBefore(std::shared_ptr<JsiDomNode> child,
|
|
92
|
+
std::shared_ptr<JsiDomNode> before) override {
|
|
93
|
+
JsiBaseDomDeclarationNode::insertChildBefore(child, before);
|
|
94
|
+
// Verify declaration of either shader or image filter
|
|
95
|
+
verifyChild(child);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private:
|
|
99
|
+
void verifyChild(std::shared_ptr<JsiDomNode> child) {
|
|
100
|
+
if (std::dynamic_pointer_cast<JsiBaseShaderNode>(child) == nullptr &&
|
|
101
|
+
std::dynamic_pointer_cast<JsiBaseImageFilterNode>(child) == nullptr) {
|
|
102
|
+
// We'll raise an error when other children are added.
|
|
103
|
+
std::runtime_error("Blend nodes only supports either shaders or image "
|
|
104
|
+
"filters as children, got " +
|
|
105
|
+
std::string(child->getType()) + ".");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
BlendModeProp *_blendProp;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
} // namespace RNSkia
|