From 228af03e71c3e73134c4d0f400ab8df2d795886d Mon Sep 17 00:00:00 2001 From: Bartlomiej Bloniarz Date: Fri, 21 Nov 2025 03:25:21 -0800 Subject: [PATCH] Extract cloneProp in animation backend (#54606) Summary: This diff extracts the `cloneProp` helper from `AnimationBackend::cloneProps` so the logic can be reused # Changelog [General] [Changed] - Extracted `cloneProp` from `AnimationBackend.cpp` to `AnimatedProps.h` Reviewed By: sammy-SC Differential Revision: D86414627 --- .../renderer/animationbackend/AnimatedProps.h | 35 +++++++++++++++++++ .../animationbackend/AnimationBackend.cpp | 29 +-------------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h index d65411a812c6..868a8611e8d6 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h @@ -33,8 +33,43 @@ T get(const std::unique_ptr &animatedProp) return static_cast *>(animatedProp.get())->value; } +template +T get(const AnimatedPropBase &animatedProp) +{ + return static_cast &>(animatedProp).value; +} + struct AnimatedProps { std::vector> props; std::unique_ptr rawProps; }; + +inline void cloneProp(BaseViewProps &viewProps, const AnimatedPropBase &animatedProp) +{ + switch (animatedProp.propName) { + case OPACITY: + viewProps.opacity = get(animatedProp); + break; + + case WIDTH: + viewProps.yogaStyle.setDimension(yoga::Dimension::Width, get(animatedProp)); + break; + + case HEIGHT: + viewProps.yogaStyle.setDimension(yoga::Dimension::Height, get(animatedProp)); + break; + + case BORDER_RADII: + viewProps.borderRadii = get(animatedProp); + break; + + case FLEX: + viewProps.yogaStyle.setFlex(get(animatedProp)); + break; + + case TRANSFORM: + viewProps.transform = get(animatedProp); + break; + } +} } // namespace facebook::react diff --git a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp index 6b49decc8cf2..8ab5f07ba973 100644 --- a/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +++ b/packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp @@ -41,34 +41,7 @@ static inline Props::Shared cloneProps( auto viewProps = std::const_pointer_cast( std::static_pointer_cast(newProps)); for (auto& animatedProp : animatedProps.props) { - switch (animatedProp->propName) { - case OPACITY: - viewProps->opacity = get(animatedProp); - break; - - case WIDTH: - viewProps->yogaStyle.setDimension( - yoga::Dimension::Width, get(animatedProp)); - break; - - case HEIGHT: - viewProps->yogaStyle.setDimension( - yoga::Dimension::Height, - get(animatedProp)); - break; - - case BORDER_RADII: - viewProps->borderRadii = get(animatedProp); - break; - - case FLEX: - viewProps->yogaStyle.setFlex(get(animatedProp)); - break; - - case TRANSFORM: - viewProps->transform = get(animatedProp); - break; - } + cloneProp(*viewProps, *animatedProp); } return newProps; }