/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . example . j etc aster . util Ċ Ċ import Ġandroidx . annotation . Float Range Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . composed Ċ import Ġandroidx . compose . ui . draw With Content Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . Vertical Gradient Ċ import Ġkotlin . math . pow Ċ Ċ /** Ċ Ġ* ĠDraw s Ġa Ġvertical Ġgradient Ġs cri m Ġin Ġthe Ġforeground . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcolor ĠThe Ġcolor Ġof Ġthe Ġgradient Ġs cri m . Ċ Ġ* Ġ@ param Ġstart Y Percentage ĠThe Ġstart Ġy Ġvalue , Ġin Ġpercentage Ġof Ġthe Ġlayout 's Ġheight Ġ( 0 f Ġto Ġ 1 f ) Ċ Ġ* Ġ@ param Ġend Y Percentage ĠThe Ġend Ġy Ġvalue , Ġin Ġpercentage Ġof Ġthe Ġlayout 's Ġheight Ġ( 0 f Ġto Ġ 1 f ) Ċ Ġ* Ġ@ param Ġdecay ĠThe Ġexponential Ġdecay Ġto Ġapply Ġto Ġthe Ġgradient . ĠDefaults Ġto Ġ` 1 . 0 f ` Ġwhich Ġis Ċ Ġ* Ġa Ġlinear Ġgradient . Ċ Ġ* Ġ@ param Ġnum Stops ĠThe Ġnumber Ġof Ġcolor Ġstops Ġto Ġdraw Ġin Ġthe Ġgradient . ĠHigh er Ġnumbers Ġresult Ġin Ċ Ġ* Ġthe Ġhigher Ġvisual Ġquality Ġat Ġthe Ġcost Ġof Ġdraw Ġperformance . ĠDefaults Ġto Ġ` 1 6 `. Ċ Ġ*/ Ċ @ Composable Ċ fun ĠModifier . vertical Gradient S cri m ( ĊĠĠĠ Ġcolor : ĠColor , ĊĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġstart Y Percentage : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠ Ġ@ Float Range ( from Ġ= Ġ 0 . 0 , Ġto Ġ= Ġ 1 . 0 ) Ġend Y Percentage : ĠFloat Ġ= Ġ 1 f , ĊĠĠĠ Ġdecay : ĠFloat Ġ= Ġ 1 . 0 f , ĊĠĠĠ Ġnum Stops : ĠInt Ġ= Ġ 1 6 Ċ ): ĠModifier Ġ= Ġcomposed Ġ{ ĊĠĠĠ Ġval Ġcolors Ġ= Ġremember ( color , Ġnum Stops ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( decay Ġ!= Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġhave Ġa Ġnon - linear Ġdecay , Ġwe Ġneed Ġto Ġcreate Ġthe Ġcolor Ġgradient Ġsteps ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmanually ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Alpha Ġ= Ġcolor . alpha ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList ( num Stops ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġi Ġ* Ġ 1 f Ġ/ Ġ( num Stops Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopacity Ġ= Ġx . pow ( decay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor . copy ( alpha Ġ= Ġbase Alpha Ġ* Ġopacity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe Ġhave Ġa Ġlinear Ġdecay , Ġwe Ġjust Ġcreate Ġa Ġsimple Ġlist Ġof Ġstart Ġ+ Ġend Ġcolors ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( color . copy ( alpha Ġ= Ġ 0 f ), Ġcolor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġheight Ġby Ġremember Ġ{ Ġmutable State Of ( 0 f ) Ġ} ĊĠĠĠ Ġval Ġbrush Ġ= Ġremember ( color , Ġnum Stops , Ġstart Y Percentage , Ġend Y Percentage , Ġheight ) Ġ{ ĊĠĠĠĠĠĠĠ ĠVertical Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors Ġ= Ġcolors , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Y Ġ= Ġheight Ġ* Ġstart Y Percentage , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Y Ġ= Ġheight Ġ* Ġend Y Percentage ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdraw With Content Ġ{ ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġsize . height ĊĊĠĠĠĠĠĠĠ Ġdraw Content () ĊĠĠĠĠĠĠĠ Ġdraw Rect ( brush Ġ= Ġbrush ) ĊĠĠĠ Ġ} Ċ } Ċ