/* * 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 "ScrollViewProps.h" #include #include #include #include #include namespace facebook::react { ScrollViewProps::ScrollViewProps( const PropsParserContext &context, ScrollViewProps const &sourceProps, RawProps const &rawProps) : ViewProps(context, sourceProps, rawProps), alwaysBounceHorizontal( CoreFeatures::enablePropIteratorSetter ? sourceProps.alwaysBounceHorizontal : convertRawProp( context, rawProps, "alwaysBounceHorizontal", sourceProps.alwaysBounceHorizontal, {})), alwaysBounceVertical( CoreFeatures::enablePropIteratorSetter ? sourceProps.alwaysBounceVertical : convertRawProp( context, rawProps, "alwaysBounceVertical", sourceProps.alwaysBounceVertical, {})), bounces( CoreFeatures::enablePropIteratorSetter ? sourceProps.bounces : convertRawProp( context, rawProps, "bounces", sourceProps.bounces, true)), bouncesZoom( CoreFeatures::enablePropIteratorSetter ? sourceProps.bouncesZoom : convertRawProp( context, rawProps, "bouncesZoom", sourceProps.bouncesZoom, true)), canCancelContentTouches( CoreFeatures::enablePropIteratorSetter ? sourceProps.canCancelContentTouches : convertRawProp( context, rawProps, "canCancelContentTouches", sourceProps.canCancelContentTouches, true)), centerContent( CoreFeatures::enablePropIteratorSetter ? sourceProps.centerContent : convertRawProp( context, rawProps, "centerContent", sourceProps.centerContent, {})), automaticallyAdjustContentInsets( CoreFeatures::enablePropIteratorSetter ? sourceProps.automaticallyAdjustContentInsets : convertRawProp( context, rawProps, "automaticallyAdjustContentInsets", sourceProps.automaticallyAdjustContentInsets, {})), automaticallyAdjustsScrollIndicatorInsets( CoreFeatures::enablePropIteratorSetter ? sourceProps.automaticallyAdjustsScrollIndicatorInsets : convertRawProp( context, rawProps, "automaticallyAdjustsScrollIndicatorInsets", sourceProps.automaticallyAdjustsScrollIndicatorInsets, true)), decelerationRate( CoreFeatures::enablePropIteratorSetter ? sourceProps.decelerationRate : convertRawProp( context, rawProps, "decelerationRate", sourceProps.decelerationRate, (Float)0.998)), directionalLockEnabled( CoreFeatures::enablePropIteratorSetter ? sourceProps.directionalLockEnabled : convertRawProp( context, rawProps, "directionalLockEnabled", sourceProps.directionalLockEnabled, {})), indicatorStyle( CoreFeatures::enablePropIteratorSetter ? sourceProps.indicatorStyle : convertRawProp( context, rawProps, "indicatorStyle", sourceProps.indicatorStyle, {})), keyboardDismissMode( CoreFeatures::enablePropIteratorSetter ? sourceProps.keyboardDismissMode : convertRawProp( context, rawProps, "keyboardDismissMode", sourceProps.keyboardDismissMode, {})), maintainVisibleContentPosition( CoreFeatures::enablePropIteratorSetter ? sourceProps.maintainVisibleContentPosition : convertRawProp( context, rawProps, "maintainVisibleContentPosition", sourceProps.maintainVisibleContentPosition, {})), maximumZoomScale( CoreFeatures::enablePropIteratorSetter ? sourceProps.maximumZoomScale : convertRawProp( context, rawProps, "maximumZoomScale", sourceProps.maximumZoomScale, (Float)1.0)), minimumZoomScale( CoreFeatures::enablePropIteratorSetter ? sourceProps.minimumZoomScale : convertRawProp( context, rawProps, "minimumZoomScale", sourceProps.minimumZoomScale, (Float)1.0)), scrollEnabled( CoreFeatures::enablePropIteratorSetter ? sourceProps.scrollEnabled : convertRawProp( context, rawProps, "scrollEnabled", sourceProps.scrollEnabled, true)), pagingEnabled( CoreFeatures::enablePropIteratorSetter ? sourceProps.pagingEnabled : convertRawProp( context, rawProps, "pagingEnabled", sourceProps.pagingEnabled, {})), pinchGestureEnabled( CoreFeatures::enablePropIteratorSetter ? sourceProps.pinchGestureEnabled : convertRawProp( context, rawProps, "pinchGestureEnabled", sourceProps.pinchGestureEnabled, true)), scrollsToTop( CoreFeatures::enablePropIteratorSetter ? sourceProps.scrollsToTop : convertRawProp( context, rawProps, "scrollsToTop", sourceProps.scrollsToTop, true)), showsHorizontalScrollIndicator( CoreFeatures::enablePropIteratorSetter ? sourceProps.showsHorizontalScrollIndicator : convertRawProp( context, rawProps, "showsHorizontalScrollIndicator", sourceProps.showsHorizontalScrollIndicator, true)), showsVerticalScrollIndicator( CoreFeatures::enablePropIteratorSetter ? sourceProps.showsVerticalScrollIndicator : convertRawProp( context, rawProps, "showsVerticalScrollIndicator", sourceProps.showsVerticalScrollIndicator, true)), scrollEventThrottle( CoreFeatures::enablePropIteratorSetter ? sourceProps.scrollEventThrottle : convertRawProp( context, rawProps, "scrollEventThrottle", sourceProps.scrollEventThrottle, {})), zoomScale( CoreFeatures::enablePropIteratorSetter ? sourceProps.zoomScale : convertRawProp( context, rawProps, "zoomScale", sourceProps.zoomScale, (Float)1.0)), contentInset( CoreFeatures::enablePropIteratorSetter ? sourceProps.contentInset : convertRawProp( context, rawProps, "contentInset", sourceProps.contentInset, {})), contentOffset( CoreFeatures::enablePropIteratorSetter ? sourceProps.contentOffset : convertRawProp( context, rawProps, "contentOffset", sourceProps.contentOffset, {})), scrollIndicatorInsets( CoreFeatures::enablePropIteratorSetter ? sourceProps.scrollIndicatorInsets : convertRawProp( context, rawProps, "scrollIndicatorInsets", sourceProps.scrollIndicatorInsets, {})), snapToInterval( CoreFeatures::enablePropIteratorSetter ? sourceProps.snapToInterval : convertRawProp( context, rawProps, "snapToInterval", sourceProps.snapToInterval, {})), snapToAlignment( CoreFeatures::enablePropIteratorSetter ? sourceProps.snapToAlignment : convertRawProp( context, rawProps, "snapToAlignment", sourceProps.snapToAlignment, {})), disableIntervalMomentum( CoreFeatures::enablePropIteratorSetter ? sourceProps.disableIntervalMomentum : convertRawProp( context, rawProps, "disableIntervalMomentum", sourceProps.disableIntervalMomentum, {})), snapToOffsets( CoreFeatures::enablePropIteratorSetter ? sourceProps.snapToOffsets : convertRawProp( context, rawProps, "snapToOffsets", sourceProps.snapToOffsets, {})), snapToStart( CoreFeatures::enablePropIteratorSetter ? sourceProps.snapToStart : convertRawProp( context, rawProps, "snapToStart", sourceProps.snapToStart, true)), snapToEnd( CoreFeatures::enablePropIteratorSetter ? sourceProps.snapToEnd : convertRawProp( context, rawProps, "snapToEnd", sourceProps.snapToEnd, true)), contentInsetAdjustmentBehavior( CoreFeatures::enablePropIteratorSetter ? sourceProps.contentInsetAdjustmentBehavior : convertRawProp( context, rawProps, "contentInsetAdjustmentBehavior", sourceProps.contentInsetAdjustmentBehavior, {ContentInsetAdjustmentBehavior::Never})), scrollToOverflowEnabled( CoreFeatures::enablePropIteratorSetter ? sourceProps.scrollToOverflowEnabled : convertRawProp( context, rawProps, "scrollToOverflowEnabled", sourceProps.scrollToOverflowEnabled, {})), isInvertedVirtualizedList( CoreFeatures::enablePropIteratorSetter ? sourceProps.isInvertedVirtualizedList : convertRawProp( context, rawProps, "isInvertedVirtualizedList", sourceProps.isInvertedVirtualizedList, {})) {} void ScrollViewProps::setProp( const PropsParserContext &context, RawPropsPropNameHash hash, const char *propName, RawValue const &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); static auto defaults = ScrollViewProps{}; switch (hash) { RAW_SET_PROP_SWITCH_CASE_BASIC(alwaysBounceHorizontal); RAW_SET_PROP_SWITCH_CASE_BASIC(alwaysBounceVertical); RAW_SET_PROP_SWITCH_CASE_BASIC(bounces); RAW_SET_PROP_SWITCH_CASE_BASIC(bouncesZoom); RAW_SET_PROP_SWITCH_CASE_BASIC(canCancelContentTouches); RAW_SET_PROP_SWITCH_CASE_BASIC(centerContent); RAW_SET_PROP_SWITCH_CASE_BASIC(automaticallyAdjustContentInsets); RAW_SET_PROP_SWITCH_CASE_BASIC(automaticallyAdjustsScrollIndicatorInsets); RAW_SET_PROP_SWITCH_CASE_BASIC(decelerationRate); RAW_SET_PROP_SWITCH_CASE_BASIC(directionalLockEnabled); RAW_SET_PROP_SWITCH_CASE_BASIC(indicatorStyle); RAW_SET_PROP_SWITCH_CASE_BASIC(keyboardDismissMode); RAW_SET_PROP_SWITCH_CASE_BASIC(maintainVisibleContentPosition); RAW_SET_PROP_SWITCH_CASE_BASIC(maximumZoomScale); RAW_SET_PROP_SWITCH_CASE_BASIC(minimumZoomScale); RAW_SET_PROP_SWITCH_CASE_BASIC(scrollEnabled); RAW_SET_PROP_SWITCH_CASE_BASIC(pagingEnabled); RAW_SET_PROP_SWITCH_CASE_BASIC(pinchGestureEnabled); RAW_SET_PROP_SWITCH_CASE_BASIC(scrollsToTop); RAW_SET_PROP_SWITCH_CASE_BASIC(showsHorizontalScrollIndicator); RAW_SET_PROP_SWITCH_CASE_BASIC(showsVerticalScrollIndicator); RAW_SET_PROP_SWITCH_CASE_BASIC(scrollEventThrottle); RAW_SET_PROP_SWITCH_CASE_BASIC(zoomScale); RAW_SET_PROP_SWITCH_CASE_BASIC(contentInset); RAW_SET_PROP_SWITCH_CASE_BASIC(contentOffset); RAW_SET_PROP_SWITCH_CASE_BASIC(scrollIndicatorInsets); RAW_SET_PROP_SWITCH_CASE_BASIC(snapToInterval); RAW_SET_PROP_SWITCH_CASE_BASIC(snapToAlignment); RAW_SET_PROP_SWITCH_CASE_BASIC(disableIntervalMomentum); RAW_SET_PROP_SWITCH_CASE_BASIC(snapToOffsets); RAW_SET_PROP_SWITCH_CASE_BASIC(snapToStart); RAW_SET_PROP_SWITCH_CASE_BASIC(snapToEnd); RAW_SET_PROP_SWITCH_CASE_BASIC(contentInsetAdjustmentBehavior); RAW_SET_PROP_SWITCH_CASE_BASIC(scrollToOverflowEnabled); RAW_SET_PROP_SWITCH_CASE_BASIC(isInvertedVirtualizedList); } } #pragma mark - DebugStringConvertible #if RN_DEBUG_STRING_CONVERTIBLE SharedDebugStringConvertibleList ScrollViewProps::getDebugProps() const { auto defaultScrollViewProps = ScrollViewProps{}; return ViewProps::getDebugProps() + SharedDebugStringConvertibleList{ debugStringConvertibleItem( "alwaysBounceHorizontal", alwaysBounceHorizontal, defaultScrollViewProps.alwaysBounceHorizontal), debugStringConvertibleItem( "alwaysBounceVertical", alwaysBounceVertical, defaultScrollViewProps.alwaysBounceVertical), debugStringConvertibleItem( "bounces", bounces, defaultScrollViewProps.bounces), debugStringConvertibleItem( "bouncesZoom", bouncesZoom, defaultScrollViewProps.bouncesZoom), debugStringConvertibleItem( "canCancelContentTouches", canCancelContentTouches, defaultScrollViewProps.canCancelContentTouches), debugStringConvertibleItem( "centerContent", centerContent, defaultScrollViewProps.centerContent), debugStringConvertibleItem( "automaticallyAdjustContentInsets", automaticallyAdjustContentInsets, defaultScrollViewProps.automaticallyAdjustContentInsets), debugStringConvertibleItem( "automaticallyAdjustsScrollIndicatorInsets", automaticallyAdjustsScrollIndicatorInsets, defaultScrollViewProps.automaticallyAdjustsScrollIndicatorInsets), debugStringConvertibleItem( "decelerationRate", decelerationRate, defaultScrollViewProps.decelerationRate), debugStringConvertibleItem( "directionalLockEnabled", directionalLockEnabled, defaultScrollViewProps.directionalLockEnabled), debugStringConvertibleItem( "indicatorStyle", indicatorStyle, defaultScrollViewProps.indicatorStyle), debugStringConvertibleItem( "keyboardDismissMode", keyboardDismissMode, defaultScrollViewProps.keyboardDismissMode), debugStringConvertibleItem( "maintainVisibleContentPosition", maintainVisibleContentPosition, defaultScrollViewProps.maintainVisibleContentPosition), debugStringConvertibleItem( "maximumZoomScale", maximumZoomScale, defaultScrollViewProps.maximumZoomScale), debugStringConvertibleItem( "minimumZoomScale", minimumZoomScale, defaultScrollViewProps.minimumZoomScale), debugStringConvertibleItem( "scrollEnabled", scrollEnabled, defaultScrollViewProps.scrollEnabled), debugStringConvertibleItem( "pagingEnabled", pagingEnabled, defaultScrollViewProps.pagingEnabled), debugStringConvertibleItem( "pinchGestureEnabled", pinchGestureEnabled, defaultScrollViewProps.pinchGestureEnabled), debugStringConvertibleItem( "scrollsToTop", scrollsToTop, defaultScrollViewProps.scrollsToTop), debugStringConvertibleItem( "showsHorizontalScrollIndicator", showsHorizontalScrollIndicator, defaultScrollViewProps.showsHorizontalScrollIndicator), debugStringConvertibleItem( "showsVerticalScrollIndicator", showsVerticalScrollIndicator, defaultScrollViewProps.showsVerticalScrollIndicator), debugStringConvertibleItem( "scrollEventThrottle", scrollEventThrottle, defaultScrollViewProps.scrollEventThrottle), debugStringConvertibleItem( "zoomScale", zoomScale, defaultScrollViewProps.zoomScale), debugStringConvertibleItem( "contentInset", contentInset, defaultScrollViewProps.contentInset), debugStringConvertibleItem( "contentOffset", contentOffset, defaultScrollViewProps.contentOffset), debugStringConvertibleItem( "scrollIndicatorInsets", scrollIndicatorInsets, defaultScrollViewProps.scrollIndicatorInsets), debugStringConvertibleItem( "snapToInterval", snapToInterval, defaultScrollViewProps.snapToInterval), debugStringConvertibleItem( "snapToAlignment", snapToAlignment, defaultScrollViewProps.snapToAlignment), debugStringConvertibleItem( "disableIntervalMomentum", disableIntervalMomentum, defaultScrollViewProps.disableIntervalMomentum), debugStringConvertibleItem( "snapToStart", snapToStart, defaultScrollViewProps.snapToStart), debugStringConvertibleItem( "snapToEnd", snapToEnd, defaultScrollViewProps.snapToEnd), debugStringConvertibleItem( "isInvertedVirtualizedList", snapToEnd, defaultScrollViewProps.isInvertedVirtualizedList)}; } #endif } // namespace facebook::react