@@ -18,9 +18,11 @@ import androidx.compose.ui.unit.dp
1818import androidx.compose.ui.unit.sp
1919import com.smarttoolfactory.colorpicker.*
2020import com.smarttoolfactory.colorpicker.ui.Orange400
21- import com.smarttoolfactory.colorpicker.widget.SliderDisplayPanelHSL
22- import com.smarttoolfactory.colorpicker.widget.SliderDisplayPanelHSV
21+ import com.smarttoolfactory.colorpicker.slider.SliderDisplayPanelHSL
22+ import com.smarttoolfactory.colorpicker.slider.SliderDisplayPanelHSV
23+ import com.smarttoolfactory.colorpicker.slider.SliderDisplayPanelRGBA
2324import com.smarttoolfactory.colorpicker.widget.drawChecker
25+ import kotlin.math.roundToInt
2426
2527/* *
2628 * Converting from HSV or HSL to RGB and then from RGB to HSV or HSL doesn't bear correct
@@ -60,7 +62,6 @@ fun ColorModeConversionDemo() {
6062 }
6163}
6264
63-
6465@Composable
6566private fun HSVSliderDisplayPanelExample (
6667 modifier : Modifier ,
@@ -422,3 +423,175 @@ private fun CheckColorConversionDetailsFromHSL(
422423 color = if (! areHSLColorsSame) Color .Red else Color .LightGray
423424 )
424425}
426+
427+
428+
429+ @Composable
430+ fun SliderDisplayPanelColorFromHSV (
431+ modifier : Modifier ,
432+ color : Color ,
433+ onColorChange : (Color ) -> Unit ,
434+ showAlpha : Boolean
435+ ) {
436+ val red = color.red
437+ val green = color.green
438+ val blue = color.blue
439+ val alpha = color.alpha
440+
441+ val hsvArray =
442+ rgbToHSV(red.fractionToRGBRange(), green.fractionToRGBRange(), blue.fractionToRGBRange())
443+
444+ val hue = hsvArray[0 ]
445+ val saturation = hsvArray[1 ]
446+ val value = hsvArray[2 ]
447+
448+ val alphaLambda: ((Float ) -> Unit )? = if (showAlpha) { alphaChange ->
449+ onColorChange(
450+ Color .hsv(hue, saturation, value, alphaChange)
451+ )
452+
453+ } else null
454+
455+ SliderDisplayPanelHSV (
456+ modifier = modifier,
457+ hue = hue,
458+ saturation = saturation,
459+ value = value,
460+ alpha = alpha,
461+ onHueChange = { hueChange ->
462+ onColorChange(
463+ Color .hsv(hueChange, saturation, value, alpha)
464+ )
465+ },
466+ onSaturationChange = { saturationChange ->
467+ onColorChange(
468+ Color .hsv(hue, saturationChange, value, alpha)
469+ )
470+
471+ },
472+ onValueChange = { valueChange ->
473+ onColorChange(
474+ Color .hsv(hue, saturation, valueChange, alpha)
475+ )
476+
477+ },
478+ onAlphaChange = alphaLambda,
479+ )
480+ }
481+
482+
483+ @Composable
484+ fun SliderDisplayPanelColorFromHSL (
485+ modifier : Modifier ,
486+ color : Color ,
487+ onColorChange : (Color ) -> Unit ,
488+ showAlpha : Boolean
489+ ) {
490+ val red = color.red
491+ val green = color.green
492+ val blue = color.blue
493+ val alpha = color.alpha
494+
495+
496+ val hslArray =
497+ rgbToHSL(red.fractionToRGBRange(), green.fractionToRGBRange(), blue.fractionToRGBRange())
498+
499+ val hue = hslArray[0 ]
500+ val saturation = (hslArray[1 ] * 100 ).roundToInt() / 100f
501+ val lightness = (hslArray[2 ] * 100 ).roundToInt() / 100f
502+
503+ // println("🔥 SliderDisplayPanelColorFromHSL red: $red, green: $green, blue: $blue")
504+ println (" 🔥 SliderDisplayPanelColorFromHSL red: $red , green: $green , blue: $blue , hue: $hue , saturation: $saturation , lightness: $lightness " )
505+ // println("🔥 SliderDisplayPanelColorFromHSL2 hue: ${hslArray2[0]}, saturation: ${hslArray2[1]}, lightness: ${hslArray2[2]}")
506+
507+
508+ val alphaLambda: ((Float ) -> Unit )? = if (showAlpha) { alphaChange ->
509+ onColorChange(
510+ Color .hsl(hue, saturation, lightness, alphaChange)
511+ )
512+
513+ } else null
514+
515+ SliderDisplayPanelHSL (
516+ modifier = modifier,
517+ hue = hue,
518+ saturation = saturation,
519+ lightness = lightness,
520+ alpha = alpha,
521+ onHueChange = { hueChange ->
522+ onColorChange(
523+ Color .hsl(hueChange, saturation, lightness, alpha)
524+ )
525+ },
526+ onSaturationChange = { saturationChange ->
527+ onColorChange(
528+ Color .hsl(hue, saturationChange, lightness, alpha)
529+ )
530+
531+ },
532+ onLightnessChange = { lightnessChange ->
533+
534+ val newLightness = ((lightnessChange * 100 ).roundToInt()) / 100f
535+ val newSaturation = ((saturation * 100 ).roundToInt()) / 100f
536+ val lightnessColor = Color .hsl(hue, newSaturation, newLightness, alpha)
537+ println (" 😱SliderDisplayPanelColorFromHSL hue: $hue , saturation: $saturation , newSaturation: $newSaturation , lightnessChange: $lightnessChange , newLightness: $newLightness " )
538+ // val hslArrayNew = colorToHSL(lightnessColor)
539+ //
540+ // println("😱😱SliderDisplayPanelColorFromHSL NEW hue: ${hslArrayNew[0]}, sat: ${hslArrayNew[1]}, light: ${hslArrayNew[2]}")
541+ onColorChange(
542+ lightnessColor
543+ )
544+
545+ },
546+ onAlphaChange = alphaLambda,
547+ )
548+ }
549+
550+ @Composable
551+ fun SliderDisplayPanelColorFromRGBA (
552+ modifier : Modifier ,
553+ color : Color ,
554+ onColorChange : (Color ) -> Unit ,
555+ showAlpha : Boolean
556+ ) {
557+ val red = color.red
558+ val green = color.green
559+ val blue = color.blue
560+ val alpha = color.alpha
561+
562+ println (" 🔥 SliderDisplayPanelColorFromRGBA red: $red , green: $green , blue: $blue " )
563+
564+ val alphaLambda: ((Float ) -> Unit )? = if (showAlpha) { alphaChange ->
565+ onColorChange(
566+ Color (red, green, blue, alpha)
567+ )
568+
569+ } else null
570+
571+ SliderDisplayPanelRGBA (
572+ modifier = modifier,
573+ red = red,
574+ green = green,
575+ blue = blue,
576+ alpha = alpha,
577+ onRedChange = { redChange ->
578+ onColorChange(
579+ Color (redChange, green, blue, alpha)
580+ )
581+ },
582+ onGreenChange = { greenChange ->
583+ onColorChange(
584+ Color (red, greenChange, blue, alpha)
585+ )
586+
587+ },
588+ onBlueChange = { blueChange ->
589+ onColorChange(
590+ Color (red, green, blueChange, alpha)
591+ )
592+
593+ },
594+ onAlphaChange = alphaLambda,
595+ )
596+ }
597+
0 commit comments