@react-native-ohos/react-native-reanimated 4.0.1 → 4.0.2-beta.1
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/compatibility.json +161 -161
- package/harmony/reanimated/BuildProfile.ets +1 -1
- package/harmony/reanimated/build-profile.json5 +18 -18
- package/harmony/reanimated/hvigorfile.ts +4 -4
- package/harmony/reanimated/index.ets +4 -4
- package/harmony/reanimated/oh-package-lock.json5 +39 -0
- package/harmony/reanimated/oh-package.json5 +12 -12
- package/harmony/reanimated/src/main/cpp/CMakeLists.txt +65 -62
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/AnimatedSensor/AnimatedSensorModule.cpp +81 -81
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/AnimatedSensor/AnimatedSensorModule.h +46 -46
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/InterpolatorRegistry.cpp +390 -390
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/InterpolatorRegistry.h +16 -16
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/definitions.h +30 -30
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/filters/FilterOp.cpp +46 -46
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/filters/FilterOp.h +23 -23
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/Quaternion.cpp +53 -53
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/Quaternion.h +21 -21
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix.cpp +166 -166
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix.h +71 -71
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix2D.cpp +368 -368
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix2D.h +53 -53
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix3D.cpp +594 -594
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformMatrix3D.h +67 -67
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformOp.cpp +52 -52
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/TransformOp.h +26 -26
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/vectors.cpp +156 -156
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/transforms/vectors.h +76 -76
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSAngle.cpp +94 -94
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSAngle.h +33 -33
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSBoolean.cpp +48 -48
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSBoolean.h +31 -31
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSColor.cpp +135 -135
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSColor.h +61 -61
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSDiscreteArray.cpp +100 -100
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSDiscreteArray.h +45 -45
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSKeyword.cpp +81 -81
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSKeyword.h +53 -53
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSLength.cpp +122 -122
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSLength.h +38 -38
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSNumber.cpp +82 -82
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSNumber.h +63 -63
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSValue.h +118 -118
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSValueVariant.cpp +174 -174
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/CSSValueVariant.h +111 -111
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSBoxShadow.cpp +196 -196
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSBoxShadow.h +66 -66
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSDropShadow.cpp +134 -134
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/common/values/complex/CSSDropShadow.h +44 -44
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSAnimationConfig.cpp +174 -174
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSAnimationConfig.h +49 -49
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSKeyframesConfig.cpp +45 -45
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSKeyframesConfig.h +26 -26
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSTransitionConfig.cpp +90 -90
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/CSSTransitionConfig.h +43 -43
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/common.cpp +17 -17
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/configs/common.h +13 -13
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSAnimation.cpp +127 -127
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSAnimation.h +51 -51
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSTransition.cpp +145 -145
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/core/CSSTransition.h +47 -47
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/EasingFunctions.cpp +69 -69
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/EasingFunctions.h +22 -22
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/cubicBezier.cpp +66 -66
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/cubicBezier.h +15 -15
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/linear.cpp +28 -28
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/linear.h +15 -15
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/steps.cpp +13 -13
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/easing/steps.h +12 -12
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/InterpolatorFactory.cpp +157 -157
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/InterpolatorFactory.h +189 -189
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/PropertyInterpolator.cpp +76 -76
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/PropertyInterpolator.h +66 -66
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/configs.h +20 -20
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperation.cpp +136 -136
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperation.h +40 -40
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperationInterpolator.cpp +38 -38
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterOperationInterpolator.h +24 -24
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterStyleInterpolator.cpp +58 -58
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/FilterStyleInterpolator.h +24 -24
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/blur.h +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/brightness.h +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/contrast.h +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/dropShadow.h +17 -17
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/grayscale.h +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/hueRotate.h +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/invert.h +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/opacity.h +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/saturate.h +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/filters/operations/sepia.h +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/ArrayPropertiesInterpolator.cpp +95 -95
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/ArrayPropertiesInterpolator.h +36 -36
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/GroupPropertiesInterpolator.cpp +41 -41
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/GroupPropertiesInterpolator.h +32 -32
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/RecordPropertiesInterpolator.cpp +99 -99
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/groups/RecordPropertiesInterpolator.h +37 -37
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/OperationsStyleInterpolator.cpp +308 -308
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/OperationsStyleInterpolator.h +100 -100
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperation.cpp +19 -19
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperation.h +94 -94
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperationInterpolator.cpp +18 -18
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/operations/StyleOperationInterpolator.h +43 -43
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/styles/AnimationStyleInterpolator.h +26 -26
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/styles/TransitionStyleInterpolator.cpp +103 -103
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/styles/TransitionStyleInterpolator.h +42 -42
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperation.cpp +224 -224
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperation.h +52 -52
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperationInterpolator.cpp +218 -218
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformOperationInterpolator.h +89 -89
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformsStyleInterpolator.cpp +149 -149
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/TransformsStyleInterpolator.h +33 -33
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/matrix.cpp +208 -208
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/matrix.h +56 -56
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/perspective.cpp +42 -42
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/perspective.h +20 -20
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/rotate.cpp +41 -41
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/rotate.h +39 -39
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/scale.cpp +28 -28
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/scale.h +25 -25
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/skew.cpp +14 -14
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/skew.h +20 -20
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/translate.cpp +39 -39
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/transforms/operations/translate.h +25 -25
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ResolvableValueInterpolator.cpp +47 -47
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ResolvableValueInterpolator.h +43 -43
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/SimpleValueInterpolator.cpp +70 -70
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/SimpleValueInterpolator.h +40 -40
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ValueInterpolator.cpp +146 -146
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/interpolation/values/ValueInterpolator.h +71 -71
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/misc/ViewStylesRepository.cpp +155 -155
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/misc/ViewStylesRepository.h +53 -53
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/AnimationProgressProvider.cpp +170 -170
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/AnimationProgressProvider.h +67 -67
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/KeyframeProgressProvider.h +12 -12
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/RawProgressProvider.cpp +41 -41
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/RawProgressProvider.h +31 -31
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/TransitionProgressProvider.cpp +193 -193
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/progress/TransitionProgressProvider.h +77 -77
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSAnimationsRegistry.cpp +340 -340
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSAnimationsRegistry.h +80 -80
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSKeyframesRegistry.cpp +45 -45
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSKeyframesRegistry.h +29 -29
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSTransitionsRegistry.cpp +167 -167
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/CSSTransitionsRegistry.h +51 -51
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/StaticPropsRegistry.cpp +61 -61
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/registries/StaticPropsRegistry.h +33 -33
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGBrush.cpp +80 -80
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGBrush.h +39 -39
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGLength.cpp +93 -93
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGLength.h +36 -36
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGStrokeDashArray.cpp +111 -111
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/svg/values/SVGStrokeDashArray.h +33 -33
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/DelayedItemsManager.cpp +75 -75
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/DelayedItemsManager.h +45 -45
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/algorithms.cpp +12 -12
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/algorithms.h +10 -10
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/interpolators.cpp +36 -36
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/interpolators.h +23 -23
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/props.cpp +149 -149
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/CSS/utils/props.h +32 -32
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitHook.cpp +113 -113
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitHook.h +49 -49
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedCommitShadowNode.h +46 -46
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedMountHook.cpp +56 -56
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ReanimatedMountHook.h +37 -37
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ShadowTreeCloner.cpp +104 -104
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/ShadowTreeCloner.h +22 -22
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.cpp +72 -72
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.h +25 -25
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistry.cpp +160 -160
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistry.h +71 -71
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistryManager.cpp +161 -161
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Fabric/updates/UpdatesRegistryManager.h +65 -65
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationType.h +11 -11
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsManager.cpp +137 -137
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsManager.h +82 -82
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxyCommon.cpp +79 -79
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxyCommon.h +81 -81
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.cpp +864 -864
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.h +214 -214
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Legacy.cpp +897 -897
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Legacy.h +220 -220
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsUtils.cpp +31 -31
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsUtils.h +146 -146
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/PropsDiffer.cpp +456 -456
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/PropsDiffer.h +102 -102
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/LayoutAnimations/SharedTransitions.cpp +544 -544
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/PropValueProcessor.cpp +119 -119
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/PropValueProcessor.h +39 -39
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.cpp +1380 -1380
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.h +230 -230
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.cpp +183 -183
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxySpec.h +93 -93
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.cpp +54 -54
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/RNRuntimeDecorator.h +28 -28
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/UIRuntimeDecorator.cpp +58 -58
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/RuntimeDecorators/UIRuntimeDecorator.h +31 -31
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeatureFlags.cpp +18 -18
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/FeatureFlags.h +44 -44
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/PlatformDepMethodsHolder.h +67 -67
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/ReanimatedSystraceSection.h +114 -114
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/ReanimatedVersion.cpp +46 -46
- package/harmony/reanimated/src/main/cpp/Common/cpp/reanimated/Tools/ReanimatedVersion.h +18 -18
- package/harmony/reanimated/src/main/cpp/ReanimatedModule.cpp +233 -233
- package/harmony/reanimated/src/main/cpp/ReanimatedModule.h +23 -23
- package/harmony/reanimated/src/main/cpp/ReanimatedNodesManager.cpp +56 -56
- package/harmony/reanimated/src/main/cpp/ReanimatedNodesManager.h +30 -30
- package/harmony/reanimated/src/main/cpp/ReanimatedPackage.cpp +44 -44
- package/harmony/reanimated/src/main/cpp/ReanimatedPackage.h +16 -16
- package/harmony/reanimated/src/main/cpp/ReanimatedSensor.cpp +265 -265
- package/harmony/reanimated/src/main/cpp/ReanimatedSensor.h +36 -36
- package/harmony/reanimated/src/main/cpp/ReanimatedSensorContainer.cpp +35 -35
- package/harmony/reanimated/src/main/cpp/ReanimatedSensorContainer.h +23 -23
- package/harmony/reanimated/src/main/cpp/ReanimatedUIScheduler.cpp +23 -23
- package/harmony/reanimated/src/main/cpp/ReanimatedUIScheduler.h +19 -19
- package/harmony/reanimated/src/main/cpp/TransformParser.h +93 -93
- package/harmony/reanimated/src/main/ets/AnimationManager.ts +60 -60
- package/harmony/reanimated/src/main/ets/ReanimatedModule.ts +51 -51
- package/harmony/reanimated/src/main/ets/ReanimatedPackage.ts +25 -25
- package/harmony/reanimated/src/main/module.json5 +12 -12
- package/harmony/reanimated/src/main/resources/base/element/color.json +7 -7
- package/harmony/reanimated/src/main/resources/base/element/string.json +15 -15
- package/harmony/reanimated/src/main/resources/base/profile/main_pages.json +5 -5
- package/harmony/reanimated/src/main/resources/en_US/element/string.json +15 -15
- package/harmony/reanimated/src/main/resources/zh_CN/element/string.json +15 -15
- package/harmony/reanimated/ts.ts +6 -6
- package/harmony/reanimated.har +0 -0
- package/package.json +70 -69
- package/scripts/deploy.js +191 -191
- package/scripts/set-reanimated-version.js +37 -37
- package/scripts/update-version.js +119 -119
- package/scripts/validate-react-native-version.js +46 -46
- package/scripts/validate-worklets-build.js +17 -17
- package/scripts/validate-worklets-version.js +84 -84
- package/scripts/worklets-version.json +4 -4
- package/src/index.ts +9 -9
|
@@ -1,340 +1,340 @@
|
|
|
1
|
-
#include <reanimated/CSS/registries/CSSAnimationsRegistry.h>
|
|
2
|
-
|
|
3
|
-
#include <memory>
|
|
4
|
-
#include <string>
|
|
5
|
-
#include <unordered_map>
|
|
6
|
-
#include <utility>
|
|
7
|
-
#include <vector>
|
|
8
|
-
|
|
9
|
-
namespace reanimated::css {
|
|
10
|
-
|
|
11
|
-
bool CSSAnimationsRegistry::isEmpty() const {
|
|
12
|
-
// The registry is empty if has no registered animations and no updates
|
|
13
|
-
// stored in the updates registry
|
|
14
|
-
return UpdatesRegistry::isEmpty() && registry_.empty();
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
bool CSSAnimationsRegistry::hasUpdates() const {
|
|
18
|
-
return !runningAnimationIndicesMap_.empty() || !delayedAnimationsManager_.empty() || !animationsToRevertMap_.empty();
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
void CSSAnimationsRegistry::apply(
|
|
22
|
-
jsi::Runtime &rt,
|
|
23
|
-
const std::shared_ptr<const ShadowNode> &shadowNode,
|
|
24
|
-
const std::optional<std::vector<std::string>> &animationNames,
|
|
25
|
-
const CSSAnimationsMap &newAnimations,
|
|
26
|
-
const CSSAnimationSettingsUpdatesMap &settingsUpdates,
|
|
27
|
-
double timestamp) {
|
|
28
|
-
auto animationsVector = buildAnimationsVector(rt, shadowNode, animationNames, newAnimations);
|
|
29
|
-
|
|
30
|
-
const auto viewTag = shadowNode->getTag();
|
|
31
|
-
if (animationsVector.empty()) {
|
|
32
|
-
remove(viewTag);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
runningAnimationIndicesMap_[viewTag].clear();
|
|
37
|
-
|
|
38
|
-
std::vector<size_t> updatedIndices;
|
|
39
|
-
for (const auto &[index, _] : newAnimations) {
|
|
40
|
-
updatedIndices.push_back(index);
|
|
41
|
-
}
|
|
42
|
-
for (const auto &[index, _] : settingsUpdates) {
|
|
43
|
-
updatedIndices.push_back(index);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
updateAnimationSettings(animationsVector, settingsUpdates, timestamp);
|
|
47
|
-
for (size_t i = 0; i < animationsVector.size(); ++i) {
|
|
48
|
-
scheduleOrActivateAnimation(i, animationsVector[i], timestamp);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
auto animationToIndexMap = buildAnimationToIndexMap(animationsVector);
|
|
52
|
-
registry_.erase(viewTag);
|
|
53
|
-
registry_.emplace(viewTag, RegistryEntry{std::move(animationsVector), std::move(animationToIndexMap)});
|
|
54
|
-
|
|
55
|
-
updateViewAnimations(viewTag, updatedIndices, timestamp, false);
|
|
56
|
-
applyViewAnimationsStyle(viewTag, timestamp);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
void CSSAnimationsRegistry::remove(const Tag viewTag) {
|
|
60
|
-
removeViewAnimations(viewTag);
|
|
61
|
-
removeFromUpdatesRegistry(viewTag);
|
|
62
|
-
registry_.erase(viewTag);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
void CSSAnimationsRegistry::update(const double timestamp) {
|
|
66
|
-
// Activate all delayed animations that should start now
|
|
67
|
-
activateDelayedAnimations(timestamp);
|
|
68
|
-
// Update styles in the registry for views which animations were reverted
|
|
69
|
-
handleAnimationsToRevert(timestamp);
|
|
70
|
-
|
|
71
|
-
// Iterate over active animations and update them
|
|
72
|
-
for (auto it = runningAnimationIndicesMap_.begin(); it != runningAnimationIndicesMap_.end();) {
|
|
73
|
-
const auto viewTag = it->first;
|
|
74
|
-
const std::vector<size_t> animationIndices = {it->second.begin(), it->second.end()};
|
|
75
|
-
updateViewAnimations(viewTag, animationIndices, timestamp, true);
|
|
76
|
-
|
|
77
|
-
if (runningAnimationIndicesMap_[viewTag].empty()) {
|
|
78
|
-
it = runningAnimationIndicesMap_.erase(it);
|
|
79
|
-
} else {
|
|
80
|
-
++it;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
CSSAnimationsVector CSSAnimationsRegistry::buildAnimationsVector(
|
|
86
|
-
jsi::Runtime &rt,
|
|
87
|
-
const std::shared_ptr<const ShadowNode> &shadowNode,
|
|
88
|
-
const std::optional<std::vector<std::string>> &animationNames,
|
|
89
|
-
const std::optional<CSSAnimationsMap> &newAnimations) const {
|
|
90
|
-
const auto registryIt = registry_.find(shadowNode->getTag());
|
|
91
|
-
|
|
92
|
-
// If animationNames has no value, that means no animations were added,
|
|
93
|
-
// removed or reordered, so we can return the current animations vector from
|
|
94
|
-
// the registry
|
|
95
|
-
if (!animationNames.has_value()) {
|
|
96
|
-
if (registryIt != registry_.end()) {
|
|
97
|
-
return registryIt->second.animationsVector;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
CSSAnimationsVector animationsVector;
|
|
102
|
-
const auto &animationNamesVector = animationNames.value();
|
|
103
|
-
const auto animationNamesSize = animationNamesVector.size();
|
|
104
|
-
animationsVector.reserve(animationNamesSize);
|
|
105
|
-
|
|
106
|
-
std::unordered_map<std::string, CSSAnimationsVector> oldAnimationsMap;
|
|
107
|
-
CSSAnimationsMap emptyAnimationsMap;
|
|
108
|
-
const auto &newAnimationsMap = newAnimations.value_or(emptyAnimationsMap);
|
|
109
|
-
|
|
110
|
-
if (registryIt != registry_.end()) {
|
|
111
|
-
const auto &oldAnimations = registryIt->second.animationsVector;
|
|
112
|
-
|
|
113
|
-
// Fill the map while maintaining reverse order (for quick pop from the end)
|
|
114
|
-
for (auto it = oldAnimations.rbegin(); it != oldAnimations.rend(); ++it) {
|
|
115
|
-
oldAnimationsMap[(*it)->getName()].emplace_back(*it);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
for (size_t i = 0; i < animationNamesSize; ++i) {
|
|
120
|
-
const auto &newAnimationIt = newAnimationsMap.find(i);
|
|
121
|
-
if (newAnimationIt != newAnimationsMap.end()) {
|
|
122
|
-
animationsVector.emplace_back(newAnimationIt->second);
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const auto &name = animationNamesVector[i];
|
|
127
|
-
const auto &oldAnimationIt = oldAnimationsMap.find(name);
|
|
128
|
-
|
|
129
|
-
if (oldAnimationIt == oldAnimationsMap.end()) {
|
|
130
|
-
throw std::runtime_error(
|
|
131
|
-
"[Reanimated] There is no animation with name " + name + " available to use at index " + std::to_string(i));
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
animationsVector.emplace_back(oldAnimationIt->second.back());
|
|
135
|
-
oldAnimationIt->second.pop_back();
|
|
136
|
-
|
|
137
|
-
if (oldAnimationIt->second.empty()) {
|
|
138
|
-
oldAnimationsMap.erase(oldAnimationIt);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
return animationsVector;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
CSSAnimationsRegistry::AnimationToIndexMap CSSAnimationsRegistry::buildAnimationToIndexMap(
|
|
146
|
-
const CSSAnimationsVector &animationsVector) const {
|
|
147
|
-
AnimationToIndexMap animationToIndexMap;
|
|
148
|
-
|
|
149
|
-
for (size_t i = 0; i < animationsVector.size(); ++i) {
|
|
150
|
-
animationToIndexMap[animationsVector[i]] = i;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
return animationToIndexMap;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
void CSSAnimationsRegistry::updateAnimationSettings(
|
|
157
|
-
const CSSAnimationsVector &animationsVector,
|
|
158
|
-
const CSSAnimationSettingsUpdatesMap &settingsUpdates,
|
|
159
|
-
const double timestamp) {
|
|
160
|
-
for (size_t i = 0; i < animationsVector.size(); ++i) {
|
|
161
|
-
const auto &animation = animationsVector[i];
|
|
162
|
-
const auto it = settingsUpdates.find(i);
|
|
163
|
-
if (it != settingsUpdates.end()) {
|
|
164
|
-
animation->updateSettings(it->second, timestamp);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
void CSSAnimationsRegistry::updateViewAnimations(
|
|
170
|
-
const Tag viewTag,
|
|
171
|
-
const std::vector<size_t> &animationIndices,
|
|
172
|
-
const double timestamp,
|
|
173
|
-
const bool addToBatch) {
|
|
174
|
-
folly::dynamic result = folly::dynamic::object;
|
|
175
|
-
std::shared_ptr<const ShadowNode> shadowNode = nullptr;
|
|
176
|
-
bool hasUpdates = false;
|
|
177
|
-
|
|
178
|
-
for (const auto animationIndex : animationIndices) {
|
|
179
|
-
const auto &animation = registry_[viewTag].animationsVector[animationIndex];
|
|
180
|
-
if (!shadowNode) {
|
|
181
|
-
shadowNode = animation->getShadowNode();
|
|
182
|
-
}
|
|
183
|
-
if (animation->getState(timestamp) == AnimationProgressState::Pending) {
|
|
184
|
-
animation->run(timestamp);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
bool updatesAddedToBatch = false;
|
|
188
|
-
const auto updates = animation->update(timestamp);
|
|
189
|
-
const auto newState = animation->getState(timestamp);
|
|
190
|
-
|
|
191
|
-
if (newState == AnimationProgressState::Finished) {
|
|
192
|
-
// Revert changes applied during animation if there is no forwards fill
|
|
193
|
-
// mode
|
|
194
|
-
if (addToBatch && !animation->hasForwardsFillMode()) {
|
|
195
|
-
// We also have to manually commit style values
|
|
196
|
-
// reverting the changes applied by the animation.
|
|
197
|
-
hasUpdates = addStyleUpdates(result, animation->getResetStyle(), false) || hasUpdates;
|
|
198
|
-
updatesAddedToBatch = true;
|
|
199
|
-
// We want to remove style changes applied by the animation that is
|
|
200
|
-
// finished and has no forwards fill mode. We cannot simply remove
|
|
201
|
-
// properties from the style in the registry as it may be overridden
|
|
202
|
-
// by the next animation. Instead, we are creating the new style
|
|
203
|
-
// object without reverted (finished without forwards fill mode)
|
|
204
|
-
// animations.
|
|
205
|
-
animationsToRevertMap_[viewTag].insert(animationIndex);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
if (addToBatch && !updatesAddedToBatch) {
|
|
210
|
-
hasUpdates = addStyleUpdates(result, updates, true) || hasUpdates;
|
|
211
|
-
}
|
|
212
|
-
if (newState != AnimationProgressState::Running) {
|
|
213
|
-
runningAnimationIndicesMap_[viewTag].erase(animationIndex);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
if (hasUpdates) {
|
|
218
|
-
addUpdatesToBatch(shadowNode, result);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
void CSSAnimationsRegistry::scheduleOrActivateAnimation(
|
|
223
|
-
const size_t animationIndex,
|
|
224
|
-
const std::shared_ptr<CSSAnimation> &animation,
|
|
225
|
-
const double timestamp) {
|
|
226
|
-
// Remove the animation from delayed (if it is already added to
|
|
227
|
-
// delayed animations)
|
|
228
|
-
delayedAnimationsManager_.remove(animation);
|
|
229
|
-
|
|
230
|
-
const auto startTimestamp = animation->getStartTimestamp(timestamp);
|
|
231
|
-
|
|
232
|
-
if (startTimestamp > timestamp) {
|
|
233
|
-
// If the animation is delayed, schedule it for activation
|
|
234
|
-
// (Only if it isn't paused)
|
|
235
|
-
if (animation->getState(timestamp) != AnimationProgressState::Paused) {
|
|
236
|
-
delayedAnimationsManager_.add(startTimestamp, animation);
|
|
237
|
-
}
|
|
238
|
-
} else {
|
|
239
|
-
const auto viewTag = animation->getShadowNode()->getTag();
|
|
240
|
-
runningAnimationIndicesMap_[viewTag].insert(animationIndex);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
void CSSAnimationsRegistry::removeViewAnimations(const Tag viewTag) {
|
|
245
|
-
const auto it = registry_.find(viewTag);
|
|
246
|
-
if (it == registry_.end()) {
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
for (const auto &animation : it->second.animationsVector) {
|
|
251
|
-
delayedAnimationsManager_.remove(animation);
|
|
252
|
-
}
|
|
253
|
-
runningAnimationIndicesMap_.erase(viewTag);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
void CSSAnimationsRegistry::applyViewAnimationsStyle(const Tag viewTag, const double timestamp) {
|
|
257
|
-
const auto it = registry_.find(viewTag);
|
|
258
|
-
// Remove the style from the registry if there are no animations for the view
|
|
259
|
-
if (it == registry_.end() || it->second.animationsVector.empty()) {
|
|
260
|
-
removeFromUpdatesRegistry(viewTag);
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
folly::dynamic updatedStyle = folly::dynamic::object;
|
|
265
|
-
std::shared_ptr<const ShadowNode> shadowNode = nullptr;
|
|
266
|
-
|
|
267
|
-
for (const auto &animation : it->second.animationsVector) {
|
|
268
|
-
const auto startTimestamp = animation->getStartTimestamp(timestamp);
|
|
269
|
-
|
|
270
|
-
folly::dynamic style;
|
|
271
|
-
const auto ¤tState = animation->getState(timestamp);
|
|
272
|
-
if (startTimestamp > timestamp && animation->hasBackwardsFillMode()) {
|
|
273
|
-
style = animation->getBackwardsFillStyle();
|
|
274
|
-
} else if (
|
|
275
|
-
currentState == AnimationProgressState::Running ||
|
|
276
|
-
// Animation is paused after start (was running before)
|
|
277
|
-
(currentState == AnimationProgressState::Paused && timestamp >= animation->getStartTimestamp(timestamp)) ||
|
|
278
|
-
// Animation is finished and has fill forwards fill mode
|
|
279
|
-
(currentState == AnimationProgressState::Finished && animation->hasForwardsFillMode())) {
|
|
280
|
-
style = animation->getCurrentInterpolationStyle();
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
if (!shadowNode) {
|
|
284
|
-
shadowNode = animation->getShadowNode();
|
|
285
|
-
}
|
|
286
|
-
if (style.isObject()) {
|
|
287
|
-
updatedStyle.update(style);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
setInUpdatesRegistry(shadowNode, updatedStyle);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
void CSSAnimationsRegistry::activateDelayedAnimations(const double timestamp) {
|
|
295
|
-
while (!delayedAnimationsManager_.empty() && delayedAnimationsManager_.top().timestamp <= timestamp) {
|
|
296
|
-
const auto [_, animation] = delayedAnimationsManager_.pop();
|
|
297
|
-
const auto viewTag = animation->getShadowNode()->getTag();
|
|
298
|
-
|
|
299
|
-
// Add only these animations which weren't removed in the meantime
|
|
300
|
-
if (registry_.find(viewTag) == registry_.end()) {
|
|
301
|
-
continue;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
const auto &animationToIndexMap = registry_[viewTag].animationToIndexMap;
|
|
305
|
-
if (animationToIndexMap.find(animation) == animationToIndexMap.end()) {
|
|
306
|
-
continue;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
const auto animationIndex = animationToIndexMap.at(animation);
|
|
310
|
-
runningAnimationIndicesMap_[viewTag].insert(animationIndex);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
void CSSAnimationsRegistry::handleAnimationsToRevert(const double timestamp) {
|
|
315
|
-
for (const auto &[viewTag, _] : animationsToRevertMap_) {
|
|
316
|
-
applyViewAnimationsStyle(viewTag, timestamp);
|
|
317
|
-
}
|
|
318
|
-
animationsToRevertMap_.clear();
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
bool CSSAnimationsRegistry::addStyleUpdates(
|
|
322
|
-
folly::dynamic &target,
|
|
323
|
-
const folly::dynamic &updates,
|
|
324
|
-
bool shouldOverride) {
|
|
325
|
-
if (!updates.isObject()) {
|
|
326
|
-
return false;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
bool hasUpdates = false;
|
|
330
|
-
for (const auto &[propertyName, propertyValue] : updates.items()) {
|
|
331
|
-
if (shouldOverride || !target.count(propertyName) || target[propertyName].isNull()) {
|
|
332
|
-
target[propertyName] = propertyValue;
|
|
333
|
-
hasUpdates = true;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
return hasUpdates;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
} // namespace reanimated::css
|
|
1
|
+
#include <reanimated/CSS/registries/CSSAnimationsRegistry.h>
|
|
2
|
+
|
|
3
|
+
#include <memory>
|
|
4
|
+
#include <string>
|
|
5
|
+
#include <unordered_map>
|
|
6
|
+
#include <utility>
|
|
7
|
+
#include <vector>
|
|
8
|
+
|
|
9
|
+
namespace reanimated::css {
|
|
10
|
+
|
|
11
|
+
bool CSSAnimationsRegistry::isEmpty() const {
|
|
12
|
+
// The registry is empty if has no registered animations and no updates
|
|
13
|
+
// stored in the updates registry
|
|
14
|
+
return UpdatesRegistry::isEmpty() && registry_.empty();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
bool CSSAnimationsRegistry::hasUpdates() const {
|
|
18
|
+
return !runningAnimationIndicesMap_.empty() || !delayedAnimationsManager_.empty() || !animationsToRevertMap_.empty();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
void CSSAnimationsRegistry::apply(
|
|
22
|
+
jsi::Runtime &rt,
|
|
23
|
+
const std::shared_ptr<const ShadowNode> &shadowNode,
|
|
24
|
+
const std::optional<std::vector<std::string>> &animationNames,
|
|
25
|
+
const CSSAnimationsMap &newAnimations,
|
|
26
|
+
const CSSAnimationSettingsUpdatesMap &settingsUpdates,
|
|
27
|
+
double timestamp) {
|
|
28
|
+
auto animationsVector = buildAnimationsVector(rt, shadowNode, animationNames, newAnimations);
|
|
29
|
+
|
|
30
|
+
const auto viewTag = shadowNode->getTag();
|
|
31
|
+
if (animationsVector.empty()) {
|
|
32
|
+
remove(viewTag);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
runningAnimationIndicesMap_[viewTag].clear();
|
|
37
|
+
|
|
38
|
+
std::vector<size_t> updatedIndices;
|
|
39
|
+
for (const auto &[index, _] : newAnimations) {
|
|
40
|
+
updatedIndices.push_back(index);
|
|
41
|
+
}
|
|
42
|
+
for (const auto &[index, _] : settingsUpdates) {
|
|
43
|
+
updatedIndices.push_back(index);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
updateAnimationSettings(animationsVector, settingsUpdates, timestamp);
|
|
47
|
+
for (size_t i = 0; i < animationsVector.size(); ++i) {
|
|
48
|
+
scheduleOrActivateAnimation(i, animationsVector[i], timestamp);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
auto animationToIndexMap = buildAnimationToIndexMap(animationsVector);
|
|
52
|
+
registry_.erase(viewTag);
|
|
53
|
+
registry_.emplace(viewTag, RegistryEntry{std::move(animationsVector), std::move(animationToIndexMap)});
|
|
54
|
+
|
|
55
|
+
updateViewAnimations(viewTag, updatedIndices, timestamp, false);
|
|
56
|
+
applyViewAnimationsStyle(viewTag, timestamp);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
void CSSAnimationsRegistry::remove(const Tag viewTag) {
|
|
60
|
+
removeViewAnimations(viewTag);
|
|
61
|
+
removeFromUpdatesRegistry(viewTag);
|
|
62
|
+
registry_.erase(viewTag);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
void CSSAnimationsRegistry::update(const double timestamp) {
|
|
66
|
+
// Activate all delayed animations that should start now
|
|
67
|
+
activateDelayedAnimations(timestamp);
|
|
68
|
+
// Update styles in the registry for views which animations were reverted
|
|
69
|
+
handleAnimationsToRevert(timestamp);
|
|
70
|
+
|
|
71
|
+
// Iterate over active animations and update them
|
|
72
|
+
for (auto it = runningAnimationIndicesMap_.begin(); it != runningAnimationIndicesMap_.end();) {
|
|
73
|
+
const auto viewTag = it->first;
|
|
74
|
+
const std::vector<size_t> animationIndices = {it->second.begin(), it->second.end()};
|
|
75
|
+
updateViewAnimations(viewTag, animationIndices, timestamp, true);
|
|
76
|
+
|
|
77
|
+
if (runningAnimationIndicesMap_[viewTag].empty()) {
|
|
78
|
+
it = runningAnimationIndicesMap_.erase(it);
|
|
79
|
+
} else {
|
|
80
|
+
++it;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
CSSAnimationsVector CSSAnimationsRegistry::buildAnimationsVector(
|
|
86
|
+
jsi::Runtime &rt,
|
|
87
|
+
const std::shared_ptr<const ShadowNode> &shadowNode,
|
|
88
|
+
const std::optional<std::vector<std::string>> &animationNames,
|
|
89
|
+
const std::optional<CSSAnimationsMap> &newAnimations) const {
|
|
90
|
+
const auto registryIt = registry_.find(shadowNode->getTag());
|
|
91
|
+
|
|
92
|
+
// If animationNames has no value, that means no animations were added,
|
|
93
|
+
// removed or reordered, so we can return the current animations vector from
|
|
94
|
+
// the registry
|
|
95
|
+
if (!animationNames.has_value()) {
|
|
96
|
+
if (registryIt != registry_.end()) {
|
|
97
|
+
return registryIt->second.animationsVector;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
CSSAnimationsVector animationsVector;
|
|
102
|
+
const auto &animationNamesVector = animationNames.value();
|
|
103
|
+
const auto animationNamesSize = animationNamesVector.size();
|
|
104
|
+
animationsVector.reserve(animationNamesSize);
|
|
105
|
+
|
|
106
|
+
std::unordered_map<std::string, CSSAnimationsVector> oldAnimationsMap;
|
|
107
|
+
CSSAnimationsMap emptyAnimationsMap;
|
|
108
|
+
const auto &newAnimationsMap = newAnimations.value_or(emptyAnimationsMap);
|
|
109
|
+
|
|
110
|
+
if (registryIt != registry_.end()) {
|
|
111
|
+
const auto &oldAnimations = registryIt->second.animationsVector;
|
|
112
|
+
|
|
113
|
+
// Fill the map while maintaining reverse order (for quick pop from the end)
|
|
114
|
+
for (auto it = oldAnimations.rbegin(); it != oldAnimations.rend(); ++it) {
|
|
115
|
+
oldAnimationsMap[(*it)->getName()].emplace_back(*it);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
for (size_t i = 0; i < animationNamesSize; ++i) {
|
|
120
|
+
const auto &newAnimationIt = newAnimationsMap.find(i);
|
|
121
|
+
if (newAnimationIt != newAnimationsMap.end()) {
|
|
122
|
+
animationsVector.emplace_back(newAnimationIt->second);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const auto &name = animationNamesVector[i];
|
|
127
|
+
const auto &oldAnimationIt = oldAnimationsMap.find(name);
|
|
128
|
+
|
|
129
|
+
if (oldAnimationIt == oldAnimationsMap.end()) {
|
|
130
|
+
throw std::runtime_error(
|
|
131
|
+
"[Reanimated] There is no animation with name " + name + " available to use at index " + std::to_string(i));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
animationsVector.emplace_back(oldAnimationIt->second.back());
|
|
135
|
+
oldAnimationIt->second.pop_back();
|
|
136
|
+
|
|
137
|
+
if (oldAnimationIt->second.empty()) {
|
|
138
|
+
oldAnimationsMap.erase(oldAnimationIt);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return animationsVector;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
CSSAnimationsRegistry::AnimationToIndexMap CSSAnimationsRegistry::buildAnimationToIndexMap(
|
|
146
|
+
const CSSAnimationsVector &animationsVector) const {
|
|
147
|
+
AnimationToIndexMap animationToIndexMap;
|
|
148
|
+
|
|
149
|
+
for (size_t i = 0; i < animationsVector.size(); ++i) {
|
|
150
|
+
animationToIndexMap[animationsVector[i]] = i;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return animationToIndexMap;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
void CSSAnimationsRegistry::updateAnimationSettings(
|
|
157
|
+
const CSSAnimationsVector &animationsVector,
|
|
158
|
+
const CSSAnimationSettingsUpdatesMap &settingsUpdates,
|
|
159
|
+
const double timestamp) {
|
|
160
|
+
for (size_t i = 0; i < animationsVector.size(); ++i) {
|
|
161
|
+
const auto &animation = animationsVector[i];
|
|
162
|
+
const auto it = settingsUpdates.find(i);
|
|
163
|
+
if (it != settingsUpdates.end()) {
|
|
164
|
+
animation->updateSettings(it->second, timestamp);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
void CSSAnimationsRegistry::updateViewAnimations(
|
|
170
|
+
const Tag viewTag,
|
|
171
|
+
const std::vector<size_t> &animationIndices,
|
|
172
|
+
const double timestamp,
|
|
173
|
+
const bool addToBatch) {
|
|
174
|
+
folly::dynamic result = folly::dynamic::object;
|
|
175
|
+
std::shared_ptr<const ShadowNode> shadowNode = nullptr;
|
|
176
|
+
bool hasUpdates = false;
|
|
177
|
+
|
|
178
|
+
for (const auto animationIndex : animationIndices) {
|
|
179
|
+
const auto &animation = registry_[viewTag].animationsVector[animationIndex];
|
|
180
|
+
if (!shadowNode) {
|
|
181
|
+
shadowNode = animation->getShadowNode();
|
|
182
|
+
}
|
|
183
|
+
if (animation->getState(timestamp) == AnimationProgressState::Pending) {
|
|
184
|
+
animation->run(timestamp);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
bool updatesAddedToBatch = false;
|
|
188
|
+
const auto updates = animation->update(timestamp);
|
|
189
|
+
const auto newState = animation->getState(timestamp);
|
|
190
|
+
|
|
191
|
+
if (newState == AnimationProgressState::Finished) {
|
|
192
|
+
// Revert changes applied during animation if there is no forwards fill
|
|
193
|
+
// mode
|
|
194
|
+
if (addToBatch && !animation->hasForwardsFillMode()) {
|
|
195
|
+
// We also have to manually commit style values
|
|
196
|
+
// reverting the changes applied by the animation.
|
|
197
|
+
hasUpdates = addStyleUpdates(result, animation->getResetStyle(), false) || hasUpdates;
|
|
198
|
+
updatesAddedToBatch = true;
|
|
199
|
+
// We want to remove style changes applied by the animation that is
|
|
200
|
+
// finished and has no forwards fill mode. We cannot simply remove
|
|
201
|
+
// properties from the style in the registry as it may be overridden
|
|
202
|
+
// by the next animation. Instead, we are creating the new style
|
|
203
|
+
// object without reverted (finished without forwards fill mode)
|
|
204
|
+
// animations.
|
|
205
|
+
animationsToRevertMap_[viewTag].insert(animationIndex);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (addToBatch && !updatesAddedToBatch) {
|
|
210
|
+
hasUpdates = addStyleUpdates(result, updates, true) || hasUpdates;
|
|
211
|
+
}
|
|
212
|
+
if (newState != AnimationProgressState::Running) {
|
|
213
|
+
runningAnimationIndicesMap_[viewTag].erase(animationIndex);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (hasUpdates) {
|
|
218
|
+
addUpdatesToBatch(shadowNode, result);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
void CSSAnimationsRegistry::scheduleOrActivateAnimation(
|
|
223
|
+
const size_t animationIndex,
|
|
224
|
+
const std::shared_ptr<CSSAnimation> &animation,
|
|
225
|
+
const double timestamp) {
|
|
226
|
+
// Remove the animation from delayed (if it is already added to
|
|
227
|
+
// delayed animations)
|
|
228
|
+
delayedAnimationsManager_.remove(animation);
|
|
229
|
+
|
|
230
|
+
const auto startTimestamp = animation->getStartTimestamp(timestamp);
|
|
231
|
+
|
|
232
|
+
if (startTimestamp > timestamp) {
|
|
233
|
+
// If the animation is delayed, schedule it for activation
|
|
234
|
+
// (Only if it isn't paused)
|
|
235
|
+
if (animation->getState(timestamp) != AnimationProgressState::Paused) {
|
|
236
|
+
delayedAnimationsManager_.add(startTimestamp, animation);
|
|
237
|
+
}
|
|
238
|
+
} else {
|
|
239
|
+
const auto viewTag = animation->getShadowNode()->getTag();
|
|
240
|
+
runningAnimationIndicesMap_[viewTag].insert(animationIndex);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
void CSSAnimationsRegistry::removeViewAnimations(const Tag viewTag) {
|
|
245
|
+
const auto it = registry_.find(viewTag);
|
|
246
|
+
if (it == registry_.end()) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
for (const auto &animation : it->second.animationsVector) {
|
|
251
|
+
delayedAnimationsManager_.remove(animation);
|
|
252
|
+
}
|
|
253
|
+
runningAnimationIndicesMap_.erase(viewTag);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
void CSSAnimationsRegistry::applyViewAnimationsStyle(const Tag viewTag, const double timestamp) {
|
|
257
|
+
const auto it = registry_.find(viewTag);
|
|
258
|
+
// Remove the style from the registry if there are no animations for the view
|
|
259
|
+
if (it == registry_.end() || it->second.animationsVector.empty()) {
|
|
260
|
+
removeFromUpdatesRegistry(viewTag);
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
folly::dynamic updatedStyle = folly::dynamic::object;
|
|
265
|
+
std::shared_ptr<const ShadowNode> shadowNode = nullptr;
|
|
266
|
+
|
|
267
|
+
for (const auto &animation : it->second.animationsVector) {
|
|
268
|
+
const auto startTimestamp = animation->getStartTimestamp(timestamp);
|
|
269
|
+
|
|
270
|
+
folly::dynamic style;
|
|
271
|
+
const auto ¤tState = animation->getState(timestamp);
|
|
272
|
+
if (startTimestamp > timestamp && animation->hasBackwardsFillMode()) {
|
|
273
|
+
style = animation->getBackwardsFillStyle();
|
|
274
|
+
} else if (
|
|
275
|
+
currentState == AnimationProgressState::Running ||
|
|
276
|
+
// Animation is paused after start (was running before)
|
|
277
|
+
(currentState == AnimationProgressState::Paused && timestamp >= animation->getStartTimestamp(timestamp)) ||
|
|
278
|
+
// Animation is finished and has fill forwards fill mode
|
|
279
|
+
(currentState == AnimationProgressState::Finished && animation->hasForwardsFillMode())) {
|
|
280
|
+
style = animation->getCurrentInterpolationStyle();
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
if (!shadowNode) {
|
|
284
|
+
shadowNode = animation->getShadowNode();
|
|
285
|
+
}
|
|
286
|
+
if (style.isObject()) {
|
|
287
|
+
updatedStyle.update(style);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
setInUpdatesRegistry(shadowNode, updatedStyle);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
void CSSAnimationsRegistry::activateDelayedAnimations(const double timestamp) {
|
|
295
|
+
while (!delayedAnimationsManager_.empty() && delayedAnimationsManager_.top().timestamp <= timestamp) {
|
|
296
|
+
const auto [_, animation] = delayedAnimationsManager_.pop();
|
|
297
|
+
const auto viewTag = animation->getShadowNode()->getTag();
|
|
298
|
+
|
|
299
|
+
// Add only these animations which weren't removed in the meantime
|
|
300
|
+
if (registry_.find(viewTag) == registry_.end()) {
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
const auto &animationToIndexMap = registry_[viewTag].animationToIndexMap;
|
|
305
|
+
if (animationToIndexMap.find(animation) == animationToIndexMap.end()) {
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
const auto animationIndex = animationToIndexMap.at(animation);
|
|
310
|
+
runningAnimationIndicesMap_[viewTag].insert(animationIndex);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
void CSSAnimationsRegistry::handleAnimationsToRevert(const double timestamp) {
|
|
315
|
+
for (const auto &[viewTag, _] : animationsToRevertMap_) {
|
|
316
|
+
applyViewAnimationsStyle(viewTag, timestamp);
|
|
317
|
+
}
|
|
318
|
+
animationsToRevertMap_.clear();
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
bool CSSAnimationsRegistry::addStyleUpdates(
|
|
322
|
+
folly::dynamic &target,
|
|
323
|
+
const folly::dynamic &updates,
|
|
324
|
+
bool shouldOverride) {
|
|
325
|
+
if (!updates.isObject()) {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
bool hasUpdates = false;
|
|
330
|
+
for (const auto &[propertyName, propertyValue] : updates.items()) {
|
|
331
|
+
if (shouldOverride || !target.count(propertyName) || target[propertyName].isNull()) {
|
|
332
|
+
target[propertyName] = propertyValue;
|
|
333
|
+
hasUpdates = true;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
return hasUpdates;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
} // namespace reanimated::css
|