2a6a6cfd06c9286512bfdfc50496973abfd819d6
[monky] / lua / cairo.pkg
1 $#include <cairo-features.h>
2 $#include <cairo-deprecated.h>
3 $#include <cairo.h>
4 $#include <cairo-xlib.h>
5 $#include <X11/Xlib.h>
6 $#include "libcairo-helper.h"
7 /*
8  * This code was mostly copied from cairo.h and cairo-xlib.h with comments
9  * removed.  The licence noticed below is present for the sake of clarity.
10  */
11
12 /* cairo - a vector graphics library with display and print output
13  *
14  * Copyright © 2002 University of Southern California
15  * Copyright © 2005 Red Hat, Inc.
16  *
17  * This library is free software; you can redistribute it and/or
18  * modify it either under the terms of the GNU Lesser General Public
19  * License version 2.1 as published by the Free Software Foundation
20  * (the "LGPL") or, at your option, under the terms of the Mozilla
21  * Public License Version 1.1 (the "MPL"). If you do not alter this
22  * notice, a recipient may use your version of this file under either
23  * the MPL or the LGPL.
24  *
25  * You should have received a copy of the LGPL along with this library
26  * in the file COPYING-LGPL-2.1; if not, write to the Free Software
27  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28  * You should have received a copy of the MPL along with this library
29  * in the file COPYING-MPL-1.1
30  *
31  * The contents of this file are subject to the Mozilla Public License
32  * Version 1.1 (the "License"); you may not use this file except in
33  * compliance with the License. You may obtain a copy of the License at
34  * http://www.mozilla.org/MPL/
35  *
36  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
37  * OF ANY KIND, either express or implied. See the LGPL or the MPL for
38  * the specific language governing rights and limitations.
39  *
40  * The Original Code is the cairo graphics library.
41  *
42  * The Initial Developer of the Original Code is University of Southern
43  * California.
44  *
45  * Contributor(s):
46  *      Carl D. Worth <cworth@cworth.org>
47  */
48
49 typedef enum _cairo_antialias {
50         CAIRO_ANTIALIAS_DEFAULT,
51         CAIRO_ANTIALIAS_NONE,
52         CAIRO_ANTIALIAS_GRAY,
53         CAIRO_ANTIALIAS_SUBPIXEL
54 } cairo_antialias_t;
55
56 typedef struct _cairo_matrix {
57         double xx;
58         double yx;
59         double xy;
60         double yy;
61         double x0;
62         double y0;
63         static tolua_outside cairo_matrix_t* create_cairo_matrix_t @ create();
64 } cairo_matrix_t;
65 typedef int cairo_bool_t;
66
67 typedef struct _cairo cairo_t;
68
69 typedef struct _cairo_surface cairo_surface_t;
70
71 typedef struct _cairo_pattern cairo_pattern_t;
72
73
74 typedef struct _cairo_user_data_key {
75         int unused;
76 } cairo_user_data_key_t;
77
78 typedef enum _cairo_status {
79         CAIRO_STATUS_SUCCESS = 0,
80         CAIRO_STATUS_NO_MEMORY,
81         CAIRO_STATUS_INVALID_RESTORE,
82         CAIRO_STATUS_INVALID_POP_GROUP,
83         CAIRO_STATUS_NO_CURRENT_POINT,
84         CAIRO_STATUS_INVALID_MATRIX,
85         CAIRO_STATUS_INVALID_STATUS,
86         CAIRO_STATUS_NULL_POINTER,
87         CAIRO_STATUS_INVALID_STRING,
88         CAIRO_STATUS_INVALID_PATH_DATA,
89         CAIRO_STATUS_READ_ERROR,
90         CAIRO_STATUS_WRITE_ERROR,
91         CAIRO_STATUS_SURFACE_FINISHED,
92         CAIRO_STATUS_SURFACE_TYPE_MISMATCH,
93         CAIRO_STATUS_PATTERN_TYPE_MISMATCH,
94         CAIRO_STATUS_INVALID_CONTENT,
95         CAIRO_STATUS_INVALID_FORMAT,
96         CAIRO_STATUS_INVALID_VISUAL,
97         CAIRO_STATUS_FILE_NOT_FOUND,
98         CAIRO_STATUS_INVALID_DASH,
99         CAIRO_STATUS_INVALID_DSC_COMMENT,
100         CAIRO_STATUS_INVALID_INDEX,
101         CAIRO_STATUS_CLIP_NOT_REPRESENTABLE,
102         CAIRO_STATUS_TEMP_FILE_ERROR,
103         CAIRO_STATUS_INVALID_STRIDE,
104         CAIRO_STATUS_FONT_TYPE_MISMATCH,
105         CAIRO_STATUS_USER_FONT_IMMUTABLE,
106         CAIRO_STATUS_USER_FONT_ERROR,
107         CAIRO_STATUS_NEGATIVE_COUNT,
108         CAIRO_STATUS_INVALID_CLUSTERS,
109         CAIRO_STATUS_INVALID_SLANT,
110         CAIRO_STATUS_INVALID_WEIGHT
111 } cairo_status_t;
112
113 typedef enum _cairo_content {
114         CAIRO_CONTENT_COLOR = 0x1000,
115         CAIRO_CONTENT_ALPHA = 0x2000,
116         CAIRO_CONTENT_COLOR_ALPHA = 0x3000
117 } cairo_content_t;
118
119 typedef enum _cairo_operator {
120         CAIRO_OPERATOR_CLEAR,
121
122         CAIRO_OPERATOR_SOURCE,
123         CAIRO_OPERATOR_OVER,
124         CAIRO_OPERATOR_IN,
125         CAIRO_OPERATOR_OUT,
126         CAIRO_OPERATOR_ATOP,
127
128         CAIRO_OPERATOR_DEST,
129         CAIRO_OPERATOR_DEST_OVER,
130         CAIRO_OPERATOR_DEST_IN,
131         CAIRO_OPERATOR_DEST_OUT,
132         CAIRO_OPERATOR_DEST_ATOP,
133
134         CAIRO_OPERATOR_XOR,
135         CAIRO_OPERATOR_ADD,
136         CAIRO_OPERATOR_SATURATE
137 } cairo_operator_t;
138
139 typedef enum _cairo_filter {
140         CAIRO_FILTER_FAST,
141         CAIRO_FILTER_GOOD,
142         CAIRO_FILTER_BEST,
143         CAIRO_FILTER_NEAREST,
144         CAIRO_FILTER_BILINEAR,
145         CAIRO_FILTER_GAUSSIAN
146 } cairo_filter_t;
147
148 cairo_surface_t *cairo_xlib_surface_create(Display * dpy,
149                 Drawable drawable,
150                 Visual * visual, int width, int height);
151
152 cairo_surface_t *cairo_xlib_surface_create_for_bitmap(Display * dpy,
153                 Pixmap bitmap,
154                 Screen * screen, int width, int height);
155
156 void cairo_xlib_surface_set_size(cairo_surface_t * surface, int width, int height);
157
158 void cairo_xlib_surface_set_drawable(cairo_surface_t * surface, Drawable
159                 drawable, int width, int height);
160
161 Display *cairo_xlib_surface_get_display(cairo_surface_t * surface);
162
163 Drawable cairo_xlib_surface_get_drawable(cairo_surface_t * surface);
164
165 Screen *cairo_xlib_surface_get_screen(cairo_surface_t * surface);
166
167 Visual *cairo_xlib_surface_get_visual(cairo_surface_t * surface);
168
169 int cairo_xlib_surface_get_depth(cairo_surface_t * surface);
170
171 int cairo_xlib_surface_get_width(cairo_surface_t * surface);
172
173 int cairo_xlib_surface_get_height(cairo_surface_t * surface);
174
175 int cairo_version(void);
176
177 const char *cairo_version_string(void);
178
179 cairo_t *cairo_create(cairo_surface_t * target);
180
181 cairo_t *cairo_reference(cairo_t * cr);
182
183 void cairo_destroy(cairo_t * cr);
184
185 unsigned int cairo_get_reference_count(cairo_t * cr);
186
187 void *cairo_get_user_data(cairo_t * cr, const cairo_user_data_key_t * key);
188
189 cairo_status_t cairo_set_user_data(cairo_t * cr, const cairo_user_data_key_t *
190                 key, void *user_data, cairo_destroy_func_t destroy);
191
192 void cairo_save(cairo_t * cr);
193
194 void cairo_restore(cairo_t * cr);
195
196 void cairo_push_group(cairo_t * cr);
197
198 void cairo_push_group_with_content(cairo_t * cr, cairo_content_t content);
199
200 cairo_pattern_t *cairo_pop_group(cairo_t * cr);
201
202 void cairo_pop_group_to_source(cairo_t * cr);
203
204 void cairo_set_operator(cairo_t * cr, cairo_operator_t op);
205
206 void cairo_set_source(cairo_t * cr, cairo_pattern_t * source);
207
208 void cairo_set_source_rgb(cairo_t * cr, double red, double green, double blue);
209
210 void cairo_set_source_rgba(cairo_t * cr, double red, double green, double blue, double alpha);
211
212 void cairo_set_source_surface(cairo_t * cr, cairo_surface_t * surface, double x, double y);
213
214 void cairo_set_tolerance(cairo_t * cr, double tolerance);
215
216 void cairo_set_antialias(cairo_t * cr, cairo_antialias_t antialias);
217
218 typedef enum _cairo_fill_rule {
219         CAIRO_FILL_RULE_WINDING,
220         CAIRO_FILL_RULE_EVEN_ODD
221 } cairo_fill_rule_t;
222
223 void cairo_set_fill_rule(cairo_t * cr, cairo_fill_rule_t fill_rule);
224
225 void cairo_set_line_width(cairo_t * cr, double width);
226
227 typedef enum _cairo_line_cap {
228         CAIRO_LINE_CAP_BUTT,
229         CAIRO_LINE_CAP_ROUND,
230         CAIRO_LINE_CAP_SQUARE
231 } cairo_line_cap_t;
232
233 void cairo_set_line_cap(cairo_t * cr, cairo_line_cap_t line_cap);
234
235 typedef enum _cairo_line_join {
236         CAIRO_LINE_JOIN_MITER,
237         CAIRO_LINE_JOIN_ROUND,
238         CAIRO_LINE_JOIN_BEVEL
239 } cairo_line_join_t;
240
241 void cairo_set_line_join(cairo_t * cr, cairo_line_join_t line_join);
242
243 void cairo_set_dash(cairo_t * cr, const double *dashes, int num_dashes, double offset);
244
245 void cairo_set_miter_limit(cairo_t * cr, double limit);
246
247 void cairo_translate(cairo_t * cr, double tx, double ty);
248
249 void cairo_scale(cairo_t * cr, double sx, double sy);
250
251 void cairo_rotate(cairo_t * cr, double angle);
252
253 void cairo_transform(cairo_t * cr, cairo_matrix_t * matrix);
254
255 void cairo_set_matrix(cairo_t * cr, cairo_matrix_t * matrix);
256
257 void cairo_identity_matrix(cairo_t * cr);
258
259 void cairo_user_to_device(cairo_t * cr, double *x, double *y);
260
261 void cairo_user_to_device_distance(cairo_t * cr, double *dx, double *dy);
262
263 void cairo_device_to_user(cairo_t * cr, double *x, double *y);
264
265 void cairo_device_to_user_distance(cairo_t * cr, double *dx, double *dy);
266
267 void cairo_new_path(cairo_t * cr);
268
269 void cairo_move_to(cairo_t * cr, double x, double y);
270
271 void cairo_new_sub_path(cairo_t * cr);
272
273 void cairo_line_to(cairo_t * cr, double x, double y);
274
275 void cairo_curve_to(cairo_t * cr, double x1, double y1, double x2, double y2, double x3, double y3);
276
277 void cairo_arc(cairo_t * cr, double xc, double yc, double radius, double angle1, double angle2);
278
279 void cairo_arc_negative(cairo_t * cr, double xc, double yc, double radius,
280                 double angle1, double angle2);
281
282 void cairo_rel_move_to(cairo_t * cr, double dx, double dy);
283
284 void cairo_rel_line_to(cairo_t * cr, double dx, double dy);
285
286 void cairo_rel_curve_to(cairo_t * cr, double dx1, double dy1, double dx2,
287                 double dy2, double dx3, double dy3);
288
289 void cairo_rectangle(cairo_t * cr, double x, double y, double width, double height);
290
291 void cairo_close_path(cairo_t * cr);
292
293 void cairo_path_extents(cairo_t * cr, double *x1, double *y1, double *x2, double *y2);
294
295 void cairo_paint(cairo_t * cr);
296
297 void cairo_paint_with_alpha(cairo_t * cr, double alpha);
298
299 void cairo_mask(cairo_t * cr, cairo_pattern_t * pattern);
300
301 void cairo_mask_surface(cairo_t * cr, cairo_surface_t * surface, double
302                 surface_x, double surface_y);
303
304 void cairo_stroke(cairo_t * cr);
305
306 void cairo_stroke_preserve(cairo_t * cr);
307
308 void cairo_fill(cairo_t * cr);
309
310 void cairo_fill_preserve(cairo_t * cr);
311
312 void cairo_copy_page(cairo_t * cr);
313
314 void cairo_show_page(cairo_t * cr);
315
316 cairo_bool_t cairo_in_stroke(cairo_t * cr, double x, double y);
317
318 cairo_bool_t cairo_in_fill(cairo_t * cr, double x, double y);
319
320 void cairo_stroke_extents(cairo_t * cr, double *x1, double *y1, double *x2, double *y2);
321
322 void cairo_fill_extents(cairo_t * cr, double *x1, double *y1, double *x2, double *y2);
323
324 void cairo_reset_clip(cairo_t * cr);
325
326 void cairo_clip(cairo_t * cr);
327
328 void cairo_clip_preserve(cairo_t * cr);
329
330 void cairo_clip_extents(cairo_t * cr, double *x1, double *y1, double *x2, double *y2);
331
332 typedef struct _cairo_rectangle {
333         double x, y, width, height;
334 } cairo_rectangle_t;
335
336 typedef struct _cairo_rectangle_list {
337         cairo_status_t status;
338         cairo_rectangle_t *rectangles;
339         int num_rectangles;
340 } cairo_rectangle_list_t;
341
342 cairo_rectangle_list_t *cairo_copy_clip_rectangle_list(cairo_t * cr);
343
344 void cairo_rectangle_list_destroy(cairo_rectangle_list_t * rectangle_list);
345
346 typedef struct _cairo_scaled_font cairo_scaled_font_t;
347
348 typedef struct _cairo_font_face cairo_font_face_t;
349
350 typedef struct {
351         unsigned long index;
352         double x;
353         double y;
354 } cairo_glyph_t;
355
356 cairo_glyph_t *cairo_glyph_allocate(int num_glyphs);
357
358 void cairo_glyph_free(cairo_glyph_t * glyphs);
359
360 typedef struct {
361         int num_bytes;
362         int num_glyphs;
363 } cairo_text_cluster_t;
364
365 cairo_text_cluster_t *cairo_text_cluster_allocate(int num_clusters);
366
367 void cairo_text_cluster_free(cairo_text_cluster_t * clusters);
368
369 typedef enum _cairo_text_cluster_flags {
370         CAIRO_TEXT_CLUSTER_FLAG_BACKWARD = 0x00000001
371 } cairo_text_cluster_flags_t;
372
373 typedef struct {
374         double x_bearing;
375         double y_bearing;
376         double width;
377         double height;
378         double x_advance;
379         double y_advance;
380         static tolua_outside cairo_text_extents_t* create_cairo_text_extents_t @ create();
381 } cairo_text_extents_t;
382
383 typedef struct {
384         double ascent;
385         double descent;
386         double height;
387         double max_x_advance;
388         double max_y_advance;
389         static tolua_outside cairo_font_extents_t* create_cairo_font_extents_t @ create();
390 } cairo_font_extents_t;
391
392 typedef enum _cairo_font_slant {
393         CAIRO_FONT_SLANT_NORMAL,
394         CAIRO_FONT_SLANT_ITALIC,
395         CAIRO_FONT_SLANT_OBLIQUE
396 } cairo_font_slant_t;
397
398 typedef enum _cairo_font_weight {
399         CAIRO_FONT_WEIGHT_NORMAL,
400         CAIRO_FONT_WEIGHT_BOLD
401 } cairo_font_weight_t;
402
403 typedef enum _cairo_subpixel_order {
404         CAIRO_SUBPIXEL_ORDER_DEFAULT,
405         CAIRO_SUBPIXEL_ORDER_RGB,
406         CAIRO_SUBPIXEL_ORDER_BGR,
407         CAIRO_SUBPIXEL_ORDER_VRGB,
408         CAIRO_SUBPIXEL_ORDER_VBGR
409 } cairo_subpixel_order_t;
410
411 typedef enum _cairo_hint_style {
412         CAIRO_HINT_STYLE_DEFAULT,
413         CAIRO_HINT_STYLE_NONE,
414         CAIRO_HINT_STYLE_SLIGHT,
415         CAIRO_HINT_STYLE_MEDIUM,
416         CAIRO_HINT_STYLE_FULL
417 } cairo_hint_style_t;
418
419 typedef enum _cairo_hint_metrics {
420         CAIRO_HINT_METRICS_DEFAULT,
421         CAIRO_HINT_METRICS_OFF,
422         CAIRO_HINT_METRICS_ON
423 } cairo_hint_metrics_t;
424
425 typedef struct _cairo_font_options cairo_font_options_t;
426
427 cairo_font_options_t *cairo_font_options_create(void);
428
429 cairo_font_options_t *cairo_font_options_copy(cairo_font_options_t * original);
430
431 void cairo_font_options_destroy(cairo_font_options_t * options);
432
433 cairo_status_t cairo_font_options_status(cairo_font_options_t * options);
434
435 void cairo_font_options_merge(cairo_font_options_t * options, cairo_font_options_t * other);
436
437 cairo_bool_t cairo_font_options_equal(cairo_font_options_t * options,
438                 cairo_font_options_t * other);
439
440 unsigned long cairo_font_options_hash(cairo_font_options_t * options);
441
442 void cairo_font_options_set_antialias(cairo_font_options_t * options, cairo_antialias_t antialias);
443 cairo_antialias_t cairo_font_options_get_antialias(cairo_font_options_t * options);
444
445 void cairo_font_options_set_subpixel_order(cairo_font_options_t * options,
446                 cairo_subpixel_order_t subpixel_order);
447 cairo_subpixel_order_t cairo_font_options_get_subpixel_order(cairo_font_options_t * options);
448
449 void cairo_font_options_set_hint_style(cairo_font_options_t * options, cairo_hint_style_t hint_style);
450 cairo_hint_style_t cairo_font_options_get_hint_style(cairo_font_options_t * options);
451
452 void cairo_font_options_set_hint_metrics(cairo_font_options_t * options,
453                 cairo_hint_metrics_t hint_metrics);
454 cairo_hint_metrics_t cairo_font_options_get_hint_metrics(cairo_font_options_t * options);
455
456 void cairo_select_font_face(cairo_t * cr,
457                 const char *family, cairo_font_slant_t slant, cairo_font_weight_t weight);
458
459 void cairo_set_font_size(cairo_t * cr, double size);
460
461 void cairo_set_font_matrix(cairo_t * cr, cairo_matrix_t * matrix);
462
463 void cairo_get_font_matrix(cairo_t * cr, cairo_matrix_t * matrix);
464
465 void cairo_set_font_options(cairo_t * cr, cairo_font_options_t * options);
466
467 void cairo_get_font_options(cairo_t * cr, cairo_font_options_t * options);
468
469 void cairo_set_font_face(cairo_t * cr, cairo_font_face_t * font_face);
470
471 cairo_font_face_t *cairo_get_font_face(cairo_t * cr);
472
473 void cairo_set_scaled_font(cairo_t * cr, cairo_scaled_font_t * scaled_font);
474
475 cairo_scaled_font_t *cairo_get_scaled_font(cairo_t * cr);
476
477 void cairo_show_text(cairo_t * cr, const char *utf8);
478
479 void cairo_show_glyphs(cairo_t * cr, const cairo_glyph_t * glyphs, int num_glyphs);
480
481 void cairo_show_text_glyphs(cairo_t * cr,
482                 const char *utf8,
483                 int utf8_len,
484                 const cairo_glyph_t * glyphs,
485                 int num_glyphs,
486                 const cairo_text_cluster_t * clusters,
487                 int num_clusters, cairo_text_cluster_flags_t cluster_flags);
488
489 void cairo_text_path(cairo_t * cr, const char *utf8);
490
491 void cairo_glyph_path(cairo_t * cr, const cairo_glyph_t * glyphs, int num_glyphs);
492
493 void cairo_text_extents(cairo_t * cr, const char *utf8, cairo_text_extents_t * extents);
494
495 void cairo_glyph_extents(cairo_t * cr,
496                 const cairo_glyph_t * glyphs, int num_glyphs, cairo_text_extents_t * extents);
497
498 void cairo_font_extents(cairo_t * cr, cairo_font_extents_t * extents);
499
500 cairo_font_face_t *cairo_font_face_reference(cairo_font_face_t * font_face);
501
502 void cairo_font_face_destroy(cairo_font_face_t * font_face);
503
504 unsigned int cairo_font_face_get_reference_count(cairo_font_face_t * font_face);
505
506 cairo_status_t cairo_font_face_status(cairo_font_face_t * font_face);
507
508 typedef enum _cairo_font_type {
509         CAIRO_FONT_TYPE_TOY,
510         CAIRO_FONT_TYPE_FT,
511         CAIRO_FONT_TYPE_WIN32,
512         CAIRO_FONT_TYPE_QUARTZ,
513         CAIRO_FONT_TYPE_USER
514 } cairo_font_type_t;
515
516 cairo_font_type_t cairo_font_face_get_type(cairo_font_face_t * font_face);
517
518 void *cairo_font_face_get_user_data(cairo_font_face_t * font_face,
519                 const cairo_user_data_key_t * key);
520
521 cairo_status_t cairo_font_face_set_user_data(cairo_font_face_t * font_face,
522                 const cairo_user_data_key_t * key,
523                 void *user_data, cairo_destroy_func_t destroy);
524
525 cairo_scaled_font_t *cairo_scaled_font_create(cairo_font_face_t * font_face,
526                 cairo_matrix_t * font_matrix,
527                 cairo_matrix_t * ctm,
528                 cairo_font_options_t * options);
529
530 cairo_scaled_font_t *cairo_scaled_font_reference(cairo_scaled_font_t * scaled_font);
531
532 void cairo_scaled_font_destroy(cairo_scaled_font_t * scaled_font);
533
534 unsigned int cairo_scaled_font_get_reference_count(cairo_scaled_font_t * scaled_font);
535
536 cairo_status_t cairo_scaled_font_status(cairo_scaled_font_t * scaled_font);
537
538 cairo_font_type_t cairo_scaled_font_get_type(cairo_scaled_font_t * scaled_font);
539
540 void *cairo_scaled_font_get_user_data(cairo_scaled_font_t * scaled_font,
541                 const cairo_user_data_key_t * key);
542
543 cairo_status_t cairo_scaled_font_set_user_data(cairo_scaled_font_t * scaled_font,
544                 const cairo_user_data_key_t * key,
545                 void *user_data, cairo_destroy_func_t destroy);
546
547 void cairo_scaled_font_extents(cairo_scaled_font_t * scaled_font, cairo_font_extents_t * extents);
548
549 void cairo_scaled_font_text_extents(cairo_scaled_font_t * scaled_font,
550                 const char *utf8, cairo_text_extents_t * extents);
551
552 void cairo_scaled_font_glyph_extents(cairo_scaled_font_t * scaled_font,
553                 const cairo_glyph_t * glyphs,
554                 int num_glyphs, cairo_text_extents_t * extents);
555
556 cairo_status_t cairo_scaled_font_text_to_glyphs(cairo_scaled_font_t * scaled_font,
557                 double x,
558                 double y,
559                 const char *utf8,
560                 int utf8_len,
561                 cairo_glyph_t ** glyphs,
562                 int *num_glyphs,
563                 cairo_text_cluster_t ** clusters,
564                 int *num_clusters, cairo_text_cluster_flags_t * cluster_flags);
565
566 cairo_font_face_t *cairo_scaled_font_get_font_face(cairo_scaled_font_t * scaled_font);
567
568 void cairo_scaled_font_get_font_matrix(cairo_scaled_font_t * scaled_font, cairo_matrix_t * font_matrix);
569
570 void cairo_scaled_font_get_ctm(cairo_scaled_font_t * scaled_font, cairo_matrix_t * ctm);
571
572 void cairo_scaled_font_get_scale_matrix(cairo_scaled_font_t * scaled_font,
573                 cairo_matrix_t * scale_matrix);
574
575 void cairo_scaled_font_get_font_options(cairo_scaled_font_t * scaled_font,
576                 cairo_font_options_t * options);
577
578 cairo_font_face_t *cairo_toy_font_face_create(const char *family,
579                 cairo_font_slant_t slant, cairo_font_weight_t weight);
580
581 const char *cairo_toy_font_face_get_family(cairo_font_face_t * font_face);
582
583 cairo_font_slant_t cairo_toy_font_face_get_slant(cairo_font_face_t * font_face);
584
585 cairo_font_weight_t cairo_toy_font_face_get_weight(cairo_font_face_t * font_face);
586
587 cairo_font_face_t *cairo_user_font_face_create(void);
588
589 void cairo_user_font_face_set_init_func(cairo_font_face_t * font_face,
590                 cairo_user_scaled_font_init_func_t init_func);
591
592 void cairo_user_font_face_set_render_glyph_func(cairo_font_face_t * font_face,
593                 cairo_user_scaled_font_render_glyph_func_t
594                 render_glyph_func);
595
596 void cairo_user_font_face_set_text_to_glyphs_func(cairo_font_face_t * font_face,
597                 cairo_user_scaled_font_text_to_glyphs_func_t
598                 text_to_glyphs_func);
599
600 void cairo_user_font_face_set_unicode_to_glyph_func(cairo_font_face_t * font_face,
601                 cairo_user_scaled_font_unicode_to_glyph_func_t
602                 unicode_to_glyph_func);
603
604 cairo_user_scaled_font_init_func_t cairo_user_font_face_get_init_func(cairo_font_face_t * font_face);
605
606 cairo_user_scaled_font_render_glyph_func_t cairo_user_font_face_get_render_glyph_func(cairo_font_face_t * font_face);
607
608 cairo_user_scaled_font_text_to_glyphs_func_t cairo_user_font_face_get_text_to_glyphs_func(cairo_font_face_t * font_face);
609
610 cairo_user_scaled_font_unicode_to_glyph_func_t cairo_user_font_face_get_unicode_to_glyph_func(cairo_font_face_t * font_face);
611
612 cairo_operator_t cairo_get_operator(cairo_t * cr);
613
614 cairo_pattern_t *cairo_get_source(cairo_t * cr);
615
616 double cairo_get_tolerance(cairo_t * cr);
617
618 cairo_antialias_t cairo_get_antialias(cairo_t * cr);
619
620 cairo_bool_t cairo_has_current_point(cairo_t * cr);
621
622 void cairo_get_current_point(cairo_t * cr, double *x, double *y);
623
624 cairo_fill_rule_t cairo_get_fill_rule(cairo_t * cr);
625
626 double cairo_get_line_width(cairo_t * cr);
627
628 cairo_line_cap_t cairo_get_line_cap(cairo_t * cr);
629
630 cairo_line_join_t cairo_get_line_join(cairo_t * cr);
631
632 double cairo_get_miter_limit(cairo_t * cr);
633
634 int cairo_get_dash_count(cairo_t * cr);
635
636 void cairo_get_dash(cairo_t * cr, double *dashes, double *offset);
637
638 void cairo_get_matrix(cairo_t * cr, cairo_matrix_t * matrix);
639
640 cairo_surface_t *cairo_get_target(cairo_t * cr);
641
642 cairo_surface_t *cairo_get_group_target(cairo_t * cr);
643
644 typedef enum _cairo_path_data_type {
645         CAIRO_PATH_MOVE_TO,
646         CAIRO_PATH_LINE_TO,
647         CAIRO_PATH_CURVE_TO,
648         CAIRO_PATH_CLOSE_PATH
649 } cairo_path_data_type_t;
650
651 typedef union _cairo_path_data_t cairo_path_data_t;
652
653 typedef struct cairo_path {
654         cairo_status_t status;
655         cairo_path_data_t *data;
656         int num_data;
657 } cairo_path_t;
658
659 cairo_path_t *cairo_copy_path(cairo_t * cr);
660
661 cairo_path_t *cairo_copy_path_flat(cairo_t * cr);
662
663 void cairo_append_path(cairo_t * cr, const cairo_path_t * path);
664
665 void cairo_path_destroy(cairo_path_t * path);
666
667 cairo_status_t cairo_status(cairo_t * cr);
668
669 const char *cairo_status_to_string(cairo_status_t status);
670
671 cairo_surface_t *cairo_surface_create_similar(cairo_surface_t * other,
672                 cairo_content_t content, int width, int height);
673
674 cairo_surface_t *cairo_surface_reference(cairo_surface_t * surface);
675
676 void cairo_surface_finish(cairo_surface_t * surface);
677
678 void cairo_surface_destroy(cairo_surface_t * surface);
679
680 unsigned int cairo_surface_get_reference_count(cairo_surface_t * surface);
681
682 cairo_status_t cairo_surface_status(cairo_surface_t * surface);
683
684 typedef enum _cairo_surface_type {
685         CAIRO_SURFACE_TYPE_IMAGE,
686         CAIRO_SURFACE_TYPE_PDF,
687         CAIRO_SURFACE_TYPE_PS,
688         CAIRO_SURFACE_TYPE_XLIB,
689         CAIRO_SURFACE_TYPE_XCB,
690         CAIRO_SURFACE_TYPE_GLITZ,
691         CAIRO_SURFACE_TYPE_QUARTZ,
692         CAIRO_SURFACE_TYPE_WIN32,
693         CAIRO_SURFACE_TYPE_BEOS,
694         CAIRO_SURFACE_TYPE_DIRECTFB,
695         CAIRO_SURFACE_TYPE_SVG,
696         CAIRO_SURFACE_TYPE_OS2,
697         CAIRO_SURFACE_TYPE_WIN32_PRINTING,
698         CAIRO_SURFACE_TYPE_QUARTZ_IMAGE
699 } cairo_surface_type_t;
700
701 cairo_surface_type_t cairo_surface_get_type(cairo_surface_t * surface);
702
703 cairo_content_t cairo_surface_get_content(cairo_surface_t * surface);
704
705
706 cairo_status_t cairo_surface_write_to_png(cairo_surface_t * surface, const char *filename);
707
708 cairo_status_t cairo_surface_write_to_png_stream(cairo_surface_t * surface,
709                 cairo_write_func_t write_func, void *closure);
710
711 void *cairo_surface_get_user_data(cairo_surface_t * surface, const cairo_user_data_key_t * key);
712
713 cairo_status_t cairo_surface_set_user_data(cairo_surface_t * surface,
714                 const cairo_user_data_key_t * key,
715                 void *user_data, cairo_destroy_func_t destroy);
716
717 void cairo_surface_get_font_options(cairo_surface_t * surface, cairo_font_options_t * options);
718
719 void cairo_surface_flush(cairo_surface_t * surface);
720
721 void cairo_surface_mark_dirty(cairo_surface_t * surface);
722
723 void cairo_surface_mark_dirty_rectangle(cairo_surface_t * surface, int x, int y, int width, int height);
724
725 void cairo_surface_set_device_offset(cairo_surface_t * surface, double x_offset, double y_offset);
726
727 void cairo_surface_get_device_offset(cairo_surface_t * surface, double *x_offset, double *y_offset);
728
729 void cairo_surface_set_fallback_resolution(cairo_surface_t * surface,
730                 double x_pixels_per_inch, double y_pixels_per_inch);
731
732 void cairo_surface_get_fallback_resolution(cairo_surface_t * surface,
733                 double *x_pixels_per_inch, double *y_pixels_per_inch);
734
735 void cairo_surface_copy_page(cairo_surface_t * surface);
736
737 void cairo_surface_show_page(cairo_surface_t * surface);
738
739 cairo_bool_t cairo_surface_has_show_text_glyphs(cairo_surface_t * surface);
740
741 typedef enum _cairo_format {
742         CAIRO_FORMAT_ARGB32,
743         CAIRO_FORMAT_RGB24,
744         CAIRO_FORMAT_A8,
745         CAIRO_FORMAT_A1
746 } cairo_format_t;
747
748 cairo_surface_t *cairo_image_surface_create(cairo_format_t format, int width, int height);
749
750 int cairo_format_stride_for_width(cairo_format_t format, int width);
751
752 cairo_surface_t *cairo_image_surface_create_for_data(unsigned char *data,
753                 cairo_format_t format,
754                 int width, int height, int stride);
755
756 unsigned char *cairo_image_surface_get_data(cairo_surface_t * surface);
757
758 cairo_format_t cairo_image_surface_get_format(cairo_surface_t * surface);
759
760 int cairo_image_surface_get_width(cairo_surface_t * surface);
761
762 int cairo_image_surface_get_height(cairo_surface_t * surface);
763
764 int cairo_image_surface_get_stride(cairo_surface_t * surface);
765
766
767 cairo_surface_t *cairo_image_surface_create_from_png(const char *filename);
768
769 cairo_surface_t *cairo_image_surface_create_from_png_stream(cairo_read_func_t read_func,
770                 void *closure);
771
772 cairo_pattern_t *cairo_pattern_create_rgb(double red, double green, double blue);
773
774 cairo_pattern_t *cairo_pattern_create_rgba(double red, double green, double blue, double alpha);
775
776 cairo_pattern_t *cairo_pattern_create_for_surface(cairo_surface_t * surface);
777
778 cairo_pattern_t *cairo_pattern_create_linear(double x0, double y0, double x1, double y1);
779
780 cairo_pattern_t *cairo_pattern_create_radial(double cx0, double cy0, double radius0,
781                 double cx1, double cy1, double radius1);
782
783 cairo_pattern_t *cairo_pattern_reference(cairo_pattern_t * pattern);
784
785 void cairo_pattern_destroy(cairo_pattern_t * pattern);
786
787 unsigned int cairo_pattern_get_reference_count(cairo_pattern_t * pattern);
788
789 cairo_status_t cairo_pattern_status(cairo_pattern_t * pattern);
790
791 void *cairo_pattern_get_user_data(cairo_pattern_t * pattern, const cairo_user_data_key_t * key);
792
793 cairo_status_t cairo_pattern_set_user_data(cairo_pattern_t * pattern,
794                 const cairo_user_data_key_t * key,
795                 void *user_data, cairo_destroy_func_t destroy);
796
797 typedef enum _cairo_pattern_type {
798         CAIRO_PATTERN_TYPE_SOLID,
799         CAIRO_PATTERN_TYPE_SURFACE,
800         CAIRO_PATTERN_TYPE_LINEAR,
801         CAIRO_PATTERN_TYPE_RADIAL
802 } cairo_pattern_type_t;
803
804 cairo_pattern_type_t cairo_pattern_get_type(cairo_pattern_t * pattern);
805
806 void cairo_pattern_add_color_stop_rgb(cairo_pattern_t * pattern, double offset,
807                 double red, double green, double blue);
808
809 void cairo_pattern_add_color_stop_rgba(cairo_pattern_t * pattern, double
810                 offset, double red, double green, double blue, double alpha);
811
812 void cairo_pattern_set_matrix(cairo_pattern_t * pattern, cairo_matrix_t * matrix);
813
814 void cairo_pattern_get_matrix(cairo_pattern_t * pattern, cairo_matrix_t * matrix);
815
816 typedef enum _cairo_extend {
817         CAIRO_EXTEND_NONE,
818         CAIRO_EXTEND_REPEAT,
819         CAIRO_EXTEND_REFLECT,
820         CAIRO_EXTEND_PAD
821 } cairo_extend_t;
822
823 void cairo_pattern_set_extend(cairo_pattern_t * pattern, cairo_extend_t extend);
824
825 cairo_extend_t cairo_pattern_get_extend(cairo_pattern_t * pattern);
826
827 void cairo_pattern_set_filter(cairo_pattern_t * pattern, cairo_filter_t filter);
828
829 cairo_filter_t cairo_pattern_get_filter(cairo_pattern_t * pattern);
830
831 cairo_status_t cairo_pattern_get_rgba(cairo_pattern_t * pattern,
832                 double *red, double *green, double *blue, double *alpha);
833
834 cairo_status_t cairo_pattern_get_surface(cairo_pattern_t * pattern, cairo_surface_t ** surface);
835
836 cairo_status_t cairo_pattern_get_color_stop_rgba(cairo_pattern_t * pattern,
837                 int index, double *offset,
838                 double *red, double *green, double *blue, double *alpha);
839
840 cairo_status_t cairo_pattern_get_color_stop_count(cairo_pattern_t * pattern, int *count);
841
842 cairo_status_t cairo_pattern_get_linear_points(cairo_pattern_t * pattern,
843                 double *x0, double *y0, double *x1, double *y1);
844
845 cairo_status_t cairo_pattern_get_radial_circles(cairo_pattern_t * pattern,
846                 double *x0, double *y0, double *r0,
847                 double *x1, double *y1, double *r1);
848
849 void cairo_matrix_init(cairo_matrix_t * matrix, double xx, double yx, double
850                 xy, double yy, double x0, double y0);
851
852 void cairo_matrix_init_identity(cairo_matrix_t * matrix);
853
854 void cairo_matrix_init_translate(cairo_matrix_t * matrix, double tx, double ty);
855
856 void cairo_matrix_init_scale(cairo_matrix_t * matrix, double sx, double sy);
857
858 void cairo_matrix_init_rotate(cairo_matrix_t * matrix, double radians);
859
860 void cairo_matrix_translate(cairo_matrix_t * matrix, double tx, double ty);
861
862 void cairo_matrix_scale(cairo_matrix_t * matrix, double sx, double sy);
863
864 void cairo_matrix_rotate(cairo_matrix_t * matrix, double radians);
865
866 cairo_status_t cairo_matrix_invert(cairo_matrix_t * matrix);
867
868 void cairo_matrix_multiply(cairo_matrix_t * result, cairo_matrix_t * a,
869                 cairo_matrix_t * b);
870
871 void cairo_matrix_transform_distance(cairo_matrix_t * matrix, double *dx, double *dy);
872
873 void cairo_matrix_transform_point(cairo_matrix_t * matrix, double *x, double *y);
874
875 void cairo_debug_reset_static_data(void);