mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
5a47463e1f
Summary: The new props parsing path (introduced in https://www.internalfb.com/diff/D37051020 (https://github.com/facebook/react-native/commit/af1eae9ea313b016f111a25b5252b70aea99aedd)) resulted in opacity and backgroundColor being applied twice. Specifically, the new prop setter path basically results in the ParagraphProps' textAttributes (via ConcreteComponentDescriptor.cloneProps, via ParagraphProps.setProp) to include opacity and backgroundColor, which is not desired as they are both applied again on view. Similar issue faced in the past: https://www.internalfb.com/diff/D19764144 (https://github.com/facebook/react-native/commit/8fe6883fea5d92c8378a9642e8369c56f20872a7) Changelog: [Internal] - Prevent double application of opacity and backgroundColor on text Reviewed By: ryancat Differential Revision: D37801663 fbshipit-source-id: 4b5ebe5ff20b80833edb2141df883f33c69ab5d6
83 lines
2.4 KiB
C++
83 lines
2.4 KiB
C++
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#include "ParagraphProps.h"
|
|
|
|
#include <react/renderer/attributedstring/conversions.h>
|
|
#include <react/renderer/attributedstring/primitives.h>
|
|
#include <react/renderer/core/propsConversions.h>
|
|
#include <react/renderer/debug/debugStringConvertibleUtils.h>
|
|
|
|
#include <glog/logging.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
ParagraphProps::ParagraphProps(
|
|
const PropsParserContext &context,
|
|
ParagraphProps const &sourceProps,
|
|
RawProps const &rawProps)
|
|
: ViewProps(context, sourceProps, rawProps),
|
|
BaseTextProps(context, sourceProps, rawProps),
|
|
paragraphAttributes(convertRawProp(
|
|
context,
|
|
rawProps,
|
|
sourceProps.paragraphAttributes,
|
|
{})),
|
|
isSelectable(convertRawProp(
|
|
context,
|
|
rawProps,
|
|
"selectable",
|
|
sourceProps.isSelectable,
|
|
false)),
|
|
onTextLayout(convertRawProp(
|
|
context,
|
|
rawProps,
|
|
"onTextLayout",
|
|
sourceProps.onTextLayout,
|
|
{})) {
|
|
/*
|
|
* These props are applied to `View`, therefore they must not be a part of
|
|
* base text attributes.
|
|
*/
|
|
textAttributes.opacity = std::numeric_limits<Float>::quiet_NaN();
|
|
textAttributes.backgroundColor = {};
|
|
};
|
|
|
|
void ParagraphProps::setProp(
|
|
const PropsParserContext &context,
|
|
RawPropsPropNameHash hash,
|
|
const char *propName,
|
|
RawValue const &value) {
|
|
// All Props structs setProp methods must always, unconditionally,
|
|
// call all super::setProp methods, since multiple structs may
|
|
// reuse the same values.
|
|
ViewProps::setProp(context, hash, propName, value);
|
|
BaseTextProps::setProp(context, hash, propName, value);
|
|
|
|
/*
|
|
* These props are applied to `View`, therefore they must not be a part of
|
|
* base text attributes.
|
|
*/
|
|
textAttributes.opacity = std::numeric_limits<Float>::quiet_NaN();
|
|
textAttributes.backgroundColor = {};
|
|
}
|
|
|
|
#pragma mark - DebugStringConvertible
|
|
|
|
#if RN_DEBUG_STRING_CONVERTIBLE
|
|
SharedDebugStringConvertibleList ParagraphProps::getDebugProps() const {
|
|
return ViewProps::getDebugProps() + BaseTextProps::getDebugProps() +
|
|
paragraphAttributes.getDebugProps() +
|
|
SharedDebugStringConvertibleList{
|
|
debugStringConvertibleItem("isSelectable", isSelectable)};
|
|
}
|
|
#endif
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|