package Ġcom . cri st ian ove c chi . mik ro kan on . comp os ables Ċ Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . gest ures . detect Drag Gest ures Ċ Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . input . pointer . pointer Input Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . input . pointer . consume All Changes Ċ import Ġandroidx . compose . ui . layout . on Glob ally Position ed Ċ import Ġandroidx . compose . ui . unit . Dp Ċ import Ġandroidx . compose . ui . unit . Int Offset Ċ import Ġandroidx . compose . ui . unit . Int Size Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . cri st ian ove c chi . mik ro kan on . to Dp Ċ import Ġkotlin . math . round ToInt Ċ Ċ @ Composable Ċ fun ĠColor Selector ( widths : ĠTrip le < Int , ĠInt , ĠInt > Ġ= ĠTrip le ( 5 0 , 5 0 , 5 0 ), Ġheight : ĠD p , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbar Height : ĠInt Ġ= Ġ( height . value Ġ/ Ġ 8 f ). toInt (), Ġ// + Ġ( height . value Ġ% Ġ 4 f ). toInt (), ĊĠĠĠ Ġstart Color : ĠColor Ġ= ĠColor . Black , Ġrefresh : ĠBoolean , Ġdispatch Color Ġ: Ġ( Color ) Ġ-> ĠUnit Ġ) Ġ{ ĊĠĠĠ Ġvar Ġsize R Ġby Ġremember Ġ{ Ġmutable State Of ( Int Size . Zero ) Ġ} ĊĠĠĠ Ġvar Ġsize G Ġby Ġremember Ġ{ Ġmutable State Of ( Int Size . Zero ) Ġ} ĊĠĠĠ Ġvar Ġsize B Ġby Ġremember Ġ{ Ġmutable State Of ( Int Size . Zero ) Ġ} ĊĠĠĠ Ġvar Ġred Y Ġby Ġremember Ġ{ Ġmutable State Of ( 0 f ) Ġ} ĊĠĠĠ Ġvar Ġgreen Y Ġby Ġremember Ġ{ Ġmutable State Of ( 0 f ) Ġ} ĊĠĠĠ Ġvar Ġblue Y Ġby Ġremember Ġ{ Ġmutable State Of ( 0 f ) Ġ} ĊĠĠĠ Ġvar Ġfirst Color Ġby Ġremember Ġ{ Ġmutable State Of ( true ) Ġ} ĊĊĠĠĠ Ġif ( first Color Ġ&& Ġsize R . height Ġ!= Ġ 0 Ġ&& Ġsize G . height Ġ!= Ġ 0 Ġ&& Ġsize B . height Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠ Ġfalse . also Ġ{ Ġfirst Color Ġ= Ġit Ġ} Ġ// ĠL OL Ġ( instead Ġof Ġ[ first Color Ġ= Ġfalse ] Ġthat Ġgets Ġa Ġwarning ) ĊĠĠĠĠĠĠĠ Ġred Y Ġ= Ġ( 1 f Ġ- Ġstart Color . red ) Ġ* Ġ( size R . height Ġ- Ġbar Height ) ĊĠĠĠĠĠĠĠ Ġgreen Y Ġ= Ġ( 1 f Ġ- Ġstart Color . green ) Ġ* Ġ( size R . height Ġ- Ġbar Height ) ĊĠĠĠĠĠĠĠ Ġblue Y Ġ= Ġ( 1 f Ġ- Ġstart Color . blue ) Ġ* Ġ( size R . height Ġ- Ġbar Height ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif ( refresh Ġ&& Ġsize R . height Ġ!= Ġ 0 Ġ&& Ġsize G . height Ġ!= Ġ 0 Ġ&& Ġsize B . height Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠ Ġred Y Ġ= Ġ( 1 f Ġ- Ġstart Color . red ) Ġ* Ġ( size R . height Ġ- Ġbar Height ) ĊĠĠĠĠĠĠĠ Ġgreen Y Ġ= Ġ( 1 f Ġ- Ġstart Color . green ) Ġ* Ġ( size R . height Ġ- Ġbar Height ) ĊĠĠĠĠĠĠĠ Ġblue Y Ġ= Ġ( 1 f Ġ- Ġstart Color . blue ) Ġ* Ġ( size R . height Ġ- Ġbar Height ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġred Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( size R . height Ġ== Ġ 0 ) Ġ 0 f Ġelse Ġ( 1 f Ġ- Ġ( red Y Ġ/ Ġ( size R . height Ġ- Ġbar Height ))). coerce In ( 0 f , Ġ 1 f ) ĊĠĠĠ Ġval Ġgreen Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( size G . height Ġ== Ġ 0 ) Ġ 0 f Ġelse Ġ( 1 f Ġ- Ġ( green Y Ġ/ Ġ( size G . height Ġ- Ġbar Height ))). coerce In ( 0 f , Ġ 1 f ) ĊĠĠĠ Ġval Ġblue Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( size B . height Ġ== Ġ 0 ) Ġ 0 f Ġelse Ġ( 1 f Ġ- Ġ( blue Y Ġ/ Ġ( size B . height Ġ- Ġbar Height ))). coerce In ( 0 f , Ġ 1 f ) ĊĊĠĠĠ Ġif ( size R . height Ġ== Ġ 0 Ġ|| Ġsize G . height Ġ== Ġ 0 Ġ|| Ġsize B . height Ġ== Ġ 0 ) Ġdispatch Color ( start Color ) ĊĠĠĠ Ġelse Ġdispatch Color ( Color ( red , green , blue )) ĊĊĠĠĠ ĠRow ( horizontal Arrange ment Ġ= ĠArrange ment . Space Even ly ) Ġ{ ĊĠĠĠĠĠĠĠ ĠColumn ( Modifier . weight ( 1 f ). on Glob ally Position ed Ġ{ Ġcoordinates Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize R Ġ= Ġcoordinates . size } ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Color ( red , Ġ 0 f , Ġ 0 f )). size ( size R . width . to Dp (). dp + 1 . dp , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset Ġ{ ĠInt Offset ( 0 , Ġred Y . round ToInt ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Color . White ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( size R . width . to Dp (). dp + 1 . dp , Ġbar Height . to Dp (). dp Ġ+ 1 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pointer Input ( Unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetect Drag Gest ures Ġ{ Ġchange , Ġdrag Amount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange . consume All Changes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġred Y Ġ+= Ġdrag Amount . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġred Y Ġ= Ġred Y . coerce In ( 0 f , Ġ( size R . height Ġ- Ġbar Height ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠColumn ( Modifier . weight ( 1 f ). on Glob ally Position ed Ġ{ Ġcoordinates Ġ-> Ġsize G Ġ= Ġcoordinates . size }) ĊĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . background ( Color ( 0 f , Ġgreen , Ġ 0 f )). size ( size G . width . to Dp (). dp + 1 . dp , Ġheight Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset Ġ{ ĠInt Offset ( 0 , Ġgreen Y . round ToInt ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Color . White ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( size G . width . to Dp (). dp + 1 . dp , Ġbar Height . to Dp (). dp + 1 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pointer Input ( Unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetect Drag Gest ures Ġ{ Ġchange , Ġdrag Amount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange . consume All Changes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Y Ġ+= Ġdrag Amount . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgreen Y Ġ= Ġgreen Y . coerce In ( 0 f , Ġ( size G . height Ġ- Ġbar Height ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠColumn ( Modifier . weight ( 1 f ). on Glob ally Position ed Ġ{ Ġcoordinates Ġ-> Ġsize B Ġ= Ġcoordinates . size Ġ}) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . background ( Color ( 0 f , Ġ 0 f , Ġblue )). size ( size B . width . to Dp (). dp + 1 . dp , Ġheight )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . offset Ġ{ ĠInt Offset ( 0 , Ġblue Y . round ToInt ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Color . White ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ( size B . width . to Dp (). dp + 1 . dp , Ġbar Height . to Dp (). dp + 1 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pointer Input ( Unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetect Drag Gest ures Ġ{ Ġchange , Ġdrag Amount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange . consume All Changes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblue Y Ġ+= Ġdrag Amount . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblue Y Ġ= Ġblue Y . coerce In ( 0 f , Ġ( size B . height Ġ- Ġbar Height ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ