Skip to content

Commit 228af03

Browse files
Bartlomiej Bloniarzfacebook-github-bot
authored andcommitted
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
1 parent 2bbb104 commit 228af03

File tree

2 files changed

+36
-28
lines changed

2 files changed

+36
-28
lines changed

packages/react-native/ReactCommon/react/renderer/animationbackend/AnimatedProps.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,43 @@ T get(const std::unique_ptr<AnimatedPropBase> &animatedProp)
3333
return static_cast<AnimatedProp<T> *>(animatedProp.get())->value;
3434
}
3535

36+
template <typename T>
37+
T get(const AnimatedPropBase &animatedProp)
38+
{
39+
return static_cast<const AnimatedProp<T> &>(animatedProp).value;
40+
}
41+
3642
struct AnimatedProps {
3743
std::vector<std::unique_ptr<AnimatedPropBase>> props;
3844
std::unique_ptr<RawProps> rawProps;
3945
};
46+
47+
inline void cloneProp(BaseViewProps &viewProps, const AnimatedPropBase &animatedProp)
48+
{
49+
switch (animatedProp.propName) {
50+
case OPACITY:
51+
viewProps.opacity = get<Float>(animatedProp);
52+
break;
53+
54+
case WIDTH:
55+
viewProps.yogaStyle.setDimension(yoga::Dimension::Width, get<yoga::Style::SizeLength>(animatedProp));
56+
break;
57+
58+
case HEIGHT:
59+
viewProps.yogaStyle.setDimension(yoga::Dimension::Height, get<yoga::Style::SizeLength>(animatedProp));
60+
break;
61+
62+
case BORDER_RADII:
63+
viewProps.borderRadii = get<CascadedBorderRadii>(animatedProp);
64+
break;
65+
66+
case FLEX:
67+
viewProps.yogaStyle.setFlex(get<yoga::FloatOptional>(animatedProp));
68+
break;
69+
70+
case TRANSFORM:
71+
viewProps.transform = get<Transform>(animatedProp);
72+
break;
73+
}
74+
}
4075
} // namespace facebook::react

packages/react-native/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -41,34 +41,7 @@ static inline Props::Shared cloneProps(
4141
auto viewProps = std::const_pointer_cast<BaseViewProps>(
4242
std::static_pointer_cast<const BaseViewProps>(newProps));
4343
for (auto& animatedProp : animatedProps.props) {
44-
switch (animatedProp->propName) {
45-
case OPACITY:
46-
viewProps->opacity = get<Float>(animatedProp);
47-
break;
48-
49-
case WIDTH:
50-
viewProps->yogaStyle.setDimension(
51-
yoga::Dimension::Width, get<yoga::Style::SizeLength>(animatedProp));
52-
break;
53-
54-
case HEIGHT:
55-
viewProps->yogaStyle.setDimension(
56-
yoga::Dimension::Height,
57-
get<yoga::Style::SizeLength>(animatedProp));
58-
break;
59-
60-
case BORDER_RADII:
61-
viewProps->borderRadii = get<CascadedBorderRadii>(animatedProp);
62-
break;
63-
64-
case FLEX:
65-
viewProps->yogaStyle.setFlex(get<yoga::FloatOptional>(animatedProp));
66-
break;
67-
68-
case TRANSFORM:
69-
viewProps->transform = get<Transform>(animatedProp);
70-
break;
71-
}
44+
cloneProp(*viewProps, *animatedProp);
7245
}
7346
return newProps;
7447
}

0 commit comments

Comments
 (0)