/* Ċ Ġ* ĠFX GL Ġ- ĠJava FX ĠGame ĠLibrary . ĠThe ĠMIT ĠLicense Ġ( MIT ). Ċ Ġ* ĠCopyright Ġ( c ) ĠAl mas B Ġ( al mas lvl @ gmail . com ). Ċ Ġ* ĠSee ĠLICENSE Ġfor Ġdetails . Ċ Ġ*/ Ċ Ċ package Ġcom . al mas b . fx gl . ui Ċ Ċ import Ġjavafx . animation . Key Frame Ċ import Ġjavafx . animation . KeyValue Ċ import Ġjavafx . animation . Timeline Ċ import Ġjavafx . beans . binding . Bindings Ċ import Ġjavafx . scene . Cursor Ċ import Ġjavafx . scene . Group Ċ import Ġjavafx . scene . Node Ċ import Ġjavafx . scene . layout .* Ċ import Ġjavafx . scene . paint . Color Ċ import Ġjavafx . scene . shape . Line Ċ import Ġjavafx . scene . text . Text Ċ import Ġjavafx . scene . text . Text Flow Ċ import Ġjavafx . util . Duration Ċ Ċ /** Ċ Ġ* ĠA Ġlightweight Ġ( non - native ) Ġwindow . Ċ Ġ* ĠTo Ġchange Ġwindow Ġsize , Ġuse Ġset Pref Size (). Ċ Ġ* ĠTo Ġchange Ġwindow Ġposition , Ġuse Ġlayout X Ġand Ġlayout Y . Ċ Ġ* Ċ Ġ* ĠAdapt ed Ġfrom Ġj fx tras - window . Ċ Ġ* Ċ Ġ* Ġ@ author ĠAl mas ĠB aim ag amb et ov Ġ( al mas lvl @ gmail . com ) Ċ Ġ*/ Ċ open Ġclass ĠM DI Window Ġ: ĠRegion () Ġ{ ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠResize Mode Ġ{ ĊĠĠĠĠĠĠĠ ĠNONE , ĊĠĠĠĠĠĠĠ ĠTOP , ĊĠĠĠĠĠĠĠ ĠLEFT , ĊĠĠĠĠĠĠĠ ĠBOTTOM , ĊĠĠĠĠĠĠĠ ĠRIGHT , ĊĠĠĠĠĠĠĠ ĠTOP _ LEFT , ĊĠĠĠĠĠĠĠ ĠTOP _ RIGHT , ĊĠĠĠĠĠĠĠ ĠBOTTOM _ LEFT , ĊĠĠĠĠĠĠĠ ĠBOTTOM _ RIGHT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmouse X Ġ= Ġ 0 . 0 ĊĠĠĠ Ġprivate Ġvar ĠmouseY Ġ= Ġ 0 . 0 ĊĠĠĠ Ġprivate Ġvar Ġnode X Ġ= Ġ 0 . 0 ĊĠĠĠ Ġprivate Ġvar Ġnode Y Ġ= Ġ 0 . 0 ĊĠĠĠ Ġprivate Ġvar Ġis Dragging Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Animation Finished Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġvar Ġresize Mode Ġ= ĠResize Mode . NONE ĊĊĠĠĠ Ġprivate Ġvar Ġis Resize Top Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Resize Left Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Resize Bot Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Resize Right Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġprev Height Ġ= Ġ 0 . 0 ĊĊĠĠĠ Ġprivate Ġval Ġheader Ġ= ĠText Flow () ĊĊĠĠĠ Ġprivate Ġval Ġminimize Button Ġ= Ġmake Min imize Button () ĊĠĠĠ Ġprivate Ġval Ġclose Button Ġ= Ġmake Close Button () ĊĊĠĠĠ Ġprivate Ġfun Ġmake Min imize Button (): ĠNode Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpane Ġ= ĠP ane () ĊĠĠĠĠĠĠĠ Ġpane . translate Y Ġ= Ġ 1 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġ 2 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ 3 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġline 1 Ġ= ĠLine ( offset , Ġsize Ġ/ Ġ 2 Ġ+ Ġ 1 , Ġsize , Ġsize Ġ/ Ġ 2 Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġline 2 Ġ= ĠLine ( size , Ġoffset , Ġoffset , Ġsize ) ĊĊĠĠĠĠĠĠĠ Ġline 1 . stroke Width Ġ= Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġline 2 . stroke Width Ġ= Ġ 2 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġstroke Ġ= ĠBind ings .` when `( pane . hover Property ()). then ( Color . BLUE ). otherwise ( Color . WHITE ) ĊĊĠĠĠĠĠĠĠ Ġline 1 . stroke Property (). bind ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġline 2 . stroke Property (). bind ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġline 2 . isVisible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġpane . children . addAll ( line 1 , Ġline 2 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpane ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Close Button (): ĠNode Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpane Ġ= ĠP ane () ĊĠĠĠĠĠĠĠ Ġpane . translate Y Ġ= Ġ 1 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġ 2 2 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ 3 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġline 1 Ġ= ĠLine ( offset , Ġoffset , Ġsize , Ġsize ) ĊĠĠĠĠĠĠĠ Ġval Ġline 2 Ġ= ĠLine ( size , Ġoffset , Ġoffset , Ġsize ) ĊĊĠĠĠĠĠĠĠ Ġline 1 . stroke Width Ġ= Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġline 2 . stroke Width Ġ= Ġ 2 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġstroke Ġ= ĠBind ings .` when `( pane . hover Property ()). then ( Color . RED ). otherwise ( Color . WHITE ) ĊĊĠĠĠĠĠĠĠ Ġline 1 . stroke Property (). bind ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġline 2 . stroke Property (). bind ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstroke ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġpane . children . addAll ( line 1 , Ġline 2 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpane ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġroot Ġ= ĠP ane () ĊĠĠĠ Ġvar Ġcontent Pane : ĠP ane Ġ= ĠStack Pane () ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot . children . set ( 1 , Ġvalue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value . width Ġ< Ġwidth ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġvalue . width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġis Min im ized Ġ= Ġfalse ĊĊĠĠĠ Ġ// Ġthese Ġallow Ġwindow Ġfunctionality Ġcustomization ĊĊĠĠĠ Ġvar Ġis Man ually Resizable Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġis Mov able Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġis Min im izable : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġminimize Button . isVisible ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġminimize Button . isVisible Ġ= Ġvalue Ġ} ĊĊĠĠĠ Ġvar Ġis Closeable : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclose Button . isVisible ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ Ġclose Button . isVisible Ġ= Ġvalue Ġ} ĊĊĠĠĠ Ġvar Ġtitle Ġ= Ġ" Unt itled " ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Title () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Title () Ġ{ ĊĠĠĠĠĠĠĠ Ġheader . children . clear () ĊĠĠĠĠĠĠĠ Ġheader . children . add ( Text ( title ). also Ġ{ Ġit . fill Ġ= ĠColor . WHITE Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Mov able Window () ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġval Ġbox Ġ= ĠH Box ( header ) ĊĠĠĠĠĠĠĠ Ġbox . translate Y Ġ= Ġ- 2 5 . 0 ĊĠĠĠĠĠĠĠ Ġbox . style Class . add (" window - title bar ") ĊĠĠĠĠĠĠĠ Ġbox . pref Width Property (). bind ( this . width Property ()) ĊĊĠĠĠĠĠĠĠ Ġinit Min imize Button ( box ) ĊĠĠĠĠĠĠĠ Ġinit Close Button ( box ) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġroot . children . add ( box ) ĊĠĠĠĠĠĠĠ Ġroot . children . add ( content Pane ) ĊĠĠĠĠĠĠĠ Ġroot . children . addAll ( minimize Button , Ġclose Button ) ĊĠĠĠĠĠĠĠ Ġroot . layout Y Ġ= Ġ 2 5 . 0 ĊĊĠĠĠĠĠĠĠ Ġchildren . add ( root ) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠBackground ( Background Fill ( Color . BLACK , Ġnull , Ġnull )) ĊĊĠĠĠĠĠĠĠ Ġupdate Title () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Min imize Button ( box : ĠH Box ) Ġ{ ĊĠĠĠĠĠĠĠ ĠminHeight Ġ= Ġ 2 8 . 0 ĊĊĠĠĠĠĠĠĠ Ġminimize Button . translate X Property (). bind ( box . pref Width Property (). subtract ( 5 4 . 0 )) ĊĠĠĠĠĠĠĠ Ġminimize Button . translate Y Ġ= Ġ- 2 0 . 0 ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġminimize Button . setOn Mouse Clicked Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Animation Finished ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Mouse Clicked ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Min im ized Ġ= Ġ! is Min im ized ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Min im ized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Pane . isVisible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġremember Ġour Ġheight Ġbefore Ġminimize Ġeffect , Ġso Ġwe Ġcan Ġexpand Ġcorrectly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Height Ġ= Ġpref Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= ĠTimeline () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . key Frames . add ( Key Frame ( Duration . seconds ( 0 . 2 5 ), ĠKey Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref Height Property (), Ġif Ġ( is Min im ized ) Ġ 2 8 . 0 Ġelse Ġprev Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . setOn Finished Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Min im ized ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Pane . isVisible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Animation Finished Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . play () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Animation Finished Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Close Button ( box : ĠH Box ) Ġ{ ĊĠĠĠĠĠĠĠ Ġclose Button . translate X Property (). bind ( box . pref Width Property (). subtract ( 2 7 . 0 )) ĊĠĠĠĠĠĠĠ Ġclose Button . translate Y Ġ= Ġ- 2 2 . 0 ĊĊĠĠĠĠĠĠĠ Ġclose Button . setOn Mouse Clicked Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġis ĠGroup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent Ġas ĠGroup ). children Ġ-= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġinit Mov able Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġset On Mouse Pressed Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Scale X Ġ= Ġn . parent . local To Scene Transform Property (). value . m xx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Scale Y Ġ= Ġn . parent . local To Scene Transform Property (). value . my y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmouse X Ġ= Ġevent . scene X ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmouseY Ġ= Ġevent . scene Y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode X Ġ= Ġn . layout X Ġ* Ġparent Scale X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Y Ġ= Ġn . layout Y Ġ* Ġparent Scale Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset On Mouse Drag ged Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Scale X Ġ= Ġn . parent . local To Scene Transform Property (). value . m xx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Scale Y Ġ= Ġn . parent . local To Scene Transform Property (). value . my y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds In Scene Ġ= Ġn . local To Scene ( n . bounds In Local ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscene X Ġ= Ġbounds In Scene . min X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscene Y Ġ= Ġbounds In Scene . min Y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset X Ġ= Ġevent . scene X Ġ- Ġmouse X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Y Ġ= Ġevent . scene Y Ġ- ĠmouseY ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resize Mode Ġ== ĠResize Mode . NONE Ġ&& Ġn . is Mov able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode X Ġ+= Ġoffset X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Y Ġ+= Ġoffset Y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscaled X Ġ= Ġnode X Ġ* Ġ 1 Ġ/ Ġparent Scale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscaled Y Ġ= Ġnode Y Ġ* Ġ 1 Ġ/ Ġparent Scale Y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . layout X Ġ= Ġscaled X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . layout Y Ġ= Ġscaled Y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Resize Top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinset Offset Ġ= Ġin sets . top Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Diff Ġ= Ġscene Y Ġ/ Ġparent Scale Y Ġ+ Ġinset Offset Ġ- Ġevent . scene Y Ġ/ Ġparent Scale Y ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Height Ġ= Ġn . pref Height Ġ+ Ġy Diff ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Height Ġ> Ġn . min Height ( 0 . 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . layout Y Ġ= Ġn . layout Y Ġ- Ġy Diff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . pref Height Ġ= Ġnew Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Resize Left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinset Offset Ġ= Ġin sets . left Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Diff Ġ= Ġscene X Ġ/ Ġparent Scale X Ġ+ Ġinset Offset Ġ- Ġevent . scene X Ġ/ Ġparent Scale X ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Width Ġ= Ġn . pref Width Ġ+ Ġx Diff ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Width Ġ> ĠMath . max ( n . min Width ( 0 . 0 ), Ġn . content Pane . min Width ( 0 . 0 ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . layout X Ġ= Ġn . layout X Ġ- Ġx Diff ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . pref Width Ġ= Ġnew Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Resize Bot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinset Offset Ġ= Ġin sets . bottom Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Diff Ġ= Ġ( event . scene Y Ġ/ Ġparent Scale Y Ġ- Ġscene Y Ġ/ Ġparent Scale Y Ġ- Ġinset Offset ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Height Ġ= Ġy Diff ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Height Ġ= ĠMath . max ( new Height , Ġn . min Height ( 0 . 0 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Height Ġ< Ġn . max Height ( 0 . 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . pref Height Ġ= Ġnew Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Resize Right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinset Offset Ġ= Ġin sets . right Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Diff Ġ= Ġ( event . scene X Ġ/ Ġparent Scale X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- Ġscene X Ġ/ Ġparent Scale Y Ġ- Ġinset Offset ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Width Ġ= Ġx Diff ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Width Ġ= ĠMath . max ( new Width , ĠMath . max ( n . content Pane . min Width ( 0 . 0 ), Ġn . min Width ( 0 . 0 ))) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Width Ġ< Ġn . maxWidth ( 0 . 0 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . pref Width Ġ= Ġnew Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmouse X Ġ= Ġevent . scene X ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmouseY Ġ= Ġevent . scene Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset On Mouse Clicked Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset On Mouse Moved Ġ{ Ġt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n . is Min im ized Ġ|| Ġ! n . is Man ually Resizable ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Top Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Left Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Bot Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Right Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . NONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Mouse Moved ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale X Ġ= Ġn . local To Scene Transform Property (). value . m xx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Y Ġ= Ġn . local To Scene Transform Property (). value . my y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġborder Ġ= Ġ 5 . 0 Ġ* Ġscale X ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Min X Ġ= ĠMath . abs ( n . layout Bounds . min X Ġ- Ġt . x Ġ+ Ġin sets . left ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Min Y Ġ= ĠMath . abs ( n . layout Bounds . min Y Ġ- Ġt . y Ġ+ Ġin sets . top ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Max X Ġ= ĠMath . abs ( n . layout Bounds . max X Ġ- Ġt . x Ġ- Ġin sets . right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdiff Max Y Ġ= ĠMath . abs ( n . layout Bounds . max Y Ġ- Ġt . y Ġ- Ġin sets . bottom ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġdiff Min X Ġ* Ġscale X Ġ< ĠMath . max ( border , Ġin sets . left Ġ/ Ġ 2 Ġ* Ġscale X ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġdiff Min Y Ġ* Ġscale Y Ġ< ĠMath . max ( border , Ġin sets . top Ġ/ Ġ 2 Ġ* Ġscale Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġdiff Max X Ġ* Ġscale X Ġ< ĠMath . max ( border , Ġin sets . right Ġ/ Ġ 2 Ġ* Ġscale X ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġdiff Max Y Ġ* Ġscale Y Ġ< ĠMath . max ( border , Ġin sets . bottom Ġ/ Ġ 2 Ġ* Ġscale Y ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Top Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Left Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Bot Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Right Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Ġ&& Ġ! top Ġ&& Ġ! bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . cursor Ġ= ĠCursor . W _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . LEFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Left Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( left Ġ&& Ġtop Ġ&& Ġ! bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . cursor Ġ= ĠCursor . NW _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . TOP _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Left Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( left Ġ&& Ġ! top Ġ&& Ġbottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . cursor Ġ= ĠCursor . SW _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . BOTTOM _ LEFT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Left Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Bot Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( right Ġ&& Ġ! top Ġ&& Ġ! bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . cursor Ġ= ĠCursor . E _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Right Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( right Ġ&& Ġtop Ġ&& Ġ! bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . cursor Ġ= ĠCursor . NE _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . TOP _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Right Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( right Ġ&& Ġ! top Ġ&& Ġbottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . cursor Ġ= ĠCursor . SE _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . BOTTOM _ RIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Right Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Bot Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( top Ġ&& Ġ! left Ġ&& Ġ! right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . cursor Ġ= ĠCursor . N _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . TOP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( bottom Ġ&& Ġ! left Ġ&& Ġ! right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . cursor Ġ= ĠCursor . S _ RE SIZE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . BOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Resize Bot Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn . cursor Ġ= ĠCursor . DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresize Mode Ġ= ĠResize Mode . NONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġn . autos ize () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }