1818
1919namespace facebook ::react {
2020
21- UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl (
22- std::weak_ptr<NativeAnimatedNodesManager> nativeAnimatedNodesManager)
23- : nativeAnimatedNodesManager_(std::move(nativeAnimatedNodesManager)) {}
21+ UIManagerNativeAnimatedDelegateImpl::UIManagerNativeAnimatedDelegateImpl () {}
2422
2523void UIManagerNativeAnimatedDelegateImpl::runAnimationFrame () {
2624 if (auto nativeAnimatedNodesManagerStrong =
@@ -30,8 +28,8 @@ void UIManagerNativeAnimatedDelegateImpl::runAnimationFrame() {
3028}
3129
3230NativeAnimatedNodesManagerProvider::NativeAnimatedNodesManagerProvider (
33- NativeAnimatedNodesManager:: StartOnRenderCallback startOnRenderCallback,
34- NativeAnimatedNodesManager:: StopOnRenderCallback stopOnRenderCallback)
31+ StartOnRenderCallback startOnRenderCallback,
32+ StopOnRenderCallback stopOnRenderCallback)
3533 : eventEmitterListenerContainer_(
3634 std::make_shared<EventEmitterListenerContainer>()),
3735 startOnRenderCallback_ (std::move(startOnRenderCallback)),
@@ -67,12 +65,25 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
6765 uiManager->synchronouslyUpdateViewOnUIThread (viewTag, props);
6866 };
6967
68+ nativeAnimatedDelegate_ =
69+ std::make_shared<UIManagerNativeAnimatedDelegateImpl>();
70+
71+ auto startOnRenderCallback =
72+ [nativeAnimatedDelegate = nativeAnimatedDelegate_,
73+ startOnRenderCallbackFn = std::move (startOnRenderCallback_)]() {
74+ if (startOnRenderCallbackFn) {
75+ startOnRenderCallbackFn ([nativeAnimatedDelegate]() {
76+ nativeAnimatedDelegate->runAnimationFrame ();
77+ });
78+ }
79+ };
80+
7081 if (ReactNativeFeatureFlags::useSharedAnimatedBackend ()) {
7182#ifdef RN_USE_ANIMATION_BACKEND
7283 // TODO: this should be initialized outside of animated, but for now it
7384 // was convenient to do it here
7485 animationBackend_ = std::make_shared<AnimationBackend>(
75- std::move (startOnRenderCallback_ ),
86+ std::move (startOnRenderCallback ),
7687 std::move (stopOnRenderCallback_),
7788 std::move (directManipulationCallback),
7889 std::move (fabricCommitCallback),
@@ -88,10 +99,14 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
8899 std::make_shared<NativeAnimatedNodesManager>(
89100 std::move (directManipulationCallback),
90101 std::move (fabricCommitCallback),
91- std::move (startOnRenderCallback_ ),
102+ std::move (startOnRenderCallback ),
92103 std::move (stopOnRenderCallback_));
93104 }
94105
106+ std::static_pointer_cast<UIManagerNativeAnimatedDelegateImpl>(
107+ nativeAnimatedDelegate_)
108+ ->setNativeAnimatedNodesManager (nativeAnimatedNodesManager_);
109+
95110 addEventEmitterListener (
96111 nativeAnimatedNodesManager_->getEventEmitterListener ());
97112
@@ -112,10 +127,6 @@ NativeAnimatedNodesManagerProvider::getOrCreate(
112127 return false ;
113128 }));
114129
115- nativeAnimatedDelegate_ =
116- std::make_shared<UIManagerNativeAnimatedDelegateImpl>(
117- nativeAnimatedNodesManager_);
118-
119130 uiManager->setNativeAnimatedDelegate (nativeAnimatedDelegate_);
120131
121132 // TODO: remove force casting.
0 commit comments