package Ġio . nac ular . do od le . utils Ċ Ċ import Ġio . nac ular . do od le . core . View Ċ import Ġio . nac ular . do od le . event . Pointer Event Ċ import Ġio . nac ular . do od le . event . Pointer Listener Ċ import Ġio . nac ular . do od le . event . Pointer Motion Listener Ċ import Ġio . nac ular . do od le . geometry . Point . Companion . Origin Ċ import Ġio . nac ular . do od le . geometry . Rectangle Ċ import Ġio . nac ular . do od le . geometry . Size . Companion . Empty Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . ER es ize Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . Grab Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . Grab bing Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . N Resize Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . Ne Resize Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . Nw Resize Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . S Resize Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . Se Resize Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . Sw Resize Ċ import Ġio . nac ular . do od le . system . Cursor . Companion . W Resize Ċ import Ġio . nac ular . do od le . system . System Pointer Event . Type . Down Ċ import Ġio . nac ular . do od le . utils . Direction . East Ċ import Ġio . nac ular . do od le . utils . Direction . North Ċ import Ġio . nac ular . do od le . utils . Direction . South Ċ import Ġio . nac ular . do od le . utils . Direction . West Ċ import Ġkotlin . math . max Ċ Ċ class ĠRes izer ( private Ġval Ġview : ĠView ): ĠPointer Listener , ĠPointer Motion Listener Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġview . pointer Changed ĠĠĠĠĠĠ Ġ+= Ġthis ĊĠĠĠĠĠĠĠ Ġview . pointer Motion Changed Ġ+= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġmov able ĠĠĠĠ Ġ= Ġtrue ĊĠĠĠ Ġvar Ġdirections Ġ Ġ= Ġset Of ( North , ĠEast , ĠSouth , ĠWest ) ĊĠĠĠ Ġvar Ġhot spot Size Ġ= Ġ 5 . 0 ĊĊĠĠĠ Ġprivate Ġvar Ġdrag Mode ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġmutable Set Of < Direction >() ĊĠĠĠ Ġprivate Ġvar Ġold Cursor ĠĠĠĠĠĠĠĠĠĠĠ Ġ= Ġview . cursor ĊĠĠĠ Ġprivate Ġvar Ġinitial Size ĠĠĠĠĠĠĠĠĠ Ġ= ĠEmpty ĊĠĠĠ Ġprivate Ġvar Ġinitial Position ĠĠĠĠĠ Ġ= ĠOrigin ĊĠĠĠ Ġprivate Ġvar Ġignore Property Change Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġreleased ( event : ĠPointer Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrag Mode . clear () ĊĊĠĠĠĠĠĠĠ Ġupdate Cursor ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpressed ( event : ĠPointer Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdrag Mode . clear () ĊĊĠĠĠĠĠĠĠ Ġinitial Position Ġ= Ġview . to Local ( event . location , Ġevent . target ) ĊĠĠĠĠĠĠĠ Ġinitial Size ĠĠĠĠ Ġ= Ġview . size ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Position . y Ġ<= Ġhot spot Size ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġdrag Mode . plus Assign ( North ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Position . y Ġ>= Ġview . height Ġ- Ġhot spot Size Ġ-> Ġdrag Mode . plus Assign ( South ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Position . x Ġ>= Ġview . width Ġ- Ġhot spot Size Ġ-> Ġdrag Mode . plus Assign ( East ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Position . x Ġ<= Ġhot spot Size ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġdrag Mode . plus Assign ( West ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Cursor ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentered ( event : ĠPointer Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Cursor ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexited ( event : ĠPointer Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drag Mode . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . cursor Ġ= Ġold Cursor ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmoved ( event : ĠPointer Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Cursor ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrag ged ( event : ĠPointer Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelta Ġ= Ġview . to Local ( event . location , Ġevent . target ) Ġ- Ġinitial Position ĊĊĠĠĠĠĠĠĠ Ġif Ġ( drag Mode . isEmpty () Ġ&& Ġmov able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . position Ġ+= Ġdelta ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . consume () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( drag Mode . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġview . bounds ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx ĠĠĠĠĠ Ġ= Ġbounds . x ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy ĠĠĠĠĠ Ġ= Ġbounds . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ Ġ= Ġbounds . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġbounds . height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠminWidth Ġ Ġ= Ġview . minimum Size . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠminHeight Ġ= Ġview . minimum Size . height ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġconsume Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWest Ġin Ġdrag Mode Ġ&& ĠWest Ġin Ġdirections Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth ĠĠ Ġ= Ġmax ( min Width , Ġview . width Ġ- Ġdelta . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx ĠĠĠĠĠ Ġ+= Ġbounds . width Ġ- Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsume Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEast Ġin Ġdrag Mode Ġ&& ĠEast Ġin Ġdirections Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth ĠĠ Ġ= Ġmax ( min Width , Ġinitial Size . width Ġ+ Ġdelta . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsume Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNorth Ġin Ġdrag Mode Ġ&& ĠNorth Ġin Ġdirections Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ Ġ= Ġmax ( min Height , Ġview . height Ġ- Ġdelta . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy ĠĠĠĠĠ Ġ+= Ġbounds . height Ġ- Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsume Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSouth Ġin Ġdrag Mode Ġ&& ĠSouth Ġin Ġdirections Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ Ġ= Ġmax ( min Height , Ġinitial Size . height Ġ+ Ġdelta . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsume Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . bounds Ġ= ĠRectangle ( x , Ġy , Ġwidth , Ġheight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( consume ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . consume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Cursor ( event : ĠPointer Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drag Mode . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġview . to Local ( event . location , Ġevent . target ) ĊĠĠĠĠĠĠĠ Ġval Ġx ĠĠĠĠĠĠĠ Ġ= Ġlocation . x ĊĠĠĠĠĠĠĠ Ġval Ġy ĠĠĠĠĠĠĠ Ġ= Ġlocation . y ĊĠĠĠĠĠĠĠ Ġval Ġmask ĠĠĠĠ Ġ= Ġmutable Set Of < Direction >() ĊĠĠĠĠĠĠĠ Ġvar Ġinner X ĠĠ Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġinner Y ĠĠ Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ<= Ġhot spot Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( West Ġin Ġdirections ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ+= ĠWest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( x Ġ>= Ġview . width Ġ- Ġhot spot Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( East Ġin Ġdirections ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ+= ĠEast ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner X Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( y Ġ<= Ġhot spot Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( North Ġin Ġdirections ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ+= ĠNorth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( y Ġ>= Ġview . height Ġ- Ġhot spot Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( South Ġin Ġdirections ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmask Ġ+= ĠSouth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Y Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġignore Property Change Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġview . cursor Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNorth Ġin Ġmask ĠĠĠ Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEast Ġin Ġmask Ġ-> ĠNe Resize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWest Ġin Ġmask Ġ-> ĠN w Resize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠ Ġ-> ĠN Resize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSouth Ġin Ġmask ĠĠĠ Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEast Ġin Ġmask Ġ-> ĠSe Resize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWest Ġin Ġmask Ġ-> ĠSw Resize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠ Ġ-> ĠS Resize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEast Ġin Ġmask ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠE Resize ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWest Ġin Ġmask ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> ĠW Resize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmov able Ġ&& Ġinner X Ġ&& Ġinner Y Ġ-> Ġwhen Ġ( event . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDown Ġ-> ĠGrab bing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠGrab ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġold Cursor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġignore Property Change Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ }