source: project/release/4/cairo/trunk/cairo.scm @ 25837

Last change on this file since 25837 was 25837, checked in by Christian Kellermann, 9 years ago

cairo: fix stupid copy&paste error in image-surface-get-height

File size: 22.2 KB
Line 
1;; Cairo vector graphics bindings for Chicken Scheme
2;
3; Copyright (C) 2004, 2005 Michael Bridgen <mikeb@squaremobius.net>,
4;                          Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
5;
6; This library is free software; you can redistribute it and/or modify
7; it under the terms of the GNU Library General Public License as
8; published by the Free Software Foundation; either version 2 of the
9; License, or (at your option) any later version.
10;
11; This library is distributed in the hope that it will be useful, but
12; WITHOUT ANY WARRANTY; without even the implied warranty of
13; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14; Library General Public License for more details.
15;
16; You should have received a copy of the GNU Library General Public
17; License along with this library; if not, write to the Free
18; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19; USA
20
21; --------------------------------------------------
22
23(module cairo
24 *
25 (import chicken scheme foreign)
26
27 (use srfi-1)
28 (use srfi-4)
29 (use srfi-13)
30 (use lolevel)
31
32 (import-for-syntax srfi-1)
33 (import-for-syntax srfi-13)
34
35 (foreign-declare #<<EOF
36
37#include "cairo.h"
38
39EOF
40)
41
42;; Define a list of DEFINEs or enums at once.
43(define-syntax --cairo-flags
44  (lambda (e r c)
45    (let ((strs (cdr e)))
46      `(begin
47         ,@(append-map (lambda (str)
48                         (let* ((sym (string->symbol str))
49                                (psym (string->symbol (string-append "-" (symbol->string sym)))))
50                           `((,(r 'define-foreign-variable) ,psym unsigned-integer ,str)
51                             (,(r 'define) ,sym ,psym))))
52                       strs)))))
53
54(define *cairo-egg-version* '(0 1 3 alpha))
55
56(define cairo-pi (foreign-value "M_PI" float))
57
58;; Functions are mostly in the same order to
59;; cairo.h
60
61;; State manipulation
62;; -----------------------------------------------
63
64;; cairo_t encapsulates the current state
65
66(define-foreign-type cairo_t (c-pointer "cairo_t")
67  values
68  (cut tag-pointer <> 'cairo))
69
70; formerly didn't take the surface argument
71(define cairo-create (foreign-lambda cairo_t "cairo_create"
72                                     cairo_surface_t))
73
74; For reference counting?
75(define cairo-reference (foreign-lambda void "cairo_reference" cairo_t))
76
77(define cairo-destroy (foreign-lambda void "cairo_destroy" cairo_t))
78
79; Save the state of this context (and keep it as the state)
80(define cairo-save (foreign-lambda void "cairo_save" cairo_t))
81
82; Restore the last saved state of this context
83(define cairo-restore (foreign-lambda void "cairo_restore" cairo_t))
84
85; cairo-copy deprecated
86
87; ------------------------------------------------
88
89; Surfaces and backends
90; ------------------------------------------------
91
92;; cairo_surface_t is a drawing surface abstraction
93
94(define-foreign-type cairo_surface_t (c-pointer "cairo_surface_t")
95  values
96  (cut tag-pointer <> 'cairo-surface))
97
98(--cairo-flags "CAIRO_FORMAT_ARGB32"
99               "CAIRO_FORMAT_RGB24"
100               "CAIRO_FORMAT_A8"
101               "CAIRO_FORMAT_A1")
102
103;; %%% TO DO Several surface creation procedures
104
105(define cairo-image-surface-create-for-data (foreign-lambda cairo_surface_t "cairo_image_surface_create_for_data"
106                                                            (c-pointer byte)
107                                                            integer
108                                                            int
109                                                            int
110                                                            int))
111
112; cairo-create-image deprecated
113
114; cairo-set-target-image deprecated
115
116(--cairo-flags "CAIRO_OPERATOR_CLEAR"
117               
118               "CAIRO_OPERATOR_SOURCE"
119               "CAIRO_OPERATOR_OVER"
120               "CAIRO_OPERATOR_IN"
121               "CAIRO_OPERATOR_OUT"
122               "CAIRO_OPERATOR_ATOP"
123
124               "CAIRO_OPERATOR_DEST"
125               "CAIRO_OPERATOR_DEST_OVER"
126               "CAIRO_OPERATOR_DEST_IN"
127               "CAIRO_OPERATOR_DEST_OUT"
128               "CAIRO_OPERATOR_DEST_ATOP"
129               
130               "CAIRO_OPERATOR_XOR"
131               "CAIRO_OPERATOR_ADD"
132               "CAIRO_OPERATOR_SATURATE")
133
134; Set the composition operator --
135; see cairo docs or otherwise what they do.
136; http://cairographics.org/samples/snippets.html has
137; pictures of the results.
138(define cairo-set-operator (foreign-lambda void "cairo_set_operator" cairo_t integer))
139
140; formerly cairo-set-rgb-color
141(define cairo-set-source-rgb (foreign-lambda void "cairo_set_source_rgb"
142                                            cairo_t
143                                            double ;red
144                                            double ;green
145                                            double ;blue
146                                            ))
147
148;; Also see cairo-paint-with-alpha
149(define cairo-set-source-rgba (foreign-lambda void "cairo_set_source_rgba"
150                                            cairo_t
151                                            double ;red
152                                            double ;green
153                                            double ;blue
154                                            double ;alpha
155                                            ))
156
157(define cairo-set-source-surface
158  (foreign-lambda void "cairo_set_source_surface"
159                  cairo_t
160                  cairo_surface_t
161                  double ;x
162                  double ;y
163                  ))
164
165; ?
166(define cairo-set-tolerance (foreign-lambda void "cairo_set_tolerance" cairo_t double))
167;; -----------------------------------------------
168;;
169;; Antialias and fill
170;; -----------------------------------------------
171
172(--cairo-flags "CAIRO_ANTIALIAS_DEFAULT"
173               "CAIRO_ANTIALIAS_NONE"
174               "CAIRO_ANTIALIAS_GRAY"
175               "CAIRO_ANTIALIAS_SUBPIXEL")
176
177(define cairo-set-antialias (foreign-lambda void "cairo_set_antialias" cairo_t integer))
178
179(--cairo-flags "CAIRO_FILL_RULE_WINDING"
180               "CAIRO_FILL_RULE_EVEN_ODD")
181
182; Set the fill rule:
183; 'winding' is like a union (anything inside a path)
184; 'even-odd' is like xor (anything inside an odd number of paths)
185(define cairo-set-fill-rule (foreign-lambda void "cairo_set_fill_rule" cairo_t integer))
186
187; ------------------------------------------------
188
189; Lines, joins, and caps
190; ------------------------------------------------
191
192(define cairo-set-line-width (foreign-lambda void "cairo_set_line_width" cairo_t double))
193
194(--cairo-flags "CAIRO_LINE_CAP_BUTT"
195               "CAIRO_LINE_CAP_ROUND"
196               "CAIRO_LINE_CAP_SQUARE")
197
198(define cairo-set-line-cap (foreign-lambda void "cairo_set_line_cap" cairo_t integer))
199
200(--cairo-flags "CAIRO_LINE_JOIN_MITER"
201               "CAIRO_LINE_JOIN_ROUND"
202               "CAIRO_LINE_JOIN_BEVEL")
203
204(define cairo-set-line-join (foreign-lambda void "cairo_set_line_join" cairo_t integer))
205
206(define cairo-set-dash (foreign-lambda void "cairo_set_dash" cairo_t f64vector integer double))
207
208(define cairo-set-miter-limit (foreign-lambda void "cairo_set_miter_limit" cairo_t double))
209
210; ------------------------------------------------
211
212; Context transform operations
213; ------------------------------------------------
214
215;; These following operate on the current transform of
216;; the context -- there are also operations on arbitrary
217;; transforms further on (but perhaps not yet)
218
219(define cairo-translate (foreign-lambda void "cairo_translate" cairo_t double double))
220
221(define cairo-scale (foreign-lambda void "cairo_scale" cairo_t double double))
222
223(define cairo-rotate (foreign-lambda void "cairo_rotate" cairo_t double))
224
225(define cairo-transform (foreign-lambda void "cairo_transform" cairo_t cairo_matrix_t))
226
227(define cairo-set-matrix (foreign-lambda void "cairo_set_matrix" cairo_t cairo_matrix_t))
228
229(define cairo-identity-matrix (foreign-lambda void "cairo_identity_matrix" cairo_t))
230
231;; Matrix operations
232
233(define-foreign-type cairo_matrix_t (c-pointer "cairo_matrix_t")
234  values
235  (cut tag-pointer <> 'cairo-matrix))
236
237; accessors for each element might be nice, but probably not
238; immediately necessary
239
240; cairo-concat-matrix replaced by cairo-transform
241
242; cairo-matrix-set replaced by cairo-set-matrix
243
244; was cairo-transform-point
245(define cairo-user-to-device (foreign-lambda void "cairo_user_to_device" cairo_t f64vector f64vector))
246
247; was cairo-transform-distance
248(define cairo-user-to-device-distance (foreign-lambda void "cairo_user_to_device" cairo_t f64vector f64vector))
249
250; was cairo-inverse-transform-point
251(define cairo-device-to-user (foreign-lambda void "cairo_device_to_user" cairo_t f64vector f64vector))
252
253; was cairo-inverse-transform-distance
254(define cairo-device-to-user-distance (foreign-lambda void "cairo_device_to_user_distance" cairo_t f64vector f64vector))
255
256; ------------------------------------------------
257
258; Path creation
259; ------------------------------------------------
260
261;; Note that actually drawing paths is destructive;
262;; it will erase the current path.  Use cairo_save
263;; and cairo_restore if you want to use a path for
264;; more than one drawing operation.  Clipping is
265;; _not_ destructive.
266
267(define cairo-new-path (foreign-lambda void "cairo_new_path" cairo_t))
268
269(define cairo-move-to (foreign-lambda void "cairo_move_to" cairo_t double double))
270
271(define cairo-line-to (foreign-lambda void "cairo_line_to" cairo_t double double))
272
273(define cairo-curve-to (foreign-lambda void "cairo_curve_to" cairo_t double double double double double double))
274
275(define cairo-arc (foreign-lambda void "cairo_arc" cairo_t double double double double double))
276
277(define cairo-arc-negative (foreign-lambda void "cairo_arc_negative" cairo_t double double double double double))
278
279;; there's some relative move_to etc. things here .. mneh
280
281(define cairo-rectangle (foreign-lambda void "cairo_rectangle" cairo_t double double double double))
282
283;; Finish the current shape so you can draw another disjoint one
284(define cairo-close-path (foreign-lambda void "cairo_close_path" cairo_t))
285
286; ------------------------------------------------
287
288; Drawing operations
289; ------------------------------------------------
290
291(define cairo-stroke (foreign-lambda void "cairo_stroke" cairo_t))
292
293(define cairo-fill (foreign-lambda void "cairo_fill" cairo_t))
294
295; ------------------------------------------------
296
297; Insideness testing ... mneh
298; ------------------------------------------------
299
300(define-foreign-variable sizeof-cairo-text-extents int "sizeof(cairo_text_extents_t)")
301
302;; We want a garbage-collectable type here; wrap a record type around a byte vector buffer, and make
303;; chicken type-pun the buffer to the C struct.  We only ever construct these to hand to a function
304;; for filling in, so no initialisation needed aside from the buffer.
305(define-record cairo-text-extents-type buffer)
306(let ((maker make-cairo-text-extents-type))
307  (set! make-cairo-text-extents-type
308    (lambda () (maker (make-blob sizeof-cairo-text-extents)))))
309
310(define-record-printer (cairo-text-extents-type te out)
311  (for-each (lambda (x) (display x out))
312                    (list "#<cairo-text-extents "
313                          (cairo-text-extents-x-bearing te)" "
314                          (cairo-text-extents-y-bearing te)" "
315                          (cairo-text-extents-width te)" "
316                          (cairo-text-extents-height te)" "
317                          (cairo-text-extents-x-advance te)" "
318                          (cairo-text-extents-y-advance te)">")))
319
320(define-foreign-type cairo_text_extents_t scheme-pointer cairo-text-extents-type-buffer)
321
322(define cairo-text-extents-x-bearing (foreign-lambda* double ((cairo_text_extents_t te)) "C_return(((cairo_text_extents_t*)te)->x_bearing);"))
323(define cairo-text-extents-y-bearing (foreign-lambda* double ((cairo_text_extents_t te)) "C_return(((cairo_text_extents_t*)te)->y_bearing);"))
324(define cairo-text-extents-width (foreign-lambda* double ((cairo_text_extents_t te)) "C_return(((cairo_text_extents_t*)te)->width);"))
325(define cairo-text-extents-height (foreign-lambda* double ((cairo_text_extents_t te)) "C_return(((cairo_text_extents_t*)te)->height);"))
326(define cairo-text-extents-x-advance (foreign-lambda* double ((cairo_text_extents_t te)) "C_return(((cairo_text_extents_t*)te)->x_advance);"))
327(define cairo-text-extents-y-advance (foreign-lambda* double ((cairo_text_extents_t te)) "C_return(((cairo_text_extents_t*)te)->y_advance);"))
328
329(define cairo-text-extents-x-bearing-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->x_bearing = v;"))
330(define cairo-text-extents-y-bearing-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->y_bearing = v;"))
331(define cairo-text-extents-width-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->width = v;"))
332(define cairo-text-extents-height-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->height = v;"))
333(define cairo-text-extents-x-advance-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->x_advance = v;"))
334(define cairo-text-extents-y-advance-set! (foreign-lambda* double ((cairo_text_extents_t te) (double v)) "((cairo_text_extents_t*)te)->y_advance = v;"))
335
336(define-foreign-variable sizeof-cairo-font-extents int "sizeof(cairo_font_extents_t)")
337
338(define-record cairo-font-extents-type buffer)
339(let ((maker make-cairo-font-extents-type))
340  (set! make-cairo-font-extents-type
341    (lambda () (maker (make-blob sizeof-cairo-font-extents)))))
342
343(define-record-printer (cairo-font-extents-type e out)
344  (for-each (lambda (x) (display x out))
345                    (list "#<cairo-font-extents "
346                          (cairo-font-extents-ascent e)" "
347                          (cairo-font-extents-descent e)" "
348                          (cairo-font-extents-height e)" "
349                          (cairo-font-extents-max-x-advance e)" "
350                          (cairo-font-extents-max-y-advance e)">")))
351
352(define-foreign-type cairo_font_extents_t scheme-pointer cairo-font-extents-type-buffer)
353
354(define cairo-font-extents-ascent (foreign-lambda* double ((cairo_font_extents_t e)) "C_return(((cairo_font_extents_t*)e)->ascent);"))
355(define cairo-font-extents-descent (foreign-lambda* double ((cairo_font_extents_t e)) "C_return(((cairo_font_extents_t*)e)->descent);"))
356(define cairo-font-extents-height (foreign-lambda* double ((cairo_font_extents_t e)) "C_return(((cairo_font_extents_t*)e)->height);"))
357(define cairo-font-extents-max-x-advance (foreign-lambda* double ((cairo_font_extents_t e)) "C_return(((cairo_font_extents_t*)e)->max_x_advance);"))
358(define cairo-font-extents-max-y-advance (foreign-lambda* double ((cairo_font_extents_t e)) "C_return(((cairo_font_extents_t*)e)->max_y_advance);"))
359
360(define cairo-font-extents-ascent-set! (foreign-lambda* double ((cairo_font_extents_t e) (double v)) "((cairo_font_extents_t*)e)->ascent = v;"))
361(define cairo-font-extents-descent-set! (foreign-lambda* double ((cairo_font_extents_t e) (double v)) "((cairo_font_extents_t*)e)->descent = v;"))
362(define cairo-font-extents-height-set! (foreign-lambda* double ((cairo_font_extents_t e) (double v)) "((cairo_font_extents_t*)e)->height = v;"))
363(define cairo-font-extents-max-x-advance-set! (foreign-lambda* double ((cairo_font_extents_t e) (double v)) "((cairo_font_extents_t*)e)->max_x_advance = v;"))
364(define cairo-font-extents-max-y-advance-set! (foreign-lambda* double ((cairo_font_extents_t e) (double v)) "((cairo_font_extents_t*)e)->max_y_advance = v;"))
365
366(define cairo-text-extents (foreign-lambda void "cairo_text_extents" cairo_t c-string cairo_text_extents_t))
367
368; was cairo-current-font-extents
369(define cairo-font-extents (foreign-lambda void "cairo_font_extents" cairo_t cairo_font_extents_t))
370
371; Clipping
372; ------------------------------------------------
373
374;; Clipping does reset the path, unless you use the
375;; -preserve functions
376
377; was cairo-init-clip
378(define cairo-reset-clip (foreign-lambda void "cairo_reset_clip" cairo_t))
379
380;; Intersect the current path with the clipping region
381;; for the new clipping region
382(define cairo-clip (foreign-lambda void "cairo_clip" cairo_t))
383
384; ------------------------------------------------
385;
386; Fonts and text
387; ------------------------------------------------
388
389(--cairo-flags
390; font weight
391 "CAIRO_FONT_WEIGHT_NORMAL"
392 "CAIRO_FONT_WEIGHT_BOLD"
393 ; and slant
394 "CAIRO_FONT_SLANT_NORMAL"
395 "CAIRO_FONT_SLANT_ITALIC"
396 "CAIRO_FONT_SLANT_OBLIQUE")
397
398; An easy-osy function for choosing a font to use
399; (as usual, affects the context)
400; was cairo-select-font
401(define cairo-select-font-face
402  (foreign-lambda void "cairo_select_font_face"
403                  cairo_t
404                  c-string
405                  integer ; slant
406                  integer ; weight
407                  ))
408
409;; NB regarding font transforms:
410;; cairo_gstate.c has notes regarding font co-ordinate
411;; systems.  I should read them ;-)
412
413; was cairo-scale-font
414(define cairo-set-font-size
415  (foreign-lambda void "cairo_set_font_size" cairo_t double))
416
417; was cairo-transform-font
418(define cairo-set-font-matrix
419  (foreign-lambda void "cairo_set_font_matrix" cairo_t cairo_matrix_t))
420
421(define cairo-show-text
422  (foreign-lambda void "cairo_show_text" cairo_t c-string))
423
424;; There's also cairo_show_glyphs(), which might be useful
425;; if it's worthwhile caching glyphs (I'll look at the cairo
426;; source -- it may well convert text to glyphs every time)
427
428(define-foreign-type cairo_font_t (c-pointer "cairo_font_t")
429  values
430  (cut tag-pointer <> 'cairo-font))
431
432;; Here would be the text extent stuff, certainly useful
433
434;; .. and here, converting fonts to paths
435
436;; .. and some functions for transforming fonts directly
437
438; ------------------------------------------------
439;
440; Context status and query
441; ------------------------------------------------
442
443; All these used to be -current-, now -get-
444
445(define cairo-get-target
446  (foreign-lambda cairo_surface_t "cairo_get_target" cairo_t))
447
448(define cairo-get-operator
449  (foreign-lambda integer "cairo_get_operator" cairo_t))
450
451; cairo-current-rgb-color deprecated
452
453; cairo-current-alpha deprecated
454
455(define cairo-get-matrix
456  (foreign-lambda void "cairo_get_matrix" cairo_t cairo_matrix_t))
457
458;; and some more skipped
459
460;; cairo_status_t
461(--cairo-flags
462  "CAIRO_STATUS_SUCCESS"
463  "CAIRO_STATUS_NO_MEMORY"
464  "CAIRO_STATUS_INVALID_RESTORE"
465  "CAIRO_STATUS_INVALID_POP_GROUP"
466  "CAIRO_STATUS_NO_CURRENT_POINT"
467  "CAIRO_STATUS_INVALID_MATRIX"
468  "CAIRO_STATUS_INVALID_STATUS"
469  "CAIRO_STATUS_NULL_POINTER"
470  "CAIRO_STATUS_INVALID_STRING"
471  "CAIRO_STATUS_INVALID_PATH_DATA"
472  "CAIRO_STATUS_READ_ERROR"
473  "CAIRO_STATUS_WRITE_ERROR"
474  "CAIRO_STATUS_SURFACE_FINISHED"
475  "CAIRO_STATUS_SURFACE_TYPE_MISMATCH"
476  "CAIRO_STATUS_PATTERN_TYPE_MISMATCH"
477  "CAIRO_STATUS_INVALID_CONTENT"
478  "CAIRO_STATUS_INVALID_FORMAT"
479  "CAIRO_STATUS_INVALID_VISUAL"
480  "CAIRO_STATUS_FILE_NOT_FOUND"
481  "CAIRO_STATUS_INVALID_DASH")
482
483
484
485; ------------------------------------------------
486
487; Matrix operations
488; ------------------------------------------------
489
490; (cairo_matrix_t defined earlier)
491
492; NB: These may be renamed to cairo_transform_* in future
493; versions of Cairo.
494
495(define cairo-matrix-init-identity
496  (foreign-lambda void
497                  "cairo_matrix_init_identity"
498                  cairo_matrix_t))
499
500(define cairo-matrix-init
501  (foreign-lambda void
502                  "cairo_matrix_init"
503                  cairo_matrix_t
504                  double double ;; a, b
505                  double double ;; c, d
506                  double double ;; tx, ty
507                  ))
508
509(define cairo-matrix-translate
510  (foreign-lambda void
511                  "cairo_matrix_translate"
512                  cairo_matrix_t
513                  double double ;; x, y
514                  ))
515
516(define cairo-matrix-scale
517  (foreign-lambda void
518                  "cairo_matrix_scale"
519                  cairo_matrix_t
520                  double double ;; x, y
521                  ))
522
523(define cairo-matrix-rotate
524  (foreign-lambda void
525                  "cairo_matrix_rotate"
526                  cairo_matrix_t
527                  double ;; radians
528                  ))
529
530(define cairo-matrix-invert
531  (foreign-lambda integer ;; cairo_status_t
532                  "cairo_matrix_invert"
533                  cairo_matrix_t))
534
535(define cairo-matrix-multiply
536  (foreign-lambda void
537                  "cairo_matrix_multiply"
538                  cairo_matrix_t ;; dest
539                  cairo_matrix_t
540                  cairo_matrix_t))
541
542(define cairo-matrix-transform-distance
543  (foreign-lambda void
544                  "cairo_matrix_transform_distance"
545                  cairo_matrix_t
546                  f64vector f64vector))
547
548(define cairo-matrix-transform-point
549  (foreign-lambda void
550                  "cairo_matrix_transform_point"
551                  cairo_matrix_t
552                  f64vector f64vector))
553
554; PNG Support
555(define cairo-image-surface-create-from-png (foreign-lambda cairo_surface_t
556                                                            "cairo_image_surface_create_from_png"
557                                                            c-string
558                                                            ))
559
560(define cairo-surface-write-to-png (foreign-lambda integer
561                                                   "cairo_surface_write_to_png"
562                                                   cairo_surface_t
563                                                   c-string
564                                                   ))
565
566; Auxiliary
567(define cairo-image-surface-create (foreign-lambda cairo_surface_t
568                                                   "cairo_image_surface_create"
569                                                   integer
570                                                   integer
571                                                   integer
572                                     ))
573
574(define cairo-image-surface-get-width (foreign-lambda int
575                                                      "cairo_image_surface_get_width"
576                                                      cairo_surface_t))
577
578(define cairo-image-surface-get-height (foreign-lambda int
579                                                       "cairo_image_surface_get_height"
580                                                       cairo_surface_t))
581
582
583(define cairo-paint (foreign-lambda void
584                                    "cairo_paint"
585                                    cairo_t
586                                    ))
587
588(define cairo-paint-with-alpha  (foreign-lambda void
589                                                "cairo_paint_with_alpha"
590                                                cairo_t
591                                                double
592                                                ))
593
594(define cairo-surface-destroy (foreign-lambda void
595                                              "cairo_surface_destroy"
596                                              cairo_surface_t
597                                              ))
598
599(define cairo-surface-flush (foreign-lambda void
600                                            "cairo_surface_flush"
601                                            cairo_surface_t
602                                            ))
603)
Note: See TracBrowser for help on using the repository browser.