mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
BackgroundStyleApplicator and boxShadow in vertical scroll views (#45803)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/45803 This makes the same rough changes as I made to images, to apply background styles in view manager layer, using BackgroundStyleApplicator, including new boxShadow style property. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D60409795 fbshipit-source-id: 304cb99855de72fe36af33cdda4a150e21b629b9
This commit is contained in:
committed by
Facebook GitHub Bot
parent
be3936762f
commit
d842fc6293
+3
@@ -46,6 +46,9 @@ export const __INTERNAL_VIEW_CONFIG: PartialViewConfig =
|
||||
},
|
||||
decelerationRate: true,
|
||||
enableSyncOnScroll: true, // Fabric only.
|
||||
experimental_boxShadow: {
|
||||
process: require('../../StyleSheet/processBoxShadow').default,
|
||||
},
|
||||
disableIntervalMomentum: true,
|
||||
maintainVisibleContentPosition: true,
|
||||
pagingEnabled: true,
|
||||
|
||||
@@ -7190,11 +7190,14 @@ public class com/facebook/react/views/scroll/ReactScrollViewManager : com/facebo
|
||||
public synthetic fun scrollTo (Ljava/lang/Object;Lcom/facebook/react/views/scroll/ReactScrollViewCommandHelper$ScrollToCommandData;)V
|
||||
public fun scrollToEnd (Lcom/facebook/react/views/scroll/ReactScrollView;Lcom/facebook/react/views/scroll/ReactScrollViewCommandHelper$ScrollToEndCommandData;)V
|
||||
public synthetic fun scrollToEnd (Ljava/lang/Object;Lcom/facebook/react/views/scroll/ReactScrollViewCommandHelper$ScrollToEndCommandData;)V
|
||||
public synthetic fun setBackgroundColor (Landroid/view/View;I)V
|
||||
public fun setBackgroundColor (Lcom/facebook/react/views/scroll/ReactScrollView;I)V
|
||||
public fun setBorderColor (Lcom/facebook/react/views/scroll/ReactScrollView;ILjava/lang/Integer;)V
|
||||
public fun setBorderRadius (Lcom/facebook/react/views/scroll/ReactScrollView;IF)V
|
||||
public fun setBorderStyle (Lcom/facebook/react/views/scroll/ReactScrollView;Ljava/lang/String;)V
|
||||
public fun setBorderWidth (Lcom/facebook/react/views/scroll/ReactScrollView;IF)V
|
||||
public fun setBottomFillColor (Lcom/facebook/react/views/scroll/ReactScrollView;I)V
|
||||
public fun setBoxShadow (Lcom/facebook/react/views/scroll/ReactScrollView;Lcom/facebook/react/bridge/ReadableArray;)V
|
||||
public fun setContentOffset (Lcom/facebook/react/views/scroll/ReactScrollView;Lcom/facebook/react/bridge/ReadableMap;)V
|
||||
public fun setDecelerationRate (Lcom/facebook/react/views/scroll/ReactScrollView;F)V
|
||||
public fun setDisableIntervalMomentum (Lcom/facebook/react/views/scroll/ReactScrollView;Z)V
|
||||
|
||||
+22
-4
@@ -39,6 +39,8 @@ import com.facebook.react.animated.NativeAnimatedModule;
|
||||
import com.facebook.react.bridge.ReactContext;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.common.ReactConstants;
|
||||
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags;
|
||||
import com.facebook.react.uimanager.BackgroundStyleApplicator;
|
||||
import com.facebook.react.uimanager.MeasureSpecAssertions;
|
||||
import com.facebook.react.uimanager.PixelUtil;
|
||||
import com.facebook.react.uimanager.PointerEvents;
|
||||
@@ -48,6 +50,7 @@ import com.facebook.react.uimanager.ReactOverflowViewWithInset;
|
||||
import com.facebook.react.uimanager.StateWrapper;
|
||||
import com.facebook.react.uimanager.ViewProps;
|
||||
import com.facebook.react.uimanager.events.NativeGestureUtil;
|
||||
import com.facebook.react.uimanager.style.Overflow;
|
||||
import com.facebook.react.views.scroll.ReactScrollViewHelper.HasFlingAnimator;
|
||||
import com.facebook.react.views.scroll.ReactScrollViewHelper.HasScrollEventThrottle;
|
||||
import com.facebook.react.views.scroll.ReactScrollViewHelper.HasScrollState;
|
||||
@@ -90,7 +93,7 @@ public class ReactScrollView extends ScrollView
|
||||
|
||||
private boolean mActivelyScrolling;
|
||||
private @Nullable Rect mClippingRect;
|
||||
private @Nullable String mOverflow = ViewProps.HIDDEN;
|
||||
private Overflow mOverflow = Overflow.SCROLL;
|
||||
private boolean mDragging;
|
||||
private boolean mPagingEnabled = false;
|
||||
private @Nullable Runnable mPostTouchRunnable;
|
||||
@@ -262,7 +265,7 @@ public class ReactScrollView extends ScrollView
|
||||
}
|
||||
|
||||
public void setOverflow(@Nullable String overflow) {
|
||||
mOverflow = overflow;
|
||||
mOverflow = overflow == null ? Overflow.SCROLL : Overflow.fromString(overflow);
|
||||
mReactBackgroundManager.setOverflow(overflow == null ? ViewProps.SCROLL : overflow);
|
||||
}
|
||||
|
||||
@@ -282,7 +285,16 @@ public class ReactScrollView extends ScrollView
|
||||
|
||||
@Override
|
||||
public @Nullable String getOverflow() {
|
||||
return mOverflow;
|
||||
switch (mOverflow) {
|
||||
case HIDDEN:
|
||||
return "hidden";
|
||||
case SCROLL:
|
||||
return "scroll";
|
||||
case VISIBLE:
|
||||
return "visible";
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -648,7 +660,13 @@ public class ReactScrollView extends ScrollView
|
||||
|
||||
@Override
|
||||
public void onDraw(Canvas canvas) {
|
||||
mReactBackgroundManager.maybeClipToPaddingBox(canvas);
|
||||
if (ReactNativeFeatureFlags.enableBackgroundStyleApplicator()) {
|
||||
if (mOverflow != Overflow.VISIBLE) {
|
||||
BackgroundStyleApplicator.clipToPaddingBox(this, canvas);
|
||||
}
|
||||
} else {
|
||||
mReactBackgroundManager.maybeClipToPaddingBox(canvas);
|
||||
}
|
||||
super.onDraw(canvas);
|
||||
}
|
||||
|
||||
|
||||
+62
-12
@@ -9,6 +9,7 @@ package com.facebook.react.views.scroll;
|
||||
|
||||
import android.graphics.Color;
|
||||
import android.view.View;
|
||||
import androidx.annotation.ColorInt;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import com.facebook.infer.annotation.Nullsafe;
|
||||
@@ -16,7 +17,11 @@ import com.facebook.react.bridge.ReadableArray;
|
||||
import com.facebook.react.bridge.ReadableMap;
|
||||
import com.facebook.react.bridge.RetryableMountingLayerException;
|
||||
import com.facebook.react.common.MapBuilder;
|
||||
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags;
|
||||
import com.facebook.react.module.annotations.ReactModule;
|
||||
import com.facebook.react.uimanager.BackgroundStyleApplicator;
|
||||
import com.facebook.react.uimanager.LengthPercentage;
|
||||
import com.facebook.react.uimanager.LengthPercentageType;
|
||||
import com.facebook.react.uimanager.PixelUtil;
|
||||
import com.facebook.react.uimanager.PointerEvents;
|
||||
import com.facebook.react.uimanager.ReactClippingViewGroupHelper;
|
||||
@@ -28,6 +33,9 @@ import com.facebook.react.uimanager.ViewGroupManager;
|
||||
import com.facebook.react.uimanager.ViewProps;
|
||||
import com.facebook.react.uimanager.annotations.ReactProp;
|
||||
import com.facebook.react.uimanager.annotations.ReactPropGroup;
|
||||
import com.facebook.react.uimanager.style.BorderRadiusProp;
|
||||
import com.facebook.react.uimanager.style.BorderStyle;
|
||||
import com.facebook.react.uimanager.style.LogicalEdge;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@@ -237,20 +245,37 @@ public class ReactScrollViewManager extends ViewGroupManager<ReactScrollView>
|
||||
},
|
||||
defaultFloat = Float.NaN)
|
||||
public void setBorderRadius(ReactScrollView view, int index, float borderRadius) {
|
||||
if (!Float.isNaN(borderRadius)) {
|
||||
borderRadius = PixelUtil.toPixelFromDIP(borderRadius);
|
||||
}
|
||||
|
||||
if (index == 0) {
|
||||
view.setBorderRadius(borderRadius);
|
||||
if (ReactNativeFeatureFlags.enableBackgroundStyleApplicator()) {
|
||||
@Nullable
|
||||
LengthPercentage radius =
|
||||
Float.isNaN(borderRadius)
|
||||
? null
|
||||
: new LengthPercentage(
|
||||
PixelUtil.toPixelFromDIP(borderRadius), LengthPercentageType.POINT);
|
||||
BackgroundStyleApplicator.setBorderRadius(view, BorderRadiusProp.values()[index], radius);
|
||||
} else {
|
||||
view.setBorderRadius(borderRadius, index - 1);
|
||||
if (!Float.isNaN(borderRadius)) {
|
||||
borderRadius = PixelUtil.toPixelFromDIP(borderRadius);
|
||||
}
|
||||
|
||||
if (index == 0) {
|
||||
view.setBorderRadius(borderRadius);
|
||||
} else {
|
||||
view.setBorderRadius(borderRadius, index - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ReactProp(name = "borderStyle")
|
||||
public void setBorderStyle(ReactScrollView view, @Nullable String borderStyle) {
|
||||
view.setBorderStyle(borderStyle);
|
||||
if (ReactNativeFeatureFlags.enableBackgroundStyleApplicator()) {
|
||||
@Nullable
|
||||
BorderStyle parsedBorderStyle =
|
||||
borderStyle == null ? null : BorderStyle.fromString(borderStyle);
|
||||
BackgroundStyleApplicator.setBorderStyle(view, parsedBorderStyle);
|
||||
} else {
|
||||
view.setBorderStyle(borderStyle);
|
||||
}
|
||||
}
|
||||
|
||||
@ReactPropGroup(
|
||||
@@ -263,10 +288,15 @@ public class ReactScrollViewManager extends ViewGroupManager<ReactScrollView>
|
||||
},
|
||||
defaultFloat = Float.NaN)
|
||||
public void setBorderWidth(ReactScrollView view, int index, float width) {
|
||||
if (!Float.isNaN(width)) {
|
||||
width = PixelUtil.toPixelFromDIP(width);
|
||||
if (ReactNativeFeatureFlags.enableBackgroundStyleApplicator()) {
|
||||
BackgroundStyleApplicator.setBorderWidth(view, LogicalEdge.values()[index], width);
|
||||
} else {
|
||||
if (!Float.isNaN(width)) {
|
||||
width = PixelUtil.toPixelFromDIP(width);
|
||||
}
|
||||
|
||||
view.setBorderWidth(SPACING_TYPES[index], width);
|
||||
}
|
||||
view.setBorderWidth(SPACING_TYPES[index], width);
|
||||
}
|
||||
|
||||
@ReactPropGroup(
|
||||
@@ -279,7 +309,11 @@ public class ReactScrollViewManager extends ViewGroupManager<ReactScrollView>
|
||||
},
|
||||
customType = "Color")
|
||||
public void setBorderColor(ReactScrollView view, int index, @Nullable Integer color) {
|
||||
view.setBorderColor(SPACING_TYPES[index], color);
|
||||
if (ReactNativeFeatureFlags.enableBackgroundStyleApplicator()) {
|
||||
BackgroundStyleApplicator.setBorderColor(view, LogicalEdge.ALL, color);
|
||||
} else {
|
||||
view.setBorderColor(SPACING_TYPES[index], color);
|
||||
}
|
||||
}
|
||||
|
||||
@ReactProp(name = "overflow")
|
||||
@@ -339,6 +373,22 @@ public class ReactScrollViewManager extends ViewGroupManager<ReactScrollView>
|
||||
}
|
||||
}
|
||||
|
||||
@ReactProp(name = ViewProps.BOX_SHADOW, customType = "BoxShadow")
|
||||
public void setBoxShadow(ReactScrollView view, ReadableArray shadows) {
|
||||
if (ReactNativeFeatureFlags.enableBackgroundStyleApplicator()) {
|
||||
BackgroundStyleApplicator.setBoxShadow(view, shadows);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBackgroundColor(ReactScrollView view, @ColorInt int backgroundColor) {
|
||||
if (ReactNativeFeatureFlags.enableBackgroundStyleApplicator()) {
|
||||
BackgroundStyleApplicator.setBackgroundColor(view, backgroundColor);
|
||||
} else {
|
||||
super.setBackgroundColor(view, backgroundColor);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable Object updateState(
|
||||
ReactScrollView view, ReactStylesDiffMap props, StateWrapper stateWrapper) {
|
||||
|
||||
Reference in New Issue
Block a user