From adccef7f48d1b2d39d31a3ca1d1fa4a4646e09d8 Mon Sep 17 00:00:00 2001 From: Ishan Khot Date: Wed, 20 May 2020 16:31:18 -0700 Subject: [PATCH] Revert D21635473: LayoutAnimations: allow Paragraph props to be interpolated Differential Revision: D21635473 Original commit changeset: 470f43fd24a6 fbshipit-source-id: 8507b0aaead2c0ebbdd09077db99e5e44da175ab --- .../paragraph/ParagraphComponentDescriptor.h | 13 ----- .../components/view/ViewComponentDescriptor.h | 31 ++++++++-- .../components/view/ViewPropsInterpolation.h | 58 ------------------- 3 files changed, 27 insertions(+), 75 deletions(-) delete mode 100644 ReactCommon/fabric/components/view/ViewPropsInterpolation.h diff --git a/ReactCommon/fabric/components/text/paragraph/ParagraphComponentDescriptor.h b/ReactCommon/fabric/components/text/paragraph/ParagraphComponentDescriptor.h index 0ec89c56831..d360c93d339 100644 --- a/ReactCommon/fabric/components/text/paragraph/ParagraphComponentDescriptor.h +++ b/ReactCommon/fabric/components/text/paragraph/ParagraphComponentDescriptor.h @@ -9,7 +9,6 @@ #include "ParagraphShadowNode.h" -#include #include #include #include @@ -31,18 +30,6 @@ class ParagraphComponentDescriptor final textLayoutManager_ = std::make_shared(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); diff --git a/ReactCommon/fabric/components/view/ViewComponentDescriptor.h b/ReactCommon/fabric/components/view/ViewComponentDescriptor.h index 006081daf3d..9eaacaaa77c 100644 --- a/ReactCommon/fabric/components/view/ViewComponentDescriptor.h +++ b/ReactCommon/fabric/components/view/ViewComponentDescriptor.h @@ -10,7 +10,6 @@ #include #include #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(props.get()); + ViewProps const *newViewProps = + dynamic_cast(newProps.get()); - interpolateViewProps( - animationProgress, props, newProps, interpolatedPropsShared); + SharedProps interpolatedPropsShared = cloneProps(newProps, {}); + ViewProps *interpolatedProps = const_cast( + dynamic_cast(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; }; diff --git a/ReactCommon/fabric/components/view/ViewPropsInterpolation.h b/ReactCommon/fabric/components/view/ViewPropsInterpolation.h deleted file mode 100644 index 0470d696d51..00000000000 --- a/ReactCommon/fabric/components/view/ViewPropsInterpolation.h +++ /dev/null @@ -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(oldPropsShared.get()); - ViewProps const *newViewProps = - dynamic_cast(newPropsShared.get()); - ViewProps *interpolatedProps = const_cast( - dynamic_cast(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