@shopify/react-native-skia 2.0.6 → 2.1.0
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 +20 -1
- package/cpp/api/JsiSkApi.h +3 -0
- package/cpp/api/JsiSkImageFilterFactory.h +478 -39
- package/cpp/api/JsiSkPath.h +2 -1
- package/cpp/api/JsiSkPathFactory.h +1 -1
- package/cpp/api/JsiSkSkottie.h +590 -0
- package/cpp/api/JsiSkottieFactory.h +65 -0
- package/cpp/api/recorder/Command.h +1 -0
- package/cpp/api/recorder/Convertor.h +16 -0
- package/cpp/api/recorder/Drawings.h +23 -0
- package/cpp/api/recorder/JsiRecorder.h +6 -0
- package/cpp/api/recorder/RNRecorder.h +9 -0
- package/cpp/api/third_party/SkottieUtils.cpp +333 -0
- package/cpp/api/third_party/SkottieUtils.h +172 -0
- package/cpp/skia/modules/jsonreader/SkJSONReader.cpp +980 -0
- package/cpp/skia/modules/jsonreader/SkJSONReader.h +389 -0
- package/cpp/skia/modules/skottie/include/ExternalLayer.h +56 -0
- package/cpp/skia/modules/skottie/include/Skottie.h +313 -0
- package/cpp/skia/modules/skottie/include/SkottieProperty.h +190 -0
- package/cpp/skia/modules/skottie/include/SlotManager.h +113 -0
- package/cpp/skia/modules/skottie/include/TextShaper.h +200 -0
- package/cpp/skia/modules/skottie/src/SkottieValue.h +56 -0
- package/cpp/skia/modules/skottie/src/animator/Animator.h +89 -0
- package/cpp/skia/modules/skottie/src/text/Font.h +82 -0
- package/cpp/skia/modules/skottie/src/text/TextAdapter.h +155 -0
- package/cpp/skia/modules/skottie/src/text/TextAnimator.h +121 -0
- package/cpp/skia/modules/skottie/src/text/TextValue.h +28 -0
- package/cpp/skia/modules/sksg/include/SkSGClipEffect.h +61 -0
- package/cpp/skia/modules/sksg/include/SkSGColorFilter.h +135 -0
- package/cpp/skia/modules/sksg/include/SkSGDraw.h +57 -0
- package/cpp/skia/modules/sksg/include/SkSGEffectNode.h +50 -0
- package/cpp/skia/modules/sksg/include/SkSGGeometryEffect.h +181 -0
- package/cpp/skia/modules/sksg/include/SkSGGeometryNode.h +54 -0
- package/cpp/skia/modules/sksg/include/SkSGGradient.h +108 -0
- package/cpp/skia/modules/sksg/include/SkSGGroup.h +65 -0
- package/cpp/skia/modules/sksg/include/SkSGImage.h +59 -0
- package/cpp/skia/modules/sksg/include/SkSGInvalidationController.h +46 -0
- package/cpp/skia/modules/sksg/include/SkSGMaskEffect.h +65 -0
- package/cpp/skia/modules/sksg/include/SkSGMerge.h +74 -0
- package/cpp/skia/modules/sksg/include/SkSGNode.h +128 -0
- package/cpp/skia/modules/sksg/include/SkSGOpacityEffect.h +54 -0
- package/cpp/skia/modules/sksg/include/SkSGPaint.h +112 -0
- package/cpp/skia/modules/sksg/include/SkSGPath.h +68 -0
- package/cpp/skia/modules/sksg/include/SkSGPlane.h +47 -0
- package/cpp/skia/modules/sksg/include/SkSGRect.h +122 -0
- package/cpp/skia/modules/sksg/include/SkSGRenderEffect.h +283 -0
- package/cpp/skia/modules/sksg/include/SkSGRenderNode.h +157 -0
- package/cpp/skia/modules/sksg/include/SkSGScene.h +47 -0
- package/cpp/skia/modules/sksg/include/SkSGText.h +82 -0
- package/cpp/skia/modules/sksg/include/SkSGTransform.h +127 -0
- package/cpp/skia/src/base/SkArenaAlloc.h +371 -0
- package/lib/commonjs/dom/nodes/datatypes/Gradient.d.ts +15 -15
- package/lib/commonjs/dom/types/Drawings.d.ts +5 -1
- package/lib/commonjs/dom/types/Drawings.js.map +1 -1
- package/lib/commonjs/dom/types/NodeType.d.ts +2 -1
- package/lib/commonjs/dom/types/NodeType.js +2 -0
- package/lib/commonjs/dom/types/NodeType.js.map +1 -1
- package/lib/commonjs/renderer/__tests__/e2e/AdvancedImageFilters.spec.d.ts +1 -0
- package/lib/commonjs/renderer/__tests__/e2e/Camera.spec.d.ts +21 -0
- package/lib/commonjs/renderer/__tests__/e2e/LightingImageFilters.spec.d.ts +1 -0
- package/lib/commonjs/renderer/__tests__/e2e/Skottie.spec.d.ts +1 -0
- package/lib/commonjs/renderer/__tests__/setup.d.ts +5 -0
- package/lib/commonjs/renderer/components/Skottie.d.ts +4 -0
- package/lib/commonjs/renderer/components/Skottie.js +13 -0
- package/lib/commonjs/renderer/components/Skottie.js.map +1 -0
- package/lib/commonjs/renderer/components/index.d.ts +1 -0
- package/lib/commonjs/renderer/components/index.js +11 -0
- package/lib/commonjs/renderer/components/index.js.map +1 -1
- package/lib/commonjs/skia/types/ImageFilter/ImageFilterFactory.d.ts +252 -15
- package/lib/commonjs/skia/types/ImageFilter/ImageFilterFactory.js.map +1 -1
- package/lib/commonjs/skia/types/Matrix4.d.ts +11 -2
- package/lib/commonjs/skia/types/Matrix4.js +42 -1
- package/lib/commonjs/skia/types/Matrix4.js.map +1 -1
- package/lib/commonjs/skia/types/Recorder.d.ts +2 -1
- package/lib/commonjs/skia/types/Recorder.js.map +1 -1
- package/lib/commonjs/skia/types/Skia.d.ts +2 -0
- package/lib/commonjs/skia/types/Skia.js.map +1 -1
- package/lib/commonjs/skia/types/Skottie.d.ts +223 -0
- package/lib/commonjs/skia/types/Skottie.js +73 -0
- package/lib/commonjs/skia/types/Skottie.js.map +1 -0
- package/lib/commonjs/skia/types/index.d.ts +1 -0
- package/lib/commonjs/skia/types/index.js +11 -0
- package/lib/commonjs/skia/types/index.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkImageFilterFactory.d.ts +29 -12
- package/lib/commonjs/skia/web/JsiSkImageFilterFactory.js +88 -19
- package/lib/commonjs/skia/web/JsiSkImageFilterFactory.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkia.js +2 -0
- package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkottieAnimation.d.ts +59 -0
- package/lib/commonjs/skia/web/JsiSkottieAnimation.js +243 -0
- package/lib/commonjs/skia/web/JsiSkottieAnimation.js.map +1 -0
- package/lib/commonjs/skia/web/JsiSkottieFactory.d.ts +9 -0
- package/lib/commonjs/skia/web/JsiSkottieFactory.js +26 -0
- package/lib/commonjs/skia/web/JsiSkottieFactory.js.map +1 -0
- package/lib/commonjs/sksg/Elements.d.ts +2 -1
- package/lib/commonjs/sksg/Elements.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/Core.d.ts +4 -2
- package/lib/commonjs/sksg/Recorder/Core.js +1 -0
- package/lib/commonjs/sksg/Recorder/Core.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/Player.js +2 -0
- package/lib/commonjs/sksg/Recorder/Player.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +2 -1
- package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js +4 -0
- package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/Recorder.d.ts +2 -1
- package/lib/commonjs/sksg/Recorder/Recorder.js +6 -0
- package/lib/commonjs/sksg/Recorder/Recorder.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/Visitor.js +3 -0
- package/lib/commonjs/sksg/Recorder/Visitor.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/commands/Drawing.d.ts +2 -2
- package/lib/commonjs/sksg/Recorder/commands/Drawing.js +11 -4
- package/lib/commonjs/sksg/Recorder/commands/Drawing.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js +1 -1
- package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Gradient.d.ts +15 -15
- package/lib/module/dom/types/Drawings.d.ts +5 -1
- package/lib/module/dom/types/Drawings.js.map +1 -1
- package/lib/module/dom/types/NodeType.d.ts +2 -1
- package/lib/module/dom/types/NodeType.js +2 -0
- package/lib/module/dom/types/NodeType.js.map +1 -1
- package/lib/module/renderer/__tests__/e2e/AdvancedImageFilters.spec.d.ts +1 -0
- package/lib/module/renderer/__tests__/e2e/Camera.spec.d.ts +21 -0
- package/lib/module/renderer/__tests__/e2e/LightingImageFilters.spec.d.ts +1 -0
- package/lib/module/renderer/__tests__/e2e/Skottie.spec.d.ts +1 -0
- package/lib/module/renderer/__tests__/setup.d.ts +5 -0
- package/lib/module/renderer/components/Skottie.d.ts +4 -0
- package/lib/module/renderer/components/Skottie.js +5 -0
- package/lib/module/renderer/components/Skottie.js.map +1 -0
- package/lib/module/renderer/components/index.d.ts +1 -0
- package/lib/module/renderer/components/index.js +1 -0
- package/lib/module/renderer/components/index.js.map +1 -1
- package/lib/module/skia/types/ImageFilter/ImageFilterFactory.d.ts +252 -15
- package/lib/module/skia/types/ImageFilter/ImageFilterFactory.js.map +1 -1
- package/lib/module/skia/types/Matrix4.d.ts +11 -2
- package/lib/module/skia/types/Matrix4.js +40 -0
- package/lib/module/skia/types/Matrix4.js.map +1 -1
- package/lib/module/skia/types/Recorder.d.ts +2 -1
- package/lib/module/skia/types/Recorder.js.map +1 -1
- package/lib/module/skia/types/Skia.d.ts +2 -0
- package/lib/module/skia/types/Skia.js.map +1 -1
- package/lib/module/skia/types/Skottie.d.ts +223 -0
- package/lib/module/skia/types/Skottie.js +74 -0
- package/lib/module/skia/types/Skottie.js.map +1 -0
- package/lib/module/skia/types/index.d.ts +1 -0
- package/lib/module/skia/types/index.js +1 -0
- package/lib/module/skia/types/index.js.map +1 -1
- package/lib/module/skia/web/JsiSkImageFilterFactory.d.ts +29 -12
- package/lib/module/skia/web/JsiSkImageFilterFactory.js +88 -19
- package/lib/module/skia/web/JsiSkImageFilterFactory.js.map +1 -1
- package/lib/module/skia/web/JsiSkia.js +2 -0
- package/lib/module/skia/web/JsiSkia.js.map +1 -1
- package/lib/module/skia/web/JsiSkottieAnimation.d.ts +59 -0
- package/lib/module/skia/web/JsiSkottieAnimation.js +236 -0
- package/lib/module/skia/web/JsiSkottieAnimation.js.map +1 -0
- package/lib/module/skia/web/JsiSkottieFactory.d.ts +9 -0
- package/lib/module/skia/web/JsiSkottieFactory.js +19 -0
- package/lib/module/skia/web/JsiSkottieFactory.js.map +1 -0
- package/lib/module/sksg/Elements.d.ts +2 -1
- package/lib/module/sksg/Elements.js.map +1 -1
- package/lib/module/sksg/Recorder/Core.d.ts +4 -2
- package/lib/module/sksg/Recorder/Core.js +1 -0
- package/lib/module/sksg/Recorder/Core.js.map +1 -1
- package/lib/module/sksg/Recorder/Player.js +3 -1
- package/lib/module/sksg/Recorder/Player.js.map +1 -1
- package/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +2 -1
- package/lib/module/sksg/Recorder/ReanimatedRecorder.js +4 -0
- package/lib/module/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
- package/lib/module/sksg/Recorder/Recorder.d.ts +2 -1
- package/lib/module/sksg/Recorder/Recorder.js +6 -0
- package/lib/module/sksg/Recorder/Recorder.js.map +1 -1
- package/lib/module/sksg/Recorder/Visitor.js +3 -0
- package/lib/module/sksg/Recorder/Visitor.js.map +1 -1
- package/lib/module/sksg/Recorder/commands/Drawing.d.ts +2 -2
- package/lib/module/sksg/Recorder/commands/Drawing.js +9 -2
- package/lib/module/sksg/Recorder/commands/Drawing.js.map +1 -1
- package/lib/module/sksg/Recorder/commands/ImageFilters.js +1 -1
- package/lib/module/sksg/Recorder/commands/ImageFilters.js.map +1 -1
- package/lib/typescript/lib/commonjs/renderer/components/Skottie.d.ts +2 -0
- package/lib/typescript/lib/commonjs/skia/types/Matrix4.d.ts +1 -0
- package/lib/typescript/lib/commonjs/skia/types/Skottie.d.ts +6 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFilterFactory.d.ts +22 -5
- package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +2 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkottieAnimation.d.ts +48 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkottieFactory.d.ts +6 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/Recorder.d.ts +1 -0
- package/lib/typescript/lib/commonjs/sksg/Recorder/commands/Drawing.d.ts +1 -1
- package/lib/typescript/lib/module/mock/index.d.ts +7 -0
- package/lib/typescript/lib/module/renderer/components/Skottie.d.ts +2 -0
- package/lib/typescript/lib/module/renderer/components/index.d.ts +1 -0
- package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/Matrix4.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/Skottie.d.ts +5 -0
- package/lib/typescript/lib/module/skia/types/index.d.ts +1 -0
- package/lib/typescript/lib/module/skia/web/JsiSkImageFilterFactory.d.ts +22 -5
- package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +2 -0
- package/lib/typescript/lib/module/skia/web/JsiSkottieAnimation.d.ts +47 -0
- package/lib/typescript/lib/module/skia/web/JsiSkottieFactory.d.ts +5 -0
- package/lib/typescript/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/Recorder/Recorder.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/Recorder/commands/Drawing.d.ts +1 -1
- package/lib/typescript/src/dom/nodes/datatypes/Gradient.d.ts +15 -15
- package/lib/typescript/src/dom/types/Drawings.d.ts +5 -1
- package/lib/typescript/src/dom/types/NodeType.d.ts +2 -1
- package/lib/typescript/src/renderer/__tests__/e2e/AdvancedImageFilters.spec.d.ts +1 -0
- package/lib/typescript/src/renderer/__tests__/e2e/Camera.spec.d.ts +21 -0
- package/lib/typescript/src/renderer/__tests__/e2e/LightingImageFilters.spec.d.ts +1 -0
- package/lib/typescript/src/renderer/__tests__/e2e/Skottie.spec.d.ts +1 -0
- package/lib/typescript/src/renderer/__tests__/setup.d.ts +5 -0
- package/lib/typescript/src/renderer/components/Skottie.d.ts +4 -0
- package/lib/typescript/src/renderer/components/index.d.ts +1 -0
- package/lib/typescript/src/skia/types/ImageFilter/ImageFilterFactory.d.ts +252 -15
- package/lib/typescript/src/skia/types/Matrix4.d.ts +11 -2
- package/lib/typescript/src/skia/types/Recorder.d.ts +2 -1
- package/lib/typescript/src/skia/types/Skia.d.ts +2 -0
- package/lib/typescript/src/skia/types/Skottie.d.ts +223 -0
- package/lib/typescript/src/skia/types/index.d.ts +1 -0
- package/lib/typescript/src/skia/web/JsiSkImageFilterFactory.d.ts +29 -12
- package/lib/typescript/src/skia/web/JsiSkottieAnimation.d.ts +59 -0
- package/lib/typescript/src/skia/web/JsiSkottieFactory.d.ts +9 -0
- package/lib/typescript/src/sksg/Elements.d.ts +2 -1
- package/lib/typescript/src/sksg/Recorder/Core.d.ts +4 -2
- package/lib/typescript/src/sksg/Recorder/ReanimatedRecorder.d.ts +2 -1
- package/lib/typescript/src/sksg/Recorder/Recorder.d.ts +2 -1
- package/lib/typescript/src/sksg/Recorder/commands/Drawing.d.ts +2 -2
- package/libs/android/arm64-v8a/libjsonreader.a +0 -0
- package/libs/android/armeabi-v7a/libjsonreader.a +0 -0
- package/libs/android/x86/libjsonreader.a +0 -0
- package/libs/android/x86_64/libjsonreader.a +0 -0
- package/libs/apple/libpathops.xcframework/Info.plist +9 -9
- package/libs/apple/libskia.xcframework/Info.plist +14 -14
- package/libs/apple/libskottie.xcframework/Info.plist +13 -13
- package/libs/apple/libskparagraph.xcframework/Info.plist +15 -15
- package/libs/apple/libsksg.xcframework/Info.plist +13 -13
- package/libs/apple/libskshaper.xcframework/Info.plist +15 -15
- package/libs/apple/libskunicode_core.xcframework/Info.plist +9 -9
- package/libs/apple/libskunicode_libgrapheme.xcframework/Info.plist +13 -13
- package/libs/apple/libsvg.xcframework/Info.plist +15 -15
- package/package.json +1 -1
- package/react-native-skia.podspec +4 -2
- package/src/__tests__/snapshots/matrix4/camera-corner.png +0 -0
- package/src/__tests__/snapshots/matrix4/camera-offset.png +0 -0
- package/src/__tests__/snapshots/matrix4/camera-top-left-center.png +0 -0
- package/src/__tests__/snapshots/matrix4/camera-zoom-out.png +0 -0
- package/src/__tests__/snapshots/matrix4/full-rect.png +0 -0
- package/src/__tests__/snapshots/matrix4/rect.png +0 -0
- package/src/__tests__/snapshots/matrix4/scaled-rect.png +0 -0
- package/src/__tests__/snapshots/matrix4/test-perspective.png +0 -0
- package/src/__tests__/snapshots/matrix4/test-perspective2.png +0 -0
- package/src/dom/types/Drawings.ts +6 -0
- package/src/dom/types/NodeType.ts +2 -0
- package/src/renderer/__tests__/e2e/AdvancedImageFilters.spec.tsx +492 -0
- package/src/renderer/__tests__/e2e/Camera.spec.tsx +475 -0
- package/src/renderer/__tests__/e2e/LightingImageFilters.spec.tsx +1478 -0
- package/src/renderer/__tests__/e2e/Skottie.spec.tsx +440 -0
- package/src/renderer/__tests__/e2e/setup/skottie/basic_slots.json +1118 -0
- package/src/renderer/__tests__/e2e/setup/skottie/color-props.json +1 -0
- package/src/renderer/__tests__/e2e/setup/skottie/confetti.json +5899 -0
- package/src/renderer/__tests__/e2e/setup/skottie/drinks.json +43857 -0
- package/src/renderer/__tests__/e2e/setup/skottie/fingerprint.json +1 -0
- package/src/renderer/__tests__/e2e/setup/skottie/lego_loader.json +29540 -0
- package/src/renderer/__tests__/e2e/setup/skottie/new-drop.json +1 -0
- package/src/renderer/__tests__/e2e/setup/skottie/onboarding.json +1 -0
- package/src/renderer/__tests__/e2e/setup/skottie/text-layer.json +1 -0
- package/src/renderer/__tests__/setup.tsx +23 -0
- package/src/renderer/components/Skottie.tsx +8 -0
- package/src/renderer/components/index.ts +1 -0
- package/src/skia/__tests__/assets/Avenir-Heavy.ttf +0 -0
- package/src/skia/types/ImageFilter/ImageFilterFactory.ts +391 -21
- package/src/skia/types/Matrix4.ts +108 -2
- package/src/skia/types/Recorder.ts +2 -0
- package/src/skia/types/Skia.ts +2 -0
- package/src/skia/types/Skottie.ts +266 -0
- package/src/skia/types/index.ts +1 -0
- package/src/skia/web/JsiSkImageFilterFactory.ts +266 -31
- package/src/skia/web/JsiSkia.ts +2 -0
- package/src/skia/web/JsiSkottieAnimation.ts +259 -0
- package/src/skia/web/JsiSkottieFactory.ts +25 -0
- package/src/sksg/Elements.tsx +2 -0
- package/src/sksg/Recorder/Core.ts +3 -0
- package/src/sksg/Recorder/Player.ts +3 -0
- package/src/sksg/Recorder/ReanimatedRecorder.ts +6 -0
- package/src/sksg/Recorder/Recorder.ts +5 -0
- package/src/sksg/Recorder/Visitor.ts +3 -0
- package/src/sksg/Recorder/commands/Drawing.ts +7 -3
- package/src/sksg/Recorder/commands/ImageFilters.ts +1 -1
- package/cpp/skia/include/pathops/SkPathOps.h +0 -17
@@ -899,6 +899,29 @@ public:
|
|
899
899
|
}
|
900
900
|
};
|
901
901
|
|
902
|
+
struct SkottieCmdProps {
|
903
|
+
sk_sp<skottie::Animation> animation;
|
904
|
+
float frame;
|
905
|
+
};
|
906
|
+
|
907
|
+
class SkottieCmd : public Command {
|
908
|
+
private:
|
909
|
+
SkottieCmdProps props;
|
910
|
+
|
911
|
+
public:
|
912
|
+
SkottieCmd(jsi::Runtime &runtime, const jsi::Object &object,
|
913
|
+
Variables &variables)
|
914
|
+
: Command(CommandType::DrawSkottie) {
|
915
|
+
convertProperty(runtime, object, "animation", props.animation, variables);
|
916
|
+
convertProperty(runtime, object, "frame", props.frame, variables);
|
917
|
+
}
|
918
|
+
|
919
|
+
void draw(DrawingCtx *ctx) {
|
920
|
+
props.animation->seekFrame(props.frame);
|
921
|
+
props.animation->render(ctx->canvas);
|
922
|
+
}
|
923
|
+
};
|
924
|
+
|
902
925
|
struct AtlasCmdProps {
|
903
926
|
sk_sp<SkImage> image;
|
904
927
|
std::vector<SkRect> sprites;
|
@@ -262,6 +262,11 @@ public:
|
|
262
262
|
return jsi::Value::undefined();
|
263
263
|
}
|
264
264
|
|
265
|
+
JSI_HOST_FUNCTION(drawSkottie) {
|
266
|
+
getObject()->drawSkottie(runtime, arguments[0].asObject(runtime));
|
267
|
+
return jsi::Value::undefined();
|
268
|
+
}
|
269
|
+
|
265
270
|
EXPORT_JSI_API_TYPENAME(JsiRecorder, Recorder)
|
266
271
|
|
267
272
|
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiRecorder, saveGroup),
|
@@ -303,6 +308,7 @@ public:
|
|
303
308
|
JSI_EXPORT_FUNC(JsiRecorder, drawImageSVG),
|
304
309
|
JSI_EXPORT_FUNC(JsiRecorder, drawParagraph),
|
305
310
|
JSI_EXPORT_FUNC(JsiRecorder, drawAtlas),
|
311
|
+
JSI_EXPORT_FUNC(JsiRecorder, drawSkottie),
|
306
312
|
JSI_EXPORT_FUNC(JsiRecorder, play),
|
307
313
|
JSI_EXPORT_FUNC(JsiRecorder, applyUpdates))
|
308
314
|
|
@@ -269,6 +269,10 @@ public:
|
|
269
269
|
commands.push_back(std::make_unique<AtlasCmd>(runtime, props, variables));
|
270
270
|
}
|
271
271
|
|
272
|
+
void drawSkottie(jsi::Runtime &runtime, const jsi::Object &props) {
|
273
|
+
commands.push_back(std::make_unique<SkottieCmd>(runtime, props, variables));
|
274
|
+
}
|
275
|
+
|
272
276
|
void materializePaint() {
|
273
277
|
commands.push_back(
|
274
278
|
std::make_unique<Command>(CommandType::MaterializePaint));
|
@@ -616,6 +620,11 @@ public:
|
|
616
620
|
atlasCmd->draw(ctx);
|
617
621
|
break;
|
618
622
|
}
|
623
|
+
case CommandType::DrawSkottie: {
|
624
|
+
auto *skottieCmd = static_cast<SkottieCmd *>(cmd.get());
|
625
|
+
skottieCmd->draw(ctx);
|
626
|
+
break;
|
627
|
+
}
|
619
628
|
}
|
620
629
|
|
621
630
|
ctx->restorePaint();
|
@@ -0,0 +1,333 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2018 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
|
+
#include "third_party/SkottieUtils.h"
|
9
|
+
|
10
|
+
#include "include/core/SkData.h"
|
11
|
+
#include "include/core/SkRect.h"
|
12
|
+
#include "include/core/SkSize.h"
|
13
|
+
#include "include/private/base/SkAssert.h"
|
14
|
+
#include "modules/skottie/include/Skottie.h"
|
15
|
+
#include "modules/skresources/include/SkResources.h"
|
16
|
+
|
17
|
+
#include <cstring>
|
18
|
+
#include <utility>
|
19
|
+
|
20
|
+
class SkCanvas;
|
21
|
+
|
22
|
+
namespace RNSkia {
|
23
|
+
|
24
|
+
class CustomPropertyManager::PropertyInterceptor final
|
25
|
+
: public skottie::PropertyObserver {
|
26
|
+
public:
|
27
|
+
explicit PropertyInterceptor(CustomPropertyManager *mgr) : fMgr(mgr) {}
|
28
|
+
|
29
|
+
void
|
30
|
+
onColorProperty(const char node_name[],
|
31
|
+
const LazyHandle<skottie::ColorPropertyHandle> &c) override {
|
32
|
+
const auto key = fMgr->acceptKey(node_name, ".Color");
|
33
|
+
if (!key.empty()) {
|
34
|
+
fMgr->fColorMap[key].push_back(c());
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
void onOpacityProperty(
|
39
|
+
const char node_name[],
|
40
|
+
const LazyHandle<skottie::OpacityPropertyHandle> &o) override {
|
41
|
+
const auto key = fMgr->acceptKey(node_name, ".Opacity");
|
42
|
+
if (!key.empty()) {
|
43
|
+
fMgr->fOpacityMap[key].push_back(o());
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
void onTransformProperty(
|
48
|
+
const char node_name[],
|
49
|
+
const LazyHandle<skottie::TransformPropertyHandle> &t) override {
|
50
|
+
const auto key = fMgr->acceptKey(node_name, ".Transform");
|
51
|
+
if (!key.empty()) {
|
52
|
+
fMgr->fTransformMap[key].push_back(t());
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
void
|
57
|
+
onTextProperty(const char node_name[],
|
58
|
+
const LazyHandle<skottie::TextPropertyHandle> &t) override {
|
59
|
+
const auto key = fMgr->acceptKey(node_name, ".Text");
|
60
|
+
if (!key.empty()) {
|
61
|
+
fMgr->fTextMap[key].push_back(t());
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
void onEnterNode(const char node_name[],
|
66
|
+
PropertyObserver::NodeType node_type) override {
|
67
|
+
if (node_name == nullptr) {
|
68
|
+
return;
|
69
|
+
}
|
70
|
+
fMgr->fCurrentNode = fMgr->fCurrentNode.empty()
|
71
|
+
? node_name
|
72
|
+
: fMgr->fCurrentNode + "." + node_name;
|
73
|
+
}
|
74
|
+
|
75
|
+
void onLeavingNode(const char node_name[],
|
76
|
+
PropertyObserver::NodeType node_type) override {
|
77
|
+
if (node_name == nullptr) {
|
78
|
+
return;
|
79
|
+
}
|
80
|
+
auto length = strlen(node_name);
|
81
|
+
fMgr->fCurrentNode =
|
82
|
+
fMgr->fCurrentNode.length() > length
|
83
|
+
? fMgr->fCurrentNode.substr(0, fMgr->fCurrentNode.length() -
|
84
|
+
strlen(node_name) - 1)
|
85
|
+
: "";
|
86
|
+
}
|
87
|
+
|
88
|
+
private:
|
89
|
+
CustomPropertyManager *fMgr;
|
90
|
+
};
|
91
|
+
|
92
|
+
class CustomPropertyManager::MarkerInterceptor final
|
93
|
+
: public skottie::MarkerObserver {
|
94
|
+
public:
|
95
|
+
explicit MarkerInterceptor(CustomPropertyManager *mgr) : fMgr(mgr) {}
|
96
|
+
|
97
|
+
void onMarker(const char name[], float t0, float t1) override {
|
98
|
+
// collect all markers
|
99
|
+
fMgr->fMarkers.push_back({std::string(name), t0, t1});
|
100
|
+
}
|
101
|
+
|
102
|
+
private:
|
103
|
+
CustomPropertyManager *fMgr;
|
104
|
+
};
|
105
|
+
|
106
|
+
CustomPropertyManager::CustomPropertyManager(Mode mode, const char *prefix)
|
107
|
+
: fMode(mode), fPrefix(prefix ? prefix : "$"),
|
108
|
+
fPropertyInterceptor(sk_make_sp<PropertyInterceptor>(this)),
|
109
|
+
fMarkerInterceptor(sk_make_sp<MarkerInterceptor>(this)) {
|
110
|
+
// there is a bug in the ref counting here
|
111
|
+
fPropertyInterceptor->ref();
|
112
|
+
fMarkerInterceptor->ref();
|
113
|
+
}
|
114
|
+
|
115
|
+
CustomPropertyManager::~CustomPropertyManager() {
|
116
|
+
// there is a bug in the ref counting here
|
117
|
+
// ref count 0 but the raw pointer still exists
|
118
|
+
auto rawptr1 = fPropertyInterceptor.get();
|
119
|
+
fPropertyInterceptor = nullptr;
|
120
|
+
delete rawptr1;
|
121
|
+
|
122
|
+
auto rawptr2 = fMarkerInterceptor.get();
|
123
|
+
fMarkerInterceptor = nullptr;
|
124
|
+
delete rawptr2;
|
125
|
+
}
|
126
|
+
|
127
|
+
std::string CustomPropertyManager::acceptKey(const char *name,
|
128
|
+
const char *suffix) const {
|
129
|
+
if (!SkStrStartsWith(name, fPrefix.c_str())) {
|
130
|
+
return std::string();
|
131
|
+
}
|
132
|
+
|
133
|
+
return fMode == Mode::kCollapseProperties ? std::string(name)
|
134
|
+
: fCurrentNode + suffix;
|
135
|
+
}
|
136
|
+
|
137
|
+
sk_sp<skottie::PropertyObserver>
|
138
|
+
CustomPropertyManager::getPropertyObserver() const {
|
139
|
+
return fPropertyInterceptor;
|
140
|
+
}
|
141
|
+
|
142
|
+
sk_sp<skottie::MarkerObserver>
|
143
|
+
CustomPropertyManager::getMarkerObserver() const {
|
144
|
+
return fMarkerInterceptor;
|
145
|
+
}
|
146
|
+
|
147
|
+
template <typename T>
|
148
|
+
std::vector<CustomPropertyManager::PropKey>
|
149
|
+
CustomPropertyManager::getProps(const PropMap<T> &container) const {
|
150
|
+
std::vector<PropKey> props;
|
151
|
+
|
152
|
+
for (const auto &prop_list : container) {
|
153
|
+
SkASSERT(!prop_list.second.empty());
|
154
|
+
props.push_back(prop_list.first);
|
155
|
+
}
|
156
|
+
|
157
|
+
return props;
|
158
|
+
}
|
159
|
+
|
160
|
+
template <typename V, typename T>
|
161
|
+
V CustomPropertyManager::get(const PropKey &key,
|
162
|
+
const PropMap<T> &container) const {
|
163
|
+
auto prop_group = container.find(key);
|
164
|
+
|
165
|
+
return prop_group == container.end() ? V()
|
166
|
+
: prop_group->second.front()->get();
|
167
|
+
}
|
168
|
+
|
169
|
+
template <typename T>
|
170
|
+
std::unique_ptr<T>
|
171
|
+
CustomPropertyManager::getHandle(const PropKey &key, size_t index,
|
172
|
+
const PropMap<T> &container) const {
|
173
|
+
auto prop_group = container.find(key);
|
174
|
+
|
175
|
+
if (prop_group == container.end() || index >= prop_group->second.size()) {
|
176
|
+
return nullptr;
|
177
|
+
}
|
178
|
+
|
179
|
+
return std::make_unique<T>(*prop_group->second[index]);
|
180
|
+
}
|
181
|
+
|
182
|
+
template <typename V, typename T>
|
183
|
+
bool CustomPropertyManager::set(const PropKey &key, const V &val,
|
184
|
+
const PropMap<T> &container) {
|
185
|
+
auto prop_group = container.find(key);
|
186
|
+
|
187
|
+
if (prop_group == container.end()) {
|
188
|
+
return false;
|
189
|
+
}
|
190
|
+
|
191
|
+
for (auto &handle : prop_group->second) {
|
192
|
+
handle->set(val);
|
193
|
+
}
|
194
|
+
|
195
|
+
return true;
|
196
|
+
}
|
197
|
+
|
198
|
+
std::vector<CustomPropertyManager::PropKey>
|
199
|
+
CustomPropertyManager::getColorProps() const {
|
200
|
+
return this->getProps(fColorMap);
|
201
|
+
}
|
202
|
+
|
203
|
+
skottie::ColorPropertyValue
|
204
|
+
CustomPropertyManager::getColor(const PropKey &key) const {
|
205
|
+
return this->get<skottie::ColorPropertyValue>(key, fColorMap);
|
206
|
+
}
|
207
|
+
|
208
|
+
std::unique_ptr<skottie::ColorPropertyHandle>
|
209
|
+
CustomPropertyManager::getColorHandle(const PropKey &key, size_t index) const {
|
210
|
+
return this->getHandle(key, index, fColorMap);
|
211
|
+
}
|
212
|
+
|
213
|
+
bool CustomPropertyManager::setColor(const PropKey &key,
|
214
|
+
const skottie::ColorPropertyValue &c) {
|
215
|
+
return this->set(key, c, fColorMap);
|
216
|
+
}
|
217
|
+
|
218
|
+
std::vector<CustomPropertyManager::PropKey>
|
219
|
+
CustomPropertyManager::getOpacityProps() const {
|
220
|
+
return this->getProps(fOpacityMap);
|
221
|
+
}
|
222
|
+
|
223
|
+
skottie::OpacityPropertyValue
|
224
|
+
CustomPropertyManager::getOpacity(const PropKey &key) const {
|
225
|
+
return this->get<skottie::OpacityPropertyValue>(key, fOpacityMap);
|
226
|
+
}
|
227
|
+
|
228
|
+
std::unique_ptr<skottie::OpacityPropertyHandle>
|
229
|
+
CustomPropertyManager::getOpacityHandle(const PropKey &key,
|
230
|
+
size_t index) const {
|
231
|
+
return this->getHandle(key, index, fOpacityMap);
|
232
|
+
}
|
233
|
+
|
234
|
+
bool CustomPropertyManager::setOpacity(const PropKey &key,
|
235
|
+
const skottie::OpacityPropertyValue &o) {
|
236
|
+
return this->set(key, o, fOpacityMap);
|
237
|
+
}
|
238
|
+
|
239
|
+
std::vector<CustomPropertyManager::PropKey>
|
240
|
+
CustomPropertyManager::getTransformProps() const {
|
241
|
+
return this->getProps(fTransformMap);
|
242
|
+
}
|
243
|
+
|
244
|
+
skottie::TransformPropertyValue
|
245
|
+
CustomPropertyManager::getTransform(const PropKey &key) const {
|
246
|
+
return this->get<skottie::TransformPropertyValue>(key, fTransformMap);
|
247
|
+
}
|
248
|
+
|
249
|
+
std::unique_ptr<skottie::TransformPropertyHandle>
|
250
|
+
CustomPropertyManager::getTransformHandle(const PropKey &key,
|
251
|
+
size_t index) const {
|
252
|
+
return this->getHandle(key, index, fTransformMap);
|
253
|
+
}
|
254
|
+
|
255
|
+
bool CustomPropertyManager::setTransform(
|
256
|
+
const PropKey &key, const skottie::TransformPropertyValue &t) {
|
257
|
+
return this->set(key, t, fTransformMap);
|
258
|
+
}
|
259
|
+
|
260
|
+
std::vector<CustomPropertyManager::PropKey>
|
261
|
+
CustomPropertyManager::getTextProps() const {
|
262
|
+
return this->getProps(fTextMap);
|
263
|
+
}
|
264
|
+
|
265
|
+
skottie::TextPropertyValue
|
266
|
+
CustomPropertyManager::getText(const PropKey &key) const {
|
267
|
+
return this->get<skottie::TextPropertyValue>(key, fTextMap);
|
268
|
+
}
|
269
|
+
|
270
|
+
std::unique_ptr<skottie::TextPropertyHandle>
|
271
|
+
CustomPropertyManager::getTextHandle(const PropKey &key, size_t index) const {
|
272
|
+
return this->getHandle(key, index, fTextMap);
|
273
|
+
}
|
274
|
+
|
275
|
+
bool CustomPropertyManager::setText(const PropKey &key,
|
276
|
+
const skottie::TextPropertyValue &o) {
|
277
|
+
return this->set(key, o, fTextMap);
|
278
|
+
}
|
279
|
+
|
280
|
+
namespace {
|
281
|
+
|
282
|
+
class ExternalAnimationLayer final : public skottie::ExternalLayer {
|
283
|
+
public:
|
284
|
+
ExternalAnimationLayer(sk_sp<skottie::Animation> anim, const SkSize &size)
|
285
|
+
: fAnimation(std::move(anim)), fSize(size) {}
|
286
|
+
|
287
|
+
private:
|
288
|
+
void render(SkCanvas *canvas, double t) override {
|
289
|
+
fAnimation->seekFrameTime(t);
|
290
|
+
|
291
|
+
// The main animation will layer-isolate if needed - we don't want the
|
292
|
+
// nested animation to override that decision.
|
293
|
+
const auto flags = skottie::Animation::RenderFlag::kSkipTopLevelIsolation;
|
294
|
+
const auto dst_rect = SkRect::MakeSize(fSize);
|
295
|
+
fAnimation->render(canvas, &dst_rect, flags);
|
296
|
+
}
|
297
|
+
|
298
|
+
const sk_sp<skottie::Animation> fAnimation;
|
299
|
+
const SkSize fSize;
|
300
|
+
};
|
301
|
+
|
302
|
+
} // namespace
|
303
|
+
|
304
|
+
ExternalAnimationPrecompInterceptor::ExternalAnimationPrecompInterceptor(
|
305
|
+
sk_sp<skresources::ResourceProvider> rprovider, const char prefixp[])
|
306
|
+
: fResourceProvider(std::move(rprovider)), fPrefix(prefixp) {}
|
307
|
+
|
308
|
+
ExternalAnimationPrecompInterceptor::~ExternalAnimationPrecompInterceptor() =
|
309
|
+
default;
|
310
|
+
|
311
|
+
sk_sp<skottie::ExternalLayer>
|
312
|
+
ExternalAnimationPrecompInterceptor::onLoadPrecomp(const char[],
|
313
|
+
const char name[],
|
314
|
+
const SkSize &size) {
|
315
|
+
if (0 != strncmp(name, fPrefix.c_str(), fPrefix.size())) {
|
316
|
+
return nullptr;
|
317
|
+
}
|
318
|
+
|
319
|
+
auto data = fResourceProvider->load("", name + fPrefix.size());
|
320
|
+
if (!data) {
|
321
|
+
return nullptr;
|
322
|
+
}
|
323
|
+
|
324
|
+
auto anim = skottie::Animation::Builder()
|
325
|
+
.setPrecompInterceptor(sk_ref_sp(this))
|
326
|
+
.setResourceProvider(fResourceProvider)
|
327
|
+
.make(static_cast<const char *>(data->data()), data->size());
|
328
|
+
|
329
|
+
return anim ? sk_make_sp<ExternalAnimationLayer>(std::move(anim), size)
|
330
|
+
: nullptr;
|
331
|
+
}
|
332
|
+
|
333
|
+
} // namespace RNSkia
|
@@ -0,0 +1,172 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2018 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
|
+
#pragma once
|
9
|
+
|
10
|
+
#include "include/core/SkRefCnt.h"
|
11
|
+
#include "include/core/SkString.h"
|
12
|
+
#include "modules/skottie/include/ExternalLayer.h"
|
13
|
+
#include "modules/skottie/include/SkottieProperty.h"
|
14
|
+
|
15
|
+
#include <cstddef>
|
16
|
+
#include <memory>
|
17
|
+
#include <string>
|
18
|
+
#include <unordered_map>
|
19
|
+
#include <vector>
|
20
|
+
|
21
|
+
struct SkSize;
|
22
|
+
|
23
|
+
namespace skottie {
|
24
|
+
class MarkerObserver;
|
25
|
+
|
26
|
+
inline void PropertyObserver::onColorProperty(
|
27
|
+
const char node_name[], const LazyHandle<ColorPropertyHandle> &) {}
|
28
|
+
|
29
|
+
inline void PropertyObserver::onOpacityProperty(
|
30
|
+
const char node_name[], const LazyHandle<OpacityPropertyHandle> &) {}
|
31
|
+
inline void PropertyObserver::onTextProperty(const char node_name[],
|
32
|
+
const LazyHandle<TextPropertyHandle> &) {}
|
33
|
+
inline void PropertyObserver::onTransformProperty(
|
34
|
+
const char node_name[], const LazyHandle<TransformPropertyHandle> &) {}
|
35
|
+
inline void PropertyObserver::onEnterNode(const char node_name[], NodeType node_type) {
|
36
|
+
}
|
37
|
+
inline void PropertyObserver::onLeavingNode(const char node_name[],
|
38
|
+
NodeType node_type) {}
|
39
|
+
|
40
|
+
} // namespace skottie
|
41
|
+
|
42
|
+
namespace skresources {
|
43
|
+
class ResourceProvider;
|
44
|
+
}
|
45
|
+
|
46
|
+
namespace RNSkia {
|
47
|
+
|
48
|
+
/**
|
49
|
+
* CustomPropertyManager implements a property management scheme where
|
50
|
+
* color/opacity/transform attributes are grouped and manipulated by name
|
51
|
+
* (one-to-many mapping).
|
52
|
+
*
|
53
|
+
* - setters apply the value to all properties in a named group
|
54
|
+
*
|
55
|
+
* - getters return all the managed property groups, and the first value
|
56
|
+
* within each of them (unchecked assumption: all properties within the same
|
57
|
+
* group have the same value)
|
58
|
+
*
|
59
|
+
* Attach to an Animation::Builder using the utility methods below to intercept
|
60
|
+
* properties and markers at build time.
|
61
|
+
*/
|
62
|
+
class CustomPropertyManager final {
|
63
|
+
public:
|
64
|
+
enum class Mode {
|
65
|
+
kCollapseProperties, // keys ignore the ancestor chain and are
|
66
|
+
// grouped based on the local node name
|
67
|
+
kNamespacedProperties, // keys include the ancestor node names (no grouping)
|
68
|
+
};
|
69
|
+
|
70
|
+
explicit CustomPropertyManager(Mode = Mode::kNamespacedProperties,
|
71
|
+
const char *prefix = nullptr);
|
72
|
+
~CustomPropertyManager();
|
73
|
+
|
74
|
+
using PropKey = std::string;
|
75
|
+
|
76
|
+
std::vector<PropKey> getColorProps() const;
|
77
|
+
skottie::ColorPropertyValue getColor(const PropKey &) const;
|
78
|
+
std::unique_ptr<skottie::ColorPropertyHandle> getColorHandle(const PropKey &,
|
79
|
+
size_t) const;
|
80
|
+
bool setColor(const PropKey &, const skottie::ColorPropertyValue &);
|
81
|
+
|
82
|
+
std::vector<PropKey> getOpacityProps() const;
|
83
|
+
skottie::OpacityPropertyValue getOpacity(const PropKey &) const;
|
84
|
+
std::unique_ptr<skottie::OpacityPropertyHandle>
|
85
|
+
getOpacityHandle(const PropKey &, size_t) const;
|
86
|
+
bool setOpacity(const PropKey &, const skottie::OpacityPropertyValue &);
|
87
|
+
|
88
|
+
std::vector<PropKey> getTransformProps() const;
|
89
|
+
skottie::TransformPropertyValue getTransform(const PropKey &) const;
|
90
|
+
std::unique_ptr<skottie::TransformPropertyHandle>
|
91
|
+
getTransformHandle(const PropKey &, size_t) const;
|
92
|
+
bool setTransform(const PropKey &, const skottie::TransformPropertyValue &);
|
93
|
+
|
94
|
+
std::vector<PropKey> getTextProps() const;
|
95
|
+
skottie::TextPropertyValue getText(const PropKey &) const;
|
96
|
+
std::unique_ptr<skottie::TextPropertyHandle>
|
97
|
+
getTextHandle(const PropKey &, size_t index) const;
|
98
|
+
bool setText(const PropKey &, const skottie::TextPropertyValue &);
|
99
|
+
|
100
|
+
struct MarkerInfo {
|
101
|
+
std::string name;
|
102
|
+
float t0, t1;
|
103
|
+
};
|
104
|
+
const std::vector<MarkerInfo> &markers() const { return fMarkers; }
|
105
|
+
|
106
|
+
// Returns a property observer to be attached to an animation builder.
|
107
|
+
sk_sp<skottie::PropertyObserver> getPropertyObserver() const;
|
108
|
+
|
109
|
+
// Returns a marker observer to be attached to an animation builder.
|
110
|
+
sk_sp<skottie::MarkerObserver> getMarkerObserver() const;
|
111
|
+
|
112
|
+
private:
|
113
|
+
class PropertyInterceptor;
|
114
|
+
class MarkerInterceptor;
|
115
|
+
|
116
|
+
std::string acceptKey(const char *, const char *) const;
|
117
|
+
|
118
|
+
template <typename T> using PropGroup = std::vector<std::unique_ptr<T>>;
|
119
|
+
|
120
|
+
template <typename T>
|
121
|
+
using PropMap = std::unordered_map<PropKey, PropGroup<T>>;
|
122
|
+
|
123
|
+
template <typename T>
|
124
|
+
std::vector<PropKey> getProps(const PropMap<T> &container) const;
|
125
|
+
|
126
|
+
template <typename V, typename T>
|
127
|
+
V get(const PropKey &, const PropMap<T> &container) const;
|
128
|
+
|
129
|
+
template <typename T>
|
130
|
+
std::unique_ptr<T> getHandle(const PropKey &, size_t,
|
131
|
+
const PropMap<T> &container) const;
|
132
|
+
|
133
|
+
template <typename V, typename T>
|
134
|
+
bool set(const PropKey &, const V &, const PropMap<T> &container);
|
135
|
+
|
136
|
+
const Mode fMode;
|
137
|
+
const SkString fPrefix;
|
138
|
+
|
139
|
+
sk_sp<PropertyInterceptor> fPropertyInterceptor;
|
140
|
+
sk_sp<MarkerInterceptor> fMarkerInterceptor;
|
141
|
+
|
142
|
+
PropMap<skottie::ColorPropertyHandle> fColorMap;
|
143
|
+
PropMap<skottie::OpacityPropertyHandle> fOpacityMap;
|
144
|
+
PropMap<skottie::TransformPropertyHandle> fTransformMap;
|
145
|
+
PropMap<skottie::TextPropertyHandle> fTextMap;
|
146
|
+
std::vector<MarkerInfo> fMarkers;
|
147
|
+
std::string fCurrentNode;
|
148
|
+
};
|
149
|
+
|
150
|
+
/**
|
151
|
+
* A sample PrecompInterceptor implementation.
|
152
|
+
*
|
153
|
+
* Attempts to substitute all precomp layers matching the given pattern (name
|
154
|
+
* prefix) with external Lottie animations.
|
155
|
+
*/
|
156
|
+
class ExternalAnimationPrecompInterceptor final
|
157
|
+
: public skottie::PrecompInterceptor {
|
158
|
+
public:
|
159
|
+
ExternalAnimationPrecompInterceptor(sk_sp<skresources::ResourceProvider>,
|
160
|
+
const char prefix[]);
|
161
|
+
~ExternalAnimationPrecompInterceptor() override;
|
162
|
+
|
163
|
+
private:
|
164
|
+
sk_sp<skottie::ExternalLayer> onLoadPrecomp(const char[], const char[],
|
165
|
+
const SkSize &) override;
|
166
|
+
|
167
|
+
const sk_sp<skresources::ResourceProvider> fResourceProvider;
|
168
|
+
const SkString fPrefix;
|
169
|
+
};
|
170
|
+
|
171
|
+
} // namespace RNSkia
|
172
|
+
|