! Copyright (C) 2005 Slava Pestov. ! See http://factor.sf.net/license.txt for BSD license. IN: gadgets USING: alien generic kernel lists math namespaces sdl sdl-event sdl-video ; ! The world gadget is the top level gadget that all (visible) ! gadgets are contained in. The current world is stored in the ! world variable. TUPLE: world running? hand delegate ; : ( -- box ) 0 0 0 0 dup [ 216 216 216 ] color set-paint-property ; C: world ( -- world ) over set-world-delegate t over set-world-running? dup over set-world-hand ; : my-hand ( -- hand ) world get world-hand ; : draw-world ( -- ) world get dup gadget-redraw? [ [ f over set-gadget-redraw? dup draw-gadget world-hand draw-gadget ] with-surface ] [ drop ] ifte ; DEFER: handle-event : layout-world world get layout ; : run-world ( -- ) world get world-running? [ dup SDL_WaitEvent 1 = [ handle-event layout-world draw-world run-world ] [ drop ] ifte ] when ; : init-world ( w h -- ) t world get set-world-running? world get resize-gadget ; : world-flags SDL_HWSURFACE SDL_RESIZABLE bitor ; : start-world ( w h -- ) #! Start the Factor graphics subsystem with the given screen #! dimensions. 2dup init-world 0 world-flags default-paint [ [ run-world ] with-screen ] bind ; global [ world set ] bind