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 System.Drawing.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, IntPtr data, Cairo.Format format, int width, int height, int stride);
47 [DllImport (CairoImp)]
48 public static extern void cairo_set_target_drawble (IntPtr cr, IntPtr dpy, ulong drawable);
50 [DllImport (CairoImp)]
51 public static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
53 [DllImport (CairoImp)]
54 public static extern void cairo_set_rgb_color (IntPtr cr, double red, double green, double blue);
56 [DllImport (CairoImp)]
57 public static extern void cairo_set_alpha (IntPtr cr, double alpha);
59 [DllImport (CairoImp)]
60 public static extern void cairo_set_pattern (IntPtr cr, IntPtr pattern);
62 [DllImport (CairoImp)]
63 public static extern void cairo_set_tolerence (IntPtr cr, double tolerance);
65 [DllImport (CairoImp)]
66 public static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
68 [DllImport (CairoImp)]
69 public static extern void cairo_set_line_width (IntPtr cr, double width);
71 [DllImport (CairoImp)]
72 public static extern void cairo_set_line_cap (IntPtr cr, Cairo.LineCap line_cap);
74 [DllImport (CairoImp)]
75 public static extern void cairo_set_line_join (IntPtr cr, Cairo.LineJoin line_join);
77 [DllImport (CairoImp)]
78 public static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
80 [DllImport (CairoImp)]
81 public static extern void cairo_set_miter_limit (IntPtr cr, double limit);
83 [DllImport (CairoImp)]
84 public static extern void cairo_translate (IntPtr cr, double tx, double ty);
86 [DllImport (CairoImp)]
87 public static extern void cairo_scale (IntPtr cr, double sx, double sy);
89 [DllImport (CairoImp)]
90 public static extern void cairo_rotate (IntPtr cr, double angle);
92 [DllImport (CairoImp)]
93 public static extern void cairo_concat_matrix (IntPtr cr, IntPtr matrix);
95 [DllImport (CairoImp)]
96 public static extern void cairo_set_matrix (IntPtr cr, IntPtr matrix);
98 [DllImport (CairoImp)]
99 public static extern void cairo_default_matrix (IntPtr cr);
101 [DllImport (CairoImp)]
102 public static extern void cairo_identity_matrix (IntPtr cr);
104 [DllImport (CairoImp)]
105 public static extern void cairo_transform_point (IntPtr cr, ref double x, ref double y);
107 [DllImport (CairoImp)]
108 public static extern void cairo_transform_distance (IntPtr cr, ref double dx, ref double dy);
110 [DllImport (CairoImp)]
111 public static extern void cairo_inverse_transform_point (IntPtr cr, ref double x, ref double y);
113 [DllImport (CairoImp)]
114 public static extern void cairo_inverse_transform_distance (IntPtr cr, ref double dx, ref double dy);
119 [DllImport (CairoImp)]
120 public static extern void cairo_new_path (IntPtr cr);
122 [DllImport (CairoImp)]
123 public static extern void cairo_move_to (IntPtr cr, double x, double y);
125 [DllImport (CairoImp)]
126 public static extern void cairo_line_to (IntPtr cr, double x, double y);
128 [DllImport (CairoImp)]
129 public static extern void cairo_curve_to (
130 IntPtr cr, double x1, double y1, double x2, double y2, double x3, double y3);
132 [DllImport (CairoImp)]
133 public static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
135 [DllImport (CairoImp)]
136 public static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
138 [DllImport (CairoImp)]
139 public static extern void cairo_rel_curve_to (
140 IntPtr cr, double dx1, double dy1, double dx2, double dy2, double dx3, double dy3);
142 [DllImport (CairoImp)]
143 public static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
145 [DllImport (CairoImp)]
146 public static extern void cairo_close_path (IntPtr cr);
151 [DllImport (CairoImp)]
152 public static extern void cairo_stroke (IntPtr cr);
154 [DllImport (CairoImp)]
155 public static extern void cairo_fill (IntPtr cr);
157 [DllImport (CairoImp)]
158 public static extern void cairo_clip (IntPtr cr);
163 [DllImport (CairoImp)]
164 public static extern void cairo_select_font (IntPtr cr, string key);
166 [DllImport (CairoImp)]
167 public static extern void cairo_scale_font (IntPtr cr, double scale);
169 [DllImport (CairoImp)]
170 public static extern void cairo_transform_font (
171 IntPtr cr, double a, double b, double c, double d);
173 [DllImport (CairoImp)]
174 public static extern void cairo_text_extents (
175 IntPtr cr, string utf8,
176 ref double x, ref double y,
177 ref double width, ref double height,
178 ref double dx, ref double dy);
180 [DllImport (CairoImp)]
181 public static extern void cairo_show_text (IntPtr cr, string utf8);
186 [DllImport (CairoImp)]
187 public static extern void cairo_show_surface (IntPtr cr, IntPtr surface, int width, int height);
192 [DllImport (CairoImp)]
193 public static extern Cairo.Operator cairo_get_operator (IntPtr cr);
195 [DllImport (CairoImp)]
196 public static extern void cairo_get_rgb_color (
197 IntPtr cr, out double red, out double green, out double blue);
199 [DllImport (CairoImp)]
200 public static extern double cairo_get_alpha (IntPtr cr);
202 [DllImport (CairoImp)]
203 public static extern double cairo_get_tolerence (IntPtr cr);
205 [DllImport (CairoImp)]
206 public static extern void cairo_get_current_point (
207 IntPtr cr, out double x, out double y);
209 [DllImport (CairoImp)]
210 public static extern Cairo.FillRule cairo_get_fill_rule (IntPtr cr);
212 [DllImport (CairoImp)]
213 public static extern double cairo_get_line_width (IntPtr cr);
215 [DllImport (CairoImp)]
216 public static extern LineCap cairo_get_line_cap (IntPtr cr);
218 [DllImport (CairoImp)]
219 public static extern LineJoin cairo_get_line_join (IntPtr cr);
221 [DllImport (CairoImp)]
222 public static extern double cairo_get_miter_limit (IntPtr cr);
224 [DllImport (CairoImp)]
225 public static extern void cairo_get_matrix (
227 out double a, out double b,
228 out double c, out double d,
229 out double tx, out double ty);
231 [DllImport (CairoImp)]
232 public static extern void cairo_get_target_surface (IntPtr cr);
235 // Error status queries
237 [DllImport (CairoImp)]
238 public static extern Cairo.Status cairo_get_status (IntPtr cr);
240 [DllImport (CairoImp)]
241 public static extern string cairo_get_status_string (IntPtr cr);
244 // Surface Manipulation
247 [DllImport (CairoImp)]
248 public static extern IntPtr cairo_surface_create_for_drawable (
249 IntPtr display, ulong drawable, IntPtr visual,
250 Cairo.Format format, ulong 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);
353 public enum Operator {
373 DisjointOverReverse = 20,
375 DisjointInReverse = 22,
377 DisjointOutReverse = 24,
379 DisjointAtopReverse = 26,
386 ConjointOverReverse = 36,
388 ConjointInReverse = 38,
390 ConjointOutReverse = 40,
392 ConjointAtopReverse = 42,
396 public enum FillRule {
401 public enum LineCap {
405 public enum LineJoin {