Skip to content

Commit 3a3a648

Browse files
zeyapmeta-codesync[bot]
authored andcommitted
Reduce old pseudo element shadownode cloning (#56843)
Summary: Pull Request resolved: #56843 ## Changelog: [Internal] [Changed] - [viewtransition] Reduce old pseudo element shadownode cloning Reviewed By: christophpurrer Differential Revision: D105214320 fbshipit-source-id: 8a4ad1c8ba6a26a0c9931108049fa3975f534322
1 parent 29a7691 commit 3a3a648

1 file changed

Lines changed: 17 additions & 24 deletions

File tree

packages/react-native/ReactCommon/react/renderer/viewtransition/ViewTransitionModule.cpp

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,19 @@
1717

1818
namespace facebook::react {
1919

20+
namespace {
21+
22+
RawProps makePseudoElementRawProps(
23+
const ViewTransitionModule::AnimationKeyFrameViewLayoutMetrics& metrics) {
24+
return RawProps(
25+
folly::dynamic::object("position", "absolute")(
26+
"left", metrics.originFromRoot.x)("top", metrics.originFromRoot.y)(
27+
"width", metrics.size.width)("height", metrics.size.height)(
28+
"pointerEvents", "none")("opacity", 0)("collapsable", false));
29+
}
30+
31+
} // namespace
32+
2033
ViewTransitionModule::~ViewTransitionModule() {
2134
if (uiManager_ != nullptr) {
2235
if (uiManager_->getViewTransitionDelegate() == this) {
@@ -109,13 +122,7 @@ void ViewTransitionModule::applyViewTransitionName(
109122
keyframeMetrics.originFromRoot.y ||
110123
cachedMetrics.size.width != keyframeMetrics.size.width ||
111124
cachedMetrics.size.height != keyframeMetrics.size.height) {
112-
auto updatedRawProps = RawProps(
113-
folly::dynamic::object("left", keyframeMetrics.originFromRoot.x)(
114-
"top", keyframeMetrics.originFromRoot.y)(
115-
"width", keyframeMetrics.size.width)(
116-
"height", keyframeMetrics.size.height)(
117-
"pointerEvents", "none")("opacity", 0)("collapsable", false)(
118-
"position", "absolute"));
125+
auto updatedRawProps = makePseudoElementRawProps(keyframeMetrics);
119126

120127
auto updatedNode = uiManager_->cloneNode(
121128
*innerIt->second.node,
@@ -171,31 +178,17 @@ void ViewTransitionModule::createViewTransitionInstance(
171178

172179
// Build props: absolute position matching old element, non-interactive
173180
if (pseudoElementTag > 0 && view.tag > 0) {
174-
// Create a base node with layout props via createNode
175181
// TODO: T262559684 created dedicated shadow node type for old pseudo
176182
// element
177-
auto rawProps = RawProps(
178-
folly::dynamic::object("position", "absolute")(
179-
"left", view.layoutMetrics.originFromRoot.x)(
180-
"top", view.layoutMetrics.originFromRoot.y)(
181-
"width", view.layoutMetrics.size.width)(
182-
"height", view.layoutMetrics.size.height)("pointerEvents", "none")(
183-
"opacity", 0)("collapsable", false));
184-
185-
auto baseNode = uiManager_->createNode(
183+
auto rawProps = makePseudoElementRawProps(view.layoutMetrics);
184+
185+
auto pseudoElementNode = uiManager_->createNode(
186186
pseudoElementTag,
187187
"View",
188188
view.surfaceId,
189189
std::move(rawProps),
190190
nullptr /* instanceHandle */);
191191

192-
if (baseNode == nullptr) {
193-
return;
194-
}
195-
196-
// Clone the shadow node — bitmap will be set by platform
197-
auto pseudoElementNode = baseNode->clone({});
198-
199192
if (pseudoElementNode != nullptr) {
200193
if (!forNextTransition) {
201194
oldPseudoElementNodes_[name] = pseudoElementNode;

0 commit comments

Comments
 (0)