react-native-reanimated 2.3.3 → 2.5.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/Common/cpp/AnimatedSensor/AnimatedSensorModule.cpp +72 -0
- package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +30 -1
- package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +64 -39
- package/Common/cpp/Tools/RuntimeDecorator.cpp +2 -0
- package/Common/cpp/headers/AnimatedSensor/AnimatedSensorModule.h +41 -0
- package/Common/cpp/headers/NativeModules/NativeReanimatedModule.h +14 -0
- package/Common/cpp/headers/NativeModules/NativeReanimatedModuleSpec.h +14 -0
- package/Common/cpp/headers/SharedItems/MutableValue.h +4 -1
- package/Common/cpp/headers/SharedItems/ShareableValue.h +3 -0
- package/Common/cpp/headers/SharedItems/ValueWrapper.h +3 -0
- package/Common/cpp/headers/Tools/PlatformDepMethodsHolder.h +11 -0
- package/Common/cpp/headers/Tools/RuntimeDecorator.h +2 -0
- package/LICENSE +1 -1
- package/README.md +2 -2
- package/android/.gradle/7.2/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.2/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.2/executionHistory/executionHistory.bin +0 -0
- package/android/.gradle/7.2/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.2/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.2/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/7.2/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.2/fileHashes/resourceHashesCache.bin +0 -0
- package/android/.gradle/7.2/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/CMakeLists.txt +198 -0
- package/android/README.md +15 -0
- package/android/build.gradle +686 -73
- package/android/empty.cpp +1 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradle.properties +25 -0
- package/android/gradlew +234 -0
- package/android/gradlew.bat +89 -0
- package/android/react-native-reanimated-64-hermes.aar +0 -0
- package/android/react-native-reanimated-64-jsc.aar +0 -0
- package/android/react-native-reanimated-65-hermes.aar +0 -0
- package/android/react-native-reanimated-65-jsc.aar +0 -0
- package/android/react-native-reanimated-66-hermes.aar +0 -0
- package/android/react-native-reanimated-66-jsc.aar +0 -0
- package/android/react-native-reanimated-67-hermes.aar +0 -0
- package/android/react-native-reanimated-67-jsc.aar +0 -0
- package/android/react-native-reanimated-68-hermes.aar +0 -0
- package/android/react-native-reanimated-68-jsc.aar +0 -0
- package/android/rnVersionPatch/62/layoutReanimation/ReanimatedNativeHierarchyManager.java +412 -0
- package/android/rnVersionPatch/62/layoutReanimation/ReanimatedUIImplementation.java +68 -0
- package/android/rnVersionPatch/63/layoutReanimation/ReanimatedUIImplementation.java +68 -0
- package/android/rnVersionPatch/64/layoutReanimation/ReanimatedUIImplementation.java +68 -0
- package/android/rnVersionPatch/65/.gitkeep +0 -0
- package/android/rnVersionPatch/66/.gitkeep +0 -0
- package/android/rnVersionPatch/67/.gitkeep +0 -0
- package/android/rnVersionPatch/68/.gitkeep +0 -0
- package/android/rnVersionPatch/backup/.gitkeep +0 -0
- package/android/settings.gradle +1 -0
- package/android/spotless.gradle +9 -0
- package/android/src/{AndroidManifest.xml → main/AndroidManifest.xml} +0 -0
- package/android/src/main/cpp/AndroidErrorHandler.cpp +42 -0
- package/android/src/main/cpp/AndroidLogger.cpp +27 -0
- package/android/src/main/cpp/AndroidScheduler.cpp +59 -0
- package/android/src/main/cpp/JNIHelper.cpp +59 -0
- package/android/src/main/cpp/LayoutAnimations.cpp +103 -0
- package/android/src/main/cpp/NativeProxy.cpp +327 -0
- package/android/src/main/cpp/OnLoad.cpp +17 -0
- package/android/src/main/cpp/TurboModule.cpp +44 -0
- package/android/src/main/cpp/headers/AndroidErrorHandler.h +30 -0
- package/android/src/main/cpp/headers/AndroidLogger.h +16 -0
- package/android/src/main/cpp/headers/AndroidScheduler.h +41 -0
- package/android/src/main/cpp/headers/JNIHelper.h +30 -0
- package/android/src/main/cpp/headers/LayoutAnimations.h +42 -0
- package/android/src/main/cpp/headers/NativeProxy.h +170 -0
- package/android/src/main/cpp/headers/TurboModule.h +70 -0
- package/android/src/main/java/com/facebook/react/uimanager/UIManagerReanimatedHelper.java +15 -0
- package/android/src/main/java/com/swmansion/common/GestureHandlerStateManager.java +5 -0
- package/android/src/main/java/com/swmansion/reanimated/AndroidErrorHandler.java +8 -0
- package/android/src/main/java/com/swmansion/reanimated/CopiedEvent.java +43 -0
- package/android/src/main/java/com/swmansion/reanimated/MapUtils.java +26 -0
- package/android/src/main/java/com/swmansion/reanimated/NativeMethodsHelper.java +117 -0
- package/android/src/main/java/com/swmansion/reanimated/NativeProxy.java +285 -0
- package/android/src/main/java/com/swmansion/reanimated/NodesManager.java +682 -0
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedJSIModulePackage.java +29 -0
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedModule.java +251 -0
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedPackage.java +96 -0
- package/android/src/main/java/com/swmansion/reanimated/Scheduler.java +51 -0
- package/android/src/main/java/com/swmansion/reanimated/UpdateContext.java +11 -0
- package/android/src/main/java/com/swmansion/reanimated/Utils.java +32 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +517 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/LayoutAnimations.java +56 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/NativeMethodsHolder.java +11 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +410 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIImplementation.java +68 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ReanimatedUIManager.java +292 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/Snapshot.java +121 -0
- package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ViewHierarchyObserver.java +12 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/AlwaysNode.java +29 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/BezierNode.java +87 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/BlockNode.java +24 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/CallFuncNode.java +49 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ClockNode.java +38 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ClockOpNode.java +73 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ConcatNode.java +36 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/CondNode.java +41 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/DebugNode.java +33 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/EventNode.java +83 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/FinalNode.java +5 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/FunctionNode.java +20 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/JSCallNode.java +41 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/Node.java +139 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/NoopNode.java +37 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/OperatorNode.java +377 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ParamNode.java +71 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/PropsNode.java +153 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/SetNode.java +32 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/StyleNode.java +40 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/TransformNode.java +84 -0
- package/android/src/main/java/com/swmansion/reanimated/nodes/ValueNode.java +40 -0
- package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensor.java +41 -0
- package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorContainer.java +40 -0
- package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorListener.java +31 -0
- package/android/src/main/java/com/swmansion/reanimated/sensor/ReanimatedSensorType.java +35 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/ChangeTransition.java +84 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/SaneSidePropagation.java +25 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/Scale.java +86 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionModule.java +41 -0
- package/android/src/main/java/com/swmansion/reanimated/transitions/TransitionUtils.java +161 -0
- package/ios/LayoutReanimation/REAAnimationsManager.h +1 -1
- package/ios/LayoutReanimation/REAAnimationsManager.m +18 -4
- package/ios/REAModule.m +8 -9
- package/ios/REANodesManager.h +4 -1
- package/ios/REANodesManager.m +75 -3
- package/ios/native/NativeMethods.h +1 -1
- package/ios/native/NativeProxy.mm +85 -5
- package/ios/sensor/ReanimatedSensor.h +21 -0
- package/ios/sensor/ReanimatedSensor.m +169 -0
- package/ios/sensor/ReanimatedSensorContainer.h +13 -0
- package/ios/sensor/ReanimatedSensorContainer.m +41 -0
- package/ios/sensor/ReanimatedSensorType.h +7 -0
- package/lib/ConfigHelper.js +2 -2
- package/lib/createAnimatedComponent.js +3 -4
- package/lib/reanimated1/core/AnimatedFunction.js +1 -1
- package/lib/reanimated1/derived/interpolate.js +2 -4
- package/lib/reanimated2/Colors.js +3 -98
- package/lib/reanimated2/Easing.js +5 -0
- package/lib/reanimated2/NativeMethods.js +15 -5
- package/lib/reanimated2/NativeReanimated/NativeReanimated.js +25 -12
- package/lib/reanimated2/NativeReanimated/index.js +2 -6
- package/lib/reanimated2/ViewDescriptorsSet.js +2 -2
- package/lib/reanimated2/animation/styleAnimation.js +2 -1
- package/lib/reanimated2/core.js +30 -24
- package/lib/reanimated2/globals.d.ts +6 -0
- package/lib/reanimated2/hook/index.js +1 -0
- package/lib/reanimated2/hook/useAnimatedGestureHandler.js +1 -2
- package/lib/reanimated2/hook/useAnimatedSensor.js +66 -0
- package/lib/reanimated2/hook/useAnimatedStyle.js +31 -14
- package/lib/reanimated2/hook/utils.js +14 -11
- package/lib/reanimated2/index.js +2 -0
- package/lib/reanimated2/interpolateColor.js +98 -0
- package/lib/reanimated2/interpolation.js +1 -1
- package/lib/reanimated2/jestUtils.js +9 -4
- package/lib/reanimated2/js-reanimated/JSReanimated.js +24 -3
- package/lib/reanimated2/js-reanimated/commonTypes.js +1 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.js +8 -0
- package/lib/reanimated2/layoutReanimation/animationBuilder/Keyframe.js +2 -1
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Bounce.js +32 -42
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Fade.js +20 -38
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +32 -44
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.js +8 -16
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.js +6 -10
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Roll.js +8 -12
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +20 -36
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +16 -20
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Stretch.js +8 -12
- package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +32 -48
- package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +22 -18
- package/lib/reanimated2/mock.js +3 -2
- package/mock.js +6 -4
- package/package.json +44 -36
- package/plugin.js +3 -0
- package/react-native-reanimated.d.ts +102 -15
- package/src/ConfigHelper.ts +4 -4
- package/src/createAnimatedComponent.tsx +3 -3
- package/src/reanimated1/core/AnimatedFunction.js +1 -1
- package/src/reanimated1/derived/interpolate.js +2 -4
- package/src/reanimated2/Colors.ts +8 -151
- package/src/reanimated2/Easing.ts +11 -0
- package/src/reanimated2/NativeMethods.ts +19 -6
- package/src/reanimated2/NativeReanimated/NativeReanimated.ts +42 -14
- package/src/reanimated2/NativeReanimated/index.ts +2 -8
- package/src/reanimated2/ViewDescriptorsSet.ts +2 -3
- package/src/reanimated2/animation/commonTypes.ts +44 -40
- package/src/reanimated2/animation/decay.ts +1 -1
- package/src/reanimated2/animation/delay.ts +2 -16
- package/src/reanimated2/animation/index.ts +8 -8
- package/src/reanimated2/animation/repeat.ts +2 -12
- package/src/reanimated2/animation/sequence.ts +3 -10
- package/src/reanimated2/animation/spring.ts +1 -1
- package/src/reanimated2/animation/styleAnimation.ts +11 -25
- package/src/reanimated2/animation/timing.ts +4 -2
- package/src/reanimated2/animation/util.ts +22 -20
- package/src/reanimated2/commonTypes.ts +68 -1
- package/src/reanimated2/component/FlatList.tsx +2 -1
- package/src/reanimated2/core.ts +35 -29
- package/src/reanimated2/globals.d.ts +6 -0
- package/src/reanimated2/hook/commonTypes.ts +5 -0
- package/src/reanimated2/hook/index.ts +1 -0
- package/src/reanimated2/hook/useAnimatedGestureHandler.ts +1 -2
- package/src/reanimated2/hook/useAnimatedRef.ts +1 -5
- package/src/reanimated2/hook/useAnimatedSensor.ts +91 -0
- package/src/reanimated2/hook/useAnimatedStyle.ts +35 -16
- package/src/reanimated2/hook/utils.ts +20 -18
- package/src/reanimated2/index.ts +2 -0
- package/src/reanimated2/interpolateColor.ts +178 -0
- package/src/reanimated2/interpolation.ts +2 -6
- package/src/reanimated2/jestUtils.ts +9 -4
- package/src/reanimated2/js-reanimated/JSReanimated.ts +28 -6
- package/src/reanimated2/js-reanimated/Mapper.ts +1 -1
- package/src/reanimated2/js-reanimated/MapperRegistry.ts +1 -1
- package/src/reanimated2/js-reanimated/commonTypes.ts +51 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/ComplexAnimationBuilder.ts +13 -0
- package/src/reanimated2/layoutReanimation/animationBuilder/Keyframe.ts +2 -3
- package/src/reanimated2/layoutReanimation/defaultAnimations/Bounce.ts +51 -21
- package/src/reanimated2/layoutReanimation/defaultAnimations/Fade.ts +40 -10
- package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +48 -12
- package/src/reanimated2/layoutReanimation/defaultAnimations/Lightspeed.ts +16 -4
- package/src/reanimated2/layoutReanimation/defaultAnimations/Pinwheel.ts +8 -2
- package/src/reanimated2/layoutReanimation/defaultAnimations/Roll.ts +16 -4
- package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +32 -8
- package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +32 -10
- package/src/reanimated2/layoutReanimation/defaultAnimations/Stretch.ts +16 -4
- package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +64 -16
- package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +2 -1
- package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +32 -21
- package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +2 -1
- package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +2 -1
- package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +2 -1
- package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +2 -1
- package/src/reanimated2/mock.ts +3 -2
- package/src/reanimated2/utils.ts +1 -1
- package/android/react-native-reanimated-63-hermes.aar +0 -0
- package/android/react-native-reanimated-63-jsc.aar +0 -0
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedProxyPackage.java +0 -15
- package/libSo/fbjni/jni/arm64-v8a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/armeabi-v7a/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86/libfbjni.so +0 -0
- package/libSo/fbjni/jni/x86_64/libfbjni.so +0 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
package com.swmansion.reanimated.nodes;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
|
|
4
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
5
|
+
import com.swmansion.reanimated.NodesManager;
|
|
6
|
+
import com.swmansion.reanimated.Utils;
|
|
7
|
+
|
|
8
|
+
public class OperatorNode extends Node {
|
|
9
|
+
|
|
10
|
+
private static boolean truthy(Object value) {
|
|
11
|
+
return value != null && !value.equals(0.);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
private interface Operator {
|
|
15
|
+
double evaluate(Node[] input);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
private abstract static class ReduceOperator implements Operator {
|
|
19
|
+
@Override
|
|
20
|
+
public double evaluate(Node[] input) {
|
|
21
|
+
double acc = input[0].doubleValue();
|
|
22
|
+
for (int i = 1; i < input.length; i++) {
|
|
23
|
+
acc = reduce(acc, input[i].doubleValue());
|
|
24
|
+
}
|
|
25
|
+
return acc;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public abstract double reduce(Double x, Double y);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private abstract static class SingleOperator implements Operator {
|
|
32
|
+
@Override
|
|
33
|
+
public double evaluate(Node[] input) {
|
|
34
|
+
return eval((Double) input[0].value());
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public abstract double eval(Double x);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private abstract static class CompOperator implements Operator {
|
|
41
|
+
@Override
|
|
42
|
+
public double evaluate(Node[] input) {
|
|
43
|
+
return eval((Double) input[0].value(), (Double) input[1].value()) ? 1. : 0.;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public abstract boolean eval(Double x, Double y);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// arithmetic
|
|
50
|
+
private static final Operator ADD =
|
|
51
|
+
new ReduceOperator() {
|
|
52
|
+
@Override
|
|
53
|
+
public double reduce(Double x, Double y) {
|
|
54
|
+
return x + y;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
private static final Operator SUB =
|
|
58
|
+
new ReduceOperator() {
|
|
59
|
+
@Override
|
|
60
|
+
public double reduce(Double x, Double y) {
|
|
61
|
+
return x - y;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
private static final Operator MULTIPLY =
|
|
65
|
+
new ReduceOperator() {
|
|
66
|
+
@Override
|
|
67
|
+
public double reduce(Double x, Double y) {
|
|
68
|
+
return x * y;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
private static final Operator DIVIDE =
|
|
72
|
+
new ReduceOperator() {
|
|
73
|
+
@Override
|
|
74
|
+
public double reduce(Double x, Double y) {
|
|
75
|
+
return x / y;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
private static final Operator POW =
|
|
79
|
+
new ReduceOperator() {
|
|
80
|
+
@Override
|
|
81
|
+
public double reduce(Double x, Double y) {
|
|
82
|
+
return Math.pow(x, y);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
private static final Operator MODULO =
|
|
86
|
+
new ReduceOperator() {
|
|
87
|
+
@Override
|
|
88
|
+
public double reduce(Double x, Double y) {
|
|
89
|
+
return ((x % y) + y) % y;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
private static final Operator SQRT =
|
|
93
|
+
new SingleOperator() {
|
|
94
|
+
@Override
|
|
95
|
+
public double eval(Double x) {
|
|
96
|
+
return Math.sqrt(x);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
private static final Operator LOG =
|
|
100
|
+
new SingleOperator() {
|
|
101
|
+
@Override
|
|
102
|
+
public double eval(Double x) {
|
|
103
|
+
return Math.log(x);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
private static final Operator SIN =
|
|
107
|
+
new SingleOperator() {
|
|
108
|
+
@Override
|
|
109
|
+
public double eval(Double x) {
|
|
110
|
+
return Math.sin(x);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
private static final Operator COS =
|
|
114
|
+
new SingleOperator() {
|
|
115
|
+
@Override
|
|
116
|
+
public double eval(Double x) {
|
|
117
|
+
return Math.cos(x);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
private static final Operator TAN =
|
|
121
|
+
new SingleOperator() {
|
|
122
|
+
@Override
|
|
123
|
+
public double eval(Double x) {
|
|
124
|
+
return Math.tan(x);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
private static final Operator ACOS =
|
|
128
|
+
new SingleOperator() {
|
|
129
|
+
@Override
|
|
130
|
+
public double eval(Double x) {
|
|
131
|
+
return Math.acos(x);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
private static final Operator ASIN =
|
|
135
|
+
new SingleOperator() {
|
|
136
|
+
@Override
|
|
137
|
+
public double eval(Double x) {
|
|
138
|
+
return Math.asin(x);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
private static final Operator ATAN =
|
|
142
|
+
new SingleOperator() {
|
|
143
|
+
@Override
|
|
144
|
+
public double eval(Double x) {
|
|
145
|
+
return Math.atan(x);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
private static final Operator EXP =
|
|
149
|
+
new SingleOperator() {
|
|
150
|
+
@Override
|
|
151
|
+
public double eval(Double x) {
|
|
152
|
+
return Math.exp(x);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
private static final Operator ROUND =
|
|
156
|
+
new SingleOperator() {
|
|
157
|
+
@Override
|
|
158
|
+
public double eval(Double x) {
|
|
159
|
+
return Math.round(x);
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
private static final Operator ABS =
|
|
163
|
+
new SingleOperator() {
|
|
164
|
+
@Override
|
|
165
|
+
public double eval(Double x) {
|
|
166
|
+
return Math.abs(x);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
private static final Operator FLOOR =
|
|
170
|
+
new SingleOperator() {
|
|
171
|
+
@Override
|
|
172
|
+
public double eval(Double x) {
|
|
173
|
+
return Math.floor(x);
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
private static final Operator CEIL =
|
|
177
|
+
new SingleOperator() {
|
|
178
|
+
@Override
|
|
179
|
+
public double eval(Double x) {
|
|
180
|
+
return Math.ceil(x);
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
private static final Operator MIN =
|
|
184
|
+
new ReduceOperator() {
|
|
185
|
+
@Override
|
|
186
|
+
public double reduce(Double x, Double y) {
|
|
187
|
+
return Math.min(x, y);
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
private static final Operator MAX =
|
|
191
|
+
new ReduceOperator() {
|
|
192
|
+
@Override
|
|
193
|
+
public double reduce(Double x, Double y) {
|
|
194
|
+
return Math.max(x, y);
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
// logical
|
|
199
|
+
private static final Operator AND =
|
|
200
|
+
new Operator() {
|
|
201
|
+
@Override
|
|
202
|
+
public double evaluate(Node[] input) {
|
|
203
|
+
boolean res = truthy(input[0].value());
|
|
204
|
+
for (int i = 1; i < input.length && res; i++) {
|
|
205
|
+
res = res && truthy(input[i].value());
|
|
206
|
+
}
|
|
207
|
+
return res ? 1. : 0.;
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
private static final Operator OR =
|
|
211
|
+
new Operator() {
|
|
212
|
+
@Override
|
|
213
|
+
public double evaluate(Node[] input) {
|
|
214
|
+
boolean res = truthy(input[0].value());
|
|
215
|
+
for (int i = 1; i < input.length && !res; i++) {
|
|
216
|
+
res = res || truthy(input[i].value());
|
|
217
|
+
}
|
|
218
|
+
return res ? 1. : 0.;
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
private static final Operator NOT =
|
|
222
|
+
new Operator() {
|
|
223
|
+
@Override
|
|
224
|
+
public double evaluate(Node[] input) {
|
|
225
|
+
return truthy(input[0].value()) ? 0. : 1.;
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
private static final Operator DEFINED =
|
|
229
|
+
new Operator() {
|
|
230
|
+
@Override
|
|
231
|
+
public double evaluate(Node[] input) {
|
|
232
|
+
Object res = input[0].value();
|
|
233
|
+
return (res != null && !(res instanceof Double && ((Double) res).isNaN())) ? 1. : 0.;
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
// comparison
|
|
238
|
+
private static final Operator LESS_THAN =
|
|
239
|
+
new CompOperator() {
|
|
240
|
+
@Override
|
|
241
|
+
public boolean eval(Double x, Double y) {
|
|
242
|
+
if (x == null || y == null) {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
return x < y;
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
private static final Operator EQ =
|
|
249
|
+
new CompOperator() {
|
|
250
|
+
@Override
|
|
251
|
+
public boolean eval(Double x, Double y) {
|
|
252
|
+
if (x == null || y == null) {
|
|
253
|
+
return x == y;
|
|
254
|
+
}
|
|
255
|
+
return x.doubleValue() == y.doubleValue();
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
private static final Operator GREATER_THAN =
|
|
259
|
+
new CompOperator() {
|
|
260
|
+
@Override
|
|
261
|
+
public boolean eval(Double x, Double y) {
|
|
262
|
+
if (x == null || y == null) {
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
return x > y;
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
private static final Operator LESS_OR_EQ =
|
|
269
|
+
new CompOperator() {
|
|
270
|
+
@Override
|
|
271
|
+
public boolean eval(Double x, Double y) {
|
|
272
|
+
return x <= y;
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
private static final Operator GREATER_OR_EQ =
|
|
276
|
+
new CompOperator() {
|
|
277
|
+
@Override
|
|
278
|
+
public boolean eval(Double x, Double y) {
|
|
279
|
+
return x >= y;
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
private static final Operator NEQ =
|
|
283
|
+
new CompOperator() {
|
|
284
|
+
@Override
|
|
285
|
+
public boolean eval(Double x, Double y) {
|
|
286
|
+
if (x == null || y == null) {
|
|
287
|
+
return x == y;
|
|
288
|
+
}
|
|
289
|
+
return x.doubleValue() != y.doubleValue();
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
private final int[] mInputIDs;
|
|
294
|
+
private final Node[] mInputNodes;
|
|
295
|
+
private final Operator mOperator;
|
|
296
|
+
|
|
297
|
+
public OperatorNode(int nodeID, ReadableMap config, NodesManager nodesManager) {
|
|
298
|
+
super(nodeID, config, nodesManager);
|
|
299
|
+
mInputIDs = Utils.processIntArray(config.getArray("input"));
|
|
300
|
+
mInputNodes = new Node[mInputIDs.length];
|
|
301
|
+
|
|
302
|
+
String op = config.getString("op");
|
|
303
|
+
if ("add".equals(op)) {
|
|
304
|
+
mOperator = ADD;
|
|
305
|
+
} else if ("sub".equals(op)) {
|
|
306
|
+
mOperator = SUB;
|
|
307
|
+
} else if ("multiply".equals(op)) {
|
|
308
|
+
mOperator = MULTIPLY;
|
|
309
|
+
} else if ("divide".equals(op)) {
|
|
310
|
+
mOperator = DIVIDE;
|
|
311
|
+
} else if ("pow".equals(op)) {
|
|
312
|
+
mOperator = POW;
|
|
313
|
+
} else if ("modulo".equals(op)) {
|
|
314
|
+
mOperator = MODULO;
|
|
315
|
+
} else if ("sqrt".equals(op)) {
|
|
316
|
+
mOperator = SQRT;
|
|
317
|
+
} else if ("log".equals(op)) {
|
|
318
|
+
mOperator = LOG;
|
|
319
|
+
} else if ("sin".equals(op)) {
|
|
320
|
+
mOperator = SIN;
|
|
321
|
+
} else if ("cos".equals(op)) {
|
|
322
|
+
mOperator = COS;
|
|
323
|
+
} else if ("tan".equals(op)) {
|
|
324
|
+
mOperator = TAN;
|
|
325
|
+
} else if ("acos".equals(op)) {
|
|
326
|
+
mOperator = ACOS;
|
|
327
|
+
} else if ("asin".equals(op)) {
|
|
328
|
+
mOperator = ASIN;
|
|
329
|
+
} else if ("atan".equals(op)) {
|
|
330
|
+
mOperator = ATAN;
|
|
331
|
+
} else if ("exp".equals(op)) {
|
|
332
|
+
mOperator = EXP;
|
|
333
|
+
} else if ("round".equals(op)) {
|
|
334
|
+
mOperator = ROUND;
|
|
335
|
+
} else if ("and".equals(op)) {
|
|
336
|
+
mOperator = AND;
|
|
337
|
+
} else if ("or".equals(op)) {
|
|
338
|
+
mOperator = OR;
|
|
339
|
+
} else if ("not".equals(op)) {
|
|
340
|
+
mOperator = NOT;
|
|
341
|
+
} else if ("defined".equals(op)) {
|
|
342
|
+
mOperator = DEFINED;
|
|
343
|
+
} else if ("lessThan".equals(op)) {
|
|
344
|
+
mOperator = LESS_THAN;
|
|
345
|
+
} else if ("eq".equals(op)) {
|
|
346
|
+
mOperator = EQ;
|
|
347
|
+
} else if ("greaterThan".equals(op)) {
|
|
348
|
+
mOperator = GREATER_THAN;
|
|
349
|
+
} else if ("lessOrEq".equals(op)) {
|
|
350
|
+
mOperator = LESS_OR_EQ;
|
|
351
|
+
} else if ("greaterOrEq".equals(op)) {
|
|
352
|
+
mOperator = GREATER_OR_EQ;
|
|
353
|
+
} else if ("neq".equals(op)) {
|
|
354
|
+
mOperator = NEQ;
|
|
355
|
+
} else if ("abs".equals(op)) {
|
|
356
|
+
mOperator = ABS;
|
|
357
|
+
} else if ("floor".equals(op)) {
|
|
358
|
+
mOperator = FLOOR;
|
|
359
|
+
} else if ("ceil".equals(op)) {
|
|
360
|
+
mOperator = CEIL;
|
|
361
|
+
} else if ("max".equals(op)) {
|
|
362
|
+
mOperator = MAX;
|
|
363
|
+
} else if ("min".equals(op)) {
|
|
364
|
+
mOperator = MIN;
|
|
365
|
+
} else {
|
|
366
|
+
throw new JSApplicationIllegalArgumentException("Unrecognized operator " + op);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
@Override
|
|
371
|
+
protected Object evaluate() {
|
|
372
|
+
for (int i = 0; i < mInputIDs.length; i++) {
|
|
373
|
+
mInputNodes[i] = mNodesManager.findNodeById(mInputIDs[i], Node.class);
|
|
374
|
+
}
|
|
375
|
+
return mOperator.evaluate(mInputNodes);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
package com.swmansion.reanimated.nodes;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
4
|
+
import com.swmansion.reanimated.NodesManager;
|
|
5
|
+
import java.util.Stack;
|
|
6
|
+
|
|
7
|
+
public class ParamNode extends ValueNode {
|
|
8
|
+
|
|
9
|
+
private final Stack<Integer> mArgsStack;
|
|
10
|
+
private String mPrevCallID;
|
|
11
|
+
|
|
12
|
+
public ParamNode(int nodeID, ReadableMap config, NodesManager nodesManager) {
|
|
13
|
+
super(nodeID, config, nodesManager);
|
|
14
|
+
mArgsStack = new Stack<>();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
@Override
|
|
18
|
+
public void setValue(Object value) {
|
|
19
|
+
Node node = mNodesManager.findNodeById(mArgsStack.peek(), Node.class);
|
|
20
|
+
String callID = mUpdateContext.callID;
|
|
21
|
+
mUpdateContext.callID = mPrevCallID;
|
|
22
|
+
((ValueNode) node).setValue(value);
|
|
23
|
+
mUpdateContext.callID = callID;
|
|
24
|
+
forceUpdateMemoizedValue(value);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public void beginContext(Integer ref, String prevCallID) {
|
|
28
|
+
mPrevCallID = prevCallID;
|
|
29
|
+
mArgsStack.push(ref);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public void endContext() {
|
|
33
|
+
mArgsStack.pop();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@Override
|
|
37
|
+
protected Object evaluate() {
|
|
38
|
+
String callID = mUpdateContext.callID;
|
|
39
|
+
mUpdateContext.callID = mPrevCallID;
|
|
40
|
+
Node node = mNodesManager.findNodeById(mArgsStack.peek(), Node.class);
|
|
41
|
+
Object val = node.value();
|
|
42
|
+
mUpdateContext.callID = callID;
|
|
43
|
+
return val;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public void start() {
|
|
47
|
+
Node node = mNodesManager.findNodeById(mArgsStack.peek(), Node.class);
|
|
48
|
+
if (node instanceof ParamNode) {
|
|
49
|
+
((ParamNode) node).start();
|
|
50
|
+
} else {
|
|
51
|
+
((ClockNode) node).start();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public void stop() {
|
|
56
|
+
Node node = mNodesManager.findNodeById(mArgsStack.peek(), Node.class);
|
|
57
|
+
if (node instanceof ParamNode) {
|
|
58
|
+
((ParamNode) node).stop();
|
|
59
|
+
} else {
|
|
60
|
+
((ClockNode) node).stop();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public boolean isRunning() {
|
|
65
|
+
Node node = mNodesManager.findNodeById(mArgsStack.peek(), Node.class);
|
|
66
|
+
if (node instanceof ParamNode) {
|
|
67
|
+
return ((ParamNode) node).isRunning();
|
|
68
|
+
}
|
|
69
|
+
return ((ClockNode) node).isRunning;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
package com.swmansion.reanimated.nodes;
|
|
2
|
+
|
|
3
|
+
import android.view.View;
|
|
4
|
+
import com.facebook.react.bridge.Arguments;
|
|
5
|
+
import com.facebook.react.bridge.JavaOnlyMap;
|
|
6
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
7
|
+
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
|
8
|
+
import com.facebook.react.bridge.ReadableType;
|
|
9
|
+
import com.facebook.react.bridge.WritableArray;
|
|
10
|
+
import com.facebook.react.bridge.WritableMap;
|
|
11
|
+
import com.facebook.react.uimanager.ReactStylesDiffMap;
|
|
12
|
+
import com.facebook.react.uimanager.UIImplementation;
|
|
13
|
+
import com.swmansion.reanimated.NodesManager;
|
|
14
|
+
import com.swmansion.reanimated.Utils;
|
|
15
|
+
import java.util.Map;
|
|
16
|
+
|
|
17
|
+
public class PropsNode extends Node implements FinalNode {
|
|
18
|
+
|
|
19
|
+
private final Map<String, Integer> mMapping;
|
|
20
|
+
private final UIImplementation mUIImplementation;
|
|
21
|
+
private int mConnectedViewTag = View.NO_ID;
|
|
22
|
+
|
|
23
|
+
private final JavaOnlyMap mPropMap;
|
|
24
|
+
private final ReactStylesDiffMap mDiffMap;
|
|
25
|
+
|
|
26
|
+
private static void addProp(WritableMap propMap, String key, Object value) {
|
|
27
|
+
if (value == null) {
|
|
28
|
+
propMap.putNull(key);
|
|
29
|
+
} else if (value instanceof Double) {
|
|
30
|
+
propMap.putDouble(key, (Double) value);
|
|
31
|
+
} else if (value instanceof Integer) {
|
|
32
|
+
propMap.putInt(key, (Integer) value);
|
|
33
|
+
} else if (value instanceof Number) {
|
|
34
|
+
propMap.putDouble(key, ((Number) value).doubleValue());
|
|
35
|
+
} else if (value instanceof Boolean) {
|
|
36
|
+
propMap.putBoolean(key, (Boolean) value);
|
|
37
|
+
} else if (value instanceof String) {
|
|
38
|
+
propMap.putString(key, (String) value);
|
|
39
|
+
} else if (value instanceof WritableArray) {
|
|
40
|
+
propMap.putArray(key, (WritableArray) value);
|
|
41
|
+
} else if (value instanceof WritableMap) {
|
|
42
|
+
propMap.putMap(key, (WritableMap) value);
|
|
43
|
+
} else {
|
|
44
|
+
throw new IllegalStateException("Unknown type of animated value");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public PropsNode(
|
|
49
|
+
int nodeID,
|
|
50
|
+
ReadableMap config,
|
|
51
|
+
NodesManager nodesManager,
|
|
52
|
+
UIImplementation uiImplementation) {
|
|
53
|
+
super(nodeID, config, nodesManager);
|
|
54
|
+
mMapping = Utils.processMapping(config.getMap("props"));
|
|
55
|
+
mUIImplementation = uiImplementation;
|
|
56
|
+
mPropMap = new JavaOnlyMap();
|
|
57
|
+
mDiffMap = new ReactStylesDiffMap(mPropMap);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public void connectToView(int viewTag) {
|
|
61
|
+
mConnectedViewTag = viewTag;
|
|
62
|
+
dangerouslyRescheduleEvaluate();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
public void disconnectFromView(int viewTag) {
|
|
66
|
+
mConnectedViewTag = View.NO_ID;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@Override
|
|
70
|
+
protected Double evaluate() {
|
|
71
|
+
boolean hasUIProps = false;
|
|
72
|
+
boolean hasNativeProps = false;
|
|
73
|
+
boolean hasJSProps = false;
|
|
74
|
+
WritableMap jsProps = Arguments.createMap();
|
|
75
|
+
final WritableMap nativeProps = Arguments.createMap();
|
|
76
|
+
|
|
77
|
+
for (Map.Entry<String, Integer> entry : mMapping.entrySet()) {
|
|
78
|
+
Node node = mNodesManager.findNodeById(entry.getValue(), Node.class);
|
|
79
|
+
if (node instanceof StyleNode) {
|
|
80
|
+
WritableMap style = (WritableMap) node.value();
|
|
81
|
+
ReadableMapKeySetIterator iter = style.keySetIterator();
|
|
82
|
+
while (iter.hasNextKey()) {
|
|
83
|
+
String key = iter.nextKey();
|
|
84
|
+
WritableMap dest;
|
|
85
|
+
if (mNodesManager.uiProps.contains(key)) {
|
|
86
|
+
hasUIProps = true;
|
|
87
|
+
dest = mPropMap;
|
|
88
|
+
} else if (mNodesManager.nativeProps.contains(key)) {
|
|
89
|
+
hasNativeProps = true;
|
|
90
|
+
dest = nativeProps;
|
|
91
|
+
} else {
|
|
92
|
+
hasJSProps = true;
|
|
93
|
+
dest = jsProps;
|
|
94
|
+
}
|
|
95
|
+
ReadableType type = style.getType(key);
|
|
96
|
+
switch (type) {
|
|
97
|
+
case Number:
|
|
98
|
+
dest.putDouble(key, style.getDouble(key));
|
|
99
|
+
break;
|
|
100
|
+
case String:
|
|
101
|
+
dest.putString(key, style.getString(key));
|
|
102
|
+
break;
|
|
103
|
+
case Array:
|
|
104
|
+
dest.putArray(key, (WritableArray) style.getArray(key));
|
|
105
|
+
break;
|
|
106
|
+
default:
|
|
107
|
+
throw new IllegalArgumentException("Unexpected type " + type);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
} else {
|
|
111
|
+
String key = entry.getKey();
|
|
112
|
+
Object value = node.value();
|
|
113
|
+
if (mNodesManager.uiProps.contains(key)) {
|
|
114
|
+
hasUIProps = true;
|
|
115
|
+
addProp(mPropMap, key, value);
|
|
116
|
+
} else {
|
|
117
|
+
hasNativeProps = true;
|
|
118
|
+
addProp(nativeProps, key, value);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (mConnectedViewTag != View.NO_ID) {
|
|
124
|
+
if (hasUIProps) {
|
|
125
|
+
mUIImplementation.synchronouslyUpdateViewOnUIThread(mConnectedViewTag, mDiffMap);
|
|
126
|
+
}
|
|
127
|
+
if (hasNativeProps) {
|
|
128
|
+
mNodesManager.enqueueUpdateViewOnNativeThread(mConnectedViewTag, nativeProps, false);
|
|
129
|
+
}
|
|
130
|
+
if (hasJSProps) {
|
|
131
|
+
WritableMap evt = Arguments.createMap();
|
|
132
|
+
evt.putInt("viewTag", mConnectedViewTag);
|
|
133
|
+
evt.putMap("props", jsProps);
|
|
134
|
+
mNodesManager.sendEvent("onReanimatedPropsChange", evt);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return ZERO;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
@Override
|
|
142
|
+
public void update() {
|
|
143
|
+
// Since we are updating nodes after detaching them from views there is a time where it's
|
|
144
|
+
// possible that the view was disconnected and still receive an update, this is normal and
|
|
145
|
+
// we can simply skip that update.
|
|
146
|
+
if (mConnectedViewTag == View.NO_ID) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// call value for side effect (diff map update via changes made to prop map)
|
|
151
|
+
value();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package com.swmansion.reanimated.nodes;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
4
|
+
import com.swmansion.reanimated.MapUtils;
|
|
5
|
+
import com.swmansion.reanimated.NodesManager;
|
|
6
|
+
|
|
7
|
+
public class SetNode extends Node {
|
|
8
|
+
|
|
9
|
+
private int mWhatNodeID, mValueNodeID;
|
|
10
|
+
|
|
11
|
+
public SetNode(int nodeID, ReadableMap config, NodesManager nodesManager) {
|
|
12
|
+
super(nodeID, config, nodesManager);
|
|
13
|
+
mWhatNodeID =
|
|
14
|
+
MapUtils.getInt(
|
|
15
|
+
config,
|
|
16
|
+
"what",
|
|
17
|
+
"Reanimated: First argument passed to set node is either of wrong type or is missing.");
|
|
18
|
+
mValueNodeID =
|
|
19
|
+
MapUtils.getInt(
|
|
20
|
+
config,
|
|
21
|
+
"value",
|
|
22
|
+
"Reanimated: Second argument passed to set node is either of wrong type or is missing.");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@Override
|
|
26
|
+
protected Object evaluate() {
|
|
27
|
+
Object newValue = mNodesManager.getNodeValue(mValueNodeID);
|
|
28
|
+
ValueNode what = mNodesManager.findNodeById(mWhatNodeID, ValueNode.class);
|
|
29
|
+
what.setValue(newValue);
|
|
30
|
+
return newValue;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
package com.swmansion.reanimated.nodes;
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.JavaOnlyMap;
|
|
4
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
5
|
+
import com.facebook.react.bridge.WritableArray;
|
|
6
|
+
import com.facebook.react.bridge.WritableMap;
|
|
7
|
+
import com.swmansion.reanimated.NodesManager;
|
|
8
|
+
import com.swmansion.reanimated.Utils;
|
|
9
|
+
import java.util.Map;
|
|
10
|
+
|
|
11
|
+
public class StyleNode extends Node {
|
|
12
|
+
|
|
13
|
+
private final Map<String, Integer> mMapping;
|
|
14
|
+
|
|
15
|
+
public StyleNode(int nodeID, ReadableMap config, NodesManager nodesManager) {
|
|
16
|
+
super(nodeID, config, nodesManager);
|
|
17
|
+
mMapping = Utils.processMapping(config.getMap("style"));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@Override
|
|
21
|
+
protected WritableMap evaluate() {
|
|
22
|
+
JavaOnlyMap propMap = new JavaOnlyMap();
|
|
23
|
+
for (Map.Entry<String, Integer> entry : mMapping.entrySet()) {
|
|
24
|
+
Node node = mNodesManager.findNodeById(entry.getValue(), Node.class);
|
|
25
|
+
if (node instanceof TransformNode) {
|
|
26
|
+
propMap.putArray(entry.getKey(), (WritableArray) node.value());
|
|
27
|
+
} else {
|
|
28
|
+
Object val = node.value();
|
|
29
|
+
if (val instanceof Double) {
|
|
30
|
+
propMap.putDouble(entry.getKey(), (Double) val);
|
|
31
|
+
} else if (val instanceof String) {
|
|
32
|
+
propMap.putString(entry.getKey(), (String) val);
|
|
33
|
+
} else {
|
|
34
|
+
throw new IllegalStateException("Wrong style form");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return propMap;
|
|
39
|
+
}
|
|
40
|
+
}
|