package Ġorg . open rnd r . panel Ċ Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . open rnd r .* Ċ import Ġorg . open rnd r . color . Color RGB a Ċ import Ġorg . open rnd r . draw .* Ċ import Ġorg . open rnd r . math . Matrix 4 4 Ċ import Ġorg . open rnd r . math . Vector 2 Ċ import Ġorg . open rnd r . math . mod _ Ċ import Ġorg . open rnd r . panel . elements .* Ċ import Ġorg . open rnd r . panel . layout . Layout er Ċ import Ġorg . open rnd r . panel . style .* Ċ import Ġorg . open rnd r . shape . Rectangle Ċ import Ġorg . open rnd r . shape . intersect s Ċ Ċ // class ĠSurface Cache ( val Ġwidth : ĠInt , Ġval Ġheight : ĠInt , Ġval Ġcontent Scale : Double ) Ġ{ Ċ // ĠĠĠ Ġval Ġcache Ġ= Ġrender Target ( width , Ġheight , Ġcontent Scale ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġcolor Map () Ċ // ĠĠĠĠĠĠĠ Ġdepth Buffer () Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġval Ġatlas Ġ= Ġmutable Map Of < Element , ĠInt Rectangle >() Ċ // Ċ // ĠĠĠ Ġprivate Ġvar Ġroot : ĠPack Node Ġ= ĠPack Node ( Int Rectangle ( 0 , Ġ 0 , Ġwidth , Ġheight )) Ċ // ĠĠĠ Ġval Ġpack er Ġ= ĠInt Pack er () Ċ // Ċ // ĠĠĠ Ġfun Ġflush () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġatlas . clear () Ċ // ĠĠĠĠĠĠĠ Ġroot Ġ= ĠPack Node ( Int Rectangle ( 0 , Ġ 0 , Ġwidth , Ġheight )) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġfun Ġdraw Cached ( drawer : ĠDraw er , Ġelement : ĠElement , Ġf : Ġ() Ġ-> ĠUnit ): ĠInt Rectangle Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġrectangle Ġ= Ġatlas . get Or Put ( element ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġpack er . insert ( root , ĠInt Rectangle ( 0 , Ġ 0 , ĠMath . ceil ( element . layout . screen Width ). toInt (), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMath . ceil ( element . layout . screen Height ). toInt ())) ?. area ?: throw ĠRuntimeException (" b ork ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( drawer , Ġr , Ġf ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġr Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( element . draw . dirty ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( drawer , Ġrectangle , Ġf ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġdrawer . orth o () Ċ // ĠĠĠĠĠĠĠ Ġdrawer . is olated Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . model Ġ= ĠMatrix 4 4 . IDENTITY Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . image ( cache . color Map ( 0 ), ĠRectangle ( rectangle . corner . x Ġ* Ġ 1 . 0 , Ġrectangle . corner . y Ġ* Ġ 1 . 0 , Ġrectangle . width Ġ* Ġ 1 . 0 , Ġrectangle . height Ġ* Ġ 1 . 0 ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . screen Area ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġrectangle Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġfun Ġdraw ( drawer : ĠDraw er , Ġrectangle : ĠInt Rectangle , Ġf : Ġ() Ġ-> ĠUnit ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġdrawer . is olated With Target ( cache ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . orth o ( cache ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . draw Style . blend Mode Ġ= ĠBlend Mode . REPLACE Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . draw Style . fill Ġ= ĠColor RGB a . BLACK . op ac ify ( 0 . 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . draw Style . stroke Ġ= Ġnull Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . view Ġ= ĠMatrix 4 4 . IDENTITY Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . model Ġ= ĠMatrix 4 4 . IDENTITY Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . rectangle ( Rectangle ( rectangle . x Ġ* Ġ 1 . 0 , Ġrectangle . y Ġ* Ġ 1 . 0 , Ġrectangle . width Ġ* Ġ 1 . 0 , Ġrectangle . height Ġ* Ġ 1 . 0 )) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . draw Style . blend Mode Ġ= ĠBlend Mode . OVER Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . draw Style . clip Ġ= ĠRectangle ( rectangle . x Ġ* Ġ 1 . 0 , Ġrectangle . y Ġ* Ġ 1 . 0 , Ġrectangle . width Ġ* Ġ 1 . 0 , Ġrectangle . height Ġ* Ġ 1 . 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . view Ġ= ĠMatrix 4 4 . IDENTITY Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . model Ġ= Ġorg . open rnd r . math . transforms . translate ( rectangle . x Ġ* Ġ 1 . 0 , Ġrectangle . y Ġ* Ġ 1 . 0 , Ġ 0 . 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġf () Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ //} Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ class ĠControl Manager Ġ: ĠExtension Ġ{ ĊĠĠĠ Ġvar Ġbody : ĠElement ? Ġ= Ġnull ĊĠĠĠ Ġval Ġlayout er Ġ= ĠLayout er () ĊĠĠĠ Ġval Ġfont Manager Ġ= ĠFont Manager () ĊĠĠĠ Ġlateinit Ġvar Ġwindow : ĠProgram . Window ĊĠĠĠ Ġprivate Ġval Ġrender Target Cache Ġ= ĠHashMap < Element , ĠRender Target >() ĊĊĠĠĠ Ġlateinit Ġvar Ġprogram : ĠProgram ĊĠĠĠ Ġoverride Ġvar Ġenabled : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġcontent Scale Ġ= Ġ 1 . 0 ĊĠĠĠ Ġlateinit Ġvar Ġrender Target : ĠRender Target ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfont Manager . register (" default ", Ġresource Url ("/ fonts / Roboto - Regular . ttf ")) ĊĠĠĠĠĠĠĠ Ġlayout er . style Sheet s . addAll ( default Styles (). flatMap Ġ{ Ġit . flatten () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠDrop Input Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtarget : ĠElement ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfun Ġdrop ( event : ĠDrop Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ?. drop ?. d ropped ?. trigger ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdrop Input Ġ= ĠDrop Input () ĊĊĊĊĊĠĠĠ Ġinner Ġclass ĠKeyboard Input Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlast Target : ĠElement ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġtarget : ĠElement ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġfield ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. pseudo Classes ?. remove ( Element Pseudo Class (" active ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. keyboard ?. focus Lost ?. trigger ( Focus Event ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ?. keyboard ?. focus G ained ?. trigger ( Focus Event ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. pseudo Classes ?. add ( Element Pseudo Class (" active ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Target Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpress ( event : ĠKeyEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent : ĠElement ? Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( current Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! event . propagation Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . keyboard . pressed . trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent . parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Manual Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! event . propagation Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . key Ġ== ĠKEY _ TAB ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfocus able Controls Ġ= Ġbody ?. findAll Visible Ġ{ Ġit . handles Keyboard Focus Ġ} Ġ?: Ġempty List () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġtarget ?. let Ġ{ Ġfocus able Controls . indexOf ( it ) Ġ} Ġ?: Ġlast Target ?. let Ġ{ Ġfocus able Controls . indexOf ( it ) Ġ} Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( focus able Controls . isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġif Ġ( target Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Key Modifier . SHIFT Ġin Ġevent . modifiers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus able Controls [( index Ġ- Ġ 1 ). mod _( focus able Controls . size )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfocus able Controls [( index Ġ+ Ġ 1 ). mod _( focus able Controls . size )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Target Ġ?: Ġfocus able Controls [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrelease ( event : ĠKeyEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ?. keyboard ?. released ?. trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Manual Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrepeat ( event : ĠKeyEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ?. keyboard ?. repeated ?. trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Manual Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcharacter ( event : ĠProgram . Character Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget ?. keyboard ?. character ?. trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Manual Red raw () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrequest Focus ( element : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġelement ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġkeyboard Input Ġ= ĠKeyboard Input () ĊĊĠĠĠ Ġinner Ġclass ĠMouse Input Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdrag Target : ĠElement ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġclick Target : ĠElement ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġlast Click Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġfun Ġscroll ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtraverse ( element : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . children . forEach (:: traverse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! event . propagation Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . position Ġin Ġelement . screen Area Ġ&& Ġelement . computed Style . display Ġ!= ĠDisplay . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . mouse . sc rolled . trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . propagation Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Input . target Ġ= Ġelement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. let (:: traverse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Manual Red raw () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclick ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" click Ġevent : Ġ$ event " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Target Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġct Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" click Ġtarget : Ġ$ click Target " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Target ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . handles DoubleClick ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ct Ġ- Ġlast Click Ġ> Ġ 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" normal Ġclick Ġon Ġ$ click Target " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . mouse . clicked . trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click Target Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" double - click Ġon Ġ$ click Target " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . mouse . double Clicked . trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Click Ġ= Ġct ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" normal Ġclick Ġon Ġ$ click Target " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . mouse . clicked . trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Manual Red raw () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpress ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" press Ġevent : Ġ$ event " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcandidates Ġ= Ġmutable ListOf < Pair < Element , ĠInt >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtraverse ( element : ĠElement , Ġdepth : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . computed Style . overflow Ġ== ĠOverflow . Scroll ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . position Ġ! in Ġelement . screen Area ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . computed Style . display Ġ!= ĠDisplay . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . children . forEach Ġ{ Ġtraverse ( it , Ġdepth Ġ+ Ġ 1 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! event . propagation Cancelled Ġ&& Ġevent . position Ġin Ġelement . screen Area Ġ&& Ġelement . computed Style . display Ġ!= ĠDisplay . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates . add ( Pair ( element , Ġdepth )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. let Ġ{ Ġtraverse ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// candidates . sortBy Descending Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Target Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates . sort With ( compare By ({ Ġ- it . first . layout . z Index Ġ}, Ġ{ Ġ- it . second Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcandidates ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! event . propagation Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . first . mouse . pressed . trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . propagation Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" propagation Ġcancelled Ġby Ġ${ c . first }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Target Ġ= Ġc . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Target Ġ= Ġc . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Input . target Ġ= Ġc . first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click Target Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Target Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Input . target Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Manual Red raw () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdrag ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" drag Ġevent Ġ$ event " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Target ?. mouse ?. drag ged ?. trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . propagation Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" propagation Ġcancelled Ġby Ġ$ drag Target Ġsetting Ġclick Target Ġto Ġnull " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Target Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Manual Red raw () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġinside Elements Ġ= Ġmutable Set Of < Element >() ĊĠĠĠĠĠĠĠ Ġfun Ġmove ( event : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhover Ġ= ĠElement Pseudo Class (" hover ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Remove Ġ= Ġinside Elements . filter Ġ{ Ġ( event . position Ġ! in Ġit . screen Area ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Remove . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . mouse . exit ed . trigger ( MouseEvent ( event . position , ĠVector 2 . ZERO , ĠVector 2 . ZERO , ĠMouse EventType . MOVED , ĠMouse Button . NONE , Ġevent . modifiers , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinside Elements . removeAll ( to Remove ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtraverse ( element : ĠElement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . position Ġin Ġelement . screen Area ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġ! in Ġinside Elements ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . mouse . enter ed . trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinside Elements . add ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hover Ġ! in Ġelement . pseudo Classes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . pseudo Classes . add ( hover ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . mouse . moved . trigger ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hover Ġin Ġelement . pseudo Classes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . pseudo Classes . remove ( hover ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . children . forEach (:: traverse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. let (:: traverse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Manual Red raw () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck For Manual Red raw () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( window . presentation Mode Ġ== ĠPresentation Mode . MAN UAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġredraw Ġ= Ġbody ?. any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . draw . dirty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( redraw ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . request Draw () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmouse Input Ġ= ĠMouse Input () ĊĠĠĠ Ġoverride Ġfun Ġsetup ( program : ĠProgram ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . program Ġ= Ġprogram ĊĊĠĠĠĠĠĠĠ Ġcontent Scale Ġ= Ġprogram . window . scale . x ĊĠĠĠĠĠĠĠ Ġwindow Ġ= Ġprogram . window ĊĊĠĠĠĠĠĠĠ Ġ// surface Cache Ġ= ĠSurface Cache ( 4 0 9 6 , Ġ 4 0 9 6 , Ġcontent Scale ) ĊĠĠĠĠĠĠĠ Ġfont Manager . content Scale Ġ= Ġcontent Scale Ċ // ĠĠĠĠĠĠĠ Ġprogram . mouse . button Up . listen Ġ{ Ġmouse Input . release ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġprogram . mouse . button Up . listen Ġ{ Ġmouse Input . click ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġprogram . mouse . moved . listen Ġ{ Ġmouse Input . move ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġprogram . mouse . sc rolled . listen Ġ{ Ġmouse Input . scroll ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġprogram . mouse . drag ged . listen Ġ{ Ġmouse Input . drag ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġprogram . mouse . button Down . listen Ġ{ Ġmouse Input . press ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogram . keyboard . key Down . listen Ġ{ Ġkeyboard Input . press ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġprogram . keyboard . key Up . listen Ġ{ Ġkeyboard Input . release ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġprogram . keyboard . key Repeat . listen Ġ{ Ġkeyboard Input . repeat ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġprogram . keyboard . character . listen Ġ{ Ġkeyboard Input . character ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġprogram . window . drop . listen Ġ{ Ġdrop Input . drop ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġprogram . window . sized . listen Ġ{ Ġresize ( program , Ġit . size . x . toInt (), Ġit . size . y . toInt ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġwidth Ġ= Ġprogram . width ĊĠĠĠĠĠĠĠ Ġheight Ġ= Ġprogram . height ĊĠĠĠĠĠĠĠ Ġrender Target Ġ= Ġrender Target ( program . width , Ġprogram . height , Ġcontent Scale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Buffer () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbody ?. draw ?. dirty Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġwidth : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġheight : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġfun Ġresize ( program : ĠProgram , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġthis . height Ġ= Ġheight ĊĊĠĠĠĠĠĠĠ Ġbody ?. draw ?. dirty Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif Ġ( render Target . color Buffers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . color Buffer ( 0 ). destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . depth Buffer ?. destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . detach Color Buffers () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . detach Depth Buffer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . destroy () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error Ġ{ Ġ" that Ġis Ġstrange . Ġno Ġcolor Ġbuffers " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrender Target Ġ= Ġrender Target ( program . width , Ġprogram . height , Ġcontent Scale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Buffer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdepth Buffer () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrender Target . bind () ĊĠĠĠĠĠĠĠ Ġprogram . drawer . clear ( Color RGB a . BLACK . op ac ify ( 0 . 0 )) ĊĠĠĠĠĠĠĠ Ġrender Target . unbind () ĊĊĠĠĠĠĠĠĠ Ġrender Target Cache . forEach Ġ{ Ġ(_, Ġu ) Ġ-> Ġu . destroy () Ġ} ĊĠĠĠĠĠĠĠ Ġrender Target Cache . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Element ( element : ĠElement , Ġdrawer : ĠDraw er , Ġz Index : ĠInt , Ġz Comp : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Z Comp Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . computed Style . z Index . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠZ Index . Value Ġ-> Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġz Comp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( element . computed Style . display Ġ!= ĠDisplay . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . computed Style . overflow Ġ== ĠOverflow . Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . is olated Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . translate ( element . screen Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Z Comp Ġ== Ġz Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . draw ( drawer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Z Comp Ġ== Ġz Index ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsurface Cache . draw Cached ( drawer , Ġelement ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . draw ( drawer ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . children . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Element ( it , Ġdrawer , Ġz Index , Ġnew Z Comp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarea Ġ= Ġelement . screen Area ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrt Ġ= Ġrender Target Cache . compute If Absent ( element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target ( width , Ġheight , Ġcontent Scale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Buffer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdepth Buffer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrt . bind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . clear ( Color RGB a . BLACK . op ac ify ( 0 . 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . push Projection () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . orth o ( rt ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . children . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Element ( it , Ġdrawer , Ġz Index , Ġnew Z Comp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrt . unbind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . pop Projection () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . push Transforms () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . push Style () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . translate ( element . screen Position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Z Comp Ġ== Ġz Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement . draw ( drawer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . pop Style () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . pop Transforms () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . draw Style . blend Mode Ġ= ĠBlend Mode . OVER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// drawer . image ( rt . color Map ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . image ( rt . color Buffer ( 0 ), ĠRectangle ( Vector 2 ( area . x , Ġarea . y ), Ġarea . width , Ġarea . height ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRectangle ( Vector 2 ( area . x , Ġarea . y ), Ġarea . width , Ġarea . height )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelement . draw . dirty Ġ= Ġfalse ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠProfile Data ( var Ġhits : ĠInt Ġ= Ġ 0 , Ġvar Ġtime : ĠLong Ġ= Ġ 0 ) ĊĊĠĠĠ Ġprivate Ġval Ġprofiles Ġ= Ġmutable Map Of < String , ĠProfile Data >() ĊĠĠĠ Ġprivate Ġfun Ġprofile ( name : ĠString , Ġf : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġf () ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġpd Ġ= Ġprofiles . get Or Put ( name ) Ġ{ ĠProfile Data ( 0 , Ġ 0 L ) Ġ} ĊĠĠĠĠĠĠĠ Ġpd . hits ++ ĊĠĠĠĠĠĠĠ Ġpd . time Ġ+= Ġ( end Ġ- Ġstart ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pd . hits Ġ== Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" name : Ġ Ġ$ name , Ġavg : Ġ${ pd . time Ġ/ Ġpd . hits } ms , Ġ${ pd . hits }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpd . hits Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpd . time Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdraw Count Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun Ġafter Draw ( drawer : ĠDraw er , Ġprogram : ĠProgram ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( program . width Ġ> Ġ 0 Ġ&& Ġprogram . height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile (" after Ġdraw ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( program . width Ġ!= Ġrender Target . width Ġ|| Ġprogram . height Ġ!= Ġrender Target . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile (" resize Ġtarget ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. draw ?. dirty Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . color Buffer ( 0 ). destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target Ġ= Ġrender Target ( program . width , Ġprogram . height , Ġcontent Scale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Buffer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . bind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram . drawer . clear ( Color RGB a . BLACK . op ac ify ( 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . unbind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġredraw Ġ= Ġbody ?. any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . draw . dirty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( redraw ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . orth o () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . view Ġ= ĠMatrix 4 4 . IDENTITY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . defaults () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile (" redraw ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . bind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. style Ġ= ĠStyleSheet ( Compound Selector ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. style ?. width Ġ= Ġprogram . width . px ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. style ?. height Ġ= Ġprogram . height . px ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram . drawer . clear ( Color RGB a . BLACK . op ac ify ( 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout er . compute Styles ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout er . layout ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Element ( it , Ġprogram . drawer , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Element ( it , Ġprogram . drawer , Ġ 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Element ( it , Ġprogram . drawer , Ġ 1 0 0 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Target . unbind () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody ?. visit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw . dirty Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile (" draw Ġimage ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . size ( program . width , Ġprogram . height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . orth o () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . view Ġ= ĠMatrix 4 4 . IDENTITY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . defaults () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram . drawer . image ( render Target . color Buffer ( 0 ), Ġ 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Deprecated (" use Ġnew Ġstyle Ġextend ") Ċ class ĠControl Manager Builder ( val Ġcontrol Manager : ĠControl Manager ) Ġ{ ĊĠĠĠ Ġfun Ġstyle Sheet ( selector : ĠCompound Selector , Ġinit : ĠStyleSheet . () Ġ-> ĠUnit ): ĠStyleSheet Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstyle Sheet Ġ= ĠStyleSheet ( selector ). apply Ġ{ Ġinit () Ġ} ĊĠĠĠĠĠĠĠ Ġcontrol Manager . layout er . style Sheet s . addAll ( style Sheet . flatten ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġstyle Sheet ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstyle Sheet s ( style Sheet s : ĠList < StyleSheet >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontrol Manager . layout er . style Sheet s . addAll ( style Sheet s . flatMap Ġ{ Ġit . flatten () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlayout ( init : ĠBody . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠBody ( control Manager ) ĊĠĠĠĠĠĠĠ Ġbody . init () ĊĠĠĠĠĠĠĠ Ġcontrol Manager . body Ġ= Ġbody ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠControl Manager . style Sheet ( selector : ĠCompound Selector , Ġinit : ĠStyleSheet . () Ġ-> ĠUnit ): ĠStyleSheet Ġ{ ĊĠĠĠ Ġval Ġstyle Sheet Ġ= ĠStyleSheet ( selector ). apply Ġ{ Ġinit () Ġ} ĊĠĠĠ Ġlayout er . style Sheet s . addAll ( style Sheet . flatten ()) ĊĠĠĠ Ġreturn Ġstyle Sheet Ċ } Ċ Ċ fun ĠControl Manager . style Sheet s ( style Sheet s : ĠList < StyleSheet >) Ġ{ ĊĠĠĠ Ġlayout er . style Sheet s . addAll ( style Sheet s . flatMap Ġ{ Ġit . flatten () Ġ}) Ċ } Ċ Ċ fun ĠControl Manager . layout ( init : ĠBody . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġbody Ġ= ĠBody ( this ) ĊĠĠĠ Ġbody . init () ĊĠĠĠ Ġthis . body Ġ= Ġbody Ċ } Ċ Ċ @ Deprecated (" use ĠProgram . control Manager ") Ċ fun Ġcontrol Manager ( builder : ĠControl Manager Builder . () Ġ-> ĠUnit ): ĠControl Manager Ġ{ ĊĠĠĠ Ġval Ġcm Ġ= ĠControl Manager () ĊĠĠĠ Ġcm . font Manager . register (" default ", Ġresource Url ("/ fonts / Roboto - Regular . ttf ")) ĊĠĠĠ Ġcm . layout er . style Sheet s . addAll ( default Styles (). flatMap Ġ{ Ġit . flatten () Ġ}) ĊĠĠĠ Ġval Ġcmb Ġ= ĠControl Manager Builder ( cm ) ĊĠĠĠ Ġcmb . builder () ĊĠĠĠ Ġreturn Ġcm Ċ } Ċ Ċ fun ĠProgram . control Manager ( builder : ĠControl Manager Builder . () Ġ-> ĠUnit ): ĠControl Manager Ġ{ ĊĠĠĠ Ġval Ġcm Ġ= ĠControl Manager () ĊĠĠĠ Ġcm . program Ġ= Ġthis ĊĠĠĠ Ġcm . font Manager . register (" default ", Ġresource Url ("/ fonts / Roboto - Regular . ttf ")) ĊĠĠĠ Ġcm . layout er . style Sheet s . addAll ( default Styles (). flatMap Ġ{ Ġit . flatten () Ġ}) ĊĠĠĠ Ġval Ġcmb Ġ= ĠControl Manager Builder ( cm ) ĊĠĠĠ Ġcmb . builder () ĊĠĠĠ Ġreturn Ġcm Ċ } Ċ Ċ private Ġfun ĠElement . any ( function : Ġ( Element ) Ġ-> ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( function ( this )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . any ( function )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠElement . any Visible ( function : Ġ( Element ) Ġ-> ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( computed Style . display Ġ!= ĠDisplay . NONE Ġ&& Ġfunction ( this )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( computed Style . display Ġ!= ĠDisplay . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . any Visible ( function )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse Ċ }