/* Ċ Ġ* Ġ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 . jet sn ack . ui . components Ċ Ċ import Ġandroidx . compose . animation . animate Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . border Ċ 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 . draw With Cache Ċ import Ġandroidx . compose . ui . draw . draw With Content Ċ import Ġandroidx . compose . ui . geometry . Size Ċ import Ġandroidx . compose . ui . graphics . Blend Mode Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . Horizontal Gradient Ċ import Ġandroidx . compose . ui . graphics . Linear Gradient Ċ import Ġandroidx . compose . ui . graphics . Shape Ċ import Ġandroidx . compose . ui . graphics . Tile Mode Ċ import Ġandroidx . compose . ui . layout . on Size Changed Ċ import Ġandroidx . compose . ui . unit . Dp Ċ import Ġandroidx . compose . ui . unit . Int Size Ċ import Ġandroidx . compose . ui . unit . dp Ċ Ċ fun ĠModifier . horizontal Gradient Background ( ĊĠĠĠ Ġcolors : ĠList < Color > Ċ ) Ġ= Ġdraw With Cache Ġ{ ĊĠĠĠ Ġ// ĠUse Ġdraw With Cache Ġmodifier Ġto Ġcreate Ġand Ġcache Ġthe Ġgradient Ġonce Ġsize Ġis Ġknown Ġor Ġchanges . ĊĠĠĠ Ġval Ġgradient Ġ= ĠHorizontal Gradient ( ĊĠĠĠĠĠĠĠ Ġstart X Ġ= Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġend X Ġ= Ġsize . width , ĊĠĠĠĠĠĠĠ Ġcolors Ġ= Ġcolors ĊĠĠĠ Ġ) ĊĠĠĠ Ġon Draw Be hind Ġ{ ĊĠĠĠĠĠĠĠ Ġdraw Rect ( brush Ġ= Ġgradient ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠModifier . diagonal Gradient Tint ( ĊĠĠĠ Ġcolors : ĠList < Color >, ĊĠĠĠ Ġblend Mode : ĠBlend Mode Ċ ) Ġ= Ġgradient Tint ( colors , Ġblend Mode ) Ġ{ Ġgradient Colors , Ġsize Ġ-> ĊĠĠĠ ĠLinear Gradient ( ĊĠĠĠĠĠĠĠ Ġcolors Ġ= Ġgradient Colors , ĊĠĠĠĠĠĠĠ Ġstart X Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġstart Y Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġend X Ġ= Ġsize . width , ĊĠĠĠĠĠĠĠ Ġend Y Ġ= Ġsize . height ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠModifier . gradient Tint ( ĊĠĠĠ Ġcolors : ĠList < Color >, ĊĠĠĠ Ġblend Mode : ĠBlend Mode , ĊĠĠĠ Ġbrush Provider : Ġ( List < Color >, ĠSize ) Ġ-> ĠLinear Gradient Ċ ) Ġ= Ġcomposed Ġ{ ĊĠĠĠ Ġvar Ġsize Ġby Ġremember Ġ{ Ġmutable State Of ( Size . Zero ) Ġ} ĊĠĠĠ Ġval Ġgradient Ġ= Ġremember ( colors , Ġsize ) Ġ{ Ġbrush Provider ( colors , Ġsize ) Ġ} ĊĠĠĠ Ġdraw With Content Ġ{ ĊĠĠĠĠĠĠĠ Ġdraw Content () ĊĠĠĠĠĠĠĠ Ġsize Ġ= Ġthis . size ĊĠĠĠĠĠĠĠ Ġdraw Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrush Ġ= Ġgradient , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblend Mode Ġ= Ġblend Mode ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠModifier . offset Gradient Background ( ĊĠĠĠ Ġcolors : ĠList < Color >, ĊĠĠĠ Ġwidth : ĠFloat , ĊĠĠĠ Ġoffset : ĠFloat Ġ= Ġ 0 f Ċ ) Ġ= Ġbackground ( ĊĠĠĠ ĠHorizontal Gradient ( ĊĠĠĠĠĠĠĠ Ġcolors , ĊĠĠĠĠĠĠĠ Ġstart X Ġ= Ġ- offset , ĊĠĠĠĠĠĠĠ Ġend X Ġ= Ġwidth Ġ- Ġoffset , ĊĠĠĠĠĠĠĠ Ġtile Mode Ġ= ĠTile Mode . Mirror ĊĠĠĠ Ġ) Ċ ) Ċ Ċ fun ĠModifier . diagonal Gradient Border ( ĊĠĠĠ Ġcolors : ĠList < Color >, ĊĠĠĠ Ġborder Size : ĠD p Ġ= Ġ 2 . dp , ĊĠĠĠ Ġshape : ĠShape Ċ ) Ġ= Ġgradient Border ( ĊĠĠĠ Ġcolors Ġ= Ġcolors , ĊĠĠĠ Ġborder Size Ġ= Ġborder Size , ĊĠĠĠ Ġshape Ġ= Ġshape Ċ ) Ġ{ Ġgradient Colors , Ġsize Ġ-> ĊĠĠĠ ĠLinear Gradient ( ĊĠĠĠĠĠĠĠ Ġcolors Ġ= Ġgradient Colors , ĊĠĠĠĠĠĠĠ Ġstart X Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġstart Y Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠ Ġend X Ġ= Ġsize . width . toFloat (), ĊĠĠĠĠĠĠĠ Ġend Y Ġ= Ġsize . height . toFloat () ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠModifier . fadeIn Diag onal Gradient Border ( ĊĠĠĠ Ġshow Border : ĠBoolean , ĊĠĠĠ Ġcolors : ĠList < Color >, ĊĠĠĠ Ġborder Size : ĠD p Ġ= Ġ 2 . dp , ĊĠĠĠ Ġshape : ĠShape Ċ ) Ġ= Ġcomposed Ġ{ ĊĠĠĠ Ġval Ġanimated Colors Ġ= ĠList ( colors . size ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠ Ġanimate ( if Ġ( show Border ) Ġcolors [ i ] Ġelse Ġcolors [ i ]. copy ( alpha Ġ= Ġ 0 f )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġdiagonal Gradient Border ( ĊĠĠĠĠĠĠĠ Ġcolors Ġ= Ġanimated Colors , ĊĠĠĠĠĠĠĠ Ġborder Size Ġ= Ġborder Size , ĊĠĠĠĠĠĠĠ Ġshape Ġ= Ġshape ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠModifier . gradient Border ( ĊĠĠĠ Ġcolors : ĠList < Color >, ĊĠĠĠ Ġborder Size : ĠD p Ġ= Ġ 2 . dp , ĊĠĠĠ Ġshape : ĠShape , ĊĠĠĠ Ġbrush Provider : Ġ( List < Color >, ĠInt Size ) Ġ-> ĠLinear Gradient Ċ ) Ġ= Ġcomposed Ġ{ ĊĠĠĠ Ġvar Ġsize Ġby Ġremember Ġ{ Ġmutable State Of ( Int Size . Zero ) Ġ} ĊĠĠĠ Ġval Ġgradient Ġ= Ġremember ( colors , Ġsize ) Ġ{ Ġbrush Provider ( colors , Ġsize ) Ġ} ĊĠĠĠ Ġval Ġsize Provider Ġ= Ġon Size Changed Ġ{ Ġsize Ġ= Ġit Ġ} ĊĠĠĠ Ġsize Provider Ġthen Ġborder ( ĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġborder Size , ĊĠĠĠĠĠĠĠ Ġbrush Ġ= Ġgradient , ĊĠĠĠĠĠĠĠ Ġshape Ġ= Ġshape ĊĠĠĠ Ġ) Ċ } Ċ