Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/react-native/Libraries/StyleSheet/StyleSheetTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -778,8 +778,8 @@ export type ____ViewStyle_InternalCore = $ReadOnly<{
elevation?: number,
pointerEvents?: 'auto' | 'none' | 'box-none' | 'box-only',
cursor?: CursorValue,
experimental_boxShadow?: $ReadOnlyArray<BoxShadowPrimitive>,
experimental_filter?: $ReadOnlyArray<FilterFunction>,
experimental_boxShadow?: $ReadOnlyArray<BoxShadowPrimitive> | string,
experimental_filter?: $ReadOnlyArray<FilterFunction> | string,
experimental_mixBlendMode?: ____BlendMode_Internal,
}>;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8776,8 +8776,8 @@ export type ____ViewStyle_InternalCore = $ReadOnly<{
elevation?: number,
pointerEvents?: \\"auto\\" | \\"none\\" | \\"box-none\\" | \\"box-only\\",
cursor?: CursorValue,
experimental_boxShadow?: $ReadOnlyArray<BoxShadowPrimitive>,
experimental_filter?: $ReadOnlyArray<FilterFunction>,
experimental_boxShadow?: $ReadOnlyArray<BoxShadowPrimitive> | string,
experimental_filter?: $ReadOnlyArray<FilterFunction> | string,
experimental_mixBlendMode?: ____BlendMode_Internal,
}>;
export type ____ViewStyle_Internal = $ReadOnly<{
Expand Down
84 changes: 84 additions & 0 deletions packages/react-native/ReactAndroid/api/ReactAndroid.api
Original file line number Diff line number Diff line change
Expand Up @@ -5915,6 +5915,49 @@ public final class com/facebook/react/uimanager/style/BorderRadiusStyle {
public fun toString ()Ljava/lang/String;
}

public final class com/facebook/react/uimanager/style/BorderStyle : java/lang/Enum {
public static final field Companion Lcom/facebook/react/uimanager/style/BorderStyle$Companion;
public static final field DASHED Lcom/facebook/react/uimanager/style/BorderStyle;
public static final field DOTTED Lcom/facebook/react/uimanager/style/BorderStyle;
public static final field SOLID Lcom/facebook/react/uimanager/style/BorderStyle;
public static final fun fromString (Ljava/lang/String;)Lcom/facebook/react/uimanager/style/BorderStyle;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lcom/facebook/react/uimanager/style/BorderStyle;
public static fun values ()[Lcom/facebook/react/uimanager/style/BorderStyle;
}

public final class com/facebook/react/uimanager/style/BorderStyle$Companion {
public final fun fromString (Ljava/lang/String;)Lcom/facebook/react/uimanager/style/BorderStyle;
}

public final class com/facebook/react/uimanager/style/BoxShadow {
public static final field Companion Lcom/facebook/react/uimanager/style/BoxShadow$Companion;
public fun <init> (FFLjava/lang/Integer;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/Boolean;)V
public synthetic fun <init> (FFLjava/lang/Integer;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()F
public final fun component2 ()F
public final fun component3 ()Ljava/lang/Integer;
public final fun component4 ()Ljava/lang/Float;
public final fun component5 ()Ljava/lang/Float;
public final fun component6 ()Ljava/lang/Boolean;
public final fun copy (FFLjava/lang/Integer;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/Boolean;)Lcom/facebook/react/uimanager/style/BoxShadow;
public static synthetic fun copy$default (Lcom/facebook/react/uimanager/style/BoxShadow;FFLjava/lang/Integer;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/Boolean;ILjava/lang/Object;)Lcom/facebook/react/uimanager/style/BoxShadow;
public fun equals (Ljava/lang/Object;)Z
public final fun getBlurRadius ()Ljava/lang/Float;
public final fun getColor ()Ljava/lang/Integer;
public final fun getInset ()Ljava/lang/Boolean;
public final fun getOffsetX ()F
public final fun getOffsetY ()F
public final fun getSpreadDistance ()Ljava/lang/Float;
public fun hashCode ()I
public static final fun parse (Lcom/facebook/react/bridge/ReadableMap;)Lcom/facebook/react/uimanager/style/BoxShadow;
public fun toString ()Ljava/lang/String;
}

public final class com/facebook/react/uimanager/style/BoxShadow$Companion {
public final fun parse (Lcom/facebook/react/bridge/ReadableMap;)Lcom/facebook/react/uimanager/style/BoxShadow;
}

public final class com/facebook/react/uimanager/style/ComputedBorderRadius {
public fun <init> ()V
public fun <init> (FFFF)V
Expand Down Expand Up @@ -5945,6 +5988,47 @@ public final class com/facebook/react/uimanager/style/ComputedBorderRadiusProp :
public static fun values ()[Lcom/facebook/react/uimanager/style/ComputedBorderRadiusProp;
}

public abstract class com/facebook/react/uimanager/style/LogicalEdge : java/lang/Enum {
public static final field ALL Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field BLOCK Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field BLOCK_END Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field BLOCK_START Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field BOTTOM Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field Companion Lcom/facebook/react/uimanager/style/LogicalEdge$Companion;
public static final field END Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field HORIZONTAL Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field LEFT Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field RIGHT Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field START Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field TOP Lcom/facebook/react/uimanager/style/LogicalEdge;
public static final field VERTICAL Lcom/facebook/react/uimanager/style/LogicalEdge;
public synthetic fun <init> (Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public static final fun fromSpacingType (I)Lcom/facebook/react/uimanager/style/LogicalEdge;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public abstract fun toSpacingType ()I
public static fun valueOf (Ljava/lang/String;)Lcom/facebook/react/uimanager/style/LogicalEdge;
public static fun values ()[Lcom/facebook/react/uimanager/style/LogicalEdge;
}

public final class com/facebook/react/uimanager/style/LogicalEdge$Companion {
public final fun fromSpacingType (I)Lcom/facebook/react/uimanager/style/LogicalEdge;
}

public final class com/facebook/react/uimanager/style/Overflow : java/lang/Enum {
public static final field Companion Lcom/facebook/react/uimanager/style/Overflow$Companion;
public static final field HIDDEN Lcom/facebook/react/uimanager/style/Overflow;
public static final field SCROLL Lcom/facebook/react/uimanager/style/Overflow;
public static final field VISIBLE Lcom/facebook/react/uimanager/style/Overflow;
public static final fun fromString (Ljava/lang/String;)Lcom/facebook/react/uimanager/style/Overflow;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lcom/facebook/react/uimanager/style/Overflow;
public static fun values ()[Lcom/facebook/react/uimanager/style/Overflow;
}

public final class com/facebook/react/uimanager/style/Overflow$Companion {
public final fun fromString (Ljava/lang/String;)Lcom/facebook/react/uimanager/style/Overflow;
}

public class com/facebook/react/uimanager/util/ReactFindViewUtil {
public fun <init> ()V
public static fun addViewListener (Lcom/facebook/react/uimanager/util/ReactFindViewUtil$OnViewFoundListener;)V
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import com.facebook.react.uimanager.Spacing;
import com.facebook.react.uimanager.style.BorderRadiusProp;
import com.facebook.react.uimanager.style.BorderRadiusStyle;
import com.facebook.react.uimanager.style.BorderStyle;
import com.facebook.react.uimanager.style.ComputedBorderRadius;
import java.util.Locale;
import java.util.Objects;
Expand Down Expand Up @@ -64,29 +65,23 @@ public class CSSBackgroundDrawable extends Drawable {
// 0 == 0x00000000, all bits set to 0.
private static final int ALL_BITS_UNSET = 0;

private enum BorderStyle {
SOLID,
DASHED,
DOTTED;
private static @Nullable PathEffect getPathEffect(BorderStyle style, float borderWidth) {
switch (style) {
case SOLID:
return null;

public static @Nullable PathEffect getPathEffect(BorderStyle style, float borderWidth) {
switch (style) {
case SOLID:
return null;
case DASHED:
return new DashPathEffect(
new float[] {borderWidth * 3, borderWidth * 3, borderWidth * 3, borderWidth * 3}, 0);

case DASHED:
return new DashPathEffect(
new float[] {borderWidth * 3, borderWidth * 3, borderWidth * 3, borderWidth * 3}, 0);
case DOTTED:
return new DashPathEffect(
new float[] {borderWidth, borderWidth, borderWidth, borderWidth}, 0);

case DOTTED:
return new DashPathEffect(
new float[] {borderWidth, borderWidth, borderWidth, borderWidth}, 0);

default:
return null;
}
default:
return null;
}
};
}

/* Value at Spacing.ALL index used for rounded borders, whole array used by rectangular borders */
private @Nullable Spacing mBorderWidth;
Expand Down Expand Up @@ -255,13 +250,21 @@ private void setBorderAlpha(int position, float alpha) {
public void setBorderStyle(@Nullable String style) {
BorderStyle borderStyle =
style == null ? null : BorderStyle.valueOf(style.toUpperCase(Locale.US));
setBorderStyle(borderStyle);
}

public void setBorderStyle(@Nullable BorderStyle borderStyle) {
if (mBorderStyle != borderStyle) {
mBorderStyle = borderStyle;
mNeedUpdatePathForBorderRadius = true;
invalidateSelf();
}
}

public @Nullable BorderStyle getBorderStyle() {
return mBorderStyle;
}

/**
* @deprecated Use {@link #setBorderRadius(BorderRadiusProp, LengthPercentage)} instead.
*/
Expand All @@ -286,6 +289,7 @@ public void setRadius(float radius, int position) {

if (boxedRadius == null) {
mBorderRadius.set(BorderRadiusProp.values()[position], null);
invalidateSelf();
} else {
setBorderRadius(
BorderRadiusProp.values()[position],
Expand Down Expand Up @@ -1012,14 +1016,23 @@ private static void getEllipseIntersectionWithLine(
}

public float getBorderWidthOrDefaultTo(final float defaultValue, final int spacingType) {
if (mBorderWidth == null) {
@Nullable Float width = getBorderWidth(spacingType);
if (width == null) {
return defaultValue;
}

return width;
}

public @Nullable Float getBorderWidth(int spacingType) {
if (mBorderWidth == null) {
return null;
}

final float width = mBorderWidth.getRaw(spacingType);

if (Float.isNaN(width)) {
return defaultValue;
return null;
}

return width;
Expand All @@ -1029,15 +1042,15 @@ public float getBorderWidthOrDefaultTo(final float defaultValue, final int spaci
private void updatePathEffect() {
// Used for rounded border and rounded background
PathEffect mPathEffectForBorderStyle =
mBorderStyle != null ? BorderStyle.getPathEffect(mBorderStyle, getFullBorderWidth()) : null;
mBorderStyle != null ? getPathEffect(mBorderStyle, getFullBorderWidth()) : null;

mPaint.setPathEffect(mPathEffectForBorderStyle);
}

private void updatePathEffect(int borderWidth) {
PathEffect pathEffectForBorderStyle = null;
if (mBorderStyle != null) {
pathEffectForBorderStyle = BorderStyle.getPathEffect(mBorderStyle, borderWidth);
pathEffectForBorderStyle = getPathEffect(mBorderStyle, borderWidth);
}
mPaint.setPathEffect(pathEffectForBorderStyle);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* 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.
*/

package com.facebook.react.uimanager.style

public enum class BorderStyle {
SOLID,
DASHED,
DOTTED;

public companion object {
@JvmStatic
public fun fromString(borderStyle: String): BorderStyle? {
return when (borderStyle.lowercase()) {
"solid" -> SOLID
"dashed" -> DASHED
"dotted" -> DOTTED
else -> null
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* 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.
*/

package com.facebook.react.uimanager.style

import androidx.annotation.ColorInt
import com.facebook.react.bridge.ReadableMap

/** Represents all logical properties and shorthands for border radius. */
public data class BoxShadow(
val offsetX: Float,
val offsetY: Float,
@ColorInt val color: Int? = null,
val blurRadius: Float? = null,
val spreadDistance: Float? = null,
val inset: Boolean? = null,
) {
public companion object {
@JvmStatic
public fun parse(boxShadow: ReadableMap): BoxShadow? {
if (!(boxShadow.hasKey("offsetX") && boxShadow.hasKey("offsetY"))) {
return null
}

val offsetX = boxShadow.getDouble("offsetX").toFloat()
val offsetY = boxShadow.getDouble("offsetY").toFloat()

val color = if (boxShadow.hasKey("color")) boxShadow.getInt("color") else null
val blurRadius =
if (boxShadow.hasKey("blurRadius")) boxShadow.getDouble("blurRadius").toFloat() else null
val spreadDistance =
if (boxShadow.hasKey("spreadDistance")) boxShadow.getDouble("spreadDistance").toFloat()
else null
val inset = if (boxShadow.hasKey("inset")) boxShadow.getBoolean("inset") else null

return BoxShadow(
offsetX = offsetX,
offsetY = offsetY,
color = color,
blurRadius = blurRadius,
spreadDistance = spreadDistance,
inset = inset,
)
}
}
}
Loading