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