Allow more unsafe value range
This commit is contained in:
1 parent
df1a7feb87
commit
6e3f5f82a9
2 files changed
+17
-5
No files matched your search
@@ -42,6 +42,9 @@ class PreviewState {
|
|||||||
var size: DpSize by mutableStateOf(initialSize)
|
var size: DpSize by mutableStateOf(initialSize)
|
||||||
var offset: Offset by mutableStateOf(Offset.Zero)
|
var offset: Offset by mutableStateOf(Offset.Zero)
|
||||||
|
|
||||||
|
private val sizeMinDimension
|
||||||
|
get() = min(size.width, size.height)
|
||||||
|
|
||||||
val blurRadius: LiquidGlassParamValue<Dp> =
|
val blurRadius: LiquidGlassParamValue<Dp> =
|
||||||
LiquidGlassParamValue(
|
LiquidGlassParamValue(
|
||||||
initialValue = 0.dp,
|
initialValue = 0.dp,
|
||||||
@@ -67,21 +70,24 @@ class PreviewState {
|
|||||||
val cornerRadius: LiquidGlassParamValue<Dp> =
|
val cornerRadius: LiquidGlassParamValue<Dp> =
|
||||||
LiquidGlassParamValue(
|
LiquidGlassParamValue(
|
||||||
initialValue = 30.dp,
|
initialValue = 30.dp,
|
||||||
valueRange = { 0.dp..min(size.width, size.height) / 2 },
|
valueRange = { 0.dp..sizeMinDimension },
|
||||||
|
safeValueRange = { 0.dp..sizeMinDimension / 2 },
|
||||||
typeConverter = Dp.VectorConverter,
|
typeConverter = Dp.VectorConverter,
|
||||||
valueLabel = { "${it.value.fastRoundToInt()} dp" }
|
valueLabel = { "${it.value.fastRoundToInt()} dp" }
|
||||||
)
|
)
|
||||||
val refractionHeight: LiquidGlassParamValue<Dp> =
|
val refractionHeight: LiquidGlassParamValue<Dp> =
|
||||||
LiquidGlassParamValue(
|
LiquidGlassParamValue(
|
||||||
initialValue = 20.dp,
|
initialValue = 20.dp,
|
||||||
valueRange = { 0.dp..min(size.width, size.height) / 2 },
|
valueRange = { 0.dp..sizeMinDimension * 2 },
|
||||||
|
safeValueRange = { 0.dp..cornerRadius.value },
|
||||||
typeConverter = Dp.VectorConverter,
|
typeConverter = Dp.VectorConverter,
|
||||||
valueLabel = { "${it.value.fastRoundToInt()} dp" }
|
valueLabel = { "${it.value.fastRoundToInt()} dp" }
|
||||||
)
|
)
|
||||||
val refractionAmount: LiquidGlassParamValue<Dp> =
|
val refractionAmount: LiquidGlassParamValue<Dp> =
|
||||||
LiquidGlassParamValue(
|
LiquidGlassParamValue(
|
||||||
initialValue = (-60).dp,
|
initialValue = (-60).dp,
|
||||||
valueRange = { -min(size.width, size.height)..min(size.width, size.height) },
|
valueRange = { -sizeMinDimension * 2..sizeMinDimension * 2 },
|
||||||
|
safeValueRange = { -sizeMinDimension..0.dp },
|
||||||
typeConverter = Dp.VectorConverter,
|
typeConverter = Dp.VectorConverter,
|
||||||
valueLabel = { "${it.value.fastRoundToInt()} dp" }
|
valueLabel = { "${it.value.fastRoundToInt()} dp" }
|
||||||
)
|
)
|
||||||
@@ -147,6 +153,7 @@ class PreviewState {
|
|||||||
inner class LiquidGlassParamValue<T : Comparable<T>>(
|
inner class LiquidGlassParamValue<T : Comparable<T>>(
|
||||||
val initialValue: T,
|
val initialValue: T,
|
||||||
private val valueRange: () -> ClosedRange<T>,
|
private val valueRange: () -> ClosedRange<T>,
|
||||||
|
private val safeValueRange: () -> ClosedRange<T> = valueRange,
|
||||||
private val typeConverter: TwoWayConverter<T, AnimationVector1D>,
|
private val typeConverter: TwoWayConverter<T, AnimationVector1D>,
|
||||||
private val valueLabel: (T) -> String
|
private val valueLabel: (T) -> String
|
||||||
) {
|
) {
|
||||||
@@ -164,6 +171,10 @@ class PreviewState {
|
|||||||
state in valueRange()
|
state in valueRange()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val isSafe: Boolean by derivedStateOf {
|
||||||
|
state in safeValueRange()
|
||||||
|
}
|
||||||
|
|
||||||
val progress: Float by derivedStateOf {
|
val progress: Float by derivedStateOf {
|
||||||
val range = valueRange()
|
val range = valueRange()
|
||||||
if (range.isEmpty()) {
|
if (range.isEmpty()) {
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ fun <T : Comparable<T>> SliderChip(
|
|||||||
) {
|
) {
|
||||||
val containerColor = surfaceContainer
|
val containerColor = surfaceContainer
|
||||||
val sliderColor = primaryContainer
|
val sliderColor = primaryContainer
|
||||||
|
val unsafeColors = yellowStaticColors
|
||||||
val errorColor = errorContainer
|
val errorColor = errorContainer
|
||||||
|
|
||||||
Row(
|
Row(
|
||||||
@@ -41,7 +42,7 @@ fun <T : Comparable<T>> SliderChip(
|
|||||||
if (value.isValid) {
|
if (value.isValid) {
|
||||||
drawRect(containerColor)
|
drawRect(containerColor)
|
||||||
drawRect(
|
drawRect(
|
||||||
sliderColor,
|
if (value.isSafe) sliderColor else unsafeColors.accentContainer,
|
||||||
size = size.copy(width = size.width * value.progress)
|
size = size.copy(width = size.width * value.progress)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
@@ -76,7 +77,7 @@ fun <T : Comparable<T>> SliderChip(
|
|||||||
if (value.isValid) {
|
if (value.isValid) {
|
||||||
Text(
|
Text(
|
||||||
value.label,
|
value.label,
|
||||||
primary
|
if (value.isSafe) primary else unsafeColors.accent
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
Row {
|
Row {
|
||||||
|
|||||||
Reference in new issue
Block a user