/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . tun jid . demo . common . ui . numbers Ċ Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . to Argb Ċ import Ġkotlin . math . pow Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . random . Random Ċ Ċ object ĠM uted Colors Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmut ed Colors Ġ= Ġint ArrayOf ( ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF 2 9 8 0 b 9 ). to Argb (), Ġ// ĠBel ize ĠH ole ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF 2 c 3 e 5 0 ). to Argb (), Ġ// ĠMid night ĠBlue ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF c 0 3 9 2 b ). to Argb (), Ġ// ĠP ome gran ate ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF 1 6 a 0 8 5 ). to Argb (), Ġ// ĠGreen ĠSe a ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF 7 f 8 c 8 d ). to Argb () Ġ// ĠConcrete ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġdark er Mut ed Colors Ġ= Ġint ArrayOf ( ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF 3 0 4 2 3 3 ). to Argb (), ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF 3 5 3 b 4 5 ). to Argb (), ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF 3 9 2 e 3 a ). to Argb (), ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF 3 e 2 a 2 a ). to Argb (), ĊĠĠĠĠĠĠĠ ĠColor ( 0 xFF 4 7 4 7 4 7 ). to Argb () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġcolor At ( is Dark : ĠBoolean , Ġindex : ĠInt ) Ġ= Ġpalette ( is Dark ). circular ( index ) ĊĊĠĠĠ Ġfun Ġrandom ( is Dark : ĠBoolean ): ĠInt Ġ= Ġpalette ( is Dark ). random () ĊĊĠĠĠ Ġprivate Ġfun Ġpalette ( is Dark : ĠBoolean ): ĠInt Array Ġ= Ġwhen Ġ( is Dark ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġmut ed Colors ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdark er Mut ed Colors ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠInt Array . circular ( index : ĠInt ) Ġ= Ġthis [ index Ġ% Ġsize ] Ċ Ċ private Ġfun ĠInt Array . random () Ġ= Ġthis [( Random . Default . nextInt ( size ))] Ċ Ċ fun Ġinterpolate Colors ( fraction : ĠFloat , Ġstart Value : ĠInt , Ġend Value : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġstart A Ġ= Ġ( start Value Ġshr Ġ 2 4 Ġand Ġ 0 xff ) Ġ/ Ġ 2 5 5 . 0 f ĊĠĠĠ Ġvar Ġstart R Ġ= Ġ( start Value Ġshr Ġ 1 6 Ġand Ġ 0 xff ) Ġ/ Ġ 2 5 5 . 0 f ĊĠĠĠ Ġvar Ġstart G Ġ= Ġ( start Value Ġshr Ġ 8 Ġand Ġ 0 xff ) Ġ/ Ġ 2 5 5 . 0 f ĊĠĠĠ Ġvar Ġstart B Ġ= Ġ( start Value Ġand Ġ 0 xff ) Ġ/ Ġ 2 5 5 . 0 f ĊĠĠĠ Ġval Ġend A Ġ= Ġ( end Value Ġshr Ġ 2 4 Ġand Ġ 0 xff ) Ġ/ Ġ 2 5 5 . 0 f ĊĠĠĠ Ġvar Ġend R Ġ= Ġ( end Value Ġshr Ġ 1 6 Ġand Ġ 0 xff ) Ġ/ Ġ 2 5 5 . 0 f ĊĠĠĠ Ġvar Ġend G Ġ= Ġ( end Value Ġshr Ġ 8 Ġand Ġ 0 xff ) Ġ/ Ġ 2 5 5 . 0 f ĊĠĠĠ Ġvar Ġend B Ġ= Ġ( end Value Ġand Ġ 0 xff ) Ġ/ Ġ 2 5 5 . 0 f ĊĊĠĠĠ Ġ// Ġconvert Ġfrom Ġs RGB Ġto Ġlinear ĊĠĠĠ Ġstart R Ġ= Ġstart R . toDouble (). pow ( 2 . 2 ). toFloat () ĊĠĠĠ Ġstart G Ġ= Ġstart G . toDouble (). pow ( 2 . 2 ). toFloat () ĊĠĠĠ Ġstart B Ġ= Ġstart B . toDouble (). pow ( 2 . 2 ). toFloat () ĊĠĠĠ Ġend R Ġ= Ġend R . toDouble (). pow ( 2 . 2 ). toFloat () ĊĠĠĠ Ġend G Ġ= Ġend G . toDouble (). pow ( 2 . 2 ). toFloat () ĊĠĠĠ Ġend B Ġ= Ġend B . toDouble (). pow ( 2 . 2 ). toFloat () ĊĊĠĠĠ Ġ// Ġcompute Ġthe Ġinterpolated Ġcolor Ġin Ġlinear Ġspace ĊĠĠĠ Ġvar Ġa Ġ= Ġstart A Ġ+ Ġfraction Ġ* Ġ( end A Ġ- Ġstart A ) ĊĠĠĠ Ġvar Ġr Ġ= Ġstart R Ġ+ Ġfraction Ġ* Ġ( end R Ġ- Ġstart R ) ĊĠĠĠ Ġvar Ġg Ġ= Ġstart G Ġ+ Ġfraction Ġ* Ġ( end G Ġ- Ġstart G ) ĊĠĠĠ Ġvar Ġb Ġ= Ġstart B Ġ+ Ġfraction Ġ* Ġ( end B Ġ- Ġstart B ) ĊĊĠĠĠ Ġ// Ġconvert Ġback Ġto Ġs RGB Ġin Ġthe Ġ[ 0 .. 2 5 5 ] Ġrange ĊĠĠĠ Ġa Ġ*= Ġ 2 5 5 . 0 f ĊĠĠĠ Ġr Ġ= Ġr . toDouble (). pow ( 1 . 0 Ġ/ Ġ 2 . 2 ). toFloat () Ġ* Ġ 2 5 5 . 0 f ĊĠĠĠ Ġg Ġ= Ġg . toDouble (). pow ( 1 . 0 Ġ/ Ġ 2 . 2 ). toFloat () Ġ* Ġ 2 5 5 . 0 f ĊĠĠĠ Ġb Ġ= Ġb . toDouble (). pow ( 1 . 0 Ġ/ Ġ 2 . 2 ). toFloat () Ġ* Ġ 2 5 5 . 0 f ĊĊĠĠĠ Ġreturn Ġa . round ToInt () Ġshl Ġ 2 4 Ġor Ġ( r . round ToInt () Ġshl Ġ 1 6 ) Ġor Ġ( g . round ToInt () Ġshl Ġ 8 ) Ġor Ġb . round ToInt () Ċ }