package Ġcom . github . kaz em ih ab ib . shim mer Ċ Ċ import Ġandroidx . compose . animation . as Disposable Clock Ċ import Ġandroidx . compose . animation . core . Animation Clock Observable Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . composed Ċ import Ġandroidx . compose . ui . draw . Draw Modifier Ċ import Ġandroidx . compose . ui . geometry . Rect Ċ import Ġandroidx . compose . ui . geometry . Size Ċ import Ġandroidx . compose . ui . graphics . Paint Ċ import Ġandroidx . compose . ui . graphics . draw scope . Content Draw Scope Ċ import Ġandroidx . compose . ui . graphics . draw scope . draw Into Canvas Ċ import Ġandroidx . compose . ui . graphics . with Save Layer Ċ import Ġandroidx . compose . ui . layout . Layout Modifier Ċ import Ġandroidx . compose . ui . layout . Meas ur able Ċ import Ġandroidx . compose . ui . layout . Measure Result Ċ import Ġandroidx . compose . ui . layout . Measure Scope Ċ import Ġandroidx . compose . ui . platform . Animation Clock Ambient Ċ import Ġandroidx . compose . ui . unit . Constraints Ċ import Ġandroidx . compose . ui . unit . Layout Direction Ċ import Ġcom . github . kaz em ih ab ib . shim mer . Repeat Mode . RE START Ċ import Ġcom . github . kaz em ih ab ib . shim mer . Repeat Mode . RE VERSE Ċ Ċ /** Ċ Ġ* ĠSh im mer Ġis Ġa Ġ[ Modifier ] Ġwhich Ġadds Ġa Ġshim mer ing Ġeffect Ġto Ġany Ġwidget . Ċ Ġ* Ċ Ġ* Ġ@ sample Ġcom . github . kaz em ih ab ib . compose _ shim mer . App Ċ Ġ* Ċ Ġ* Ġ@ param Ġduration Ms ĠTime Ġit Ġtakes Ġfor Ġthe Ġhighlight Ġto Ġmove Ġfrom Ġone Ġend Ġof Ġthe Ġlayout Ġto Ġthe Ġother . Ċ Ġ* Ġ@ param Ġdelay ĠDelay Ġafter Ġwhich Ġthe Ġcurrent Ġanimation Ġwill Ġrepeat . Ċ Ġ* Ġ@ param Ġrepeat Mode ĠWhat Ġthe Ġanimation Ġshould Ġdo Ġafter Ġre aching Ġthe Ġend , Ġeither Ġrestart Ġfrom Ġthe Ġbeginning Ġor Ġreverse Ġback Ġtowards Ġit . Ċ Ġ* Ġ@ param Ġclock ĠThe Ġanimation Ġclock Ġobservable Ġthat Ġwill Ġdrive Ġthis Ġri pple Ġeffect Ċ Ġ*/ Ċ fun ĠModifier . shim mer ( ĊĠĠĠ Ġduration Ms : ĠInt Ġ= Ġ 3 0 0 0 , ĊĠĠĠ Ġdelay : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġrepeat Mode : ĠRepeat Mode Ġ= ĠRepeat Mode . RE START , ĊĠĠĠ Ġclock : ĠAnimation Clock Observable ? Ġ= Ġnull Ċ ): ĠModifier Ġ= Ġcomposed Ġ{ ĊĠĠĠ Ġ@ Suppress (" NAME _ SH ADO WING ") Ġ// Ġdon 't Ġallow Ġusage Ġof Ġthe Ġparameter Ġclock , Ġonly Ġthe Ġdis posable ĊĠĠĠ Ġval Ġclock Ġ= Ġ( clock Ġ?: ĠAnimation Clock Ambient . current ). as Disposable Clock () ĊĠĠĠ Ġval Ġtheme Ġ= ĠSh im mer Theme Provider . current ĊĊĠĠĠ Ġval Ġshim mer Modifier Ġ= ĊĠĠĠĠĠĠĠ Ġremember ( theme , Ġdelay , Ġduration Ms , Ġrepeat Mode , Ġclock ) Ġ{ Ġ// TODO (" De crease Ġthe Ġreal location ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSh im mer Modifier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshim mer Theme Ġ= Ġtheme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ms Ġ= Ġduration Ms , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Ġ= Ġdelay , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= Ġrepeat Mode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclock Ġ= Ġclock ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġshim mer Modifier Ċ } Ċ Ċ internal Ġclass ĠSh im mer Modifier ( ĊĠĠĠ Ġval Ġshim mer Theme : ĠSh im mer Theme , ĊĠĠĠ Ġval Ġduration Ms : ĠInt , ĊĠĠĠ Ġval Ġdelay : ĠInt , ĊĠĠĠ Ġval Ġrepeat Mode : ĠRepeat Mode , ĊĠĠĠ Ġclock : ĠAnimation Clock Observable Ċ ) Ġ: ĠDraw Modifier , ĠLayout Modifier Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġsize Ġ= ĠSize ( 0 f , Ġ 0 f ) ĊĠĠĠ Ġprivate Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġval Ġfactory : ĠSh im mer Effect Ġ= Ġshim mer Theme . run Ġ{ ĊĠĠĠĠĠĠĠ Ġfactory . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Alpha Ġ= Ġbase Alpha , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ms Ġ= Ġduration Ms , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= Ġrepeat Mode , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt ilt Ġ= Ġt ilt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrop Off Ġ= Ġdrop Off , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintensity Ġ= Ġintensity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhighlight Alpha Ġ= Ġhighlight Alpha , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġdirection , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Ġ= Ġdelay , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclock Ġ= Ġclock ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠContent Draw Scope . draw () Ġ{ ĊĠĠĠĠĠĠĠ Ġdraw Into Canvas Ġ{ Ġcanvas Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . with Save Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Sh im mer Modifier . size . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Sh im mer Modifier . size . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġpaint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Content () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfactory . draw ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Sh im mer Modifier . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠMeasure Scope . measure ( ĊĠĠĠĠĠĠĠ Ġmeas ur able : ĠMe as ur able , ĊĠĠĠĠĠĠĠ Ġconstraints : ĠConstraints ĊĠĠĠ Ġ): ĠMeasure Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur able . measure ( constraints ) ĊĠĠĠĠĠĠĠ Ġsize Ġ= ĠSize ( width Ġ= Ġplace able . width . toFloat (), Ġheight Ġ= Ġplace able . height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġfactory . update Size ( size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlayout ( place able . width , Ġplace able . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ[ RE START ] Ġrestart s Ġthe Ġ[ shim mer ] Ġeffect Ġanimation Ġafter Ġre aching Ġthe Ġend Ġof Ġlayout Ċ Ġ* Ġ[ RE VERSE ] Ġre ver ses Ġthe Ġ[ shim mer ] Ġeffect Ġanimation Ġafter Ġre aching Ġthe Ġend Ġof Ġlayout Ċ Ġ*/ Ċ enum Ġclass ĠRepeat Mode Ġ{ ĊĠĠĠ ĠRE START , ĊĠĠĠ ĠRE VERSE Ċ } ĊĊ