1 ! Copyright (C) 2008 Matthew Willis
2 ! See http://factorcode.org/license.txt for BSD license.
4 ! these samples are a subset of the samples on
5 ! http://cairographics.org/samples/
6 USING: cairo cairo.ffi locals math.constants math
7 io.backend kernel alien.c-types libc namespaces
8 cairo-gadgets ui.gadgets accessors specialized-arrays
10 SPECIALIZED-ARRAY: double
13 TUPLE: arc-gadget < cairo-gadget ;
14 M:: arc-gadget render-cairo* ( gadget -- )
20 cr 10.0 cairo_set_line_width
21 cr xc yc radius angle1 angle2 cairo_arc
25 cr 1 0.2 0.2 0.6 cairo_set_source_rgba
26 cr 6.0 cairo_set_line_width
28 cr xc yc 10.0 0 2 pi * cairo_arc
31 cr xc yc radius angle1 angle1 cairo_arc
32 cr xc yc cairo_line_to
33 cr xc yc radius angle2 angle2 cairo_arc
34 cr xc yc cairo_line_to
38 TUPLE: clip-gadget < cairo-gadget ;
39 M: clip-gadget render-cairo* ( gadget -- )
41 cr 128 128 76.8 0 2 pi * cairo_arc
45 cr 0 0 256 256 cairo_rectangle
47 cr 0 1 0 cairo_set_source_rgb
49 cr 256 256 cairo_line_to
50 cr 256 0 cairo_move_to
51 cr 0 256 cairo_line_to
52 cr 10 cairo_set_line_width
55 TUPLE: clip-image-gadget < cairo-gadget ;
56 M:: clip-image-gadget render-cairo* ( gadget -- )
57 "resource:misc/icons/Factor_128x128.png"
58 normalize-path cairo_image_surface_create_from_png :> png
59 png cairo_image_surface_get_width :> w
60 png cairo_image_surface_get_height :> h
61 cr 128 128 76.8 0 2 pi * cairo_arc
65 cr 192.0 w / 192.0 h / cairo_scale
66 cr png 32 32 cairo_set_source_surface
68 png cairo_surface_destroy ;
70 TUPLE: dash-gadget < cairo-gadget ;
71 M:: dash-gadget render-cairo* ( gadget -- )
72 double-array{ 50 10 10 10 } underlying>> :> dashes
74 cr dashes ndash -50 cairo_set_dash
75 cr 10 cairo_set_line_width
76 cr 128.0 25.6 cairo_move_to
77 cr 230.4 230.4 cairo_line_to
78 cr -102.4 0 cairo_rel_line_to
79 cr 51.2 230.4 51.2 128.0 128.0 128.0 cairo_curve_to
82 TUPLE: gradient-gadget < cairo-gadget ;
83 M:: gradient-gadget render-cairo* ( gadget -- )
84 0 0 0 256 cairo_pattern_create_linear :> pat
85 115.2 102.4 25.6 102.4 102.4 128.0
86 cairo_pattern_create_radial :> radial
87 pat 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
88 pat 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
89 cr 0 0 256 256 cairo_rectangle
90 cr pat cairo_set_source
92 pat cairo_pattern_destroy
94 radial 0 1 1 1 1 cairo_pattern_add_color_stop_rgba
95 radial 1 0 0 0 1 cairo_pattern_add_color_stop_rgba
96 cr radial cairo_set_source
97 cr 128.0 128.0 76.8 0 2 pi * cairo_arc
99 radial cairo_pattern_destroy ;
101 TUPLE: text-gadget < cairo-gadget ;
102 M: text-gadget render-cairo* ( gadget -- )
104 cr "Serif" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_BOLD
105 cairo_select_font_face
106 cr 50 cairo_set_font_size
107 cr 10 135 cairo_move_to
108 cr "Hello" cairo_show_text
110 cr 70 165 cairo_move_to
111 cr "factor" cairo_text_path
112 cr 0.5 0.5 1 cairo_set_source_rgb
113 cr cairo_fill_preserve
114 cr 0 0 0 cairo_set_source_rgb
115 cr 2.56 cairo_set_line_width
119 cr 1 0.2 0.2 0.6 cairo_set_source_rgba
120 cr 10 135 5.12 0 2 pi * cairo_arc
122 cr 70 165 5.12 0 2 pi * cairo_arc
125 TUPLE: utf8-gadget < cairo-gadget ;
126 M: utf8-gadget render-cairo* ( gadget -- )
128 cr "Sans" CAIRO_FONT_SLANT_NORMAL CAIRO_FONT_WEIGHT_NORMAL
129 cairo_select_font_face
130 cr 50 cairo_set_font_size
131 cairo_text_extents_t malloc-struct
132 cr "日本語" pick cairo_text_extents
134 [ width>> 2 / ] [ x_bearing>> ] bi +
136 [ height>> 2 / ] [ y_bearing>> ] bi +
137 128 swap - cairo_move_to
139 cr "日本語" cairo_show_text
141 cr 1 0.2 0.2 0.6 cairo_set_source_rgba
142 cr 6 cairo_set_line_width
143 cr 128 0 cairo_move_to
144 cr 0 256 cairo_rel_line_to
145 cr 0 128 cairo_move_to
146 cr 256 0 cairo_rel_line_to
149 USING: quotations ui.gadgets.panes sequences ;
152 arc-gadget clip-gadget clip-image-gadget dash-gadget
153 gradient-gadget text-gadget utf8-gadget
155 [ new { 256 256 } >>dim gadget. ] each ;