package Ġtop . defaults . drawable toolbox Ċ Ċ import Ġandroid . content . res . Color State List Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . graphics . drawable . Gradient Drawable Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . State Set Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ class ĠDrawable Builder Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġproperties Ġ= ĠDrawable Properties () ĊĠĠĠ Ġprivate Ġvar Ġorder : ĠAtomicInteger Ġ= ĠAtomicInteger ( 1 ) ĊĠĠĠ Ġprivate Ġvar Ġtransforms Map Ġ= ĠTreeMap < Int , Ġ( Drawable ) Ġ-> ĠDrawable >() ĊĊĠĠĠ Ġfun Ġbatch ( properties : ĠDrawable Properties ) Ġ= Ġapply Ġ{ Ġthis . properties Ġ= Ġproperties . copy () Ġ} ĊĊĠĠĠ Ġ// Ġ< shape > ĊĠĠĠ Ġfun Ġshape ( shape : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . shape Ġ= Ġshape Ġ} ĊĠĠĠ Ġfun Ġrectangle () Ġ= Ġapply Ġ{ Ġshape ( Gradient Drawable . RECT ANGLE ) Ġ} ĊĠĠĠ Ġfun Ġo val () Ġ= Ġapply Ġ{ Ġshape ( Gradient Drawable . O VAL ) Ġ} ĊĠĠĠ Ġfun Ġline () Ġ= Ġapply Ġ{ Ġshape ( Gradient Drawable . LINE ) Ġ} ĊĠĠĠ Ġfun Ġring () Ġ= Ġapply Ġ{ Ġshape ( Gradient Drawable . RING ) Ġ} ĊĠĠĠ Ġfun Ġinner Radius ( inner Radius : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . inner Radius Ġ= Ġinner Radius Ġ} ĊĠĠĠ Ġfun Ġinner Radius Ratio ( inner Radius Ratio : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . inner Radius Ratio Ġ= Ġinner Radius Ratio Ġ} ĊĠĠĠ Ġfun Ġthickness ( thickness : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . thickness Ġ= Ġthickness Ġ} ĊĠĠĠ Ġfun Ġthickness Ratio ( thickness Ratio : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . thickness Ratio Ġ= Ġthickness Ratio Ġ} ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġuse Level For Ring ( use : ĠBoolean Ġ= Ġtrue ) Ġ= Ġapply Ġ{ Ġproperties . use Level For Ring Ġ= Ġuse Ġ} ĊĊĠĠĠ Ġ// Ġ< corner > ĊĠĠĠ Ġfun Ġcorner Radius ( corner Radius : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . corner Radius Ġ= Ġcorner Radius Ġ} ĊĠĠĠ Ġfun Ġtop Left Radius ( top Left Radius : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . top Left Radius Ġ= Ġtop Left Radius Ġ} ĊĠĠĠ Ġfun Ġtop Right Radius ( top Right Radius : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . top Right Radius Ġ= Ġtop Right Radius Ġ} ĊĠĠĠ Ġfun Ġbottom Right Radius ( bottom Right Radius : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . bottom Right Radius Ġ= Ġbottom Right Radius Ġ} ĊĠĠĠ Ġfun Ġbottom Left Radius ( bottom Left Radius : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . bottom Left Radius Ġ= Ġbottom Left Radius Ġ} ĊĠĠĠ Ġfun Ġrounded () Ġ= Ġapply Ġ{ Ġcorner Radius ( Int . MAX _ VALUE ) Ġ} ĊĠĠĠ Ġfun Ġcorner Rad ii ( top Left Radius : ĠInt , Ġtop Right Radius : ĠInt , Ġbottom Right Radius : ĠInt , Ġbottom Left Radius : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġtop Left Radius ( top Left Radius ); Ġtop Right Radius ( top Right Radius ); Ġbottom Right Radius ( bottom Right Radius ); Ġbottom Left Radius ( bottom Left Radius ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ< gradient > ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġgradient ( use Gradient : ĠBoolean Ġ= Ġtrue ) Ġ= Ġapply Ġ{ Ġproperties . use Gradient Ġ= Ġuse Gradient Ġ} ĊĠĠĠ Ġfun Ġgradient Type ( type : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . type Ġ= Ġtype Ġ} ĊĠĠĠ Ġfun Ġlinear Gradient () Ġ= Ġapply Ġ{ Ġgradient Type ( Gradient Drawable . LINEAR _ GRAD IENT ) Ġ} ĊĠĠĠ Ġfun Ġradial Gradient () Ġ= Ġapply Ġ{ Ġgradient Type ( Gradient Drawable . RAD IAL _ GRAD IENT ) Ġ} ĊĠĠĠ Ġfun Ġsweep Gradient () Ġ= Ġapply Ġ{ Ġgradient Type ( Gradient Drawable . SW EE P _ GRAD IENT ) Ġ} ĊĠĠĠ Ġfun Ġangle ( angle : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . angle Ġ= Ġangle Ġ} ĊĠĠĠ Ġfun Ġcenter X ( center X : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . center X Ġ= Ġcenter X Ġ} ĊĠĠĠ Ġfun Ġcenter Y ( center Y : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . center Y Ġ= Ġcenter Y Ġ} ĊĠĠĠ Ġfun Ġcenter ( center X : ĠFloat , Ġcenter Y : ĠFloat ) Ġ= Ġapply Ġ{ Ġcenter X ( center X ); Ġcenter Y ( center Y ) Ġ} ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġuse Center Color ( use Center Color : ĠBoolean Ġ= Ġtrue ) Ġ= Ġapply Ġ{ Ġproperties . use Center Color Ġ= Ġuse Center Color Ġ} ĊĠĠĠ Ġfun Ġstart Color ( start Color : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . start Color Ġ= Ġstart Color Ġ} ĊĠĠĠ Ġfun Ġcenter Color ( center Color : ĠInt ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġproperties . center Color Ġ= Ġcenter Color ĊĠĠĠĠĠĠĠ Ġuse Center Color ( true ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġend Color ( end Color : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . end Color Ġ= Ġend Color Ġ} ĊĠĠĠ Ġfun Ġgradient Colors ( start Color : ĠInt , Ġend Color : ĠInt , Ġcenter Color : ĠInt ?) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġstart Color ( start Color ); Ġend Color ( end Color ) ĊĠĠĠĠĠĠĠ Ġuse Center Color ( center Color Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġcenter Color ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Color ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġgradient Radius Type ( gradient Radius Type : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . gradient Radius Type Ġ= Ġgradient Radius Type Ġ} ĊĠĠĠ Ġfun Ġgradient Radius ( gradient Radius : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . gradient Radius Ġ= Ġgradient Radius Ġ} ĊĠĠĠ Ġfun Ġgradient Radius ( radius : ĠFloat , Ġtype : ĠInt ) Ġ= Ġapply Ġ{ Ġgradient Radius ( radius ); Ġgradient Radius Type ( type ) Ġ} ĊĠĠĠ Ġfun Ġgradient Radius In Pixel ( radius : ĠFloat ) Ġ= Ġapply Ġ{ Ġgradient Radius ( radius ); Ġgradient Radius Type ( Drawable Properties . RADIUS _ TYPE _ PIXEL S ) Ġ} ĊĠĠĠ Ġfun Ġgradient Radius In Fraction ( radius : ĠFloat ) Ġ= Ġapply Ġ{ Ġgradient Radius ( radius ); Ġgradient Radius Type ( Drawable Properties . RADIUS _ TYPE _ FR ACTION ) Ġ} ĊĠĠĠ Ġfun Ġuse Level For Gradient ( use : ĠBoolean ) Ġ= Ġapply Ġ{ Ġproperties . use Level For Gradient Ġ= Ġuse Ġ} ĊĠĠĠ Ġfun Ġuse Level For Gradient () Ġ= Ġapply Ġ{ Ġuse Level For Gradient ( true ) Ġ} ĊĊĠĠĠ Ġ// Ġ< size > ĊĠĠĠ Ġfun Ġwidth ( width : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . width Ġ= Ġwidth Ġ} ĊĠĠĠ Ġfun Ġheight ( height : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . height Ġ= Ġheight Ġ} ĊĠĠĠ Ġfun Ġsize ( width : ĠInt , Ġheight : ĠInt ) Ġ= Ġapply Ġ{ Ġwidth ( width ); Ġheight ( height ) Ġ} ĊĠĠĠ Ġfun Ġsize ( size : ĠInt ) Ġ= Ġapply Ġ{ Ġwidth ( size ). height ( size ) Ġ} ĊĊĠĠĠ Ġ// Ġ< solid > ĊĠĠĠ Ġfun Ġsolid Color ( solid Color : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . solid Color Ġ= Ġsolid Color Ġ} ĊĠĠĠ Ġprivate Ġvar Ġsolid Color Pressed : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġsolid Color Pressed ( color : ĠInt ?) Ġ= Ġapply Ġ{ Ġsolid Color Pressed Ġ= Ġcolor Ġ} ĊĠĠĠ Ġprivate Ġvar Ġsolid Color Disabled : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġsolid Color Disabled ( color : ĠInt ?) Ġ= Ġapply Ġ{ Ġsolid Color Disabled Ġ= Ġcolor Ġ} ĊĠĠĠ Ġprivate Ġvar Ġsolid Color Selected : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġsolid Color Selected ( color : ĠInt ?) Ġ= Ġapply Ġ{ Ġsolid Color Selected Ġ= Ġcolor Ġ} ĊĠĠĠ Ġfun Ġsolid Color State List ( color State List : ĠColor State List ) Ġ= Ġapply Ġ{ Ġproperties . solid Color State List Ġ= Ġcolor State List Ġ} ĊĊĠĠĠ Ġ// Ġ< stroke > ĊĠĠĠ Ġfun ĠstrokeWidth ( stroke Width : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . stroke Width Ġ= ĠstrokeWidth Ġ} ĊĊĠĠĠ Ġfun Ġstroke Color ( stroke Color : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . stroke Color Ġ= Ġstroke Color Ġ} ĊĠĠĠ Ġprivate Ġvar Ġstroke Color Pressed : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġstroke Color Pressed ( color : ĠInt ?) Ġ= Ġapply Ġ{ Ġstroke Color Pressed Ġ= Ġcolor Ġ} ĊĠĠĠ Ġprivate Ġvar Ġstroke Color Disabled : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġstroke Color Disabled ( color : ĠInt ?) Ġ= Ġapply Ġ{ Ġstroke Color Disabled Ġ= Ġcolor Ġ} ĊĠĠĠ Ġprivate Ġvar Ġstroke Color Selected : ĠInt ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġstroke Color Selected ( color : ĠInt ?) Ġ= Ġapply Ġ{ Ġstroke Color Selected Ġ= Ġcolor Ġ} ĊĠĠĠ Ġfun Ġstroke Color State List ( color State List : ĠColor State List ) Ġ= Ġapply Ġ{ Ġproperties . stroke Color State List Ġ= Ġcolor State List Ġ} ĊĊĠĠĠ Ġfun Ġdash Width ( dash Width : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . dash Width Ġ= Ġdash Width Ġ} ĊĠĠĠ Ġfun Ġdash Gap ( dash Gap : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . dash Gap Ġ= Ġdash Gap Ġ} ĊĠĠĠ Ġfun Ġhair line Border ed () Ġ= Ġapply Ġ{ ĠstrokeWidth ( 1 ) Ġ} ĊĠĠĠ Ġfun Ġshort D ashed () Ġ= Ġapply Ġ{ Ġdash Width ( 1 2 ). dash Gap ( 1 2 ) Ġ} ĊĠĠĠ Ġfun Ġmedium D ashed () Ġ= Ġapply Ġ{ Ġdash Width ( 2 4 ). dash Gap ( 2 4 ) Ġ} ĊĠĠĠ Ġfun Ġlong D ashed () Ġ= Ġapply Ġ{ Ġdash Width ( 3 6 ). dash Gap ( 3 6 ) Ġ} ĊĠĠĠ Ġfun Ġdas hed () Ġ= Ġapply Ġ{ Ġmedium D ashed () Ġ} ĊĊĠĠĠ Ġ// Ġ< rotate > ĊĠĠĠ Ġprivate Ġvar Ġrotate Order Ġ= Ġ 0 ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġrotate ( boolean : ĠBoolean Ġ= Ġtrue ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġproperties . use Rotate Ġ= Ġboolean ĊĠĠĠĠĠĠĠ Ġrotate Order Ġ= Ġif Ġ( boolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder . get And Increment () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġpivot X ( pivot X : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . pivot X Ġ= Ġpivot X Ġ} ĊĠĠĠ Ġfun Ġpivot Y ( pivot Y : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . pivot Y Ġ= Ġpivot Y Ġ} ĊĠĠĠ Ġfun Ġpivot ( pivot X : ĠFloat , Ġpivot Y : ĠFloat ) Ġ= Ġapply Ġ{ Ġpivot X ( pivot X ). pivot Y ( pivot Y ) Ġ} ĊĠĠĠ Ġfun Ġfrom Degrees ( degrees : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . from Degrees Ġ= Ġdegrees Ġ} ĊĠĠĠ Ġfun Ġto Degrees ( degrees : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . to Degrees Ġ= Ġdegrees Ġ} ĊĠĠĠ Ġfun Ġdegrees ( from Degrees : ĠFloat , Ġto Degrees : ĠFloat ) Ġ= Ġapply Ġ{ Ġfrom Degrees ( from Degrees ). to Degrees ( to Degrees ) Ġ} ĊĠĠĠ Ġfun Ġdegrees ( degrees : ĠFloat ) Ġ= Ġapply Ġ{ Ġfrom Degrees ( degrees ). to Degrees ( degrees ) Ġ} ĊĠĠĠ Ġfun Ġrotate ( from Degrees : ĠFloat , Ġto Degrees : ĠFloat ) Ġ= Ġapply Ġ{ Ġrotate (). from Degrees ( from Degrees ). to Degrees ( to Degrees ) Ġ} ĊĠĠĠ Ġfun Ġrotate ( degrees : ĠFloat ) Ġ= Ġapply Ġ{ Ġrotate (). degrees ( degrees ) Ġ Ġ} ĊĊĠĠĠ Ġ// Ġ< scale > ĊĠĠĠ Ġprivate Ġvar Ġscale Order Ġ= Ġ 0 ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġscale ( boolean : ĠBoolean Ġ= Ġtrue ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġproperties . use Scale Ġ= Ġboolean ĊĠĠĠĠĠĠĠ Ġscale Order Ġ= Ġif Ġ( boolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder . get And Increment () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġscale Level ( level : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . scale Level Ġ= Ġlevel Ġ} ĊĠĠĠ Ġfun Ġscale Gravity ( gravity : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . scale Gravity Ġ= Ġgravity Ġ} ĊĠĠĠ Ġfun Ġscale Width ( scale : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . scale Width Ġ= Ġscale Ġ} ĊĠĠĠ Ġfun Ġscale Height ( scale : ĠFloat ) Ġ= Ġapply Ġ{ Ġproperties . scale Height Ġ= Ġscale Ġ} ĊĠĠĠ Ġfun Ġscale ( scale : ĠFloat ) Ġ= Ġapply Ġ{ Ġscale (). scale Width ( scale ). scale Height ( scale ) Ġ} ĊĠĠĠ Ġfun Ġscale ( scale Width : ĠFloat , Ġscale Height : ĠFloat ) Ġ= Ġapply Ġ{ Ġscale (). scale Width ( scale Width ). scale Height ( scale Height ) Ġ} ĊĊĠĠĠ Ġ// Ġflip ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġflip ( boolean : ĠBoolean Ġ= Ġtrue ) Ġ= Ġapply Ġ{ Ġproperties . use Flip Ġ= Ġboolean Ġ} ĊĠĠĠ Ġfun Ġorientation ( orientation : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . orientation Ġ= Ġorientation Ġ} ĊĠĠĠ Ġfun Ġflip Vertical () Ġ= Ġapply Ġ{ Ġflip (). orientation ( Flip Drawable . OR IENTATION _ VERTICAL ) Ġ} ĊĊĠĠĠ Ġ// Ġ< ripple > ĊĠĠĠ Ġ@ Jvm Over loads Ġfun Ġri pple ( boolean : ĠBoolean Ġ= Ġtrue ) Ġ= Ġapply Ġ{ Ġproperties . use R ipple Ġ= Ġboolean Ġ} ĊĠĠĠ Ġfun Ġri pple Color ( color : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . ripple Color Ġ= Ġcolor Ġ} ĊĠĠĠ Ġfun Ġri pple Color State List ( color State List : ĠColor State List ) Ġ= Ġapply Ġ{ Ġproperties . ripple Color State List Ġ= Ġcolor State List Ġ} ĊĠĠĠ Ġfun Ġri pple Radius ( radius : ĠInt ) Ġ= Ġapply Ġ{ Ġproperties . ripple Radius Ġ= Ġradius Ġ} ĊĊĠĠĠ Ġfun Ġbuild (): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdrawable : ĠDrawable ĊĠĠĠĠĠĠĠ Ġif Ġ( need State List Drawable ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Ġ= ĠState List Drawable Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pressed ( build Pressed Drawable ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disabled ( build Disabled Drawable ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. selected ( build Selected Drawable ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. normal ( build Normal Drawable ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Gradient Drawable ( drawable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdrawable Ġ= Ġwrap ( drawable ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdrawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Solid Color State List (): ĠColor State List Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( properties . solid Color State List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproperties . solid Color State List !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstates Ġ= Ġmutable ListOf < IntArray >() ĊĠĠĠĠĠĠĠ Ġval Ġcolors Ġ= Ġmutable ListOf < Int >() ĊĊĠĠĠĠĠĠĠ Ġsolid Color Pressed ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . add ( int ArrayOf ( android . R . attr . state _ pressed )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsolid Color Disabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . add ( int ArrayOf (- android . R . attr . state _ enabled )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsolid Color Selected ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . add ( int ArrayOf ( android . R . attr . state _ selected )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstates . add ( State Set . W ILD _ CARD ) ĊĠĠĠĠĠĠĠ Ġcolors . add ( properties . solid Color ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠColor State List ( states . to Typed Array (), Ġcolors . to IntArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Stroke Color State List (): ĠColor State List Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( properties . stroke Color State List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproperties . stroke Color State List !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstates Ġ= Ġmutable ListOf < IntArray >() ĊĠĠĠĠĠĠĠ Ġval Ġcolors Ġ= Ġmutable ListOf < Int >() ĊĊĠĠĠĠĠĠĠ Ġstroke Color Pressed ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . add ( int ArrayOf ( android . R . attr . state _ pressed )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstroke Color Disabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . add ( int ArrayOf (- android . R . attr . state _ enabled )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstroke Color Selected ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates . add ( int ArrayOf ( android . R . attr . state _ selected )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolors . add ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstates . add ( State Set . W ILD _ CARD ) ĊĠĠĠĠĠĠĠ Ġcolors . add ( properties . stroke Color ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠColor State List ( states . to Typed Array (), Ġcolors . to IntArray ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Pressed Drawable (): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( solid Color Pressed Ġ== Ġnull Ġ&& Ġstroke Color Pressed Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġpressed Drawable Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠ Ġsetup Gradient Drawable ( pressed Drawable ) ĊĠĠĠĠĠĠĠ Ġsolid Color Pressed ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpressed Drawable . setColor ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstroke Color Pressed ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Stroke Color ( pressed Drawable , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpressed Drawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Disabled Drawable (): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( solid Color Disabled Ġ== Ġnull Ġ&& Ġstroke Color Disabled Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġdisabled Drawable Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠ Ġsetup Gradient Drawable ( disabled Drawable ) ĊĠĠĠĠĠĠĠ Ġsolid Color Disabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled Drawable . setColor ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstroke Color Disabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Stroke Color ( disabled Drawable , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdisabled Drawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Selected Drawable (): ĠDrawable ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( solid Color Selected Ġ== Ġnull Ġ&& Ġstroke Color Selected Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġselected Drawable Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠ Ġsetup Gradient Drawable ( selected Drawable ) ĊĠĠĠĠĠĠĠ Ġsolid Color Selected ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Drawable . setColor ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstroke Color Selected ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Stroke Color ( selected Drawable , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġselected Drawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Normal Drawable (): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpressed Drawable Ġ= ĠGradient Drawable () ĊĠĠĠĠĠĠĠ Ġsetup Gradient Drawable ( pressed Drawable ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpressed Drawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Gradient Drawable ( drawable : ĠGradient Drawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproperties . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . shape Ġ= Ġshape ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shape Ġ== ĠGradient Drawable . RING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Inner Radius ( drawable , Ġinner Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Inner Radius Ratio ( drawable , Ġinner Radius Ratio ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Thickness ( drawable , Ġthickness ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Thickness Ratio ( drawable , Ġthickness Ratio ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Use Level For Shape ( drawable , Ġuse Level For Ring ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . corner Rad ii Ġ= Ġget Corner Rad ii () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( use Gradient ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . gradient Type Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Gradient Radius Type ( drawable , Ġgradient Radius Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Gradient Radius ( drawable , Ġgradient Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . set Gradient Center ( center X , Ġcenter Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Orientation ( drawable , Ġget Orientation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Colors ( drawable , Ġget Colors ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . use Level Ġ= Ġuse Level For Gradient ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . color Ġ= Ġget Solid Color State List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . setColor ( solid Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . setSize ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . set Stroke ( stroke Width , Ġget Stroke Color State List (), Ġdash Width . toFloat (), Ġdash Gap . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . set Stroke ( stroke Width , Ġstroke Color , Ġdash Width . toFloat (), Ġdash Gap . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġneed State List Drawable (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBuild . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . LO L LI POP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( has Stroke Color State List () Ġ|| Ġ(! properties . use Gradient Ġ&& Ġhas Solid Color State List ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġneed Rotate Drawable (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproperties . use Rotate Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!( properties . pivot X Ġ== Ġ 0 . 5 f Ġ&& Ġproperties . pivot Y Ġ== Ġ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġproperties . from Degrees Ġ== Ġ 0 f Ġ&& Ġproperties . to Degrees Ġ== Ġ 0 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġneed Scale Drawable (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġproperties . use Scale ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrap ( drawable : ĠDrawable ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġwrapped Drawable Ġ= Ġdrawable ĊĊĠĠĠĠĠĠĠ Ġif Ġ( rotate Order Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransforms Map [ rotate Order ] Ġ= Ġ:: wrap Rotate IfNeeded ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( scale Order Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransforms Map [ scale Order ] Ġ= Ġ:: wrap Scale IfNeeded ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( action Ġin Ġtransforms Map . values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapped Drawable Ġ= Ġaction . invoke ( wrapped Drawable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( properties . use Flip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapped Drawable Ġ= ĠFlip Drawable Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drawable ( wrapped Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orientation ( properties . orientation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( properties . use R ipple ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrapped Drawable Ġ= ĠR ipple Drawable Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drawable ( wrapped Drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color ( properties . ripple Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. color State List ( properties . ripple Color State List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. radius ( properties . ripple Radius ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwrapped Drawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrap Rotate IfNeeded ( drawable : ĠDrawable ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! need Rotate Drawable ()) Ġreturn Ġdrawable ĊĊĠĠĠĠĠĠĠ Ġwith ( properties ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRotate Drawable Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pivot X ( pivot X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pivot Y ( pivot Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from Degrees ( from Degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Degrees ( to Degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrap Scale IfNeeded ( drawable : ĠDrawable ): ĠDrawable Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! need Scale Drawable ()) Ġreturn Ġdrawable ĊĊĠĠĠĠĠĠĠ Ġwith ( properties ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠScale Drawable Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. level ( scale Level ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale Gravity ( scale Gravity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale Width ( scale Width ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale Height ( scale Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Solid Color State List (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsolid Color Pressed Ġ!= Ġnull Ġ|| Ġsolid Color Disabled Ġ!= Ġnull Ġ|| Ġsolid Color Selected Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Stroke Color State List (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstroke Color Pressed Ġ!= Ġnull Ġ|| Ġstroke Color Disabled Ġ!= Ġnull Ġ|| Ġstroke Color Selected Ġ!= Ġnull ĊĠĠĠ Ġ} Ċ }