/* Ċ static Ġui Area Handler Ġborder AH Ċ static Ġint Ġborder AH Init Ġ= Ġ 0 Ċ static Ġdouble Ġlast x Ġ= Ġ- 1 , Ġlast y Ġ= Ġ- 1 Ċ Ċ struct Ġt rect Ġ{ Ċ ĉ double Ġleft Ċ ĉ double Ġtop Ċ ĉ double Ġright Ċ ĉ double Ġbottom Ċ ĉ int Ġin Ċ } Ċ Ċ # define Ġt set rect ( re , Ġl , Ġt , Ġr , Ġb ) Ġre . left Ġ= Ġl Ġre . top Ġ= Ġt Ġre . right Ġ= Ġr Ġre . bottom Ġ= Ġb Ġre . in Ġ= Ġlast x Ġ>= Ġre . left Ġ&& Ġlast x Ġ< Ġre . right Ġ&& Ġlast y Ġ>= Ġre . top Ġ&& Ġlast y Ġ< Ġre . bottom Ċ Ċ struct Ġt areas Ġ{ Ċ ĉ struct Ġt rect Ġmove Ċ ĉ struct Ġt rect Ġals om ove Ċ ĉ struct Ġt rect Ġleft resize Ċ ĉ struct Ġt rect Ġtop resize Ċ ĉ struct Ġt rect Ġright resize Ċ ĉ struct Ġt rect Ġbottom resize ĠĊ ĉ struct Ġt rect Ġtop left resize Ċ ĉ struct Ġt rect Ġtop right resize Ċ ĉ struct Ġt rect Ġbottom left resize Ċ ĉ struct Ġt rect Ġbottom right resize Ċ ĉ struct Ġt rect Ġclose Ċ } Ċ Ċ static Ġvoid Ġfill t areas ( double Ġaw id , Ġdouble Ġa ht , Ġstruct Ġt areas Ġ* ta ) Ċ { Ċ ĉ t set rect ( ta -> move , Ġ 2 0 , Ġ 2 0 , Ġaw id Ġ- Ġ 2 0 , Ġ 2 0 Ġ+ Ġ 3 0 ) Ċ ĉ t set rect ( ta -> als om ove , Ġ 3 0 , Ġ 2 0 0 , Ġ 1 0 0 , Ġ 2 7 0 ) Ċ ĉ t set rect ( ta -> left resize , Ġ 5 , Ġ 2 0 , Ġ 1 5 , Ġa ht Ġ- Ġ 2 0 ) Ċ ĉ t set rect ( ta -> top resize , Ġ 2 0 , Ġ 5 , Ġaw id Ġ- Ġ 2 0 , Ġ 1 5 ) Ċ ĉ t set rect ( ta -> right resize , Ġaw id Ġ- Ġ 1 5 , Ġ 2 0 , Ġaw id Ġ- Ġ 5 , Ġa ht Ġ- Ġ 2 0 ) Ċ ĉ t set rect ( ta -> bottom resize , Ġ 2 0 , Ġa ht Ġ- Ġ 1 5 , Ġaw id Ġ- Ġ 2 0 , Ġa ht Ġ- Ġ 5 ) Ċ ĉ t set rect ( ta -> top left resize , Ġ 5 , Ġ 5 , Ġ 1 5 , Ġ 1 5 ) Ċ ĉ t set rect ( ta -> top right resize , Ġaw id Ġ- Ġ 1 5 , Ġ 5 , Ġaw id Ġ- Ġ 5 , Ġ 1 5 ) Ċ ĉ t set rect ( ta -> bottom left resize , Ġ 5 , Ġa ht Ġ- Ġ 1 5 , Ġ 1 5 , Ġa ht Ġ- Ġ 5 ) Ċ ĉ t set rect ( ta -> bottom right resize , Ġaw id Ġ- Ġ 1 5 , Ġa ht Ġ- Ġ 1 5 , Ġaw id Ġ- Ġ 5 , Ġa ht Ġ- Ġ 5 ) Ċ ĉ t set rect ( ta -> close , Ġ 1 3 0 , Ġ 2 0 0 , Ġ 2 0 0 , Ġ 2 7 0 ) Ċ } Ċ Ċ static Ġvoid Ġdraw tre ct ( ui Draw Context Ġ* c , Ġstruct Ġt rect Ġtr , Ġdouble Ġr , Ġdouble Ġg , Ġdouble Ġbl ) Ċ { Ċ ĉ ui Draw Path Ġ* p Ċ ĉ ui Draw Brush Ġb ĊĊ ĉ memset (& b , Ġ 0 , Ġsizeof Ġ( ui Draw Brush )) Ċ ĉ b . Type Ġ= Ġui Draw Brush Type Solid Ċ ĉ b . R Ġ= Ġr Ċ ĉ b . G Ġ= Ġg Ċ ĉ b . B Ġ= Ġbl Ċ ĉ b . A Ġ= Ġ 1 . 0 Ċ ĉ if Ġ( tr . in ) Ġ{ Ċĉ ĉ b . R Ġ+= Ġb . R Ġ* Ġ 0 . 7 5 Ċĉ ĉ b . G Ġ+= Ġb . G Ġ* Ġ 0 . 7 5 Ċĉ ĉ b . B Ġ+= Ġb . B Ġ* Ġ 0 . 7 5 Ċ ĉ } Ċ ĉ p Ġ= Ġui Draw New Path ( ui Draw Fill Mode Wind ing ) Ċ ĉ ui Draw Path Add Rectangle ( p , Ċĉ ĉ tr . left , Ċĉ ĉ tr . top , Ċĉ ĉ tr . right Ġ- Ġtr . left , Ċĉ ĉ tr . bottom Ġ- Ġtr . top ) Ċ ĉ ui Draw Path End ( p ) Ċ ĉ ui Draw Fill ( c , Ġp , Ġ& b ) Ċ ĉ ui Draw Free Path ( p ) Ċ } Ċ Ċ static Ġvoid Ġhandler Draw ( ui Area Handler Ġ* a , Ġui Area Ġ* area , Ġui Area Draw Params Ġ* p ) Ċ { Ċ ĉ struct Ġt areas Ġta ĊĊ ĉ fill t areas ( p -> Area Width , Ġp -> Area Height , Ġ& ta ) Ċ ĉ draw tre ct ( p -> Context , Ġta . move , Ġ 0 , Ġ 0 . 5 , Ġ 0 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . als om ove , Ġ 0 , Ġ 0 . 5 , Ġ 0 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . left resize , Ġ 0 , Ġ 0 , Ġ 0 . 5 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . top resize , Ġ 0 , Ġ 0 , Ġ 0 . 5 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . right resize , Ġ 0 , Ġ 0 , Ġ 0 . 5 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . bottom resize , Ġ 0 , Ġ 0 , Ġ 0 . 5 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . top left resize , Ġ 0 , Ġ 0 . 5 , Ġ 0 . 5 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . top right resize , Ġ 0 , Ġ 0 . 5 , Ġ 0 . 5 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . bottom left resize , Ġ 0 , Ġ 0 . 5 , Ġ 0 . 5 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . bottom right resize , Ġ 0 , Ġ 0 . 5 , Ġ 0 . 5 ) Ċ ĉ draw tre ct ( p -> Context , Ġta . close , Ġ 0 . 5 , Ġ 0 , Ġ 0 ) ĊĊ ĉ // ĠTODO Ġadd Ġcurrent Ġposition Ġprints Ġhere Ċ } Ċ Ċ static Ġvoid Ġhandler MouseEvent ( ui Area Handler Ġ* a , Ġui Area Ġ* area , Ġui Area MouseEvent Ġ* e ) Ċ { Ċ ĉ struct Ġt areas Ġta ĊĊ ĉ last x Ġ= Ġe -> X Ċ ĉ last y Ġ= Ġe -> Y Ċ ĉ fill t areas ( e -> Area Width , Ġe -> Area Height , Ġ& ta ) Ċ ĉ // Ġredraw Ġour Ġhighlighted Ġrect Ċ ĉ ui Area Queue Red raw All ( area ) Ċ ĉ if Ġ( e -> Down Ġ!= Ġ 1 ) Ċĉ ĉ return Ċ ĉ if Ġ( ta . move . in Ġ|| Ġta . als om ove . in ) Ġ{ Ċĉ ĉ ui Area Begin User Window Move ( area ) Ċĉ ĉ return Ċ ĉ } Ċ # define Ġresize ( cond , Ġedge ) Ġif Ġ( cond ) Ġ{ Ġui Area Begin User Window Resize ( area , Ġedge ) Ġreturn Ġ} Ċ ĉ resize ( ta . left resize . in , Ġui Window Resize Edge Left ) Ċ ĉ resize ( ta . top resize . in , Ġui Window Resize Edge Top ) Ċ ĉ resize ( ta . right resize . in , Ġui Window Resize Edge Right ) Ċ ĉ resize ( ta . bottom resize . in , Ġui Window Resize Edge Bottom ) Ċ ĉ resize ( ta . top left resize . in , Ġui Window Resize Edge Top Left ) Ċ ĉ resize ( ta . top right resize . in , Ġui Window Resize Edge Top Right ) Ċ ĉ resize ( ta . bottom left resize . in , Ġui Window Resize Edge Bottom Left ) Ċ ĉ resize ( ta . bottom right resize . in , Ġui Window Resize Edge Bottom Right ) Ċ ĉ if Ġ( ta . close . in ) Ġ{ Ċĉ ĉ // ĠTODO Ċĉ ĉ return Ċ ĉ } Ċ } Ċ Ċ static Ġvoid Ġhandler Mouse C ros sed ( ui Area Handler Ġ* ah , Ġui Area Ġ* a , Ġint Ġleft ) Ċ { Ċ } Ċ Ċ static Ġvoid Ġhandler Drag Broken ( ui Area Handler Ġ* ah , Ġui Area Ġ* a ) Ċ { Ċ } Ċ Ċ static Ġint Ġhandler KeyEvent ( ui Area Handler Ġ* ah , Ġui Area Ġ* a , Ġui Area KeyEvent Ġ* e ) Ċ { Ċ ĉ return Ġ 0 Ċ } Ċ Ċ static Ġvoid Ġborder Window Open ( ui Button Ġ* b , Ġvoid Ġ* data ) Ċ { Ċ ĉ ui Window Ġ* w Ċ ĉ ui Area Ġ* a ĊĊ ĉ if Ġ(! border AH Init ) Ġ{ Ċĉ ĉ border AH . Draw Ġ= Ġhandler Draw Ċĉ ĉ border AH . MouseEvent Ġ= Ġhandler MouseEvent Ċĉ ĉ border AH . Mouse C ros sed Ġ= Ġhandler Mouse C ros sed Ċĉ ĉ border AH . Drag Broken Ġ= Ġhandler Drag Broken Ċĉ ĉ border AH . KeyEvent Ġ= Ġhandler KeyEvent Ċĉ ĉ border AH Init Ġ= Ġ 1 Ċ ĉ } ĊĊ ĉ w Ġ= Ġui New Window (" Border ĠResize ĠTest ", Ġ 3 0 0 , Ġ 5 0 0 , Ġ 0 ) Ċ ĉ ui Window Set Border less ( w , Ġ 1 ) ĊĊ ĉ a Ġ= Ġui New Area (& border AH ) Ċ // ĉ ui Window Set Child ( w , Ġa ?. reinterpret ()) Ċ { ui Box Ġ* b Ċ b = ui New Horizontal Box () Ċ ui Box Append ( b , a ?. reinterpret (), 1 ) Ċ ui Window Set Child ( w , b ?. reinterpret ()) } Ċ // TODO Ġwhy Ġis Ġthis Ġhack Ġneeded ? ĠG TK + Ġissue ĊĊ ĉ ui Control Show ( w ?. reinterpret ()) Ċ } Ċ Ċ static Ġui Spin box Ġ* width , Ġ* height Ċ static Ġui Checkbox Ġ* fullscreen Ċ Ċ static Ġvoid Ġsize Width ( ui Spin box Ġ* s , Ġvoid Ġ* data ) Ċ { Ċ ĉ ui Window Ġ* w Ġ= Ġui Window ( data ) Ċ ĉ int Ġxp , Ġy p ĊĊ ĉ ui Window Content Size ( w , Ġ& xp , Ġ& yp ) Ċ ĉ xp Ġ= Ġui Spin box Value ( width ) Ċ ĉ ui Window Set Content Size ( w , Ġxp , Ġy p ) Ċ } Ċ Ċ static Ġvoid Ġsize Height ( ui Spin box Ġ* s , Ġvoid Ġ* data ) Ċ { Ċ ĉ ui Window Ġ* w Ġ= Ġui Window ( data ) Ċ ĉ int Ġxp , Ġy p ĊĊ ĉ ui Window Content Size ( w , Ġ& xp , Ġ& yp ) Ċ ĉ yp Ġ= Ġui Spin box Value ( height ) Ċ ĉ ui Window Set Content Size ( w , Ġxp , Ġy p ) Ċ } Ċ Ċ static Ġvoid Ġupdates ize ( ui Window Ġ* w ) Ċ { Ċ ĉ int Ġxp , Ġy p ĊĊ ĉ ui Window Content Size ( w , Ġ& xp , Ġ& yp ) Ċ ĉ ui Spin box SetValue ( width , Ġxp ) Ċ ĉ ui Spin box SetValue ( height , Ġy p ) Ċ ĉ // ĠTODO Ġon ĠOS ĠX Ġthis Ġis Ġupdated ĠAFTER Ġsending Ġthe Ġsize Ġchange , Ġnot Ġbefore Ċ ĉ ui Checkbox Set Checked ( fullscreen , Ġui Window Fullscreen ( w )) Ċ } Ċ Ċ void Ġon Size ( ui Window Ġ* w , Ġvoid Ġ* data ) Ċ { Ċ ĉ printf (" size \ n ") Ċ ĉ updates ize ( w ) Ċ } Ċ Ċ void Ġset Fullscreen ( ui Checkbox Ġ* cb , Ġvoid Ġ* data ) Ċ { Ċ ĉ ui Window Ġ* w Ġ= Ġui Window ( data ) ĊĊ ĉ ui Window Set Fullscreen ( w , Ġui Checkbox Checked ( fullscreen )) Ċ ĉ updates ize ( w ) Ċ } Ċ Ċ static Ġvoid Ġborder less ( ui Checkbox Ġ* c , Ġvoid Ġ* data ) Ċ { Ċ ĉ ui Window Ġ* w Ġ= Ġui Window ( data ) ĊĊ ĉ ui Window Set Border less ( w , Ġui Checkbox Checked ( c )) Ċ } Ċ Ċ ui Box Ġ* make Page 1 5 ( ui Window Ġ* w ) Ċ { Ċ ĉ ui Box Ġ* page 1 5 Ċ ĉ ui Box Ġ* h box Ċ ĉ ui Button Ġ* button Ċ ĉ ui Checkbox Ġ* checkbox ĊĊ ĉ page 1 5 Ġ= Ġnew Vertical Box () ĊĊ ĉ h box Ġ= Ġnew Horizontal Box () Ċ ĉ ui Box Append ( page 1 5 , Ġh box ?. reinterpret (), Ġ 0 ) ĊĊ ĉ ui Box Append ( h box , Ġui New Label (" Size " ?. reinterpret ()), Ġ 0 ) Ċ ĉ width Ġ= Ġui New Spin box ( INT _ MIN , ĠINT _ MAX ) Ċ ĉ ui Box Append ( h box , Ġwidth ?. reinterpret (), Ġ 1 ) Ċ ĉ height Ġ= Ġui New Spin box ( INT _ MIN , ĠINT _ MAX ) Ċ ĉ ui Box Append ( h box , Ġheight ?. reinterpret (), Ġ 1 ) Ċ ĉ fullscreen Ġ= Ġui New Checkbox (" Fullscreen ") Ċ ĉ ui Box Append ( h box , Ġfullscreen ?. reinterpret (), Ġ 0 ) ĊĊ ĉ ui Spin box On Changed ( width , Ġsize Width , Ġw ) Ċ ĉ ui Spin box On Changed ( height , Ġsize Height , Ġw ) Ċ ĉ ui Checkbox On Toggle d ( fullscreen , Ġset Fullscreen , Ġw ) Ċ ĉ ui Window On Content Size Changed ( w , Ġon Size , ĠNULL ) Ċ ĉ updates ize ( w ) ĊĊ ĉ checkbox Ġ= Ġui New Checkbox (" Border less ") Ċ ĉ ui Checkbox On Toggle d ( checkbox , Ġborder less , Ġw ) Ċ ĉ ui Box Append ( page 1 5 , Ġcheckbox ?. reinterpret (), Ġ 0 ) ĊĊ ĉ button Ġ= Ġui New Button (" Border less ĠRes izes ") Ċ ĉ ui Button On Clicked ( button , Ġborder Window Open , ĠNULL ) Ċ ĉ ui Box Append ( page 1 5 , Ġbutton ?. reinterpret (), Ġ 0 ) ĊĊ ĉ h box Ġ= Ġnew Horizontal Box () Ċ ĉ ui Box Append ( page 1 5 , Ġh box ?. reinterpret (), Ġ 1 ) ĊĊ ĉ ui Box Append ( h box , Ġui New Vertical Separator ( ?. reinterpret ()), Ġ 0 ) ĊĊ ĉ return Ġpage 1 5 Ċ } Ċ */