/* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// 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 . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" NOTH ING _ TO _ INLINE ", Ġ" EXPERIMENT AL _ FEATURE _ WARNING ") Ċ Ċ package Ġandroidx . compose . ui . unit Ċ Ċ import Ġandroidx . compose . runtime . Immutable Ċ import Ġandroidx . compose . runtime . Stable Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . util . lerp Ċ import Ġandroidx . compose . ui . util . pack Ints Ċ import Ġandroidx . compose . ui . util . unpack Int 1 Ċ import Ġandroidx . compose . ui . util . unpack Int 2 Ċ import Ġkotlin . math . round ToInt Ċ Ċ /** Ċ Ġ* ĠA Ġtwo - dimensional Ġposition Ġusing Ġ[ Int ] Ġpixels Ġfor Ġunits Ċ Ġ*/ Ċ @ Immutable Ċ inline Ġclass ĠInt Offset ( ĊĠĠĠ Ġ@ Published Api Ġinternal Ġval Ġpacked Value : ĠLong Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġhorizontal Ġaspect Ġof Ġthe Ġposition Ġin Ġ[ Int ] Ġpixels . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġval Ġx : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġunpack Int 1 ( packed Value ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvertical Ġaspect Ġof Ġthe Ġposition Ġin Ġ[ Int ] Ġpixels . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġval Ġy : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġunpack Int 2 ( packed Value ) ĊĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġoperator Ġfun Ġcomponent 1 (): ĠInt Ġ= Ġx ĊĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġoperator Ġfun Ġcomponent 2 (): ĠInt Ġ= Ġy ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġcopy Ġof Ġthis ĠInt Offset Ġinstance Ġoptionally Ġoverriding Ġthe ĊĠĠĠĠ Ġ* Ġx Ġor Ġy Ġparameter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcopy ( x : ĠInt Ġ= Ġthis . x , Ġy : ĠInt Ġ= Ġthis . y ) Ġ= ĠInt Offset ( x , Ġy ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSubtract Ġa Ġ[ Int Offset ] Ġfrom Ġanother Ġone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġinline Ġoperator Ġfun Ġminus ( other : ĠInt Offset ) Ġ= ĊĠĠĠĠĠĠĠ ĠInt Offset ( x Ġ- Ġother . x , Ġy Ġ- Ġother . y ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġ[ Int Offset ] Ġto Ġanother Ġone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġinline Ġoperator Ġfun Ġplus ( other : ĠInt Offset ) Ġ= ĊĠĠĠĠĠĠĠ ĠInt Offset ( x Ġ+ Ġother . x , Ġy Ġ+ Ġother . y ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġnew Ġ[ Int Offset ] Ġrepresenting Ġthe Ġneg ation Ġof Ġthis Ġpoint . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġinline Ġoperator Ġfun Ġunary Minus () Ġ= ĠInt Offset (- x , Ġ- y ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMultip lication Ġoperator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠReturns Ġan ĠInt Offset Ġwhose Ġcoordinates Ġare Ġthe Ġcoordinates Ġof Ġthe ĊĠĠĠĠ Ġ* Ġleft - hand - side Ġoperand Ġ( an ĠInt Offset ) Ġmultip lied Ġby Ġthe Ġscalar ĊĠĠĠĠ Ġ* Ġright - hand - side Ġoperand Ġ( a ĠFloat ). ĠThe Ġresult Ġis Ġrounded Ġto Ġthe Ġnearest Ġinteger . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġoperator Ġfun Ġtimes ( operand : ĠFloat ): ĠInt Offset Ġ= ĠInt Offset ( ĊĠĠĠĠĠĠĠ Ġ( x Ġ* Ġoperand ). round ToInt (), ĊĠĠĠĠĠĠĠ Ġ( y Ġ* Ġoperand ). round ToInt () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDiv ision Ġoperator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠReturns Ġan ĠInt Offset Ġwhose Ġcoordinates Ġare Ġthe Ġcoordinates Ġof Ġthe ĊĠĠĠĠ Ġ* Ġleft - hand - side Ġoperand Ġ( an ĠInt Offset ) Ġdivided Ġby Ġthe Ġscalar Ġright - hand - side ĊĠĠĠĠ Ġ* Ġoperand Ġ( a ĠFloat ). ĠThe Ġresult Ġis Ġrounded Ġto Ġthe Ġnearest Ġinteger . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġoperator Ġfun Ġdiv ( operand : ĠFloat ): ĠInt Offset Ġ= ĠInt Offset ( ĊĠĠĠĠĠĠĠ Ġ( x Ġ/ Ġoperand ). round ToInt (), ĊĠĠĠĠĠĠĠ Ġ( y Ġ/ Ġoperand ). round ToInt () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMod ulo Ġ( remainder ) Ġoperator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠReturns Ġan ĠInt Offset Ġwhose Ġcoordinates Ġare Ġthe Ġremainder Ġof Ġdiv iding Ġthe ĊĠĠĠĠ Ġ* Ġcoordinates Ġof Ġthe Ġleft - hand - side Ġoperand Ġ( an ĠInt Offset ) Ġby Ġthe Ġscalar ĊĠĠĠĠ Ġ* Ġright - hand - side Ġoperand Ġ( an ĠInt ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġoperator Ġfun Ġrem ( operand : ĠInt ) Ġ= ĠInt Offset ( x Ġ% Ġoperand , Ġy Ġ% Ġoperand ) ĊĊĠĠĠ Ġ@ Stable ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġ" ($ x , Ġ$ y )" ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠZero Ġ= ĠInt Offset ( 0 , Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠConstructs Ġa Ġ[ Int Offset ] Ġfrom Ġ[ x ] Ġand Ġ[ y ] Ġposition Ġ[ Int ] Ġvalues . Ċ Ġ*/ Ċ @ Stable Ċ inline Ġfun ĠInt Offset ( x : ĠInt , Ġy : ĠInt ): ĠInt Offset Ġ= ĊĠĠĠ ĠInt Offset ( pack Ints ( x , Ġy )) Ċ Ċ /** Ċ Ġ* ĠLinear ly Ġinterpolate Ġbetween Ġtwo Ġ[ Int Offset ] s . Ċ Ġ* Ċ Ġ* ĠThe Ġ[ fraction ] Ġargument Ġrepresents Ġposition Ġon Ġthe Ġtimeline , Ġwith Ġ 0 . 0 Ġmeaning Ċ Ġ* Ġthat Ġthe Ġinterpolation Ġhas Ġnot Ġstarted , Ġreturning Ġ[ start ] Ġ( or Ġsomething Ċ Ġ* Ġequivalent Ġto Ġ[ start ]), Ġ 1 . 0 Ġmeaning Ġthat Ġthe Ġinterpolation Ġhas Ġfinished , Ċ Ġ* Ġreturning Ġ[ stop ] Ġ( or Ġsomething Ġequivalent Ġto Ġ[ stop ]), Ġand Ġvalues Ġin Ġbetween Ċ Ġ* Ġmeaning Ġthat Ġthe Ġinterpolation Ġis Ġat Ġthe Ġrelevant Ġpoint Ġon Ġthe Ġtimeline Ċ Ġ* Ġbetween Ġ[ start ] Ġand Ġ[ stop ]. ĠThe Ġinterpolation Ġcan Ġbe Ġex trap olated Ġbeyond Ġ 0 . 0 Ġand Ċ Ġ* Ġ 1 . 0 , Ġso Ġnegative Ġvalues Ġand Ġvalues Ġgreater Ġthan Ġ 1 . 0 Ġare Ġvalid . Ċ Ġ*/ Ċ @ Stable Ċ fun Ġl erp ( start : ĠInt Offset , Ġstop : ĠInt Offset , Ġfraction : ĠFloat ): ĠInt Offset Ġ= ĊĠĠĠ ĠInt Offset ( lerp ( start . x , Ġstop . x , Ġfraction ), Ġl erp ( start . y , Ġstop . y , Ġfraction )) Ċ Ċ /** Ċ Ġ* ĠConverts Ġthe Ġ[ Int Offset ] Ġto Ġan Ġ[ Offset ]. Ċ Ġ*/ Ċ @ Stable Ċ inline Ġfun ĠInt Offset . to Offset () Ġ= ĠOffset ( x . toFloat (), Ġy . toFloat ()) Ċ Ċ @ Stable Ċ operator Ġfun ĠOffset . plus ( offset : ĠInt Offset ): ĠOffset Ġ= ĊĠĠĠ ĠOffset ( x Ġ+ Ġoffset . x , Ġy Ġ+ Ġoffset . y ) Ċ Ċ @ Stable Ċ operator Ġfun ĠOffset . minus ( offset : ĠInt Offset ): ĠOffset Ġ= ĊĠĠĠ ĠOffset ( x Ġ- Ġoffset . x , Ġy Ġ- Ġoffset . y ) Ċ Ċ @ Stable Ċ operator Ġfun ĠInt Offset . plus ( offset : ĠOffset ): ĠOffset Ġ= ĊĠĠĠ ĠOffset ( x Ġ+ Ġoffset . x , Ġy Ġ+ Ġoffset . y ) Ċ Ċ @ Stable Ċ operator Ġfun ĠInt Offset . minus ( offset : ĠOffset ): ĠOffset Ġ= ĊĠĠĠ ĠOffset ( x Ġ- Ġoffset . x , Ġy Ġ- Ġoffset . y ) Ċ Ċ /** Ċ Ġ* ĠRound Ġa Ġ[ Offset ] Ġdown Ġto Ġthe Ġnearest Ġ[ Int ] Ġcoordinates . Ċ Ġ*/ Ċ @ Stable Ċ inline Ġfun ĠOffset . round (): ĠInt Offset Ġ= ĠInt Offset ( x . round ToInt (), Ġy . round ToInt ())