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;
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 [DllImport (CairoImp)]
229 public static extern void cairo_get_target_surface (IntPtr cr);
232 // Error status queries
234 [DllImport (CairoImp)]
235 public static extern Cairo.Status cairo_get_status (IntPtr cr);
237 [DllImport (CairoImp)]
238 public static extern string cairo_get_status_string (IntPtr cr);
241 // Surface Manipulation
245 // This is commented out because we don't have access
246 // to the X11 Drawable and Visual types.
248 // [DllImport (CairoImp)]
249 // public static extern IntPtr cairo_surface_create_for_drawable (
250 // IntPtr display, Drawable drawable, IntPtr visual,
251 // Cairo.Format format, Colormap colormap);
253 [DllImport (CairoImp)]
254 public static extern IntPtr cairo_surface_create_for_image (
255 string data, Cairo.Format format, int width, int height, int stride);
257 [DllImport (CairoImp)]
258 public static extern IntPtr cairo_surface_create_similar (
259 IntPtr surface, Cairo.Format format, int width, int height);
261 [DllImport (CairoImp)]
262 public static extern IntPtr cairo_surface_create_similar_solid (
263 IntPtr surface, Cairo.Format format,
264 int width, int height, double red, double green, double blue, double alpha);
266 [DllImport (CairoImp)]
267 public static extern void cairo_surface_destroy (IntPtr surface);
269 [DllImport (CairoImp)]
270 public static extern Cairo.Status cairo_surface_put_image (
271 IntPtr surface, string data, int width, int height, int stride);
273 [DllImport (CairoImp)]
274 public static extern Cairo.Status cairo_surface_set_repeat (
275 IntPtr surface, int repeat);
277 [DllImport (CairoImp)]
278 public static extern Cairo.Status cairo_surface_set_matrix (
279 IntPtr surface, IntPtr matrix);
281 [DllImport (CairoImp)]
282 public static extern Cairo.Status cairo_surface_get_matrix (
283 IntPtr surface, ref IntPtr matrix);
285 [DllImport (CairoImp)]
286 public static extern Cairo.Status cairo_surface_set_filter (
287 IntPtr surface, Cairo.Filter filter);
293 [DllImport (CairoImp)]
294 public static extern IntPtr cairo_matrix_create ();
296 [DllImport (CairoImp)]
297 public static extern void cairo_matrix_destroy (IntPtr matrix);
299 [DllImport (CairoImp)]
300 public static extern Cairo.Status cairo_matrix_copy (
301 IntPtr matrix, out IntPtr other);
303 [DllImport (CairoImp)]
304 public static extern Cairo.Status cairo_matrix_set_identity (IntPtr matrix);
306 [DllImport (CairoImp)]
307 public static extern Cairo.Status cairo_matrix_set_affine (
309 double a, double b, double c, double d, double tx, double ty);
311 [DllImport (CairoImp)]
312 public static extern Cairo.Status cairo_matrix_get_affine (
314 out double a, out double b, out double c, out double d, out double tx, out double ty);
316 [DllImport (CairoImp)]
317 public static extern Cairo.Status cairo_matrix_translate (
318 IntPtr matrix, double tx, double ty);
320 [DllImport (CairoImp)]
321 public static extern Cairo.Status cairo_matrix_scale (
322 IntPtr matrix, double sx, double sy);
324 [DllImport (CairoImp)]
325 public static extern Cairo.Status cairo_matrix_rotate (
326 IntPtr matrix, double radians);
328 [DllImport (CairoImp)]
329 public static extern Cairo.Status cairo_matrix_invert (IntPtr matrix);
331 [DllImport (CairoImp)]
332 public static extern Cairo.Status cairo_matrix_multiply (
333 out IntPtr result, IntPtr a, IntPtr b);
335 [DllImport (CairoImp)]
336 public static extern Cairo.Status cairo_matrix_transform_distance (
337 IntPtr matrix, ref double dx, ref double dy);
339 [DllImport (CairoImp)]
340 public static extern Cairo.Status cairo_matrix_transform_point (
341 IntPtr matrix, ref double x, ref double y);
354 public enum Operator {
374 DisjointOverReverse = 20,
376 DisjointInReverse = 22,
378 DisjointOutReverse = 24,
380 DisjointAtopReverse = 26,
387 ConjointOverReverse = 36,
389 ConjointInReverse = 38,
391 ConjointOutReverse = 40,
393 ConjointAtopReverse = 42,
397 public enum FillRule {
402 public enum LineCap {
406 public enum LineJoin {