@react-native-ohos/react-native-reanimated 4.0.1 → 4.0.2
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 +62 -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 +246 -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 +62 -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,368 +1,368 @@
|
|
|
1
|
-
#include <reanimated/CSS/common/transforms/TransformMatrix2D.h>
|
|
2
|
-
|
|
3
|
-
#include <cmath>
|
|
4
|
-
|
|
5
|
-
namespace reanimated::css {
|
|
6
|
-
|
|
7
|
-
TransformMatrix2D::TransformMatrix2D(jsi::Runtime &rt, const jsi::Value &value)
|
|
8
|
-
: TransformMatrixBase<TransformMatrix2D, MATRIX_2D_DIMENSION>() {
|
|
9
|
-
const auto &array = value.asObject(rt).asArray(rt);
|
|
10
|
-
const auto size = array.size(rt);
|
|
11
|
-
|
|
12
|
-
if (size == SIZE) {
|
|
13
|
-
// Direct 3x3 matrix
|
|
14
|
-
for (size_t i = 0; i < SIZE; ++i) {
|
|
15
|
-
matrix_[i] = array.getValueAtIndex(rt, i).asNumber();
|
|
16
|
-
}
|
|
17
|
-
} else if (size == 16) {
|
|
18
|
-
// Convert 4x4 matrix to 3x3
|
|
19
|
-
// (we should call canConstruct first to ensure that the matrix is
|
|
20
|
-
// convertible to 3x3)
|
|
21
|
-
//
|
|
22
|
-
// [m[0], m[1], 0, m[2]] [m[0], m[1], m[2]]
|
|
23
|
-
// [m[3], m[4], 0, m[5]] -> [m[3], m[4], m[5]]
|
|
24
|
-
// [ 0, 0, 1, 0] [m[6], m[7], m[8]]
|
|
25
|
-
// [m[6], m[7], 0, m[8]]
|
|
26
|
-
matrix_[0] = array.getValueAtIndex(rt, 0).asNumber();
|
|
27
|
-
matrix_[1] = array.getValueAtIndex(rt, 1).asNumber();
|
|
28
|
-
matrix_[2] = array.getValueAtIndex(rt, 3).asNumber();
|
|
29
|
-
matrix_[3] = array.getValueAtIndex(rt, 4).asNumber();
|
|
30
|
-
matrix_[4] = array.getValueAtIndex(rt, 5).asNumber();
|
|
31
|
-
matrix_[5] = array.getValueAtIndex(rt, 7).asNumber();
|
|
32
|
-
matrix_[6] = array.getValueAtIndex(rt, 12).asNumber();
|
|
33
|
-
matrix_[7] = array.getValueAtIndex(rt, 13).asNumber();
|
|
34
|
-
matrix_[8] = array.getValueAtIndex(rt, 15).asNumber();
|
|
35
|
-
} else {
|
|
36
|
-
throw std::invalid_argument("[Reanimated] TransformMatrix2D: Invalid matrix size: " + std::to_string(size));
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
TransformMatrix2D::TransformMatrix2D(const folly::dynamic &array)
|
|
41
|
-
: TransformMatrixBase<TransformMatrix2D, MATRIX_2D_DIMENSION>() {
|
|
42
|
-
const auto size = array.size();
|
|
43
|
-
|
|
44
|
-
if (size == SIZE) {
|
|
45
|
-
// Direct 3x3 matrix
|
|
46
|
-
for (size_t i = 0; i < SIZE; ++i) {
|
|
47
|
-
matrix_[i] = array[i].asDouble();
|
|
48
|
-
}
|
|
49
|
-
} else if (size == 16) {
|
|
50
|
-
// Convert 4x4 matrix to 3x3
|
|
51
|
-
// (we should call canConstruct first to ensure that the matrix is
|
|
52
|
-
// convertible to 3x3)
|
|
53
|
-
//
|
|
54
|
-
// [m[0], m[1], 0, m[2]] [m[0], m[1], m[2]]
|
|
55
|
-
// [m[3], m[4], 0, m[5]] -> [m[3], m[4], m[5]]
|
|
56
|
-
// [ 0, 0, 1, 0] [m[6], m[7], m[8]]
|
|
57
|
-
// [m[6], m[7], 0, m[8]]
|
|
58
|
-
matrix_[0] = array[0].asDouble();
|
|
59
|
-
matrix_[1] = array[1].asDouble();
|
|
60
|
-
matrix_[2] = array[3].asDouble();
|
|
61
|
-
matrix_[3] = array[4].asDouble();
|
|
62
|
-
matrix_[4] = array[5].asDouble();
|
|
63
|
-
matrix_[5] = array[7].asDouble();
|
|
64
|
-
matrix_[6] = array[12].asDouble();
|
|
65
|
-
matrix_[7] = array[13].asDouble();
|
|
66
|
-
matrix_[8] = array[15].asDouble();
|
|
67
|
-
} else {
|
|
68
|
-
throw std::invalid_argument("[Reanimated] TransformMatrix2D: Invalid matrix size: " + std::to_string(size));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
bool TransformMatrix2D::canConstruct(jsi::Runtime &rt, const jsi::Value &value) {
|
|
73
|
-
if (!value.isObject()) {
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const auto &obj = value.asObject(rt);
|
|
78
|
-
if (!obj.isArray(rt)) {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const auto &array = obj.asArray(rt);
|
|
83
|
-
const auto size = array.size(rt);
|
|
84
|
-
|
|
85
|
-
// Check if it's a 3x3 matrix (9 elements)
|
|
86
|
-
if (size == 9) {
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Check if it's a 4x4 matrix (16 elements) that can be converted to 2D
|
|
91
|
-
if (size == 16) {
|
|
92
|
-
// A 4x4 matrix can be converted to 2D if it has this pattern
|
|
93
|
-
// (where x means any number)
|
|
94
|
-
// [x, x, 0, x]
|
|
95
|
-
// [x, x, 0, x]
|
|
96
|
-
// [0, 0, 1, 0]
|
|
97
|
-
// [x, x, 0, x]
|
|
98
|
-
return array.getValueAtIndex(rt, 2).asNumber() == 0.0 && array.getValueAtIndex(rt, 6).asNumber() == 0.0 &&
|
|
99
|
-
array.getValueAtIndex(rt, 10).asNumber() == 1.0 && array.getValueAtIndex(rt, 11).asNumber() == 0.0 &&
|
|
100
|
-
array.getValueAtIndex(rt, 14).asNumber() == 0.0 && array.getValueAtIndex(rt, 15).asNumber() == 1.0;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
bool TransformMatrix2D::canConstruct(const folly::dynamic &array) {
|
|
107
|
-
if (!array.isArray()) {
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
const auto size = array.size();
|
|
111
|
-
|
|
112
|
-
// Check if it's a 3x3 matrix (9 elements)
|
|
113
|
-
if (size == 9) {
|
|
114
|
-
return true;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Check if it's a 4x4 matrix (16 elements) that can be converted to 2D
|
|
118
|
-
if (size == 16) {
|
|
119
|
-
// A 4x4 matrix can be converted to 2D if it has this pattern:
|
|
120
|
-
// (where x means any number)
|
|
121
|
-
// [x, x, 0, x]
|
|
122
|
-
// [x, x, 0, x]
|
|
123
|
-
// [0, 0, 1, 0]
|
|
124
|
-
// [x, x, 0, x]
|
|
125
|
-
return array[2].asDouble() == 0.0 && array[6].asDouble() == 0.0 && array[10].asDouble() == 1.0 &&
|
|
126
|
-
array[11].asDouble() == 0.0 && array[14].asDouble() == 0.0 && array[15].asDouble() == 1.0;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
TransformMatrix2D::Decomposed TransformMatrix2D::Decomposed::interpolate(
|
|
133
|
-
const double progress,
|
|
134
|
-
const TransformMatrix2D::Decomposed &target) const {
|
|
135
|
-
// Compute shortest signed angular delta (in range −π..π]
|
|
136
|
-
const double angleDelta = std::remainder(target.rotation - rotation, 2.0 * M_PI);
|
|
137
|
-
|
|
138
|
-
return {
|
|
139
|
-
.scale = scale.interpolate(progress, target.scale),
|
|
140
|
-
.skew = skew + (target.skew - skew) * progress,
|
|
141
|
-
.rotation = rotation + progress * angleDelta,
|
|
142
|
-
.translation = translation.interpolate(progress, target.translation),
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
#ifndef NDEBUG
|
|
147
|
-
|
|
148
|
-
std::ostream &operator<<(std::ostream &os, const TransformMatrix2D::Decomposed &decomposed) {
|
|
149
|
-
os << "TransformMatrix2D::Decomposed(scale=" << decomposed.scale << ", skew=" << decomposed.skew
|
|
150
|
-
<< ", rotation=" << decomposed.rotation << ", translation=" << decomposed.translation << ")";
|
|
151
|
-
return os;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
#endif // NDEBUG
|
|
155
|
-
|
|
156
|
-
template <>
|
|
157
|
-
TransformMatrix2D TransformMatrix2D::create<TransformOp::Rotate>(double v) {
|
|
158
|
-
const auto cosVal = std::cos(v);
|
|
159
|
-
const auto sinVal = std::sin(v);
|
|
160
|
-
// clang-format off
|
|
161
|
-
return TransformMatrix2D({
|
|
162
|
-
cosVal, sinVal, 0,
|
|
163
|
-
-sinVal, cosVal, 0,
|
|
164
|
-
0, 0, 1
|
|
165
|
-
});
|
|
166
|
-
// clang-format on
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
template <>
|
|
170
|
-
TransformMatrix2D TransformMatrix2D::create<TransformOp::Scale>(double v) {
|
|
171
|
-
// clang-format off
|
|
172
|
-
return TransformMatrix2D({
|
|
173
|
-
v, 0, 0,
|
|
174
|
-
0, v, 0,
|
|
175
|
-
0, 0, 1
|
|
176
|
-
});
|
|
177
|
-
// clang-format on
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
template <>
|
|
181
|
-
TransformMatrix2D TransformMatrix2D::create<TransformOp::ScaleX>(double v) {
|
|
182
|
-
// clang-format off
|
|
183
|
-
return TransformMatrix2D({
|
|
184
|
-
v, 0, 0,
|
|
185
|
-
0, 1, 0,
|
|
186
|
-
0, 0, 1
|
|
187
|
-
});
|
|
188
|
-
// clang-format on
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
template <>
|
|
192
|
-
TransformMatrix2D TransformMatrix2D::create<TransformOp::ScaleY>(double v) {
|
|
193
|
-
// clang-format off
|
|
194
|
-
return TransformMatrix2D({
|
|
195
|
-
1, 0, 0,
|
|
196
|
-
0, v, 0,
|
|
197
|
-
0, 0, 1
|
|
198
|
-
});
|
|
199
|
-
// clang-format on
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
template <>
|
|
203
|
-
TransformMatrix2D TransformMatrix2D::create<TransformOp::TranslateX>(double v) {
|
|
204
|
-
// clang-format off
|
|
205
|
-
return TransformMatrix2D({
|
|
206
|
-
1, 0, 0,
|
|
207
|
-
0, 1, 0,
|
|
208
|
-
v, 0, 1
|
|
209
|
-
});
|
|
210
|
-
// clang-format on
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
template <>
|
|
214
|
-
TransformMatrix2D TransformMatrix2D::create<TransformOp::TranslateY>(double v) {
|
|
215
|
-
// clang-format off
|
|
216
|
-
return TransformMatrix2D({
|
|
217
|
-
1, 0, 0,
|
|
218
|
-
0, 1, 0,
|
|
219
|
-
0, v, 1
|
|
220
|
-
});
|
|
221
|
-
// clang-format on
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
template <>
|
|
225
|
-
TransformMatrix2D TransformMatrix2D::create<TransformOp::SkewX>(double v) {
|
|
226
|
-
const auto tanVal = std::tan(v);
|
|
227
|
-
// clang-format off
|
|
228
|
-
return TransformMatrix2D({
|
|
229
|
-
1, 0, 0,
|
|
230
|
-
tanVal, 1, 0,
|
|
231
|
-
0, 0, 1
|
|
232
|
-
});
|
|
233
|
-
// clang-format on
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
template <>
|
|
237
|
-
TransformMatrix2D TransformMatrix2D::create<TransformOp::SkewY>(double v) {
|
|
238
|
-
const auto tanVal = std::tan(v);
|
|
239
|
-
// clang-format off
|
|
240
|
-
return TransformMatrix2D({
|
|
241
|
-
1, tanVal, 0,
|
|
242
|
-
0, 1, 0,
|
|
243
|
-
0, 0, 1
|
|
244
|
-
});
|
|
245
|
-
// clang-format on
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
template <TransformOp TOperation>
|
|
249
|
-
TransformMatrix2D TransformMatrix2D::create(double value) {
|
|
250
|
-
throw std::invalid_argument(
|
|
251
|
-
"[Reanimated] Cannot create TransformMatrix2D from: " + getTransformOperationName(TOperation));
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
double TransformMatrix2D::determinant() const {
|
|
255
|
-
return (matrix_[0] * matrix_[4] * matrix_[8]) + (matrix_[1] * matrix_[5] * matrix_[6]) +
|
|
256
|
-
(matrix_[2] * matrix_[3] * matrix_[7]) - (matrix_[2] * matrix_[4] * matrix_[6]) -
|
|
257
|
-
(matrix_[1] * matrix_[3] * matrix_[8]) - (matrix_[0] * matrix_[5] * matrix_[7]);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
void TransformMatrix2D::translate2d(const Vector2D &translation) {
|
|
261
|
-
for (size_t i = 0; i < 3; ++i) {
|
|
262
|
-
matrix_[6 + i] += translation[0] * matrix_[i] + translation[1] * matrix_[3 + i];
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
void TransformMatrix2D::scale2d(const Vector2D &scale) {
|
|
267
|
-
for (size_t i = 0; i < 3; ++i) {
|
|
268
|
-
matrix_[i] *= scale[0];
|
|
269
|
-
matrix_[3 + i] *= scale[1];
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
std::optional<TransformMatrix2D::Decomposed> TransformMatrix2D::decompose() const {
|
|
274
|
-
auto matrixCp = *this;
|
|
275
|
-
|
|
276
|
-
if (!matrixCp.normalize()) {
|
|
277
|
-
return std::nullopt;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
const auto translation = matrixCp.getTranslation();
|
|
281
|
-
|
|
282
|
-
// Take the 2×2 linear part into two column vectors
|
|
283
|
-
std::array<Vector2D, 2> rows;
|
|
284
|
-
for (size_t i = 0; i < 2; ++i) {
|
|
285
|
-
rows[i] = Vector2D(matrixCp[i * 3], matrixCp[i * 3 + 1]);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
auto [scale, skew] = computeScaleAndSkew(rows);
|
|
289
|
-
|
|
290
|
-
// At this point, the matrix (in rows) is orthonormal.
|
|
291
|
-
// Check for a coordinate system flip. If the determinant
|
|
292
|
-
// is negative, then negate the matrix and the scaling factors.
|
|
293
|
-
if (rows[0].cross(rows[1]) < 0) {
|
|
294
|
-
scale *= -1;
|
|
295
|
-
for (auto &row : rows) {
|
|
296
|
-
row *= -1;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
const auto rotation = computeRotation(rows);
|
|
301
|
-
|
|
302
|
-
return TransformMatrix2D::Decomposed{.scale = scale, .skew = skew, .rotation = rotation, .translation = translation};
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
TransformMatrix2D TransformMatrix2D::recompose(const TransformMatrix2D::Decomposed &decomposed) {
|
|
306
|
-
auto result = TransformMatrix2D();
|
|
307
|
-
|
|
308
|
-
// Apply Translation
|
|
309
|
-
result.translate2d(decomposed.translation);
|
|
310
|
-
|
|
311
|
-
// Apply Rotation
|
|
312
|
-
if (decomposed.rotation != 0) {
|
|
313
|
-
const auto rotationMatrix = TransformMatrix2D::create<TransformOp::Rotate>(decomposed.rotation);
|
|
314
|
-
result = rotationMatrix * result;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// Apply XY shear
|
|
318
|
-
if (decomposed.skew != 0) {
|
|
319
|
-
auto tmp = TransformMatrix2D();
|
|
320
|
-
tmp[3] = decomposed.skew;
|
|
321
|
-
result = tmp * result;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Apply Scale
|
|
325
|
-
result.scale2d(decomposed.scale);
|
|
326
|
-
|
|
327
|
-
return result;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
Vector2D TransformMatrix2D::getTranslation() const {
|
|
331
|
-
return Vector2D(matrix_[6], matrix_[7]);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
std::pair<Vector2D, double> TransformMatrix2D::computeScaleAndSkew(std::array<Vector2D, 2> &rows) {
|
|
335
|
-
Vector2D scale;
|
|
336
|
-
|
|
337
|
-
// Compute X scale and normalize first row
|
|
338
|
-
scale[0] = rows[0].length();
|
|
339
|
-
rows[0].normalize();
|
|
340
|
-
|
|
341
|
-
// Compute XY shear and orthogonalize second row against first
|
|
342
|
-
double skew = rows[0].dot(rows[1]);
|
|
343
|
-
rows[1] = rows[1].addScaled(rows[0], -skew);
|
|
344
|
-
|
|
345
|
-
// Now, compute Y scale and normalize second row
|
|
346
|
-
scale[1] = rows[1].length();
|
|
347
|
-
rows[1].normalize();
|
|
348
|
-
|
|
349
|
-
// Next, Normalize shear by Y scale
|
|
350
|
-
skew /= scale[1];
|
|
351
|
-
|
|
352
|
-
return {scale, skew};
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
double TransformMatrix2D::computeRotation(std::array<Vector2D, 2> &rows) {
|
|
356
|
-
// For 2D, we can compute rotation directly from the orthonormal matrix
|
|
357
|
-
// The rotation angle is atan2(m01, m00) where m01 is rows[0][1] and m00 is
|
|
358
|
-
// rows[0][0]
|
|
359
|
-
return std::atan2(rows[0][1], rows[0][0]);
|
|
360
|
-
}
|
|
361
|
-
// Explicit template instantiations for unsupported operations
|
|
362
|
-
// These will use the fallback template function that throws an error
|
|
363
|
-
template TransformMatrix2D TransformMatrix2D::create<TransformOp::Perspective>(double);
|
|
364
|
-
template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateX>(double);
|
|
365
|
-
template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateY>(double);
|
|
366
|
-
template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateZ>(double);
|
|
367
|
-
|
|
368
|
-
} // namespace reanimated::css
|
|
1
|
+
#include <reanimated/CSS/common/transforms/TransformMatrix2D.h>
|
|
2
|
+
|
|
3
|
+
#include <cmath>
|
|
4
|
+
|
|
5
|
+
namespace reanimated::css {
|
|
6
|
+
|
|
7
|
+
TransformMatrix2D::TransformMatrix2D(jsi::Runtime &rt, const jsi::Value &value)
|
|
8
|
+
: TransformMatrixBase<TransformMatrix2D, MATRIX_2D_DIMENSION>() {
|
|
9
|
+
const auto &array = value.asObject(rt).asArray(rt);
|
|
10
|
+
const auto size = array.size(rt);
|
|
11
|
+
|
|
12
|
+
if (size == SIZE) {
|
|
13
|
+
// Direct 3x3 matrix
|
|
14
|
+
for (size_t i = 0; i < SIZE; ++i) {
|
|
15
|
+
matrix_[i] = array.getValueAtIndex(rt, i).asNumber();
|
|
16
|
+
}
|
|
17
|
+
} else if (size == 16) {
|
|
18
|
+
// Convert 4x4 matrix to 3x3
|
|
19
|
+
// (we should call canConstruct first to ensure that the matrix is
|
|
20
|
+
// convertible to 3x3)
|
|
21
|
+
//
|
|
22
|
+
// [m[0], m[1], 0, m[2]] [m[0], m[1], m[2]]
|
|
23
|
+
// [m[3], m[4], 0, m[5]] -> [m[3], m[4], m[5]]
|
|
24
|
+
// [ 0, 0, 1, 0] [m[6], m[7], m[8]]
|
|
25
|
+
// [m[6], m[7], 0, m[8]]
|
|
26
|
+
matrix_[0] = array.getValueAtIndex(rt, 0).asNumber();
|
|
27
|
+
matrix_[1] = array.getValueAtIndex(rt, 1).asNumber();
|
|
28
|
+
matrix_[2] = array.getValueAtIndex(rt, 3).asNumber();
|
|
29
|
+
matrix_[3] = array.getValueAtIndex(rt, 4).asNumber();
|
|
30
|
+
matrix_[4] = array.getValueAtIndex(rt, 5).asNumber();
|
|
31
|
+
matrix_[5] = array.getValueAtIndex(rt, 7).asNumber();
|
|
32
|
+
matrix_[6] = array.getValueAtIndex(rt, 12).asNumber();
|
|
33
|
+
matrix_[7] = array.getValueAtIndex(rt, 13).asNumber();
|
|
34
|
+
matrix_[8] = array.getValueAtIndex(rt, 15).asNumber();
|
|
35
|
+
} else {
|
|
36
|
+
throw std::invalid_argument("[Reanimated] TransformMatrix2D: Invalid matrix size: " + std::to_string(size));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
TransformMatrix2D::TransformMatrix2D(const folly::dynamic &array)
|
|
41
|
+
: TransformMatrixBase<TransformMatrix2D, MATRIX_2D_DIMENSION>() {
|
|
42
|
+
const auto size = array.size();
|
|
43
|
+
|
|
44
|
+
if (size == SIZE) {
|
|
45
|
+
// Direct 3x3 matrix
|
|
46
|
+
for (size_t i = 0; i < SIZE; ++i) {
|
|
47
|
+
matrix_[i] = array[i].asDouble();
|
|
48
|
+
}
|
|
49
|
+
} else if (size == 16) {
|
|
50
|
+
// Convert 4x4 matrix to 3x3
|
|
51
|
+
// (we should call canConstruct first to ensure that the matrix is
|
|
52
|
+
// convertible to 3x3)
|
|
53
|
+
//
|
|
54
|
+
// [m[0], m[1], 0, m[2]] [m[0], m[1], m[2]]
|
|
55
|
+
// [m[3], m[4], 0, m[5]] -> [m[3], m[4], m[5]]
|
|
56
|
+
// [ 0, 0, 1, 0] [m[6], m[7], m[8]]
|
|
57
|
+
// [m[6], m[7], 0, m[8]]
|
|
58
|
+
matrix_[0] = array[0].asDouble();
|
|
59
|
+
matrix_[1] = array[1].asDouble();
|
|
60
|
+
matrix_[2] = array[3].asDouble();
|
|
61
|
+
matrix_[3] = array[4].asDouble();
|
|
62
|
+
matrix_[4] = array[5].asDouble();
|
|
63
|
+
matrix_[5] = array[7].asDouble();
|
|
64
|
+
matrix_[6] = array[12].asDouble();
|
|
65
|
+
matrix_[7] = array[13].asDouble();
|
|
66
|
+
matrix_[8] = array[15].asDouble();
|
|
67
|
+
} else {
|
|
68
|
+
throw std::invalid_argument("[Reanimated] TransformMatrix2D: Invalid matrix size: " + std::to_string(size));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
bool TransformMatrix2D::canConstruct(jsi::Runtime &rt, const jsi::Value &value) {
|
|
73
|
+
if (!value.isObject()) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const auto &obj = value.asObject(rt);
|
|
78
|
+
if (!obj.isArray(rt)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const auto &array = obj.asArray(rt);
|
|
83
|
+
const auto size = array.size(rt);
|
|
84
|
+
|
|
85
|
+
// Check if it's a 3x3 matrix (9 elements)
|
|
86
|
+
if (size == 9) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Check if it's a 4x4 matrix (16 elements) that can be converted to 2D
|
|
91
|
+
if (size == 16) {
|
|
92
|
+
// A 4x4 matrix can be converted to 2D if it has this pattern
|
|
93
|
+
// (where x means any number)
|
|
94
|
+
// [x, x, 0, x]
|
|
95
|
+
// [x, x, 0, x]
|
|
96
|
+
// [0, 0, 1, 0]
|
|
97
|
+
// [x, x, 0, x]
|
|
98
|
+
return array.getValueAtIndex(rt, 2).asNumber() == 0.0 && array.getValueAtIndex(rt, 6).asNumber() == 0.0 &&
|
|
99
|
+
array.getValueAtIndex(rt, 10).asNumber() == 1.0 && array.getValueAtIndex(rt, 11).asNumber() == 0.0 &&
|
|
100
|
+
array.getValueAtIndex(rt, 14).asNumber() == 0.0 && array.getValueAtIndex(rt, 15).asNumber() == 1.0;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
bool TransformMatrix2D::canConstruct(const folly::dynamic &array) {
|
|
107
|
+
if (!array.isArray()) {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
const auto size = array.size();
|
|
111
|
+
|
|
112
|
+
// Check if it's a 3x3 matrix (9 elements)
|
|
113
|
+
if (size == 9) {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Check if it's a 4x4 matrix (16 elements) that can be converted to 2D
|
|
118
|
+
if (size == 16) {
|
|
119
|
+
// A 4x4 matrix can be converted to 2D if it has this pattern:
|
|
120
|
+
// (where x means any number)
|
|
121
|
+
// [x, x, 0, x]
|
|
122
|
+
// [x, x, 0, x]
|
|
123
|
+
// [0, 0, 1, 0]
|
|
124
|
+
// [x, x, 0, x]
|
|
125
|
+
return array[2].asDouble() == 0.0 && array[6].asDouble() == 0.0 && array[10].asDouble() == 1.0 &&
|
|
126
|
+
array[11].asDouble() == 0.0 && array[14].asDouble() == 0.0 && array[15].asDouble() == 1.0;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
TransformMatrix2D::Decomposed TransformMatrix2D::Decomposed::interpolate(
|
|
133
|
+
const double progress,
|
|
134
|
+
const TransformMatrix2D::Decomposed &target) const {
|
|
135
|
+
// Compute shortest signed angular delta (in range −π..π]
|
|
136
|
+
const double angleDelta = std::remainder(target.rotation - rotation, 2.0 * M_PI);
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
.scale = scale.interpolate(progress, target.scale),
|
|
140
|
+
.skew = skew + (target.skew - skew) * progress,
|
|
141
|
+
.rotation = rotation + progress * angleDelta,
|
|
142
|
+
.translation = translation.interpolate(progress, target.translation),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
#ifndef NDEBUG
|
|
147
|
+
|
|
148
|
+
std::ostream &operator<<(std::ostream &os, const TransformMatrix2D::Decomposed &decomposed) {
|
|
149
|
+
os << "TransformMatrix2D::Decomposed(scale=" << decomposed.scale << ", skew=" << decomposed.skew
|
|
150
|
+
<< ", rotation=" << decomposed.rotation << ", translation=" << decomposed.translation << ")";
|
|
151
|
+
return os;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
#endif // NDEBUG
|
|
155
|
+
|
|
156
|
+
template <>
|
|
157
|
+
TransformMatrix2D TransformMatrix2D::create<TransformOp::Rotate>(double v) {
|
|
158
|
+
const auto cosVal = std::cos(v);
|
|
159
|
+
const auto sinVal = std::sin(v);
|
|
160
|
+
// clang-format off
|
|
161
|
+
return TransformMatrix2D({
|
|
162
|
+
cosVal, sinVal, 0,
|
|
163
|
+
-sinVal, cosVal, 0,
|
|
164
|
+
0, 0, 1
|
|
165
|
+
});
|
|
166
|
+
// clang-format on
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
template <>
|
|
170
|
+
TransformMatrix2D TransformMatrix2D::create<TransformOp::Scale>(double v) {
|
|
171
|
+
// clang-format off
|
|
172
|
+
return TransformMatrix2D({
|
|
173
|
+
v, 0, 0,
|
|
174
|
+
0, v, 0,
|
|
175
|
+
0, 0, 1
|
|
176
|
+
});
|
|
177
|
+
// clang-format on
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
template <>
|
|
181
|
+
TransformMatrix2D TransformMatrix2D::create<TransformOp::ScaleX>(double v) {
|
|
182
|
+
// clang-format off
|
|
183
|
+
return TransformMatrix2D({
|
|
184
|
+
v, 0, 0,
|
|
185
|
+
0, 1, 0,
|
|
186
|
+
0, 0, 1
|
|
187
|
+
});
|
|
188
|
+
// clang-format on
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
template <>
|
|
192
|
+
TransformMatrix2D TransformMatrix2D::create<TransformOp::ScaleY>(double v) {
|
|
193
|
+
// clang-format off
|
|
194
|
+
return TransformMatrix2D({
|
|
195
|
+
1, 0, 0,
|
|
196
|
+
0, v, 0,
|
|
197
|
+
0, 0, 1
|
|
198
|
+
});
|
|
199
|
+
// clang-format on
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
template <>
|
|
203
|
+
TransformMatrix2D TransformMatrix2D::create<TransformOp::TranslateX>(double v) {
|
|
204
|
+
// clang-format off
|
|
205
|
+
return TransformMatrix2D({
|
|
206
|
+
1, 0, 0,
|
|
207
|
+
0, 1, 0,
|
|
208
|
+
v, 0, 1
|
|
209
|
+
});
|
|
210
|
+
// clang-format on
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
template <>
|
|
214
|
+
TransformMatrix2D TransformMatrix2D::create<TransformOp::TranslateY>(double v) {
|
|
215
|
+
// clang-format off
|
|
216
|
+
return TransformMatrix2D({
|
|
217
|
+
1, 0, 0,
|
|
218
|
+
0, 1, 0,
|
|
219
|
+
0, v, 1
|
|
220
|
+
});
|
|
221
|
+
// clang-format on
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
template <>
|
|
225
|
+
TransformMatrix2D TransformMatrix2D::create<TransformOp::SkewX>(double v) {
|
|
226
|
+
const auto tanVal = std::tan(v);
|
|
227
|
+
// clang-format off
|
|
228
|
+
return TransformMatrix2D({
|
|
229
|
+
1, 0, 0,
|
|
230
|
+
tanVal, 1, 0,
|
|
231
|
+
0, 0, 1
|
|
232
|
+
});
|
|
233
|
+
// clang-format on
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
template <>
|
|
237
|
+
TransformMatrix2D TransformMatrix2D::create<TransformOp::SkewY>(double v) {
|
|
238
|
+
const auto tanVal = std::tan(v);
|
|
239
|
+
// clang-format off
|
|
240
|
+
return TransformMatrix2D({
|
|
241
|
+
1, tanVal, 0,
|
|
242
|
+
0, 1, 0,
|
|
243
|
+
0, 0, 1
|
|
244
|
+
});
|
|
245
|
+
// clang-format on
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
template <TransformOp TOperation>
|
|
249
|
+
TransformMatrix2D TransformMatrix2D::create(double value) {
|
|
250
|
+
throw std::invalid_argument(
|
|
251
|
+
"[Reanimated] Cannot create TransformMatrix2D from: " + getTransformOperationName(TOperation));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
double TransformMatrix2D::determinant() const {
|
|
255
|
+
return (matrix_[0] * matrix_[4] * matrix_[8]) + (matrix_[1] * matrix_[5] * matrix_[6]) +
|
|
256
|
+
(matrix_[2] * matrix_[3] * matrix_[7]) - (matrix_[2] * matrix_[4] * matrix_[6]) -
|
|
257
|
+
(matrix_[1] * matrix_[3] * matrix_[8]) - (matrix_[0] * matrix_[5] * matrix_[7]);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
void TransformMatrix2D::translate2d(const Vector2D &translation) {
|
|
261
|
+
for (size_t i = 0; i < 3; ++i) {
|
|
262
|
+
matrix_[6 + i] += translation[0] * matrix_[i] + translation[1] * matrix_[3 + i];
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
void TransformMatrix2D::scale2d(const Vector2D &scale) {
|
|
267
|
+
for (size_t i = 0; i < 3; ++i) {
|
|
268
|
+
matrix_[i] *= scale[0];
|
|
269
|
+
matrix_[3 + i] *= scale[1];
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
std::optional<TransformMatrix2D::Decomposed> TransformMatrix2D::decompose() const {
|
|
274
|
+
auto matrixCp = *this;
|
|
275
|
+
|
|
276
|
+
if (!matrixCp.normalize()) {
|
|
277
|
+
return std::nullopt;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const auto translation = matrixCp.getTranslation();
|
|
281
|
+
|
|
282
|
+
// Take the 2×2 linear part into two column vectors
|
|
283
|
+
std::array<Vector2D, 2> rows;
|
|
284
|
+
for (size_t i = 0; i < 2; ++i) {
|
|
285
|
+
rows[i] = Vector2D(matrixCp[i * 3], matrixCp[i * 3 + 1]);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
auto [scale, skew] = computeScaleAndSkew(rows);
|
|
289
|
+
|
|
290
|
+
// At this point, the matrix (in rows) is orthonormal.
|
|
291
|
+
// Check for a coordinate system flip. If the determinant
|
|
292
|
+
// is negative, then negate the matrix and the scaling factors.
|
|
293
|
+
if (rows[0].cross(rows[1]) < 0) {
|
|
294
|
+
scale *= -1;
|
|
295
|
+
for (auto &row : rows) {
|
|
296
|
+
row *= -1;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
const auto rotation = computeRotation(rows);
|
|
301
|
+
|
|
302
|
+
return TransformMatrix2D::Decomposed{.scale = scale, .skew = skew, .rotation = rotation, .translation = translation};
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
TransformMatrix2D TransformMatrix2D::recompose(const TransformMatrix2D::Decomposed &decomposed) {
|
|
306
|
+
auto result = TransformMatrix2D();
|
|
307
|
+
|
|
308
|
+
// Apply Translation
|
|
309
|
+
result.translate2d(decomposed.translation);
|
|
310
|
+
|
|
311
|
+
// Apply Rotation
|
|
312
|
+
if (decomposed.rotation != 0) {
|
|
313
|
+
const auto rotationMatrix = TransformMatrix2D::create<TransformOp::Rotate>(decomposed.rotation);
|
|
314
|
+
result = rotationMatrix * result;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
// Apply XY shear
|
|
318
|
+
if (decomposed.skew != 0) {
|
|
319
|
+
auto tmp = TransformMatrix2D();
|
|
320
|
+
tmp[3] = decomposed.skew;
|
|
321
|
+
result = tmp * result;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// Apply Scale
|
|
325
|
+
result.scale2d(decomposed.scale);
|
|
326
|
+
|
|
327
|
+
return result;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
Vector2D TransformMatrix2D::getTranslation() const {
|
|
331
|
+
return Vector2D(matrix_[6], matrix_[7]);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
std::pair<Vector2D, double> TransformMatrix2D::computeScaleAndSkew(std::array<Vector2D, 2> &rows) {
|
|
335
|
+
Vector2D scale;
|
|
336
|
+
|
|
337
|
+
// Compute X scale and normalize first row
|
|
338
|
+
scale[0] = rows[0].length();
|
|
339
|
+
rows[0].normalize();
|
|
340
|
+
|
|
341
|
+
// Compute XY shear and orthogonalize second row against first
|
|
342
|
+
double skew = rows[0].dot(rows[1]);
|
|
343
|
+
rows[1] = rows[1].addScaled(rows[0], -skew);
|
|
344
|
+
|
|
345
|
+
// Now, compute Y scale and normalize second row
|
|
346
|
+
scale[1] = rows[1].length();
|
|
347
|
+
rows[1].normalize();
|
|
348
|
+
|
|
349
|
+
// Next, Normalize shear by Y scale
|
|
350
|
+
skew /= scale[1];
|
|
351
|
+
|
|
352
|
+
return {scale, skew};
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
double TransformMatrix2D::computeRotation(std::array<Vector2D, 2> &rows) {
|
|
356
|
+
// For 2D, we can compute rotation directly from the orthonormal matrix
|
|
357
|
+
// The rotation angle is atan2(m01, m00) where m01 is rows[0][1] and m00 is
|
|
358
|
+
// rows[0][0]
|
|
359
|
+
return std::atan2(rows[0][1], rows[0][0]);
|
|
360
|
+
}
|
|
361
|
+
// Explicit template instantiations for unsupported operations
|
|
362
|
+
// These will use the fallback template function that throws an error
|
|
363
|
+
template TransformMatrix2D TransformMatrix2D::create<TransformOp::Perspective>(double);
|
|
364
|
+
template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateX>(double);
|
|
365
|
+
template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateY>(double);
|
|
366
|
+
template TransformMatrix2D TransformMatrix2D::create<TransformOp::RotateZ>(double);
|
|
367
|
+
|
|
368
|
+
} // namespace reanimated::css
|