mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add BorderDrawable to replace border logic on CSSBackgroundDrawable (#46745)
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/46745 **Note:** This diff still does nothing yet, it will be enabled on a diff further up the stack. This split is just to simplify reviewing `CSSBackgroundDrawable` holds the drawing logic for both **Borders** and **Background**. This is not ideal since it results in a huge file which does 2 things. We now have `CompositeBackgroundDrawable` which allows us to set a different drawable per "layer" on our view. By splitting up **Border** and **Background** logic we get better modularity and it'll make it easier to implement more `backgroundImage` features without further bloating the `CSSBackgroundDrawable` file Also, this helps with the kotlinification efforts Changelog: [Internal] Reviewed By: NickGerleman Differential Revision: D62898246 fbshipit-source-id: 15d1a4ef61f0c757e648c002fc7ef26626d8e3f6
This commit is contained in:
committed by
Facebook GitHub Bot
parent
f41c59da96
commit
b3d5b793a4
+1071
File diff suppressed because it is too large
Load Diff
+107
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* 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 android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.util.LayoutDirection
|
||||
import androidx.annotation.ColorInt
|
||||
import com.facebook.react.modules.i18nmanager.I18nUtil
|
||||
|
||||
internal data class ColorEdges(
|
||||
@ColorInt val left: Int = Color.BLACK,
|
||||
@ColorInt val top: Int = Color.BLACK,
|
||||
@ColorInt val right: Int = Color.BLACK,
|
||||
@ColorInt val bottom: Int = Color.BLACK,
|
||||
)
|
||||
|
||||
@JvmInline
|
||||
internal value class BorderColors(
|
||||
@ColorInt val edgeColors: Array<Int?> = arrayOfNulls<Int?>(LogicalEdge.values().size)
|
||||
) {
|
||||
|
||||
public fun resolve(layoutDirection: Int, context: Context): ColorEdges {
|
||||
return when (layoutDirection) {
|
||||
LayoutDirection.LTR ->
|
||||
ColorEdges(
|
||||
edgeColors[LogicalEdge.START.ordinal]
|
||||
?: edgeColors[LogicalEdge.LEFT.ordinal]
|
||||
?: edgeColors[LogicalEdge.HORIZONTAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK,
|
||||
edgeColors[LogicalEdge.BLOCK_START.ordinal]
|
||||
?: edgeColors[LogicalEdge.TOP.ordinal]
|
||||
?: edgeColors[LogicalEdge.BLOCK.ordinal]
|
||||
?: edgeColors[LogicalEdge.VERTICAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK,
|
||||
edgeColors[LogicalEdge.END.ordinal]
|
||||
?: edgeColors[LogicalEdge.RIGHT.ordinal]
|
||||
?: edgeColors[LogicalEdge.HORIZONTAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK,
|
||||
edgeColors[LogicalEdge.BLOCK_END.ordinal]
|
||||
?: edgeColors[LogicalEdge.BOTTOM.ordinal]
|
||||
?: edgeColors[LogicalEdge.BLOCK.ordinal]
|
||||
?: edgeColors[LogicalEdge.VERTICAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK)
|
||||
LayoutDirection.RTL ->
|
||||
if (I18nUtil.instance.doLeftAndRightSwapInRTL(context)) {
|
||||
ColorEdges(
|
||||
edgeColors[LogicalEdge.END.ordinal]
|
||||
?: edgeColors[LogicalEdge.RIGHT.ordinal]
|
||||
?: edgeColors[LogicalEdge.HORIZONTAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK,
|
||||
edgeColors[LogicalEdge.BLOCK_START.ordinal]
|
||||
?: edgeColors[LogicalEdge.TOP.ordinal]
|
||||
?: edgeColors[LogicalEdge.BLOCK.ordinal]
|
||||
?: edgeColors[LogicalEdge.VERTICAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK,
|
||||
edgeColors[LogicalEdge.START.ordinal]
|
||||
?: edgeColors[LogicalEdge.LEFT.ordinal]
|
||||
?: edgeColors[LogicalEdge.HORIZONTAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK,
|
||||
edgeColors[LogicalEdge.BLOCK_END.ordinal]
|
||||
?: edgeColors[LogicalEdge.BOTTOM.ordinal]
|
||||
?: edgeColors[LogicalEdge.BLOCK.ordinal]
|
||||
?: edgeColors[LogicalEdge.VERTICAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK)
|
||||
} else {
|
||||
ColorEdges(
|
||||
edgeColors[LogicalEdge.END.ordinal]
|
||||
?: edgeColors[LogicalEdge.LEFT.ordinal]
|
||||
?: edgeColors[LogicalEdge.HORIZONTAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK,
|
||||
edgeColors[LogicalEdge.BLOCK_START.ordinal]
|
||||
?: edgeColors[LogicalEdge.TOP.ordinal]
|
||||
?: edgeColors[LogicalEdge.BLOCK.ordinal]
|
||||
?: edgeColors[LogicalEdge.VERTICAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK,
|
||||
edgeColors[LogicalEdge.START.ordinal]
|
||||
?: edgeColors[LogicalEdge.RIGHT.ordinal]
|
||||
?: edgeColors[LogicalEdge.HORIZONTAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK,
|
||||
edgeColors[LogicalEdge.BLOCK_END.ordinal]
|
||||
?: edgeColors[LogicalEdge.BOTTOM.ordinal]
|
||||
?: edgeColors[LogicalEdge.BLOCK.ordinal]
|
||||
?: edgeColors[LogicalEdge.VERTICAL.ordinal]
|
||||
?: edgeColors[LogicalEdge.ALL.ordinal]
|
||||
?: Color.BLACK)
|
||||
}
|
||||
else -> throw IllegalArgumentException("Expected resolved layout direction")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user