/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġ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 . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . ui . geometry Ċ Ċ import Ġandroidx . compose . runtime . Immutable Ċ import Ġandroidx . compose . ui . util . lerp Ċ import Ġandroidx . compose . ui . util . toString As Fixed Ċ import Ġkotlin . math . absolute Value Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ /** Ċ Ġ* ĠAn Ġimmutable Ġrounded Ġrectangle Ġwith Ġcustom Ġrad ii Ġfor Ġall Ġfour Ġcorners . Ċ Ġ*/ Ċ @ Immutable Ċ data Ġclass ĠRound Rect ( ĊĠĠĠ Ġ/** ĠThe Ġoffset Ġof Ġthe Ġleft Ġedge Ġof Ġthis Ġrectangle Ġfrom Ġthe Ġx Ġaxis Ġ*/ ĊĠĠĠ Ġval Ġleft : ĠFloat , ĊĠĠĠ Ġ/** ĠThe Ġoffset Ġof Ġthe Ġtop Ġedge Ġof Ġthis Ġrectangle Ġfrom Ġthe Ġy Ġaxis Ġ*/ ĊĠĠĠ Ġval Ġtop : ĠFloat , ĊĠĠĠ Ġ/** ĠThe Ġoffset Ġof Ġthe Ġright Ġedge Ġof Ġthis Ġrectangle Ġfrom Ġthe Ġx Ġaxis Ġ*/ ĊĠĠĠ Ġval Ġright : ĠFloat , ĊĠĠĠ Ġ/** ĠThe Ġoffset Ġof Ġthe Ġbottom Ġedge Ġof Ġthis Ġrectangle Ġfrom Ġthe Ġy Ġaxis Ġ*/ ĊĠĠĠ Ġval Ġbottom : ĠFloat , ĊĠĠĠ Ġ/** ĠThe Ġtop - left Ġradius Ġ*/ ĊĠĠĠ Ġval Ġtop Left Radius : ĠRadius Ġ= ĠRadius . Zero , ĊĊĠĠĠ Ġ/** ĠThe Ġtop - right Ġradius Ġ*/ ĊĠĠĠ Ġval Ġtop Right Radius : ĠRadius Ġ= ĠRadius . Zero , ĊĊĠĠĠ Ġ/** ĠThe Ġbottom - right Ġradius Ġ*/ ĊĠĠĠ Ġval Ġbottom Right Radius : ĠRadius Ġ= ĠRadius . Zero , ĊĊĠĠĠ Ġ/** ĠThe Ġbottom - left Ġradius Ġ*/ ĊĠĠĠ Ġval Ġbottom Left Radius : ĠRadius Ġ= ĠRadius . Zero Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĠThe Ġdistance Ġbetween Ġthe Ġleft Ġand Ġright Ġedges Ġof Ġthis Ġrectangle . Ġ*/ ĊĠĠĠ Ġval Ġwidth : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġright Ġ- Ġleft ĊĊĠĠĠ Ġ/** ĠThe Ġdistance Ġbetween Ġthe Ġtop Ġand Ġbottom Ġedges Ġof Ġthis Ġrectangle . Ġ*/ ĊĠĠĠ Ġval Ġheight : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbottom Ġ- Ġtop ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSame ĠRound Rect Ġwith Ġscaled Ġrad ii Ġper Ġside . ĠIf Ġyou Ġneed Ġthis Ġcall Ġ[ scaled Rad ii Rect ] Ġinstead . ĊĠĠĠĠ Ġ* ĠNot Ġ@ Volatile Ġsince Ġthe Ġcomputed Ġresult Ġwill Ġalways Ġbe Ġthe Ġsame Ġeven Ġif Ġwe Ġrace ĊĠĠĠĠ Ġ* Ġand Ġduplicate Ġcreation / computation Ġin Ġ[ scaled Rad ii Rect ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġ_ scaled Rad ii Rect : ĠRound Rect ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSca les Ġall Ġrad ii Ġso Ġthat Ġon Ġeach Ġside Ġtheir Ġsum Ġwill Ġnot Ġpass Ġthe Ġsize Ġof ĊĠĠĠĠ Ġ* Ġthe Ġwidth / height . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġscaled Rad ii Rect (): ĠRound Rect Ġ= Ġ_ scaled Rad ii Rect Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġscale Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġscale Ġ= Ġmin Radius ( scale , Ġbottom Left Radius . y , Ġtop Left Radius . y , Ġheight ) ĊĠĠĠĠĠĠĠ Ġscale Ġ= Ġmin Radius ( scale , Ġtop Left Radius . x , Ġtop Right Radius . x , Ġwidth ) ĊĠĠĠĠĠĠĠ Ġscale Ġ= Ġmin Radius ( scale , Ġtop Right Radius . y , Ġbottom Right Radius . y , Ġheight ) ĊĠĠĠĠĠĠĠ Ġscale Ġ= Ġmin Radius ( scale , Ġbottom Right Radius . x , Ġbottom Left Radius . x , Ġwidth ) ĊĊĠĠĠĠĠĠĠ ĠRound Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġleft Ġ* Ġscale , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġtop Ġ* Ġscale , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġright Ġ* Ġscale , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġbottom Ġ* Ġscale , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Radius Ġ= ĠRadius ( top Left Radius . x Ġ* Ġscale , Ġtop Left Radius . y Ġ* Ġscale ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Right Radius Ġ= ĠRadius ( top Right Radius . x Ġ* Ġscale , Ġtop Right Radius . y Ġ* Ġscale ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Right Radius Ġ= ĠRadius ( bottom Right Radius . x Ġ* Ġscale , Ġbottom Right Radius . y Ġ* Ġscale ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Left Radius Ġ= ĠRadius ( bottom Left Radius . x Ġ* Ġscale , Ġbottom Left Radius . y Ġ* Ġscale ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġmight Ġhappen Ġrace y Ġon Ġdifferent Ġthreads , Ġwe Ġdon 't Ġcare , Ġit 'll Ġbe Ġthe Ġsame Ġresults . ĊĠĠĠĠĠĠĠ Ġ_ scaled Rad ii Rect Ġ= Ġit ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġminimum Ġbetween Ġmin Ġand Ġscale Ġto Ġwhich Ġradius 1 Ġand Ġradius 2 ĊĠĠĠĠ Ġ* Ġshould Ġbe Ġscaled Ġwith Ġin Ġorder Ġnot Ġto Ġexceed Ġthe Ġlimit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmin Radius ( min : ĠFloat , Ġradius 1 : ĠFloat , Ġradius 2 : ĠFloat , Ġlimit : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsum Ġ= Ġradius 1 Ġ+ Ġradius 2 ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( sum Ġ> Ġlimit Ġ&& Ġsum Ġ!= Ġ 0 . 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin ( min , Ġlimit Ġ/ Ġsum ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhether Ġthe Ġpoint Ġspecified Ġby Ġthe Ġgiven Ġoffset Ġ( which Ġis Ġassumed Ġto Ġbe ĊĠĠĠĠ Ġ* Ġrelative Ġto Ġthe Ġorigin ) Ġlies Ġinside Ġthe Ġrounded Ġrectangle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġmay Ġallocate Ġ( and Ġcache ) Ġa Ġcopy Ġof Ġthe Ġobject Ġwith Ġnormalized ĊĠĠĠĠ Ġ* Ġrad ii Ġthe Ġfirst Ġtime Ġit Ġis Ġcalled Ġon Ġa Ġparticular Ġ[ Round Rect ] Ġinstance . ĠWhen ĊĠĠĠĠ Ġ* Ġusing Ġthis Ġmethod , Ġprefer Ġto Ġreuse Ġexisting Ġ[ Round Rect ] s Ġrather Ġthan ĊĠĠĠĠ Ġ* Ġre creating Ġthe Ġobject Ġeach Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcontains ( point : ĠOffset ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( point . x Ġ< Ġleft Ġ|| Ġpoint . x Ġ>= Ġright Ġ|| Ġpoint . y Ġ< Ġtop Ġ|| Ġpoint . y Ġ>= Ġbottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ; Ġ// Ġoutside Ġbounding Ġbox ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġscaled Ġ= Ġscaled Rad ii Rect () ĊĊĠĠĠĠĠĠĠ Ġval Ġx : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġradius X : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġradius Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġwhether Ġpoint Ġis Ġin Ġone Ġof Ġthe Ġrounded Ġcorner Ġareas ĊĠĠĠĠĠĠĠ Ġ// Ġx , Ġy Ġ-> Ġtranslate Ġto Ġel lipse Ġcenter ĊĠĠĠĠĠĠĠ Ġif Ġ( point . x Ġ< Ġleft Ġ+ Ġscaled . top Left Radius . x Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint . y Ġ< Ġtop Ġ+ Ġscaled . top Left Radius . y ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġpoint . x Ġ- Ġleft Ġ- Ġscaled . top Left Radius . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġpoint . y Ġ- Ġtop Ġ- Ġscaled . top Left Radius . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius X Ġ= Ġscaled . top Left Radius . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius Y Ġ= Ġscaled . top Left Radius . y ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( point . x Ġ> Ġright Ġ- Ġscaled . top Right Radius . x Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint . y Ġ< Ġtop Ġ+ Ġscaled . top Right Radius . y ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġpoint . x Ġ- Ġright Ġ+ Ġscaled . top Right Radius . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġpoint . y Ġ- Ġtop Ġ- Ġscaled . top Right Radius . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius X Ġ= Ġscaled . top Right Radius . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius Y Ġ= Ġscaled . top Right Radius . y ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( point . x Ġ> Ġright Ġ- Ġscaled . bottom Right Radius . x Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint . y Ġ> Ġbottom Ġ- Ġscaled . bottom Right Radius . y ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġpoint . x Ġ- Ġright Ġ+ Ġscaled . bottom Right Radius . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġpoint . y Ġ- Ġbottom Ġ+ Ġscaled . bottom Right Radius . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius X Ġ= Ġscaled . bottom Right Radius . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius Y Ġ= Ġscaled . bottom Right Radius . y ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( point . x Ġ< Ġleft Ġ+ Ġscaled . bottom Left Radius . x Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint . y Ġ> Ġbottom Ġ- Ġscaled . bottom Left Radius . y ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġpoint . x Ġ- Ġleft Ġ- Ġscaled . bottom Left Radius . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġpoint . y Ġ- Ġbottom Ġ+ Ġscaled . bottom Left Radius . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius X Ġ= Ġscaled . bottom Left Radius . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradius Y Ġ= Ġscaled . bottom Left Radius . y ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ; Ġ// Ġinside Ġand Ġnot Ġwithin Ġthe Ġrounded Ġcorner Ġarea ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew X Ġ= Ġx Ġ/ Ġradius X ĊĠĠĠĠĠĠĠ Ġval Ġnew Y Ġ= Ġy Ġ/ Ġradius Y ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġthe Ġpoint Ġis Ġinside Ġthe Ġunit Ġcircle ĊĠĠĠĠĠĠĠ Ġreturn Ġnew X Ġ* Ġnew X Ġ+ Ġnew Y Ġ* Ġnew Y Ġ<= Ġ 1 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtl Radius Ġ= Ġtop Left Radius ĊĠĠĠĠĠĠĠ Ġval Ġtr Radius Ġ= Ġtop Right Radius ĊĠĠĠĠĠĠĠ Ġval Ġbr Radius Ġ= Ġbottom Right Radius ĊĠĠĠĠĠĠĠ Ġval Ġbl Radius Ġ= Ġbottom Left Radius ĊĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ left . toString As Fixed ( 1 )}, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ top . toString As Fixed ( 1 )}, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ right . toString As Fixed ( 1 )}, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom . toString As Fixed ( 1 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( tl Radius Ġ== Ġtr Radius Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtr Radius Ġ== Ġbr Radius Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbr Radius Ġ== Ġbl Radius ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tl Radius . x Ġ== Ġtl Radius . y ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Round Rect ( rect =$ rect , Ġradius =${ tl Radius . x . toString As Fixed ( 1 )}) " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Round Rect ( rect =$ rect , Ġx =${ tl Radius . x . toString As Fixed ( 1 )}, Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" y =${ tl Radius . y . toString As Fixed ( 1 )}) " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ" Round Rect (" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" rect =$ rect , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" top Left =$ tl Radius , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" top Right =$ tr Radius , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" bottom Right =$ br Radius , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" bottom Left =$ bl Radius )" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠA Ġrounded Ġrectangle Ġwith Ġall Ġthe Ġvalues Ġset Ġto Ġzero . Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠ Ġval ĠZero Ġ= ĠRound Rect ( 0 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĠRadius . Zero ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠConstruct Ġa Ġrounded Ġrectangle Ġfrom Ġits Ġleft , Ġtop , Ġright , Ġand Ġbottom Ġedges , Ċ Ġ* Ġand Ġthe Ġsame Ġrad ii Ġalong Ġits Ġhorizontal Ġaxis Ġand Ġits Ġvertical Ġaxis . Ċ Ġ*/ Ċ fun ĠRound Rect ( ĊĠĠĠ Ġleft : ĠFloat , ĊĠĠĠ Ġtop : ĠFloat , ĊĠĠĠ Ġright : ĠFloat , ĊĠĠĠ Ġbottom : ĠFloat , ĊĠĠĠ Ġradius X : ĠFloat , ĊĠĠĠ Ġradius Y : ĠFloat Ċ ): ĠRound Rect Ġ{ ĊĠĠĠ Ġval Ġradius Ġ= ĠRadius ( radius X , Ġradius Y ) ĊĠĠĠ Ġreturn ĠRound Rect ( ĊĠĠĠĠĠĠĠ Ġleft Ġ= Ġleft , ĊĠĠĠĠĠĠĠ Ġtop Ġ= Ġtop , ĊĠĠĠĠĠĠĠ Ġright Ġ= Ġright , ĊĠĠĠĠĠĠĠ Ġbottom Ġ= Ġbottom , ĊĠĠĠĠĠĠĠ Ġtop Left Radius Ġ= Ġradius , ĊĠĠĠĠĠĠĠ Ġtop Right Radius Ġ= Ġradius , ĊĠĠĠĠĠĠĠ Ġbottom Right Radius Ġ= Ġradius , ĊĠĠĠĠĠĠĠ Ġbottom Left Radius Ġ= Ġradius ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠConstruct Ġa Ġrounded Ġrectangle Ġfrom Ġits Ġleft , Ġtop , Ġright , Ġand Ġbottom Ġedges , Ċ Ġ* Ġand Ġthe Ġsame Ġradius Ġin Ġeach Ġcorner . Ċ Ġ*/ Ċ fun ĠRound Rect ( ĊĠĠĠ Ġleft : ĠFloat , ĊĠĠĠ Ġtop : ĠFloat , ĊĠĠĠ Ġright : ĠFloat , ĊĠĠĠ Ġbottom : ĠFloat , ĊĠĠĠ Ġradius : ĠRadius Ċ ) Ġ= ĠRound Rect ( ĊĠĠĠ Ġleft , ĊĠĠĠ Ġtop , ĊĠĠĠ Ġright , ĊĠĠĠ Ġbottom , ĊĠĠĠ Ġradius . x , ĊĠĠĠ Ġradius . y Ċ ) Ċ Ċ /** Ċ Ġ* ĠConstruct Ġa Ġrounded Ġrectangle Ġfrom Ġits Ġbounding Ġbox Ġand Ġthe Ġsame Ġrad ii Ċ Ġ* Ġalong Ġits Ġhorizontal Ġaxis Ġand Ġits Ġvertical Ġaxis . Ċ Ġ*/ Ċ fun ĠRound Rect ( ĊĠĠĠ Ġrect : ĠRect , ĊĠĠĠ Ġradius X : ĠFloat , ĊĠĠĠ Ġradius Y : ĠFloat Ċ ): ĠRound Rect Ġ= ĠRound Rect ( ĊĠĠĠ Ġleft Ġ= Ġrect . left , ĊĠĠĠ Ġtop Ġ= Ġrect . top , ĊĠĠĠ Ġright Ġ= Ġrect . right , ĊĠĠĠ Ġbottom Ġ= Ġrect . bottom , ĊĠĠĠ Ġradius X Ġ= Ġradius X , ĊĠĠĠ Ġradius Y Ġ= Ġradius Y Ċ ) Ċ Ċ /** Ċ Ġ* ĠConstruct Ġa Ġrounded Ġrectangle Ġfrom Ġits Ġbounding Ġbox Ġand Ġa Ġradius Ġthat Ġis Ċ Ġ* Ġthe Ġsame Ġin Ġeach Ġcorner . Ċ Ġ*/ Ċ fun ĠRound Rect ( ĊĠĠĠ Ġrect : ĠRect , ĊĠĠĠ Ġradius : ĠRadius Ċ ): ĠRound Rect Ġ= ĠRound Rect ( ĊĠĠĠ Ġrect Ġ= Ġrect , ĊĠĠĠ Ġradius X Ġ= Ġradius . x , ĊĠĠĠ Ġradius Y Ġ= Ġradius . y Ċ ) Ċ Ċ /** Ċ Ġ* ĠConstruct Ġa Ġrounded Ġrectangle Ġfrom Ġits Ġbounding Ġbox Ġand Ġtop Left , Ċ Ġ* Ġtop Right , Ġbottom Right , Ġand Ġbottom Left Ġrad ii . Ċ Ġ* Ċ Ġ* ĠThe Ġcorner Ġrad ii Ġdefault Ġto Ġ[ Radius . Zero ], Ġi . e . Ġright - angled Ġcorners Ċ Ġ*/ Ċ fun ĠRound Rect ( ĊĠĠĠ Ġrect : ĠRect , ĊĠĠĠ Ġtop Left : ĠRadius Ġ= ĠRadius . Zero , ĊĠĠĠ Ġtop Right : ĠRadius Ġ= ĠRadius . Zero , ĊĠĠĠ Ġbottom Right : ĠRadius Ġ= ĠRadius . Zero , ĊĠĠĠ Ġbottom Left : ĠRadius Ġ= ĠRadius . Zero Ċ ): ĠRound Rect Ġ= ĠRound Rect ( ĊĠĠĠ Ġleft Ġ= Ġrect . left , ĊĠĠĠ Ġtop Ġ= Ġrect . top , ĊĠĠĠ Ġright Ġ= Ġrect . right , ĊĠĠĠ Ġbottom Ġ= Ġrect . bottom , ĊĠĠĠ Ġtop Left Radius Ġ= Ġtop Left , ĊĠĠĠ Ġtop Right Radius Ġ= Ġtop Right , ĊĠĠĠ Ġbottom Right Radius Ġ= Ġbottom Right , ĊĠĠĠ Ġbottom Left Radius Ġ= Ġbottom Left Ċ ) Ċ Ċ /** ĠThe Ġtop - left Ġ[ Radius ]. Ġ*/ Ċ @ Deprecated (" use Ġtop Left Radius Ġinstead ", ĊĠĠĠ ĠReplace With (" top Left Radius ", Ġ" android x . compose . ui . geometry ") Ċ ) Ċ fun ĠRound Rect . top Left Radius (): ĠRadius Ġ= Ġtop Left Radius Ċ Ċ /** Ġ ĠThe Ġtop - right Ġ[ Radius ]. Ġ*/ Ċ @ Deprecated (" Use Ġtop Right Radius Ġinstead ", ĊĠĠĠ ĠReplace With (" top Right Radius ", Ġ" android x . compose . ui . geometry ") Ċ ) Ċ fun ĠRound Rect . top Right Radius (): ĠRadius Ġ= Ġtop Right Radius Ċ Ċ /** Ġ ĠThe Ġbottom - right Ġ[ Radius ]. Ġ*/ Ċ @ Deprecated (" Use Ġbottom Right Radius Ġinstead ", ĊĠĠĠ ĠReplace With (" bottom Right Radius ", Ġ" android x . compose . ui . geometry ") Ċ ) Ċ fun ĠRound Rect . bottom Right Radius (): ĠRadius Ġ= Ġbottom Right Radius Ċ Ċ /** Ġ ĠThe Ġbottom - right Ġ[ Radius ]. Ġ*/ Ċ @ Deprecated (" Use Ġbottom Left Radius Ġinstead ", ĊĠĠĠ ĠReplace With (" bottom Left Radius ", Ġ" android x . compose . ui . geometry ") Ċ ) Ċ /** ĠThe Ġbottom - left Ġ[ Radius ]. Ġ*/ Ċ fun ĠRound Rect . bottom Left Radius (): ĠRadius Ġ= Ġbottom Left Radius Ċ Ċ /** ĠReturns Ġa Ġnew Ġ[ Round Rect ] Ġtranslated Ġby Ġthe Ġgiven Ġoffset . Ġ*/ Ċ @ Deprecated ( ĊĠĠĠ Ġ" Use Ġtranslate ( offset ) Ġinstead ", ĊĠĠĠ ĠReplace With (" translate ( offset )", Ġ" android x . compose . ui . Round Rect ") Ċ ) Ċ fun ĠRound Rect . shift ( offset : ĠOffset ): ĠRound Rect Ġ= Ġtranslate ( offset ) Ċ Ċ /** ĠReturns Ġa Ġnew Ġ[ Round Rect ] Ġtranslated Ġby Ġthe Ġgiven Ġoffset . Ġ*/ Ċ fun ĠRound Rect . translate ( offset : ĠOffset ): ĠRound Rect Ġ= ĠRound Rect ( ĊĠĠĠ Ġleft Ġ= Ġleft Ġ+ Ġoffset . x , ĊĠĠĠ Ġtop Ġ= Ġtop Ġ+ Ġoffset . y , ĊĠĠĠ Ġright Ġ= Ġright Ġ+ Ġoffset . x , ĊĠĠĠ Ġbottom Ġ= Ġbottom Ġ+ Ġoffset . y , ĊĠĠĠ Ġtop Left Radius Ġ= Ġtop Left Radius , ĊĠĠĠ Ġtop Right Radius Ġ= Ġtop Right Radius , ĊĠĠĠ Ġbottom Right Radius Ġ= Ġbottom Right Radius , ĊĠĠĠ Ġbottom Left Radius Ġ= Ġbottom Left Radius Ċ ) Ċ Ċ @ Deprecated (" Use Ġouter Rect Ġinstead ", ĊĠĠĠ ĠReplace With (" bounding Rect ", Ġ" android x . compose . ui . Round Rect ") Ċ ) Ċ /** ĠThe Ġbounding Ġbox Ġof Ġthis Ġrounded Ġrectangle Ġ( the Ġrectangle Ġwith Ġno Ġrounded Ġcorners ). Ġ*/ Ċ fun ĠRound Rect . outer Rect (): ĠRect Ġ= Ġbounding Rect Ċ Ċ /** ĠThe Ġbounding Ġbox Ġof Ġthis Ġrounded Ġrectangle Ġ( the Ġrectangle Ġwith Ġno Ġrounded Ġcorners ). Ġ*/ Ċ val ĠRound Rect . bounding Rect : ĠRect Ġget () Ġ= ĠRect ( left , Ġtop , Ġright , Ġbottom ) Ċ Ċ /** Ċ Ġ* ĠThe Ġnon - rounded Ġrectangle Ġthat Ġis Ġconstr ained Ġby Ġthe Ġsmaller Ġof Ġthe Ġtwo Ċ Ġ* Ġdiag on als , Ġwith Ġeach Ġdiagonal Ġtravel ing Ġthrough Ġthe Ġmiddle Ġof Ġthe Ġcurve Ċ Ġ* Ġcorners . ĠThe Ġmiddle Ġof Ġa Ġcorner Ġis Ġthe Ġintersection Ġof Ġthe Ġcurve Ġwith Ġits Ċ Ġ* Ġrespective Ġquadr ant Ġb ise ctor . Ċ Ġ*/ Ċ @ Deprecated ( ĊĠĠĠ Ġ" Use Ġsafe Inner Rect Ġinstead ", ĊĠĠĠ ĠReplace With (" safe Inner Rect ", Ġ" android x . compose . ui . Round Rect ") Ċ ) Ċ fun ĠRound Rect . safe Inner Rect (): ĠRect Ġ= Ġsafe Inner Rect Ċ Ċ /** Ċ Ġ* ĠThe Ġnon - rounded Ġrectangle Ġthat Ġis Ġconstr ained Ġby Ġthe Ġsmaller Ġof Ġthe Ġtwo Ċ Ġ* Ġdiag on als , Ġwith Ġeach Ġdiagonal Ġtravel ing Ġthrough Ġthe Ġmiddle Ġof Ġthe Ġcurve Ċ Ġ* Ġcorners . ĠThe Ġmiddle Ġof Ġa Ġcorner Ġis Ġthe Ġintersection Ġof Ġthe Ġcurve Ġwith Ġits Ċ Ġ* Ġrespective Ġquadr ant Ġb ise ctor . Ċ Ġ*/ Ċ val ĠRound Rect . safe Inner Rect : ĠRect ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinset Factor Ġ= Ġ 0 . 2 9 2 8 9 3 2 1 8 8 1 f Ġ// Ġ 1 - cos ( pi / 4 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġleft Radius Ġ= Ġmax ( bottom Left Radius . x , Ġtop Left Radius . x ) ĊĠĠĠĠĠĠĠ Ġval Ġtop Radius Ġ= Ġmax ( top Left Radius . y , Ġtop Right Radius . y ) ĊĠĠĠĠĠĠĠ Ġval Ġright Radius Ġ= Ġmax ( top Right Radius . x , Ġbottom Right Radius . x ) ĊĠĠĠĠĠĠĠ Ġval Ġbottom Radius Ġ= Ġmax ( bottom Right Radius . y , Ġbottom Left Radius . y ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRect ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ+ Ġleft Radius Ġ* Ġinset Factor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ+ Ġtop Radius Ġ* Ġinset Factor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ- Ġright Radius Ġ* Ġinset Factor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ- Ġbottom Radius Ġ* Ġinset Factor ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ /** Ċ Ġ* ĠWhether Ġthis Ġrounded Ġrectangle Ġen clo ses Ġa Ġnon - zero Ġarea . Ċ Ġ* ĠNegative Ġareas Ġare Ġconsidered Ġempty . Ċ Ġ*/ Ċ val ĠRound Rect . isEmpty Ġget () Ġ= Ġleft Ġ>= Ġright Ġ|| Ġtop Ġ>= Ġbottom Ċ Ċ /** ĠWhether Ġall Ġcoordinates Ġof Ġthis Ġrounded Ġrectangle Ġare Ġfinite . Ġ*/ Ċ val ĠRound Rect . is Finite Ġget () Ġ= ĊĠĠĠ Ġleft . is Finite () Ġ&& Ġtop . is Finite () Ġ&& Ġright . is Finite () Ġ&& Ġbottom . is Finite () Ċ Ċ /** Ċ Ġ* ĠWhether Ġthis Ġrounded Ġrectangle Ġis Ġa Ġsimple Ġrectangle Ġwith Ġzero Ċ Ġ* Ġcorner Ġrad ii . Ċ Ġ*/ Ċ val ĠRound Rect . is Rect Ġget (): ĠBoolean Ġ= Ġ( top Left Radius . x Ġ== Ġ 0 . 0 f Ġ|| Ġtop Left Radius . y Ġ== Ġ 0 . 0 f ) Ġ&& ĊĠĠĠĠĠĠĠ Ġ( top Right Radius . x Ġ== Ġ 0 . 0 f Ġ|| Ġtop Right Radius . y Ġ== Ġ 0 . 0 f ) Ġ&& ĊĠĠĠĠĠĠĠ Ġ( bottom Left Radius . x Ġ== Ġ 0 . 0 f Ġ|| Ġbottom Left Radius . y Ġ== Ġ 0 . 0 f ) Ġ&& ĊĠĠĠĠĠĠĠ Ġ( bottom Right Radius . x Ġ== Ġ 0 . 0 f Ġ|| Ġbottom Right Radius . y Ġ== Ġ 0 . 0 f ) Ċ Ċ /** ĠWhether Ġthis Ġrounded Ġrectangle Ġhas Ġno Ġside Ġwith Ġa Ġstraight Ġsection . Ġ*/ Ċ val ĠRound Rect . is Ellipse Ġget (): ĠBoolean Ġ= ĊĠĠĠ Ġtop Left Radius . x Ġ== Ġtop Right Radius . x Ġ&& ĊĠĠĠ Ġtop Left Radius . y Ġ== Ġtop Right Radius . y Ġ&& ĊĠĠĠ Ġtop Right Radius . x Ġ== Ġbottom Right Radius . x Ġ&& ĊĠĠĠ Ġtop Right Radius . y Ġ== Ġbottom Right Radius . y Ġ&& ĊĠĠĠ Ġbottom Right Radius . x Ġ== Ġbottom Left Radius . x Ġ&& ĊĠĠĠ Ġbottom Right Radius . y Ġ== Ġbottom Left Radius . y Ġ&& ĊĠĠĠ Ġwidth Ġ<= Ġ 2 . 0 Ġ* Ġtop Left Radius . x Ġ&& ĊĠĠĠ Ġheight Ġ<= Ġ 2 . 0 Ġ* Ġtop Left Radius . y Ċ Ċ /** ĠWhether Ġthis Ġrounded Ġrectangle Ġwould Ġdraw Ġas Ġa Ġcircle . Ġ*/ Ċ val ĠRound Rect . is Circle Ġget () Ġ= Ġwidth Ġ== Ġheight Ġ&& Ġis Ellipse Ċ Ċ /** Ċ Ġ* ĠThe Ġless er Ġof Ġthe Ġmagnitude s Ġof Ġthe Ġ[ Round Rect . width ] Ġand Ġthe Ġ[ Round Rect . height ] Ġof Ġthis Ċ Ġ* Ġrounded Ġrectangle . Ċ Ġ*/ Ċ @ Deprecated (" Use Ġmin Dimension Ġinstead ", ĊĠĠĠ ĠReplace With (" min Dimension ", Ġ" android x . compose . ui . Round Rect ") Ċ ) Ċ val ĠRound Rect . short est Side Ġget (): ĠFloat Ġ= Ġmin Dimension Ċ Ċ /** Ċ Ġ* ĠThe Ġless er Ġof Ġthe Ġmagnitude s Ġof Ġthe Ġ[ Round Rect . width ] Ġand Ġthe Ġ[ Round Rect . height ] Ġof Ġthis Ċ Ġ* Ġrounded Ġrectangle . Ċ Ġ*/ Ċ val ĠRound Rect . min Dimension Ġget (): ĠFloat Ġ= Ġmin ( width . absolute Value , Ġheight . absolute Value ) Ċ Ċ /** Ċ Ġ* ĠThe Ġgreater Ġof Ġthe Ġmagnitude s Ġof Ġthe Ġ[ Round Rect . width ] Ġand Ġthe Ġ[ Round Rect . height ] Ġof Ġthis Ċ Ġ* Ġrounded Ġrectangle . Ċ Ġ*/ Ċ @ Deprecated (" Use Ġmax Dimension Ġinstead ", ĊĠĠĠ ĠReplace With (" max Dimension ", Ġ" android x . compose . ui . Round Rect ") Ċ ) Ċ val ĠRound Rect . longest Side Ġget (): ĠFloat Ġ= Ġmax Dimension Ċ Ċ val ĠRound Rect . max Dimension Ġget (): ĠFloat Ġ= Ġmax ( width . absolute Value , Ġheight . absolute Value ) Ċ Ċ /** Ċ Ġ* ĠThe Ġoffset Ġto Ġthe Ġpoint Ġhalf way Ġbetween Ġthe Ġleft Ġand Ġright Ġand Ġthe Ġtop Ġand Ċ Ġ* Ġbottom Ġedges Ġof Ġthis Ġrectangle . Ċ Ġ*/ Ċ @ Deprecated (" Use Ġcenter Ġinstead ", ĊĠĠĠ ĠReplace With (" center ", Ġ" android x . compose . ui . Round Rect ") Ċ ) Ċ fun ĠRound Rect . center (): ĠOffset Ġ= ĠOffset (( left Ġ+ Ġwidth Ġ/ Ġ 2 . 0 f ), Ġ( top Ġ+ Ġheight Ġ/ Ġ 2 . 0 f )) Ċ Ċ /** Ċ Ġ* ĠThe Ġoffset Ġto Ġthe Ġpoint Ġhalf way Ġbetween Ġthe Ġleft Ġand Ġright Ġand Ġthe Ġtop Ġand Ċ Ġ* Ġbottom Ġedges Ġof Ġthis Ġrectangle . Ċ Ġ*/ Ċ val ĠRound Rect . center : ĠOffset Ġget () Ġ= ĠOffset (( left Ġ+ Ġwidth Ġ/ Ġ 2 . 0 f ), Ġ( top Ġ+ Ġheight Ġ/ Ġ 2 . 0 f )) Ċ Ċ /** Ċ Ġ* ĠReturns Ġ` true ` Ġif Ġthe Ġrounded Ġrectangle Ġhave Ġthe Ġsame Ġrad ii Ġin Ġboth Ġthe Ġhorizontal Ġand Ġvertical Ċ Ġ* Ġdirection Ġfor Ġall Ġcorners . Ċ Ġ*/ Ċ val ĠRound Rect . is Simple : ĠBoolean ĊĠĠĠ Ġget () Ġ= Ġtop Left Radius . x Ġ== Ġtop Left Radius . y Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Radius . x Ġ== Ġtop Right Radius . x Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Radius . x Ġ== Ġtop Right Radius . y Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Radius . x Ġ== Ġbottom Right Radius . x Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Radius . x Ġ== Ġbottom Right Radius . y Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Radius . x Ġ== Ġbottom Left Radius . x Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Left Radius . x Ġ== Ġbottom Left Radius . y Ċ Ċ /** Ċ Ġ* ĠLinear ly Ġinterpolate Ġbetween Ġtwo Ġrounded Ġrect angles . Ċ Ġ* Ċ Ġ* Ġ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 Ġ( and Ġcan Ċ Ġ* Ġeasily Ġbe Ġgenerated Ġby Ġcurves ). Ċ Ġ* Ċ Ġ* ĠValues Ġfor Ġ[ fraction ] Ġare Ġusually Ġobtained Ġfrom Ġan Ġ[ Animation < Float > ], Ġsuch Ġas Ċ Ġ* Ġan Ġ` Animation Controller `. Ċ Ġ*/ Ċ fun Ġl erp ( start : ĠRound Rect , Ġstop : ĠRound Rect , Ġfraction : ĠFloat ): ĠRound Rect Ġ= ĊĠĠĠ ĠRound Rect ( ĊĠĠĠĠĠĠĠ Ġleft Ġ= Ġl erp ( start . left , Ġstop . left , Ġfraction ), ĊĠĠĠĠĠĠĠ Ġtop Ġ= Ġl erp ( start . top , Ġstop . top , Ġfraction ), ĊĠĠĠĠĠĠĠ Ġright Ġ= Ġl erp ( start . right , Ġstop . right , Ġfraction ), ĊĠĠĠĠĠĠĠ Ġbottom Ġ= Ġl erp ( start . bottom , Ġstop . bottom , Ġfraction ), ĊĠĠĠĠĠĠĠ Ġtop Left Radius Ġ= Ġl erp ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart . top Left Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop . top Left Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfraction ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġtop Right Radius Ġ= Ġl erp ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart . top Right Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop . top Right Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfraction ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġbottom Right Radius Ġ= Ġl erp ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart . bottom Right Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop . bottom Right Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfraction ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġbottom Left Radius Ġ= Ġl erp ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart . bottom Left Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop . bottom Left Radius , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfraction ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ