Files
Schnappix/node_modules/react-native-reanimated/Common/cpp/reanimated/CSS/progress/TransitionProgressProvider.h
T

83 lines
2.6 KiB
C++

#pragma once
#include <reanimated/CSS/configs/CSSTransitionConfig.h>
#include <reanimated/CSS/progress/KeyframeProgressProvider.h>
#include <reanimated/CSS/progress/RawProgressProvider.h>
#include <reanimated/CSS/utils/props.h>
#include <memory>
#include <string>
#include <unordered_map>
#include <unordered_set>
namespace reanimated::css {
enum class TransitionProgressState { Pending, Running, Finished };
class TransitionPropertyProgressProvider final
: public KeyframeProgressProvider,
public RawProgressProvider {
public:
TransitionPropertyProgressProvider(
double timestamp,
double duration,
double delay,
const EasingFunction &easingFunction);
TransitionPropertyProgressProvider(
double timestamp,
double duration,
double delay,
const EasingFunction &easingFunction,
double reversingShorteningFactor);
double getGlobalProgress() const override;
double getKeyframeProgress(double fromOffset, double toOffset) const override;
double getRemainingDelay(double timestamp) const;
double getReversingShorteningFactor() const;
TransitionProgressState getState() const;
protected:
std::optional<double> calculateRawProgress(double timestamp) override;
private:
EasingFunction easingFunction_;
double reversingShorteningFactor_ = 1;
double getElapsedTime(double timestamp) const;
};
using TransitionPropertyProgressProviders = std::unordered_map<
std::string,
std::shared_ptr<TransitionPropertyProgressProvider>>;
class TransitionProgressProvider final {
public:
TransitionProgressState getState() const;
double getMinDelay(double timestamp) const;
TransitionPropertyProgressProviders getPropertyProgressProviders() const;
std::unordered_set<std::string> getRemovedProperties() const;
void discardFinishedProgressProviders();
void discardIrrelevantProgressProviders(
const std::unordered_set<std::string> &transitionPropertyNames);
void runProgressProviders(
double timestamp,
const CSSTransitionPropertiesSettings &propertiesSettings,
const PropertyNames &changedPropertyNames,
const std::unordered_set<std::string> &reversedPropertyNames);
void update(double timestamp);
private:
TransitionPropertyProgressProviders propertyProgressProviders_;
std::unordered_set<std::string> removedProperties_;
std::shared_ptr<TransitionPropertyProgressProvider>
createReversingShorteningProgressProvider(
double timestamp,
const CSSTransitionPropertySettings &propertySettings,
const TransitionPropertyProgressProvider &existingProgressProvider);
};
} // namespace reanimated::css