/
githubmr
/
facebook-react-native
Обзор
Документация
Войти
/
githubmr
/
facebook-react-native
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
packages/react-native/ReactCommon/react/renderer/components/text/BaseParagraphProps.cpp
160 строк
5 KB
Nick Lefever
Use host platform specific text props (#52845)
28 июл 2025, 03:20
28 июл 2025, 03:20
d390f3b
Код
Авторство
О чём код?
/* * 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 "BaseParagraphProps.h" #include <react/featureflags/ReactNativeFeatureFlags.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::react { BaseParagraphProps::BaseParagraphProps( const PropsParserContext& context, const BaseParagraphProps& sourceProps, const RawProps& rawProps) : ViewProps(context, sourceProps, rawProps), BaseTextProps(context, sourceProps, rawProps), paragraphAttributes( ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.paragraphAttributes : convertRawProp( context, rawProps, sourceProps.paragraphAttributes, {})), isSelectable( ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.isSelectable : convertRawProp( context, rawProps, "selectable", sourceProps.isSelectable, false)), onTextLayout( ReactNativeFeatureFlags::enableCppPropsIteratorSetter() ? sourceProps.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 BaseParagraphProps::setProp( const PropsParserContext& context, RawPropsPropNameHash hash, const char* propName, const RawValue& 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); static auto defaults = BaseParagraphProps{}; // ParagraphAttributes has its own switch statement - to keep all // of these fields together, and because there are some collisions between // propnames parsed here and outside of ParagraphAttributes. // This code is also duplicated in AndroidTextInput. static auto paDefaults = ParagraphAttributes{}; switch (hash) { REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, maximumNumberOfLines, "numberOfLines"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, ellipsizeMode, "ellipsizeMode"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, textBreakStrategy, "textBreakStrategy"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, adjustsFontSizeToFit, "adjustsFontSizeToFit"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, minimumFontScale, "minimumFontScale"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, minimumFontSize, "minimumFontSize"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, maximumFontSize, "maximumFontSize"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, includeFontPadding, "includeFontPadding"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, android_hyphenationFrequency, "android_hyphenationFrequency"); REBUILD_FIELD_SWITCH_CASE( paDefaults, value, paragraphAttributes, textAlignVertical, "textAlignVertical"); } switch (hash) { RAW_SET_PROP_SWITCH_CASE(isSelectable, "selectable"); RAW_SET_PROP_SWITCH_CASE_BASIC(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 = {}; } #pragma mark - DebugStringConvertible #if RN_DEBUG_STRING_CONVERTIBLE SharedDebugStringConvertibleList BaseParagraphProps::getDebugProps() const { return ViewProps::getDebugProps() + BaseTextProps::getDebugProps() + paragraphAttributes.getDebugProps() + SharedDebugStringConvertibleList{ debugStringConvertibleItem("selectable", isSelectable)}; } #endif } // namespace facebook::react