Skip to content

Commit 785102b

Browse files
Cleanup animatedprops
1 parent c21c1bb commit 785102b

3 files changed

Lines changed: 33 additions & 81 deletions

File tree

packages/react-native/ReactCommon/AnimatedProps.h

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -15,50 +15,28 @@ enum PropName{
1515
WIDTH,
1616
HEIGHT,
1717
BORDER_RADII,
18-
FLEX
18+
FLEX,
19+
TRANSFORM
1920
};
2021

21-
//struct DynamicPropsWrapper = std::variant<>;
22-
23-
union AnimatedPropUnion{
24-
Float float_{0};
25-
yoga::FloatOptional floatOptional_;
26-
yoga::StyleSizeLength styleSizeLength_;
27-
CascadedBorderRadii* borderRadii_;
28-
};
29-
static_assert(sizeof(AnimatedPropUnion) <= 8, "");
30-
31-
32-
struct AnimatedProp{
33-
PropName propName;
34-
AnimatedPropUnion value;
35-
};
36-
static_assert(sizeof(AnimatedProp) <= 16, "");
37-
38-
struct AnimatedProps{
39-
std::vector<AnimatedProp> props;
40-
folly::dynamic d;
41-
// RawProps rest;
42-
};
43-
44-
struct AnimatedProp2Base{
22+
struct AnimatedPropBase{
4523
PropName propName;
4624
};
4725

4826
template <typename T>
49-
struct AnimatedProp2: AnimatedProp2Base{
27+
struct AnimatedProp: AnimatedPropBase{
5028
T value;
51-
AnimatedProp2() = default;
52-
AnimatedProp2(PropName propName, T value): AnimatedProp2Base{propName}, value(value) {}
29+
AnimatedProp() = default;
30+
AnimatedProp(PropName propName, T value): AnimatedPropBase{propName}, value(value) {}
5331
};
5432

5533
template <typename T>
56-
T get(std::unique_ptr<AnimatedProp2Base>& animatedProp){
57-
return std::static_pointer_cast<AnimatedProp2<T>>(animatedProp).value;
34+
T get(const std::unique_ptr<AnimatedPropBase>& animatedProp){
35+
return static_cast<AnimatedProp<T>*>(animatedProp.get())->value;
5836
}
5937

60-
struct AnimatedProps2{
61-
std::vector<std::unique_ptr<AnimatedProp2Base>> props;
38+
struct AnimatedProps{
39+
std::vector<std::unique_ptr<AnimatedPropBase>> props;
6240
// std::unique_ptr<RawProps> rest;
6341
};
6442
}

packages/react-native/ReactCommon/AnimatedPropsBuilder.h

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -12,56 +12,30 @@
1212
namespace facebook::react {
1313

1414
struct AnimatedPropsBuilder{
15-
folly::dynamic dyn;
16-
std::vector<AnimatedProp> props;
15+
std::vector<std::unique_ptr<AnimatedPropBase>> props;
1716
void setOpacity(Float value){
18-
props.push_back({OPACITY, {.float_ = value}});
17+
props.push_back(std::make_unique<AnimatedProp<Float>>(OPACITY, value));
1918
}
2019
void setWidth(yoga::Style::SizeLength value){
21-
props.push_back({WIDTH, {.styleSizeLength_ = value}});
20+
props.push_back(std::make_unique<AnimatedProp<yoga::Style::SizeLength>>(WIDTH, value));
2221
}
2322
void setHeight(yoga::Style::SizeLength value){
24-
props.push_back({HEIGHT, {.styleSizeLength_ = value}});
25-
}
26-
void setBorderRadii(CascadedBorderRadii& borderRadii){
27-
//ugly
28-
props.push_back({BORDER_RADII, {.borderRadii_ = &borderRadii}});
29-
}
30-
void storeDynamic(folly::dynamic& d){
31-
dyn = std::move(d);
32-
}
33-
void storeJSI(jsi::Runtime& runtime, jsi::Value& value){
34-
// animatedProps.rest = std::make_unique<RawProps>(runtime, value);
35-
}
36-
AnimatedProps get(){
37-
// return std::move(animatedProps);
38-
return AnimatedProps{std::move(props), std::move(dyn)};
39-
}
40-
};
41-
42-
struct AnimatedPropsBuilder2{
43-
std::vector<std::unique_ptr<AnimatedProp2Base>> props;
44-
void setOpacity(Float value){
45-
// AnimatedProp2<Float> a;
46-
props.push_back(std::make_unique<AnimatedProp2<Float>>(OPACITY, value));
47-
}
48-
void setWidth(yoga::Style::SizeLength value){
49-
props.push_back(std::make_unique<AnimatedProp2<yoga::Style::SizeLength>>(WIDTH, value));
50-
}
51-
void setHeight(yoga::Style::SizeLength value){
52-
props.push_back(std::make_unique<AnimatedProp2<yoga::Style::SizeLength>>(HEIGHT, value));
23+
props.push_back(std::make_unique<AnimatedProp<yoga::Style::SizeLength>>(HEIGHT, value));
5324
}
5425
void setBorderRadii(CascadedBorderRadii& value){
55-
props.push_back(std::make_unique<AnimatedProp2<CascadedBorderRadii>>(BORDER_RADII, value));
26+
props.push_back(std::make_unique<AnimatedProp<CascadedBorderRadii>>(BORDER_RADII, value));
27+
}
28+
void setTransform(Transform& t){
29+
props.push_back(std::make_unique<AnimatedProp<Transform>>(TRANSFORM, std::move(t)));
5630
}
5731
void storeDynamic(folly::dynamic& d){
5832
// animatedProps.rest = std::make_unique<RawProps>(std::move(d));
5933
}
6034
void storeJSI(jsi::Runtime& runtime, jsi::Value& value){
6135
// animatedProps.rest = std::make_unique<RawProps>(runtime, value);
6236
}
63-
AnimatedProps2 get(){
64-
return AnimatedProps2{std::move(props)};
37+
AnimatedProps get(){
38+
return AnimatedProps{std::move(props)};
6539
}
6640
};
6741

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,44 +33,44 @@ void AnimationBackend::onAnimationFrame(double timestamp) {
3333
}
3434
}
3535
// fabricCommitCallback_(updates);
36-
uiManager_->getShadowTreeRegistry().enumerate([this, families, updates](const ShadowTree& shadowTree, bool& stop){
37-
shadowTree.commit([this, families, updates](const RootShadowNode& oldRootShadowNode){
36+
uiManager_->getShadowTreeRegistry().enumerate([this, families, &updates](const ShadowTree& shadowTree, bool& stop){
37+
shadowTree.commit([this, families, &updates](const RootShadowNode& oldRootShadowNode){
3838

39-
return std::static_pointer_cast<RootShadowNode>(oldRootShadowNode.cloneMultiple(families, [this, families, updates](const ShadowNode &shadowNode, const ShadowNodeFragment &fragment){
39+
return std::static_pointer_cast<RootShadowNode>(oldRootShadowNode.cloneMultiple(families, [this, families, &updates](const ShadowNode &shadowNode, const ShadowNodeFragment &fragment){
4040
PropsParserContext propsParserContext{
4141
shadowNode.getSurfaceId(), *shadowNode.getContextContainer()};
4242
auto newProps = shadowNode.getComponentDescriptor().cloneProps(propsParserContext, shadowNode.getProps(), {});
4343
auto viewProps = std::const_pointer_cast<BaseViewProps>(std::static_pointer_cast<const BaseViewProps>(newProps));
4444
for (auto& animatedProp: updates.at(shadowNode.getTag()).props){
45-
switch (animatedProp.propName) {
45+
switch (animatedProp->propName) {
4646
case OPACITY:
47-
viewProps->opacity = animatedProp.value.float_;
47+
viewProps->opacity = get<Float>(animatedProp);
4848
break;
4949

5050
case WIDTH:
51-
viewProps->yogaStyle.setDimension(yoga::Dimension::Width, animatedProp.value.styleSizeLength_);
51+
viewProps->yogaStyle.setDimension(yoga::Dimension::Width, get<yoga::Style::SizeLength>(animatedProp));
5252
break;
5353

5454
case HEIGHT:
55-
viewProps->yogaStyle.setDimension(yoga::Dimension::Height, animatedProp.value.styleSizeLength_);
55+
viewProps->yogaStyle.setDimension(yoga::Dimension::Height, get<yoga::Style::SizeLength>(animatedProp));
5656
break;
5757

5858
case BORDER_RADII:
59-
viewProps->borderRadii = std::move(*animatedProp.value.borderRadii_);
60-
// delete animatedProp.value.borderRadii_;
59+
viewProps->borderRadii = get<CascadedBorderRadii>(animatedProp);
6160
break;
6261

6362
case FLEX:
64-
viewProps->yogaStyle.setFlex(animatedProp.value.floatOptional_);
63+
viewProps->yogaStyle.setFlex(get<yoga::FloatOptional>(animatedProp));
64+
break;
65+
66+
case TRANSFORM:
67+
viewProps->transform = get<Transform>(animatedProp);
6568
break;
6669

6770
default:
6871
break;
6972
}
7073
}
71-
// viewProps->opacity = updates.at(shadowNode.getTag()).opacity;
72-
// viewProps->yogaStyle.dimensions_
73-
// viewProps->yogaStyle.setDimension(yoga::Dimension::Height, yoga::StyleSizeLength::points(updates.at(shadowNode.getTag()).height));
7474
return shadowNode.clone({newProps, fragment.children, shadowNode.getState()});
7575
}));
7676
}, {.mountSynchronously = true});

0 commit comments

Comments
 (0)