Make all references to the enums (Cairo.Foo) be just
[mono.git] / mcs / class / System.Drawing / System.Drawing / impl / cairo / cairo.cs
1 //
2 // Cairo.cs
3 //
4 // Author: Duncan Mak (duncan@ximian.com)
5 //
6 // (C) Ximian, Inc. 2003
7 //
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.
11 //
12
13 using System;
14 using System.Drawing;
15 using System.Runtime.InteropServices;
16
17 namespace System.Drawing.Cairo {
18
19         public class Cairo
20         {
21                 const string CairoImp = "cairo";
22                 //
23                 // Manipulating state objects
24                 //
25                 [DllImport (CairoImp)]
26                 public static extern IntPtr cairo_create ();
27
28                 [DllImport (CairoImp)]
29                 public static extern IntPtr cairo_destroy (IntPtr cr);
30
31                 [DllImport (CairoImp)]
32                 public static extern void cairo_save (IntPtr cr);                
33
34                 [DllImport (CairoImp)]
35                 public static extern void cairo_restore (IntPtr cr);
36
37                 //
38                 // Modify state
39                 //
40                 [DllImport (CairoImp)]
41                 public static extern void cairo_set_target_surface (IntPtr cr, IntPtr surface);
42                                 
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);
46
47                 [DllImport (CairoImp)]
48                 public static extern void cairo_set_target_drawble (IntPtr cr, IntPtr dpy, ulong drawable);
49                 
50                 [DllImport (CairoImp)]
51                 public static extern void cairo_set_operator (IntPtr cr, Cairo.Operator op);
52
53                 [DllImport (CairoImp)]
54                 public static extern void cairo_set_rgb_color (IntPtr cr, double red, double green, double blue);
55
56                 [DllImport (CairoImp)]
57                 public static extern void cairo_set_alpha (IntPtr cr, double alpha);
58
59                 [DllImport (CairoImp)]
60                 public static extern void cairo_set_pattern (IntPtr cr, IntPtr pattern);
61
62                 [DllImport (CairoImp)]
63                 public static extern void cairo_set_tolerence (IntPtr cr, double tolerance);
64
65                 [DllImport (CairoImp)]
66                 public static extern void cairo_set_fill_rule (IntPtr cr, Cairo.FillRule fill_rule);
67
68                 [DllImport (CairoImp)]
69                 public static extern void cairo_set_line_width (IntPtr cr, double width);
70
71                 [DllImport (CairoImp)]
72                 public static extern void cairo_set_line_cap (IntPtr cr, Cairo.LineCap line_cap);
73
74                 [DllImport (CairoImp)]
75                 public static extern void cairo_set_line_join (IntPtr cr, Cairo.LineJoin line_join);
76
77                 [DllImport (CairoImp)]
78                 public static extern void cairo_set_dash (IntPtr cr, double [] dashes, int ndash, double offset);
79
80                 [DllImport (CairoImp)]
81                 public static extern void cairo_set_miter_limit (IntPtr cr, double limit);
82
83                 [DllImport (CairoImp)]
84                 public static extern void cairo_translate (IntPtr cr, double tx, double ty);
85
86                 [DllImport (CairoImp)]
87                 public static extern void cairo_scale (IntPtr cr, double sx, double sy);
88
89                 [DllImport (CairoImp)]                
90                 public static extern void cairo_rotate (IntPtr cr, double angle);
91
92                 [DllImport (CairoImp)]
93                 public static extern void cairo_concat_matrix (IntPtr cr, IntPtr matrix);                
94                 
95                 [DllImport (CairoImp)]
96                 public static extern void cairo_set_matrix (IntPtr cr, IntPtr matrix);
97                 
98                 [DllImport (CairoImp)]
99                 public static extern void cairo_default_matrix (IntPtr cr);
100
101                 [DllImport (CairoImp)]
102                 public static extern void cairo_identity_matrix (IntPtr cr);
103
104                 [DllImport (CairoImp)]
105                 public static extern void cairo_transform_point (IntPtr cr, ref double x, ref double y);
106
107                 [DllImport (CairoImp)]
108                 public static extern void cairo_transform_distance (IntPtr cr, ref double dx, ref double dy);
109
110                 [DllImport (CairoImp)]
111                 public static extern void cairo_inverse_transform_point (IntPtr cr, ref double x, ref double y);
112
113                 [DllImport (CairoImp)]
114                 public static extern void cairo_inverse_transform_distance (IntPtr cr, ref double dx, ref double dy);
115
116                 //
117                 // Path creation
118                 //
119                 [DllImport (CairoImp)]
120                 public static extern void cairo_new_path (IntPtr cr);
121
122                 [DllImport (CairoImp)]
123                 public static extern void cairo_move_to (IntPtr cr, double x, double y);
124
125                 [DllImport (CairoImp)]
126                 public static extern void cairo_line_to (IntPtr cr, double x, double y);
127
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);
131
132                 [DllImport (CairoImp)]
133                 public static extern void cairo_rel_move_to (IntPtr cr, double dx, double dy);
134
135                 [DllImport (CairoImp)]
136                 public static extern void cairo_rel_line_to (IntPtr cr, double dx, double dy);
137
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);
141
142                 [DllImport (CairoImp)]
143                 public static extern void cairo_rectangle (IntPtr cr, double x, double y, double width, double height);
144
145                 [DllImport (CairoImp)]
146                 public static extern void cairo_close_path (IntPtr cr);
147
148                 //
149                 // Painting
150                 //
151                 [DllImport (CairoImp)]
152                 public static extern void cairo_stroke (IntPtr cr);
153
154                 [DllImport (CairoImp)]
155                 public static extern void cairo_fill (IntPtr cr);
156
157                 [DllImport (CairoImp)]
158                 public static extern void cairo_clip (IntPtr cr);
159
160                 //
161                 // Font / Text
162                 //
163                 [DllImport (CairoImp)]
164                 public static extern void cairo_select_font (IntPtr cr, string key);
165
166                 [DllImport (CairoImp)]
167                 public static extern void cairo_scale_font (IntPtr cr, double scale);
168
169                 [DllImport (CairoImp)]
170                 public static extern void cairo_transform_font (
171                         IntPtr cr, double a, double b, double c, double d);
172
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);
179
180                 [DllImport (CairoImp)]
181                 public static extern void cairo_show_text (IntPtr cr, string utf8);
182
183                 //
184                 // Image
185                 //                
186                 [DllImport (CairoImp)]
187                 public static extern void cairo_show_surface (IntPtr cr, IntPtr surface, int width, int height);
188
189                 //
190                 // query
191                 //                                
192                 [DllImport (CairoImp)]
193                 public static extern Cairo.Operator cairo_get_operator (IntPtr cr);
194
195                 [DllImport (CairoImp)]
196                 public static extern void cairo_get_rgb_color (
197                         IntPtr cr, out double red, out double green, out double blue);
198
199                 [DllImport (CairoImp)]
200                 public static extern double cairo_get_alpha (IntPtr cr);
201
202                 [DllImport (CairoImp)]
203                 public static extern double cairo_get_tolerence (IntPtr cr);
204
205                 [DllImport (CairoImp)]
206                 public static extern void cairo_get_current_point (
207                         IntPtr cr, out double x, out double y);
208
209                 [DllImport (CairoImp)]
210                 public static extern Cairo.FillRule cairo_get_fill_rule (IntPtr cr);
211
212                 [DllImport (CairoImp)]
213                 public static extern double cairo_get_line_width (IntPtr cr);
214
215                 [DllImport (CairoImp)]
216                 public static extern LineCap cairo_get_line_cap (IntPtr cr);
217
218                 [DllImport (CairoImp)]
219                 public static extern LineJoin cairo_get_line_join (IntPtr cr);
220
221                 [DllImport (CairoImp)]
222                 public static extern double cairo_get_miter_limit (IntPtr cr);
223
224                 [DllImport (CairoImp)]
225                 public static extern void cairo_get_matrix (
226                         IntPtr cr,
227                         out double a, out double b,
228                         out double c, out double d,
229                         out double tx, out double ty);
230
231                 [DllImport (CairoImp)]
232                 public static extern void cairo_get_target_surface (IntPtr cr);
233
234                 //
235                 // Error status queries
236                 //
237                 [DllImport (CairoImp)]
238                 public static extern Cairo.Status cairo_get_status (IntPtr cr);
239
240                 [DllImport (CairoImp)]
241                 public static extern string cairo_get_status_string (IntPtr cr);
242
243                 //
244                 // Surface Manipulation
245                 //
246                 
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);
251
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);
255
256                 [DllImport (CairoImp)]
257                 public static extern IntPtr cairo_surface_create_similar (
258                         IntPtr surface, Cairo.Format format, int width, int height);
259
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);
264
265                 [DllImport (CairoImp)]                
266                 public static extern void cairo_surface_destroy (IntPtr surface);
267
268                 [DllImport (CairoImp)]                
269                 public static extern Cairo.Status cairo_surface_put_image (
270                         IntPtr surface, string data, int width, int height, int stride);
271
272                 [DllImport (CairoImp)]                
273                 public static extern Cairo.Status cairo_surface_set_repeat (
274                         IntPtr surface, int repeat);
275
276                 [DllImport (CairoImp)]                
277                 public static extern Cairo.Status cairo_surface_set_matrix (
278                         IntPtr surface, IntPtr matrix);
279
280                 [DllImport (CairoImp)]                
281                 public static extern Cairo.Status cairo_surface_get_matrix (
282                         IntPtr surface, ref IntPtr matrix);
283
284                 [DllImport (CairoImp)]                
285                 public static extern Cairo.Status cairo_surface_set_filter (
286                         IntPtr surface, Cairo.Filter filter);
287
288                 //
289                 // Matrix
290                 //
291
292                 [DllImport (CairoImp)]                
293                 public static extern IntPtr cairo_matrix_create ();
294
295                 [DllImport (CairoImp)]                
296                 public static extern void cairo_matrix_destroy (IntPtr matrix);
297
298                 [DllImport (CairoImp)]                                
299                 public static extern Cairo.Status cairo_matrix_copy (
300                         IntPtr matrix, out IntPtr other);
301
302                 [DllImport (CairoImp)]                                
303                 public static extern Cairo.Status cairo_matrix_set_identity (IntPtr matrix);
304
305                 [DllImport (CairoImp)]                                
306                 public static extern Cairo.Status cairo_matrix_set_affine (
307                         IntPtr matrix,
308                         double a, double b, double c, double d, double tx, double ty);
309
310                 [DllImport (CairoImp)]                                
311                 public static extern Cairo.Status cairo_matrix_get_affine (
312                         IntPtr matrix,
313                         out double a, out double b, out double c, out double d, out double tx, out double ty);
314
315                 [DllImport (CairoImp)]                                
316                 public static extern Cairo.Status cairo_matrix_translate (
317                         IntPtr matrix, double tx, double ty);
318
319                 [DllImport (CairoImp)]                                
320                 public static extern Cairo.Status cairo_matrix_scale (
321                         IntPtr matrix, double sx, double sy);
322
323                 [DllImport (CairoImp)]                                
324                 public static extern Cairo.Status cairo_matrix_rotate (
325                         IntPtr matrix, double radians);
326
327                 [DllImport (CairoImp)]                                
328                 public static extern Cairo.Status cairo_matrix_invert (IntPtr matrix);
329
330                 [DllImport (CairoImp)]                                
331                 public static extern Cairo.Status cairo_matrix_multiply (
332                         out IntPtr result, IntPtr a, IntPtr b);
333
334                 [DllImport (CairoImp)]                                
335                 public static extern Cairo.Status cairo_matrix_transform_distance (
336                         IntPtr matrix, ref double dx, ref double dy);
337
338                 [DllImport (CairoImp)]                                
339                 public static extern Cairo.Status cairo_matrix_transform_point (
340                         IntPtr matrix, ref double x, ref double y);
341         }
342
343         //
344         // Enumerations
345         //
346         public enum Format {
347                 ARGB32 = 0,
348                 RGB24 = 1,
349                 A8 = 2,
350                 A1 = 4
351         }
352
353         public enum Operator {
354                 Clear = 0,
355                 Src = 1,
356                 Dst = 2,
357                 Over = 3,
358                 OverReverse = 4,
359                 In = 5,
360                 InReverse = 6,
361                 Out = 7,
362                 OutReverse = 8,
363                 Atop = 9,
364                 AtopReverse = 10,
365                 Xor = 11,
366                 Add = 12,
367                 Saturate = 13,
368                 
369                 DisjointClear = 16,
370                 DisjointSrc = 17,
371                 DisjointDst = 18,
372                 DisjointOver = 19,
373                 DisjointOverReverse = 20,
374                 DisjointIn = 21,
375                 DisjointInReverse = 22,
376                 DisjointOut = 23,
377                 DisjointOutReverse = 24,
378                 DisjointAtop = 25,
379                 DisjointAtopReverse = 26,
380                 DisjointXor = 27,
381
382                 ConjointClear = 32,
383                 ConjointSrc = 33,
384                 ConjointDst = 34,
385                 ConjointOver = 35,
386                 ConjointOverReverse = 36,
387                 ConjointIn = 37,
388                 ConjointInReverse = 38,
389                 ConjointOut = 39,
390                 ConjointOutReverse = 40,
391                 ConjointAtop = 41,
392                 ConjointAtopReverse = 42,
393                 ConjointXor = 43
394         }
395
396         public enum FillRule {
397                 Winding,
398                 EvenOdd
399         }
400
401         public enum LineCap {
402                 Butt, Round, Square
403         }
404
405         public enum LineJoin {
406                 Miter, Round, Bevel
407         }
408
409         public enum Status {
410                 Success = 0,
411                 NoMemory,
412                 InvalidRestore,
413                 InvalidPopGroup,
414                 NoCurrentPoint,
415                 InvalidMatrix
416         }
417
418         public enum Filter {
419                 Fast,
420                 Good,
421                 Best,
422                 Nearest,
423                 Bilinear
424         }
425 }