mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
110b191b14
Summary: Previously, ViewPropsMapBuffer conversions were hardcoded deep in Android infrastructrue. I've generalized this into a different mechanism to allow any Props struct to support MapBuffer props. There are still some things that need to be cleaned up and this should be treated as experimental. One thing we likely want to do is remove the hardcoded IDs (fine for codegen'd code; less so for handwritten) and use compile-time-hashed IDs instead with human-readable string names. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D38708719 fbshipit-source-id: 64603dee7f21828be31346c555d99862dab304ea
117 lines
2.8 KiB
C++
117 lines
2.8 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>
|
|
|
|
#include <optional>
|
|
|
|
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,
|
|
bool shouldSetRawProps = true);
|
|
|
|
void setProp(
|
|
const PropsParserContext &context,
|
|
RawPropsPropNameHash hash,
|
|
const char *propName,
|
|
RawValue const &value);
|
|
|
|
#ifdef ANDROID
|
|
void propsDiffMapBuffer(Props const *oldProps, MapBufferBuilder &builder)
|
|
const override;
|
|
#endif
|
|
|
|
#pragma mark - Props
|
|
|
|
// Color
|
|
Float opacity{1.0};
|
|
SharedColor foregroundColor{};
|
|
SharedColor backgroundColor{};
|
|
|
|
// Borders
|
|
CascadedBorderRadii borderRadii{};
|
|
CascadedBorderColors borderColors{};
|
|
CascadedBorderCurves borderCurves{}; // iOS only?
|
|
CascadedBorderStyles borderStyles{};
|
|
|
|
// Shadow
|
|
SharedColor shadowColor{};
|
|
Size shadowOffset{0, -3};
|
|
Float shadowOpacity{};
|
|
Float shadowRadius{3};
|
|
|
|
// Transform
|
|
Transform transform{};
|
|
BackfaceVisibility backfaceVisibility{};
|
|
bool shouldRasterize{};
|
|
std::optional<int> zIndex{};
|
|
|
|
// Events
|
|
PointerEventsMode pointerEvents{};
|
|
EdgeInsets hitSlop{};
|
|
bool onLayout{};
|
|
|
|
ViewEvents events{};
|
|
|
|
bool collapsable{true};
|
|
|
|
bool removeClippedSubviews{false};
|
|
|
|
Float elevation{}; /* Android-only */
|
|
|
|
#ifdef ANDROID
|
|
|
|
std::optional<NativeDrawable> nativeBackground{};
|
|
std::optional<NativeDrawable> nativeForeground{};
|
|
|
|
bool focusable{false};
|
|
bool hasTVPreferredFocus{false};
|
|
bool needsOffscreenAlphaCompositing{false};
|
|
bool renderToHardwareTextureAndroid{false};
|
|
|
|
#endif
|
|
|
|
#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
|