@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,222 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <jsi/jsi.h>
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <unordered_map>
|
|
8
|
+
#include <utility>
|
|
9
|
+
#include <vector>
|
|
10
|
+
|
|
11
|
+
namespace RNJsi {
|
|
12
|
+
|
|
13
|
+
namespace jsi = facebook::jsi;
|
|
14
|
+
|
|
15
|
+
enum struct PropType {
|
|
16
|
+
Undefined = 1,
|
|
17
|
+
Null = 2,
|
|
18
|
+
Bool = 4,
|
|
19
|
+
Number = 8,
|
|
20
|
+
String = 16,
|
|
21
|
+
Object = 32,
|
|
22
|
+
HostObject = 64,
|
|
23
|
+
HostFunction = 128,
|
|
24
|
+
Array = 256
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
using PropId = const char *;
|
|
28
|
+
|
|
29
|
+
class JsiPropId {
|
|
30
|
+
public:
|
|
31
|
+
static const char *get(const std::string &name) { return _get(name); }
|
|
32
|
+
|
|
33
|
+
static const char *get(const std::string &&name) {
|
|
34
|
+
return _get(std::move(name));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private:
|
|
38
|
+
static const char *_get(const std::string &name) {
|
|
39
|
+
if (_impls().count(name) == 0) {
|
|
40
|
+
// Alloc string
|
|
41
|
+
char *impl = new char[name.size() + 1];
|
|
42
|
+
strncpy(impl, name.c_str(), name.size() + 1);
|
|
43
|
+
_impls().emplace(name, impl);
|
|
44
|
+
}
|
|
45
|
+
return _impls().at(name);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static std::unordered_map<std::string, PropId> &_impls() {
|
|
49
|
+
static std::unordered_map<std::string, PropId> impls;
|
|
50
|
+
return impls;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
This is a class that deep copies values from JS to C++.
|
|
56
|
+
*/
|
|
57
|
+
class JsiValue {
|
|
58
|
+
public:
|
|
59
|
+
/**
|
|
60
|
+
Default constructor for an empty JsiValue
|
|
61
|
+
*/
|
|
62
|
+
JsiValue();
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
Constructs an instance of the JsiValue object with a current value
|
|
66
|
+
*/
|
|
67
|
+
JsiValue(jsi::Runtime &runtime, const jsi::Value &value);
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
Updates the current value from the Javascript value. This function will
|
|
71
|
+
perform a deep copy of the javascript value.
|
|
72
|
+
*/
|
|
73
|
+
void setCurrent(jsi::Runtime &runtime, const jsi::Value &value);
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
Returns the type of value contained in this JsiValue
|
|
77
|
+
*/
|
|
78
|
+
PropType getType() const { return _type; }
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
Returns true if the value is undefined or null.
|
|
82
|
+
*/
|
|
83
|
+
bool isUndefinedOrNull() const { return isUndefined() || isNull(); }
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
Returns true if the value is undefined.
|
|
87
|
+
*/
|
|
88
|
+
bool isUndefined() const { return _type == PropType::Undefined; }
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
Returns true if the value is null.
|
|
92
|
+
*/
|
|
93
|
+
bool isNull() const { return _type == PropType::Null; }
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
Returns the bool value. Requires that the underlying type is bool
|
|
97
|
+
*/
|
|
98
|
+
bool getAsBool() const;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
Returns the numeric value. Requires that the underlying type is number
|
|
102
|
+
*/
|
|
103
|
+
double getAsNumber() const;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
Returns the string value. Requires that the underlying type is string
|
|
107
|
+
*/
|
|
108
|
+
const std::string &getAsString() const;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
Returns the array value. Requires that the underlying type is array
|
|
112
|
+
*/
|
|
113
|
+
const std::vector<JsiValue> &getAsArray() const;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
Returns an inner value by name. Requires that the underlying type is Object
|
|
117
|
+
*/
|
|
118
|
+
const JsiValue &getValue(PropId name) const;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
Returns true if the underlying type is Object and the property name exists.
|
|
122
|
+
*/
|
|
123
|
+
bool hasValue(PropId name) const;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
Returns the names of the properties stored in this value
|
|
127
|
+
*/
|
|
128
|
+
std::vector<PropId> getKeys() const;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
Returns the host object value. Requires that the underlying type is Host
|
|
132
|
+
Object
|
|
133
|
+
*/
|
|
134
|
+
std::shared_ptr<jsi::HostObject> getAsHostObject() const;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
Returns a dynamic cast of the host object value. Requires that the underlying
|
|
138
|
+
type is Host Object
|
|
139
|
+
*/
|
|
140
|
+
template <typename T> std::shared_ptr<T> getAs() const {
|
|
141
|
+
if (_type != PropType::HostObject) {
|
|
142
|
+
throw std::runtime_error("Expected type host object, got " +
|
|
143
|
+
getTypeAsString(_type));
|
|
144
|
+
}
|
|
145
|
+
return std::dynamic_pointer_cast<T>(_hostObject);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
Returns the host function. Requires that the type is HostFunction
|
|
150
|
+
*/
|
|
151
|
+
jsi::HostFunctionType getAsHostFunction() const;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
Returns a callable HostFunction representing the undderlying js function.
|
|
155
|
+
Requires that the type is Function
|
|
156
|
+
*/
|
|
157
|
+
const jsi::HostFunctionType getAsFunction() const;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
Returns a string representation of the value
|
|
161
|
+
*/
|
|
162
|
+
std::string asString() const;
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
Converts the underlying value back to a JS value
|
|
166
|
+
*/
|
|
167
|
+
jsi::Value getAsJsiValue(jsi::Runtime &runtime) const;
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
Returns a string representing the type.
|
|
171
|
+
*/
|
|
172
|
+
static std::string getTypeAsString(PropType type);
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
Implements the equals operator
|
|
176
|
+
*/
|
|
177
|
+
bool operator==(const JsiValue &other) const;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
Implements the inequals operator
|
|
181
|
+
*/
|
|
182
|
+
bool operator!=(const JsiValue &other) const;
|
|
183
|
+
|
|
184
|
+
protected:
|
|
185
|
+
const std::unordered_map<PropId, JsiValue> &getProps() const {
|
|
186
|
+
return _props;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
bool boolValue() const { return _boolValue; }
|
|
190
|
+
double numberValue() const { return _numberValue; }
|
|
191
|
+
std::string stringValue() const { return _stringValue; }
|
|
192
|
+
std::shared_ptr<jsi::HostObject> hostObject() const { return _hostObject; }
|
|
193
|
+
jsi::HostFunctionType hostFunction() const { return _hostFunction; }
|
|
194
|
+
std::vector<JsiValue> array() const { return _array; }
|
|
195
|
+
std::unordered_map<PropId, JsiValue> props() const { return _props; }
|
|
196
|
+
const std::vector<PropId> &keysCache() const { return _keysCache; }
|
|
197
|
+
|
|
198
|
+
private:
|
|
199
|
+
void setObject(jsi::Runtime &runtime, const jsi::Value &value);
|
|
200
|
+
jsi::Object getObject(jsi::Runtime &runtime) const;
|
|
201
|
+
|
|
202
|
+
void setFunction(jsi::Runtime &runtime, const jsi::Value &value);
|
|
203
|
+
jsi::Object getHostFunction(jsi::Runtime &runtime) const;
|
|
204
|
+
|
|
205
|
+
void setArray(jsi::Runtime &runtime, const jsi::Object &obj);
|
|
206
|
+
jsi::Array getArray(jsi::Runtime &runtime) const;
|
|
207
|
+
|
|
208
|
+
void setHostObject(jsi::Runtime &runtime, const jsi::Object &obj);
|
|
209
|
+
jsi::Object getHostObject(jsi::Runtime &runtime) const;
|
|
210
|
+
|
|
211
|
+
PropType _type = PropType::Undefined;
|
|
212
|
+
bool _boolValue;
|
|
213
|
+
double _numberValue;
|
|
214
|
+
std::string _stringValue = "";
|
|
215
|
+
std::shared_ptr<jsi::HostObject> _hostObject;
|
|
216
|
+
jsi::HostFunctionType _hostFunction;
|
|
217
|
+
std::vector<JsiValue> _array;
|
|
218
|
+
std::unordered_map<PropId, JsiValue> _props;
|
|
219
|
+
std::vector<PropId> _keysCache;
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
} // namespace RNJsi
|
|
@@ -29,10 +29,10 @@ enum JsiWrapperValueType {
|
|
|
29
29
|
class JsiValueWrapper {
|
|
30
30
|
public:
|
|
31
31
|
explicit JsiValueWrapper(jsi::Runtime &runtime)
|
|
32
|
-
: _type(JsiWrapperValueType::
|
|
32
|
+
: _type(JsiWrapperValueType::Undefined) {}
|
|
33
33
|
|
|
34
34
|
JsiValueWrapper(jsi::Runtime &runtime, const jsi::Value &value)
|
|
35
|
-
:
|
|
35
|
+
: JsiValueWrapper(runtime) {
|
|
36
36
|
setCurrent(runtime, value);
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -78,11 +78,19 @@ public:
|
|
|
78
78
|
_valueHolder->setProperty(runtime, "current", value);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
jsi::Value getCurrent(jsi::Runtime &runtime) {
|
|
82
|
+
if (_valueHolder == nullptr) {
|
|
83
|
+
return jsi::Value::undefined();
|
|
84
|
+
}
|
|
85
|
+
return _valueHolder->getProperty(runtime, "current");
|
|
84
86
|
}
|
|
85
87
|
|
|
88
|
+
bool isUndefinedOrNull() { return isUndefined() || isNull(); }
|
|
89
|
+
|
|
90
|
+
bool isUndefined() { return _type == JsiWrapperValueType::Undefined; }
|
|
91
|
+
|
|
92
|
+
bool isNull() { return _type == JsiWrapperValueType::Null; }
|
|
93
|
+
|
|
86
94
|
bool getAsBool() {
|
|
87
95
|
assert(_type == JsiWrapperValueType::Bool);
|
|
88
96
|
return _boolValue;
|
|
@@ -120,6 +128,26 @@ public:
|
|
|
120
128
|
|
|
121
129
|
JsiWrapperValueType getType() { return _type; }
|
|
122
130
|
|
|
131
|
+
bool equals(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
132
|
+
if (value.isNumber() && _type == JsiWrapperValueType::Number) {
|
|
133
|
+
return _numberValue == value.asNumber();
|
|
134
|
+
} else if (value.isBool() && _type == JsiWrapperValueType::Bool) {
|
|
135
|
+
return _boolValue == value.getBool();
|
|
136
|
+
} else if (value.isUndefined()) {
|
|
137
|
+
return _type == JsiWrapperValueType::Undefined;
|
|
138
|
+
} else if (value.isNull()) {
|
|
139
|
+
return _type == JsiWrapperValueType::Null;
|
|
140
|
+
} else if (value.isString()) {
|
|
141
|
+
auto current = getCurrent(runtime);
|
|
142
|
+
if (current.isString()) {
|
|
143
|
+
return jsi::String::strictEquals(runtime, value.asString(runtime),
|
|
144
|
+
current.asString(runtime));
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
|
|
123
151
|
private:
|
|
124
152
|
std::shared_ptr<jsi::Object> _valueHolder;
|
|
125
153
|
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
#include "RNSkDomView.h"
|
|
2
|
+
#include "DrawingContext.h"
|
|
3
|
+
|
|
4
|
+
#include <chrono>
|
|
5
|
+
#include <utility>
|
|
6
|
+
|
|
7
|
+
#pragma clang diagnostic push
|
|
8
|
+
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
9
|
+
|
|
10
|
+
#include <SkFont.h>
|
|
11
|
+
|
|
12
|
+
#pragma clang diagnostic pop
|
|
13
|
+
|
|
14
|
+
namespace RNSkia {
|
|
15
|
+
|
|
16
|
+
RNSkDomRenderer::RNSkDomRenderer(std::function<void()> requestRedraw,
|
|
17
|
+
std::shared_ptr<RNSkPlatformContext> context)
|
|
18
|
+
: RNSkRenderer(requestRedraw), _platformContext(std::move(context)),
|
|
19
|
+
_renderLock(std::make_shared<std::timed_mutex>()),
|
|
20
|
+
_touchCallbackLock(std::make_shared<std::timed_mutex>()),
|
|
21
|
+
_renderTimingInfo("SKIA/RENDER") {}
|
|
22
|
+
|
|
23
|
+
RNSkDomRenderer::~RNSkDomRenderer() {
|
|
24
|
+
if (_root != nullptr) {
|
|
25
|
+
_root->dispose();
|
|
26
|
+
_root = nullptr;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
bool RNSkDomRenderer::tryRender(
|
|
31
|
+
std::shared_ptr<RNSkCanvasProvider> canvasProvider) {
|
|
32
|
+
// If we have touches we need to call the touch callback as well
|
|
33
|
+
if (_currentTouches.size() > 0) {
|
|
34
|
+
callOnTouch();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// We render on the main thread
|
|
38
|
+
if (_renderLock->try_lock()) {
|
|
39
|
+
// If we have a Dom Node we can render directly on the main thread
|
|
40
|
+
if (_root != nullptr) {
|
|
41
|
+
canvasProvider->renderToCanvas(std::bind(
|
|
42
|
+
&RNSkDomRenderer::renderCanvas, this, std::placeholders::_1,
|
|
43
|
+
canvasProvider->getScaledWidth(), canvasProvider->getScaledHeight()));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
_renderLock->unlock();
|
|
47
|
+
return true;
|
|
48
|
+
} else {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void RNSkDomRenderer::renderImmediate(
|
|
54
|
+
std::shared_ptr<RNSkCanvasProvider> canvasProvider) {
|
|
55
|
+
auto prevDebugOverlay = getShowDebugOverlays();
|
|
56
|
+
setShowDebugOverlays(false);
|
|
57
|
+
canvasProvider->renderToCanvas(std::bind(
|
|
58
|
+
&RNSkDomRenderer::renderCanvas, this, std::placeholders::_1,
|
|
59
|
+
canvasProvider->getScaledWidth(), canvasProvider->getScaledHeight()));
|
|
60
|
+
setShowDebugOverlays(prevDebugOverlay);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
void RNSkDomRenderer::setRoot(std::shared_ptr<JsiDomRenderNode> node) {
|
|
64
|
+
std::lock_guard<std::mutex> lock(_rootLock);
|
|
65
|
+
if (_root != nullptr) {
|
|
66
|
+
_root->dispose();
|
|
67
|
+
_root = nullptr;
|
|
68
|
+
}
|
|
69
|
+
_root = node;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void RNSkDomRenderer::setOnTouchCallback(
|
|
73
|
+
std::shared_ptr<jsi::Function> onTouchCallback) {
|
|
74
|
+
_touchCallback = onTouchCallback;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
void RNSkDomRenderer::renderCanvas(SkCanvas *canvas, float scaledWidth,
|
|
78
|
+
float scaledHeight) {
|
|
79
|
+
_renderTimingInfo.beginTiming();
|
|
80
|
+
|
|
81
|
+
auto pd = _platformContext->getPixelDensity();
|
|
82
|
+
|
|
83
|
+
canvas->save();
|
|
84
|
+
canvas->scale(pd, pd);
|
|
85
|
+
|
|
86
|
+
if (_drawingContext == nullptr) {
|
|
87
|
+
_drawingContext =
|
|
88
|
+
std::make_shared<DrawingContext>(std::make_shared<SkPaint>(), 1.0f);
|
|
89
|
+
|
|
90
|
+
_drawingContext->setRequestRedraw([weakSelf = weak_from_this()]() {
|
|
91
|
+
auto self = weakSelf.lock();
|
|
92
|
+
if (self) {
|
|
93
|
+
self->_requestRedraw();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
_drawingContext->setScaledWidth(scaledWidth);
|
|
99
|
+
_drawingContext->setScaledHeight(scaledHeight);
|
|
100
|
+
|
|
101
|
+
// Update canvas before drawing
|
|
102
|
+
_drawingContext->setCanvas(canvas);
|
|
103
|
+
|
|
104
|
+
try {
|
|
105
|
+
// Ask the root node to render to the provided canvas
|
|
106
|
+
std::lock_guard<std::mutex> lock(_rootLock);
|
|
107
|
+
if (_root != nullptr) {
|
|
108
|
+
_root->commitPendingChanges();
|
|
109
|
+
_root->render(_drawingContext.get());
|
|
110
|
+
_root->resetPendingChanges();
|
|
111
|
+
}
|
|
112
|
+
} catch (std::runtime_error err) {
|
|
113
|
+
_platformContext->raiseError(err);
|
|
114
|
+
} catch (jsi::JSError err) {
|
|
115
|
+
_platformContext->raiseError(err);
|
|
116
|
+
} catch (...) {
|
|
117
|
+
_platformContext->raiseError(
|
|
118
|
+
std::runtime_error("Error rendering the Skia view."));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
renderDebugOverlays(canvas);
|
|
122
|
+
|
|
123
|
+
canvas->restore();
|
|
124
|
+
|
|
125
|
+
_renderTimingInfo.stopTiming();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
void RNSkDomRenderer::updateTouches(std::vector<RNSkTouchInfo> &touches) {
|
|
129
|
+
std::lock_guard<std::mutex> lock(_touchMutex);
|
|
130
|
+
// Add timestamp
|
|
131
|
+
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(
|
|
132
|
+
std::chrono::system_clock::now().time_since_epoch())
|
|
133
|
+
.count();
|
|
134
|
+
|
|
135
|
+
for (size_t i = 0; i < touches.size(); i++) {
|
|
136
|
+
touches.at(i).timestamp = ms;
|
|
137
|
+
}
|
|
138
|
+
_currentTouches.push_back(std::move(touches));
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
void RNSkDomRenderer::callOnTouch() {
|
|
142
|
+
|
|
143
|
+
if (_touchCallback == nullptr) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (_touchCallbackLock->try_lock()) {
|
|
148
|
+
|
|
149
|
+
{
|
|
150
|
+
std::lock_guard<std::mutex> lock(_touchMutex);
|
|
151
|
+
_touchesCache.clear();
|
|
152
|
+
_touchesCache.reserve(_currentTouches.size());
|
|
153
|
+
for (size_t i = 0; i < _currentTouches.size(); ++i) {
|
|
154
|
+
_touchesCache.push_back(_currentTouches.at(i));
|
|
155
|
+
}
|
|
156
|
+
_currentTouches.clear();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// We have an onDraw method - use it to render since we don't have a
|
|
160
|
+
// DOM-node yet.
|
|
161
|
+
_platformContext->runOnJavascriptThread([weakSelf = weak_from_this()]() {
|
|
162
|
+
auto self = weakSelf.lock();
|
|
163
|
+
if (self) {
|
|
164
|
+
jsi::Runtime &runtime = *self->_platformContext->getJsRuntime();
|
|
165
|
+
// Set up touches
|
|
166
|
+
auto size = self->_touchesCache.size();
|
|
167
|
+
auto ops = jsi::Array(runtime, size);
|
|
168
|
+
for (size_t i = 0; i < size; i++) {
|
|
169
|
+
auto cur = self->_touchesCache.at(i);
|
|
170
|
+
auto curSize = cur.size();
|
|
171
|
+
auto touches = jsi::Array(runtime, curSize);
|
|
172
|
+
for (size_t n = 0; n < curSize; n++) {
|
|
173
|
+
auto touchObj = jsi::Object(runtime);
|
|
174
|
+
auto t = cur.at(n);
|
|
175
|
+
touchObj.setProperty(runtime, "x", t.x);
|
|
176
|
+
touchObj.setProperty(runtime, "y", t.y);
|
|
177
|
+
touchObj.setProperty(runtime, "force", t.force);
|
|
178
|
+
touchObj.setProperty(runtime, "type", static_cast<double>(t.type));
|
|
179
|
+
touchObj.setProperty(runtime, "timestamp",
|
|
180
|
+
static_cast<double>(t.timestamp) / 1000.0);
|
|
181
|
+
touchObj.setProperty(runtime, "id", static_cast<double>(t.id));
|
|
182
|
+
touches.setValueAtIndex(runtime, n, touchObj);
|
|
183
|
+
}
|
|
184
|
+
ops.setValueAtIndex(runtime, i, touches);
|
|
185
|
+
}
|
|
186
|
+
// Call on touch callback
|
|
187
|
+
self->_touchCallback->call(runtime, ops, 1);
|
|
188
|
+
}
|
|
189
|
+
self->_touchCallbackLock->unlock();
|
|
190
|
+
});
|
|
191
|
+
} else {
|
|
192
|
+
// We'll try next time - schedule a new redraw
|
|
193
|
+
_requestRedraw();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
void RNSkDomRenderer::renderDebugOverlays(SkCanvas *canvas) {
|
|
198
|
+
if (!getShowDebugOverlays()) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
auto renderAvg = _renderTimingInfo.getAverage();
|
|
202
|
+
auto fps = _renderTimingInfo.getFps();
|
|
203
|
+
|
|
204
|
+
// Build string
|
|
205
|
+
std::ostringstream stream;
|
|
206
|
+
stream << "render: " << renderAvg << "ms"
|
|
207
|
+
<< " fps: " << fps;
|
|
208
|
+
|
|
209
|
+
std::string debugString = stream.str();
|
|
210
|
+
|
|
211
|
+
// Set up debug font/paints
|
|
212
|
+
auto font = SkFont();
|
|
213
|
+
font.setSize(14);
|
|
214
|
+
auto paint = SkPaint();
|
|
215
|
+
paint.setColor(SkColors::kRed);
|
|
216
|
+
canvas->drawSimpleText(debugString.c_str(), debugString.size(),
|
|
217
|
+
SkTextEncoding::kUTF8, 8, 18, font, paint);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
} // namespace RNSkia
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <functional>
|
|
4
|
+
#include <memory>
|
|
5
|
+
#include <mutex>
|
|
6
|
+
#include <string>
|
|
7
|
+
#include <unordered_map>
|
|
8
|
+
#include <vector>
|
|
9
|
+
|
|
10
|
+
#include <jsi/jsi.h>
|
|
11
|
+
|
|
12
|
+
#include <JsiValueWrapper.h>
|
|
13
|
+
#include <RNSkView.h>
|
|
14
|
+
|
|
15
|
+
#include "JsiDomRenderNode.h"
|
|
16
|
+
#include <RNSkInfoParameter.h>
|
|
17
|
+
#include <RNSkLog.h>
|
|
18
|
+
#include <RNSkPlatformContext.h>
|
|
19
|
+
#include <RNSkTimingInfo.h>
|
|
20
|
+
|
|
21
|
+
#pragma clang diagnostic push
|
|
22
|
+
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
23
|
+
|
|
24
|
+
#include <SkBBHFactory.h>
|
|
25
|
+
#include <SkCanvas.h>
|
|
26
|
+
#include <SkPictureRecorder.h>
|
|
27
|
+
|
|
28
|
+
#pragma clang diagnostic pop
|
|
29
|
+
|
|
30
|
+
class SkPicture;
|
|
31
|
+
class SkRect;
|
|
32
|
+
class SkImage;
|
|
33
|
+
|
|
34
|
+
namespace RNSkia {
|
|
35
|
+
class JsiSkCanvas;
|
|
36
|
+
namespace jsi = facebook::jsi;
|
|
37
|
+
|
|
38
|
+
class RNSkDomRenderer : public RNSkRenderer,
|
|
39
|
+
public std::enable_shared_from_this<RNSkDomRenderer> {
|
|
40
|
+
public:
|
|
41
|
+
RNSkDomRenderer(std::function<void()> requestRedraw,
|
|
42
|
+
std::shared_ptr<RNSkPlatformContext> context);
|
|
43
|
+
|
|
44
|
+
~RNSkDomRenderer();
|
|
45
|
+
|
|
46
|
+
bool tryRender(std::shared_ptr<RNSkCanvasProvider> canvasProvider) override;
|
|
47
|
+
|
|
48
|
+
void
|
|
49
|
+
renderImmediate(std::shared_ptr<RNSkCanvasProvider> canvasProvider) override;
|
|
50
|
+
|
|
51
|
+
void setRoot(std::shared_ptr<JsiDomRenderNode> node);
|
|
52
|
+
|
|
53
|
+
void setOnTouchCallback(std::shared_ptr<jsi::Function> onTouchCallback);
|
|
54
|
+
|
|
55
|
+
void updateTouches(std::vector<RNSkTouchInfo> &touches);
|
|
56
|
+
|
|
57
|
+
private:
|
|
58
|
+
void callOnTouch();
|
|
59
|
+
void renderCanvas(SkCanvas *canvas, float scaledWidth, float scaledHeight);
|
|
60
|
+
void renderDebugOverlays(SkCanvas *canvas);
|
|
61
|
+
|
|
62
|
+
std::shared_ptr<RNSkPlatformContext> _platformContext;
|
|
63
|
+
std::shared_ptr<jsi::Function> _touchCallback;
|
|
64
|
+
|
|
65
|
+
std::shared_ptr<std::timed_mutex> _renderLock;
|
|
66
|
+
std::shared_ptr<std::timed_mutex> _touchCallbackLock;
|
|
67
|
+
|
|
68
|
+
std::shared_ptr<JsiDomRenderNode> _root;
|
|
69
|
+
std::shared_ptr<DrawingContext> _drawingContext;
|
|
70
|
+
|
|
71
|
+
RNSkTimingInfo _renderTimingInfo;
|
|
72
|
+
|
|
73
|
+
std::mutex _touchMutex;
|
|
74
|
+
std::vector<std::vector<RNSkTouchInfo>> _currentTouches;
|
|
75
|
+
std::vector<std::vector<RNSkTouchInfo>> _touchesCache;
|
|
76
|
+
std::mutex _rootLock;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
class RNSkDomView : public RNSkView {
|
|
80
|
+
public:
|
|
81
|
+
/**
|
|
82
|
+
* Constructor
|
|
83
|
+
*/
|
|
84
|
+
RNSkDomView(std::shared_ptr<RNSkPlatformContext> context,
|
|
85
|
+
std::shared_ptr<RNSkCanvasProvider> canvasProvider)
|
|
86
|
+
: RNSkView(context, canvasProvider,
|
|
87
|
+
std::make_shared<RNSkDomRenderer>(
|
|
88
|
+
std::bind(&RNSkView::requestRedraw, this), context)) {}
|
|
89
|
+
|
|
90
|
+
void updateTouchState(std::vector<RNSkTouchInfo> &touches) override {
|
|
91
|
+
std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
|
|
92
|
+
->updateTouches(touches);
|
|
93
|
+
RNSkView::updateTouchState(touches);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
void setJsiProperties(
|
|
97
|
+
std::unordered_map<std::string, JsiValueWrapper> &props) override {
|
|
98
|
+
|
|
99
|
+
RNSkView::setJsiProperties(props);
|
|
100
|
+
|
|
101
|
+
for (auto &prop : props) {
|
|
102
|
+
if (prop.first == "onTouch") {
|
|
103
|
+
if (prop.second.isUndefinedOrNull()) {
|
|
104
|
+
// Clear touchCallback
|
|
105
|
+
std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
|
|
106
|
+
->setOnTouchCallback(nullptr);
|
|
107
|
+
requestRedraw();
|
|
108
|
+
continue;
|
|
109
|
+
|
|
110
|
+
} else if (prop.second.getType() != JsiWrapperValueType::Function) {
|
|
111
|
+
// We expect a function for the draw callback custom property
|
|
112
|
+
throw std::runtime_error(
|
|
113
|
+
"Expected a function for the onTouch property.");
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// Save callback
|
|
117
|
+
std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
|
|
118
|
+
->setOnTouchCallback(prop.second.getAsFunction());
|
|
119
|
+
|
|
120
|
+
// Request redraw
|
|
121
|
+
requestRedraw();
|
|
122
|
+
|
|
123
|
+
} else if (prop.first == "root") {
|
|
124
|
+
// Save root
|
|
125
|
+
if (prop.second.isUndefined() || prop.second.isNull()) {
|
|
126
|
+
std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
|
|
127
|
+
->setRoot(nullptr);
|
|
128
|
+
} else {
|
|
129
|
+
std::static_pointer_cast<RNSkDomRenderer>(getRenderer())
|
|
130
|
+
->setRoot(std::dynamic_pointer_cast<JsiDomRenderNode>(
|
|
131
|
+
prop.second.getAsHostObject()));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Request redraw
|
|
135
|
+
requestRedraw();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
} // namespace RNSkia
|
|
@@ -202,10 +202,6 @@ void RNSkJsRenderer::drawInJsiCanvas(std::shared_ptr<JsiSkCanvas> jsiCanvas,
|
|
|
202
202
|
|
|
203
203
|
// Call draw function.
|
|
204
204
|
callJsDrawCallback(jsiCanvas, width / pd, height / pd, time);
|
|
205
|
-
|
|
206
|
-
// Restore and flush canvas
|
|
207
|
-
skCanvas->restore();
|
|
208
|
-
skCanvas->flush();
|
|
209
205
|
}
|
|
210
206
|
}
|
|
211
207
|
|
package/cpp/rnskia/RNSkJsView.h
CHANGED
|
@@ -89,13 +89,18 @@ public:
|
|
|
89
89
|
|
|
90
90
|
void setJsiProperties(
|
|
91
91
|
std::unordered_map<std::string, RNJsi::JsiValueWrapper> &props) override {
|
|
92
|
+
|
|
93
|
+
RNSkView::setJsiProperties(props);
|
|
94
|
+
|
|
92
95
|
for (auto &prop : props) {
|
|
93
96
|
if (prop.first == "drawCallback") {
|
|
94
97
|
if (prop.second.isUndefinedOrNull()) {
|
|
95
98
|
// Clear drawcallback
|
|
96
99
|
std::static_pointer_cast<RNSkJsRenderer>(getRenderer())
|
|
97
100
|
->setDrawCallback(nullptr);
|
|
98
|
-
|
|
101
|
+
requestRedraw();
|
|
102
|
+
continue;
|
|
103
|
+
|
|
99
104
|
} else if (prop.second.getType() !=
|
|
100
105
|
RNJsi::JsiWrapperValueType::Function) {
|
|
101
106
|
// We expect a function for the draw callback custom property
|
|
@@ -109,9 +114,6 @@ public:
|
|
|
109
114
|
|
|
110
115
|
// Request redraw
|
|
111
116
|
requestRedraw();
|
|
112
|
-
|
|
113
|
-
} else {
|
|
114
|
-
RNSkView::setJsiProperties(props);
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
119
|
}
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
#include <RNSkValueApi.h>
|
|
11
11
|
#include <RNSkView.h>
|
|
12
12
|
|
|
13
|
+
#include <JsiDomApi.h>
|
|
14
|
+
|
|
13
15
|
namespace RNSkia {
|
|
14
16
|
namespace jsi = facebook::jsi;
|
|
15
17
|
|
|
@@ -78,5 +80,10 @@ void RNSkManager::installBindings() {
|
|
|
78
80
|
_jsRuntime->global().setProperty(
|
|
79
81
|
*_jsRuntime, "SkiaValueApi",
|
|
80
82
|
jsi::Object::createFromHostObject(*_jsRuntime, std::move(skiaValueApi)));
|
|
83
|
+
|
|
84
|
+
auto skiaDomApi = std::make_shared<JsiDomApi>(_platformContext);
|
|
85
|
+
_jsRuntime->global().setProperty(
|
|
86
|
+
*_jsRuntime, "SkiaDomApi",
|
|
87
|
+
jsi::Object::createFromHostObject(*_jsRuntime, std::move(skiaDomApi)));
|
|
81
88
|
}
|
|
82
89
|
} // namespace RNSkia
|