/
githubmr
/
facebook-react-native
Обзор
Документация
Войти
/
githubmr
/
facebook-react-native
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp
95 строк
3 KB
generatedunixname537391475639613
xplat/js/react-native-github/packages/react-native/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp (#52956)
01 авг 2025, 16:13
01 авг 2025, 16:13
e1f6a19
Код
Авторство
О чём код?
/* * 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 "ViewShadowNode.h" #include <react/renderer/components/view/HostPlatformViewTraitsInitializer.h> #include <react/renderer/components/view/primitives.h> namespace facebook::react { // NOLINTNEXTLINE(facebook-hte-CArray,modernize-avoid-c-arrays) const char ViewComponentName[] = "View"; ViewShadowNodeProps::ViewShadowNodeProps( const PropsParserContext& context, const ViewShadowNodeProps& sourceProps, const RawProps& rawProps) : ViewProps(context, sourceProps, rawProps){}; ViewShadowNode::ViewShadowNode( const ShadowNodeFragment& fragment, const ShadowNodeFamily::Shared& family, ShadowNodeTraits traits) : ConcreteViewShadowNode(fragment, family, traits) { initialize(); } ViewShadowNode::ViewShadowNode( const ShadowNode& sourceShadowNode, const ShadowNodeFragment& fragment) : ConcreteViewShadowNode(sourceShadowNode, fragment) { initialize(); } void ViewShadowNode::initialize() noexcept { auto& viewProps = static_cast<const ViewProps&>(*props_); auto hasBorder = [&]() { for (auto edge : yoga::ordinals<yoga::Edge>()) { if (viewProps.yogaStyle.border(edge).isDefined()) { return true; } } return false; }; bool formsStackingContext = !viewProps.collapsable || viewProps.pointerEvents == PointerEventsMode::None || !viewProps.nativeId.empty() || viewProps.accessible || viewProps.opacity != 1.0 || viewProps.transform != Transform{} || (viewProps.zIndex.has_value() && viewProps.yogaStyle.positionType() != yoga::PositionType::Static) || viewProps.yogaStyle.display() == yoga::Display::None || viewProps.getClipsContentToBounds() || viewProps.events.bits.any() || isColorMeaningful(viewProps.shadowColor) || viewProps.accessibilityElementsHidden || viewProps.accessibilityViewIsModal || viewProps.importantForAccessibility != ImportantForAccessibility::Auto || viewProps.removeClippedSubviews || viewProps.cursor != Cursor::Auto || !viewProps.filter.empty() || viewProps.mixBlendMode != BlendMode::Normal || viewProps.isolation == Isolation::Isolate || HostPlatformViewTraitsInitializer::formsStackingContext(viewProps) || !viewProps.accessibilityOrder.empty(); bool formsView = formsStackingContext || isColorMeaningful(viewProps.backgroundColor) || hasBorder() || !viewProps.testId.empty() || !viewProps.boxShadow.empty() || !viewProps.backgroundImage.empty() || HostPlatformViewTraitsInitializer::formsView(viewProps) || viewProps.outlineWidth > 0; if (formsView) { traits_.set(ShadowNodeTraits::Trait::FormsView); } else { traits_.unset(ShadowNodeTraits::Trait::FormsView); } if (formsStackingContext) { traits_.set(ShadowNodeTraits::Trait::FormsStackingContext); } else { traits_.unset(ShadowNodeTraits::Trait::FormsStackingContext); } if (!viewProps.collapsableChildren) { traits_.set(ShadowNodeTraits::Trait::ChildrenFormStackingContext); } else { traits_.unset(ShadowNodeTraits::Trait::ChildrenFormStackingContext); } } } // namespace facebook::react