Skip to content

Commit c6e93ee

Browse files
committed
More progress
1 parent fa1e915 commit c6e93ee

15 files changed

+48
-34
lines changed

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/InterpolatorFactory.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,6 @@ class SimpleValueInterpolatorFactory : public PropertyInterpolatorFactory {
2828
explicit SimpleValueInterpolatorFactory(const TValue &defaultValue)
2929
: PropertyInterpolatorFactory(), defaultValue_(defaultValue) {}
3030

31-
bool isDiscreteProperty() const override {
32-
// The property is considered discrete if all of the allowed types are
33-
// discrete
34-
return (Discrete<AllowedTypes> && ...);
35-
}
36-
3731
const CSSValue &getDefaultValue() const override {
3832
return defaultValue_;
3933
}

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/PropertyInterpolator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ PropertyInterpolator::PropertyInterpolator(
1212
const std::shared_ptr<ViewStylesRepository> &viewStylesRepository)
1313
: propertyPath_(std::move(propertyPath)), viewStylesRepository_(viewStylesRepository) {}
1414

15-
bool PropertyInterpolatorFactory::isDiscreteProperty() const {
15+
bool PropertyInterpolator::isDiscrete() const {
1616
return false;
1717
}
1818

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/PropertyInterpolator.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class PropertyInterpolator {
1919
PropertyPath propertyPath,
2020
const std::shared_ptr<ViewStylesRepository> &viewStylesRepository);
2121

22+
virtual bool isDiscrete() const = 0;
2223
virtual folly::dynamic getStyleValue(const std::shared_ptr<const ShadowNode> &shadowNode) const = 0;
2324
virtual folly::dynamic getResetStyle(const std::shared_ptr<const ShadowNode> &shadowNode) const = 0;
2425
virtual folly::dynamic getFirstKeyframeValue() const = 0;
@@ -48,7 +49,6 @@ class PropertyInterpolatorFactory {
4849
PropertyInterpolatorFactory() = default;
4950
virtual ~PropertyInterpolatorFactory() = default;
5051

51-
virtual bool isDiscreteProperty() const;
5252
virtual const CSSValue &getDefaultValue() const = 0;
5353

5454
virtual std::shared_ptr<PropertyInterpolator> create(

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/groups/ArrayPropertiesInterpolator.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ ArrayPropertiesInterpolator::ArrayPropertiesInterpolator(
1111
const std::shared_ptr<ViewStylesRepository> &viewStylesRepository)
1212
: GroupPropertiesInterpolator(propertyPath, viewStylesRepository), factories_(factories) {}
1313

14+
bool ArrayPropertiesInterpolator::isDiscrete() const {
15+
for (const auto &interpolator : interpolators_) {
16+
if (!interpolator->isDiscrete()) {
17+
return false;
18+
}
19+
}
20+
return true;
21+
}
22+
1423
void ArrayPropertiesInterpolator::updateKeyframes(jsi::Runtime &rt, const jsi::Value &keyframes) {
1524
const jsi::Array keyframesArray = keyframes.asObject(rt).asArray(rt);
1625
const size_t valuesCount = keyframesArray.size(rt);

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/groups/ArrayPropertiesInterpolator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class ArrayPropertiesInterpolator : public GroupPropertiesInterpolator {
1515
const std::shared_ptr<ViewStylesRepository> &viewStylesRepository);
1616
virtual ~ArrayPropertiesInterpolator() = default;
1717

18+
bool isDiscrete() const override;
1819
void updateKeyframes(jsi::Runtime &rt, const jsi::Value &keyframes) override;
1920
bool updateKeyframesFromStyleChange(
2021
jsi::Runtime &rt,

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/groups/GroupPropertiesInterpolator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class GroupPropertiesInterpolator : public PropertyInterpolator {
1414
const PropertyPath &propertyPath,
1515
const std::shared_ptr<ViewStylesRepository> &viewStylesRepository);
1616

17+
bool isDiscrete() const override;
1718
folly::dynamic getStyleValue(const std::shared_ptr<const ShadowNode> &shadowNode) const override;
1819
folly::dynamic getResetStyle(const std::shared_ptr<const ShadowNode> &shadowNode) const override;
1920
folly::dynamic getFirstKeyframeValue() const override;

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/groups/RecordPropertiesInterpolator.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@ RecordPropertiesInterpolator::RecordPropertiesInterpolator(
1212
const std::shared_ptr<ViewStylesRepository> &viewStylesRepository)
1313
: GroupPropertiesInterpolator(propertyPath, viewStylesRepository), factories_(factories) {}
1414

15+
bool RecordPropertiesInterpolator::isDiscrete() const {
16+
for (const auto &[propertyName, interpolator] : interpolators_) {
17+
if (!interpolator->isDiscrete()) {
18+
return false;
19+
}
20+
}
21+
return true;
22+
}
23+
1524
void RecordPropertiesInterpolator::updateKeyframes(jsi::Runtime &rt, const jsi::Value &keyframes) {
1625
// TODO - maybe add a possibility to remove interpolators that are no longer
1726
// used (for now, for simplicity, we only add new ones)

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/groups/RecordPropertiesInterpolator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class RecordPropertiesInterpolator : public GroupPropertiesInterpolator {
1616
const std::shared_ptr<ViewStylesRepository> &viewStylesRepository);
1717
virtual ~RecordPropertiesInterpolator() = default;
1818

19+
bool isDiscrete() const override;
1920
void updateKeyframes(jsi::Runtime &rt, const jsi::Value &keyframes) override;
2021
bool updateKeyframesFromStyleChange(
2122
jsi::Runtime &rt,

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/styles/TransitionStyleInterpolator.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ std::unordered_set<std::string> TransitionStyleInterpolator::updateInterpolatedP
5757
std::unordered_set<std::string> reversedPropertyNames;
5858

5959
for (const auto &[propertyName, diffPair] : propertyUpdates) {
60+
// If the diffPair is not present, it means that the property was removed and should no
61+
// longer be transitioned. In such a case, we can remove the interpolator for this property.
6062
if (!diffPair.has_value()) {
6163
interpolators_.erase(propertyName);
6264
continue;
@@ -69,7 +71,10 @@ std::unordered_set<std::string> TransitionStyleInterpolator::updateInterpolatedP
6971
it = interpolators_.emplace(propertyName, newInterpolator).first;
7072
}
7173

72-
reversedPropertyNames.insert(it->second->updateKeyframesFromStyleChange(rt, diffPair->first, diffPair->second));
74+
auto isPropertyReversed = it->second->updateKeyframesFromStyleChange(rt, diffPair->first, diffPair->second);
75+
if (isPropertyReversed) {
76+
reversedPropertyNames.insert(propertyName);
77+
}
7378
}
7479

7580
return reversedPropertyNames;

packages/react-native-reanimated/Common/cpp/reanimated/CSS/interpolation/values/ResolvableValueInterpolator.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class ResolvableValueInterpolator final : public SimpleValueInterpolator<Allowed
2929
const std::shared_ptr<ViewStylesRepository> &viewStylesRepository,
3030
const ResolvableValueInterpolatorConfig &config);
3131

32+
bool isDiscrete() const override;
33+
3234
protected:
3335
folly::dynamic interpolateValue(
3436
double progress,

0 commit comments

Comments
 (0)