@@ -18,7 +18,8 @@ import androidx.compose.material3.MaterialTheme
1818import androidx.compose.material3.Slider
1919import androidx.compose.material3.Text
2020import androidx.compose.runtime.Composable
21- import androidx.compose.runtime.collectAsState
21+ import androidx.compose.runtime.LaunchedEffect
22+ import androidx.compose.runtime.derivedStateOf
2223import androidx.compose.runtime.getValue
2324import androidx.compose.runtime.mutableFloatStateOf
2425import androidx.compose.runtime.mutableStateOf
@@ -34,24 +35,38 @@ import androidx.compose.ui.text.style.TextAlign
3435import androidx.compose.ui.unit.dp
3536import androidx.compose.ui.unit.sp
3637import com.kavi.droid.color.palette.extension.hsl
38+ import com.kavi.droid.color.palette.util.ColorUtil
3739import com.kavi.droid.color.picker.R
3840import com.kavi.droid.color.picker.ui.common.SliderHue
3941
4042@Composable
4143fun 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
0 commit comments