158 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			158 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Factor
		
	
	
|  | ! Copyright (C) 2008 Matthew Willis | ||
|  | ! See http://factorcode.org/license.txt for BSD license. | ||
|  | !
 | ||
|  | ! these samples are a subset of the samples on | ||
|  | ! http://cairographics.org/samples/ | ||
|  | USING: cairo cairo.ffi locals math.constants math | ||
|  | io.backend kernel alien.c-types libc namespaces | ||
|  | cairo-gadgets ui.gadgets accessors specialized-arrays | ||
|  | classes.struct ;
 | ||
|  | SPECIALIZED-ARRAY: double | ||
|  | IN: cairo-samples | ||
|  | 
 | ||
|  | TUPLE: arc-gadget < cairo-gadget ;
 | ||
|  | M:: arc-gadget render-cairo* ( gadget -- )
 | ||
|  |     128.0 :> xc | ||
|  |     128.0 :> yc | ||
|  |     100.0 :> radius | ||
|  |     pi 1/4 * :> angle1 | ||
|  |     pi :> angle2 | ||
|  |     cr 10.0 cairo_set_line_width | ||
|  |     cr xc yc radius angle1 angle2 cairo_arc | ||
|  |     cr cairo_stroke | ||
|  | 
 | ||
|  |     ! draw helping lines | ||
|  |     cr 1 0.2 0.2 0.6 cairo_set_source_rgba | ||
|  |     cr 6.0 cairo_set_line_width | ||
|  | 
 | ||
|  |     cr xc yc 10.0 0 2 pi * cairo_arc | ||
|  |     cr cairo_fill | ||
|  | 
 | ||
|  |     cr xc yc radius angle1 angle1 cairo_arc | ||
|  |     cr xc yc cairo_line_to | ||
|  |     cr xc yc radius angle2 angle2 cairo_arc | ||
|  |     cr xc yc cairo_line_to | ||
|  |     cr cairo_stroke | ||
|  |     ;
 | ||
|  | 
 | ||
|  | TUPLE: clip-gadget < cairo-gadget ;
 | ||
|  | M: clip-gadget render-cairo* ( gadget -- )
 | ||
|  |     drop
 | ||
|  |     cr 128 128 76.8 0 2 pi * cairo_arc | ||
|  |     cr cairo_clip | ||
|  |     cr cairo_new_path | ||
|  | 
 | ||
|  |     cr 0 0 256 256 cairo_rectangle | ||
|  |     cr cairo_fill | ||
|  |     cr 0 1 0 cairo_set_source_rgb | ||
|  |     cr 0 0 cairo_move_to | ||
|  |     cr 256 256 cairo_line_to | ||
|  |     cr 256 0 cairo_move_to | ||
|  |     cr 0 256 cairo_line_to | ||
|  |     cr 10 cairo_set_line_width | ||
|  |     cr cairo_stroke ;
 | ||
|  | 
 | ||
|  | TUPLE: clip-image-gadget < cairo-gadget ;
 | ||
|  | M:: clip-image-gadget render-cairo* ( gadget -- )
 | ||
|  |     "resource:misc/icons/Factor_128x128.png" | ||
|  |     normalize-path cairo_image_surface_create_from_png :> png | ||
|  |     png cairo_image_surface_get_width :> w | ||
|  |     png cairo_image_surface_get_height :> h | ||
|  |     cr 128 128 76.8 0 2 pi * cairo_arc | ||
|  |     cr cairo_clip | ||
|  |     cr cairo_new_path | ||
|  | 
 | ||
|  |     cr 192.0 w / 192.0 h / cairo_scale | ||
|  |     cr png 32 32 cairo_set_source_surface | ||
|  |     cr cairo_paint | ||
|  |     png cairo_surface_destroy ;
 | ||
|  | 
 | ||
|  | TUPLE: dash-gadget < cairo-gadget ;
 | ||
|  | M:: dash-gadget render-cairo* ( gadget -- )
 | ||
|  |     double-array{ 50 10 10 10 } underlying>> :> dashes | ||
|  |     4 :> ndash | ||
|  |     cr dashes ndash -50 cairo_set_dash | ||
|  |     cr 10 cairo_set_line_width | ||
|  |     cr 128.0 25.6 cairo_move_to | ||
|  |     cr 230.4 230.4 cairo_line_to | ||
|  |     cr -102.4 0 cairo_rel_line_to | ||
|  |     cr 51.2 230.4 51.2 128.0 128.0 128.0 cairo_curve_to | ||
|  |     cr cairo_stroke ;
 | ||
|  | 
 | ||
|  | TUPLE: gradient-gadget < cairo-gadget ;
 | ||
|  | M:: gradient-gadget render-cairo* ( gadget -- )
 | ||
|  |     0 0 0 256 cairo_pattern_create_linear :> pat | ||
|  |     115.2 102.4 25.6 102.4 102.4 128.0
 | ||
|  |     cairo_pattern_create_radial :> radial | ||
|  |     pat 1 0 0 0 1 cairo_pattern_add_color_stop_rgba | ||
|  |     pat 0 1 1 1 1 cairo_pattern_add_color_stop_rgba | ||
|  |     cr 0 0 256 256 cairo_rectangle | ||
|  |     cr pat cairo_set_source | ||
|  |     cr cairo_fill | ||
|  |     pat cairo_pattern_destroy | ||
|  | 
 | ||
|  |     radial 0 1 1 1 1 cairo_pattern_add_color_stop_rgba | ||
|  |     radial 1 0 0 0 1 cairo_pattern_add_color_stop_rgba | ||
|  |     cr radial cairo_set_source | ||
|  |     cr 128.0 128.0 76.8 0 2 pi * cairo_arc | ||
|  |     cr cairo_fill | ||
|  |     radial cairo_pattern_destroy ;
 | ||
|  | 
 | ||
|  | TUPLE: text-gadget < cairo-gadget ;
 | ||
|  | M: text-gadget render-cairo* ( gadget -- )
 | ||
|  |     drop
 | ||
|  |     cr "Serif" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_BOLD | ||
|  |     cairo_select_font_face | ||
|  |     cr 50 cairo_set_font_size | ||
|  |     cr 10 135 cairo_move_to | ||
|  |     cr "Hello" cairo_show_text | ||
|  | 
 | ||
|  |     cr 70 165 cairo_move_to | ||
|  |     cr "factor" cairo_text_path | ||
|  |     cr 0.5 0.5 1 cairo_set_source_rgb | ||
|  |     cr cairo_fill_preserve | ||
|  |     cr 0 0 0 cairo_set_source_rgb | ||
|  |     cr 2.56 cairo_set_line_width | ||
|  |     cr cairo_stroke | ||
|  | 
 | ||
|  |     ! draw helping lines | ||
|  |     cr 1 0.2 0.2 0.6 cairo_set_source_rgba | ||
|  |     cr 10 135 5.12 0 2 pi * cairo_arc | ||
|  |     cr cairo_close_path | ||
|  |     cr 70 165 5.12 0 2 pi * cairo_arc | ||
|  |     cr cairo_fill ;
 | ||
|  | 
 | ||
|  | TUPLE: utf8-gadget < cairo-gadget ;
 | ||
|  | M: utf8-gadget render-cairo* ( gadget -- )
 | ||
|  |     drop
 | ||
|  |     cr "Sans" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_NORMAL | ||
|  |     cairo_select_font_face | ||
|  |     cr 50 cairo_set_font_size | ||
|  |     cairo_text_extents_t malloc-struct | ||
|  |     cr "日本語" pick cairo_text_extents | ||
|  |     cr over
 | ||
|  |     [ width>> 2 / ] [ x_bearing>> ] bi +
 | ||
|  |     128 swap - pick
 | ||
|  |     [ height>> 2 / ] [ y_bearing>> ] bi +
 | ||
|  |     128 swap - cairo_move_to | ||
|  |     free | ||
|  |     cr "日本語" cairo_show_text | ||
|  | 
 | ||
|  |     cr 1 0.2 0.2 0.6 cairo_set_source_rgba | ||
|  |     cr 6 cairo_set_line_width | ||
|  |     cr 128 0 cairo_move_to | ||
|  |     cr 0 256 cairo_rel_line_to | ||
|  |     cr 0 128 cairo_move_to | ||
|  |     cr 256 0 cairo_rel_line_to | ||
|  |     cr cairo_stroke ;
 | ||
|  | 
 | ||
|  |  USING: quotations ui.gadgets.panes sequences ;
 | ||
|  |  : samples ( -- )
 | ||
|  |     { | ||
|  |         arc-gadget clip-gadget clip-image-gadget dash-gadget | ||
|  |         gradient-gadget text-gadget utf8-gadget | ||
|  |     } | ||
|  |     [ new { 256 256 } >>dim gadget. ] each ;
 | ||
|  | 
 | ||
|  | MAIN: samples |