@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,126 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2016 Google Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed by a BSD-style license that can be
|
|
5
|
+
* found in the LICENSE file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#ifndef SkLRUCache_DEFINED
|
|
9
|
+
#define SkLRUCache_DEFINED
|
|
10
|
+
|
|
11
|
+
#include "include/private/SkChecksum.h"
|
|
12
|
+
#include "include/private/SkTHash.h"
|
|
13
|
+
#include "src/core/SkTInternalLList.h"
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* A generic LRU cache.
|
|
17
|
+
*/
|
|
18
|
+
template <typename K, typename V, typename HashK = SkGoodHash>
|
|
19
|
+
class SkLRUCache : public SkNoncopyable {
|
|
20
|
+
private:
|
|
21
|
+
struct Entry {
|
|
22
|
+
Entry(const K& key, V&& value)
|
|
23
|
+
: fKey(key)
|
|
24
|
+
, fValue(std::move(value)) {}
|
|
25
|
+
|
|
26
|
+
K fKey;
|
|
27
|
+
V fValue;
|
|
28
|
+
|
|
29
|
+
SK_DECLARE_INTERNAL_LLIST_INTERFACE(Entry);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
public:
|
|
33
|
+
explicit SkLRUCache(int maxCount)
|
|
34
|
+
: fMaxCount(maxCount) {}
|
|
35
|
+
|
|
36
|
+
~SkLRUCache() {
|
|
37
|
+
Entry* node = fLRU.head();
|
|
38
|
+
while (node) {
|
|
39
|
+
fLRU.remove(node);
|
|
40
|
+
delete node;
|
|
41
|
+
node = fLRU.head();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
V* find(const K& key) {
|
|
46
|
+
Entry** value = fMap.find(key);
|
|
47
|
+
if (!value) {
|
|
48
|
+
return nullptr;
|
|
49
|
+
}
|
|
50
|
+
Entry* entry = *value;
|
|
51
|
+
if (entry != fLRU.head()) {
|
|
52
|
+
fLRU.remove(entry);
|
|
53
|
+
fLRU.addToHead(entry);
|
|
54
|
+
} // else it's already at head position, don't need to do anything
|
|
55
|
+
return &entry->fValue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
V* insert(const K& key, V value) {
|
|
59
|
+
SkASSERT(!this->find(key));
|
|
60
|
+
|
|
61
|
+
Entry* entry = new Entry(key, std::move(value));
|
|
62
|
+
fMap.set(entry);
|
|
63
|
+
fLRU.addToHead(entry);
|
|
64
|
+
while (fMap.count() > fMaxCount) {
|
|
65
|
+
this->remove(fLRU.tail()->fKey);
|
|
66
|
+
}
|
|
67
|
+
return &entry->fValue;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
V* insert_or_update(const K& key, V value) {
|
|
71
|
+
if (V* found = this->find(key)) {
|
|
72
|
+
*found = std::move(value);
|
|
73
|
+
return found;
|
|
74
|
+
} else {
|
|
75
|
+
return this->insert(key, std::move(value));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
int count() {
|
|
80
|
+
return fMap.count();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
template <typename Fn> // f(K*, V*)
|
|
84
|
+
void foreach(Fn&& fn) {
|
|
85
|
+
typename SkTInternalLList<Entry>::Iter iter;
|
|
86
|
+
for (Entry* e = iter.init(fLRU, SkTInternalLList<Entry>::Iter::kHead_IterStart); e;
|
|
87
|
+
e = iter.next()) {
|
|
88
|
+
fn(&e->fKey, &e->fValue);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
void reset() {
|
|
93
|
+
fMap.reset();
|
|
94
|
+
for (Entry* e = fLRU.head(); e; e = fLRU.head()) {
|
|
95
|
+
fLRU.remove(e);
|
|
96
|
+
delete e;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private:
|
|
101
|
+
struct Traits {
|
|
102
|
+
static const K& GetKey(Entry* e) {
|
|
103
|
+
return e->fKey;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
static uint32_t Hash(const K& k) {
|
|
107
|
+
return HashK()(k);
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
void remove(const K& key) {
|
|
112
|
+
Entry** value = fMap.find(key);
|
|
113
|
+
SkASSERT(value);
|
|
114
|
+
Entry* entry = *value;
|
|
115
|
+
SkASSERT(key == entry->fKey);
|
|
116
|
+
fMap.remove(key);
|
|
117
|
+
fLRU.remove(entry);
|
|
118
|
+
delete entry;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
int fMaxCount;
|
|
122
|
+
SkTHashTable<Entry*, K, Traits> fMap;
|
|
123
|
+
SkTInternalLList<Entry> fLRU;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
#endif
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2012 Google Inc.
|
|
3
|
+
*
|
|
4
|
+
* Use of this source code is governed by a BSD-style license that can be
|
|
5
|
+
* found in the LICENSE file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#ifndef SkTInternalLList_DEFINED
|
|
9
|
+
#define SkTInternalLList_DEFINED
|
|
10
|
+
|
|
11
|
+
#include "include/core/SkTypes.h"
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* This macro creates the member variables required by the SkTInternalLList class. It should be
|
|
15
|
+
* placed in the private section of any class that will be stored in a double linked list.
|
|
16
|
+
*/
|
|
17
|
+
#define SK_DECLARE_INTERNAL_LLIST_INTERFACE(ClassName) \
|
|
18
|
+
friend class SkTInternalLList<ClassName>; \
|
|
19
|
+
/* back pointer to the owning list - for debugging */ \
|
|
20
|
+
SkDEBUGCODE(SkTInternalLList<ClassName>* fList = nullptr;) \
|
|
21
|
+
ClassName* fPrev = nullptr; \
|
|
22
|
+
ClassName* fNext = nullptr
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* This class implements a templated internal doubly linked list data structure.
|
|
26
|
+
*/
|
|
27
|
+
template <class T> class SkTInternalLList {
|
|
28
|
+
public:
|
|
29
|
+
SkTInternalLList() {}
|
|
30
|
+
|
|
31
|
+
void reset() {
|
|
32
|
+
fHead = nullptr;
|
|
33
|
+
fTail = nullptr;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
void remove(T* entry) {
|
|
37
|
+
SkASSERT(fHead && fTail);
|
|
38
|
+
SkASSERT(this->isInList(entry));
|
|
39
|
+
|
|
40
|
+
T* prev = entry->fPrev;
|
|
41
|
+
T* next = entry->fNext;
|
|
42
|
+
|
|
43
|
+
if (prev) {
|
|
44
|
+
prev->fNext = next;
|
|
45
|
+
} else {
|
|
46
|
+
fHead = next;
|
|
47
|
+
}
|
|
48
|
+
if (next) {
|
|
49
|
+
next->fPrev = prev;
|
|
50
|
+
} else {
|
|
51
|
+
fTail = prev;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
entry->fPrev = nullptr;
|
|
55
|
+
entry->fNext = nullptr;
|
|
56
|
+
|
|
57
|
+
#ifdef SK_DEBUG
|
|
58
|
+
entry->fList = nullptr;
|
|
59
|
+
#endif
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
void addToHead(T* entry) {
|
|
63
|
+
SkASSERT(nullptr == entry->fPrev && nullptr == entry->fNext);
|
|
64
|
+
SkASSERT(nullptr == entry->fList);
|
|
65
|
+
|
|
66
|
+
entry->fPrev = nullptr;
|
|
67
|
+
entry->fNext = fHead;
|
|
68
|
+
if (fHead) {
|
|
69
|
+
fHead->fPrev = entry;
|
|
70
|
+
}
|
|
71
|
+
fHead = entry;
|
|
72
|
+
if (nullptr == fTail) {
|
|
73
|
+
fTail = entry;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
#ifdef SK_DEBUG
|
|
77
|
+
entry->fList = this;
|
|
78
|
+
#endif
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
void addToTail(T* entry) {
|
|
82
|
+
SkASSERT(nullptr == entry->fPrev && nullptr == entry->fNext);
|
|
83
|
+
SkASSERT(nullptr == entry->fList);
|
|
84
|
+
|
|
85
|
+
entry->fPrev = fTail;
|
|
86
|
+
entry->fNext = nullptr;
|
|
87
|
+
if (fTail) {
|
|
88
|
+
fTail->fNext = entry;
|
|
89
|
+
}
|
|
90
|
+
fTail = entry;
|
|
91
|
+
if (nullptr == fHead) {
|
|
92
|
+
fHead = entry;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
#ifdef SK_DEBUG
|
|
96
|
+
entry->fList = this;
|
|
97
|
+
#endif
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Inserts a new list entry before an existing list entry. The new entry must not already be
|
|
102
|
+
* a member of this or any other list. If existingEntry is NULL then the new entry is added
|
|
103
|
+
* at the tail.
|
|
104
|
+
*/
|
|
105
|
+
void addBefore(T* newEntry, T* existingEntry) {
|
|
106
|
+
SkASSERT(newEntry);
|
|
107
|
+
|
|
108
|
+
if (nullptr == existingEntry) {
|
|
109
|
+
this->addToTail(newEntry);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
SkASSERT(this->isInList(existingEntry));
|
|
114
|
+
newEntry->fNext = existingEntry;
|
|
115
|
+
T* prev = existingEntry->fPrev;
|
|
116
|
+
existingEntry->fPrev = newEntry;
|
|
117
|
+
newEntry->fPrev = prev;
|
|
118
|
+
if (nullptr == prev) {
|
|
119
|
+
SkASSERT(fHead == existingEntry);
|
|
120
|
+
fHead = newEntry;
|
|
121
|
+
} else {
|
|
122
|
+
prev->fNext = newEntry;
|
|
123
|
+
}
|
|
124
|
+
#ifdef SK_DEBUG
|
|
125
|
+
newEntry->fList = this;
|
|
126
|
+
#endif
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Inserts a new list entry after an existing list entry. The new entry must not already be
|
|
131
|
+
* a member of this or any other list. If existingEntry is NULL then the new entry is added
|
|
132
|
+
* at the head.
|
|
133
|
+
*/
|
|
134
|
+
void addAfter(T* newEntry, T* existingEntry) {
|
|
135
|
+
SkASSERT(newEntry);
|
|
136
|
+
|
|
137
|
+
if (nullptr == existingEntry) {
|
|
138
|
+
this->addToHead(newEntry);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
SkASSERT(this->isInList(existingEntry));
|
|
143
|
+
newEntry->fPrev = existingEntry;
|
|
144
|
+
T* next = existingEntry->fNext;
|
|
145
|
+
existingEntry->fNext = newEntry;
|
|
146
|
+
newEntry->fNext = next;
|
|
147
|
+
if (nullptr == next) {
|
|
148
|
+
SkASSERT(fTail == existingEntry);
|
|
149
|
+
fTail = newEntry;
|
|
150
|
+
} else {
|
|
151
|
+
next->fPrev = newEntry;
|
|
152
|
+
}
|
|
153
|
+
#ifdef SK_DEBUG
|
|
154
|
+
newEntry->fList = this;
|
|
155
|
+
#endif
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
void concat(SkTInternalLList&& list) {
|
|
159
|
+
if (list.isEmpty()) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
list.fHead->fPrev = fTail;
|
|
164
|
+
if (!fHead) {
|
|
165
|
+
SkASSERT(!list.fHead->fPrev);
|
|
166
|
+
fHead = list.fHead;
|
|
167
|
+
} else {
|
|
168
|
+
SkASSERT(fTail);
|
|
169
|
+
fTail->fNext = list.fHead;
|
|
170
|
+
}
|
|
171
|
+
fTail = list.fTail;
|
|
172
|
+
|
|
173
|
+
#ifdef SK_DEBUG
|
|
174
|
+
for (T* node = list.fHead; node; node = node->fNext) {
|
|
175
|
+
SkASSERT(node->fList == &list);
|
|
176
|
+
node->fList = this;
|
|
177
|
+
}
|
|
178
|
+
#endif
|
|
179
|
+
|
|
180
|
+
list.fHead = list.fTail = nullptr;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
bool isEmpty() const {
|
|
184
|
+
SkASSERT(SkToBool(fHead) == SkToBool(fTail));
|
|
185
|
+
return !fHead;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
T* head() const { return fHead; }
|
|
189
|
+
T* tail() const { return fTail; }
|
|
190
|
+
|
|
191
|
+
class Iter {
|
|
192
|
+
public:
|
|
193
|
+
enum IterStart {
|
|
194
|
+
kHead_IterStart,
|
|
195
|
+
kTail_IterStart
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
Iter() : fCurr(nullptr) {}
|
|
199
|
+
Iter(const Iter& iter) : fCurr(iter.fCurr) {}
|
|
200
|
+
Iter& operator= (const Iter& iter) { fCurr = iter.fCurr; return *this; }
|
|
201
|
+
|
|
202
|
+
T* init(const SkTInternalLList& list, IterStart startLoc) {
|
|
203
|
+
if (kHead_IterStart == startLoc) {
|
|
204
|
+
fCurr = list.fHead;
|
|
205
|
+
} else {
|
|
206
|
+
SkASSERT(kTail_IterStart == startLoc);
|
|
207
|
+
fCurr = list.fTail;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return fCurr;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
T* get() { return fCurr; }
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Return the next/previous element in the list or NULL if at the end.
|
|
217
|
+
*/
|
|
218
|
+
T* next() {
|
|
219
|
+
if (nullptr == fCurr) {
|
|
220
|
+
return nullptr;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
fCurr = fCurr->fNext;
|
|
224
|
+
return fCurr;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
T* prev() {
|
|
228
|
+
if (nullptr == fCurr) {
|
|
229
|
+
return nullptr;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
fCurr = fCurr->fPrev;
|
|
233
|
+
return fCurr;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* C++11 range-for interface.
|
|
238
|
+
*/
|
|
239
|
+
bool operator!=(const Iter& that) { return fCurr != that.fCurr; }
|
|
240
|
+
T* operator*() { return this->get(); }
|
|
241
|
+
void operator++() { this->next(); }
|
|
242
|
+
|
|
243
|
+
private:
|
|
244
|
+
T* fCurr;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
Iter begin() const {
|
|
248
|
+
Iter iter;
|
|
249
|
+
iter.init(*this, Iter::kHead_IterStart);
|
|
250
|
+
return iter;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
Iter end() const { return Iter(); }
|
|
254
|
+
|
|
255
|
+
#ifdef SK_DEBUG
|
|
256
|
+
void validate() const {
|
|
257
|
+
SkASSERT(!fHead == !fTail);
|
|
258
|
+
Iter iter;
|
|
259
|
+
for (T* item = iter.init(*this, Iter::kHead_IterStart); item; item = iter.next()) {
|
|
260
|
+
SkASSERT(this->isInList(item));
|
|
261
|
+
if (nullptr == item->fPrev) {
|
|
262
|
+
SkASSERT(fHead == item);
|
|
263
|
+
} else {
|
|
264
|
+
SkASSERT(item->fPrev->fNext == item);
|
|
265
|
+
}
|
|
266
|
+
if (nullptr == item->fNext) {
|
|
267
|
+
SkASSERT(fTail == item);
|
|
268
|
+
} else {
|
|
269
|
+
SkASSERT(item->fNext->fPrev == item);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Debugging-only method that uses the list back pointer to check if 'entry' is indeed in 'this'
|
|
276
|
+
* list.
|
|
277
|
+
*/
|
|
278
|
+
bool isInList(const T* entry) const {
|
|
279
|
+
return entry->fList == this;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Debugging-only method that laboriously counts the list entries.
|
|
284
|
+
*/
|
|
285
|
+
int countEntries() const {
|
|
286
|
+
int count = 0;
|
|
287
|
+
for (T* entry = fHead; entry; entry = entry->fNext) {
|
|
288
|
+
++count;
|
|
289
|
+
}
|
|
290
|
+
return count;
|
|
291
|
+
}
|
|
292
|
+
#endif // SK_DEBUG
|
|
293
|
+
|
|
294
|
+
private:
|
|
295
|
+
T* fHead = nullptr;
|
|
296
|
+
T* fTail = nullptr;
|
|
297
|
+
|
|
298
|
+
SkTInternalLList(const SkTInternalLList&) = delete;
|
|
299
|
+
SkTInternalLList& operator=(const SkTInternalLList&) = delete;
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
#endif
|
|
@@ -6,6 +6,14 @@
|
|
|
6
6
|
#import <MetalKit/MetalKit.h>
|
|
7
7
|
#import <QuartzCore/CAMetalLayer.h>
|
|
8
8
|
|
|
9
|
+
using MetalRenderContext = struct {
|
|
10
|
+
id<MTLCommandQueue> commandQueue;
|
|
11
|
+
sk_sp<GrDirectContext> skContext;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
static std::unordered_map<std::thread::id, std::shared_ptr<MetalRenderContext>>
|
|
15
|
+
renderContexts;
|
|
16
|
+
|
|
9
17
|
class RNSkMetalCanvasProvider : public RNSkia::RNSkCanvasProvider {
|
|
10
18
|
public:
|
|
11
19
|
RNSkMetalCanvasProvider(std::function<void()> requestRedraw,
|
|
@@ -23,6 +31,13 @@ public:
|
|
|
23
31
|
CALayer *getLayer();
|
|
24
32
|
|
|
25
33
|
private:
|
|
34
|
+
/**
|
|
35
|
+
* To be able to use static contexts (and avoid reloading the skia context for
|
|
36
|
+
* each new view, we track the Skia drawing context per thread.
|
|
37
|
+
* @return The drawing context for the current thread
|
|
38
|
+
*/
|
|
39
|
+
static std::shared_ptr<MetalRenderContext> getMetalRenderContext();
|
|
40
|
+
|
|
26
41
|
std::shared_ptr<RNSkia::RNSkPlatformContext> _context;
|
|
27
42
|
float _width = -1;
|
|
28
43
|
float _height = -1;
|
|
@@ -30,8 +45,4 @@ private:
|
|
|
30
45
|
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
|
|
31
46
|
CAMetalLayer *_layer;
|
|
32
47
|
#pragma clang diagnostic pop
|
|
33
|
-
|
|
34
|
-
static id<MTLCommandQueue> _commandQueue;
|
|
35
|
-
static id<MTLDevice> _device;
|
|
36
|
-
static sk_sp<GrDirectContext> _skContext;
|
|
37
48
|
};
|
|
@@ -12,50 +12,40 @@
|
|
|
12
12
|
|
|
13
13
|
#pragma clang diagnostic pop
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
/** Static members */
|
|
16
|
+
std::shared_ptr<MetalRenderContext>
|
|
17
|
+
RNSkMetalCanvasProvider::getMetalRenderContext() {
|
|
18
|
+
auto threadId = std::this_thread::get_id();
|
|
19
|
+
if (renderContexts.count(threadId) == 0) {
|
|
20
|
+
auto drawingContext = std::make_shared<MetalRenderContext>();
|
|
21
|
+
drawingContext->commandQueue = nullptr;
|
|
22
|
+
drawingContext->skContext = nullptr;
|
|
23
|
+
renderContexts.emplace(threadId, drawingContext);
|
|
24
|
+
}
|
|
25
|
+
return renderContexts.at(threadId);
|
|
26
|
+
}
|
|
19
27
|
|
|
20
28
|
RNSkMetalCanvasProvider::RNSkMetalCanvasProvider(std::function<void()> requestRedraw,
|
|
21
29
|
std::shared_ptr<RNSkia::RNSkPlatformContext> context):
|
|
22
30
|
RNSkCanvasProvider(requestRedraw),
|
|
23
31
|
_context(context) {
|
|
24
|
-
if (!_device) {
|
|
25
|
-
_device = MTLCreateSystemDefaultDevice();
|
|
26
|
-
}
|
|
27
|
-
if (!_commandQueue) {
|
|
28
|
-
_commandQueue = id<MTLCommandQueue>(CFRetain((GrMTLHandle)[_device newCommandQueue]));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
32
|
#pragma clang diagnostic push
|
|
32
33
|
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
|
|
33
34
|
_layer = [CAMetalLayer layer];
|
|
34
35
|
#pragma clang diagnostic pop
|
|
35
36
|
|
|
37
|
+
auto device = MTLCreateSystemDefaultDevice();
|
|
38
|
+
|
|
36
39
|
_layer.framebufferOnly = NO;
|
|
37
|
-
_layer.device =
|
|
40
|
+
_layer.device = device;
|
|
38
41
|
_layer.opaque = false;
|
|
39
42
|
_layer.contentsScale = _context->getPixelDensity();
|
|
40
43
|
_layer.pixelFormat = MTLPixelFormatBGRA8Unorm;
|
|
44
|
+
_layer.contentsGravity = kCAGravityBottomRight;
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
RNSkMetalCanvasProvider::~RNSkMetalCanvasProvider() {
|
|
44
|
-
|
|
45
|
-
_layer = NULL;
|
|
46
|
-
} else {
|
|
47
|
-
__block auto tempLayer = _layer;
|
|
48
|
-
dispatch_async(dispatch_get_main_queue(), ^{
|
|
49
|
-
// By using the tempLayer variable in the block we capture it and it will be
|
|
50
|
-
// released after the block has finished. This way the CAMetalLayer dealloc will
|
|
51
|
-
// only be called on the main thread. Problem: this destructor might be called from
|
|
52
|
-
// releasing the RNSkDrawViewImpl from a thread capture (after dtor has started),
|
|
53
|
-
// which would cause the CAMetalLayer dealloc to be called on another thread which
|
|
54
|
-
// causes a crash.
|
|
55
|
-
// https://github.com/Shopify/react-native-skia/issues/398
|
|
56
|
-
tempLayer = tempLayer;
|
|
57
|
-
});
|
|
58
|
-
}
|
|
48
|
+
|
|
59
49
|
}
|
|
60
50
|
|
|
61
51
|
/**
|
|
@@ -76,11 +66,13 @@ void RNSkMetalCanvasProvider::renderToCanvas(const std::function<void(SkCanvas*)
|
|
|
76
66
|
return;
|
|
77
67
|
}
|
|
78
68
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
69
|
+
// Get render context for current thread
|
|
70
|
+
auto renderContext = getMetalRenderContext();
|
|
71
|
+
|
|
72
|
+
if (renderContext->skContext == nullptr) {
|
|
73
|
+
auto device = MTLCreateSystemDefaultDevice();
|
|
74
|
+
renderContext->commandQueue = id<MTLCommandQueue>(CFRetain((GrMTLHandle)[device newCommandQueue]));
|
|
75
|
+
renderContext->skContext = GrDirectContext::MakeMetal((__bridge void*)device, (__bridge void*)renderContext->commandQueue);
|
|
84
76
|
}
|
|
85
77
|
|
|
86
78
|
// Wrap in auto release pool since we want the system to clean up after rendering
|
|
@@ -88,35 +80,29 @@ void RNSkMetalCanvasProvider::renderToCanvas(const std::function<void(SkCanvas*)
|
|
|
88
80
|
// fast in the simulator without this.
|
|
89
81
|
@autoreleasepool
|
|
90
82
|
{
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
_layer.drawableSize.height,
|
|
101
|
-
1,
|
|
102
|
-
fbInfo);
|
|
103
|
-
|
|
104
|
-
auto skSurface = SkSurface::MakeFromBackendRenderTarget(_skContext.get(),
|
|
105
|
-
backendRT,
|
|
106
|
-
kTopLeft_GrSurfaceOrigin,
|
|
107
|
-
kBGRA_8888_SkColorType,
|
|
108
|
-
nullptr,
|
|
109
|
-
nullptr);
|
|
83
|
+
GrMTLHandle drawableHandle;
|
|
84
|
+
auto skSurface = SkSurface::MakeFromCAMetalLayer(renderContext->skContext.get(),
|
|
85
|
+
(__bridge GrMTLHandle)_layer,
|
|
86
|
+
kTopLeft_GrSurfaceOrigin,
|
|
87
|
+
1,
|
|
88
|
+
kBGRA_8888_SkColorType,
|
|
89
|
+
nullptr,
|
|
90
|
+
nullptr,
|
|
91
|
+
&drawableHandle);
|
|
110
92
|
|
|
111
93
|
if(skSurface == nullptr || skSurface->getCanvas() == nullptr) {
|
|
112
94
|
RNSkia::RNSkLogger::logToConsole("Skia surface could not be created from parameters.");
|
|
113
95
|
return;
|
|
114
96
|
}
|
|
115
97
|
|
|
116
|
-
skSurface->getCanvas()
|
|
117
|
-
|
|
98
|
+
SkCanvas *canvas = skSurface->getCanvas();
|
|
99
|
+
canvas->clear(SK_AlphaTRANSPARENT);
|
|
100
|
+
cb(canvas);
|
|
101
|
+
skSurface->flushAndSubmit();
|
|
118
102
|
|
|
119
|
-
id<
|
|
103
|
+
id<CAMetalDrawable> currentDrawable = (__bridge id<CAMetalDrawable>)drawableHandle;
|
|
104
|
+
id<MTLCommandBuffer> commandBuffer([renderContext->commandQueue commandBuffer]);
|
|
105
|
+
commandBuffer.label = @"PresentSkia";
|
|
120
106
|
[commandBuffer presentDrawable:currentDrawable];
|
|
121
107
|
[commandBuffer commit];
|
|
122
108
|
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
|
|
2
|
+
#include <SkiaDomViewManager.h>
|
|
3
|
+
#include <React/RCTBridge+Private.h>
|
|
4
|
+
|
|
5
|
+
#include <RNSkPlatformContext.h>
|
|
6
|
+
#include <RNSkDomView.h>
|
|
7
|
+
#include <RNSkIOSView.h>
|
|
8
|
+
|
|
9
|
+
#include <SkiaManager.h>
|
|
10
|
+
#include <RNSkiaModule.h>
|
|
11
|
+
#include <SkiaUIView.h>
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@implementation SkiaDomViewManager
|
|
16
|
+
|
|
17
|
+
RCT_EXPORT_MODULE(SkiaDomView)
|
|
18
|
+
|
|
19
|
+
- (SkiaManager*) skiaManager {
|
|
20
|
+
auto bridge = [RCTBridge currentBridge];
|
|
21
|
+
auto skiaModule = (RNSkiaModule*)[bridge moduleForName:@"RNSkia"];
|
|
22
|
+
return [skiaModule manager];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
RCT_CUSTOM_VIEW_PROPERTY(nativeID, NSNumber, SkiaUIView) {
|
|
26
|
+
// Get parameter
|
|
27
|
+
int nativeId = [[RCTConvert NSString:json] intValue];
|
|
28
|
+
[(SkiaUIView*)view setNativeId:nativeId];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
RCT_CUSTOM_VIEW_PROPERTY(mode, NSString, SkiaUIView) {
|
|
32
|
+
std::string mode = json != NULL ? [[RCTConvert NSString:json] UTF8String] : "default";
|
|
33
|
+
[(SkiaUIView*)view setDrawingMode: mode];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
RCT_CUSTOM_VIEW_PROPERTY(debug, BOOL, SkiaUIView) {
|
|
37
|
+
bool debug = json != NULL ? [RCTConvert BOOL:json] : false;
|
|
38
|
+
[(SkiaUIView*)view setDebugMode: debug];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
- (UIView *)view
|
|
42
|
+
{
|
|
43
|
+
auto skManager = [[self skiaManager] skManager];
|
|
44
|
+
// Pass SkManager as a raw pointer to avoid circular dependenciesr
|
|
45
|
+
return [[SkiaUIView alloc] initWithManager: skManager.get()
|
|
46
|
+
factory: [](std::shared_ptr<RNSkia::RNSkPlatformContext> context) {
|
|
47
|
+
return std::make_shared<RNSkiOSView<RNSkia::RNSkDomView>>(context);
|
|
48
|
+
}];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@end
|