Skip to content

Commit da9adee

Browse files
committed
Create new color picker to select two colors and generate new blended color.
1 parent 1a82bc4 commit da9adee

5 files changed

Lines changed: 32 additions & 18 deletions

File tree

kv-color-picker/src/main/kotlin/com/kavi/droid/color/picker/ui/KvColorPickerBottomSheet.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,6 @@ fun KvColorPickerBottomSheet(
146146
)
147147
3 -> BlendColorPicker(
148148
modifier = Modifier.padding(16.dp),
149-
lastSelectedColor = selectedColor,
150149
onColorSelected = {
151150
selectedColor = it
152151
colorHex.value = TextFieldValue(ColorUtil.getHex(it))

kv-color-picker/src/main/kotlin/com/kavi/droid/color/picker/ui/pickers/BlendColorPicker.kt

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import androidx.compose.material3.MaterialTheme
1818
import androidx.compose.material3.Slider
1919
import androidx.compose.material3.Text
2020
import androidx.compose.runtime.Composable
21-
import androidx.compose.runtime.collectAsState
21+
import androidx.compose.runtime.LaunchedEffect
22+
import androidx.compose.runtime.derivedStateOf
2223
import androidx.compose.runtime.getValue
2324
import androidx.compose.runtime.mutableFloatStateOf
2425
import androidx.compose.runtime.mutableStateOf
@@ -34,24 +35,38 @@ import androidx.compose.ui.text.style.TextAlign
3435
import androidx.compose.ui.unit.dp
3536
import androidx.compose.ui.unit.sp
3637
import com.kavi.droid.color.palette.extension.hsl
38+
import com.kavi.droid.color.palette.util.ColorUtil
3739
import com.kavi.droid.color.picker.R
3840
import com.kavi.droid.color.picker.ui.common.SliderHue
3941

4042
@Composable
4143
fun BlendColorPicker(
4244
modifier: Modifier = Modifier,
43-
lastSelectedColor: Color = Color.White,
4445
onColorSelected: (selectedColor: Color) -> Unit
4546
) {
46-
// State variables for HSL-A values
47-
val firstHue = remember { mutableFloatStateOf(lastSelectedColor.hsl.hue) }
48-
val secondHue = remember { mutableFloatStateOf(lastSelectedColor.hsl.hue) }
47+
// State variables for first color hue and second color hue
48+
val firstHue = remember { mutableFloatStateOf(Color.White.hsl.hue) }
49+
val secondHue = remember { mutableFloatStateOf(Color.White.hsl.hue) }
4950

50-
val firstBlendColor = remember { mutableStateOf(lastSelectedColor) }
51-
val secondBlendColor = remember { mutableStateOf(lastSelectedColor) }
51+
val firstBlendColor = remember { mutableStateOf(Color.White) }
52+
val firstBlendColorHex = remember { mutableStateOf(ColorUtil.getHex(Color.White)) }
53+
val secondBlendColor = remember { mutableStateOf(Color.White) }
54+
val secondBlendColorHex = remember { mutableStateOf(ColorUtil.getHex(Color.White)) }
5255

5356
var colorBias by remember { mutableFloatStateOf(.5f) }
5457

58+
// Derived state for the color based on blending selected first and second color
59+
val color by remember {
60+
derivedStateOf {
61+
ColorUtil.blendColors(firstBlendColor.value, secondBlendColor.value, bias = colorBias)
62+
}
63+
}
64+
65+
// Launch an effect to invoke the provided callback with the selected color
66+
LaunchedEffect(color) {
67+
onColorSelected.invoke(color)
68+
}
69+
5570
Column (modifier = modifier, verticalArrangement = Arrangement.spacedBy(8.dp)) {
5671
Column (
5772
modifier = Modifier
@@ -75,7 +90,9 @@ fun BlendColorPicker(
7590
)
7691

7792
Row (
78-
modifier = Modifier.fillMaxWidth(),
93+
modifier = Modifier
94+
.padding(top = 8.dp)
95+
.fillMaxWidth(),
7996
verticalAlignment = Alignment.CenterVertically,
8097
horizontalArrangement = Arrangement.Center
8198
) {
@@ -87,7 +104,10 @@ fun BlendColorPicker(
87104
SliderHue(Modifier.padding(top = 4.dp, bottom = 4.dp), onColorSelect = { selectedColor ->
88105
firstHue.floatValue = selectedColor.hsl.hue
89106
firstBlendColor.value = selectedColor
107+
firstBlendColorHex.value = ColorUtil.getHex(selectedColor)
90108
})
109+
110+
Text(text = firstBlendColorHex.value)
91111
}
92112

93113
Spacer(modifier = Modifier.width(8.dp))
@@ -100,7 +120,10 @@ fun BlendColorPicker(
100120
SliderHue(Modifier.padding(top = 4.dp, bottom = 4.dp), onColorSelect = { selectedColor ->
101121
secondHue.floatValue = selectedColor.hsl.hue
102122
secondBlendColor.value = selectedColor
123+
secondBlendColorHex.value = ColorUtil.getHex(selectedColor)
103124
})
125+
126+
Text(text = secondBlendColorHex.value)
104127
}
105128
}
106129

kv-color-picker/src/main/kotlin/com/kavi/droid/color/picker/ui/pickers/GridColorPicker.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,9 @@ fun GridColorPicker(
5151
) {
5252

5353
var selectedColor by remember { mutableStateOf(lastSelectedColor) }
54-
val colorHex = remember { mutableStateOf(TextFieldValue(ColorUtil.getHex(lastSelectedColor))) }
5554

5655
val onSelectColor: (color: Color) -> Unit = {
5756
selectedColor = it
58-
colorHex.value = TextFieldValue(ColorUtil.getHex(it))
5957
}
6058

6159
// Launch an effect to invoke the provided callback with the selected color

kv-color-picker/src/main/kotlin/com/kavi/droid/color/picker/ui/pickers/HSLAColorPicker.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,7 @@ fun HSLAColorPicker(
5757
val lightness = rememberSaveable { mutableFloatStateOf(lastSelectedColor.hsl.lightness) }
5858
val alpha = rememberSaveable { mutableFloatStateOf(lastSelectedColor.alpha) }
5959

60-
val colorHex = remember { mutableStateOf(TextFieldValue("")) }
61-
62-
// Derived state for the color based on RGBA values
60+
// Derived state for the color based on HSL-A values
6361
val color by remember {
6462
derivedStateOf {
6563
Color.hsl(hue = hue.floatValue, saturation = saturation.floatValue, lightness = lightness.floatValue, alpha.floatValue)
@@ -68,7 +66,6 @@ fun HSLAColorPicker(
6866

6967
// Launch an effect to invoke the provided callback with the selected color
7068
LaunchedEffect(color) {
71-
colorHex.value = TextFieldValue(ColorUtil.getHex(color = color))
7269
onColorSelected.invoke(color)
7370
}
7471

kv-color-picker/src/main/kotlin/com/kavi/droid/color/picker/ui/pickers/RGBAColorPicker.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ fun RGBAColorPicker (
5454
val blue = rememberSaveable { mutableFloatStateOf(lastSelectedColor.blue) }
5555
val alpha = rememberSaveable { mutableFloatStateOf(lastSelectedColor.alpha) }
5656

57-
val colorHex = remember { mutableStateOf(TextFieldValue("")) }
58-
5957
// Derived state for the color based on RGBA values
6058
val color by remember {
6159
derivedStateOf {
@@ -65,7 +63,6 @@ fun RGBAColorPicker (
6563

6664
// Launch an effect to invoke the provided callback with the selected color
6765
LaunchedEffect(color) {
68-
colorHex.value = TextFieldValue(ColorUtil.getHex(color = color))
6966
onColorSelected.invoke(color)
7067
}
7168

0 commit comments

Comments
 (0)