mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
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:
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
|
||||
Reference in new issue
Block a user