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