package Ġdev . jor ge cast illo . android color x . library Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . NonNull Ċ import Ġandroidx . core . graphics . Color Utils Ċ import Ġandroidx . core . graphics . Color Utils . H SL To Color Ċ import Ġkotlin . math . round ToInt Ċ Ċ /** Ċ Ġ* ĠH SL A Ġstands Ġfor Ġhue - sat uration - light ness - alpha . Ċ Ġ* Ċ Ġ* ĠH ue Ġis Ġa Ġvalue Ġfrom Ġ 0 ... 3 6 0 Ċ Ġ* ĠSat uration Ġis Ġa Ġvalue Ġfrom Ġ 0 ... 1 Ċ Ġ* ĠLight ness Ġis Ġa Ġvalue Ġfrom Ġ 0 ... 1 Ċ Ġ* ĠAlpha Ġis Ġa Ġvalue Ġfrom Ġ 0 ... 1 Ċ Ġ*/ Ċ data Ġclass ĠH SL A Color ( ĊĠĠĠ Ġval Ġhue : ĠFloat , ĊĠĠĠ Ġval Ġsat uration : ĠFloat , ĊĠĠĠ Ġval Ġlight ness : ĠFloat , ĊĠĠĠ Ġval Ġalpha : ĠFloat Ċ ) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ hue } Âº Ġ/ Ġ$ sat uration Ġ/ Ġ$ light ness Ġ/ Ġ$ alpha " ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ NonNull Ċ fun Ġ@ receiver : Color Int ĠInt . as H sla (): ĠH SL A Color Ġ= Ġthis . let Ġ{ Ġcolor Ġ-> ĊĠĠĠ ĠFloat Array ( 3 ). apply Ġ{ ĠColor Utils . color To H SL ( color , Ġthis ) Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠ ĠH SL A Color ( it [ 0 ], Ġit [ 1 ], Ġit [ 2 ], ĠColor . alpha ( color ) Ġ/ Ġ 2 5 5 f ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠH SL A Color . as Float Array (): ĠFloat Array Ġ= Ġfloat ArrayOf ( hue , Ġsat uration , Ġlight ness , Ġalpha ) Ċ Ċ @ Color Int Ċ fun ĠH SL A Color . as Color Int (): ĠInt Ġ= ĊĠĠĠ ĠH SL To Color ( as Float Array (). drop Last ( 1 ). toFloat Array ()). let Ġ{ ĊĠĠĠĠĠĠĠ ĠColor . arg b (( alpha Ġ* Ġ 2 5 5 ). toInt (), ĠColor . red ( it ), ĠColor . green ( it ), ĠColor . blue ( it )) ĊĠĠĠ Ġ} Ċ Ċ fun ĠH SL A Color . as Rgb (): ĠRGB Color Ġ= Ġas Color Int (). as Rgb () Ċ Ċ fun ĠH SL A Color . as Argb (): ĠAR GB Color Ġ= Ġas Color Int (). as Argb () Ċ Ċ fun ĠH SL A Color . as C my k (): ĠC MY K Color Ġ= Ġas H sl (). as C my k () Ċ Ċ fun ĠH SL A Color . as Hex (): ĠHEX Color Ġ= Ġas Color Int (). as Hex () Ċ Ċ fun ĠH SL A Color . as H sl (): ĠH SL Color Ġ= ĠH SL Color ( hue , Ġsat uration , Ġlight ness ) Ċ Ċ fun ĠH SL A Color . as H sv (): ĠH SV Color Ġ= Ġas Color Int (). as H sv () Ċ Ċ /** Ċ Ġ* Ġ@ param Ġvalue Ġamount Ġto Ġlight en Ġin Ġthe Ġrange Ġ 0 ... 1 Ċ Ġ*/ Ċ fun ĠH SL A Color . light en ( value : ĠFloat ): ĠH SL A Color Ġ{ ĊĠĠĠ Ġvar Ġmutable Light ness Ġ= Ġthis . light ness ĊĠĠĠ Ġmutable Light ness Ġ+= Ġvalue ĊĠĠĠ Ġmutable Light ness Ġ= Ġ 0 f . coerce At Least ( mutable Light ness . coerce At Most ( 1 f )) ĊĠĠĠ Ġreturn ĠH SL A Color ( hue , Ġsat uration , Ġmutable Light ness , Ġalpha ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ param Ġvalue Ġamount Ġto Ġlight en Ġin Ġthe Ġrange Ġ 0 ... 1 0 0 Ċ Ġ*/ Ċ fun ĠH SL A Color . light en ( value : ĠInt ): ĠH SL A Color Ġ{ ĊĠĠĠ Ġvar Ġmutable Light ness Ġ= Ġthis . light ness ĊĠĠĠ Ġmutable Light ness Ġ+= Ġvalue Ġ/ Ġ 1 0 0 f ĊĠĠĠ Ġmutable Light ness Ġ= Ġ 0 f . coerce At Least ( mutable Light ness . coerce At Most ( 1 f )) ĊĠĠĠ Ġreturn ĠH SL A Color ( hue , Ġsat uration , Ġmutable Light ness , Ġalpha ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ param Ġvalue Ġamount Ġto Ġdar ken Ġin Ġthe Ġrange Ġ 0 ... 1 Ċ Ġ*/ Ċ fun ĠH SL A Color . dar ken ( value : ĠFloat ): ĠH SL A Color Ġ{ ĊĠĠĠ Ġvar Ġmutable Light ness Ġ= Ġthis . light ness ĊĠĠĠ Ġmutable Light ness Ġ-= Ġvalue ĊĠĠĠ Ġmutable Light ness Ġ= Ġ 0 f . coerce At Least ( mutable Light ness . coerce At Most ( 1 f )) ĊĠĠĠ Ġreturn ĠH SL A Color ( hue , Ġsat uration , Ġmutable Light ness , Ġalpha ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ param Ġvalue Ġamount Ġto Ġdar ken Ġin Ġthe Ġrange Ġ 0 ... 1 0 0 Ċ Ġ*/ Ċ fun ĠH SL A Color . dar ken ( value : ĠInt ): ĠH SL A Color Ġ{ ĊĠĠĠ Ġvar Ġmutable Light ness Ġ= Ġthis . light ness ĊĠĠĠ Ġmutable Light ness Ġ-= Ġvalue Ġ/ Ġ 1 0 0 f ĊĠĠĠ Ġmutable Light ness Ġ= Ġ 0 f . coerce At Least ( mutable Light ness . coerce At Most ( 1 f )) ĊĠĠĠ Ġreturn ĠH SL A Color ( hue , Ġsat uration , Ġmutable Light ness , Ġalpha ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ return Ġa Ġlist Ġof Ġsh ades Ġfor Ġthe Ġgiven Ġcolor Ġlike Ġthe Ġones Ġin Ġhttps :// www . color - hex . com / color / e 9 1 e 6 3 . Ċ Ġ* ĠEach Ġone Ġof Ġthe Ġcolors Ġis Ġa ĠH SL Color . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcount Ġof Ġsh ades Ġto Ġgenerate Ġover Ġthe Ġsource Ġcolor . ĠIt Ġgenerates Ġ 1 0 Ġby Ġdefault . Ċ Ġ*/ Ċ fun ĠH SL A Color . sh ades ( count : ĠInt Ġ= Ġ 1 0 ): ĠList < H SL A Color > Ġ{ ĊĠĠĠ Ġrequire ( count Ġ> Ġ 0 ) Ġ{ Ġ" count Ġmust Ġbe Ġ> Ġ 0 " Ġ} ĊĠĠĠ Ġval Ġstart Ġ= Ġ( this . light ness Ġ* Ġ 1 0 0 0 0 0 0 0 ). round ToInt () ĊĠĠĠ Ġval Ġstep Ġ= Ġif Ġ( start Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ- 1 Ġ* Ġstart Ġ/ Ġcount ĊĠĠĠ Ġ} Ġelse Ġ 1 ĊĠĠĠ Ġreturn ĠInt Progress ion . from Closed Range ( start , Ġ 0 , Ġstep ). map Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠ Ġthis . copy ( light ness Ġ= Ġi Ġ/ Ġ 1 0 0 0 0 0 0 0 f ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ@ return Ġa Ġlist Ġof Ġt ints Ġfor Ġthe Ġgiven Ġcolor Ġlike Ġthe Ġones Ġin Ġhttps :// www . color - hex . com / color / e 9 1 e 6 3 . Ċ Ġ* ĠEach Ġone Ġof Ġthe Ġcolors Ġis Ġa ĠH SL Color . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcount Ġof Ġt ints Ġto Ġgenerate Ġover Ġthe Ġsource Ġcolor . ĠIt Ġgenerates Ġ 1 0 Ġby Ġdefault . Ċ Ġ*/ Ċ fun ĠH SL A Color . t ints ( count : ĠInt Ġ= Ġ 1 0 ): ĠList < H SL A Color > Ġ{ ĊĠĠĠ Ġrequire ( count Ġ> Ġ 0 ) Ġ{ Ġ" count Ġmust Ġbe Ġ> Ġ 0 " Ġ} ĊĊĠĠĠ Ġval Ġstart Ġ= Ġ( this . light ness Ġ* Ġ 1 0 0 0 0 0 0 0 ). round ToInt () ĊĠĠĠ Ġval Ġstep Ġ= Ġif Ġ( start Ġ< Ġ 1 0 0 0 0 0 0 0 ) Ġ( 1 0 0 0 0 0 0 0 Ġ- Ġstart ) Ġ/ Ġcount Ġelse Ġ 1 ĊĠĠĠ Ġreturn ĠInt Progress ion . from Closed Range ( start , Ġ 1 0 0 0 0 0 0 0 , Ġstep ). map Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠ Ġthis . copy ( light ness Ġ= Ġi Ġ/ Ġ 1 0 0 0 0 0 0 0 f ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThe ĠH ue Ġis Ġthe Ġcolour 's Ġposition Ġon Ġthe Ġcolour Ġwheel , Ġexpressed Ġin Ġdegrees Ġfrom Ġ 0 Â° Ġto Ġ 3 5 9 Â° , Ġrepresenting Ġthe Ġ 3 6 0 Â° Ġof Ċ Ġ* Ġthe Ġwheel ; Ġ 0 Â° Ġbeing Ġred , Ġ 1 8 0 Â° Ġbeing Ġred 's Ġopposite Ġcolour Ġcy an , Ġand Ġso Ġon . ĠThe Ġcomp li ment ary Ġcolor Ġstands Ġfor Ġthe Ċ Ġ* Ġcolor Ġin Ġthe Ġopposite Ġside Ġof Ġthe Ġcircle , Ġso Ġit 's Ġ( hue Ġ+ Ġ 1 8 0 ) Ġ% Ġ 3 6 0 . Ċ Ġ*/ Ċ fun ĠH SL A Color . comp li ment ary (): ĠH SL A Color Ġ{ ĊĠĠĠ Ġval Ġcomp li ment ary Hue Ġ= Ġ( hue Ġ+ Ġ 1 8 0 ) Ġ% Ġ 3 6 0 ĊĠĠĠ Ġreturn Ġthis . copy ( hue Ġ= Ġcomp li ment ary Hue ) Ċ } Ċ Ċ /** Ċ Ġ* ĠThe ĠH ue Ġis Ġthe Ġcolour 's Ġposition Ġon Ġthe Ġcolour Ġwheel , Ġexpressed Ġin Ġdegrees Ġfrom Ġ 0 Â° Ġto Ġ 3 5 9 Â° , Ċ Ġ* Ġrepresenting Ġthe Ġ 3 6 0 Â° Ġof Ġthe Ġwheel ; Ġ 0 Â° Ġbeing Ġred , Ġ 1 8 0 Â° Ġbeing Ġred 's Ġopposite Ġcolour Ġcy an , Ġand Ġso Ċ Ġ* Ġon . ĠThe Ġtri adic Ġcolors Ġstand Ġfor Ġ 3 Ġcolors Ġthat Ġcompose Ġa Ġperfect Ġtriangle Ġ( equal Ġsides ) Ġover Ġthe Ċ Ġ* Ġcircle , Ġso Ġthey Ġare Ġequ ally Ġfar Ġfrom Ġeach Ġother . Ċ Ġ* Ċ Ġ* ĠTri adic Ġcolors Ġfor Ġh 0 Ġwould Ġbe Ġ( hue Ġ+ Ġ 1 2 0 ) Ġ% Ġ 3 6 0 Ġand Ġ( hue Ġ+ Ġ 2 4 0 ) Ġ% Ġ 3 6 0 . Ċ Ġ*/ Ċ fun ĠH SL A Color . tri adic (): ĠPair < H SL A Color , ĠH SL A Color > Ġ{ ĊĠĠĠ Ġval Ġh 1 Ġ= Ġthis . copy ( hue Ġ= Ġ( this . hue Ġ+ Ġ 1 2 0 ) Ġ% Ġ 3 6 0 f ) ĊĠĠĠ Ġval Ġh 2 Ġ= Ġthis . copy ( hue Ġ= Ġ( this . hue Ġ+ Ġ 2 4 0 ) Ġ% Ġ 3 6 0 f ) ĊĊĠĠĠ Ġreturn ĠPair ( h 1 , Ġh 2 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠThe ĠH ue Ġis Ġthe Ġcolour 's Ġposition Ġon Ġthe Ġcolour Ġwheel , Ġexpressed Ġin Ġdegrees Ġfrom Ġ 0 Â° Ġto Ġ 3 5 9 Â° , Ġrepresenting Ġthe Ġ 3 6 0 Â° Ġof Ċ Ġ* Ġthe Ġwheel ; Ġ 0 Â° Ġbeing Ġred , Ġ 1 8 0 Â° Ġbeing Ġred 's Ġopposite Ġcolour Ġcy an , Ġand Ġso Ġon . ĠThe Ġte tr adic Ġcolors Ġstand Ġfor Ġ 4 Ġcolors Ċ Ġ* Ġthat Ġcompose Ġa Ġperfect Ġsquare Ġ( equal Ġsides ) Ġover Ġthe Ġcircle , Ġso Ġthey Ġare Ġequ ally Ġfar Ġfrom Ġeach Ġother . Ċ Ġ* Ċ Ġ* ĠTe tr adic Ġcolors Ġfor Ġh 0 Ġwould Ġbe Ġ( hue Ġ+ Ġ 9 0 ) Ġ% Ġ 3 6 0 , Ġ( hue Ġ+ Ġ 1 8 0 ) Ġ% Ġ 3 6 0 Ġand Ġ( hue Ġ+ Ġ 2 7 0 ) Ġ% Ġ 3 6 0 . Ċ Ġ*/ Ċ fun ĠH SL A Color . te tr adic (): ĠTrip le < H SL A Color , ĠH SL A Color , ĠH SL A Color > Ġ{ ĊĠĠĠ Ġval Ġhue Ġ= Ġthis . hue Ġ// Ġ 0 Â° Ġto Ġ 3 5 9 Â° ĊĊĠĠĠ Ġval Ġh 1 Ġ= Ġthis . copy ( hue Ġ= Ġ( hue Ġ+ Ġ 9 0 ) Ġ% Ġ 3 6 0 ) ĊĠĠĠ Ġval Ġh 2 Ġ= Ġthis . copy ( hue Ġ= Ġ( hue Ġ+ Ġ 1 8 0 ) Ġ% Ġ 3 6 0 ) ĊĠĠĠ Ġval Ġh 3 Ġ= Ġthis . copy ( hue Ġ= Ġ( hue Ġ+ Ġ 2 7 0 ) Ġ% Ġ 3 6 0 ) ĊĊĠĠĠ Ġreturn ĠTrip le ( h 1 , Ġh 2 , Ġh 3 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠThe ĠH ue Ġis Ġthe Ġcolour 's Ġposition Ġon Ġthe Ġcolour Ġwheel , Ġexpressed Ġin Ġdegrees Ġfrom Ġ 0 Â° Ġto Ġ 3 5 9 Â° , Ġrepresenting Ġthe Ġ 3 6 0 Â° Ġof Ċ Ġ* Ġthe Ġwheel ; Ġ 0 Â° Ġbeing Ġred , Ġ 1 8 0 Â° Ġbeing Ġred 's Ġopposite Ġcolour Ġcy an , Ġand Ġso Ġon . ĠThe Ġanalog ous Ġcolors Ġstand Ġfor Ġ 3 Ġcolors Ċ Ġ* Ġthat Ġare Ġtogether Ġin Ġthe Ġcircle , Ġseparated Ġby Ġ 3 0 Ġdegrees Ġeach . Ċ Ġ* Ċ Ġ* ĠAn alog ous Ġcolors Ġfor Ġh 0 Ġwould Ġbe Ġ( hue Ġ+ Ġ 3 0 ) Ġ% Ġ 3 6 0 Ġ& Ġ( hue Ġ- Ġ 3 0 ) Ġ% Ġ 3 6 0 . Ċ Ġ*/ Ċ fun ĠH SL A Color . an alog ous (): ĠPair < H SL A Color , ĠH SL A Color > Ġ{ ĊĠĠĠ Ġval Ġh 1 Ġ= Ġthis . copy ( hue Ġ= Ġ( hue Ġ+ Ġ 3 0 ) Ġ% Ġ 3 6 0 ) ĊĠĠĠ Ġval Ġh 2 Ġ= Ġthis . copy ( hue Ġ= Ġ( hue Ġ+ Ġ 3 3 0 ) Ġ% Ġ 3 6 0 ) ĊĊĠĠĠ Ġreturn ĠPair ( h 1 , Ġh 2 ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCheck Ġif Ġa Ġcolor Ġis Ġdark Ġ( convert Ġto ĠX YZ Ġ& Ġcheck ĠY Ġcomponent ) Ċ Ġ*/ Ċ fun ĠH SL A Color . is Dark (): ĠBoolean Ġ= ĠColor Utils . calculate L uminance ( this . as Color Int ()) Ġ< Ġ 0 . 5 Ċ Ċ /** Ċ Ġ* ĠReturns Ġa Ġcolor Ġthat Ġcontrast s Ġnicely Ġwith Ġthe Ġone Ġgiven Ġ( receiver ). ĠF allback s Ġto Ġwhite Ġand Ċ Ġ* Ġblack , Ġbut Ġoptional Ġlight Ġand Ġdark Ġcolors Ġcan Ġbe Ġpassed . Ċ Ġ*/ Ċ fun ĠH SL A Color . contrast ing ( ĊĠĠĠ Ġlight Color : ĠH SL A Color Ġ= ĠH SL A Color ( 0 f , Ġ 0 f , Ġ 1 f , Ġ 1 f ), Ġ// Ġwhite ĊĠĠĠ Ġdark Color : ĠH SL A Color Ġ= ĠH SL A Color ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 1 f ) Ġ// Ġblack Ċ ) Ġ= Ġif Ġ( is Dark ()) Ġ{ ĊĠĠĠ Ġlight Color Ċ } Ġelse Ġ{ ĊĠĠĠ Ġdark Color Ċ } Ċ