@shopify/react-native-skia 1.7.6 → 1.7.7
Sign up to get free protection for your applications and to get access to all the features.
- package/android/cpp/rnskia-android/OpenGLWindowContext.h +8 -1
- package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +4 -4
- package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.h +2 -2
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +13 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaTextureView.java +24 -1
- package/cpp/rnskia/RNSkJsiViewApi.h +0 -3
- package/cpp/rnskia/RNSkView.h +6 -6
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.h +2 -2
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +2 -2
- package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Circle.d.ts +2 -3
- package/lib/commonjs/dom/nodes/datatypes/Circle.js +11 -6
- package/lib/commonjs/dom/nodes/datatypes/Circle.js.map +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Enum.js +1 -0
- package/lib/commonjs/dom/nodes/datatypes/Enum.js.map +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Fitting.js +1 -10
- package/lib/commonjs/dom/nodes/datatypes/Fitting.js.map +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Gradient.js +3 -2
- package/lib/commonjs/dom/nodes/datatypes/Gradient.js.map +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Path.js +4 -1
- package/lib/commonjs/dom/nodes/datatypes/Path.js.map +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Radius.js +1 -0
- package/lib/commonjs/dom/nodes/datatypes/Radius.js.map +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Rect.d.ts +3 -1
- package/lib/commonjs/dom/nodes/datatypes/Rect.js +17 -7
- package/lib/commonjs/dom/nodes/datatypes/Rect.js.map +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Transform.d.ts +2 -1
- package/lib/commonjs/dom/nodes/datatypes/Transform.js +32 -1
- package/lib/commonjs/dom/nodes/datatypes/Transform.js.map +1 -1
- package/lib/commonjs/dom/nodes/drawings/Box.js +4 -5
- package/lib/commonjs/dom/nodes/drawings/Box.js.map +1 -1
- package/lib/commonjs/dom/nodes/drawings/CircleNode.js +1 -1
- package/lib/commonjs/dom/nodes/drawings/CircleNode.js.map +1 -1
- package/lib/commonjs/dom/types/DeclarationContext.d.ts +4 -4
- package/lib/commonjs/dom/types/DeclarationContext.js +8 -2
- package/lib/commonjs/dom/types/DeclarationContext.js.map +1 -1
- package/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
- package/lib/commonjs/external/reanimated/renderHelpers.js +11 -6
- package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/commonjs/renderer/HostConfig.js +8 -4
- package/lib/commonjs/renderer/HostConfig.js.map +1 -1
- package/lib/commonjs/renderer/__tests__/setup.d.ts +2 -3
- package/lib/commonjs/renderer/processors/Animations/Animations.d.ts +1 -2
- package/lib/commonjs/renderer/processors/Animations/Animations.js.map +1 -1
- package/lib/commonjs/renderer/typeddash.js +5 -1
- package/lib/commonjs/renderer/typeddash.js.map +1 -1
- package/lib/commonjs/skia/__tests__/setup.d.ts +0 -3
- package/lib/commonjs/skia/types/Path/Path.js +5 -1
- package/lib/commonjs/skia/types/Path/Path.js.map +1 -1
- package/lib/commonjs/skia/types/Shader/Shader.js +8 -6
- package/lib/commonjs/skia/types/Shader/Shader.js.map +1 -1
- package/lib/commonjs/sksg/Container.d.ts +19 -0
- package/lib/commonjs/sksg/Container.js +102 -0
- package/lib/commonjs/sksg/Container.js.map +1 -0
- package/lib/commonjs/sksg/DrawingContext.d.ts +16 -0
- package/lib/commonjs/sksg/DrawingContext.js +186 -0
- package/lib/commonjs/sksg/DrawingContext.js.map +1 -0
- package/lib/commonjs/sksg/HostConfig.d.ts +19 -0
- package/lib/commonjs/sksg/HostConfig.js +168 -0
- package/lib/commonjs/sksg/HostConfig.js.map +1 -0
- package/lib/commonjs/sksg/Reconciler.d.ts +17 -0
- package/lib/commonjs/sksg/Reconciler.js +54 -0
- package/lib/commonjs/sksg/Reconciler.js.map +1 -0
- package/lib/commonjs/sksg/__tests__/MockDeclaration.d.ts +57 -0
- package/lib/commonjs/sksg/nodes/Node.d.ts +7 -0
- package/lib/commonjs/sksg/nodes/Node.js +6 -0
- package/lib/commonjs/sksg/nodes/Node.js.map +1 -0
- package/lib/commonjs/sksg/nodes/colorFilters.d.ts +7 -0
- package/lib/commonjs/sksg/nodes/colorFilters.js +55 -0
- package/lib/commonjs/sksg/nodes/colorFilters.js.map +1 -0
- package/lib/commonjs/sksg/nodes/context.d.ts +3 -0
- package/lib/commonjs/sksg/nodes/context.js +448 -0
- package/lib/commonjs/sksg/nodes/context.js.map +1 -0
- package/lib/commonjs/sksg/nodes/drawings.d.ts +31 -0
- package/lib/commonjs/sksg/nodes/drawings.js +361 -0
- package/lib/commonjs/sksg/nodes/drawings.js.map +1 -0
- package/lib/commonjs/sksg/nodes/imageFilters.d.ts +14 -0
- package/lib/commonjs/sksg/nodes/imageFilters.js +135 -0
- package/lib/commonjs/sksg/nodes/imageFilters.js.map +1 -0
- package/lib/commonjs/sksg/nodes/index.d.ts +3 -0
- package/lib/commonjs/sksg/nodes/index.js +39 -0
- package/lib/commonjs/sksg/nodes/index.js.map +1 -0
- package/lib/commonjs/sksg/nodes/paint.d.ts +2 -0
- package/lib/commonjs/sksg/nodes/paint.js +80 -0
- package/lib/commonjs/sksg/nodes/paint.js.map +1 -0
- package/lib/commonjs/sksg/nodes/pathEffects.d.ts +8 -0
- package/lib/commonjs/sksg/nodes/pathEffects.js +84 -0
- package/lib/commonjs/sksg/nodes/pathEffects.js.map +1 -0
- package/lib/commonjs/sksg/nodes/shaders.d.ts +10 -0
- package/lib/commonjs/sksg/nodes/shaders.js +156 -0
- package/lib/commonjs/sksg/nodes/shaders.js.map +1 -0
- package/lib/commonjs/sksg/nodes/utils.d.ts +3 -0
- package/lib/commonjs/sksg/nodes/utils.js +25 -0
- package/lib/commonjs/sksg/nodes/utils.js.map +1 -0
- package/lib/commonjs/views/SkiaPictureView.js +0 -2
- package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
- package/lib/commonjs/views/types.d.ts +2 -2
- package/lib/commonjs/views/types.js.map +1 -1
- package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Circle.d.ts +2 -3
- package/lib/module/dom/nodes/datatypes/Circle.js +12 -6
- package/lib/module/dom/nodes/datatypes/Circle.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Enum.js +2 -0
- package/lib/module/dom/nodes/datatypes/Enum.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Fitting.js +2 -10
- package/lib/module/dom/nodes/datatypes/Fitting.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Gradient.js +4 -2
- package/lib/module/dom/nodes/datatypes/Gradient.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Path.js +5 -1
- package/lib/module/dom/nodes/datatypes/Path.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Radius.js +2 -0
- package/lib/module/dom/nodes/datatypes/Radius.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Rect.d.ts +3 -1
- package/lib/module/dom/nodes/datatypes/Rect.js +14 -5
- package/lib/module/dom/nodes/datatypes/Rect.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Transform.d.ts +2 -1
- package/lib/module/dom/nodes/datatypes/Transform.js +31 -0
- package/lib/module/dom/nodes/datatypes/Transform.js.map +1 -1
- package/lib/module/dom/nodes/drawings/Box.js +1 -2
- package/lib/module/dom/nodes/drawings/Box.js.map +1 -1
- package/lib/module/dom/nodes/drawings/CircleNode.js +1 -1
- package/lib/module/dom/nodes/drawings/CircleNode.js.map +1 -1
- package/lib/module/dom/types/DeclarationContext.d.ts +4 -4
- package/lib/module/dom/types/DeclarationContext.js +9 -2
- package/lib/module/dom/types/DeclarationContext.js.map +1 -1
- package/lib/module/external/reanimated/renderHelpers.d.ts +2 -0
- package/lib/module/external/reanimated/renderHelpers.js +8 -4
- package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/module/renderer/HostConfig.js +8 -4
- package/lib/module/renderer/HostConfig.js.map +1 -1
- package/lib/module/renderer/__tests__/setup.d.ts +2 -3
- package/lib/module/renderer/processors/Animations/Animations.d.ts +1 -2
- package/lib/module/renderer/processors/Animations/Animations.js.map +1 -1
- package/lib/module/renderer/typeddash.js +5 -1
- package/lib/module/renderer/typeddash.js.map +1 -1
- package/lib/module/skia/__tests__/setup.d.ts +0 -3
- package/lib/module/skia/types/Path/Path.js +5 -1
- package/lib/module/skia/types/Path/Path.js.map +1 -1
- package/lib/module/skia/types/Shader/Shader.js +9 -6
- package/lib/module/skia/types/Shader/Shader.js.map +1 -1
- package/lib/module/sksg/Container.d.ts +19 -0
- package/lib/module/sksg/Container.js +94 -0
- package/lib/module/sksg/Container.js.map +1 -0
- package/lib/module/sksg/DrawingContext.d.ts +16 -0
- package/lib/module/sksg/DrawingContext.js +180 -0
- package/lib/module/sksg/DrawingContext.js.map +1 -0
- package/lib/module/sksg/HostConfig.d.ts +19 -0
- package/lib/module/sksg/HostConfig.js +161 -0
- package/lib/module/sksg/HostConfig.js.map +1 -0
- package/lib/module/sksg/Reconciler.d.ts +17 -0
- package/lib/module/sksg/Reconciler.js +46 -0
- package/lib/module/sksg/Reconciler.js.map +1 -0
- package/lib/module/sksg/__tests__/MockDeclaration.d.ts +57 -0
- package/lib/module/sksg/nodes/Node.d.ts +7 -0
- package/lib/module/sksg/nodes/Node.js +2 -0
- package/lib/module/sksg/nodes/Node.js.map +1 -0
- package/lib/module/sksg/nodes/colorFilters.d.ts +7 -0
- package/lib/module/sksg/nodes/colorFilters.js +44 -0
- package/lib/module/sksg/nodes/colorFilters.js.map +1 -0
- package/lib/module/sksg/nodes/context.d.ts +3 -0
- package/lib/module/sksg/nodes/context.js +443 -0
- package/lib/module/sksg/nodes/context.js.map +1 -0
- package/lib/module/sksg/nodes/drawings.d.ts +31 -0
- package/lib/module/sksg/nodes/drawings.js +334 -0
- package/lib/module/sksg/nodes/drawings.js.map +1 -0
- package/lib/module/sksg/nodes/imageFilters.d.ts +14 -0
- package/lib/module/sksg/nodes/imageFilters.js +122 -0
- package/lib/module/sksg/nodes/imageFilters.js.map +1 -0
- package/lib/module/sksg/nodes/index.d.ts +3 -0
- package/lib/module/sksg/nodes/index.js +4 -0
- package/lib/module/sksg/nodes/index.js.map +1 -0
- package/lib/module/sksg/nodes/paint.d.ts +2 -0
- package/lib/module/sksg/nodes/paint.js +74 -0
- package/lib/module/sksg/nodes/paint.js.map +1 -0
- package/lib/module/sksg/nodes/pathEffects.d.ts +8 -0
- package/lib/module/sksg/nodes/pathEffects.js +72 -0
- package/lib/module/sksg/nodes/pathEffects.js.map +1 -0
- package/lib/module/sksg/nodes/shaders.d.ts +10 -0
- package/lib/module/sksg/nodes/shaders.js +142 -0
- package/lib/module/sksg/nodes/shaders.js.map +1 -0
- package/lib/module/sksg/nodes/utils.d.ts +3 -0
- package/lib/module/sksg/nodes/utils.js +18 -0
- package/lib/module/sksg/nodes/utils.js.map +1 -0
- package/lib/module/views/SkiaPictureView.js +0 -2
- package/lib/module/views/SkiaPictureView.js.map +1 -1
- package/lib/module/views/types.d.ts +2 -2
- package/lib/module/views/types.js.map +1 -1
- package/lib/typescript/lib/commonjs/dom/nodes/datatypes/Circle.d.ts +1 -1
- package/lib/typescript/lib/commonjs/dom/nodes/datatypes/Rect.d.ts +2 -0
- package/lib/typescript/lib/commonjs/dom/nodes/datatypes/Transform.d.ts +1 -0
- package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
- package/lib/typescript/lib/commonjs/renderer/HostConfig.d.ts +3 -1
- package/lib/typescript/lib/commonjs/sksg/Container.d.ts +16 -0
- package/lib/typescript/lib/commonjs/sksg/DrawingContext.d.ts +26 -0
- package/lib/typescript/lib/commonjs/sksg/HostConfig.d.ts +50 -0
- package/lib/typescript/lib/commonjs/sksg/Reconciler.d.ts +16 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/Node.d.ts +1 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/colorFilters.d.ts +7 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/context.d.ts +2 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/drawings.d.ts +23 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/imageFilters.d.ts +10 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/index.d.ts +1 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/paint.d.ts +2 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/pathEffects.d.ts +8 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/shaders.d.ts +10 -0
- package/lib/typescript/lib/commonjs/sksg/nodes/utils.d.ts +3 -0
- package/lib/typescript/lib/module/dom/nodes/datatypes/Circle.d.ts +1 -1
- package/lib/typescript/lib/module/dom/nodes/datatypes/Rect.d.ts +2 -0
- package/lib/typescript/lib/module/dom/nodes/datatypes/Transform.d.ts +1 -0
- package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +2 -0
- package/lib/typescript/lib/module/mock/index.d.ts +4 -1
- package/lib/typescript/lib/module/renderer/HostConfig.d.ts +3 -1
- package/lib/typescript/lib/module/sksg/Container.d.ts +15 -0
- package/lib/typescript/lib/module/sksg/DrawingContext.d.ts +26 -0
- package/lib/typescript/lib/module/sksg/HostConfig.d.ts +49 -0
- package/lib/typescript/lib/module/sksg/Reconciler.d.ts +15 -0
- package/lib/typescript/lib/module/sksg/nodes/colorFilters.d.ts +6 -0
- package/lib/typescript/lib/module/sksg/nodes/context.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/nodes/drawings.d.ts +22 -0
- package/lib/typescript/lib/module/sksg/nodes/imageFilters.d.ts +9 -0
- package/lib/typescript/lib/module/sksg/nodes/index.d.ts +3 -0
- package/lib/typescript/lib/module/sksg/nodes/paint.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/nodes/pathEffects.d.ts +7 -0
- package/lib/typescript/lib/module/sksg/nodes/shaders.d.ts +9 -0
- package/lib/typescript/lib/module/sksg/nodes/utils.d.ts +2 -0
- package/lib/typescript/src/dom/nodes/datatypes/Circle.d.ts +2 -3
- package/lib/typescript/src/dom/nodes/datatypes/Rect.d.ts +3 -1
- package/lib/typescript/src/dom/nodes/datatypes/Transform.d.ts +2 -1
- package/lib/typescript/src/dom/types/DeclarationContext.d.ts +4 -4
- package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +2 -0
- package/lib/typescript/src/renderer/__tests__/setup.d.ts +2 -3
- package/lib/typescript/src/renderer/processors/Animations/Animations.d.ts +1 -2
- package/lib/typescript/src/skia/__tests__/setup.d.ts +0 -3
- package/lib/typescript/src/sksg/Container.d.ts +19 -0
- package/lib/typescript/src/sksg/DrawingContext.d.ts +16 -0
- package/lib/typescript/src/sksg/HostConfig.d.ts +19 -0
- package/lib/typescript/src/sksg/Reconciler.d.ts +17 -0
- package/lib/typescript/src/sksg/__tests__/MockDeclaration.d.ts +57 -0
- package/lib/typescript/src/sksg/nodes/Node.d.ts +7 -0
- package/lib/typescript/src/sksg/nodes/colorFilters.d.ts +7 -0
- package/lib/typescript/src/sksg/nodes/context.d.ts +3 -0
- package/lib/typescript/src/sksg/nodes/drawings.d.ts +31 -0
- package/lib/typescript/src/sksg/nodes/imageFilters.d.ts +14 -0
- package/lib/typescript/src/sksg/nodes/index.d.ts +3 -0
- package/lib/typescript/src/sksg/nodes/paint.d.ts +2 -0
- package/lib/typescript/src/sksg/nodes/pathEffects.d.ts +8 -0
- package/lib/typescript/src/sksg/nodes/shaders.d.ts +10 -0
- package/lib/typescript/src/sksg/nodes/utils.d.ts +3 -0
- package/lib/typescript/src/views/types.d.ts +2 -2
- package/libs/{ios → apple}/libskia.xcframework/Info.plist +15 -0
- package/libs/{ios → apple}/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
- package/libs/{ios → apple}/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
- package/libs/apple/libskia.xcframework/macos-arm64_x86_64/libskia.a +0 -0
- package/libs/{ios → apple}/libskottie.xcframework/Info.plist +20 -5
- package/libs/{ios → apple}/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
- package/libs/{ios → apple}/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
- package/libs/apple/libskottie.xcframework/macos-arm64_x86_64/libskottie.a +0 -0
- package/libs/{ios → apple}/libskparagraph.xcframework/Info.plist +20 -5
- package/libs/{ios → apple}/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
- package/libs/{ios → apple}/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
- package/libs/apple/libskparagraph.xcframework/macos-arm64_x86_64/libskparagraph.a +0 -0
- package/libs/{ios → apple}/libsksg.xcframework/Info.plist +15 -0
- package/libs/{ios → apple}/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
- package/libs/{ios → apple}/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
- package/libs/apple/libsksg.xcframework/macos-arm64_x86_64/libsksg.a +0 -0
- package/libs/{ios → apple}/libskshaper.xcframework/Info.plist +20 -5
- package/libs/{ios → apple}/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
- package/libs/{ios → apple}/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
- package/libs/apple/libskshaper.xcframework/macos-arm64_x86_64/libskshaper.a +0 -0
- package/libs/{ios → apple}/libskunicode_core.xcframework/Info.plist +18 -3
- package/libs/{ios → apple}/libskunicode_core.xcframework/ios-arm64_arm64e/libskunicode_core.a +0 -0
- package/libs/{ios → apple}/libskunicode_core.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_core.a +0 -0
- package/libs/apple/libskunicode_core.xcframework/macos-arm64_x86_64/libskunicode_core.a +0 -0
- package/libs/{ios → apple}/libskunicode_libgrapheme.xcframework/Info.plist +15 -0
- package/libs/{ios → apple}/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e/libskunicode_libgrapheme.a +0 -0
- package/libs/{ios → apple}/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_libgrapheme.a +0 -0
- package/libs/apple/libskunicode_libgrapheme.xcframework/macos-arm64_x86_64/libskunicode_libgrapheme.a +0 -0
- package/libs/{ios → apple}/libsvg.xcframework/Info.plist +15 -0
- package/libs/{ios → apple}/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
- package/libs/{ios → apple}/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
- package/libs/apple/libsvg.xcframework/macos-arm64_x86_64/libsvg.a +0 -0
- package/package.json +3 -3
- package/react-native-skia.podspec +9 -9
- package/src/__tests__/setup.ts +1 -1
- package/src/__tests__/snapshots/sksg/breathe-0.png +0 -0
- package/src/__tests__/snapshots/sksg/breathe.png +0 -0
- package/src/__tests__/snapshots/sksg/simple.png +0 -0
- package/src/__tests__/snapshots/sksg/simple2.png +0 -0
- package/src/dom/nodes/JsiSkDOM.ts +2 -1
- package/src/dom/nodes/datatypes/Circle.ts +7 -5
- package/src/dom/nodes/datatypes/Enum.ts +2 -0
- package/src/dom/nodes/datatypes/Fitting.ts +2 -5
- package/src/dom/nodes/datatypes/Gradient.ts +4 -7
- package/src/dom/nodes/datatypes/Path.ts +5 -2
- package/src/dom/nodes/datatypes/Radius.ts +2 -0
- package/src/dom/nodes/datatypes/Rect.ts +40 -6
- package/src/dom/nodes/datatypes/Transform.ts +29 -1
- package/src/dom/nodes/drawings/Box.ts +1 -29
- package/src/dom/nodes/drawings/CircleNode.ts +1 -1
- package/src/dom/types/DeclarationContext.ts +12 -2
- package/src/external/reanimated/renderHelpers.ts +8 -4
- package/src/renderer/HostConfig.ts +10 -4
- package/src/renderer/__tests__/documentation/shapes/Box.spec.tsx +2 -2
- package/src/renderer/__tests__/setup.tsx +17 -15
- package/src/renderer/processors/Animations/Animations.ts +1 -5
- package/src/renderer/typeddash.ts +4 -2
- package/src/skia/__tests__/setup.ts +1 -51
- package/src/skia/types/Path/Path.ts +4 -2
- package/src/skia/types/Shader/Shader.ts +7 -4
- package/src/sksg/Container.ts +102 -0
- package/src/sksg/DrawingContext.ts +221 -0
- package/src/sksg/HostConfig.ts +287 -0
- package/src/sksg/Reconciler.ts +59 -0
- package/src/sksg/__tests__/Declarations.spec.tsx +235 -0
- package/src/sksg/__tests__/MockDeclaration.ts +140 -0
- package/src/sksg/__tests__/Simple.spec.tsx +148 -0
- package/src/sksg/nodes/Node.ts +8 -0
- package/src/sksg/nodes/colorFilters.ts +60 -0
- package/src/sksg/nodes/context.ts +489 -0
- package/src/sksg/nodes/drawings.ts +393 -0
- package/src/sksg/nodes/imageFilters.ts +183 -0
- package/src/sksg/nodes/index.ts +3 -0
- package/src/sksg/nodes/paint.ts +75 -0
- package/src/sksg/nodes/pathEffects.ts +95 -0
- package/src/sksg/nodes/shaders.ts +203 -0
- package/src/sksg/nodes/utils.ts +23 -0
- package/src/views/SkiaPictureView.tsx +0 -2
- package/src/views/types.ts +2 -2
- package/lib/commonjs/dom/__tests__/Shaders.spec.d.ts +0 -1
- package/lib/commonjs/renderer/__tests__/SkiaDOM.spec.d.ts +0 -1
- package/lib/module/dom/__tests__/Compose.spec.d.ts +0 -1
- package/lib/module/dom/__tests__/Demos.spec.d.ts +0 -1
- package/lib/module/dom/__tests__/DrawingContext.spec.d.ts +0 -1
- package/lib/module/dom/__tests__/Drawings.spec.d.ts +0 -1
- package/lib/module/dom/__tests__/Group.spec.d.ts +0 -1
- package/lib/module/dom/__tests__/Paint.spec.d.ts +0 -1
- package/lib/module/dom/__tests__/RenderNodes.spec.d.ts +0 -1
- package/lib/module/dom/__tests__/Shaders.spec.d.ts +0 -1
- package/lib/module/renderer/__tests__/SkiaDOM.spec.d.ts +0 -1
- package/lib/typescript/src/dom/__tests__/Compose.spec.d.ts +0 -1
- package/lib/typescript/src/dom/__tests__/Demos.spec.d.ts +0 -1
- package/lib/typescript/src/dom/__tests__/DrawingContext.spec.d.ts +0 -1
- package/lib/typescript/src/dom/__tests__/Drawings.spec.d.ts +0 -1
- package/lib/typescript/src/dom/__tests__/Group.spec.d.ts +0 -1
- package/lib/typescript/src/dom/__tests__/Paint.spec.d.ts +0 -1
- package/lib/typescript/src/dom/__tests__/RenderNodes.spec.d.ts +0 -1
- package/lib/typescript/src/dom/__tests__/Shaders.spec.d.ts +0 -1
- package/lib/typescript/src/renderer/__tests__/SkiaDOM.spec.d.ts +0 -1
- package/src/dom/__tests__/Compose.spec.tsx +0 -42
- package/src/dom/__tests__/Demos.spec.tsx +0 -145
- package/src/dom/__tests__/DrawingContext.spec.tsx +0 -99
- package/src/dom/__tests__/Drawings.spec.tsx +0 -95
- package/src/dom/__tests__/Group.spec.tsx +0 -132
- package/src/dom/__tests__/Paint.spec.tsx +0 -100
- package/src/dom/__tests__/RenderNodes.spec.tsx +0 -44
- package/src/dom/__tests__/Shaders.spec.tsx +0 -123
- package/src/renderer/__tests__/SkiaDOM.spec.tsx +0 -46
- /package/lib/commonjs/{dom/__tests__/Compose.spec.d.ts → sksg/__tests__/Declarations.spec.d.ts} +0 -0
- /package/lib/commonjs/{dom/__tests__/Demos.spec.d.ts → sksg/__tests__/Simple.spec.d.ts} +0 -0
- /package/lib/{commonjs/dom/__tests__/DrawingContext.spec.d.ts → module/sksg/__tests__/Declarations.spec.d.ts} +0 -0
- /package/lib/{commonjs/dom/__tests__/Drawings.spec.d.ts → module/sksg/__tests__/Simple.spec.d.ts} +0 -0
- /package/lib/{commonjs/dom/__tests__/Group.spec.d.ts → typescript/lib/module/sksg/nodes/Node.d.ts} +0 -0
- /package/lib/{commonjs/dom/__tests__/Paint.spec.d.ts → typescript/src/sksg/__tests__/Declarations.spec.d.ts} +0 -0
- /package/lib/{commonjs/dom/__tests__/RenderNodes.spec.d.ts → typescript/src/sksg/__tests__/Simple.spec.d.ts} +0 -0
@@ -0,0 +1,393 @@
|
|
1
|
+
"worklet";
|
2
|
+
|
3
|
+
import {
|
4
|
+
deflate,
|
5
|
+
enumKey,
|
6
|
+
fitRects,
|
7
|
+
inflate,
|
8
|
+
NodeType,
|
9
|
+
processCircle,
|
10
|
+
processPath,
|
11
|
+
processRect,
|
12
|
+
processRRect,
|
13
|
+
} from "../../dom/nodes";
|
14
|
+
import type {
|
15
|
+
AtlasProps,
|
16
|
+
BoxProps,
|
17
|
+
BoxShadowProps,
|
18
|
+
CircleProps,
|
19
|
+
DiffRectProps,
|
20
|
+
DrawingNodeProps,
|
21
|
+
GlyphsProps,
|
22
|
+
ImageProps,
|
23
|
+
ImageSVGProps,
|
24
|
+
LineProps,
|
25
|
+
OvalProps,
|
26
|
+
ParagraphProps,
|
27
|
+
PatchProps,
|
28
|
+
PathProps,
|
29
|
+
PictureProps,
|
30
|
+
PointsProps,
|
31
|
+
RectProps,
|
32
|
+
RoundedRectProps,
|
33
|
+
TextBlobProps,
|
34
|
+
TextPathProps,
|
35
|
+
TextProps,
|
36
|
+
VerticesProps,
|
37
|
+
} from "../../dom/types";
|
38
|
+
import { saturate } from "../../renderer/processors";
|
39
|
+
import type {
|
40
|
+
SkCanvas,
|
41
|
+
SkPaint,
|
42
|
+
SkPoint,
|
43
|
+
SkRSXform,
|
44
|
+
Skia,
|
45
|
+
} from "../../skia/types";
|
46
|
+
import {
|
47
|
+
BlendMode,
|
48
|
+
BlurStyle,
|
49
|
+
ClipOp,
|
50
|
+
FillType,
|
51
|
+
isRRect,
|
52
|
+
PointMode,
|
53
|
+
VertexMode,
|
54
|
+
} from "../../skia/types";
|
55
|
+
|
56
|
+
import type { Node } from "./Node";
|
57
|
+
import { materialize } from "./utils";
|
58
|
+
|
59
|
+
interface LocalDrawingContext {
|
60
|
+
Skia: Skia;
|
61
|
+
canvas: SkCanvas;
|
62
|
+
paint: SkPaint;
|
63
|
+
}
|
64
|
+
|
65
|
+
export const drawLine = (ctx: LocalDrawingContext, props: LineProps) => {
|
66
|
+
const { p1, p2 } = props;
|
67
|
+
ctx.canvas.drawLine(p1.x, p1.y, p2.x, p2.y, ctx.paint);
|
68
|
+
};
|
69
|
+
|
70
|
+
export const drawOval = (ctx: LocalDrawingContext, props: OvalProps) => {
|
71
|
+
const rect = processRect(ctx.Skia, props);
|
72
|
+
ctx.canvas.drawOval(rect, ctx.paint);
|
73
|
+
};
|
74
|
+
|
75
|
+
export const drawBox = (
|
76
|
+
ctx: LocalDrawingContext,
|
77
|
+
props: BoxProps,
|
78
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
79
|
+
children: Node<any>[]
|
80
|
+
) => {
|
81
|
+
const { paint, Skia, canvas } = ctx;
|
82
|
+
const { box: defaultBox } = props;
|
83
|
+
const opacity = paint.getAlphaf();
|
84
|
+
const box = isRRect(defaultBox) ? defaultBox : Skia.RRectXY(defaultBox, 0, 0);
|
85
|
+
const shadows = children
|
86
|
+
.map((node) => {
|
87
|
+
if (node.type === NodeType.BoxShadow) {
|
88
|
+
return materialize(node.props);
|
89
|
+
}
|
90
|
+
return null;
|
91
|
+
})
|
92
|
+
.filter((n): n is BoxShadowProps => n !== null);
|
93
|
+
shadows
|
94
|
+
.filter((shadow) => !shadow.inner)
|
95
|
+
.map((shadow) => {
|
96
|
+
const { color = "black", blur, spread = 0, dx = 0, dy = 0 } = shadow;
|
97
|
+
const lPaint = Skia.Paint();
|
98
|
+
lPaint.setColor(Skia.Color(color));
|
99
|
+
lPaint.setAlphaf(paint.getAlphaf() * opacity);
|
100
|
+
lPaint.setMaskFilter(
|
101
|
+
Skia.MaskFilter.MakeBlur(BlurStyle.Normal, blur, true)
|
102
|
+
);
|
103
|
+
canvas.drawRRect(inflate(Skia, box, spread, spread, dx, dy), lPaint);
|
104
|
+
});
|
105
|
+
|
106
|
+
canvas.drawRRect(box, paint);
|
107
|
+
|
108
|
+
shadows
|
109
|
+
.filter((shadow) => shadow.inner)
|
110
|
+
.map((shadow) => {
|
111
|
+
const { color = "black", blur, spread = 0, dx = 0, dy = 0 } = shadow;
|
112
|
+
const delta = Skia.Point(10 + Math.abs(dx), 10 + Math.abs(dy));
|
113
|
+
canvas.save();
|
114
|
+
canvas.clipRRect(box, ClipOp.Intersect, false);
|
115
|
+
const lPaint = Skia.Paint();
|
116
|
+
lPaint.setColor(Skia.Color(color));
|
117
|
+
lPaint.setAlphaf(paint.getAlphaf() * opacity);
|
118
|
+
|
119
|
+
lPaint.setMaskFilter(
|
120
|
+
Skia.MaskFilter.MakeBlur(BlurStyle.Normal, blur, true)
|
121
|
+
);
|
122
|
+
const inner = deflate(Skia, box, spread, spread, dx, dy);
|
123
|
+
const outer = inflate(Skia, box, delta.x, delta.y);
|
124
|
+
canvas.drawDRRect(outer, inner, lPaint);
|
125
|
+
canvas.restore();
|
126
|
+
});
|
127
|
+
};
|
128
|
+
|
129
|
+
export const drawBoxShadow = (
|
130
|
+
_ctx: LocalDrawingContext,
|
131
|
+
_props: BoxShadowProps
|
132
|
+
) => {
|
133
|
+
//throw new Error("drawBoxShadow(): not implemented yet");
|
134
|
+
};
|
135
|
+
|
136
|
+
export const drawImage = (ctx: LocalDrawingContext, props: ImageProps) => {
|
137
|
+
const { image } = props;
|
138
|
+
if (image) {
|
139
|
+
const fit = props.fit ?? "contain";
|
140
|
+
const rect = processRect(ctx.Skia, props);
|
141
|
+
const { src, dst } = fitRects(
|
142
|
+
fit,
|
143
|
+
{
|
144
|
+
x: 0,
|
145
|
+
y: 0,
|
146
|
+
width: image.width(),
|
147
|
+
height: image.height(),
|
148
|
+
},
|
149
|
+
rect
|
150
|
+
);
|
151
|
+
ctx.canvas.drawImageRect(image, src, dst, ctx.paint);
|
152
|
+
}
|
153
|
+
};
|
154
|
+
|
155
|
+
export const drawPoints = (ctx: LocalDrawingContext, props: PointsProps) => {
|
156
|
+
const { points, mode } = props;
|
157
|
+
ctx.canvas.drawPoints(PointMode[enumKey(mode)], points, ctx.paint);
|
158
|
+
};
|
159
|
+
|
160
|
+
export const drawVertices = (
|
161
|
+
ctx: LocalDrawingContext,
|
162
|
+
props: VerticesProps
|
163
|
+
) => {
|
164
|
+
const { mode, textures, colors, indices, blendMode } = props;
|
165
|
+
const vertexMode = mode ? VertexMode[enumKey(mode)] : VertexMode.Triangles;
|
166
|
+
const vertices = ctx.Skia.MakeVertices(
|
167
|
+
vertexMode,
|
168
|
+
props.vertices,
|
169
|
+
textures,
|
170
|
+
colors ? colors.map((c) => ctx.Skia.Color(c)) : undefined,
|
171
|
+
indices
|
172
|
+
);
|
173
|
+
const defaultBlendMode = colors ? BlendMode.DstOver : BlendMode.SrcOver;
|
174
|
+
const blend = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;
|
175
|
+
|
176
|
+
ctx.canvas.drawVertices(vertices, blend, ctx.paint);
|
177
|
+
};
|
178
|
+
|
179
|
+
export const drawDiffRect = (
|
180
|
+
ctx: LocalDrawingContext,
|
181
|
+
props: DiffRectProps
|
182
|
+
) => {
|
183
|
+
const { outer, inner } = props;
|
184
|
+
ctx.canvas.drawDRRect(outer, inner, ctx.paint);
|
185
|
+
};
|
186
|
+
|
187
|
+
export const drawTextPath = (
|
188
|
+
ctx: LocalDrawingContext,
|
189
|
+
props: TextPathProps
|
190
|
+
) => {
|
191
|
+
const path = processPath(ctx.Skia, props.path);
|
192
|
+
const { font, initialOffset } = props;
|
193
|
+
if (font) {
|
194
|
+
let { text } = props;
|
195
|
+
const ids = font.getGlyphIDs(text);
|
196
|
+
const widths = font.getGlyphWidths(ids);
|
197
|
+
const rsx: SkRSXform[] = [];
|
198
|
+
const meas = ctx.Skia.ContourMeasureIter(path, false, 1);
|
199
|
+
let cont = meas.next();
|
200
|
+
let dist = initialOffset;
|
201
|
+
for (let i = 0; i < text.length && cont; i++) {
|
202
|
+
const width = widths[i];
|
203
|
+
dist += width / 2;
|
204
|
+
if (dist > cont.length()) {
|
205
|
+
// jump to next contour
|
206
|
+
cont = meas.next();
|
207
|
+
if (!cont) {
|
208
|
+
// We have come to the end of the path - terminate the string
|
209
|
+
// right here.
|
210
|
+
text = text.substring(0, i);
|
211
|
+
break;
|
212
|
+
}
|
213
|
+
dist = width / 2;
|
214
|
+
}
|
215
|
+
// Gives us the (x, y) coordinates as well as the cos/sin of the tangent
|
216
|
+
// line at that position.
|
217
|
+
const [p, t] = cont.getPosTan(dist);
|
218
|
+
const adjustedX = p.x - (width / 2) * t.x;
|
219
|
+
const adjustedY = p.y - (width / 2) * t.y;
|
220
|
+
rsx.push(ctx.Skia.RSXform(t.x, t.y, adjustedX, adjustedY));
|
221
|
+
dist += width / 2;
|
222
|
+
}
|
223
|
+
const derived = ctx.Skia.TextBlob.MakeFromRSXform(text, rsx, font);
|
224
|
+
ctx.canvas.drawTextBlob(derived, 0, 0, ctx.paint);
|
225
|
+
}
|
226
|
+
};
|
227
|
+
|
228
|
+
export const drawText = (ctx: LocalDrawingContext, props: TextProps) => {
|
229
|
+
const { text, x, y, font } = props;
|
230
|
+
if (font != null) {
|
231
|
+
ctx.canvas.drawText(text, x, y, ctx.paint, font);
|
232
|
+
}
|
233
|
+
};
|
234
|
+
|
235
|
+
export const drawPatch = (ctx: LocalDrawingContext, props: PatchProps) => {
|
236
|
+
const { texture, blendMode, patch } = props;
|
237
|
+
const defaultBlendMode = props.colors ? BlendMode.DstOver : BlendMode.SrcOver;
|
238
|
+
const mode = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;
|
239
|
+
// Patch requires a path with the following constraints:
|
240
|
+
// M tl
|
241
|
+
// C c1 c2 br
|
242
|
+
// C c1 c2 bl
|
243
|
+
// C c1 c2 tl (the redundant point in the last command is removed)
|
244
|
+
|
245
|
+
const points = [
|
246
|
+
patch[0].pos,
|
247
|
+
patch[0].c2,
|
248
|
+
patch[1].c1,
|
249
|
+
patch[1].pos,
|
250
|
+
patch[1].c2,
|
251
|
+
patch[2].c1,
|
252
|
+
patch[2].pos,
|
253
|
+
patch[2].c2,
|
254
|
+
patch[3].c1,
|
255
|
+
patch[3].pos,
|
256
|
+
patch[3].c2,
|
257
|
+
patch[0].c1,
|
258
|
+
];
|
259
|
+
const colors = props.colors
|
260
|
+
? props.colors.map((c) => ctx.Skia.Color(c))
|
261
|
+
: undefined;
|
262
|
+
ctx.canvas.drawPatch(points, colors, texture, mode, ctx.paint);
|
263
|
+
};
|
264
|
+
|
265
|
+
export const drawPath = (ctx: LocalDrawingContext, props: PathProps) => {
|
266
|
+
const {
|
267
|
+
start: trimStart,
|
268
|
+
end: trimEnd,
|
269
|
+
fillType,
|
270
|
+
stroke,
|
271
|
+
...pathProps
|
272
|
+
} = props;
|
273
|
+
const start = saturate(trimStart);
|
274
|
+
const end = saturate(trimEnd);
|
275
|
+
const hasStartOffset = start !== 0;
|
276
|
+
const hasEndOffset = end !== 1;
|
277
|
+
const hasStrokeOptions = stroke !== undefined;
|
278
|
+
const hasFillType = !!fillType;
|
279
|
+
const willMutatePath =
|
280
|
+
hasStartOffset || hasEndOffset || hasStrokeOptions || hasFillType;
|
281
|
+
const pristinePath = processPath(ctx.Skia, pathProps.path);
|
282
|
+
const path = willMutatePath ? pristinePath.copy() : pristinePath;
|
283
|
+
if (hasFillType) {
|
284
|
+
path.setFillType(FillType[enumKey(fillType)]);
|
285
|
+
}
|
286
|
+
if (hasStrokeOptions) {
|
287
|
+
path.stroke(stroke);
|
288
|
+
}
|
289
|
+
if (hasStartOffset || hasEndOffset) {
|
290
|
+
path.trim(start, end, false);
|
291
|
+
}
|
292
|
+
ctx.canvas.drawPath(path, ctx.paint);
|
293
|
+
};
|
294
|
+
|
295
|
+
export const drawRect = (ctx: LocalDrawingContext, props: RectProps) => {
|
296
|
+
const derived = processRect(ctx.Skia, props);
|
297
|
+
ctx.canvas.drawRect(derived, ctx.paint);
|
298
|
+
};
|
299
|
+
|
300
|
+
export const drawRRect = (
|
301
|
+
ctx: LocalDrawingContext,
|
302
|
+
props: RoundedRectProps
|
303
|
+
) => {
|
304
|
+
const derived = processRRect(ctx.Skia, props);
|
305
|
+
ctx.canvas.drawRRect(derived, ctx.paint);
|
306
|
+
};
|
307
|
+
|
308
|
+
export const drawTextBlob = (
|
309
|
+
ctx: LocalDrawingContext,
|
310
|
+
props: TextBlobProps
|
311
|
+
) => {
|
312
|
+
const { blob, x, y } = props;
|
313
|
+
ctx.canvas.drawTextBlob(blob, x, y, ctx.paint);
|
314
|
+
};
|
315
|
+
|
316
|
+
interface ProcessedGlyphs {
|
317
|
+
glyphs: number[];
|
318
|
+
positions: SkPoint[];
|
319
|
+
}
|
320
|
+
|
321
|
+
export const drawGlyphs = (ctx: LocalDrawingContext, props: GlyphsProps) => {
|
322
|
+
const derived = props.glyphs.reduce<ProcessedGlyphs>(
|
323
|
+
(acc, glyph) => {
|
324
|
+
const { id, pos } = glyph;
|
325
|
+
acc.glyphs.push(id);
|
326
|
+
acc.positions.push(pos);
|
327
|
+
return acc;
|
328
|
+
},
|
329
|
+
{ glyphs: [], positions: [] }
|
330
|
+
);
|
331
|
+
const { glyphs, positions } = derived;
|
332
|
+
const { x, y, font } = props;
|
333
|
+
if (font) {
|
334
|
+
ctx.canvas.drawGlyphs(glyphs, positions, x, y, font, ctx.paint);
|
335
|
+
}
|
336
|
+
};
|
337
|
+
|
338
|
+
export const drawImageSVG = (
|
339
|
+
ctx: LocalDrawingContext,
|
340
|
+
props: ImageSVGProps
|
341
|
+
) => {
|
342
|
+
const { canvas } = ctx;
|
343
|
+
const { svg } = props;
|
344
|
+
const { x, y, width, height } = props.rect
|
345
|
+
? props.rect
|
346
|
+
: { x: props.x, y: props.y, width: props.width, height: props.height };
|
347
|
+
if (svg === null) {
|
348
|
+
return;
|
349
|
+
}
|
350
|
+
canvas.save();
|
351
|
+
if (x && y) {
|
352
|
+
canvas.translate(x, y);
|
353
|
+
}
|
354
|
+
canvas.drawSvg(svg, width, height);
|
355
|
+
canvas.restore();
|
356
|
+
};
|
357
|
+
|
358
|
+
export const drawParagraph = (
|
359
|
+
ctx: LocalDrawingContext,
|
360
|
+
props: ParagraphProps
|
361
|
+
) => {
|
362
|
+
const { paragraph, x, y, width } = props;
|
363
|
+
if (paragraph) {
|
364
|
+
paragraph.layout(width);
|
365
|
+
paragraph.paint(ctx.canvas, x, y);
|
366
|
+
}
|
367
|
+
};
|
368
|
+
|
369
|
+
export const drawPicture = (ctx: LocalDrawingContext, props: PictureProps) => {
|
370
|
+
const { picture } = props;
|
371
|
+
ctx.canvas.drawPicture(picture);
|
372
|
+
};
|
373
|
+
|
374
|
+
export const drawAtlas = (ctx: LocalDrawingContext, props: AtlasProps) => {
|
375
|
+
const { image, sprites, transforms, colors, blendMode } = props;
|
376
|
+
const blend = blendMode ? BlendMode[enumKey(blendMode)] : undefined;
|
377
|
+
if (image) {
|
378
|
+
ctx.canvas.drawAtlas(image, sprites, transforms, ctx.paint, blend, colors);
|
379
|
+
}
|
380
|
+
};
|
381
|
+
|
382
|
+
export const drawCircle = (ctx: LocalDrawingContext, props: CircleProps) => {
|
383
|
+
const { c } = processCircle(props);
|
384
|
+
const { r } = props;
|
385
|
+
ctx.canvas.drawCircle(c.x, c.y, r, ctx.paint);
|
386
|
+
};
|
387
|
+
|
388
|
+
export const drawFill = (
|
389
|
+
ctx: LocalDrawingContext,
|
390
|
+
_props: DrawingNodeProps
|
391
|
+
) => {
|
392
|
+
ctx.canvas.drawPaint(ctx.paint);
|
393
|
+
};
|
@@ -0,0 +1,183 @@
|
|
1
|
+
"worklet";
|
2
|
+
|
3
|
+
import { enumKey, processRadius } from "../../dom/nodes";
|
4
|
+
import type {
|
5
|
+
BlendImageFilterProps,
|
6
|
+
BlurImageFilterProps,
|
7
|
+
BlurMaskFilterProps,
|
8
|
+
DeclarationContext,
|
9
|
+
DisplacementMapImageFilterProps,
|
10
|
+
DropShadowImageFilterProps,
|
11
|
+
MorphologyImageFilterProps,
|
12
|
+
OffsetImageFilterProps,
|
13
|
+
RuntimeShaderImageFilterProps,
|
14
|
+
} from "../../dom/types";
|
15
|
+
import type { SkColor, Skia, SkImageFilter } from "../../skia/types";
|
16
|
+
import {
|
17
|
+
BlendMode,
|
18
|
+
BlurStyle,
|
19
|
+
ColorChannel,
|
20
|
+
processUniforms,
|
21
|
+
TileMode,
|
22
|
+
} from "../../skia/types";
|
23
|
+
|
24
|
+
export enum MorphologyOperator {
|
25
|
+
Erode,
|
26
|
+
Dilate,
|
27
|
+
}
|
28
|
+
|
29
|
+
const Black = Float32Array.of(0, 0, 0, 1);
|
30
|
+
|
31
|
+
const MakeInnerShadow = (
|
32
|
+
Skia: Skia,
|
33
|
+
shadowOnly: boolean | undefined,
|
34
|
+
dx: number,
|
35
|
+
dy: number,
|
36
|
+
sigmaX: number,
|
37
|
+
sigmaY: number,
|
38
|
+
color: SkColor,
|
39
|
+
input: SkImageFilter | null
|
40
|
+
) => {
|
41
|
+
const sourceGraphic = Skia.ImageFilter.MakeColorFilter(
|
42
|
+
Skia.ColorFilter.MakeBlend(Black, BlendMode.Dst),
|
43
|
+
null
|
44
|
+
);
|
45
|
+
const sourceAlpha = Skia.ImageFilter.MakeColorFilter(
|
46
|
+
Skia.ColorFilter.MakeBlend(Black, BlendMode.SrcIn),
|
47
|
+
null
|
48
|
+
);
|
49
|
+
const f1 = Skia.ImageFilter.MakeColorFilter(
|
50
|
+
Skia.ColorFilter.MakeBlend(color, BlendMode.SrcOut),
|
51
|
+
null
|
52
|
+
);
|
53
|
+
const f2 = Skia.ImageFilter.MakeOffset(dx, dy, f1);
|
54
|
+
const f3 = Skia.ImageFilter.MakeBlur(sigmaX, sigmaY, TileMode.Decal, f2);
|
55
|
+
const f4 = Skia.ImageFilter.MakeBlend(BlendMode.SrcIn, sourceAlpha, f3);
|
56
|
+
if (shadowOnly) {
|
57
|
+
return f4;
|
58
|
+
}
|
59
|
+
return Skia.ImageFilter.MakeCompose(
|
60
|
+
input,
|
61
|
+
Skia.ImageFilter.MakeBlend(BlendMode.SrcOver, sourceGraphic, f4)
|
62
|
+
);
|
63
|
+
};
|
64
|
+
|
65
|
+
const input = (ctx: DeclarationContext) => {
|
66
|
+
return ctx.imageFilters.pop() ?? null;
|
67
|
+
};
|
68
|
+
|
69
|
+
export const makeOffsetImageFilter = (
|
70
|
+
ctx: DeclarationContext,
|
71
|
+
props: OffsetImageFilterProps
|
72
|
+
) => {
|
73
|
+
const { x, y } = props;
|
74
|
+
return ctx.Skia.ImageFilter.MakeOffset(x, y, null);
|
75
|
+
};
|
76
|
+
|
77
|
+
export const declareDisplacementMapImageFilter = (
|
78
|
+
ctx: DeclarationContext,
|
79
|
+
props: DisplacementMapImageFilterProps
|
80
|
+
) => {
|
81
|
+
const { channelX, channelY, scale } = props;
|
82
|
+
const shader = ctx.shaders.pop();
|
83
|
+
if (!shader) {
|
84
|
+
throw new Error("DisplacementMap expects a shader as child");
|
85
|
+
}
|
86
|
+
const map = ctx.Skia.ImageFilter.MakeShader(shader, null);
|
87
|
+
const imgf = ctx.Skia.ImageFilter.MakeDisplacementMap(
|
88
|
+
ColorChannel[enumKey(channelX)],
|
89
|
+
ColorChannel[enumKey(channelY)],
|
90
|
+
scale,
|
91
|
+
map,
|
92
|
+
input(ctx)
|
93
|
+
);
|
94
|
+
ctx.imageFilters.push(imgf);
|
95
|
+
};
|
96
|
+
|
97
|
+
export const makeBlurImageFilter = (
|
98
|
+
ctx: DeclarationContext,
|
99
|
+
props: BlurImageFilterProps
|
100
|
+
) => {
|
101
|
+
const { mode, blur } = props;
|
102
|
+
const sigma = processRadius(ctx.Skia, blur);
|
103
|
+
const imgf = ctx.Skia.ImageFilter.MakeBlur(
|
104
|
+
sigma.x,
|
105
|
+
sigma.y,
|
106
|
+
TileMode[enumKey(mode)],
|
107
|
+
input(ctx)
|
108
|
+
);
|
109
|
+
return imgf;
|
110
|
+
};
|
111
|
+
|
112
|
+
export const makeDropShadowImageFilter = (
|
113
|
+
ctx: DeclarationContext,
|
114
|
+
props: DropShadowImageFilterProps
|
115
|
+
) => {
|
116
|
+
const { dx, dy, blur, shadowOnly, color: cl, inner } = props;
|
117
|
+
const color = ctx.Skia.Color(cl);
|
118
|
+
let factory;
|
119
|
+
if (inner) {
|
120
|
+
factory = MakeInnerShadow.bind(null, ctx.Skia, shadowOnly);
|
121
|
+
} else {
|
122
|
+
factory = shadowOnly
|
123
|
+
? ctx.Skia.ImageFilter.MakeDropShadowOnly.bind(ctx.Skia.ImageFilter)
|
124
|
+
: ctx.Skia.ImageFilter.MakeDropShadow.bind(ctx.Skia.ImageFilter);
|
125
|
+
}
|
126
|
+
const imgf = factory(dx, dy, blur, blur, color, input(ctx));
|
127
|
+
return imgf;
|
128
|
+
};
|
129
|
+
|
130
|
+
export const makeMorphologyImageFilter = (
|
131
|
+
ctx: DeclarationContext,
|
132
|
+
props: MorphologyImageFilterProps
|
133
|
+
) => {
|
134
|
+
const { operator } = props;
|
135
|
+
const r = processRadius(ctx.Skia, props.radius);
|
136
|
+
let imgf;
|
137
|
+
if (MorphologyOperator[enumKey(operator)] === MorphologyOperator.Erode) {
|
138
|
+
imgf = ctx.Skia.ImageFilter.MakeErode(r.x, r.y, input(ctx));
|
139
|
+
} else {
|
140
|
+
imgf = ctx.Skia.ImageFilter.MakeDilate(r.x, r.y, input(ctx));
|
141
|
+
}
|
142
|
+
return imgf;
|
143
|
+
};
|
144
|
+
|
145
|
+
export const makeRuntimeShaderImageFilter = (
|
146
|
+
ctx: DeclarationContext,
|
147
|
+
props: RuntimeShaderImageFilterProps
|
148
|
+
) => {
|
149
|
+
const { source, uniforms } = props;
|
150
|
+
const rtb = ctx.Skia.RuntimeShaderBuilder(source);
|
151
|
+
if (uniforms) {
|
152
|
+
processUniforms(source, uniforms, rtb);
|
153
|
+
}
|
154
|
+
const imgf = ctx.Skia.ImageFilter.MakeRuntimeShader(rtb, null, input(ctx));
|
155
|
+
return imgf;
|
156
|
+
};
|
157
|
+
|
158
|
+
export const declareBlendImageFilter = (
|
159
|
+
ctx: DeclarationContext,
|
160
|
+
props: BlendImageFilterProps
|
161
|
+
) => {
|
162
|
+
const { mode } = props;
|
163
|
+
const a = ctx.imageFilters.pop();
|
164
|
+
const b = ctx.imageFilters.pop();
|
165
|
+
if (!a || !b) {
|
166
|
+
throw new Error("BlendImageFilter requires two image filters");
|
167
|
+
}
|
168
|
+
const imgf = ctx.Skia.ImageFilter.MakeBlend(mode, a, b);
|
169
|
+
ctx.imageFilters.push(imgf);
|
170
|
+
};
|
171
|
+
|
172
|
+
export const declareBlurMaskFilter = (
|
173
|
+
ctx: DeclarationContext,
|
174
|
+
props: BlurMaskFilterProps
|
175
|
+
) => {
|
176
|
+
const { blur, style, respectCTM } = props;
|
177
|
+
const mf = ctx.Skia.MaskFilter.MakeBlur(
|
178
|
+
BlurStyle[enumKey(style)],
|
179
|
+
blur,
|
180
|
+
respectCTM
|
181
|
+
);
|
182
|
+
ctx.maskFilters.push(mf);
|
183
|
+
};
|
@@ -0,0 +1,75 @@
|
|
1
|
+
"worklet";
|
2
|
+
|
3
|
+
import { enumKey } from "../../dom/nodes";
|
4
|
+
import type { DeclarationContext, PaintProps } from "../../dom/types";
|
5
|
+
import { BlendMode, PaintStyle, StrokeCap, StrokeJoin } from "../../skia/types";
|
6
|
+
|
7
|
+
export const declarePaint = (ctx: DeclarationContext, props: PaintProps) => {
|
8
|
+
const {
|
9
|
+
color,
|
10
|
+
strokeWidth,
|
11
|
+
blendMode,
|
12
|
+
style,
|
13
|
+
strokeJoin,
|
14
|
+
strokeCap,
|
15
|
+
strokeMiter,
|
16
|
+
opacity,
|
17
|
+
antiAlias,
|
18
|
+
dither,
|
19
|
+
} = props;
|
20
|
+
const paint = ctx.Skia.Paint();
|
21
|
+
if (color !== undefined) {
|
22
|
+
paint.setColor(ctx.Skia.Color(color));
|
23
|
+
}
|
24
|
+
if (strokeWidth !== undefined) {
|
25
|
+
paint.setStrokeWidth(strokeWidth);
|
26
|
+
}
|
27
|
+
if (blendMode !== undefined) {
|
28
|
+
paint.setBlendMode(BlendMode[enumKey(blendMode)]);
|
29
|
+
}
|
30
|
+
if (style !== undefined) {
|
31
|
+
paint.setStyle(PaintStyle[enumKey(style)]);
|
32
|
+
}
|
33
|
+
if (strokeJoin !== undefined) {
|
34
|
+
paint.setStrokeJoin(StrokeJoin[enumKey(strokeJoin)]);
|
35
|
+
}
|
36
|
+
if (strokeCap !== undefined) {
|
37
|
+
paint.setStrokeCap(StrokeCap[enumKey(strokeCap)]);
|
38
|
+
}
|
39
|
+
if (strokeMiter !== undefined) {
|
40
|
+
paint.setStrokeMiter(strokeMiter);
|
41
|
+
}
|
42
|
+
if (opacity !== undefined) {
|
43
|
+
paint.setAlphaf(opacity);
|
44
|
+
}
|
45
|
+
if (antiAlias !== undefined) {
|
46
|
+
paint.setAntiAlias(antiAlias);
|
47
|
+
}
|
48
|
+
if (dither !== undefined) {
|
49
|
+
paint.setDither(dither);
|
50
|
+
}
|
51
|
+
//ctx.save();
|
52
|
+
|
53
|
+
const colorFilter = ctx.colorFilters.popAllAsOne();
|
54
|
+
const imageFilter = ctx.imageFilters.popAllAsOne();
|
55
|
+
const shader = ctx.shaders.pop();
|
56
|
+
const maskFilter = ctx.maskFilters.pop();
|
57
|
+
const pathEffect = ctx.pathEffects.popAllAsOne();
|
58
|
+
//ctx.restore();
|
59
|
+
if (imageFilter) {
|
60
|
+
paint.setImageFilter(imageFilter);
|
61
|
+
}
|
62
|
+
if (shader) {
|
63
|
+
paint.setShader(shader);
|
64
|
+
}
|
65
|
+
if (pathEffect) {
|
66
|
+
paint.setPathEffect(pathEffect);
|
67
|
+
}
|
68
|
+
if (colorFilter) {
|
69
|
+
paint.setColorFilter(colorFilter);
|
70
|
+
}
|
71
|
+
if (maskFilter) {
|
72
|
+
paint.setMaskFilter(maskFilter);
|
73
|
+
}
|
74
|
+
ctx.paints.push(paint);
|
75
|
+
};
|