/* * 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 #include #include #include namespace facebook::react { 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(*props_); auto hasBorder = [&]() { for (auto edge : yoga::ordinals()) { 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 || HostPlatformViewTraitsInitializer::formsStackingContext(viewProps); bool formsView = formsStackingContext || isColorMeaningful(viewProps.backgroundColor) || hasBorder() || !viewProps.testId.empty() || HostPlatformViewTraitsInitializer::formsView(viewProps); 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); } traits_.set(HostPlatformViewTraitsInitializer::extraTraits()); } } // namespace facebook::react