/* Ċ Ġ* Ġ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 . ui . graphics . vector Ċ Ċ import Ġandroidx . compose . Composable Ċ import Ġandroidx . ui . core . Px Ċ import Ġandroidx . ui . graphics . Blend Mode Ċ import Ġandroidx . ui . graphics . Brush Ċ import Ġandroidx . ui . graphics . Color Ċ import Ġandroidx . ui . graphics . Stroke Cap Ċ import Ġandroidx . ui . graphics . Stroke Join Ċ import Ġjava . util . Stack Ċ Ċ /** Ċ Ġ* ĠBuilder Ġused Ġto Ġconstruct Ġa ĠVector Ġgraphic Ġtree . Ċ Ġ* ĠThis Ġis Ġuseful Ġfor Ġcaching Ġthe Ġresult Ġof Ġexpensive Ġoperations Ġused Ġto Ġconstruct Ċ Ġ* Ġa Ġvector Ġgraphic Ġfor Ġcompose . Ċ Ġ* ĠFor Ġexample , Ġthe Ġvector Ġgraphic Ġcould Ġbe Ġserialized Ġand Ġdownloaded Ġfrom Ġa Ġserver Ġand Ġrepresented Ċ Ġ* Ġinternally Ġin Ġa ĠVector Asset Ġbefore Ġit Ġis Ġcomposed Ġthrough Ġ[ Draw Vector ] Ċ Ġ* ĠThe Ġgenerated ĠVector Asset Ġis Ġrecommended Ġto Ġbe Ġmemoized Ġacross Ġcomposition Ġcalls Ġto Ġavoid Ċ Ġ* Ġdoing Ġredundant Ġwork Ċ Ġ**/ Ċ class ĠVector Asset Builder ( ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠName Ġof Ġthe Ġvector Ġasset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġname : ĠString Ġ= ĠDefault GroupName , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIntr insic Ġwidth Ġof Ġthe ĠVector Ġin Ġpixels ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdefault Width : ĠPx , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIntr insic Ġheight Ġof Ġthe ĠVector Ġin Ġpixels ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdefault Height : ĠPx , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠUsed Ġto Ġdefine Ġthe Ġwidth Ġof Ġthe Ġviewport Ġspace . ĠView port Ġis Ġbasically Ġthe Ġvirtual Ġcanvas ĊĠĠĠĠ Ġ* Ġ Ġwhere Ġthe Ġpaths Ġare Ġdrawn Ġon . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġviewport Width : ĠFloat , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġto Ġdefine Ġthe Ġheight Ġof Ġthe Ġviewport Ġspace . ĠView port Ġis Ġbasically Ġthe Ġvirtual Ġcanvas ĊĠĠĠĠ Ġ* Ġwhere Ġthe Ġpaths Ġare Ġdrawn Ġon . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġviewport Height : ĠFloat Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġnodes Ġ= ĠStack < Vector Group >() ĊĊĠĠĠ Ġprivate Ġvar Ġroot Ġ= ĠVector Group () ĊĠĠĠ Ġprivate Ġvar Ġis Cons umed Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Group : ĠVector Group Ġ= Ġroot ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnodes . peek () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġnodes . add ( root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġa Ġnew Ġgroup Ġand Ġpush Ġit Ġto Ġthe Ġfront Ġof Ġthe Ġstack Ġof ĠVector Asset Ġnodes ĊĠĠĠĠ Ġ* Ġ@ return ĠThis ĠVector Asset Builder Ġinstance Ġas Ġa Ġconvenience Ġfor Ġchaining Ġcalls ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpush Group ( ĊĠĠĠĠĠĠĠ Ġname : ĠString Ġ= ĠDefault GroupName , ĊĠĠĠĠĠĠĠ Ġrotate : ĠFloat Ġ= ĠDefault Rotation , ĊĠĠĠĠĠĠĠ Ġpivot X : ĠFloat Ġ= ĠDefault Pivot X , ĊĠĠĠĠĠĠĠ Ġpivot Y : ĠFloat Ġ= ĠDefault Pivot Y , ĊĠĠĠĠĠĠĠ Ġscale X : ĠFloat Ġ= ĠDefault Scale X , ĊĠĠĠĠĠĠĠ Ġscale Y : ĠFloat Ġ= ĠDefault Scale Y , ĊĠĠĠĠĠĠĠ Ġtranslation X : ĠFloat Ġ= ĠDefault Translation X , ĊĠĠĠĠĠĠĠ Ġtranslation Y : ĠFloat Ġ= ĠDefault Translation Y , ĊĠĠĠĠĠĠĠ Ġclip Path Data : ĠArray < Path Node > Ġ= ĠEmpty Path ĊĠĠĠ Ġ): ĠVector Asset Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Not Cons umed () ĊĠĠĠĠĠĠĠ Ġval Ġgroup Ġ= ĠVector Group ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpivot X , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale X , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation X , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclip Path Data ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġnodes . add ( group ) ĊĠĠĠĠĠĠĠ Ġcurrent Group . add Node ( group ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠP ops Ġthe Ġtop most ĠVector Group Ġfrom Ġthis ĠVector Asset Builder . ĠThis Ġis Ġused Ġto Ġindicate ĊĠĠĠĠ Ġ* Ġthat Ġno Ġadditional ĠVector Asset Ġnodes Ġwill Ġbe Ġadded Ġto Ġthe Ġcurrent ĠVector Group ĊĠĠĠĠ Ġ* Ġ@ return ĠThis ĠVector Asset Builder Ġinstance Ġas Ġa Ġconvenience Ġfor Ġchaining Ġcalls ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpop Group (): ĠVector Asset Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Not Cons umed () ĊĠĠĠĠĠĠĠ Ġnodes . pop () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġa Ġpath Ġto Ġthe ĠVector Asset Ġgraphic . ĠThis Ġrepresents Ġa Ġleaf Ġnode Ġin Ġthe ĠVector Asset Ġgraphics ĊĠĠĠĠ Ġ* Ġtree Ġstructure ĊĠĠĠĠ Ġ* Ġ@ return ĠThis ĠVector Asset Builder Ġinstance Ġas Ġa Ġconvenience Ġfor Ġchaining Ġcalls ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Path ( ĊĠĠĠĠĠĠĠ Ġpath Data : ĠArray < Path Node >, ĊĠĠĠĠĠĠĠ Ġname : ĠString Ġ= ĠDefault Path Name , ĊĠĠĠĠĠĠĠ Ġfill : ĠBr ush ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfill Alpha : ĠFloat Ġ= ĠDefault Alpha , ĊĠĠĠĠĠĠĠ Ġstroke : ĠBr ush ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġstroke Alpha : ĠFloat Ġ= ĠDefault Alpha , ĊĠĠĠĠĠĠĠ Ġstroke LineWidth : ĠFloat Ġ= ĠDefault Stroke LineWidth , ĊĠĠĠĠĠĠĠ Ġstroke Line Cap : ĠSt roke Cap Ġ= ĠDefault Stroke Line Cap , ĊĠĠĠĠĠĠĠ Ġstroke Line Join : ĠSt roke Join Ġ= ĠDefault Stroke Line Join , ĊĠĠĠĠĠĠĠ Ġstroke Line M iter : ĠFloat Ġ= ĠDefault Stroke Line M iter ĊĠĠĠ Ġ): ĠVector Asset Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Not Cons umed () ĊĠĠĠĠĠĠĠ Ġcurrent Group . add Node ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVector Path ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Alpha , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Alpha , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke LineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Line Cap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Line Join , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Line M iter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstruct Ġa ĠVector Asset . ĠThis Ġcon clude s Ġthe Ġcreation Ġprocess Ġof Ġa ĠVector Asset Ġgraphic ĊĠĠĠĠ Ġ* ĠThis Ġbuilder Ġcannot Ġbe Ġre - used Ġto Ġcreate Ġadditional ĠVector Asset Ġinstances ĊĠĠĠĠ Ġ* Ġ@ return ĠThe w Ġnewly Ġcreated ĠVector Asset Ġinstance ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbuild (): ĠVector Asset Ġ{ ĊĠĠĠĠĠĠĠ Ġensure Not Cons umed () ĊĠĠĠĠĠĠĠ Ġval Ġvector Image Ġ= ĠVector Asset ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviewport Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviewport Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġreset Ġstate Ġin Ġcase Ġthis Ġbuilder Ġis Ġused Ġagain ĊĠĠĠĠĠĠĠ Ġnodes . clear () ĊĠĠĠĠĠĠĠ Ġroot Ġ= ĠVector Group () ĊĠĠĠĠĠĠĠ Ġnodes . add ( root ) ĊĊĠĠĠĠĠĠĠ Ġis Cons umed Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvector Image ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThrows ĠIllegalStateException Ġif Ġthe ĠVector Asset Builder Ġis Ġalready Ġbeen Ġconsumed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġensure Not Cons umed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Cons umed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Vector Asset Builder Ġis Ġsingle Ġuse , Ġcreate Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" a Ġnew Ġinstance Ġto Ġcreate Ġa Ġnew ĠVector Asset ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠVector Node Ċ Ċ /** Ċ Ġ* ĠVector Ġgraphics Ġobject Ġthat Ġis Ġgenerated Ġas Ġa Ġresult Ġof Ġ[ Vector Asset Builder ]] Ċ Ġ* ĠIt Ġcan Ġbe Ġcomposed Ġand Ġrendered Ġby Ġpassing Ġit Ġas Ġan Ġargument Ġto Ġ[ Draw Vector ] Ċ Ġ*/ Ċ class ĠVector Asset Ġinternal Ġconstructor ( ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠName Ġof Ġthe ĠVector Ġasset ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġname : ĠString , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIntr insic Ġwidth Ġof Ġthe Ġvector Ġasset Ġin Ġpixels ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdefault Width : ĠPx , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIntr insic Ġheight Ġof Ġthe Ġvector Ġasset Ġin Ġpixels ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdefault Height : ĠPx , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠUsed Ġto Ġdefine Ġthe Ġwidth Ġof Ġthe Ġviewport Ġspace . ĠView port Ġis Ġbasically Ġthe Ġvirtual Ġcanvas ĊĠĠĠĠ Ġ* Ġ Ġwhere Ġthe Ġpaths Ġare Ġdrawn Ġon . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġviewport Width : ĠFloat , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUsed Ġto Ġdefine Ġthe Ġheight Ġof Ġthe Ġviewport Ġspace . ĠView port Ġis Ġbasically Ġthe Ġvirtual Ġcanvas ĊĠĠĠĠ Ġ* Ġwhere Ġthe Ġpaths Ġare Ġdrawn Ġon . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġviewport Height : ĠFloat , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRoot Ġgroup Ġof Ġthe Ġvector Ġasset Ġthat Ġcontains Ġall Ġthe Ġchild Ġgroups Ġand Ġpaths ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġroot : ĠVector Group Ċ ) Ċ Ċ /** Ċ Ġ* ĠDefines Ġa Ġgroup Ġof Ġpaths Ġor Ġsub groups , Ġplus Ġtransformation Ġinformation . Ċ Ġ* ĠThe Ġtransformations Ġare Ġdefined Ġin Ġthe Ġsame Ġcoordinates Ġas Ġthe Ġviewport . Ċ Ġ* ĠThe Ġtransformations Ġare Ġapplied Ġin Ġthe Ġorder Ġof Ġscale , Ġrotate Ġthen Ġtranslate . Ċ Ġ*/ Ċ class ĠVector Group ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠName Ġof Ġthe Ġcorresponding Ġgroup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġname : ĠString Ġ= ĠDefault GroupName , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRotation Ġof Ġthe Ġgroup Ġin Ġdegrees ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġrotation : ĠFloat Ġ= ĠDefault Rotation , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠX Ġcoordinate Ġof Ġthe Ġpivot Ġpoint Ġto Ġrotate Ġor Ġscale Ġthe Ġgroup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpivot X : ĠFloat Ġ= ĠDefault Pivot X , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠY Ġcoordinate Ġof Ġthe Ġpivot Ġpoint Ġto Ġrotate Ġor Ġscale Ġthe Ġgroup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpivot Y : ĠFloat Ġ= ĠDefault Pivot Y , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScale Ġfactor Ġin Ġthe ĠX - axis Ġto Ġapply Ġto Ġthe Ġgroup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġscale X : ĠFloat Ġ= ĠDefault Scale X , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScale Ġfactor Ġin Ġthe ĠY - axis Ġto Ġapply Ġto Ġthe Ġgroup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġscale Y : ĠFloat Ġ= ĠDefault Scale Y , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTranslation Ġin Ġvirtual Ġpixels Ġto Ġapply Ġalong Ġthe Ġx - axis ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtranslation X : ĠFloat Ġ= ĠDefault Translation X , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTranslation Ġin Ġvirtual Ġpixels Ġto Ġapply Ġalong Ġthe Ġy - axis ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtranslation Y : ĠFloat Ġ= ĠDefault Translation Y , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPath Ġinformation Ġused Ġto Ġclip Ġthe Ġcontent Ġwithin Ġthe Ġgroup ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġclip Path Data : ĠArray < Path Node > Ġ= ĠEmpty Path Ċ Ċ ) Ġ: ĠVector Node (), ĠIterable < Vector Node > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġchildren Ġ= ĠArrayList < Vector Node >() ĊĊĠĠĠ Ġinternal Ġfun Ġadd Node ( node : ĠVector Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren . add ( node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġchildren . size ĊĊĠĠĠ Ġoperator Ġfun Ġget ( index : ĠInt ): ĠVector Node Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchildren [ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġiterator (): ĠIterator < Vector Node > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠIterator < Vector Node > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġit Ġ= Ġchildren . iterator () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ= Ġit . hasNext () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnext (): ĠVector Node Ġ= Ġit . next () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠLeaf Ġnode Ġof Ġa ĠVector Ġgraphics Ġtree . ĠThis Ġspecifies Ġa Ġpath Ġshape Ġand Ġparameters Ċ Ġ* Ġto Ġcolor Ġand Ġstyle Ġthe Ġthe Ġshape Ġitself Ċ Ġ*/ Ċ class ĠVector Path ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠName Ġof Ġthe Ġcorresponding Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġname : ĠString Ġ= ĠDefault Path Name , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPath Ġinformation Ġto Ġrender Ġthe Ġshape Ġof Ġthe Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġpath Data : ĠArray < Path Node >, ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠSpecifies Ġthe Ġcolor Ġor Ġgradient Ġused Ġto Ġfill Ġthe Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġfill : ĠBr ush ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOp acity Ġto Ġfill Ġthe Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġfill Alpha : ĠFloat Ġ= ĠDefault Alpha , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpecifies Ġthe Ġcolor Ġor Ġgradient Ġused Ġto Ġfill Ġthe Ġstroke ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġstroke : ĠBr ush ? Ġ= Ġnull , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOp acity Ġto Ġstroke Ġthe Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġstroke Alpha : ĠFloat Ġ= ĠDefault Alpha , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWidth Ġof Ġthe Ġline Ġto Ġstroke Ġthe Ġpath ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġstroke LineWidth : ĠFloat Ġ= ĠDefault Stroke LineWidth , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpecifies Ġthe Ġline cap Ġfor Ġa Ġst rok ed Ġpath , Ġeither Ġbut t , Ġround , Ġor Ġsquare . ĠThe Ġdefault Ġis Ġbut t . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġstroke Line Cap : ĠSt roke Cap Ġ= ĠDefault Stroke Line Cap , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpecifies Ġthe Ġline join Ġfor Ġa Ġst rok ed Ġpath , Ġeither Ġm iter , Ġround Ġor Ġbe vel . ĠThe Ġdefault Ġis Ġm iter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġstroke Line Join : ĠSt roke Join Ġ= ĠDefault Stroke Line Join , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpecifies Ġthe Ġm iter Ġlimit Ġfor Ġa Ġst rok ed Ġpath , Ġthe Ġdefault Ġis Ġ 4 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġstroke Line M iter : ĠFloat Ġ= ĠDefault Stroke Line M iter Ċ ) Ġ: ĠVector Node () Ċ Ċ /** Ċ Ġ* ĠComp o ses Ġa Ġvector Ġgraphic Ġinto Ġthe Ġcomposition Ġtree Ġbased Ġon Ġthe Ġspecification Ċ Ġ* Ġprovided Ġby Ġgiven Ġ[ Vector Asset ] Ċ Ġ* Ġ@ param [ tint Color ] ĠOptional Ġcolor Ġused Ġto Ġt int Ġthis Ġvector Ġgraphic Ċ Ġ* Ġ@ param [ tint Blend Mode ] ĠOptional Ġblend Ġmode Ġused Ġwith Ġ[ tint Color ], Ġdefault Ġis Ġ[ Blend Mode . src In ] Ċ Ġ*/ Ċ @ Composable Ċ fun ĠDraw Vector ( ĊĠĠĠ Ġvector Image : ĠVector Asset , ĊĠĠĠ Ġt int Color : ĠColor Ġ= ĠColor . Transparent , ĊĠĠĠ Ġt int Blend Mode : ĠBlend Mode Ġ= ĠDefault Tint Blend Mode Ċ ) Ġ{ ĊĠĠĠ ĠDraw Vector ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġvector Image . name , ĊĠĠĠĠĠĠĠ Ġviewport Width Ġ= Ġvector Image . viewport Width , ĊĠĠĠĠĠĠĠ Ġviewport Height Ġ= Ġvector Image . viewport Height , ĊĠĠĠĠĠĠĠ Ġdefault Width Ġ= Ġvector Image . default Width , ĊĠĠĠĠĠĠĠ Ġdefault Height Ġ= Ġvector Image . default Height , ĊĠĠĠĠĠĠĠ Ġt int Color Ġ= Ġt int Color , ĊĠĠĠĠĠĠĠ Ġt int Blend Mode Ġ= Ġt int Blend Mode ĊĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠRender Vector Group ( group Ġ= Ġvector Image . root ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠRecursive Ġmethod Ġfor Ġcreating Ġthe Ġvector Ġgraphic Ġcomposition Ġby Ġtra ver sing Ċ Ġ* Ġthe Ġtree Ġstructure Ċ Ġ*/ Ċ @ Composable Ċ private Ġfun ĠVector Scope . Render Vector Group ( group : ĠVector Group ) Ġ{ ĊĠĠĠ Ġfor Ġ( vector Node Ġin Ġgroup ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( vector Node Ġis ĠVector Path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPath ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Data Ġ= Ġvector Node . path Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġvector Node . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Ġ= Ġvector Node . fill , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfill Alpha Ġ= Ġvector Node . fill Alpha , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Ġ= Ġvector Node . stroke , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Alpha Ġ= Ġvector Node . stroke Alpha , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke LineWidth Ġ= Ġvector Node . stroke LineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Line Cap Ġ= Ġvector Node . stroke Line Cap , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Line Join Ġ= Ġvector Node . stroke Line Join , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke Line M iter Ġ= Ġvector Node . stroke Line M iter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( vector Node Ġis ĠVector Group ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGroup ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġvector Node . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Ġ= Ġvector Node . rotation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale X Ġ= Ġvector Node . scale X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscale Y Ġ= Ġvector Node . scale Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation X Ġ= Ġvector Node . translation X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslation Y Ġ= Ġvector Node . translation Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot X Ġ= Ġvector Node . pivot X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpivot Y Ġ= Ġvector Node . pivot Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Path Data Ġ= Ġvector Node . clip Path Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRender Vector Group ( group Ġ= Ġvector Node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }