1- package com.smarttoolfactory.colorpicker.picker
1+ package com.smarttoolfactory.colorpicker.picker.gradient
22
3- import androidx.compose.foundation.clickable
43import androidx.compose.foundation.layout.*
54import androidx.compose.foundation.rememberScrollState
65import androidx.compose.foundation.verticalScroll
@@ -10,19 +9,15 @@ import androidx.compose.ui.Modifier
109import androidx.compose.ui.graphics.Color
1110import androidx.compose.ui.unit.Dp
1211import androidx.compose.ui.unit.dp
13- import com.smarttoolfactory.colorpicker.model.BrushColor
14- import com.smarttoolfactory.colorpicker.model.ColorHSL
15- import com.smarttoolfactory.colorpicker.model.ColorModel
16- import com.smarttoolfactory.colorpicker.model.rememberGradientColor
12+ import com.smarttoolfactory.colorpicker.model.*
1713import com.smarttoolfactory.colorpicker.selector.SelectorDiamondSaturationLightnessHSL
1814import com.smarttoolfactory.colorpicker.selector.SelectorRingHue
1915import com.smarttoolfactory.colorpicker.selector.gradient.BrushDisplay
2016import com.smarttoolfactory.colorpicker.selector.gradient.GradientSelector
2117import com.smarttoolfactory.colorpicker.slider.CompositeSliderPanel
2218import com.smarttoolfactory.colorpicker.util.colorToHSL
2319import com.smarttoolfactory.colorpicker.widget.ColorDisplayRoundedRect
24- import com.smarttoolfactory.colorpicker.widget.ColorModelChangeTabRow
25- import com.smarttoolfactory.colorpicker.widget.ColorWheel
20+ import com.smarttoolfactory.colorpicker.widget.ColorGradientModeChangeTabRow
2621
2722/* *
2823 * ColorPicker with [SelectorRingHue] hue selector and [SelectorDiamondSaturationLightnessHSL]
@@ -40,26 +35,25 @@ import com.smarttoolfactory.colorpicker.widget.ColorWheel
4035 * @param ringBorderStrokeColor stroke color for drawing borders around inner or outer radius.
4136 * @param ringBorderStrokeWidth stroke width of borders.
4237 * @param selectionRadius radius of white and black circle selector.
43- * @param onColorChange callback that is triggered when [Color] is changed using [SelectorRingHue],
38+ * @param onBrushColorChange callback that is triggered when [Color] is changed using [SelectorRingHue],
4439 * [SelectorDiamondSaturationLightnessHSL] or [CompositeSliderPanel]
4540 */
4641@Composable
4742fun ColorPickerRingDiamondGradientHSL (
4843 modifier : Modifier = Modifier ,
4944 initialColor : Color ,
45+ gradientColorState : GradientColorState = rememberGradientColorState(),
5046 ringOuterRadiusFraction : Float = .9f,
5147 ringInnerRadiusFraction : Float = .6f,
5248 ringBackgroundColor : Color = Color .Black ,
5349 ringBorderStrokeColor : Color = Color .Black ,
5450 ringBorderStrokeWidth : Dp = 4.dp,
5551 selectionRadius : Dp = 8.dp,
56- onColorChange : (BrushColor ) -> Unit
52+ onBrushColorChange : (BrushColor ) -> Unit
5753) {
5854
59- val gradientColor = rememberGradientColor()
60- var isGradientMode by remember { mutableStateOf(false ) }
61-
6255 var inputColorModel by remember { mutableStateOf(ColorModel .HSL ) }
56+ var colorMode by remember { mutableStateOf(ColorMode .HSL ) }
6357
6458 val hslArray = colorToHSL(initialColor)
6559
@@ -71,22 +65,18 @@ fun ColorPickerRingDiamondGradientHSL(
7165 val currentColor =
7266 Color .hsl(hue = hue, saturation = saturation, lightness = lightness, alpha = alpha)
7367
74- gradientColor.brushColor.color = currentColor
75- onColorChange(gradientColor.brushColor)
76-
7768 Column (
7869 modifier = modifier,
7970 horizontalAlignment = Alignment .CenterHorizontally ,
8071 ) {
8172
8273 Spacer (modifier = Modifier .height(10 .dp))
8374
84- // Initial and Current Colors
85- Box (modifier= Modifier .height(80 .dp), contentAlignment = Alignment .Center ) {
86- if (isGradientMode) {
87- BrushDisplay (gradientColor = gradientColor)
88- } else {
89- ColorDisplayRoundedRect (
75+ // Initial-Current Colors/Gradient Color
76+ Box (modifier = Modifier .height(80 .dp), contentAlignment = Alignment .Center ) {
77+ when (colorMode) {
78+ ColorMode .Gradient -> BrushDisplay (gradientColorState = gradientColorState)
79+ else -> ColorDisplayRoundedRect (
9080 modifier = Modifier
9181 .fillMaxWidth()
9282 .padding(horizontal = 50 .dp, vertical = 10 .dp),
@@ -125,59 +115,83 @@ fun ColorPickerRingDiamondGradientHSL(
125115 }
126116 }
127117
128- // HSL-HSV-RGB Color Model Change Tabs
118+ // HSL-HSV-RGB-Gradient Color Model Change Tabs
129119 Row (
130120 modifier = Modifier .fillMaxWidth(),
131121 verticalAlignment = Alignment .CenterVertically
132122 ) {
133- ColorModelChangeTabRow (
134- modifier = Modifier .weight(3f ),
135- colorModel = inputColorModel,
136- onColorModelChange = {
137- isGradientMode = false
138- inputColorModel = it
123+ ColorGradientModeChangeTabRow (
124+ colorMode = colorMode,
125+ onColorModeChange = {
126+ colorMode = it
127+ when (colorMode) {
128+ ColorMode .HSL -> {
129+ inputColorModel = ColorModel .HSL
130+ }
131+ ColorMode .HSV -> {
132+ inputColorModel = ColorModel .HSL
133+ }
134+ ColorMode .RGB -> {
135+ inputColorModel = ColorModel .RGB
136+ }
137+ else -> Unit
138+ }
139139 }
140140 )
141-
142- Column (modifier = Modifier .weight(1f )) {
143- ColorWheel (modifier = Modifier
144- .size(16 .dp)
145- .clickable {
146- isGradientMode = true
147- })
148- }
149141 }
150142
151143 // HSL-HSV-RGB Sliders
152- if ( ! isGradientMode ) {
153- CompositeSliderPanel (
154- compositeColor = ColorHSL (
155- hue = hue,
156- saturation = saturation,
157- lightness = lightness,
158- alpha = alpha
159- ),
160- onColorChange = {
161- (it as ? ColorHSL )?. let { color ->
162- hue = color.hue
163- saturation = color.saturation
164- lightness = color.lightness
165- alpha = color.alpha
144+ when (colorMode ) {
145+ ColorMode . Gradient -> {
146+ Column (
147+ modifier = Modifier
148+ .fillMaxHeight()
149+ .verticalScroll(rememberScrollState())
150+ ) {
151+ GradientSelector (
152+ color = currentColor,
153+ gradientColorState = gradientColorState
154+ ) {
155+ onBrushColorChange(
156+ BrushColor (brush = it)
157+ )
166158 }
167- },
168- showAlphaSlider = true ,
169- inputColorModel = inputColorModel,
170- outputColorModel = ColorModel .HSL
171- )
172-
173- } else {
174- Column (
175- modifier = Modifier
176- .fillMaxHeight()
177- .verticalScroll(rememberScrollState())
178- ) {
179- GradientSelector (color = currentColor, gradientColor = gradientColor)
159+ }
160+ }
161+ else -> {
162+ CompositeSliderPanel (
163+ compositeColor = ColorHSL (
164+ hue = hue,
165+ saturation = saturation,
166+ lightness = lightness,
167+ alpha = alpha
168+ ),
169+ onColorChange = {
170+ (it as ? ColorHSL )?.let { color ->
171+ hue = color.hue
172+ saturation = color.saturation
173+ lightness = color.lightness
174+ alpha = color.alpha
175+
176+ gradientColorState.color = Color .hsl(
177+ hue = hue,
178+ saturation = saturation,
179+ lightness = lightness,
180+ alpha = alpha
181+ )
182+
183+ onBrushColorChange(
184+ BrushColor (color = gradientColorState.color)
185+ )
186+
187+ }
188+ },
189+ showAlphaSlider = true ,
190+ inputColorModel = inputColorModel,
191+ outputColorModel = ColorModel .HSL
192+ )
180193 }
181194 }
195+
182196 }
183197}
0 commit comments