4 // Author: Duncan Mak (duncan@ximian.com)
6 // (C) Ximian, Inc. 2003
8 // This is a simplistic binding of the Cairo API to C#. All functions
9 // in cairo.h are transcribed into their C# equivelants and all
10 // enumerations are also listed here.
15 using System.Runtime.InteropServices;
17 namespace Mono.Cairo {
21 const string CairoImp = "cairo";
23 // Manipulating state objects
25 [DllImport (CairoImp)]
26 public static extern IntPtr cairo_create ();
28 [DllImport (CairoImp)]
29 public static extern IntPtr cairo_destroy (IntPtr cr);
31 [DllImport (CairoImp)]
32 public static extern void cairo_save (IntPtr cr);
34 [DllImport (CairoImp)]
35 public static extern void cairo_restore (IntPtr cr);
40 [DllImport (CairoImp)]
41 public static extern void cairo_set_target_surface (IntPtr cr, IntPtr surface);
43 [DllImport (CairoImp)]
44 public static extern void cairo_set_target_image (
45 IntPtr cr, string data, Cairo.Format format, int width, int height, int stride);
47 [DllImport (CairoImp)]
48 public static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
50 [DllImport (CairoImp)]
51 public static extern void cairo_set_rgb_color (IntPtr cr, double red, double green, double blue);
53 [DllImport (CairoImp)]
54 public static extern void cairo_set_alpha (IntPtr cr, double alpha);
56 [DllImport (CairoImp)]
57 public static extern void cairo_set_pattern (IntPtr cr, IntPtr pattern);
59 [DllImport (CairoImp)]
60 public static extern void cairo_set_tolerence (IntPtr cr, double tolerance);
62 [DllImport (CairoImp)]
63 public static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
65 [DllImport (CairoImp)]
66 public static extern void cairo_set_line_width (IntPtr cr, double width);
68 [DllImport (CairoImp)]
69 public static extern void cairo_set_line_cap (IntPtr cr, Cairo.LineCap line_cap);
71 [DllImport (CairoImp)]
72 public static extern void cairo_set_line_join (IntPtr cr, Cairo.LineJoin line_join);
74 [DllImport (CairoImp)]
75 public static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
77 [DllImport (CairoImp)]
78 public static extern void cairo_set_miter_limit (IntPtr cr, double limit);
80 [DllImport (CairoImp)]
81 public static extern void cairo_translate (IntPtr cr, double tx, double ty);
83 [DllImport (CairoImp)]
84 public static extern void cairo_scale (IntPtr cr, double sx, double sy);
86 [DllImport (CairoImp)]
87 public static extern void cairo_rotate (IntPtr cr, double angle);
89 [DllImport (CairoImp)]
90 public static extern void cairo_concat_matrix (IntPtr cr, IntPtr matrix);
92 [DllImport (CairoImp)]
93 public static extern void cairo_set_matrix (IntPtr cr, IntPtr matrix);
95 [DllImport (CairoImp)]
96 public static extern void cairo_default_matrix (IntPtr cr);
98 [DllImport (CairoImp)]
99 public static extern void cairo_identity_matrix (IntPtr cr);
101 [DllImport (CairoImp)]
102 public static extern void cairo_transform_point (IntPtr cr, ref double x, ref double y);
104 [DllImport (CairoImp)]
105 public static extern void cairo_transform_distance (IntPtr cr, ref double dx, ref double dy);
107 [DllImport (CairoImp)]
108 public static extern void cairo_inverse_transform_point (IntPtr cr, ref double x, ref double y);
110 [DllImport (CairoImp)]
111 public static extern void cairo_inverse_transform_distance (IntPtr cr, ref double dx, ref double dy);
116 [DllImport (CairoImp)]
117 public static extern void cairo_new_path (IntPtr cr);
119 [DllImport (CairoImp)]
120 public static extern void cairo_move_to (IntPtr cr, double x, double y);
122 [DllImport (CairoImp)]
123 public static extern void cairo_line_to (IntPtr cr, double x, double y);
125 [DllImport (CairoImp)]
126 public static extern void cairo_curve_to (
127 IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
129 [DllImport (CairoImp)]
130 public static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
132 [DllImport (CairoImp)]
133 public static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
135 [DllImport (CairoImp)]
136 public static extern void cairo_rel_curve_to (
137 IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
139 [DllImport (CairoImp)]
140 public static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
142 [DllImport (CairoImp)]
143 public static extern void cairo_close_path (IntPtr cr);
148 [DllImport (CairoImp)]
149 public static extern void cairo_stroke (IntPtr cr);
151 [DllImport (CairoImp)]
152 public static extern void cairo_fill (IntPtr cr);
154 [DllImport (CairoImp)]
155 public static extern void cairo_clip (IntPtr cr);
160 [DllImport (CairoImp)]
161 public static extern void cairo_select_font (IntPtr cr, string key);
163 [DllImport (CairoImp)]
164 public static extern void cairo_scale_font (IntPtr cr, double scale);
166 [DllImport (CairoImp)]
167 public static extern void cairo_transform_font (
168 IntPtr cr, double a, double b, double c, double d);
170 [DllImport (CairoImp)]
171 public static extern void cairo_text_extents (
172 IntPtr cr, string utf8,
173 ref double x, ref double y,
174 ref double width, ref double height,
175 ref double dx, ref double dy);
177 [DllImport (CairoImp)]
178 public static extern void cairo_show_text (IntPtr cr, string utf8);
183 [DllImport (CairoImp)]
184 public static extern void cairo_show_surface (IntPtr cr, IntPtr surface, int width, int height);
189 [DllImport (CairoImp)]
190 public static extern Cairo.Operator cairo_get_operator (IntPtr cr);
192 [DllImport (CairoImp)]
193 public static extern void cairo_get_rgb_color (
194 IntPtr cr, out double red, out double green, out double blue);
196 [DllImport (CairoImp)]
197 public static extern double cairo_get_alpha (IntPtr cr);
199 [DllImport (CairoImp)]
200 public static extern double cairo_get_tolerence (IntPtr cr);
202 [DllImport (CairoImp)]
203 public static extern void cairo_get_current_point (
204 IntPtr cr, out double x, out double y);
206 [DllImport (CairoImp)]
207 public static extern Cairo.FillRule cairo_get_fill_rule (IntPtr cr);
209 [DllImport (CairoImp)]
210 public static extern double cairo_get_line_width (IntPtr cr);
212 [DllImport (CairoImp)]
213 public static extern LineCap cairo_get_line_cap (IntPtr cr);
215 [DllImport (CairoImp)]
216 public static extern LineJoin cairo_get_line_join (IntPtr cr);
218 [DllImport (CairoImp)]
219 public static extern double cairo_get_miter_limit (IntPtr cr);
221 [DllImport (CairoImp)]
222 public static extern void cairo_get_matrix (
224 out double a, out double b,
225 out double c, out double d,
226 out double tx, out double ty);
228 public static extern void cairo_get_target_surface (IntPtr cr);
231 // Error status queries
233 [DllImport (CairoImp)]
234 public static extern Cairo.Status cairo_get_status (IntPtr cr);
236 [DllImport (CairoImp)]
237 public static extern string cairo_get_status_string (IntPtr cr);
240 // Surface Manipulation
244 // This is commented out because we don't have access
245 // to the X11 Drawable and Visual types.
247 // [DllImport (CairoImp)]
248 // public static extern IntPtr cairo_surface_create_for_drawable (
249 // IntPtr display, Drawable drawable, IntPtr visual,
250 // Cairo.Format format, Colormap colormap);
252 [DllImport (CairoImp)]
253 public static extern IntPtr cairo_surface_create_for_image (
254 string data, Cairo.Format format, int width, int height, int stride);
256 [DllImport (CairoImp)]
257 public static extern IntPtr cairo_surface_create_similar (
258 IntPtr surface, Cairo.Format format, int width, int height);
260 [DllImport (CairoImp)]
261 public static extern IntPtr cairo_surface_create_similar_solid (
262 IntPtr surface, Cairo.Format format,
263 int width, int height, double red, double green, double blue, double alpha);
265 [DllImport (CairoImp)]
266 public static extern void cairo_surface_destroy (IntPtr surface);
268 [DllImport (CairoImp)]
269 public static extern Cairo.Status cairo_surface_put_image (
270 IntPtr surface, string data, int width, int height, int stride);
272 [DllImport (CairoImp)]
273 public static extern Cairo.Status cairo_surface_set_repeat (
274 IntPtr surface, int repeat);
276 [DllImport (CairoImp)]
277 public static extern Cairo.Status cairo_surface_set_matrix (
278 IntPtr surface, IntPtr matrix);
280 [DllImport (CairoImp)]
281 public static extern Cairo.Status cairo_surface_get_matrix (
282 IntPtr surface, ref IntPtr matrix);
284 [DllImport (CairoImp)]
285 public static extern Cairo.Status cairo_surface_set_filter (
286 IntPtr surface, Cairo.Filter filter);
292 [DllImport (CairoImp)]
293 public static extern IntPtr cairo_matrix_create ();
295 [DllImport (CairoImp)]
296 public static extern void cairo_matrix_destroy (IntPtr matrix);
298 [DllImport (CairoImp)]
299 public static extern Cairo.Status cairo_matrix_copy (
300 IntPtr matrix, out IntPtr other);
302 [DllImport (CairoImp)]
303 public static extern Cairo.Status cairo_matrix_set_identity (IntPtr matrix);
305 [DllImport (CairoImp)]
306 public static extern Cairo.Status cairo_matrix_set_affine (
308 double a, double b, double c, double d, double tx, double ty);
310 [DllImport (CairoImp)]
311 public static extern Cairo.Status cairo_matrix_get_affine (
313 out double a, out double b, out double c, out double d, out double tx, out double ty);
315 [DllImport (CairoImp)]
316 public static extern Cairo.Status cairo_matrix_translate (
317 IntPtr matrix, double tx, double ty);
319 [DllImport (CairoImp)]
320 public static extern Cairo.Status cairo_matrix_scale (
321 IntPtr matrix, double sx, double sy);
323 [DllImport (CairoImp)]
324 public static extern Cairo.Status cairo_matrix_rotate (
325 IntPtr matrix, double radians);
327 [DllImport (CairoImp)]
328 public static extern Cairo.Status cairo_matrix_invert (IntPtr matrix);
330 [DllImport (CairoImp)]
331 public static extern Cairo.Status cairo_matrix_multiply (
332 out IntPtr result, IntPtr a, IntPtr b);
334 [DllImport (CairoImp)]
335 public static extern Cairo.Status cairo_matrix_transform_distance (
336 IntPtr matrix, ref double dx, ref double dy);
338 [DllImport (CairoImp)]
339 public static extern Cairo.Status cairo_matrix_transform_point (
340 IntPtr matrix, ref double x, ref double y);
349 public enum Operator {
369 DisjointOverReverse = 20,
371 DisjointInReverse = 22,
373 DisjointOutReverse = 24,
375 DisjointAtopReverse = 26,
382 ConjointOverReverse = 36,
384 ConjointInReverse = 38,
386 ConjointOutReverse = 40,
388 ConjointAtopReverse = 42,
392 public enum FillRule {
397 public enum LineCap {
401 public enum LineJoin {