Revert D21635473: LayoutAnimations: allow Paragraph props to be interpolated

Differential Revision:
D21635473

Original commit changeset: 470f43fd24a6

fbshipit-source-id: 8507b0aaead2c0ebbdd09077db99e5e44da175ab
This commit is contained in:
Ishan Khot authored and Facebook GitHub Bot committed 2020-05-20 16:34:27 -07:00
1 parent a799367baf
commit adccef7f48
3 files changed
+27 -75

No files matched your search

@@ -9,7 +9,6 @@
#include "ParagraphShadowNode.h"
#include <react/components/view/ViewPropsInterpolation.h>
#include <react/config/ReactNativeConfig.h>
#include <react/core/ConcreteComponentDescriptor.h>
#include <react/textlayoutmanager/TextLayoutManager.h>
@@ -31,18 +30,6 @@ class ParagraphComponentDescriptor final
textLayoutManager_ = std::make_shared<TextLayoutManager>(contextContainer_);
}
virtual SharedProps interpolateProps(
float animationProgress,
const SharedProps &props,
const SharedProps &newProps) const override {
SharedProps interpolatedPropsShared = cloneProps(newProps, {});
interpolateViewProps(
animationProgress, props, newProps, interpolatedPropsShared);
return interpolatedPropsShared;
};
protected:
void adopt(UnsharedShadowNode shadowNode) const override {
ConcreteComponentDescriptor::adopt(shadowNode);
@@ -10,7 +10,6 @@
#include <react/components/view/ViewShadowNode.h>
#include <react/core/ConcreteComponentDescriptor.h>
#include "ViewProps.h"
#include "ViewPropsInterpolation.h"
namespace facebook {
namespace react {
@@ -25,10 +24,34 @@ class ViewComponentDescriptor
float animationProgress,
const SharedProps &props,
const SharedProps &newProps) const override {
SharedProps interpolatedPropsShared = cloneProps(newProps, {});
ViewProps const *oldViewProps =
dynamic_cast<ViewProps const *>(props.get());
ViewProps const *newViewProps =
dynamic_cast<ViewProps const *>(newProps.get());
interpolateViewProps(
animationProgress, props, newProps, interpolatedPropsShared);
SharedProps interpolatedPropsShared = cloneProps(newProps, {});
ViewProps *interpolatedProps = const_cast<ViewProps *>(
dynamic_cast<ViewProps const *>(interpolatedPropsShared.get()));
interpolatedProps->opacity = oldViewProps->opacity +
(newViewProps->opacity - oldViewProps->opacity) * animationProgress;
interpolatedProps->transform = Transform::Interpolate(
animationProgress, oldViewProps->transform, newViewProps->transform);
// Android uses RawProps, not props, to update props on the platform...
// Since interpolated props don't interpolate at all using RawProps, we need
// to "re-hydrate" raw props after interpolating. This is what actually gets
// sent to the mounting layer. This is a temporary hack, only for platforms
// that use RawProps/folly::dynamic instead of concrete props on the
// mounting layer. Once we can remove this, we should change `rawProps` to
// be const again.
#ifdef ANDROID
interpolatedProps->rawProps["opacity"] = interpolatedProps->opacity;
interpolatedProps->rawProps["transform"] =
(folly::dynamic)interpolatedProps->transform;
#endif
return interpolatedPropsShared;
};
@@ -1,58 +0,0 @@
/*
* Copyright (c) Facebook, Inc. and its 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 "ViewProps.h"
namespace facebook {
namespace react {
/**
* Given animation progress, old props, new props, and an "interpolated" shared
* props struct, this will mutate the "interpolated" struct in-place to give it
* values interpolated between the old and new props.
*/
static inline void interpolateViewProps(
Float animationProgress,
const SharedProps &oldPropsShared,
const SharedProps &newPropsShared,
SharedProps &interpolatedPropsShared) {
ViewProps const *oldViewProps =
dynamic_cast<ViewProps const *>(oldPropsShared.get());
ViewProps const *newViewProps =
dynamic_cast<ViewProps const *>(newPropsShared.get());
ViewProps *interpolatedProps = const_cast<ViewProps *>(
dynamic_cast<ViewProps const *>(interpolatedPropsShared.get()));
assert(
oldViewProps != nullptr && newViewProps != nullptr &&
interpolatedProps != nullptr);
interpolatedProps->opacity = oldViewProps->opacity +
(newViewProps->opacity - oldViewProps->opacity) * animationProgress;
interpolatedProps->transform = Transform::Interpolate(
animationProgress, oldViewProps->transform, newViewProps->transform);
// Android uses RawProps, not props, to update props on the platform...
// Since interpolated props don't interpolate at all using RawProps, we need
// to "re-hydrate" raw props after interpolating. This is what actually gets
// sent to the mounting layer. This is a temporary hack, only for platforms
// that use RawProps/folly::dynamic instead of concrete props on the
// mounting layer. Once we can remove this, we should change `rawProps` to
// be const again.
#ifdef ANDROID
interpolatedProps->rawProps["opacity"] = interpolatedProps->opacity;
interpolatedProps->rawProps["transform"] =
(folly::dynamic)interpolatedProps->transform;
#endif
}
} // namespace react
} // namespace facebook