/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #pragma once #include #include #include "NativeAnimatedNodesManager.h" namespace facebook::react { class AnimatedMountingOverrideDelegate; class NativeAnimatedNodesManagerProvider { public: NativeAnimatedNodesManagerProvider( NativeAnimatedNodesManager::StartOnRenderCallback startOnRenderCallback = nullptr, NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback = nullptr, NativeAnimatedNodesManager::FrameRateListenerCallback frameRateListenerCallback = nullptr); std::shared_ptr getOrCreate( jsi::Runtime &runtime, std::shared_ptr jsInvoker); // Native Event Listeners void addEventEmitterListener(const std::shared_ptr &listener); std::shared_ptr getEventEmitterListener(); private: std::shared_ptr animationBackend_; std::shared_ptr nativeAnimatedNodesManager_; std::shared_ptr eventEmitterListenerContainer_; std::shared_ptr eventEmitterListener_; std::shared_ptr nativeAnimatedDelegate_; std::shared_ptr animatedMountingOverrideDelegate_; NativeAnimatedNodesManager::StartOnRenderCallback startOnRenderCallback_; NativeAnimatedNodesManager::StopOnRenderCallback stopOnRenderCallback_; NativeAnimatedNodesManager::FrameRateListenerCallback frameRateListenerCallback_; std::unique_ptr mergedValueDispatcher_; }; class UIManagerNativeAnimatedDelegateImpl : public UIManagerNativeAnimatedDelegate { public: explicit UIManagerNativeAnimatedDelegateImpl(std::weak_ptr manager); void runAnimationFrame() override; private: std::weak_ptr nativeAnimatedNodesManager_; }; } // namespace facebook::react