101 lines
2.6 KiB
Factor
101 lines
2.6 KiB
Factor
|
|
USING: kernel namespaces math quotations arrays hashtables sequences threads
|
|
opengl
|
|
opengl.gl
|
|
colors
|
|
ui
|
|
ui.gestures
|
|
ui.gadgets
|
|
ui.gadgets.slate
|
|
ui.gadgets.labels
|
|
ui.gadgets.buttons
|
|
ui.gadgets.frames
|
|
ui.gadgets.packs
|
|
ui.gadgets.grids
|
|
ui.gadgets.theme
|
|
ui.gadgets.handler
|
|
accessors
|
|
vars fry
|
|
rewrite-closures automata math.geometry.rect newfx ;
|
|
|
|
IN: automata.ui
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
: draw-point ( y x value -- ) 1 = [ swap glVertex2i ] [ 2drop ] if ;
|
|
|
|
: draw-line ( y line -- ) 0 swap [ [ 2dup ] dip draw-point 1+ ] each 2drop ;
|
|
|
|
: (draw-bitmap) ( bitmap -- ) 0 swap [ [ dup ] dip draw-line 1+ ] each drop ;
|
|
|
|
: draw-bitmap ( bitmap -- ) GL_POINTS glBegin (draw-bitmap) glEnd ;
|
|
|
|
: display ( -- ) black gl-color bitmap> draw-bitmap ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
VAR: slate
|
|
|
|
! Call a 'model' quotation with the current 'view'.
|
|
|
|
: with-view ( quot -- )
|
|
slate> rect-dim first >width
|
|
slate> rect-dim second >height
|
|
call
|
|
slate> relayout-1 ;
|
|
|
|
! Create a quotation that is appropriate for buttons and gesture handler.
|
|
|
|
: view-action ( quot -- quot ) '[ drop _ with-view ] closed-quot ;
|
|
|
|
: view-button ( label quot -- button ) [ <label> ] dip view-action <bevel-button> ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
! Helper word to make things less verbose
|
|
|
|
: random-rule ( -- ) set-interesting start-center ;
|
|
|
|
DEFER: automata-window
|
|
|
|
: automata-window* ( -- )
|
|
init-rule
|
|
set-interesting
|
|
|
|
<frame>
|
|
|
|
<shelf>
|
|
|
|
"1 - Center" [ start-center ] view-button add-gadget
|
|
"2 - Random" [ start-random ] view-button add-gadget
|
|
"3 - Continue" [ run-rule ] view-button add-gadget
|
|
"5 - Random Rule" [ random-rule ] view-button add-gadget
|
|
"n - New" [ automata-window ] view-button add-gadget
|
|
|
|
@top grid-add
|
|
|
|
C[ display ] <slate>
|
|
{ 400 400 } >>pdim
|
|
dup >slate
|
|
|
|
@center grid-add
|
|
|
|
<handler>
|
|
|
|
H{ }
|
|
T{ key-down f f "1" } [ start-center ] view-action is
|
|
T{ key-down f f "2" } [ start-random ] view-action is
|
|
T{ key-down f f "3" } [ run-rule ] view-action is
|
|
T{ key-down f f "5" } [ random-rule ] view-action is
|
|
T{ key-down f f "n" } [ automata-window ] view-action is
|
|
|
|
>>table
|
|
|
|
"Automata" open-window ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
: automata-window ( -- ) [ [ automata-window* ] with-scope ] with-ui ;
|
|
|
|
MAIN: automata-window
|