@shopify/react-native-skia 1.8.0 → 1.8.2
Sign up to get free protection for your applications and to get access to all the features.
- package/cpp/api/JsiSkPaint.h +8 -1
- package/lib/commonjs/dom/types/Common.d.ts +6 -4
- package/lib/commonjs/dom/types/Common.js.map +1 -1
- package/lib/commonjs/dom/types/ImageFilters.d.ts +1 -1
- package/lib/commonjs/dom/types/ImageFilters.js.map +1 -1
- package/lib/commonjs/dom/types/Node.d.ts +0 -2
- package/lib/commonjs/dom/types/Node.js.map +1 -1
- package/lib/commonjs/external/reanimated/index.d.ts +0 -1
- package/lib/commonjs/external/reanimated/index.js +0 -11
- package/lib/commonjs/external/reanimated/index.js.map +1 -1
- package/lib/commonjs/external/reanimated/renderHelpers.d.ts +0 -1
- package/lib/commonjs/external/reanimated/renderHelpers.js +5 -43
- package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/commonjs/external/reanimated/useAnimatedImageValue.js +1 -8
- package/lib/commonjs/external/reanimated/useAnimatedImageValue.js.map +1 -1
- package/lib/commonjs/skia/core/AnimatedImage.d.ts +1 -1
- package/lib/commonjs/skia/core/AnimatedImage.js +1 -1
- package/lib/commonjs/skia/core/AnimatedImage.js.map +1 -1
- package/lib/commonjs/skia/core/Data.d.ts +1 -1
- package/lib/commonjs/skia/core/Data.js +2 -8
- package/lib/commonjs/skia/core/Data.js.map +1 -1
- package/lib/commonjs/skia/types/Paint/Paint.d.ts +1 -0
- package/lib/commonjs/skia/types/Paint/Paint.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkPaint.d.ts +1 -0
- package/lib/commonjs/skia/web/JsiSkPaint.js +3 -0
- package/lib/commonjs/skia/web/JsiSkPaint.js.map +1 -1
- package/lib/commonjs/sksg/Container.d.ts +3 -2
- package/lib/commonjs/sksg/Container.js +32 -26
- package/lib/commonjs/sksg/Container.js.map +1 -1
- package/lib/commonjs/sksg/HostConfig.d.ts +2 -2
- package/lib/commonjs/sksg/HostConfig.js +7 -25
- package/lib/commonjs/sksg/HostConfig.js.map +1 -1
- package/lib/commonjs/sksg/Node.d.ts +19 -0
- package/lib/commonjs/sksg/Node.js +78 -0
- package/lib/commonjs/sksg/Node.js.map +1 -0
- package/lib/commonjs/sksg/Reconciler.d.ts +1 -1
- package/lib/commonjs/sksg/Recorder/Core.d.ts +79 -0
- package/lib/commonjs/sksg/Recorder/Core.js +110 -0
- package/lib/commonjs/sksg/Recorder/Core.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/DrawingContext.d.ts +18 -0
- package/lib/commonjs/sksg/Recorder/DrawingContext.js +105 -0
- package/lib/commonjs/sksg/Recorder/DrawingContext.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/Player.d.ts +3 -0
- package/lib/commonjs/sksg/Recorder/Player.js +127 -0
- package/lib/commonjs/sksg/Recorder/Player.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/Recorder.d.ts +50 -0
- package/lib/commonjs/sksg/Recorder/Recorder.js +288 -0
- package/lib/commonjs/sksg/Recorder/Recorder.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/Recording.d.ts +7 -0
- package/lib/commonjs/sksg/Recorder/Recording.js +12 -0
- package/lib/commonjs/sksg/Recorder/Recording.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/Visitor.d.ts +5 -0
- package/lib/commonjs/sksg/Recorder/Visitor.js +293 -0
- package/lib/commonjs/sksg/Recorder/Visitor.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/commands/Box.d.ts +13 -0
- package/lib/commonjs/sksg/Recorder/commands/Box.js +71 -0
- package/lib/commonjs/sksg/Recorder/commands/Box.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/commands/CTM.d.ts +3 -0
- package/lib/commonjs/sksg/Recorder/commands/CTM.js +79 -0
- package/lib/commonjs/sksg/Recorder/commands/CTM.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/commands/ColorFilters.d.ts +6 -0
- package/lib/commonjs/sksg/Recorder/commands/ColorFilters.js +76 -0
- package/lib/commonjs/sksg/Recorder/commands/ColorFilters.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/commands/Drawing.d.ts +24 -0
- package/lib/commonjs/sksg/{nodes/drawings.js → Recorder/commands/Drawing.js} +5 -5
- package/lib/commonjs/sksg/Recorder/commands/Drawing.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/commands/ImageFilters.d.ts +12 -0
- package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js +183 -0
- package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/commands/Paint.d.ts +4 -0
- package/lib/commonjs/sksg/Recorder/commands/Paint.js +70 -0
- package/lib/commonjs/sksg/Recorder/commands/Paint.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/commands/PathEffects.d.ts +6 -0
- package/lib/commonjs/sksg/Recorder/commands/PathEffects.js +137 -0
- package/lib/commonjs/sksg/Recorder/commands/PathEffects.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/commands/Shaders.d.ts +5 -0
- package/lib/commonjs/sksg/{nodes/shaders.js → Recorder/commands/Shaders.js} +58 -15
- package/lib/commonjs/sksg/Recorder/commands/Shaders.js.map +1 -0
- package/lib/commonjs/sksg/{nodes/utils.d.ts → utils.d.ts} +3 -0
- package/lib/commonjs/sksg/{nodes/utils.js → utils.js} +12 -2
- package/lib/commonjs/sksg/utils.js.map +1 -0
- package/lib/module/dom/types/Common.d.ts +6 -4
- package/lib/module/dom/types/Common.js.map +1 -1
- package/lib/module/dom/types/ImageFilters.d.ts +1 -1
- package/lib/module/dom/types/ImageFilters.js.map +1 -1
- package/lib/module/dom/types/Node.d.ts +0 -2
- package/lib/module/dom/types/Node.js.map +1 -1
- package/lib/module/external/reanimated/index.d.ts +0 -1
- package/lib/module/external/reanimated/index.js +0 -1
- package/lib/module/external/reanimated/index.js.map +1 -1
- package/lib/module/external/reanimated/renderHelpers.d.ts +0 -1
- package/lib/module/external/reanimated/renderHelpers.js +4 -42
- package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/module/external/reanimated/useAnimatedImageValue.js +1 -8
- package/lib/module/external/reanimated/useAnimatedImageValue.js.map +1 -1
- package/lib/module/skia/core/AnimatedImage.d.ts +1 -1
- package/lib/module/skia/core/AnimatedImage.js +1 -1
- package/lib/module/skia/core/AnimatedImage.js.map +1 -1
- package/lib/module/skia/core/Data.d.ts +1 -1
- package/lib/module/skia/core/Data.js +2 -8
- package/lib/module/skia/core/Data.js.map +1 -1
- package/lib/module/skia/types/Paint/Paint.d.ts +1 -0
- package/lib/module/skia/types/Paint/Paint.js.map +1 -1
- package/lib/module/skia/web/JsiSkPaint.d.ts +1 -0
- package/lib/module/skia/web/JsiSkPaint.js +3 -0
- package/lib/module/skia/web/JsiSkPaint.js.map +1 -1
- package/lib/module/sksg/Container.d.ts +3 -2
- package/lib/module/sksg/Container.js +30 -24
- package/lib/module/sksg/Container.js.map +1 -1
- package/lib/module/sksg/HostConfig.d.ts +2 -2
- package/lib/module/sksg/HostConfig.js +7 -25
- package/lib/module/sksg/HostConfig.js.map +1 -1
- package/lib/module/sksg/Node.d.ts +19 -0
- package/lib/module/sksg/Node.js +67 -0
- package/lib/module/sksg/Node.js.map +1 -0
- package/lib/module/sksg/Reconciler.d.ts +1 -1
- package/lib/module/sksg/Recorder/Core.d.ts +79 -0
- package/lib/module/sksg/Recorder/Core.js +101 -0
- package/lib/module/sksg/Recorder/Core.js.map +1 -0
- package/lib/module/sksg/Recorder/DrawingContext.d.ts +18 -0
- package/lib/module/sksg/Recorder/DrawingContext.js +98 -0
- package/lib/module/sksg/Recorder/DrawingContext.js.map +1 -0
- package/lib/module/sksg/Recorder/Player.d.ts +3 -0
- package/lib/module/sksg/Recorder/Player.js +120 -0
- package/lib/module/sksg/Recorder/Player.js.map +1 -0
- package/lib/module/sksg/Recorder/Recorder.d.ts +50 -0
- package/lib/module/sksg/Recorder/Recorder.js +281 -0
- package/lib/module/sksg/Recorder/Recorder.js.map +1 -0
- package/lib/module/sksg/Recorder/Recording.d.ts +7 -0
- package/lib/module/sksg/Recorder/Recording.js +5 -0
- package/lib/module/sksg/Recorder/Recording.js.map +1 -0
- package/lib/module/sksg/Recorder/Visitor.d.ts +5 -0
- package/lib/module/sksg/Recorder/Visitor.js +285 -0
- package/lib/module/sksg/Recorder/Visitor.js.map +1 -0
- package/lib/module/sksg/Recorder/commands/Box.d.ts +13 -0
- package/lib/module/sksg/Recorder/commands/Box.js +63 -0
- package/lib/module/sksg/Recorder/commands/Box.js.map +1 -0
- package/lib/module/sksg/Recorder/commands/CTM.d.ts +3 -0
- package/lib/module/sksg/Recorder/commands/CTM.js +72 -0
- package/lib/module/sksg/Recorder/commands/CTM.js.map +1 -0
- package/lib/module/sksg/Recorder/commands/ColorFilters.d.ts +6 -0
- package/lib/module/sksg/Recorder/commands/ColorFilters.js +67 -0
- package/lib/module/sksg/Recorder/commands/ColorFilters.js.map +1 -0
- package/lib/module/sksg/Recorder/commands/Drawing.d.ts +24 -0
- package/lib/module/sksg/{nodes/drawings.js → Recorder/commands/Drawing.js} +5 -5
- package/lib/module/sksg/Recorder/commands/Drawing.js.map +1 -0
- package/lib/module/sksg/Recorder/commands/ImageFilters.d.ts +12 -0
- package/lib/module/sksg/{nodes/imageFilters.js → Recorder/commands/ImageFilters.js} +87 -95
- package/lib/module/sksg/Recorder/commands/ImageFilters.js.map +1 -0
- package/lib/module/sksg/Recorder/commands/Paint.d.ts +4 -0
- package/lib/module/sksg/Recorder/commands/Paint.js +62 -0
- package/lib/module/sksg/Recorder/commands/Paint.js.map +1 -0
- package/lib/module/sksg/Recorder/commands/PathEffects.d.ts +6 -0
- package/lib/module/sksg/Recorder/commands/PathEffects.js +128 -0
- package/lib/module/sksg/Recorder/commands/PathEffects.js.map +1 -0
- package/lib/module/sksg/Recorder/commands/Shaders.d.ts +5 -0
- package/lib/module/sksg/{nodes/shaders.js → Recorder/commands/Shaders.js} +63 -13
- package/lib/module/sksg/Recorder/commands/Shaders.js.map +1 -0
- package/lib/module/sksg/{nodes/utils.d.ts → utils.d.ts} +3 -0
- package/lib/module/sksg/{nodes/utils.js → utils.js} +10 -1
- package/lib/module/sksg/utils.js.map +1 -0
- package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +0 -1
- package/lib/typescript/lib/commonjs/skia/core/AnimatedImage.d.ts +1 -1
- package/lib/typescript/lib/commonjs/skia/core/Data.d.ts +1 -1
- package/lib/typescript/lib/commonjs/skia/web/JsiSkPaint.d.ts +1 -0
- package/lib/typescript/lib/commonjs/sksg/Container.d.ts +4 -0
- package/lib/typescript/lib/commonjs/sksg/HostConfig.d.ts +1 -3
- package/lib/typescript/lib/commonjs/sksg/Node.d.ts +14 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/Core.d.ts +5 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/DrawingContext.d.ts +17 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/Player.d.ts +2 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/Recorder.d.ts +45 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/Recording.d.ts +5 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/Visitor.d.ts +27 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/commands/Box.d.ts +3 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/commands/CTM.d.ts +2 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/commands/ColorFilters.d.ts +4 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/commands/ImageFilters.d.ts +6 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/commands/Paint.d.ts +14 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/commands/PathEffects.d.ts +4 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/commands/Shaders.d.ts +3 -0
- package/lib/typescript/lib/commonjs/sksg/{nodes/utils.d.ts → utils.d.ts} +1 -0
- package/lib/typescript/lib/module/external/reanimated/index.d.ts +0 -1
- package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +0 -1
- package/lib/typescript/lib/module/mock/index.d.ts +1 -1
- package/lib/typescript/lib/module/skia/core/AnimatedImage.d.ts +1 -1
- package/lib/typescript/lib/module/skia/core/Data.d.ts +1 -1
- package/lib/typescript/lib/module/skia/web/JsiSkPaint.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/Container.d.ts +4 -0
- package/lib/typescript/lib/module/sksg/HostConfig.d.ts +1 -3
- package/lib/typescript/lib/module/sksg/Node.d.ts +13 -0
- package/lib/typescript/lib/module/sksg/Recorder/Core.d.ts +4 -0
- package/lib/typescript/lib/module/sksg/Recorder/DrawingContext.d.ts +16 -0
- package/lib/typescript/lib/module/sksg/Recorder/Player.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/Recorder/Recorder.d.ts +44 -0
- package/lib/typescript/lib/module/sksg/Recorder/Recording.d.ts +4 -0
- package/lib/typescript/lib/module/sksg/Recorder/Visitor.d.ts +26 -0
- package/lib/typescript/lib/module/sksg/Recorder/commands/Box.d.ts +2 -0
- package/lib/typescript/lib/module/sksg/Recorder/commands/CTM.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/Recorder/commands/ColorFilters.d.ts +3 -0
- package/lib/typescript/lib/module/sksg/Recorder/commands/ImageFilters.d.ts +5 -0
- package/lib/typescript/lib/module/sksg/Recorder/commands/Paint.d.ts +13 -0
- package/lib/typescript/lib/module/sksg/Recorder/commands/PathEffects.d.ts +3 -0
- package/lib/typescript/lib/module/sksg/Recorder/commands/Shaders.d.ts +2 -0
- package/lib/typescript/lib/module/sksg/{nodes/utils.d.ts → utils.d.ts} +1 -0
- package/lib/typescript/src/dom/types/Common.d.ts +6 -4
- package/lib/typescript/src/dom/types/ImageFilters.d.ts +1 -1
- package/lib/typescript/src/dom/types/Node.d.ts +0 -2
- package/lib/typescript/src/external/reanimated/index.d.ts +0 -1
- package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +0 -1
- package/lib/typescript/src/skia/core/AnimatedImage.d.ts +1 -1
- package/lib/typescript/src/skia/core/Data.d.ts +1 -1
- package/lib/typescript/src/skia/types/Paint/Paint.d.ts +1 -0
- package/lib/typescript/src/skia/web/JsiSkPaint.d.ts +1 -0
- package/lib/typescript/src/sksg/Container.d.ts +3 -2
- package/lib/typescript/src/sksg/HostConfig.d.ts +2 -2
- package/lib/typescript/src/sksg/Node.d.ts +19 -0
- package/lib/typescript/src/sksg/Reconciler.d.ts +1 -1
- package/lib/typescript/src/sksg/Recorder/Core.d.ts +79 -0
- package/lib/typescript/src/sksg/Recorder/DrawingContext.d.ts +18 -0
- package/lib/typescript/src/sksg/Recorder/Player.d.ts +3 -0
- package/lib/typescript/src/sksg/Recorder/Recorder.d.ts +50 -0
- package/lib/typescript/src/sksg/Recorder/Recording.d.ts +7 -0
- package/lib/typescript/src/sksg/Recorder/Visitor.d.ts +5 -0
- package/lib/typescript/src/sksg/Recorder/commands/Box.d.ts +13 -0
- package/lib/typescript/src/sksg/Recorder/commands/CTM.d.ts +3 -0
- package/lib/typescript/src/sksg/Recorder/commands/ColorFilters.d.ts +6 -0
- package/lib/typescript/src/sksg/Recorder/commands/Drawing.d.ts +24 -0
- package/lib/typescript/src/sksg/Recorder/commands/ImageFilters.d.ts +12 -0
- package/lib/typescript/src/sksg/Recorder/commands/Paint.d.ts +4 -0
- package/lib/typescript/src/sksg/Recorder/commands/PathEffects.d.ts +6 -0
- package/lib/typescript/src/sksg/Recorder/commands/Shaders.d.ts +5 -0
- package/lib/typescript/src/sksg/{nodes/utils.d.ts → utils.d.ts} +3 -0
- package/package.json +1 -1
- package/src/__tests__/snapshots/image-filter/test-shadow.png +0 -0
- package/src/dom/types/Common.ts +7 -5
- package/src/dom/types/ImageFilters.ts +2 -1
- package/src/dom/types/Node.ts +0 -4
- package/src/external/reanimated/index.ts +0 -1
- package/src/external/reanimated/renderHelpers.ts +4 -44
- package/src/external/reanimated/useAnimatedImageValue.ts +4 -15
- package/src/renderer/__tests__/e2e/ColorFilters.spec.tsx +15 -0
- package/src/renderer/__tests__/e2e/Composition/ColorFilterComposition.spec.tsx +23 -2
- package/src/renderer/__tests__/e2e/ImageFilters.spec.tsx +91 -2
- package/src/renderer/__tests__/setup.tsx +1 -1
- package/src/skia/core/AnimatedImage.ts +2 -3
- package/src/skia/core/Data.ts +3 -9
- package/src/skia/types/Paint/Paint.ts +2 -0
- package/src/skia/web/JsiSkPaint.ts +4 -0
- package/src/sksg/Container.ts +35 -29
- package/src/sksg/HostConfig.ts +5 -50
- package/src/sksg/Node.ts +105 -0
- package/src/sksg/Recorder/Core.ts +171 -0
- package/src/sksg/Recorder/DrawingContext.ts +130 -0
- package/src/sksg/Recorder/Player.ts +160 -0
- package/src/sksg/Recorder/Recorder.ts +259 -0
- package/src/sksg/Recorder/Recording.ts +13 -0
- package/src/sksg/Recorder/Visitor.ts +324 -0
- package/src/sksg/Recorder/commands/Box.ts +63 -0
- package/src/sksg/Recorder/commands/CTM.ts +72 -0
- package/src/sksg/Recorder/commands/ColorFilters.ts +87 -0
- package/src/sksg/{nodes/drawings.ts → Recorder/commands/Drawing.ts} +29 -65
- package/src/sksg/Recorder/commands/ImageFilters.ts +255 -0
- package/src/sksg/Recorder/commands/Paint.ts +77 -0
- package/src/sksg/Recorder/commands/PathEffects.ts +169 -0
- package/src/sksg/{nodes/shaders.ts → Recorder/commands/Shaders.ts} +100 -26
- package/src/sksg/{nodes/utils.ts → utils.ts} +14 -1
- package/lib/commonjs/external/reanimated/useDerivedValueOnJS.d.ts +0 -1
- package/lib/commonjs/external/reanimated/useDerivedValueOnJS.js +0 -24
- package/lib/commonjs/external/reanimated/useDerivedValueOnJS.js.map +0 -1
- package/lib/commonjs/sksg/DeclarationContext.d.ts +0 -56
- package/lib/commonjs/sksg/DeclarationContext.js +0 -77
- package/lib/commonjs/sksg/DeclarationContext.js.map +0 -1
- package/lib/commonjs/sksg/DrawingContext.d.ts +0 -13
- package/lib/commonjs/sksg/DrawingContext.js +0 -172
- package/lib/commonjs/sksg/DrawingContext.js.map +0 -1
- package/lib/commonjs/sksg/__tests__/Declarations.spec.d.ts +0 -1
- package/lib/commonjs/sksg/__tests__/MockDeclaration.d.ts +0 -57
- package/lib/commonjs/sksg/nodes/Node.d.ts +0 -7
- package/lib/commonjs/sksg/nodes/Node.js +0 -6
- package/lib/commonjs/sksg/nodes/Node.js.map +0 -1
- package/lib/commonjs/sksg/nodes/colorFilters.d.ts +0 -10
- package/lib/commonjs/sksg/nodes/colorFilters.js +0 -79
- package/lib/commonjs/sksg/nodes/colorFilters.js.map +0 -1
- package/lib/commonjs/sksg/nodes/context.d.ts +0 -3
- package/lib/commonjs/sksg/nodes/context.js +0 -394
- package/lib/commonjs/sksg/nodes/context.js.map +0 -1
- package/lib/commonjs/sksg/nodes/drawings.d.ts +0 -30
- package/lib/commonjs/sksg/nodes/drawings.js.map +0 -1
- package/lib/commonjs/sksg/nodes/imageFilters.d.ts +0 -17
- package/lib/commonjs/sksg/nodes/imageFilters.js +0 -197
- package/lib/commonjs/sksg/nodes/imageFilters.js.map +0 -1
- package/lib/commonjs/sksg/nodes/index.d.ts +0 -3
- package/lib/commonjs/sksg/nodes/index.js +0 -39
- package/lib/commonjs/sksg/nodes/index.js.map +0 -1
- package/lib/commonjs/sksg/nodes/paint.d.ts +0 -3
- package/lib/commonjs/sksg/nodes/paint.js +0 -81
- package/lib/commonjs/sksg/nodes/paint.js.map +0 -1
- package/lib/commonjs/sksg/nodes/pathEffects.d.ts +0 -11
- package/lib/commonjs/sksg/nodes/pathEffects.js +0 -111
- package/lib/commonjs/sksg/nodes/pathEffects.js.map +0 -1
- package/lib/commonjs/sksg/nodes/shaders.d.ts +0 -11
- package/lib/commonjs/sksg/nodes/shaders.js.map +0 -1
- package/lib/commonjs/sksg/nodes/utils.js.map +0 -1
- package/lib/module/external/reanimated/useDerivedValueOnJS.d.ts +0 -1
- package/lib/module/external/reanimated/useDerivedValueOnJS.js +0 -16
- package/lib/module/external/reanimated/useDerivedValueOnJS.js.map +0 -1
- package/lib/module/sksg/DeclarationContext.d.ts +0 -56
- package/lib/module/sksg/DeclarationContext.js +0 -69
- package/lib/module/sksg/DeclarationContext.js.map +0 -1
- package/lib/module/sksg/DrawingContext.d.ts +0 -13
- package/lib/module/sksg/DrawingContext.js +0 -165
- package/lib/module/sksg/DrawingContext.js.map +0 -1
- package/lib/module/sksg/__tests__/Declarations.spec.d.ts +0 -1
- package/lib/module/sksg/__tests__/MockDeclaration.d.ts +0 -57
- package/lib/module/sksg/nodes/Node.d.ts +0 -7
- package/lib/module/sksg/nodes/Node.js +0 -2
- package/lib/module/sksg/nodes/Node.js.map +0 -1
- package/lib/module/sksg/nodes/colorFilters.d.ts +0 -10
- package/lib/module/sksg/nodes/colorFilters.js +0 -66
- package/lib/module/sksg/nodes/colorFilters.js.map +0 -1
- package/lib/module/sksg/nodes/context.d.ts +0 -3
- package/lib/module/sksg/nodes/context.js +0 -387
- package/lib/module/sksg/nodes/context.js.map +0 -1
- package/lib/module/sksg/nodes/drawings.d.ts +0 -30
- package/lib/module/sksg/nodes/drawings.js.map +0 -1
- package/lib/module/sksg/nodes/imageFilters.d.ts +0 -17
- package/lib/module/sksg/nodes/imageFilters.js.map +0 -1
- package/lib/module/sksg/nodes/index.d.ts +0 -3
- package/lib/module/sksg/nodes/index.js +0 -4
- package/lib/module/sksg/nodes/index.js.map +0 -1
- package/lib/module/sksg/nodes/paint.d.ts +0 -3
- package/lib/module/sksg/nodes/paint.js +0 -74
- package/lib/module/sksg/nodes/paint.js.map +0 -1
- package/lib/module/sksg/nodes/pathEffects.d.ts +0 -11
- package/lib/module/sksg/nodes/pathEffects.js +0 -97
- package/lib/module/sksg/nodes/pathEffects.js.map +0 -1
- package/lib/module/sksg/nodes/shaders.d.ts +0 -11
- package/lib/module/sksg/nodes/shaders.js.map +0 -1
- package/lib/module/sksg/nodes/utils.js.map +0 -1
- package/lib/typescript/lib/commonjs/external/reanimated/useDerivedValueOnJS.d.ts +0 -2
- package/lib/typescript/lib/commonjs/sksg/DeclarationContext.d.ts +0 -53
- package/lib/typescript/lib/commonjs/sksg/DrawingContext.d.ts +0 -22
- package/lib/typescript/lib/commonjs/sksg/nodes/Node.d.ts +0 -1
- package/lib/typescript/lib/commonjs/sksg/nodes/colorFilters.d.ts +0 -8
- package/lib/typescript/lib/commonjs/sksg/nodes/context.d.ts +0 -2
- package/lib/typescript/lib/commonjs/sksg/nodes/imageFilters.d.ts +0 -12
- package/lib/typescript/lib/commonjs/sksg/nodes/index.d.ts +0 -1
- package/lib/typescript/lib/commonjs/sksg/nodes/paint.d.ts +0 -2
- package/lib/typescript/lib/commonjs/sksg/nodes/pathEffects.d.ts +0 -9
- package/lib/typescript/lib/commonjs/sksg/nodes/shaders.d.ts +0 -10
- package/lib/typescript/lib/module/external/reanimated/useDerivedValueOnJS.d.ts +0 -1
- package/lib/typescript/lib/module/sksg/DeclarationContext.d.ts +0 -52
- package/lib/typescript/lib/module/sksg/DrawingContext.d.ts +0 -21
- package/lib/typescript/lib/module/sksg/nodes/Node.d.ts +0 -1
- package/lib/typescript/lib/module/sksg/nodes/colorFilters.d.ts +0 -7
- package/lib/typescript/lib/module/sksg/nodes/context.d.ts +0 -1
- package/lib/typescript/lib/module/sksg/nodes/imageFilters.d.ts +0 -11
- package/lib/typescript/lib/module/sksg/nodes/index.d.ts +0 -3
- package/lib/typescript/lib/module/sksg/nodes/paint.d.ts +0 -1
- package/lib/typescript/lib/module/sksg/nodes/pathEffects.d.ts +0 -8
- package/lib/typescript/lib/module/sksg/nodes/shaders.d.ts +0 -9
- package/lib/typescript/src/external/reanimated/useDerivedValueOnJS.d.ts +0 -1
- package/lib/typescript/src/sksg/DeclarationContext.d.ts +0 -56
- package/lib/typescript/src/sksg/DrawingContext.d.ts +0 -13
- package/lib/typescript/src/sksg/__tests__/Declarations.spec.d.ts +0 -1
- package/lib/typescript/src/sksg/__tests__/MockDeclaration.d.ts +0 -57
- package/lib/typescript/src/sksg/nodes/Node.d.ts +0 -7
- package/lib/typescript/src/sksg/nodes/colorFilters.d.ts +0 -10
- package/lib/typescript/src/sksg/nodes/context.d.ts +0 -3
- package/lib/typescript/src/sksg/nodes/drawings.d.ts +0 -30
- package/lib/typescript/src/sksg/nodes/imageFilters.d.ts +0 -17
- package/lib/typescript/src/sksg/nodes/index.d.ts +0 -3
- package/lib/typescript/src/sksg/nodes/paint.d.ts +0 -3
- package/lib/typescript/src/sksg/nodes/pathEffects.d.ts +0 -11
- package/lib/typescript/src/sksg/nodes/shaders.d.ts +0 -11
- package/src/external/reanimated/useDerivedValueOnJS.ts +0 -20
- package/src/sksg/DeclarationContext.ts +0 -85
- package/src/sksg/DrawingContext.ts +0 -226
- package/src/sksg/__tests__/Declarations.spec.tsx +0 -235
- package/src/sksg/__tests__/MockDeclaration.ts +0 -138
- package/src/sksg/nodes/Node.ts +0 -8
- package/src/sksg/nodes/colorFilters.ts +0 -79
- package/src/sksg/nodes/context.ts +0 -412
- package/src/sksg/nodes/imageFilters.ts +0 -235
- package/src/sksg/nodes/index.ts +0 -3
- package/src/sksg/nodes/paint.ts +0 -75
- package/src/sksg/nodes/pathEffects.ts +0 -118
- /package/lib/typescript/lib/commonjs/sksg/{nodes/drawings.d.ts → Recorder/commands/Drawing.d.ts} +0 -0
- /package/lib/typescript/lib/module/sksg/{nodes/drawings.d.ts → Recorder/commands/Drawing.d.ts} +0 -0
package/src/sksg/Container.ts
CHANGED
@@ -2,31 +2,34 @@ import { type SharedValue } from "react-native-reanimated";
|
|
2
2
|
|
3
3
|
import Rea from "../external/reanimated/ReanimatedProxy";
|
4
4
|
import type { Skia, SkCanvas } from "../skia/types";
|
5
|
-
import {
|
6
|
-
HAS_REANIMATED,
|
7
|
-
HAS_REANIMATED_3,
|
8
|
-
} from "../external/reanimated/renderHelpers";
|
9
5
|
|
10
|
-
import {
|
11
|
-
import
|
12
|
-
import {
|
6
|
+
import type { Node } from "./Node";
|
7
|
+
import { isSharedValue } from "./utils";
|
8
|
+
import { Recorder } from "./Recorder/Recorder";
|
9
|
+
import { visit } from "./Recorder/Visitor";
|
10
|
+
import { replay } from "./Recorder/Player";
|
11
|
+
import { createDrawingContext } from "./Recorder/DrawingContext";
|
12
|
+
import { createRecording, type Recording } from "./Recorder/Recording";
|
13
13
|
|
14
|
-
const drawOnscreen = (Skia: Skia, nativeId: number,
|
14
|
+
const drawOnscreen = (Skia: Skia, nativeId: number, recording: Recording) => {
|
15
15
|
"worklet";
|
16
16
|
const rec = Skia.PictureRecorder();
|
17
17
|
const canvas = rec.beginRecording();
|
18
|
-
//
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
// const start = performance.now();
|
19
|
+
|
20
|
+
// TODO: because the pool is not a shared value here, it is copied on every frame
|
21
|
+
const ctx = createDrawingContext(Skia, recording.paintPool, canvas);
|
22
|
+
//console.log(recording.commands);
|
23
|
+
replay(ctx, recording.commands);
|
24
24
|
const picture = rec.finishRecordingAsPicture();
|
25
|
+
//const end = performance.now();
|
26
|
+
//console.log("Recording time: ", end - start);
|
25
27
|
SkiaViewApi.setJsiProperty(nativeId, "picture", picture);
|
26
28
|
};
|
27
29
|
|
28
30
|
export class Container {
|
29
|
-
|
31
|
+
private _root: Node[] = [];
|
32
|
+
private _recording: Recording | null = null;
|
30
33
|
public unmounted = false;
|
31
34
|
|
32
35
|
private values = new Set<SharedValue<unknown>>();
|
@@ -40,20 +43,20 @@ export class Container {
|
|
40
43
|
|
41
44
|
set root(root: Node[]) {
|
42
45
|
const isOnscreen = this.nativeId !== -1;
|
43
|
-
if (HAS_REANIMATED && !HAS_REANIMATED_3) {
|
44
|
-
throw new Error("React Native Skia only supports Reanimated 3 and above");
|
45
|
-
}
|
46
46
|
if (isOnscreen) {
|
47
47
|
if (this.mapperId !== null) {
|
48
48
|
Rea.stopMapper(this.mapperId);
|
49
49
|
}
|
50
|
-
const { nativeId, Skia } = this;
|
50
|
+
const { nativeId, Skia, _recording } = this;
|
51
51
|
this.mapperId = Rea.startMapper(() => {
|
52
52
|
"worklet";
|
53
|
-
drawOnscreen(Skia, nativeId,
|
53
|
+
drawOnscreen(Skia, nativeId, _recording!);
|
54
54
|
}, Array.from(this.values));
|
55
55
|
}
|
56
56
|
this._root = root;
|
57
|
+
const recorder = new Recorder();
|
58
|
+
visit(recorder, root);
|
59
|
+
this._recording = createRecording(recorder.commands);
|
57
60
|
}
|
58
61
|
|
59
62
|
clear() {
|
@@ -62,13 +65,10 @@ export class Container {
|
|
62
65
|
|
63
66
|
redraw() {
|
64
67
|
const isOnscreen = this.nativeId !== -1;
|
65
|
-
if (HAS_REANIMATED && !HAS_REANIMATED_3) {
|
66
|
-
throw new Error("React Native Skia only supports Reanimated 3 and above");
|
67
|
-
}
|
68
68
|
if (isOnscreen) {
|
69
|
-
const { nativeId, Skia,
|
69
|
+
const { nativeId, Skia, _recording } = this;
|
70
70
|
Rea.runOnUI(() => {
|
71
|
-
drawOnscreen(Skia, nativeId,
|
71
|
+
drawOnscreen(Skia, nativeId, _recording!);
|
72
72
|
})();
|
73
73
|
}
|
74
74
|
}
|
@@ -94,9 +94,15 @@ export class Container {
|
|
94
94
|
}
|
95
95
|
|
96
96
|
drawOnCanvas(canvas: SkCanvas) {
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
97
|
+
if (!this._recording) {
|
98
|
+
throw new Error("No recording to draw");
|
99
|
+
}
|
100
|
+
const ctx = createDrawingContext(
|
101
|
+
this.Skia,
|
102
|
+
this._recording.paintPool,
|
103
|
+
canvas
|
104
|
+
);
|
105
|
+
//console.log(this._recording);
|
106
|
+
replay(ctx, this._recording.commands);
|
101
107
|
}
|
102
108
|
}
|
package/src/sksg/HostConfig.ts
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
import type { Fiber, HostConfig } from "react-reconciler";
|
3
3
|
import { DefaultEventPriority } from "react-reconciler/constants";
|
4
4
|
|
5
|
-
import { NodeType } from "../dom/types";
|
5
|
+
import type { NodeType } from "../dom/types";
|
6
6
|
import { shallowEq } from "../renderer/typeddash";
|
7
7
|
|
8
|
-
import type { Node } from "./
|
8
|
+
import type { Node } from "./Node";
|
9
9
|
import type { Container } from "./Container";
|
10
10
|
|
11
11
|
const DEBUG = false;
|
@@ -15,51 +15,6 @@ export const debug = (...args: Parameters<typeof console.log>) => {
|
|
15
15
|
}
|
16
16
|
};
|
17
17
|
|
18
|
-
const isDeclaration = (type: NodeType) => {
|
19
|
-
"worklet";
|
20
|
-
return (
|
21
|
-
// BlurMaskFilters
|
22
|
-
type === NodeType.BlurMaskFilter ||
|
23
|
-
// ImageFilters
|
24
|
-
type === NodeType.BlendImageFilter ||
|
25
|
-
type === NodeType.BlurImageFilter ||
|
26
|
-
type === NodeType.OffsetImageFilter ||
|
27
|
-
type === NodeType.DropShadowImageFilter ||
|
28
|
-
type === NodeType.MorphologyImageFilter ||
|
29
|
-
type === NodeType.DisplacementMapImageFilter ||
|
30
|
-
type === NodeType.RuntimeShaderImageFilter ||
|
31
|
-
// ColorFilters
|
32
|
-
type === NodeType.MatrixColorFilter ||
|
33
|
-
type === NodeType.BlendColorFilter ||
|
34
|
-
type === NodeType.LumaColorFilter ||
|
35
|
-
type === NodeType.LinearToSRGBGammaColorFilter ||
|
36
|
-
type === NodeType.SRGBToLinearGammaColorFilter ||
|
37
|
-
type === NodeType.LerpColorFilter ||
|
38
|
-
// Shaders
|
39
|
-
type === NodeType.Shader ||
|
40
|
-
type === NodeType.ImageShader ||
|
41
|
-
type === NodeType.ColorShader ||
|
42
|
-
type === NodeType.Turbulence ||
|
43
|
-
type === NodeType.FractalNoise ||
|
44
|
-
type === NodeType.LinearGradient ||
|
45
|
-
type === NodeType.RadialGradient ||
|
46
|
-
type === NodeType.SweepGradient ||
|
47
|
-
type === NodeType.TwoPointConicalGradient ||
|
48
|
-
// Path Effects
|
49
|
-
type === NodeType.CornerPathEffect ||
|
50
|
-
type === NodeType.DiscretePathEffect ||
|
51
|
-
type === NodeType.DashPathEffect ||
|
52
|
-
type === NodeType.Path1DPathEffect ||
|
53
|
-
type === NodeType.Path2DPathEffect ||
|
54
|
-
type === NodeType.SumPathEffect ||
|
55
|
-
type === NodeType.Line2DPathEffect ||
|
56
|
-
// Mixed
|
57
|
-
type === NodeType.Blend ||
|
58
|
-
// Paint
|
59
|
-
type === NodeType.Paint
|
60
|
-
);
|
61
|
-
};
|
62
|
-
|
63
18
|
type Instance = Node;
|
64
19
|
|
65
20
|
type Props = object;
|
@@ -129,16 +84,17 @@ export const sksgHostConfig: SkiaHostConfig = {
|
|
129
84
|
|
130
85
|
createInstance(
|
131
86
|
type,
|
132
|
-
|
87
|
+
propsWithChildren,
|
133
88
|
container,
|
134
89
|
_hostContext,
|
135
90
|
_internalInstanceHandle
|
136
91
|
) {
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
93
|
+
const { children, ...props } = propsWithChildren as any;
|
137
94
|
debug("createInstance", type);
|
138
95
|
container.registerValues(props);
|
139
96
|
const instance = {
|
140
97
|
type,
|
141
|
-
isDeclaration: isDeclaration(type),
|
142
98
|
props,
|
143
99
|
children: [],
|
144
100
|
};
|
@@ -231,7 +187,6 @@ export const sksgHostConfig: SkiaHostConfig = {
|
|
231
187
|
type: instance.type,
|
232
188
|
props: newProps,
|
233
189
|
children: keepChildren ? [...instance.children] : [],
|
234
|
-
isDeclaration: instance.isDeclaration,
|
235
190
|
};
|
236
191
|
},
|
237
192
|
|
package/src/sksg/Node.ts
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
import { NodeType } from "../dom/types";
|
2
|
+
|
3
|
+
export interface Node<Props = unknown> {
|
4
|
+
type: NodeType;
|
5
|
+
props: Props;
|
6
|
+
children: Node[];
|
7
|
+
}
|
8
|
+
|
9
|
+
export const isColorFilter = (type: NodeType) => {
|
10
|
+
"worklet";
|
11
|
+
return (
|
12
|
+
type === NodeType.BlendColorFilter ||
|
13
|
+
type === NodeType.MatrixColorFilter ||
|
14
|
+
type === NodeType.LerpColorFilter ||
|
15
|
+
type === NodeType.LumaColorFilter ||
|
16
|
+
type === NodeType.SRGBToLinearGammaColorFilter ||
|
17
|
+
type === NodeType.LinearToSRGBGammaColorFilter
|
18
|
+
);
|
19
|
+
};
|
20
|
+
|
21
|
+
export const isPathEffect = (type: NodeType) => {
|
22
|
+
"worklet";
|
23
|
+
return (
|
24
|
+
type === NodeType.DiscretePathEffect ||
|
25
|
+
type === NodeType.DashPathEffect ||
|
26
|
+
type === NodeType.Path1DPathEffect ||
|
27
|
+
type === NodeType.Path2DPathEffect ||
|
28
|
+
type === NodeType.CornerPathEffect ||
|
29
|
+
type === NodeType.SumPathEffect ||
|
30
|
+
type === NodeType.Line2DPathEffect
|
31
|
+
);
|
32
|
+
};
|
33
|
+
|
34
|
+
export const isImageFilter = (type: NodeType) => {
|
35
|
+
"worklet";
|
36
|
+
return (
|
37
|
+
type === NodeType.OffsetImageFilter ||
|
38
|
+
type === NodeType.DisplacementMapImageFilter ||
|
39
|
+
type === NodeType.BlurImageFilter ||
|
40
|
+
type === NodeType.DropShadowImageFilter ||
|
41
|
+
type === NodeType.MorphologyImageFilter ||
|
42
|
+
type === NodeType.BlendImageFilter ||
|
43
|
+
type === NodeType.RuntimeShaderImageFilter
|
44
|
+
);
|
45
|
+
};
|
46
|
+
|
47
|
+
export const isShader = (type: NodeType) => {
|
48
|
+
"worklet";
|
49
|
+
return (
|
50
|
+
type === NodeType.Shader ||
|
51
|
+
type === NodeType.ImageShader ||
|
52
|
+
type === NodeType.ColorShader ||
|
53
|
+
type === NodeType.Turbulence ||
|
54
|
+
type === NodeType.FractalNoise ||
|
55
|
+
type === NodeType.LinearGradient ||
|
56
|
+
type === NodeType.RadialGradient ||
|
57
|
+
type === NodeType.SweepGradient ||
|
58
|
+
type === NodeType.TwoPointConicalGradient
|
59
|
+
);
|
60
|
+
};
|
61
|
+
|
62
|
+
export const sortNodeChildren = (parent: Node) => {
|
63
|
+
"worklet";
|
64
|
+
const maskFilters: Node[] = [];
|
65
|
+
const colorFilters: Node[] = [];
|
66
|
+
const shaders: Node[] = [];
|
67
|
+
const imageFilters: Node[] = [];
|
68
|
+
const pathEffects: Node[] = [];
|
69
|
+
const drawings: Node[] = [];
|
70
|
+
const paints: Node[] = [];
|
71
|
+
parent.children.forEach((node) => {
|
72
|
+
if (isColorFilter(node.type)) {
|
73
|
+
colorFilters.push(node);
|
74
|
+
} else if (node.type === NodeType.BlurMaskFilter) {
|
75
|
+
maskFilters.push(node);
|
76
|
+
} else if (isPathEffect(node.type)) {
|
77
|
+
pathEffects.push(node);
|
78
|
+
} else if (isImageFilter(node.type)) {
|
79
|
+
imageFilters.push(node);
|
80
|
+
} else if (isShader(node.type)) {
|
81
|
+
shaders.push(node);
|
82
|
+
} else if (node.type === NodeType.Paint) {
|
83
|
+
paints.push(node);
|
84
|
+
} else if (node.type === NodeType.Blend) {
|
85
|
+
if (node.children[0] && isImageFilter(node.children[0].type)) {
|
86
|
+
node.type = NodeType.BlendImageFilter;
|
87
|
+
imageFilters.push(node);
|
88
|
+
} else {
|
89
|
+
node.type = NodeType.Blend;
|
90
|
+
shaders.push(node);
|
91
|
+
}
|
92
|
+
} else {
|
93
|
+
drawings.push(node);
|
94
|
+
}
|
95
|
+
});
|
96
|
+
return {
|
97
|
+
colorFilters,
|
98
|
+
drawings,
|
99
|
+
maskFilters,
|
100
|
+
shaders,
|
101
|
+
pathEffects,
|
102
|
+
imageFilters,
|
103
|
+
paints,
|
104
|
+
};
|
105
|
+
};
|
@@ -0,0 +1,171 @@
|
|
1
|
+
import type { SharedValue } from "react-native-reanimated";
|
2
|
+
|
3
|
+
import type {
|
4
|
+
BlurMaskFilterProps,
|
5
|
+
CircleProps,
|
6
|
+
CTMProps,
|
7
|
+
ImageProps,
|
8
|
+
PointsProps,
|
9
|
+
PathProps,
|
10
|
+
RectProps,
|
11
|
+
RoundedRectProps,
|
12
|
+
OvalProps,
|
13
|
+
LineProps,
|
14
|
+
PatchProps,
|
15
|
+
VerticesProps,
|
16
|
+
DiffRectProps,
|
17
|
+
TextProps,
|
18
|
+
TextPathProps,
|
19
|
+
TextBlobProps,
|
20
|
+
GlyphsProps,
|
21
|
+
PictureProps,
|
22
|
+
ImageSVGProps,
|
23
|
+
ParagraphProps,
|
24
|
+
AtlasProps,
|
25
|
+
DrawingNodeProps,
|
26
|
+
} from "../../dom/types";
|
27
|
+
|
28
|
+
// export enum CommandType {
|
29
|
+
// // Context
|
30
|
+
// SavePaint = "SavePaint",
|
31
|
+
// RestorePaint = "RestorePaint",
|
32
|
+
// SaveCTM = "SaveCTM",
|
33
|
+
// RestoreCTM = "RestoreCTM",
|
34
|
+
// PushColorFilter = "PushColorFilter",
|
35
|
+
// PushBlurMaskFilter = "PushBlurMaskFilter",
|
36
|
+
// PushImageFilter = "PushImageFilter",
|
37
|
+
// PushPathEffect = "PushPathEffect",
|
38
|
+
// PushShader = "PushShader",
|
39
|
+
// ComposeColorFilter = "ComposeColorFilter",
|
40
|
+
// ComposeImageFilter = "ComposeImageFilter",
|
41
|
+
// ComposePathEffect = "ComposePathEffect",
|
42
|
+
// MaterializePaint = "MaterializePaint",
|
43
|
+
// SaveBackdropFilter = "SaveBackdropFilter",
|
44
|
+
// SaveLayer = "SaveLayer",
|
45
|
+
// RestorePaintDeclaration = "RestorePaintDeclaration",
|
46
|
+
// // Drawing
|
47
|
+
// DrawBox = "DrawBox",
|
48
|
+
// DrawImage = "DrawImage",
|
49
|
+
// DrawCircle = "DrawCircle",
|
50
|
+
// DrawPaint = "DrawPaint",
|
51
|
+
// DrawPoints = "DrawPoints",
|
52
|
+
// DrawPath = "DrawPath",
|
53
|
+
// DrawRect = "DrawRect",
|
54
|
+
// DrawRRect = "DrawRRect",
|
55
|
+
// DrawOval = "DrawOval",
|
56
|
+
// DrawLine = "DrawLine",
|
57
|
+
// DrawPatch = "DrawPatch",
|
58
|
+
// DrawVertices = "DrawVertices",
|
59
|
+
// DrawDiffRect = "DrawDiffRect",
|
60
|
+
// DrawText = "DrawText",
|
61
|
+
// DrawTextPath = "DrawTextPath",
|
62
|
+
// DrawTextBlob = "DrawTextBlob",
|
63
|
+
// DrawGlyphs = "DrawGlyphs",
|
64
|
+
// DrawPicture = "DrawPicture",
|
65
|
+
// DrawImageSVG = "DrawImageSVG",
|
66
|
+
// DrawParagraph = "DrawParagraph",
|
67
|
+
// DrawAtlas = "DrawAtlas",
|
68
|
+
// }
|
69
|
+
export enum CommandType {
|
70
|
+
// Context
|
71
|
+
SavePaint,
|
72
|
+
RestorePaint,
|
73
|
+
SaveCTM,
|
74
|
+
RestoreCTM,
|
75
|
+
PushColorFilter,
|
76
|
+
PushBlurMaskFilter,
|
77
|
+
PushImageFilter,
|
78
|
+
PushPathEffect,
|
79
|
+
PushShader,
|
80
|
+
ComposeColorFilter,
|
81
|
+
ComposeImageFilter,
|
82
|
+
ComposePathEffect,
|
83
|
+
MaterializePaint,
|
84
|
+
SaveBackdropFilter,
|
85
|
+
SaveLayer,
|
86
|
+
RestorePaintDeclaration,
|
87
|
+
// Drawing
|
88
|
+
DrawBox,
|
89
|
+
DrawImage,
|
90
|
+
DrawCircle,
|
91
|
+
DrawPaint,
|
92
|
+
DrawPoints,
|
93
|
+
DrawPath,
|
94
|
+
DrawRect,
|
95
|
+
DrawRRect,
|
96
|
+
DrawOval,
|
97
|
+
DrawLine,
|
98
|
+
DrawPatch,
|
99
|
+
DrawVertices,
|
100
|
+
DrawDiffRect,
|
101
|
+
DrawText,
|
102
|
+
DrawTextPath,
|
103
|
+
DrawTextBlob,
|
104
|
+
DrawGlyphs,
|
105
|
+
DrawPicture,
|
106
|
+
DrawImageSVG,
|
107
|
+
DrawParagraph,
|
108
|
+
DrawAtlas,
|
109
|
+
}
|
110
|
+
|
111
|
+
export type Command<T extends CommandType = CommandType> = {
|
112
|
+
type: T;
|
113
|
+
[key: string]: unknown;
|
114
|
+
};
|
115
|
+
|
116
|
+
export const materializeProps = (command: {
|
117
|
+
props: Record<string, unknown>;
|
118
|
+
animatedProps?: Record<string, SharedValue<unknown>>;
|
119
|
+
}) => {
|
120
|
+
"worklet";
|
121
|
+
if (command.animatedProps) {
|
122
|
+
for (const key in command.animatedProps) {
|
123
|
+
command.props[key] = command.animatedProps[key].value;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
};
|
127
|
+
|
128
|
+
export const isCommand = <T extends CommandType>(
|
129
|
+
command: Command,
|
130
|
+
type: T
|
131
|
+
): command is Command<T> => {
|
132
|
+
"worklet";
|
133
|
+
return command.type === type;
|
134
|
+
};
|
135
|
+
|
136
|
+
interface Props {
|
137
|
+
[CommandType.DrawImage]: ImageProps;
|
138
|
+
[CommandType.DrawCircle]: CircleProps;
|
139
|
+
[CommandType.SaveCTM]: CTMProps;
|
140
|
+
[CommandType.SavePaint]: DrawingNodeProps;
|
141
|
+
[CommandType.PushBlurMaskFilter]: BlurMaskFilterProps;
|
142
|
+
[CommandType.DrawPoints]: PointsProps;
|
143
|
+
[CommandType.DrawPath]: PathProps;
|
144
|
+
[CommandType.DrawRect]: RectProps;
|
145
|
+
[CommandType.DrawRRect]: RoundedRectProps;
|
146
|
+
[CommandType.DrawOval]: OvalProps;
|
147
|
+
[CommandType.DrawLine]: LineProps;
|
148
|
+
[CommandType.DrawPatch]: PatchProps;
|
149
|
+
[CommandType.DrawVertices]: VerticesProps;
|
150
|
+
[CommandType.DrawDiffRect]: DiffRectProps;
|
151
|
+
[CommandType.DrawText]: TextProps;
|
152
|
+
[CommandType.DrawTextPath]: TextPathProps;
|
153
|
+
[CommandType.DrawTextBlob]: TextBlobProps;
|
154
|
+
[CommandType.DrawGlyphs]: GlyphsProps;
|
155
|
+
[CommandType.DrawPicture]: PictureProps;
|
156
|
+
[CommandType.DrawImageSVG]: ImageSVGProps;
|
157
|
+
[CommandType.DrawParagraph]: ParagraphProps;
|
158
|
+
[CommandType.DrawAtlas]: AtlasProps;
|
159
|
+
}
|
160
|
+
|
161
|
+
interface DrawCommand<T extends CommandType> extends Command<T> {
|
162
|
+
props: T extends keyof Props ? Props[T] : never;
|
163
|
+
}
|
164
|
+
|
165
|
+
export const isDrawCommand = <T extends keyof Props>(
|
166
|
+
command: Command,
|
167
|
+
type: T
|
168
|
+
): command is DrawCommand<T> => {
|
169
|
+
"worklet";
|
170
|
+
return command.type === type;
|
171
|
+
};
|
@@ -0,0 +1,130 @@
|
|
1
|
+
import type {
|
2
|
+
Skia,
|
3
|
+
SkCanvas,
|
4
|
+
SkColorFilter,
|
5
|
+
SkPaint,
|
6
|
+
SkShader,
|
7
|
+
SkImageFilter,
|
8
|
+
SkPathEffect,
|
9
|
+
} from "../../skia/types";
|
10
|
+
|
11
|
+
export const createDrawingContext = (
|
12
|
+
Skia: Skia,
|
13
|
+
paintPool: SkPaint[],
|
14
|
+
canvas: SkCanvas
|
15
|
+
) => {
|
16
|
+
"worklet";
|
17
|
+
|
18
|
+
// State (formerly class fields)
|
19
|
+
const paints: SkPaint[] = [];
|
20
|
+
const colorFilters: SkColorFilter[] = [];
|
21
|
+
const shaders: SkShader[] = [];
|
22
|
+
const imageFilters: SkImageFilter[] = [];
|
23
|
+
const pathEffects: SkPathEffect[] = [];
|
24
|
+
const paintDeclarations: SkPaint[] = [];
|
25
|
+
|
26
|
+
let nextPaintIndex = 1;
|
27
|
+
|
28
|
+
// Initialize first paint
|
29
|
+
paintPool[0] = Skia.Paint();
|
30
|
+
paints.push(paintPool[0]);
|
31
|
+
|
32
|
+
// Methods (formerly class methods)
|
33
|
+
const savePaint = () => {
|
34
|
+
// Get next available paint from pool or create new one if needed
|
35
|
+
if (nextPaintIndex >= paintPool.length) {
|
36
|
+
paintPool.push(Skia.Paint());
|
37
|
+
}
|
38
|
+
|
39
|
+
const nextPaint = paintPool[nextPaintIndex];
|
40
|
+
nextPaint.assign(getCurrentPaint()); // Reuse allocation by copying properties
|
41
|
+
paints.push(nextPaint);
|
42
|
+
nextPaintIndex++;
|
43
|
+
};
|
44
|
+
|
45
|
+
const saveBackdropFilter = () => {
|
46
|
+
let imageFilter: SkImageFilter | null = null;
|
47
|
+
const imgf = imageFilters.pop();
|
48
|
+
if (imgf) {
|
49
|
+
imageFilter = imgf;
|
50
|
+
} else {
|
51
|
+
const cf = colorFilters.pop();
|
52
|
+
if (cf) {
|
53
|
+
imageFilter = Skia.ImageFilter.MakeColorFilter(cf, null);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
canvas.saveLayer(undefined, null, imageFilter);
|
57
|
+
canvas.restore();
|
58
|
+
};
|
59
|
+
|
60
|
+
// Equivalent to the `get paint()` getter in the original class
|
61
|
+
const getCurrentPaint = () => {
|
62
|
+
return paints[paints.length - 1];
|
63
|
+
};
|
64
|
+
|
65
|
+
const restorePaint = () => {
|
66
|
+
return paints.pop();
|
67
|
+
};
|
68
|
+
|
69
|
+
const materializePaint = () => {
|
70
|
+
// Color Filters
|
71
|
+
if (colorFilters.length > 0) {
|
72
|
+
getCurrentPaint().setColorFilter(
|
73
|
+
colorFilters.reduceRight((inner, outer) =>
|
74
|
+
inner ? Skia.ColorFilter.MakeCompose(outer, inner) : outer
|
75
|
+
)
|
76
|
+
);
|
77
|
+
}
|
78
|
+
// Shaders
|
79
|
+
if (shaders.length > 0) {
|
80
|
+
getCurrentPaint().setShader(shaders[shaders.length - 1]);
|
81
|
+
}
|
82
|
+
// Image Filters
|
83
|
+
if (imageFilters.length > 0) {
|
84
|
+
getCurrentPaint().setImageFilter(
|
85
|
+
imageFilters.reduceRight((inner, outer) =>
|
86
|
+
inner ? Skia.ImageFilter.MakeCompose(outer, inner) : outer
|
87
|
+
)
|
88
|
+
);
|
89
|
+
}
|
90
|
+
// Path Effects
|
91
|
+
if (pathEffects.length > 0) {
|
92
|
+
getCurrentPaint().setPathEffect(
|
93
|
+
pathEffects.reduceRight((inner, outer) =>
|
94
|
+
inner ? Skia.PathEffect.MakeCompose(outer, inner) : outer
|
95
|
+
)
|
96
|
+
);
|
97
|
+
}
|
98
|
+
|
99
|
+
// Clear arrays
|
100
|
+
colorFilters.length = 0;
|
101
|
+
shaders.length = 0;
|
102
|
+
imageFilters.length = 0;
|
103
|
+
pathEffects.length = 0;
|
104
|
+
};
|
105
|
+
|
106
|
+
// Return an object containing the Skia reference, the canvas, and the methods
|
107
|
+
return {
|
108
|
+
// Public fields
|
109
|
+
Skia,
|
110
|
+
canvas,
|
111
|
+
paints,
|
112
|
+
colorFilters,
|
113
|
+
shaders,
|
114
|
+
imageFilters,
|
115
|
+
pathEffects,
|
116
|
+
paintDeclarations,
|
117
|
+
paintPool,
|
118
|
+
|
119
|
+
// Public methods
|
120
|
+
savePaint,
|
121
|
+
saveBackdropFilter,
|
122
|
+
get paint() {
|
123
|
+
return paints[paints.length - 1];
|
124
|
+
}, // the "getter" for the current paint
|
125
|
+
restorePaint,
|
126
|
+
materializePaint,
|
127
|
+
};
|
128
|
+
};
|
129
|
+
|
130
|
+
export type DrawingContext = ReturnType<typeof createDrawingContext>;
|