| 
									
										
										
										
											2008-04-06 17:36:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | USING: kernel namespaces threads combinators sequences arrays | 
					
						
							| 
									
										
										
										
											2008-04-08 03:26:02 -04:00
										 |  |  |        math math.functions math.ranges random | 
					
						
							| 
									
										
										
										
											2008-04-06 17:36:12 -04:00
										 |  |  |        opengl.gl opengl.glu vars multi-methods shuffle | 
					
						
							|  |  |  |        ui | 
					
						
							|  |  |  |        ui.gestures | 
					
						
							|  |  |  |        ui.gadgets | 
					
						
							|  |  |  |        combinators | 
					
						
							|  |  |  |        combinators.lib | 
					
						
							|  |  |  |        combinators.cleave | 
					
						
							| 
									
										
										
										
											2008-04-09 22:01:00 -04:00
										 |  |  |        rewrite-closures fry accessors newfx | 
					
						
							| 
									
										
										
										
											2008-04-06 17:36:12 -04:00
										 |  |  |        processing.color | 
					
						
							|  |  |  |        processing.gadget ;
 | 
					
						
							|  |  |  |         | 
					
						
							|  |  |  | IN: processing | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-08 03:26:02 -04:00
										 |  |  | : 2random ( a b -- num ) 2dup swap - 100 / <range> random ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : 1random ( b -- num ) 0 swap 2random ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : chance ( fraction -- ? ) 0 1 2random > ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : percent-chance ( percent -- ? ) 100 / chance ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-10 23:34:26 -04:00
										 |  |  | ! : at-fraction ( seq fraction -- val ) over length 1- * nth-at ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : at-fraction ( seq fraction -- val ) over length 1- * at ;
 | 
					
						
							| 
									
										
										
										
											2008-04-09 22:01:00 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : at-fraction-of ( fraction seq -- val ) swap at-fraction ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-06 17:36:12 -04:00
										 |  |  | VAR: fill-color | 
					
						
							|  |  |  | VAR: stroke-color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: set-color ( value -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | METHOD: set-color { number } dup dup glColor3d ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | METHOD: set-color { array } | 
					
						
							|  |  |  |    dup length
 | 
					
						
							|  |  |  |    { | 
					
						
							|  |  |  |      { 2 [ first2 >r dup dup r> glColor4d ] } | 
					
						
							|  |  |  |      { 3 [ first3 glColor3d ] } | 
					
						
							|  |  |  |      { 4 [ first4 glColor4d ] } | 
					
						
							|  |  |  |    } | 
					
						
							|  |  |  |    case ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | METHOD: set-color { rgba } | 
					
						
							|  |  |  |   { [ red>> ] [ green>> ] [ blue>> ] [ alpha>> ] } cleave glColor4d ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : fill   ( value -- )  >fill-color ;
 | 
					
						
							|  |  |  | : stroke ( value -- ) >stroke-color ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : no-fill ( -- )
 | 
					
						
							|  |  |  |   fill-color> | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       { [ dup number? ] [ 0 2array fill ] } | 
					
						
							|  |  |  |       { [ t           ] | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |           [ drop 0 ] [ length 1- ] [ ] tri set-nth
 | 
					
						
							|  |  |  |         ] } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   cond ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : no-stroke ( -- )
 | 
					
						
							|  |  |  |   stroke-color> | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       { [ dup number? ] [ 0 2array stroke ] } | 
					
						
							|  |  |  |       { [ t           ] | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |           [ drop 0 ] [ length 1- ] [ ] tri set-nth
 | 
					
						
							|  |  |  |         ] } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   cond ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : stroke-weight ( w -- ) glLineWidth ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : point* ( x y -- )
 | 
					
						
							|  |  |  |   stroke-color> set-color | 
					
						
							|  |  |  |   GL_POINTS glBegin | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |   glEnd ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : point ( seq -- ) first2 point* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : line ( x1 y1 x2 y2 -- )
 | 
					
						
							|  |  |  |   stroke-color> set-color | 
					
						
							|  |  |  |   GL_LINES glBegin | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |   glEnd ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : triangle ( x1 y1 x2 y2 x3 y3 -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   GL_FRONT_AND_BACK GL_FILL glPolygonMode | 
					
						
							|  |  |  |   fill-color> set-color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   6 ndup | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   GL_TRIANGLES glBegin | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |   glEnd | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   GL_FRONT_AND_BACK GL_LINE glPolygonMode | 
					
						
							|  |  |  |   stroke-color> set-color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   GL_TRIANGLES glBegin | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |   glEnd ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : quad-vertices ( x1 y1 x2 y2 x3 y3 x4 y4 -- )
 | 
					
						
							|  |  |  |   GL_POLYGON glBegin | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |     glVertex2d | 
					
						
							|  |  |  |   glEnd ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : quad ( x1 y1 x2 y2 x3 y3 x4 y4 -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   8 ndup | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   GL_FRONT_AND_BACK GL_FILL glPolygonMode | 
					
						
							|  |  |  |   fill-color> set-color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   quad-vertices | 
					
						
							|  |  |  |    | 
					
						
							|  |  |  |   GL_FRONT_AND_BACK GL_LINE glPolygonMode | 
					
						
							|  |  |  |   stroke-color> set-color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   quad-vertices ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : rect-vertices ( x y width height -- )
 | 
					
						
							|  |  |  |   GL_POLYGON glBegin | 
					
						
							|  |  |  |     [ 2drop                      glVertex2d ] 4keep
 | 
					
						
							|  |  |  |     [ drop swap >r + 1- r>       glVertex2d ] 4keep
 | 
					
						
							|  |  |  |     [ >r swap >r + 1- r> r> + 1- glVertex2d ] 4keep
 | 
					
						
							|  |  |  |     [ nip + 1-                   glVertex2d ] 4keep
 | 
					
						
							|  |  |  |     4drop
 | 
					
						
							|  |  |  |   glEnd ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : rect ( x y width height -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   4dup
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   GL_FRONT_AND_BACK GL_FILL glPolygonMode | 
					
						
							|  |  |  |   fill-color> set-color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   rect-vertices | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   GL_FRONT_AND_BACK GL_LINE glPolygonMode | 
					
						
							|  |  |  |   stroke-color> set-color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   rect-vertices ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : ellipse-disk ( x y width height -- )
 | 
					
						
							|  |  |  |   glPushMatrix | 
					
						
							|  |  |  |     >r >r | 
					
						
							|  |  |  |     0 glTranslated | 
					
						
							|  |  |  |     r> r> 1 glScaled | 
					
						
							|  |  |  |     gluNewQuadric | 
					
						
							|  |  |  |       dup 0 0.5 20 1 gluDisk | 
					
						
							|  |  |  |     gluDeleteQuadric | 
					
						
							|  |  |  |   glPopMatrix ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : ellipse-center ( x y width height -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   4dup
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   GL_FRONT_AND_BACK GL_FILL glPolygonMode | 
					
						
							|  |  |  |   stroke-color> set-color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ellipse-disk | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   GL_FRONT_AND_BACK GL_FILL glPolygonMode | 
					
						
							|  |  |  |   fill-color> set-color | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   [ 2 - ] bi@ ! [ stroke-width 1+ - ] bi@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ellipse-disk ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: CENTER | 
					
						
							|  |  |  | SYMBOL: RADIUS | 
					
						
							|  |  |  | SYMBOL: CORNER | 
					
						
							|  |  |  | SYMBOL: CORNERS | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: ellipse-mode-value | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : ellipse-mode ( val -- ) ellipse-mode-value set ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : ellipse-radius ( x y hori vert -- ) [ 2 * ] bi@ ellipse-center ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : ellipse-corner ( x y width height -- )
 | 
					
						
							|  |  |  |   [ drop nip     2 / + ] 4keep
 | 
					
						
							|  |  |  |   [ nip rot drop 2 / + ] 4keep
 | 
					
						
							|  |  |  |   [ >r >r 2drop r> r>  ] 4keep
 | 
					
						
							|  |  |  |   4drop
 | 
					
						
							|  |  |  |   ellipse-center ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : ellipse-corners ( x1 y1 x2 y2 -- )
 | 
					
						
							|  |  |  |   [ drop nip     + 2 /    ] 4keep
 | 
					
						
							|  |  |  |   [ nip rot drop + 2 /    ] 4keep
 | 
					
						
							|  |  |  |   [ drop nip     - abs 1+ ] 4keep
 | 
					
						
							|  |  |  |   [ nip rot drop - abs 1+ ] 4keep
 | 
					
						
							|  |  |  |   4drop
 | 
					
						
							|  |  |  |   ellipse-center ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : ellipse ( a b c d -- )
 | 
					
						
							|  |  |  |   ellipse-mode-value get
 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       { CENTER  [ ellipse-center ] } | 
					
						
							|  |  |  |       { RADIUS  [ ellipse-radius ] } | 
					
						
							|  |  |  |       { CORNER  [ ellipse-corner ] } | 
					
						
							|  |  |  |       { CORNERS [ ellipse-corners ] } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   case ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : circle ( pos size -- ) [ first2 ] [ dup ] bi* ellipse ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | USING: multi-methods ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | GENERIC: background ( value -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | METHOD: background { number } | 
					
						
							|  |  |  |    dup dup 1 glClearColor | 
					
						
							|  |  |  |    GL_COLOR_BUFFER_BIT glClear ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | METHOD: background { array } | 
					
						
							|  |  |  |    dup length
 | 
					
						
							|  |  |  |    { | 
					
						
							|  |  |  |      { 2 [ first2 >r dup dup r> glClearColor GL_COLOR_BUFFER_BIT glClear ] } | 
					
						
							|  |  |  |      { 3 [ first3 1             glClearColor GL_COLOR_BUFFER_BIT glClear ] } | 
					
						
							|  |  |  |      { 4 [ first4               glClearColor GL_COLOR_BUFFER_BIT glClear ] } | 
					
						
							|  |  |  |    } | 
					
						
							|  |  |  |    case ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : translate ( x y -- ) 0 glTranslated ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : rotate ( angle -- ) 0 0 1 glRotated ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : mouse ( -- point ) hand-loc get ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : mouse-x mouse first  ;
 | 
					
						
							|  |  |  | : mouse-y mouse second ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | VAR: frame-rate-value | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : frame-rate ( fps -- ) 1000 swap / >frame-rate-value ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-09 22:01:00 -04:00
										 |  |  | ! VAR: slate | 
					
						
							| 
									
										
										
										
											2008-04-06 17:36:12 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | VAR: loop-flag | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : defaults ( -- )
 | 
					
						
							|  |  |  |   0.8    background | 
					
						
							|  |  |  |   0      >stroke-color | 
					
						
							|  |  |  |   1      >fill-color | 
					
						
							|  |  |  |   CENTER ellipse-mode | 
					
						
							|  |  |  |   60 frame-rate ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: size-val | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : size ( seq -- ) size-val set ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : size* ( width height -- ) 2array size-val set ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: setup-action | 
					
						
							|  |  |  | SYMBOL: draw-action | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! : setup ( quot -- ) closed-quot setup-action set ; | 
					
						
							|  |  |  | ! : draw  ( quot -- ) closed-quot draw-action  set ; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : setup ( quot -- ) setup-action set ;
 | 
					
						
							|  |  |  | : draw  ( quot -- ) draw-action  set ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: key-down-action | 
					
						
							|  |  |  | SYMBOL: key-up-action | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : key-down ( quot -- ) closed-quot key-down-action set ;
 | 
					
						
							|  |  |  | : key-up   ( quot -- ) closed-quot key-up-action   set ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: button-down-action | 
					
						
							|  |  |  | SYMBOL: button-up-action | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : button-down ( quot -- ) closed-quot button-down-action set ;
 | 
					
						
							|  |  |  | : button-up   ( quot -- ) closed-quot button-up-action   set ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : start-processing-thread ( -- )
 | 
					
						
							|  |  |  |   loop-flag get not
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |       loop-flag on
 | 
					
						
							|  |  |  |       [ | 
					
						
							|  |  |  |         [ loop-flag get ] | 
					
						
							|  |  |  |         processing-gadget get frame-rate-value> '[ , relayout-1 , sleep ] | 
					
						
							|  |  |  |         [ ] | 
					
						
							|  |  |  |         while
 | 
					
						
							|  |  |  |       ] | 
					
						
							|  |  |  |       in-thread | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |   when ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : get-size ( -- size ) processing-gadget get rect-dim ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : width  ( -- width  ) get-size first ;
 | 
					
						
							|  |  |  | : height ( -- height ) get-size second ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: setup-called | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : setup-called? ( -- ? ) setup-called get ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : run ( -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   loop-flag off
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   500 sleep | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <processing-gadget> | 
					
						
							|  |  |  |     size-val get >>dim | 
					
						
							|  |  |  |     dup "Processing" open-window | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     500 sleep | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     defaults | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     setup-called off
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |       setup-called? not
 | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |           setup-action get call
 | 
					
						
							|  |  |  |           setup-called on
 | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         [ | 
					
						
							|  |  |  |           draw-action get call
 | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |       if
 | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |       closed-quot >>action | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |     key-down-action get >>key-down | 
					
						
							|  |  |  |     key-up-action   get >>key-up | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     button-down-action get >>button-down | 
					
						
							|  |  |  |     button-up-action   get >>button-up | 
					
						
							|  |  |  |      | 
					
						
							|  |  |  |   processing-gadget set
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   start-processing-thread ;
 |