package Ġcom . j dev zone . clip per Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Typed Array Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . annotation . Dimension Ċ import Ġandroidx . annotation . Nullable Ċ import Ġandroidx . appcompat . widget . AppCompat ImageView Ċ import Ġandroidx . core . graphics . to Rect F ĊĊ Ċ class ĠClip Image Ġ: ĠAppCompat ImageView Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCLI P _ TYPE _ CIR CLE Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCLI P _ TYPE _ PIN Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠST RO KE _ TYPE _ SOLID Ġ= Ġ 1 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠST RO KE _ TYPE _ DASH ED Ġ= Ġ 1 2 ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Custom is able ĠProperty ĠVariables ĊĠĠĠ Ġprivate Ġvar Ġm Horizontal Padding Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Vertical Padding Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Clip Radius Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Corner Radius Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Clip Gravity Ġ= ĠGr avity . TOP ĊĠĠĠ Ġprivate Ġvar Ġm Clip Type Ġ= ĠCLI P _ TYPE _ CIR CLE ĊĊĠĠĠ Ġ// Stroke Ġrelated Ġproperties ĊĠĠĠ Ġprivate Ġvar Ġm Stroke Width Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Stroke Path Phase Ġ= Ġ 1 5 f ĊĠĠĠ Ġprivate Ġvar Ġm Stroke Path Interval Ġ= Ġ 1 5 f ĊĠĠĠ Ġprivate Ġvar Ġm Stroke Color Ġ= ĠColor . BLACK ĊĠĠĠ Ġprivate Ġvar Ġm Stroke Type Ġ= ĠST RO KE _ TYPE _ SOLID ĊĊĠĠĠ Ġ// Drawing Ġelements ĊĠĠĠ Ġprivate Ġval Ġpath Ġ= ĠPath () ĊĠĠĠ Ġprivate Ġval Ġclip Rect Ġ= ĠRect () ĊĠĠĠ Ġprivate Ġval Ġpaint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit UI () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġ@ Nullable Ġattrs : ĠAttributeSet ) Ġ: Ġsuper ( context , Ġattrs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit UI () ĊĠĠĠĠĠĠĠ Ġset Attrs Values ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Attrs Values ( attrs : ĠAttributeSet ) Ġ{ ĊĠĠĠĠĠĠĠ Ġattrs . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Clip Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Properties From Attrs ( typed Array ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Stroke Paint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Properties From Attrs ( a : ĠTyped Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Clip Radius Ġ= Ġa . safe Dimension Value ( R . style able . Clip Image _ ci _ clip _ radius , 0 f ) ĊĠĠĠĠĠĠĠ Ġm Corner Radius Ġ= Ġa . safe Dimension Value ( R . style able . Clip Image _ ci _ corner _ radius , 0 f ) ĊĠĠĠĠĠĠĠ Ġm Vertical Padding Ġ= Ġa . safe Dimension Value ( R . style able . Clip Image _ ci _ vertical _ padding , 0 f ). toInt () ĊĠĠĠĠĠĠĠ Ġm Horizontal Padding Ġ= Ġa . safe Dimension Value ( R . style able . Clip Image _ ci _ horizontal _ padding , 0 f ). toInt () ĊĠĠĠĠĠĠĠ Ġm Clip Gravity Ġ= Ġa . safe Int Value ( R . style able . Clip Image _ ci _ clip _ gravity , Gravity . TOP ) ĊĠĠĠĠĠĠĠ Ġm Clip Type Ġ= Ġa . safe Int Value ( R . style able . Clip Image _ ci _ clip _ type , CLIP _ TYPE _ CIR CLE ) ĊĠĠĠĠĠĠĠ Ġ// ĠSt roke ĠValues ĊĠĠĠĠĠĠĠ Ġm Stroke Width Ġ= Ġa . safe Dimension Value ( R . style able . Clip Image _ ci _ stroke _ width , 0 f ) ĊĠĠĠĠĠĠĠ Ġm Stroke Path Interval Ġ= Ġa . safe Dimension Value ( R . style able . Clip Image _ ci _ stroke _ path _ interval , 0 f ) ĊĠĠĠĠĠĠĠ Ġm Stroke Path Phase Ġ= Ġa . safe Dimension Value ( R . style able . Clip Image _ ci _ stroke _ path _ phase , 0 f ) ĊĠĠĠĠĠĠĠ Ġm Stroke Type Ġ= Ġa . safe Int Value ( R . style able . Clip Image _ ci _ stroke _ type , ST RO KE _ TYPE _ SOLID ) ĊĠĠĠĠĠĠĠ Ġval Ġstroke Color Ġ= Ġa . safe Resource Value ( R . style able . Clip Image _ ci _ stroke _ color , android . R . color . black ) ĊĠĠĠĠĠĠĠ Ġm Stroke Color Ġ= Ġcontext Color ( stroke Color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġ@ Nullable Ġattrs : ĠAttributeSet , Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit UI () ĊĠĠĠĠĠĠĠ Ġset Attrs Values ( attrs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġscale Type Ġ= ĠScale Type . CENTER _ C ROP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Stroke Paint () Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis D ither Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġm Stroke Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Effect Ġ= Ġ( m Stroke Type Ġ== ĠST RO KE _ TYPE _ DASH ED ). el vis ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDash Path Effect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( m Stroke Path Interval , Ġm Stroke Path Interval ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Stroke Path Phase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġm Stroke Color ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) Ċ // ĠĠĠĠĠĠĠ ĠLog . e (" TAG ", Ġ" on Size Changed : Ġ Ġ$ w , Ġ$ h , Ġ$ old w , Ġ$ old h ") ĊĠĠĠĠĠĠĠ Ġif Ġ( w Ġ> Ġ 0 Ġ&& Ġh Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cli pping Rect By Gravity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath 1 Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Round Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip Rect . to Rect F (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Corner Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath 2 Ġ= Ġ( m Clip Type Ġ== ĠCLI P _ TYPE _ CIR CLE ). el vis ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath (). apply Ġ{ Ġget Circle Path By Gravity () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath (). apply Ġ{ Ġget Pin Path By Gravity () Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath 1 . op ( path 2 , ĠPath . Op . UNION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath . add Path ( path 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Cli pping Rect By Gravity () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( m Clip Gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . TOP Ġ-> Ġclip Rect . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Horizontal Padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Clip Radius . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Width Ġ- Ġm Horizontal Padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Height Ġ- Ġm Vertical Padding ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . BOTTOM Ġ-> Ġclip Rect . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Horizontal Padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Vertical Padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Width Ġ- Ġm Horizontal Padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Height Ġ- Ġ( m Vertical Padding Ġ+ Ġm Clip Radius . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPath . getC ircle Path By Gravity () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( m Clip Gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . TOP Ġ-> Ġadd Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Width Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Clip Radius Ġ+ Ġm Vertical Padding , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Clip Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . BOTTOM Ġ-> Ġadd Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Width Ġ/ Ġ 2 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Height Ġ- Ġ( m Clip Radius Ġ+ Ġm Vertical Padding ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Clip Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPath . Direction . CW ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPath . get Pin Path By Gravity () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( m Clip Gravity ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . TOP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . moveTo (( meas ured Width Ġ/ Ġ 2 f ) Ġ- Ġm Clip Radius , Ġm Clip Radius Ġ+ Ġm Vertical Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( meas ured Width Ġ/ Ġ 2 f , Ġm Vertical Padding . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo (( meas ured Width Ġ/ Ġ 2 f ) Ġ+ Ġm Clip Radius , Ġm Clip Radius Ġ+ Ġm Vertical Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Path ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGr avity . BOTTOM Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . moveTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( meas ured Width Ġ/ Ġ 2 f ) Ġ- Ġm Clip Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Height Ġ- Ġ( m Clip Radius Ġ+ Ġm Vertical Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( meas ured Width Ġ/ Ġ 2 f , Ġmeasured Height . toFloat () Ġ- Ġm Vertical Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . lineTo ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( meas ured Width Ġ/ Ġ 2 f ) Ġ+ Ġm Clip Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Height Ġ- Ġ( m Clip Radius Ġ+ Ġm Vertical Padding ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Path ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas ?. clip Path ( path , ĠRegion . Op . INTER SECT ) ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Path ( path , Ġpaint ) ĊĠĠĠ Ġ} ĊĊ Ċ /* -------------------------------- - ĠPublic ĠSet ters Ġ-------------------------------- - */ ĊĊĠĠĠ Ġfun Ġset Horizontal Padding (@ Dimension Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Horizontal Padding Ġ= Ġdp To Px ( value ) ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Vertical Padding (@ Dimension Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Vertical Padding Ġ= Ġdp To Px ( value ) ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Clip Radius (@ Dimension Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Clip Radius Ġ= Ġdp To Px ( value ). toFloat () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Corner Radius (@ Dimension Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Corner Radius Ġ= Ġdp To Px ( value ). toFloat () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Clip Gravity ( gravity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( gravity Ġin ĠarrayOf ( Gravity . TOP , ĠGr avity . BOTTOM )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Clip Gravity Ġ= Ġgravity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Clip Type ( clip Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( clip Type Ġin ĠarrayOf ( CLIP _ TYPE _ CIR CLE , ĠCLI P _ TYPE _ CIR CLE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Clip Type Ġ= Ġclip Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Stroke Type ( stroke Type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( stroke Type Ġin ĠarrayOf ( ST RO KE _ TYPE _ DASH ED , ĠST RO KE _ TYPE _ SOLID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Stroke Type Ġ= Ġstroke Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Stroke Paint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Stroke Width (@ Dimension Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Stroke Width Ġ= Ġdp To Px ( value ). toFloat () ĊĠĠĠĠĠĠĠ Ġinit Stroke Paint () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Stroke Path Interval (@ Dimension Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Stroke Path Interval Ġ= Ġdp To Px ( value ). toFloat () ĊĠĠĠĠĠĠĠ Ġinit Stroke Paint () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Stroke Path Phase (@ Dimension Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Stroke Path Phase Ġ= Ġdp To Px ( value ). toFloat () ĊĠĠĠĠĠĠĠ Ġinit Stroke Paint () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Stroke Color (@ Color Res Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Stroke Color Ġ= Ġcontext Color ( value ) ĊĠĠĠĠĠĠĠ Ġinit Stroke Paint () ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} ĊĊ Ċ }