46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! (c) 2008 Joe Groff, see license for details
							 | 
						||
| 
								 | 
							
								USING: accessors alien.c-types continuations images kernel math
							 | 
						||
| 
								 | 
							
								sequences ui.gadgets ui.gadgets.private ui.gadgets.worlds
							 | 
						||
| 
								 | 
							
								ui.private ui ui.backend destructors locals ;
							 | 
						||
| 
								 | 
							
								IN: ui.offscreen
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TUPLE: offscreen-world < world ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: offscreen-world world-pixel-format-attributes
							 | 
						||
| 
								 | 
							
								    { offscreen T{ depth-bits { value 16 } } } ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: <offscreen-world> ( gadget title status -- world )
							 | 
						||
| 
								 | 
							
								    offscreen-world new-world ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: offscreen-world graft*
							 | 
						||
| 
								 | 
							
								    (open-offscreen-buffer) ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: offscreen-world ungraft*
							 | 
						||
| 
								 | 
							
								    [ (ungraft-world) ]
							 | 
						||
| 
								 | 
							
								    [ handle>> (close-offscreen-buffer) ]
							 | 
						||
| 
								 | 
							
								    [ reset-world ] tri ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: open-offscreen ( gadget -- world )
							 | 
						||
| 
								 | 
							
								    "" f <offscreen-world>
							 | 
						||
| 
								 | 
							
								    [ open-world-window ] [ relayout-1 ] [ ] tri
							 | 
						||
| 
								 | 
							
								    notify-queued ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: close-offscreen ( world -- )
							 | 
						||
| 
								 | 
							
								    ungraft notify-queued ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:: bgrx>bitmap ( alien w h -- image )
							 | 
						||
| 
								 | 
							
								    <image>
							 | 
						||
| 
								 | 
							
								        { w h } >>dim
							 | 
						||
| 
								 | 
							
								        alien w h * 4 * memory>byte-array >>bitmap
							 | 
						||
| 
								 | 
							
								        BGRX >>component-order ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: offscreen-world>bitmap ( world -- image )
							 | 
						||
| 
								 | 
							
								    offscreen-pixels bgrx>bitmap ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: do-offscreen ( gadget quot: ( offscreen-world -- ) -- )
							 | 
						||
| 
								 | 
							
								    [ open-offscreen ] dip
							 | 
						||
| 
								 | 
							
								    over [ slip ] [ close-offscreen ] [ ] cleanup ; inline
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: gadget>bitmap ( gadget -- image )
							 | 
						||
| 
								 | 
							
								    [ offscreen-world>bitmap ] do-offscreen ;
							 |