refactor: merge PaddingValues to ComponentPadding

This commit is contained in:
2023-12-04 00:01:15 +08:00
parent 3c59e63d5c
commit 866dd5521c
12 changed files with 145 additions and 113 deletions

View File

@@ -29,7 +29,6 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@@ -52,6 +51,7 @@ import androidx.compose.ui.unit.dp
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import com.highcapable.flexiui.LocalSizes import com.highcapable.flexiui.LocalSizes
import com.highcapable.flexiui.LocalTypography import com.highcapable.flexiui.LocalTypography
import com.highcapable.flexiui.extension.ComponentPadding
import com.highcapable.flexiui.resources.Icons import com.highcapable.flexiui.resources.Icons
import com.highcapable.flexiui.resources.icon.ArrowNaviUp import com.highcapable.flexiui.resources.icon.ArrowNaviUp
import com.highcapable.flexiui.resources.icon.FinishClose import com.highcapable.flexiui.resources.icon.FinishClose
@@ -65,7 +65,7 @@ data class ActionBarColors(
@Immutable @Immutable
data class ActionBarStyle( data class ActionBarStyle(
val padding: PaddingValues, val padding: ComponentPadding,
val contentSpacing: Dp, val contentSpacing: Dp,
val titleTextStyle: TextStyle, val titleTextStyle: TextStyle,
val subTextStyle: TextStyle, val subTextStyle: TextStyle,
@@ -343,8 +343,8 @@ private fun defaultActionBarColors() = ActionBarColors(
private fun defaultActionBarStyle() = ActionBarStyle( private fun defaultActionBarStyle() = ActionBarStyle(
padding = when { padding = when {
LocalInSurface.current || LocalInAreaBox.current -> LocalInSurface.current || LocalInAreaBox.current ->
PaddingValues(vertical = LocalSizes.current.spacingPrimary) ComponentPadding(vertical = LocalSizes.current.spacingPrimary)
else -> PaddingValues(LocalSizes.current.spacingPrimary) else -> ComponentPadding(LocalSizes.current.spacingPrimary)
}, },
contentSpacing = LocalSizes.current.spacingSecondary, contentSpacing = LocalSizes.current.spacingSecondary,
titleTextStyle = when (LocalActionBarType.current) { titleTextStyle = when (LocalActionBarType.current) {

View File

@@ -30,7 +30,6 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@@ -53,11 +52,12 @@ import com.highcapable.flexiui.DefaultShapes
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import com.highcapable.flexiui.LocalShapes import com.highcapable.flexiui.LocalShapes
import com.highcapable.flexiui.LocalSizes import com.highcapable.flexiui.LocalSizes
import com.highcapable.flexiui.extension.ComponentPadding
import com.highcapable.flexiui.extension.borderOrNot import com.highcapable.flexiui.extension.borderOrNot
@Immutable @Immutable
data class AreaBoxStyle( data class AreaBoxStyle(
val padding: PaddingValues, val padding: ComponentPadding,
val shape: Shape, val shape: Shape,
val border: BorderStroke, val border: BorderStroke,
val shadowSize: Dp val shadowSize: Dp
@@ -181,7 +181,7 @@ internal fun withAreaBoxShape(
@Composable @Composable
@ReadOnlyComposable @ReadOnlyComposable
private fun defaultAreaBoxStyle() = AreaBoxStyle( private fun defaultAreaBoxStyle() = AreaBoxStyle(
padding = PaddingValues(LocalSizes.current.spacingPrimary), padding = ComponentPadding(LocalSizes.current.spacingPrimary),
shape = LocalAreaBoxShape.current, shape = LocalAreaBoxShape.current,
border = defaultAreaBoxBorder(), border = defaultAreaBoxBorder(),
shadowSize = DefaultAreaBoxShadowSize shadowSize = DefaultAreaBoxShadowSize

View File

@@ -27,7 +27,6 @@ import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@@ -47,6 +46,7 @@ import androidx.compose.ui.semantics.Role
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import com.highcapable.flexiui.LocalShapes import com.highcapable.flexiui.LocalShapes
import com.highcapable.flexiui.LocalSizes import com.highcapable.flexiui.LocalSizes
import com.highcapable.flexiui.extension.ComponentPadding
import com.highcapable.flexiui.extension.borderOrNot import com.highcapable.flexiui.extension.borderOrNot
import com.highcapable.flexiui.extension.orElse import com.highcapable.flexiui.extension.orElse
import com.highcapable.flexiui.extension.status import com.highcapable.flexiui.extension.status
@@ -64,7 +64,7 @@ data class ButtonColors(
@Immutable @Immutable
data class ButtonStyle( data class ButtonStyle(
val rippleStyle: RippleStyle, val rippleStyle: RippleStyle,
val padding: PaddingValues, val padding: ComponentPadding,
val shape: Shape, val shape: Shape,
val border: BorderStroke val border: BorderStroke
) )
@@ -243,7 +243,7 @@ private fun defaultButtonColors() =
@ReadOnlyComposable @ReadOnlyComposable
private fun defaultButtonStyle() = ButtonStyle( private fun defaultButtonStyle() = ButtonStyle(
rippleStyle = defaultButtonRippleStyle(), rippleStyle = defaultButtonRippleStyle(),
padding = PaddingValues( padding = ComponentPadding(
horizontal = LocalSizes.current.spacingPrimary, horizontal = LocalSizes.current.spacingPrimary,
vertical = LocalSizes.current.spacingSecondary vertical = LocalSizes.current.spacingSecondary
), ),
@@ -270,7 +270,7 @@ private fun defaultIconButtonColors() = ButtonColors(
@ReadOnlyComposable @ReadOnlyComposable
private fun defaultIconButtonStyle() = ButtonStyle( private fun defaultIconButtonStyle() = ButtonStyle(
rippleStyle = defaultIconButtonRippleStyle(), rippleStyle = defaultIconButtonRippleStyle(),
padding = PaddingValues(), padding = ComponentPadding(),
shape = LocalShapes.current.tertiary, shape = LocalShapes.current.tertiary,
border = defaultButtonBorder() border = defaultButtonBorder()
) )

View File

@@ -46,7 +46,6 @@ import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.BoxWithConstraintsScope import androidx.compose.foundation.layout.BoxWithConstraintsScope
import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
@@ -106,10 +105,8 @@ import androidx.compose.ui.window.PopupProperties
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import com.highcapable.flexiui.LocalShapes import com.highcapable.flexiui.LocalShapes
import com.highcapable.flexiui.LocalSizes import com.highcapable.flexiui.LocalSizes
import com.highcapable.flexiui.extension.ComponentPadding
import com.highcapable.flexiui.extension.borderOrNot import com.highcapable.flexiui.extension.borderOrNot
import com.highcapable.flexiui.extension.calculateEnd
import com.highcapable.flexiui.extension.calculateStart
import com.highcapable.flexiui.extension.horizontal
import com.highcapable.flexiui.extension.orElse import com.highcapable.flexiui.extension.orElse
import com.highcapable.flexiui.extension.solidColor import com.highcapable.flexiui.extension.solidColor
import com.highcapable.flexiui.extension.status import com.highcapable.flexiui.extension.status
@@ -138,7 +135,7 @@ data class DropdownMenuColors(
@Immutable @Immutable
data class DropdownListStyle( data class DropdownListStyle(
val padding: PaddingValues, val padding: ComponentPadding,
val shape: Shape, val shape: Shape,
val endIconSize: Dp, val endIconSize: Dp,
val borderInactive: BorderStroke, val borderInactive: BorderStroke,
@@ -227,7 +224,7 @@ fun DropdownList(
DropdownMenu( DropdownMenu(
expanded = expanded, expanded = expanded,
onDismissRequest = { onExpandedChange(false) }, onDismissRequest = { onExpandedChange(false) },
offset = DpOffset(-style.padding.calculateStart(), style.padding.calculateEnd()), offset = DpOffset(-style.padding.start, style.padding.end),
modifier = Modifier.width(menuMaxWidth).heightIn(max = menuMaxHeight), modifier = Modifier.width(menuMaxWidth).heightIn(max = menuMaxHeight),
colors = menuColors, colors = menuColors,
style = menuStyle, style = menuStyle,
@@ -568,7 +565,7 @@ private fun defaultDropdownMenuColors() = DropdownMenuColors(
@Composable @Composable
@ReadOnlyComposable @ReadOnlyComposable
private fun defaultDropdownListStyle() = DropdownListStyle( private fun defaultDropdownListStyle() = DropdownListStyle(
padding = PaddingValues(LocalSizes.current.spacingSecondary), padding = ComponentPadding(LocalSizes.current.spacingSecondary),
shape = withAreaBoxShape(), shape = withAreaBoxShape(),
endIconSize = LocalSizes.current.iconSizeTertiary, endIconSize = LocalSizes.current.iconSizeTertiary,
borderInactive = defaultDropdownListInactiveBorder(), borderInactive = defaultDropdownListInactiveBorder(),
@@ -581,11 +578,11 @@ private fun defaultDropdownMenuStyle() = DropdownMenuStyle(
inTransitionDuration = DefaultInTransitionDuration, inTransitionDuration = DefaultInTransitionDuration,
outTransitionDuration = DefaultOutTransitionDuration, outTransitionDuration = DefaultOutTransitionDuration,
contentStyle = AreaBox.style.copy( contentStyle = AreaBox.style.copy(
padding = PaddingValues(horizontal = DefaultMenuContentPadding), padding = ComponentPadding(horizontal = DefaultMenuContentPadding),
shape = LocalShapes.current.secondary shape = LocalShapes.current.secondary
), ),
borderStyle = AreaBox.style.copy( borderStyle = AreaBox.style.copy(
padding = PaddingValues(LocalSizes.current.spacingTertiary), padding = ComponentPadding(LocalSizes.current.spacingTertiary),
shadowSize = LocalSizes.current.zoomSizeTertiary, shadowSize = LocalSizes.current.zoomSizeTertiary,
shape = LocalShapes.current.primary shape = LocalShapes.current.primary
) )

View File

@@ -57,6 +57,7 @@ import androidx.compose.ui.semantics.Role
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import com.highcapable.flexiui.LocalSizes import com.highcapable.flexiui.LocalSizes
import com.highcapable.flexiui.extension.ComponentPadding
import com.highcapable.flexiui.extension.orElse import com.highcapable.flexiui.extension.orElse
import com.highcapable.flexiui.extension.status import com.highcapable.flexiui.extension.status
import com.highcapable.flexiui.interaction.Interaction import com.highcapable.flexiui.interaction.Interaction
@@ -74,7 +75,7 @@ data class NavigationColors(
data class NavigationStyle( data class NavigationStyle(
val boxStyle: AreaBoxStyle, val boxStyle: AreaBoxStyle,
val contentSpacing: Dp, val contentSpacing: Dp,
val contentPadding: PaddingValues, val contentPadding: ComponentPadding,
val contentShape: Shape val contentShape: Shape
) )
@@ -248,7 +249,7 @@ private fun defaultNavigationColors() = NavigationColors(
private fun defaultNavigationStyle() = NavigationStyle( private fun defaultNavigationStyle() = NavigationStyle(
boxStyle = AreaBox.style, boxStyle = AreaBox.style,
contentSpacing = LocalSizes.current.spacingSecondary, contentSpacing = LocalSizes.current.spacingSecondary,
contentPadding = PaddingValues( contentPadding = ComponentPadding(
horizontal = LocalSizes.current.spacingPrimary, horizontal = LocalSizes.current.spacingPrimary,
vertical = LocalSizes.current.spacingSecondary vertical = LocalSizes.current.spacingSecondary
), ),

View File

@@ -26,7 +26,6 @@ package com.highcapable.flexiui.component
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.displayCutoutPadding import androidx.compose.foundation.layout.displayCutoutPadding
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@@ -34,16 +33,14 @@ import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import com.highcapable.flexiui.extension.bottom import androidx.compose.ui.unit.dp
import com.highcapable.flexiui.extension.calculateEnd import com.highcapable.flexiui.extension.ComponentPadding
import com.highcapable.flexiui.extension.calculateStart
import com.highcapable.flexiui.extension.top
@Composable @Composable
fun Scaffold( fun Scaffold(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
colors: SurfaceColors = Surface.colors, colors: SurfaceColors = Surface.colors,
padding: PaddingValues = Surface.padding, padding: ComponentPadding = Surface.padding,
fitsSystemBars: Boolean = true, fitsSystemBars: Boolean = true,
verticalArrangement: Arrangement.Vertical = Arrangement.Top, verticalArrangement: Arrangement.Vertical = Arrangement.Top,
horizontalAlignment: Alignment.Horizontal = Alignment.Start, horizontalAlignment: Alignment.Horizontal = Alignment.Start,
@@ -52,15 +49,8 @@ fun Scaffold(
navigation: @Composable () -> Unit = {}, navigation: @Composable () -> Unit = {},
content: @Composable () -> Unit content: @Composable () -> Unit
) { ) {
val outBoxPadding = PaddingValues( val outBoxPadding = padding.copy(top = 0.dp)
start = padding.calculateStart(), val inBoxPadding = padding.copy(start = 0.dp, end = 0.dp)
end = padding.calculateEnd(),
bottom = padding.bottom
)
val inBoxPadding = PaddingValues(
top = padding.top,
bottom = padding.bottom
)
Surface( Surface(
modifier = if (fitsSystemBars) modifier = if (fitsSystemBars)
Modifier.systemBarsPadding() Modifier.systemBarsPadding()

View File

@@ -26,7 +26,6 @@ package com.highcapable.flexiui.component
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.CompositionLocalProvider
@@ -39,6 +38,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.debugInspectorInfo import androidx.compose.ui.platform.debugInspectorInfo
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import com.highcapable.flexiui.LocalSizes import com.highcapable.flexiui.LocalSizes
import com.highcapable.flexiui.extension.ComponentPadding
@Immutable @Immutable
data class SurfaceColors( data class SurfaceColors(
@@ -51,7 +51,7 @@ fun Surface(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
initializer: @Composable Modifier.() -> Modifier = { Modifier }, initializer: @Composable Modifier.() -> Modifier = { Modifier },
colors: SurfaceColors = Surface.colors, colors: SurfaceColors = Surface.colors,
padding: PaddingValues = Surface.padding, padding: ComponentPadding = Surface.padding,
content: @Composable BoxScope.() -> Unit content: @Composable BoxScope.() -> Unit
) { ) {
CompositionLocalProvider( CompositionLocalProvider(
@@ -65,7 +65,7 @@ fun Surface(
private fun Modifier.surface( private fun Modifier.surface(
colors: SurfaceColors, colors: SurfaceColors,
padding: PaddingValues, padding: ComponentPadding,
then: Modifier, then: Modifier,
initializer: @Composable Modifier.() -> Modifier initializer: @Composable Modifier.() -> Modifier
) = composed( ) = composed(
@@ -86,7 +86,7 @@ object Surface {
@Composable @Composable
@ReadOnlyComposable @ReadOnlyComposable
get() = defaultSurfaceColors() get() = defaultSurfaceColors()
val padding: PaddingValues val padding: ComponentPadding
@Composable @Composable
@ReadOnlyComposable @ReadOnlyComposable
get() = defaultSurfacePadding() get() = defaultSurfacePadding()
@@ -103,4 +103,4 @@ private fun defaultSurfaceColors() = SurfaceColors(
@Composable @Composable
@ReadOnlyComposable @ReadOnlyComposable
private fun defaultSurfacePadding() = PaddingValues(LocalSizes.current.spacingPrimary) private fun defaultSurfacePadding() = ComponentPadding(LocalSizes.current.spacingPrimary)

View File

@@ -33,7 +33,6 @@ import androidx.compose.foundation.gestures.rememberDraggableState
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsHoveredAsState import androidx.compose.foundation.interaction.collectIsHoveredAsState
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
@@ -62,8 +61,8 @@ import androidx.compose.ui.unit.dp
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import com.highcapable.flexiui.LocalShapes import com.highcapable.flexiui.LocalShapes
import com.highcapable.flexiui.LocalSizes import com.highcapable.flexiui.LocalSizes
import com.highcapable.flexiui.extension.ComponentPadding
import com.highcapable.flexiui.extension.borderOrNot import com.highcapable.flexiui.extension.borderOrNot
import com.highcapable.flexiui.extension.horizontal
import com.highcapable.flexiui.extension.status import com.highcapable.flexiui.extension.status
import com.highcapable.flexiui.interaction.clickable import com.highcapable.flexiui.interaction.clickable
import kotlin.math.roundToInt import kotlin.math.roundToInt
@@ -77,7 +76,7 @@ data class SwitchColors(
@Immutable @Immutable
data class SwitchStyle( data class SwitchStyle(
val padding: PaddingValues, val padding: ComponentPadding,
val contentSpacing: Dp, val contentSpacing: Dp,
val thumbRadius: Dp, val thumbRadius: Dp,
val thumbGain: Float, val thumbGain: Float,
@@ -216,7 +215,7 @@ private fun defaultSwitchColors() = SwitchColors(
@Composable @Composable
@ReadOnlyComposable @ReadOnlyComposable
private fun defaultSwitchStyle() = SwitchStyle( private fun defaultSwitchStyle() = SwitchStyle(
padding = PaddingValues(horizontal = DefaultSwitchPadding), padding = ComponentPadding(horizontal = DefaultSwitchPadding),
contentSpacing = LocalSizes.current.spacingSecondary, contentSpacing = LocalSizes.current.spacingSecondary,
thumbRadius = DefaultThumbRadius, thumbRadius = DefaultThumbRadius,
thumbGain = DefaultThumbGain, thumbGain = DefaultThumbGain,

View File

@@ -73,7 +73,7 @@ import androidx.compose.ui.unit.lerp
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import com.highcapable.flexiui.LocalShapes import com.highcapable.flexiui.LocalShapes
import com.highcapable.flexiui.LocalSizes import com.highcapable.flexiui.LocalSizes
import com.highcapable.flexiui.extension.horizontal import com.highcapable.flexiui.extension.ComponentPadding
import com.highcapable.flexiui.extension.orElse import com.highcapable.flexiui.extension.orElse
import com.highcapable.flexiui.extension.status import com.highcapable.flexiui.extension.status
import com.highcapable.flexiui.interaction.rippleClickable import com.highcapable.flexiui.interaction.rippleClickable
@@ -89,7 +89,7 @@ data class TabColors(
@Immutable @Immutable
data class TabStyle( data class TabStyle(
val contentPadding: PaddingValues, val contentPadding: ComponentPadding,
val contentShape: Shape, val contentShape: Shape,
val indicatorWidth: Dp, val indicatorWidth: Dp,
val indicatorHeight: Dp, val indicatorHeight: Dp,
@@ -445,7 +445,7 @@ private fun defaultTabColors() = TabColors(
@Composable @Composable
@ReadOnlyComposable @ReadOnlyComposable
private fun defaultTabStyle() = TabStyle( private fun defaultTabStyle() = TabStyle(
contentPadding = PaddingValues( contentPadding = ComponentPadding(
horizontal = LocalSizes.current.spacingPrimary, horizontal = LocalSizes.current.spacingPrimary,
vertical = LocalSizes.current.spacingSecondary vertical = LocalSizes.current.spacingSecondary
), ),

View File

@@ -37,7 +37,6 @@ import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@@ -88,9 +87,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.PopupProperties import androidx.compose.ui.window.PopupProperties
import com.highcapable.flexiui.LocalColors import com.highcapable.flexiui.LocalColors
import com.highcapable.flexiui.LocalSizes import com.highcapable.flexiui.LocalSizes
import com.highcapable.flexiui.extension.ComponentPadding
import com.highcapable.flexiui.extension.borderOrNot import com.highcapable.flexiui.extension.borderOrNot
import com.highcapable.flexiui.extension.calculateEnd
import com.highcapable.flexiui.extension.calculateStart
import com.highcapable.flexiui.extension.orElse import com.highcapable.flexiui.extension.orElse
import com.highcapable.flexiui.extension.solidColor import com.highcapable.flexiui.extension.solidColor
import com.highcapable.flexiui.extension.status import com.highcapable.flexiui.extension.status
@@ -122,7 +120,7 @@ data class AutoCompleteBoxColors(
@Immutable @Immutable
data class TextFieldStyle( data class TextFieldStyle(
val textStyle: TextStyle, val textStyle: TextStyle,
val padding: PaddingValues, val padding: ComponentPadding,
val shape: Shape, val shape: Shape,
val borderInactive: BorderStroke, val borderInactive: BorderStroke,
val borderActive: BorderStroke, val borderActive: BorderStroke,
@@ -742,8 +740,8 @@ private fun Modifier.textFieldPadding(
) = composed { ) = composed {
when { when {
!fitStart && !fitEnd -> padding(style.padding) !fitStart && !fitEnd -> padding(style.padding)
fitStart -> padding(start = style.padding.calculateStart()) fitStart -> padding(start = style.padding.start)
fitEnd -> padding(end = style.padding.calculateEnd()) fitEnd -> padding(end = style.padding.end)
else -> this else -> this
} }
} }
@@ -784,7 +782,7 @@ private fun defaultTextFieldColors() = TextFieldColors(
@ReadOnlyComposable @ReadOnlyComposable
private fun defaultTextFieldStyle() = TextFieldStyle( private fun defaultTextFieldStyle() = TextFieldStyle(
textStyle = LocalTextStyle.current, textStyle = LocalTextStyle.current,
padding = PaddingValues(LocalSizes.current.spacingSecondary), padding = ComponentPadding(LocalSizes.current.spacingSecondary),
shape = withAreaBoxShape(), shape = withAreaBoxShape(),
borderInactive = defaultTextFieldInactiveBorder(), borderInactive = defaultTextFieldInactiveBorder(),
borderActive = defaultTextFieldActiveBorder(), borderActive = defaultTextFieldActiveBorder(),
@@ -800,4 +798,4 @@ private fun defaultTextFieldInactiveBorder() = BorderStroke(LocalSizes.current.b
private fun defaultTextFieldActiveBorder() = BorderStroke(LocalSizes.current.borderSizePrimary, LocalColors.current.themePrimary) private fun defaultTextFieldActiveBorder() = BorderStroke(LocalSizes.current.borderSizePrimary, LocalColors.current.themePrimary)
private val TextDecorIconSize = 24.dp private val TextDecorIconSize = 24.dp
private val TextDecorIconPadding = PaddingValues(2.dp) private val TextDecorIconPadding = ComponentPadding(2.dp)

View File

@@ -0,0 +1,103 @@
/*
* Flexi UI - A flexible and useful UI component library.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/BetterAndroid/FlexiUI
*
* Apache License Version 2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is created by fankes on 2023/11/27.
*/
@file:Suppress("unused")
package com.highcapable.flexiui.extension
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
@Stable
fun ComponentPadding(all: Dp): ComponentPadding = ComponentPaddingImpl(all, all, all, all)
@Stable
fun ComponentPadding(
horizontal: Dp = 0.dp,
vertical: Dp = 0.dp
): ComponentPadding = ComponentPaddingImpl(horizontal, vertical, horizontal, vertical)
@Stable
fun ComponentPadding(
start: Dp = 0.dp,
top: Dp = 0.dp,
end: Dp = 0.dp,
bottom: Dp = 0.dp
): ComponentPadding = ComponentPaddingImpl(start, top, end, bottom)
@Stable
interface ComponentPadding : PaddingValues {
val start: Dp
val top: Dp
val end: Dp
val bottom: Dp
val horizontal: Dp
val vertical: Dp
fun copy(
start: Dp = this.start,
top: Dp = this.top,
end: Dp = this.end,
bottom: Dp = this.bottom
): ComponentPadding
}
@Immutable
private class ComponentPaddingImpl(
override val start: Dp,
override val top: Dp,
override val end: Dp,
override val bottom: Dp
) : ComponentPadding {
override val horizontal get() = start + end
override val vertical get() = top + bottom
override fun calculateLeftPadding(layoutDirection: LayoutDirection) =
if (layoutDirection == LayoutDirection.Ltr) start else end
override fun calculateTopPadding() = top
override fun calculateRightPadding(layoutDirection: LayoutDirection) =
if (layoutDirection == LayoutDirection.Ltr) end else start
override fun calculateBottomPadding() = bottom
override fun copy(start: Dp, top: Dp, end: Dp, bottom: Dp) = ComponentPadding(start, top, end, bottom)
override fun equals(other: Any?): Boolean {
if (other !is ComponentPadding) return false
return start == other.start &&
top == other.top &&
end == other.end &&
bottom == other.bottom
}
override fun hashCode() =
((start.hashCode() * 31 + top.hashCode()) * 31 + end.hashCode()) *
31 + bottom.hashCode()
override fun toString() = "ComponentPadding(start=$start, top=$top, end=$end, bottom=$bottom)"
}

View File

@@ -1,56 +0,0 @@
/*
* Flexi UI - A flexible and useful UI component library.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/BetterAndroid/FlexiUI
*
* Apache License Version 2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is created by fankes on 2023/11/27.
*/
@file:Suppress("unused")
package com.highcapable.flexiui.extension
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.unit.LayoutDirection
@Stable
internal val PaddingValues.left get() = calculateLeftPadding(LayoutDirection.Ltr)
@Stable
internal val PaddingValues.top get() = calculateTopPadding()
@Stable
internal val PaddingValues.bottom get() = calculateBottomPadding()
@Stable
internal val PaddingValues.right get() = calculateRightPadding(LayoutDirection.Ltr)
@Stable
internal val PaddingValues.horizontal get() = left + right
@Stable
internal val PaddingValues.vertical get() = top + bottom
@Composable
internal fun PaddingValues.calculateStart() = calculateStartPadding(LocalLayoutDirection.current)
@Composable
internal fun PaddingValues.calculateEnd() = calculateEndPadding(LocalLayoutDirection.current)