package Ġcom . f int ec systems . xs 2 aw izard . form . components . shared Ċ Ċ import Ġandroidx . compose . animation . core .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip To Bounds Ċ import Ġandroidx . compose . ui . layout . Layout Ċ import Ġkotlinx . coroutines . delay Ċ Ċ private Ġdata Ġclass ĠContent Layout Info ( val Ġwidth : ĠInt , Ġval Ġcontainer Width : ĠInt ) Ċ Ċ /** Ċ Ġ* ĠScroll s Ġthe Ġcontent Ġautomatically Ġif Ġit 's Ġto Ġlarge Ġfor Ġthe Ġcontainer . Ċ Ġ* Ċ Ġ* Ġ@ param Ġscroll Speed ĠTime Ġneeded Ġto Ġscroll Ġthe Ġcontainer Ġwidth Ġonce . Ċ Ġ* Ġ@ param Ġdelay ĠStart Ġdelay . Ċ Ġ* Ġ@ param Ġchildren ĠContent Ġof Ġthe Ġcontainer . ĠHas Ġto Ġbe Ġa Ġsingle Ġelement . Ċ Ġ*/ Ċ @ Composable Ċ fun ĠAnimated Auto Scroll Container ( ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġscroll Speed : ĠInt Ġ= Ġ 5 0 0 0 , ĊĠĠĠ Ġdelay : ĠInt Ġ= Ġ 1 0 0 0 , ĊĠĠĠ Ġchildren : Ġ@ Composable Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġoffset Ġby Ġremember Ġ{ Ġmutable State Of ( 0 ) Ġ} ĊĠĠĠ Ġval Ġcontent Layout Info State Ġ= Ġremember Ġ{ Ġmutable State Of < Content Layout Info ? >( null ) Ġ} ĊĊĠĠĠ ĠLa unched Effect ( content Layout Info State . value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Layout Info Ġ= Ġcontent Layout Info State . value Ġ?: Ġreturn @ La unched Effect ĊĊĠĠĠĠĠĠĠ Ġif Ġ( content Layout Info . width Ġ<= Ġcontent Layout Info . container Width ) Ġreturn @ La unched Effect ĊĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġscroll Speed Ġ* Ġcontent Layout Info . width Ġ/ Ġcontent Layout Info . container Width ĊĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= ĠTarget Based Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġinfinite Repeat able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Ġ= Ġt ween ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġduration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay Millis Ġ= Ġdelay , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeasing Ġ= ĠLinear E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Mode Ġ= ĠRepeat Mode . Reverse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Converter Ġ= ĠInt . Vector Converter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Value Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Value Ġ= Ġcontent Layout Info . container Width Ġ- Ġcontent Layout Info . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= Ġwith Frame Nan os Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay Time Ġ= Ġwith Frame Nan os Ġ{ Ġit Ġ} Ġ- ĠstartTime ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ( animation . getValue From Nan os ( play Time )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ(! animation . is Finished From Nan os ( play Time )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( delay . to Long ()) ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠLayout ( modifier Ġ= Ġmodifier . clip To Bounds (), Ġcontent Ġ= Ġchildren ) Ġ{ Ġmeas ur ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠ Ġrequire ( meas ur ables . size Ġ== Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinfinite Width Constraints Ġ= Ġconstraints . copy ( maxWidth Ġ= ĠInt . MAX _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġmeasured Content Ġ= Ġmeas ur ables . first (). measure ( infinite Width Constraints ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( meas ured Content . width Ġ>= Ġconstraints . maxWidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Layout Info State . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent Layout Info ( meas ured Content . width , Ġconstraints . maxWidth ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlayout ( constraints . maxWidth , Ġmeasured Content . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Content . place ( offset , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ