mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
980c52de41
Summary:
The views with touch event props are currently flattened by Fabric core, as we don't take event listeners into account when calculating whether the view should be flattened. This results in a confusing situation when components with touch event listeners (e.g. `<View onTouchStart={() => {}} /> `) or ones using `PanResponder` are either ignored (iOS) or cause a crash (Android).
This change passes touch event props to C++ layer and uses them to calculate whether the view node should be flattened or not. It also refactors events to be kept as a singular bitset with 32 bit (~`uint32_t`).
Changelog: [Changed][General] Avoid flattening nodes with event props
Reviewed By: sammy-SC
Differential Revision: D34005536
fbshipit-source-id: 96255b389a7bfff4aa208a96fd0c173d9edf1512
90 lines
2.1 KiB
C++
90 lines
2.1 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.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <react/renderer/components/view/AccessibilityProps.h>
|
|
#include <react/renderer/components/view/YogaStylableProps.h>
|
|
#include <react/renderer/components/view/primitives.h>
|
|
#include <react/renderer/core/LayoutMetrics.h>
|
|
#include <react/renderer/core/Props.h>
|
|
#include <react/renderer/core/PropsParserContext.h>
|
|
#include <react/renderer/graphics/Color.h>
|
|
#include <react/renderer/graphics/Geometry.h>
|
|
#include <react/renderer/graphics/Transform.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
|
|
class ViewProps;
|
|
|
|
using SharedViewProps = std::shared_ptr<ViewProps const>;
|
|
|
|
class ViewProps : public YogaStylableProps, public AccessibilityProps {
|
|
public:
|
|
ViewProps() = default;
|
|
ViewProps(
|
|
const PropsParserContext &context,
|
|
ViewProps const &sourceProps,
|
|
RawProps const &rawProps);
|
|
|
|
#pragma mark - Props
|
|
|
|
// Color
|
|
Float opacity{1.0};
|
|
SharedColor foregroundColor{};
|
|
SharedColor backgroundColor{};
|
|
|
|
// Borders
|
|
CascadedBorderRadii borderRadii{};
|
|
CascadedBorderColors borderColors{};
|
|
CascadedBorderStyles borderStyles{};
|
|
|
|
// Shadow
|
|
SharedColor shadowColor{};
|
|
Size shadowOffset{0, -3};
|
|
Float shadowOpacity{};
|
|
Float shadowRadius{3};
|
|
|
|
// Transform
|
|
Transform transform{};
|
|
BackfaceVisibility backfaceVisibility{};
|
|
bool shouldRasterize{};
|
|
butter::optional<int> zIndex{};
|
|
|
|
// Events
|
|
PointerEventsMode pointerEvents{};
|
|
EdgeInsets hitSlop{};
|
|
bool onLayout{};
|
|
|
|
ViewEvents events{};
|
|
|
|
bool collapsable{true};
|
|
|
|
bool removeClippedSubviews{false};
|
|
|
|
Float elevation{}; /* Android-only */
|
|
|
|
#pragma mark - Convenience Methods
|
|
|
|
BorderMetrics resolveBorderMetrics(LayoutMetrics const &layoutMetrics) const;
|
|
bool getClipsContentToBounds() const;
|
|
|
|
#ifdef ANDROID
|
|
bool getProbablyMoreHorizontalThanVertical_DEPRECATED() const;
|
|
#endif
|
|
|
|
#pragma mark - DebugStringConvertible
|
|
|
|
#if RN_DEBUG_STRING_CONVERTIBLE
|
|
SharedDebugStringConvertibleList getDebugProps() const override;
|
|
#endif
|
|
};
|
|
|
|
} // namespace react
|
|
} // namespace facebook
|