Skip to content

Commit 0dd7aad

Browse files
coadofabriziocucci
authored andcommitted
Add transformOrigin prop support to the AnimationBackend. (#55203)
Summary: Pull Request resolved: #55203 Adds `transformOrigin` prop support to the `AnimationBackend`. ## Changelog: [General][Added] - Added `transformOrigin` prop support to the `AnimationBackend`. Reviewed By: zeyap Differential Revision: D90851823 fbshipit-source-id: bd1ca8807ad695182879bfb2615a3ff417bba608
1 parent aeed939 commit 0dd7aad

4 files changed

Lines changed: 47 additions & 2 deletions

File tree

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,34 @@ void packTransform(folly::dynamic& dyn, const AnimatedPropBase& animatedProp) {
7474
folly::dynamic::array(folly::dynamic::object("matrix", matrixArray)));
7575
}
7676

77+
std::string unitTypeToString(UnitType unit) {
78+
switch (unit) {
79+
case UnitType::Undefined:
80+
return "undefined";
81+
case UnitType::Point:
82+
return "point";
83+
case UnitType::Percent:
84+
return "percent";
85+
default:
86+
throw std::runtime_error("Unknown unit type");
87+
}
88+
}
89+
90+
void packTransformOrigin(
91+
folly::dynamic& dyn,
92+
const AnimatedPropBase& animatedProp) {
93+
const auto& transformOrigin = get<TransformOrigin>(animatedProp);
94+
auto originArray = folly::dynamic::array();
95+
for (const auto& xyValue : transformOrigin.xy) {
96+
folly::dynamic valueObj = folly::dynamic::object();
97+
valueObj["value"] = xyValue.value;
98+
valueObj["unit"] = unitTypeToString(xyValue.unit);
99+
originArray.push_back(valueObj);
100+
}
101+
originArray.push_back(transformOrigin.z);
102+
dyn.insert("transformOrigin", originArray);
103+
}
104+
77105
void packBackgroundColor(
78106
folly::dynamic& dyn,
79107
const AnimatedPropBase& animatedProp) {
@@ -550,6 +578,10 @@ void packAnimatedProp(
550578
packTransform(dyn, *animatedProp);
551579
break;
552580

581+
case TRANSFORM_ORIGIN:
582+
packTransformOrigin(dyn, *animatedProp);
583+
break;
584+
553585
case BACKGROUND_COLOR:
554586
packBackgroundColor(dyn, *animatedProp);
555587
break;

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ enum PropName {
2424
POSITION,
2525
FLEX,
2626
TRANSFORM,
27+
TRANSFORM_ORIGIN,
2728
BACKGROUND_COLOR,
2829
SHADOW_COLOR,
2930
SHADOW_OFFSET,
@@ -255,6 +256,10 @@ inline void cloneProp(BaseViewProps &viewProps, const AnimatedPropBase &animated
255256
viewProps.transform = get<Transform>(animatedProp);
256257
break;
257258

259+
case TRANSFORM_ORIGIN:
260+
viewProps.transformOrigin = get<TransformOrigin>(animatedProp);
261+
break;
262+
258263
case BACKGROUND_COLOR:
259264
viewProps.backgroundColor = get<SharedColor>(animatedProp);
260265
break;

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,13 @@ struct AnimatedPropsBuilder {
5656
{
5757
props.push_back(std::make_unique<AnimatedProp<yoga::FloatOptional>>(FLEX, value));
5858
}
59-
void setTransform(Transform &t)
59+
void setTransform(const Transform &t)
6060
{
61-
props.push_back(std::make_unique<AnimatedProp<Transform>>(TRANSFORM, std::move(t)));
61+
props.push_back(std::make_unique<AnimatedProp<Transform>>(TRANSFORM, t));
62+
}
63+
void setTransformOrigin(const TransformOrigin &value)
64+
{
65+
props.push_back(std::make_unique<AnimatedProp<TransformOrigin>>(TRANSFORM_ORIGIN, value));
6266
}
6367
void setBackgroundColor(SharedColor value)
6468
{

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ inline void updateProp(const PropName propName, BaseViewProps &viewProps, const
6868
viewProps.transform = snapshot.props.transform;
6969
break;
7070

71+
case TRANSFORM_ORIGIN:
72+
viewProps.transformOrigin = snapshot.props.transformOrigin;
73+
break;
74+
7175
case BORDER_RADII:
7276
viewProps.borderRadii = snapshot.props.borderRadii;
7377
break;

0 commit comments

Comments
 (0)