* makefile:
[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 Mono.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, 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                 public static extern void cairo_get_target_surface (IntPtr cr);
229
230                 //
231                 // Error status queries
232                 //
233                 [DllImport (CairoImp)]
234                 public static extern Cairo.Status cairo_get_status (IntPtr cr);
235
236                 [DllImport (CairoImp)]
237                 public static extern string cairo_get_status_string (IntPtr cr);
238
239                 //
240                 // Surface Manipulation
241                 //
242                 
243                 //
244                 // This is commented out because we don't have access
245                 // to the X11 Drawable and Visual types.
246                 //                
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);
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                 public enum Format {
343                         ARGB32 = 0,
344                         RGB24 = 1,
345                         A8 = 2,
346                         A1 = 4
347                 }
348
349                 public enum Operator {
350                         Clear = 0,
351                         Src = 1,
352                         Dst = 2,
353                         Over = 3,
354                         OverReverse = 4,
355                         In = 5,
356                         InReverse = 6,
357                         Out = 7,
358                         OutReverse = 8,
359                         Atop = 9,
360                         AtopReverse = 10,
361                         Xor = 11,
362                         Add = 12,
363                         Saturate = 13,
364                 
365                         DisjointClear = 16,
366                         DisjointSrc = 17,
367                         DisjointDst = 18,
368                         DisjointOver = 19,
369                         DisjointOverReverse = 20,
370                         DisjointIn = 21,
371                         DisjointInReverse = 22,
372                         DisjointOut = 23,
373                         DisjointOutReverse = 24,
374                         DisjointAtop = 25,
375                         DisjointAtopReverse = 26,
376                         DisjointXor = 27,
377
378                         ConjointClear = 32,
379                         ConjointSrc = 33,
380                         ConjointDst = 34,
381                         ConjointOver = 35,
382                         ConjointOverReverse = 36,
383                         ConjointIn = 37,
384                         ConjointInReverse = 38,
385                         ConjointOut = 39,
386                         ConjointOutReverse = 40,
387                         ConjointAtop = 41,
388                         ConjointAtopReverse = 42,
389                         ConjointXor = 43
390                 }
391
392                 public enum FillRule {
393                         Winding,
394                         EvenOdd
395                 }
396
397                 public enum LineCap {
398                         Butt, Round, Square
399                 }
400
401                 public enum LineJoin {
402                         Miter, Round, Bevel
403                 }
404
405                 public enum Status {
406                         Success = 0,
407                         NoMemory,
408                         InvalidRestore,
409                         InvalidPopGroup,
410                         NoCurrentPoint,
411                         InvalidMatrix
412                 }
413
414                 public enum Filter {
415                         Fast,
416                         Good,
417                         Best,
418                         Nearest,
419                         Bilinear
420                 }
421         }
422 }