1 /* cairo - a vector graphics library with display and print output
3 * Copyright © 2002 University of Southern California
4 * Copyright © 2005 Red Hat, Inc.
6 * This library is free software; you can redistribute it and/or
7 * modify it either under the terms of the GNU Lesser General Public
8 * License version 2.1 as published by the Free Software Foundation
9 * (the "LGPL") or, at your option, under the terms of the Mozilla
10 * Public License Version 1.1 (the "MPL"). If you do not alter this
11 * notice, a recipient may use your version of this file under either
12 * the MPL or the LGPL.
14 * You should have received a copy of the LGPL along with this library
15 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
17 * You should have received a copy of the MPL along with this library
18 * in the file COPYING-MPL-1.1
20 * The contents of this file are subject to the Mozilla Public License
21 * Version 1.1 (the "License"); you may not use this file except in
22 * compliance with the License. You may obtain a copy of the License at
23 * http://www.mozilla.org/MPL/
25 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
26 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
27 * the specific language governing rights and limitations.
29 * The Original Code is the cairo graphics library.
31 * The Initial Developer of the Original Code is University of Southern
35 * Carl D. Worth <cworth@cworth.org>
37 module iv
.cairo
/*is aliced*/;
39 import core
.stdc
.config
: c_long
, c_ulong
;
45 enum CAIRO_VERSION_MAJOR
= 1;
46 enum CAIRO_VERSION_MINOR
= 14;
47 enum CAIRO_VERSION_MICRO
= 6;
49 /* Generated by configure. Do not edit. */
50 enum CAIRO_HAS_EGL_FUNCTIONS
= false; // was true
51 enum CAIRO_HAS_FC_FONT
= true;
52 enum CAIRO_HAS_FT_FONT
= true;
53 enum CAIRO_HAS_GLX_FUNCTIONS
= false; // was true
54 enum CAIRO_HAS_GL_SURFACE
= true;
55 enum CAIRO_HAS_GOBJECT_FUNCTIONS
= false; // was true
56 enum CAIRO_HAS_IMAGE_SURFACE
= true;
57 enum CAIRO_HAS_MIME_SURFACE
= true;
58 enum CAIRO_HAS_OBSERVER_SURFACE
= true;
59 enum CAIRO_HAS_PDF_SURFACE
= true;
60 enum CAIRO_HAS_PNG_FUNCTIONS
= true;
61 enum CAIRO_HAS_PS_SURFACE
= true;
62 enum CAIRO_HAS_RECORDING_SURFACE
= true;
63 enum CAIRO_HAS_SCRIPT_SURFACE
= true;
64 enum CAIRO_HAS_SVG_SURFACE
= true;
65 enum CAIRO_HAS_TEE_SURFACE
= true;
66 enum CAIRO_HAS_USER_FONT
= true;
67 enum CAIRO_HAS_XCB_SHM_FUNCTIONS
= false; // was true
68 enum CAIRO_HAS_XCB_SURFACE
= false; // was true
69 enum CAIRO_HAS_XLIB_SURFACE
= true;
70 enum CAIRO_HAS_XLIB_XRENDER_SURFACE
= false; // was true
71 enum CAIRO_HAS_XML_SURFACE
= true;
73 enum CAIRO_HAS_BEOS_SURFACE
= false;
74 enum CAIRO_HAS_COGL_SURFACE
= false;
75 enum CAIRO_HAS_DIRECTFB_SURFACE
= false;
76 enum CAIRO_HAS_DRM_SURFACE
= false;
77 enum CAIRO_HAS_GALLIUM_SURFACE
= false;
78 enum CAIRO_HAS_GLESV2_SURFACE
= false;
79 enum CAIRO_HAS_OS2_SURFACE
= false;
80 enum CAIRO_HAS_QT_SURFACE
= false;
81 enum CAIRO_HAS_QUARTZ_FONT
= false;
82 enum CAIRO_HAS_QUARTZ_IMAGE_SURFACE
= false;
83 enum CAIRO_HAS_QUARTZ_SURFACE
= false;
84 enum CAIRO_HAS_SKIA_SURFACE
= false;
85 enum CAIRO_HAS_VG_SURFACE
= false;
86 enum CAIRO_HAS_WGL_FUNCTIONS
= false;
87 enum CAIRO_HAS_WIN32_FONT
= false;
88 enum CAIRO_HAS_WIN32_SURFACE
= false;
89 enum CAIRO_HAS_XLIB_XCB_FUNCTIONS
= false;
91 static if (CAIRO_HAS_PNG_FUNCTIONS
) pragma(lib
, "png16");
92 static if (CAIRO_HAS_GL_SURFACE || CAIRO_HAS_GLX_FUNCTIONS
) pragma(lib
, "GL");
93 static if (CAIRO_HAS_FC_FONT
) pragma(lib
, "fontconfig");
94 static if (CAIRO_HAS_FT_FONT
) pragma(lib
, "freetype");
96 static if (CAIRO_HAS_XLIB_XRENDER_SURFACE
) { pragma(lib
, "X11"); pragma(lib
, "Xext"); pragma(lib
, "Xrender"); }
97 else static if (CAIRO_HAS_XLIB_SURFACE
) { pragma(lib
, "X11"); pragma(lib
, "Xext"); }
101 #define CAIRO_VERSION_ENCODE(major, minor, micro) ( \
106 #define CAIRO_VERSION CAIRO_VERSION_ENCODE( \
107 CAIRO_VERSION_MAJOR, \
108 CAIRO_VERSION_MINOR, \
112 #define CAIRO_VERSION_STRINGIZE_(major, minor, micro) \
113 #major"."#minor"."#micro
114 #define CAIRO_VERSION_STRINGIZE(major, minor, micro) \
115 CAIRO_VERSION_STRINGIZE_(major, minor, micro)
117 #define CAIRO_VERSION_STRING CAIRO_VERSION_STRINGIZE( \
118 CAIRO_VERSION_MAJOR, \
119 CAIRO_VERSION_MINOR, \
123 /*cairo_public*/ int cairo_version ();
125 /*cairo_public*/ const(char)* cairo_version_string ();
130 * #cairo_bool_t is used for boolean values. Returns of type
131 * #cairo_bool_t will always be either 0 or 1, but testing against
132 * these values explicitly is not encouraged; just use the
133 * value as a boolean condition.
135 * <informalexample><programlisting>
136 * if (cairo_in_stroke (cr, x, y)) {
137 * /<!-- -->* do something *<!-- -->/
139 * </programlisting></informalexample>
143 alias cairo_bool_t
= int;
148 * A #cairo_t contains the current state of the rendering device,
149 * including coordinates of yet to be drawn shapes.
151 * Cairo contexts, as #cairo_t objects are named, are central to
152 * cairo and all drawing with cairo is always done to a #cairo_t
155 * Memory management of #cairo_t is done with
156 * cairo_reference() and cairo_destroy().
165 * A #cairo_surface_t represents an image, either as the destination
166 * of a drawing operation or as source when drawing onto another
167 * surface. To draw to a #cairo_surface_t, create a cairo context
168 * with the surface as the target, using cairo_create().
170 * There are different subtypes of #cairo_surface_t for
171 * different drawing backends; for example, cairo_image_surface_create()
172 * creates a bitmap image in memory.
173 * The type of a surface can be queried with cairo_surface_get_type().
175 * The initial contents of a surface after creation depend upon the manner
176 * of its creation. If cairo creates the surface and backing storage for
177 * the user, it will be initially cleared; for example,
178 * cairo_image_surface_create() and cairo_surface_create_similar().
179 * Alternatively, if the user passes in a reference to some backing storage
180 * and asks cairo to wrap that in a #cairo_surface_t, then the contents are
181 * not modified; for example, cairo_image_surface_create_for_data() and
182 * cairo_xlib_surface_create().
184 * Memory management of #cairo_surface_t is done with
185 * cairo_surface_reference() and cairo_surface_destroy().
189 struct cairo_surface_t
;
194 * A #cairo_device_t represents the driver interface for drawing
195 * operations to a #cairo_surface_t. There are different subtypes of
196 * #cairo_device_t for different drawing backends; for example,
197 * cairo_egl_device_create() creates a device that wraps an EGL display and
200 * The type of a device can be queried with cairo_device_get_type().
202 * Memory management of #cairo_device_t is done with
203 * cairo_device_reference() and cairo_device_destroy().
207 struct cairo_device_t
;
211 * @xx: xx component of the affine transformation
212 * @yx: yx component of the affine transformation
213 * @xy: xy component of the affine transformation
214 * @yy: yy component of the affine transformation
215 * @x0: X translation component of the affine transformation
216 * @y0: Y translation component of the affine transformation
218 * A #cairo_matrix_t holds an affine transformation, such as a scale,
219 * rotation, shear, or a combination of those. The transformation of
220 * a point (x, y) is given by:
222 * x_new = xx * x + xy * y + x0;
223 * y_new = yx * x + yy * y + y0;
228 struct cairo_matrix_t
{
229 double xx
; double yx
;
230 double xy
; double yy
;
231 double x0
; double y0
;
237 * A #cairo_pattern_t represents a source when drawing onto a
238 * surface. There are different subtypes of #cairo_pattern_t,
239 * for different types of sources; for example,
240 * cairo_pattern_create_rgb() creates a pattern for a solid
244 * <function>cairo_pattern_create_<emphasis>type</emphasis>()</function>
245 * functions, some of the pattern types can be implicitly created using various
246 * <function>cairo_set_source_<emphasis>type</emphasis>()</function> functions;
247 * for example cairo_set_source_rgb().
249 * The type of a pattern can be queried with cairo_pattern_get_type().
251 * Memory management of #cairo_pattern_t is done with
252 * cairo_pattern_reference() and cairo_pattern_destroy().
256 struct cairo_pattern_t
;
259 * cairo_destroy_func_t:
260 * @data: The data element being destroyed.
262 * #cairo_destroy_func_t the type of function which is called when a
263 * data element is destroyed. It is passed the pointer to the data
264 * element and should free any memory and resources allocated for it.
268 alias cairo_destroy_func_t
= void function (void* data
);
271 * cairo_user_data_key_t:
272 * @unused: not used; ignore.
274 * #cairo_user_data_key_t is used for attaching user data to cairo
275 * data structures. The actual contents of the struct is never used,
276 * and there is no need to initialize the object; only the unique
277 * address of a #cairo_data_key_t object is used. Typically, you
278 * would just use the address of a static #cairo_data_key_t object.
282 struct cairo_user_data_key_t
{
288 * @CAIRO_STATUS_SUCCESS: no error has occurred (Since 1.0)
289 * @CAIRO_STATUS_NO_MEMORY: out of memory (Since 1.0)
290 * @CAIRO_STATUS_INVALID_RESTORE: cairo_restore() called without matching cairo_save() (Since 1.0)
291 * @CAIRO_STATUS_INVALID_POP_GROUP: no saved group to pop, i.e. cairo_pop_group() without matching cairo_push_group() (Since 1.0)
292 * @CAIRO_STATUS_NO_CURRENT_POINT: no current point defined (Since 1.0)
293 * @CAIRO_STATUS_INVALID_MATRIX: invalid matrix (not invertible) (Since 1.0)
294 * @CAIRO_STATUS_INVALID_STATUS: invalid value for an input #cairo_status_t (Since 1.0)
295 * @CAIRO_STATUS_NULL_POINTER: %NULL pointer (Since 1.0)
296 * @CAIRO_STATUS_INVALID_STRING: input string not valid UTF-8 (Since 1.0)
297 * @CAIRO_STATUS_INVALID_PATH_DATA: input path data not valid (Since 1.0)
298 * @CAIRO_STATUS_READ_ERROR: error while reading from input stream (Since 1.0)
299 * @CAIRO_STATUS_WRITE_ERROR: error while writing to output stream (Since 1.0)
300 * @CAIRO_STATUS_SURFACE_FINISHED: target surface has been finished (Since 1.0)
301 * @CAIRO_STATUS_SURFACE_TYPE_MISMATCH: the surface type is not appropriate for the operation (Since 1.0)
302 * @CAIRO_STATUS_PATTERN_TYPE_MISMATCH: the pattern type is not appropriate for the operation (Since 1.0)
303 * @CAIRO_STATUS_INVALID_CONTENT: invalid value for an input #cairo_content_t (Since 1.0)
304 * @CAIRO_STATUS_INVALID_FORMAT: invalid value for an input #cairo_format_t (Since 1.0)
305 * @CAIRO_STATUS_INVALID_VISUAL: invalid value for an input Visual* (Since 1.0)
306 * @CAIRO_STATUS_FILE_NOT_FOUND: file not found (Since 1.0)
307 * @CAIRO_STATUS_INVALID_DASH: invalid value for a dash setting (Since 1.0)
308 * @CAIRO_STATUS_INVALID_DSC_COMMENT: invalid value for a DSC comment (Since 1.2)
309 * @CAIRO_STATUS_INVALID_INDEX: invalid index passed to getter (Since 1.4)
310 * @CAIRO_STATUS_CLIP_NOT_REPRESENTABLE: clip region not representable in desired format (Since 1.4)
311 * @CAIRO_STATUS_TEMP_FILE_ERROR: error creating or writing to a temporary file (Since 1.6)
312 * @CAIRO_STATUS_INVALID_STRIDE: invalid value for stride (Since 1.6)
313 * @CAIRO_STATUS_FONT_TYPE_MISMATCH: the font type is not appropriate for the operation (Since 1.8)
314 * @CAIRO_STATUS_USER_FONT_IMMUTABLE: the user-font is immutable (Since 1.8)
315 * @CAIRO_STATUS_USER_FONT_ERROR: error occurred in a user-font callback function (Since 1.8)
316 * @CAIRO_STATUS_NEGATIVE_COUNT: negative number used where it is not allowed (Since 1.8)
317 * @CAIRO_STATUS_INVALID_CLUSTERS: input clusters do not represent the accompanying text and glyph array (Since 1.8)
318 * @CAIRO_STATUS_INVALID_SLANT: invalid value for an input #cairo_font_slant_t (Since 1.8)
319 * @CAIRO_STATUS_INVALID_WEIGHT: invalid value for an input #cairo_font_weight_t (Since 1.8)
320 * @CAIRO_STATUS_INVALID_SIZE: invalid value (typically too big) for the size of the input (surface, pattern, etc.) (Since 1.10)
321 * @CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED: user-font method not implemented (Since 1.10)
322 * @CAIRO_STATUS_DEVICE_TYPE_MISMATCH: the device type is not appropriate for the operation (Since 1.10)
323 * @CAIRO_STATUS_DEVICE_ERROR: an operation to the device caused an unspecified error (Since 1.10)
324 * @CAIRO_STATUS_INVALID_MESH_CONSTRUCTION: a mesh pattern
325 * construction operation was used outside of a
326 * cairo_mesh_pattern_begin_patch()/cairo_mesh_pattern_end_patch()
328 * @CAIRO_STATUS_DEVICE_FINISHED: target device has been finished (Since 1.12)
329 * @CAIRO_STATUS_JBIG2_GLOBAL_MISSING: %CAIRO_MIME_TYPE_JBIG2_GLOBAL_ID has been used on at least one image
330 * but no image provided %CAIRO_MIME_TYPE_JBIG2_GLOBAL (Since 1.14)
331 * @CAIRO_STATUS_LAST_STATUS: this is a special value indicating the number of
332 * status values defined in this enumeration. When using this value, note
333 * that the version of cairo at run-time may have additional status values
334 * defined than the value of this symbol at compile-time. (Since 1.10)
336 * #cairo_status_t is used to indicate errors that can occur when
337 * using Cairo. In some cases it is returned directly by functions.
338 * but when using #cairo_t, the last error, if any, is stored in
339 * the context and can be retrieved with cairo_status().
341 * New entries may be added in future versions. Use cairo_status_to_string()
342 * to get a human-readable representation of an error message.
346 alias cairo_status_t
= int;
347 enum : cairo_status_t
{
348 CAIRO_STATUS_SUCCESS
= 0,
350 CAIRO_STATUS_NO_MEMORY
,
351 CAIRO_STATUS_INVALID_RESTORE
,
352 CAIRO_STATUS_INVALID_POP_GROUP
,
353 CAIRO_STATUS_NO_CURRENT_POINT
,
354 CAIRO_STATUS_INVALID_MATRIX
,
355 CAIRO_STATUS_INVALID_STATUS
,
356 CAIRO_STATUS_NULL_POINTER
,
357 CAIRO_STATUS_INVALID_STRING
,
358 CAIRO_STATUS_INVALID_PATH_DATA
,
359 CAIRO_STATUS_READ_ERROR
,
360 CAIRO_STATUS_WRITE_ERROR
,
361 CAIRO_STATUS_SURFACE_FINISHED
,
362 CAIRO_STATUS_SURFACE_TYPE_MISMATCH
,
363 CAIRO_STATUS_PATTERN_TYPE_MISMATCH
,
364 CAIRO_STATUS_INVALID_CONTENT
,
365 CAIRO_STATUS_INVALID_FORMAT
,
366 CAIRO_STATUS_INVALID_VISUAL
,
367 CAIRO_STATUS_FILE_NOT_FOUND
,
368 CAIRO_STATUS_INVALID_DASH
,
369 CAIRO_STATUS_INVALID_DSC_COMMENT
,
370 CAIRO_STATUS_INVALID_INDEX
,
371 CAIRO_STATUS_CLIP_NOT_REPRESENTABLE
,
372 CAIRO_STATUS_TEMP_FILE_ERROR
,
373 CAIRO_STATUS_INVALID_STRIDE
,
374 CAIRO_STATUS_FONT_TYPE_MISMATCH
,
375 CAIRO_STATUS_USER_FONT_IMMUTABLE
,
376 CAIRO_STATUS_USER_FONT_ERROR
,
377 CAIRO_STATUS_NEGATIVE_COUNT
,
378 CAIRO_STATUS_INVALID_CLUSTERS
,
379 CAIRO_STATUS_INVALID_SLANT
,
380 CAIRO_STATUS_INVALID_WEIGHT
,
381 CAIRO_STATUS_INVALID_SIZE
,
382 CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
,
383 CAIRO_STATUS_DEVICE_TYPE_MISMATCH
,
384 CAIRO_STATUS_DEVICE_ERROR
,
385 CAIRO_STATUS_INVALID_MESH_CONSTRUCTION
,
386 CAIRO_STATUS_DEVICE_FINISHED
,
387 CAIRO_STATUS_JBIG2_GLOBAL_MISSING
,
389 CAIRO_STATUS_LAST_STATUS
394 * @CAIRO_CONTENT_COLOR: The surface will hold color content only. (Since 1.0)
395 * @CAIRO_CONTENT_ALPHA: The surface will hold alpha content only. (Since 1.0)
396 * @CAIRO_CONTENT_COLOR_ALPHA: The surface will hold color and alpha content. (Since 1.0)
398 * #cairo_content_t is used to describe the content that a surface will
399 * contain, whether color information, alpha information (translucence
400 * vs. opacity), or both.
402 * Note: The large values here are designed to keep #cairo_content_t
403 * values distinct from #cairo_format_t values so that the
404 * implementation can detect the error if users confuse the two types.
408 alias cairo_content_t
= int;
409 enum : cairo_content_t
{
410 CAIRO_CONTENT_COLOR
= 0x1000,
411 CAIRO_CONTENT_ALPHA
= 0x2000,
412 CAIRO_CONTENT_COLOR_ALPHA
= 0x3000
417 * @CAIRO_FORMAT_INVALID: no such format exists or is supported.
418 * @CAIRO_FORMAT_ARGB32: each pixel is a 32-bit quantity, with
419 * alpha in the upper 8 bits, then red, then green, then blue.
420 * The 32-bit quantities are stored native-endian. Pre-multiplied
421 * alpha is used. (That is, 50% transparent red is 0x80800000,
422 * not 0x80ff0000.) (Since 1.0)
423 * @CAIRO_FORMAT_RGB24: each pixel is a 32-bit quantity, with
424 * the upper 8 bits unused. Red, Green, and Blue are stored
425 * in the remaining 24 bits in that order. (Since 1.0)
426 * @CAIRO_FORMAT_A8: each pixel is a 8-bit quantity holding
427 * an alpha value. (Since 1.0)
428 * @CAIRO_FORMAT_A1: each pixel is a 1-bit quantity holding
429 * an alpha value. Pixels are packed together into 32-bit
430 * quantities. The ordering of the bits matches the
431 * endianess of the platform. On a big-endian machine, the
432 * first pixel is in the uppermost bit, on a little-endian
433 * machine the first pixel is in the least-significant bit. (Since 1.0)
434 * @CAIRO_FORMAT_RGB16_565: each pixel is a 16-bit quantity
435 * with red in the upper 5 bits, then green in the middle
436 * 6 bits, and blue in the lower 5 bits. (Since 1.2)
437 * @CAIRO_FORMAT_RGB30: like RGB24 but with 10bpc. (Since 1.12)
439 * #cairo_format_t is used to identify the memory format of
442 * New entries may be added in future versions.
446 alias cairo_format_t
= int;
447 enum : cairo_format_t
{
448 CAIRO_FORMAT_INVALID
= -1,
449 CAIRO_FORMAT_ARGB32
= 0,
450 CAIRO_FORMAT_RGB24
= 1,
453 CAIRO_FORMAT_RGB16_565
= 4,
454 CAIRO_FORMAT_RGB30
= 5
459 * cairo_write_func_t:
460 * @closure: the output closure
461 * @data: the buffer containing the data to write
462 * @length: the amount of data to write
464 * #cairo_write_func_t is the type of function which is called when a
465 * backend needs to write data to an output stream. It is passed the
466 * closure which was specified by the user at the time the write
467 * function was registered, the data to write and the length of the
468 * data in bytes. The write function should return
469 * %CAIRO_STATUS_SUCCESS if all the data was successfully written,
470 * %CAIRO_STATUS_WRITE_ERROR otherwise.
472 * Returns: the status code of the write operation
476 alias cairo_write_func_t
= cairo_status_t
function (void* closure
, const(ubyte)* data
, uint length
);
480 * @closure: the input closure
481 * @data: the buffer into which to read the data
482 * @length: the amount of data to read
484 * #cairo_read_func_t is the type of function which is called when a
485 * backend needs to read data from an input stream. It is passed the
486 * closure which was specified by the user at the time the read
487 * function was registered, the buffer to read the data into and the
488 * length of the data in bytes. The read function should return
489 * %CAIRO_STATUS_SUCCESS if all the data was successfully read,
490 * %CAIRO_STATUS_READ_ERROR otherwise.
492 * Returns: the status code of the read operation
496 alias cairo_read_func_t
= cairo_status_t
function (void* closure
, ubyte* data
, uint length
);
499 * cairo_rectangle_int_t:
500 * @x: X coordinate of the left side of the rectangle
501 * @y: Y coordinate of the the top side of the rectangle
502 * @width: width of the rectangle
503 * @height: height of the rectangle
505 * A data structure for holding a rectangle with integer coordinates.
510 struct cairo_rectangle_int_t
{
516 /* Functions for manipulating state objects */
517 /*cairo_public*/ cairo_t
* cairo_create (cairo_surface_t
* target
);
518 /*cairo_public*/ cairo_t
* cairo_reference (cairo_t
* cr
);
519 /*cairo_public*/ void cairo_destroy (cairo_t
* cr
);
520 /*cairo_public*/ uint cairo_get_reference_count (cairo_t
* cr
);
521 /*cairo_public*/ void* cairo_get_user_data (cairo_t
* cr
, const(cairo_user_data_key_t
)* key
);
522 /*cairo_public*/ cairo_status_t
cairo_set_user_data (cairo_t
* cr
, const(cairo_user_data_key_t
)* key
, void* user_data
, cairo_destroy_func_t destroy
);
523 /*cairo_public*/ void cairo_save (cairo_t
* cr
);
524 /*cairo_public*/ void cairo_restore (cairo_t
* cr
);
525 /*cairo_public*/ void cairo_push_group (cairo_t
* cr
);
526 /*cairo_public*/ void cairo_push_group_with_content (cairo_t
* cr
, cairo_content_t content
);
527 /*cairo_public*/ cairo_pattern_t
* cairo_pop_group (cairo_t
* cr
);
528 /*cairo_public*/ void cairo_pop_group_to_source (cairo_t
* cr
);
534 * @CAIRO_OPERATOR_CLEAR: clear destination layer (bounded) (Since 1.0)
535 * @CAIRO_OPERATOR_SOURCE: replace destination layer (bounded) (Since 1.0)
536 * @CAIRO_OPERATOR_OVER: draw source layer on top of destination layer
537 * (bounded) (Since 1.0)
538 * @CAIRO_OPERATOR_IN: draw source where there was destination content
539 * (unbounded) (Since 1.0)
540 * @CAIRO_OPERATOR_OUT: draw source where there was no destination
541 * content (unbounded) (Since 1.0)
542 * @CAIRO_OPERATOR_ATOP: draw source on top of destination content and
543 * only there (Since 1.0)
544 * @CAIRO_OPERATOR_DEST: ignore the source (Since 1.0)
545 * @CAIRO_OPERATOR_DEST_OVER: draw destination on top of source (Since 1.0)
546 * @CAIRO_OPERATOR_DEST_IN: leave destination only where there was
547 * source content (unbounded) (Since 1.0)
548 * @CAIRO_OPERATOR_DEST_OUT: leave destination only where there was no
549 * source content (Since 1.0)
550 * @CAIRO_OPERATOR_DEST_ATOP: leave destination on top of source content
551 * and only there (unbounded) (Since 1.0)
552 * @CAIRO_OPERATOR_XOR: source and destination are shown where there is only
553 * one of them (Since 1.0)
554 * @CAIRO_OPERATOR_ADD: source and destination layers are accumulated (Since 1.0)
555 * @CAIRO_OPERATOR_SATURATE: like over, but assuming source and dest are
556 * disjoint geometries (Since 1.0)
557 * @CAIRO_OPERATOR_MULTIPLY: source and destination layers are multiplied.
558 * This causes the result to be at least as dark as the darker inputs. (Since 1.10)
559 * @CAIRO_OPERATOR_SCREEN: source and destination are complemented and
560 * multiplied. This causes the result to be at least as light as the lighter
561 * inputs. (Since 1.10)
562 * @CAIRO_OPERATOR_OVERLAY: multiplies or screens, depending on the
563 * lightness of the destination color. (Since 1.10)
564 * @CAIRO_OPERATOR_DARKEN: replaces the destination with the source if it
565 * is darker, otherwise keeps the source. (Since 1.10)
566 * @CAIRO_OPERATOR_LIGHTEN: replaces the destination with the source if it
567 * is lighter, otherwise keeps the source. (Since 1.10)
568 * @CAIRO_OPERATOR_COLOR_DODGE: brightens the destination color to reflect
569 * the source color. (Since 1.10)
570 * @CAIRO_OPERATOR_COLOR_BURN: darkens the destination color to reflect
571 * the source color. (Since 1.10)
572 * @CAIRO_OPERATOR_HARD_LIGHT: Multiplies or screens, dependent on source
573 * color. (Since 1.10)
574 * @CAIRO_OPERATOR_SOFT_LIGHT: Darkens or lightens, dependent on source
575 * color. (Since 1.10)
576 * @CAIRO_OPERATOR_DIFFERENCE: Takes the difference of the source and
577 * destination color. (Since 1.10)
578 * @CAIRO_OPERATOR_EXCLUSION: Produces an effect similar to difference, but
579 * with lower contrast. (Since 1.10)
580 * @CAIRO_OPERATOR_HSL_HUE: Creates a color with the hue of the source
581 * and the saturation and luminosity of the target. (Since 1.10)
582 * @CAIRO_OPERATOR_HSL_SATURATION: Creates a color with the saturation
583 * of the source and the hue and luminosity of the target. Painting with
584 * this mode onto a gray area produces no change. (Since 1.10)
585 * @CAIRO_OPERATOR_HSL_COLOR: Creates a color with the hue and saturation
586 * of the source and the luminosity of the target. This preserves the gray
587 * levels of the target and is useful for coloring monochrome images or
588 * tinting color images. (Since 1.10)
589 * @CAIRO_OPERATOR_HSL_LUMINOSITY: Creates a color with the luminosity of
590 * the source and the hue and saturation of the target. This produces an
591 * inverse effect to @CAIRO_OPERATOR_HSL_COLOR. (Since 1.10)
593 * #cairo_operator_t is used to set the compositing operator for all cairo
594 * drawing operations.
596 * The default operator is %CAIRO_OPERATOR_OVER.
598 * The operators marked as <firstterm>unbounded</firstterm> modify their
599 * destination even outside of the mask layer (that is, their effect is not
600 * bound by the mask layer). However, their effect can still be limited by
603 * To keep things simple, the operator descriptions here
604 * document the behavior for when both source and destination are either fully
605 * transparent or fully opaque. The actual implementation works for
606 * translucent layers too.
607 * For a more detailed explanation of the effects of each operator, including
608 * the mathematical definitions, see
609 * <ulink url="http://cairographics.org/operators/">http://cairographics.org/operators/</ulink>.
613 alias cairo_operator_t
= int;
614 enum : cairo_operator_t
{
615 CAIRO_OPERATOR_CLEAR
,
617 CAIRO_OPERATOR_SOURCE
,
624 CAIRO_OPERATOR_DEST_OVER
,
625 CAIRO_OPERATOR_DEST_IN
,
626 CAIRO_OPERATOR_DEST_OUT
,
627 CAIRO_OPERATOR_DEST_ATOP
,
631 CAIRO_OPERATOR_SATURATE
,
633 CAIRO_OPERATOR_MULTIPLY
,
634 CAIRO_OPERATOR_SCREEN
,
635 CAIRO_OPERATOR_OVERLAY
,
636 CAIRO_OPERATOR_DARKEN
,
637 CAIRO_OPERATOR_LIGHTEN
,
638 CAIRO_OPERATOR_COLOR_DODGE
,
639 CAIRO_OPERATOR_COLOR_BURN
,
640 CAIRO_OPERATOR_HARD_LIGHT
,
641 CAIRO_OPERATOR_SOFT_LIGHT
,
642 CAIRO_OPERATOR_DIFFERENCE
,
643 CAIRO_OPERATOR_EXCLUSION
,
644 CAIRO_OPERATOR_HSL_HUE
,
645 CAIRO_OPERATOR_HSL_SATURATION
,
646 CAIRO_OPERATOR_HSL_COLOR
,
647 CAIRO_OPERATOR_HSL_LUMINOSITY
650 /*cairo_public*/ void cairo_set_operator (cairo_t
* cr
, cairo_operator_t op
);
651 /*cairo_public*/ void cairo_set_source (cairo_t
* cr
, cairo_pattern_t
* source
);
652 /*cairo_public*/ void cairo_set_source_rgb (cairo_t
* cr
, double red
, double green
, double blue
);
653 /*cairo_public*/ void cairo_set_source_rgba (cairo_t
* cr
, double red
, double green
, double blue
, double alpha
);
654 /*cairo_public*/ void cairo_set_source_surface (cairo_t
* cr
, cairo_surface_t
* surface
, double x
, double y
);
655 /*cairo_public*/ void cairo_set_tolerance (cairo_t
* cr
, double tolerance
);
659 * @CAIRO_ANTIALIAS_DEFAULT: Use the default antialiasing for
660 * the subsystem and target device, since 1.0
661 * @CAIRO_ANTIALIAS_NONE: Use a bilevel alpha mask, since 1.0
662 * @CAIRO_ANTIALIAS_GRAY: Perform single-color antialiasing (using
663 * shades of gray for black text on a white background, for example), since 1.0
664 * @CAIRO_ANTIALIAS_SUBPIXEL: Perform antialiasing by taking
665 * advantage of the order of subpixel elements on devices
666 * such as LCD panels, since 1.0
667 * @CAIRO_ANTIALIAS_FAST: Hint that the backend should perform some
668 * antialiasing but prefer speed over quality, since 1.12
669 * @CAIRO_ANTIALIAS_GOOD: The backend should balance quality against
670 * performance, since 1.12
671 * @CAIRO_ANTIALIAS_BEST: Hint that the backend should render at the highest
672 * quality, sacrificing speed if necessary, since 1.12
674 * Specifies the type of antialiasing to do when rendering text or shapes.
676 * As it is not necessarily clear from the above what advantages a particular
677 * antialias method provides, since 1.12, there is also a set of hints:
678 * @CAIRO_ANTIALIAS_FAST: Allow the backend to degrade raster quality for speed
679 * @CAIRO_ANTIALIAS_GOOD: A balance between speed and quality
680 * @CAIRO_ANTIALIAS_BEST: A high-fidelity, but potentially slow, raster mode
682 * These make no guarantee on how the backend will perform its rasterisation
683 * (if it even rasterises!), nor that they have any differing effect other
684 * than to enable some form of antialiasing. In the case of glyph rendering,
685 * @CAIRO_ANTIALIAS_FAST and @CAIRO_ANTIALIAS_GOOD will be mapped to
686 * @CAIRO_ANTIALIAS_GRAY, with @CAIRO_ANTALIAS_BEST being equivalent to
687 * @CAIRO_ANTIALIAS_SUBPIXEL.
689 * The interpretation of @CAIRO_ANTIALIAS_DEFAULT is left entirely up to
690 * the backend, typically this will be similar to @CAIRO_ANTIALIAS_GOOD.
694 alias cairo_antialias_t
= int;
695 enum : cairo_antialias_t
{
696 CAIRO_ANTIALIAS_DEFAULT
,
699 CAIRO_ANTIALIAS_NONE
,
700 CAIRO_ANTIALIAS_GRAY
,
701 CAIRO_ANTIALIAS_SUBPIXEL
,
704 CAIRO_ANTIALIAS_FAST
,
705 CAIRO_ANTIALIAS_GOOD
,
709 /*cairo_public*/ void cairo_set_antialias (cairo_t
* cr
, cairo_antialias_t antialias
);
713 * @CAIRO_FILL_RULE_WINDING: If the path crosses the ray from
714 * left-to-right, counts +1. If the path crosses the ray
715 * from right to left, counts -1. (Left and right are determined
716 * from the perspective of looking along the ray from the starting
717 * point.) If the total count is non-zero, the point will be filled. (Since 1.0)
718 * @CAIRO_FILL_RULE_EVEN_ODD: Counts the total number of
719 * intersections, without regard to the orientation of the contour. If
720 * the total number of intersections is odd, the point will be
721 * filled. (Since 1.0)
723 * #cairo_fill_rule_t is used to select how paths are filled. For both
724 * fill rules, whether or not a point is included in the fill is
725 * determined by taking a ray from that point to infinity and looking
726 * at intersections with the path. The ray can be in any direction,
727 * as long as it doesn't pass through the end point of a segment
728 * or have a tricky intersection such as intersecting tangent to the path.
729 * (Note that filling is not actually implemented in this way. This
730 * is just a description of the rule that is applied.)
732 * The default fill rule is %CAIRO_FILL_RULE_WINDING.
734 * New entries may be added in future versions.
738 alias cairo_fill_rule_t
= int;
739 enum : cairo_fill_rule_t
{
740 CAIRO_FILL_RULE_WINDING
,
741 CAIRO_FILL_RULE_EVEN_ODD
744 /*cairo_public*/ void cairo_set_fill_rule (cairo_t
* cr
, cairo_fill_rule_t fill_rule
);
745 /*cairo_public*/ void cairo_set_line_width (cairo_t
* cr
, double width
);
749 * @CAIRO_LINE_CAP_BUTT: start(stop) the line exactly at the start(end) point (Since 1.0)
750 * @CAIRO_LINE_CAP_ROUND: use a round ending, the center of the circle is the end point (Since 1.0)
751 * @CAIRO_LINE_CAP_SQUARE: use squared ending, the center of the square is the end point (Since 1.0)
753 * Specifies how to render the endpoints of the path when stroking.
755 * The default line cap style is %CAIRO_LINE_CAP_BUTT.
759 alias cairo_line_cap_t
= int;
760 enum : cairo_line_cap_t
{
762 CAIRO_LINE_CAP_ROUND
,
763 CAIRO_LINE_CAP_SQUARE
766 /*cairo_public*/ void cairo_set_line_cap (cairo_t
* cr
, cairo_line_cap_t line_cap
);
770 * @CAIRO_LINE_JOIN_MITER: use a sharp (angled) corner, see
771 * cairo_set_miter_limit() (Since 1.0)
772 * @CAIRO_LINE_JOIN_ROUND: use a rounded join, the center of the circle is the
773 * joint point (Since 1.0)
774 * @CAIRO_LINE_JOIN_BEVEL: use a cut-off join, the join is cut off at half
775 * the line width from the joint point (Since 1.0)
777 * Specifies how to render the junction of two lines when stroking.
779 * The default line join style is %CAIRO_LINE_JOIN_MITER.
783 alias cairo_line_join_t
= int;
784 enum : cairo_line_join_t
{
785 CAIRO_LINE_JOIN_MITER
,
786 CAIRO_LINE_JOIN_ROUND
,
787 CAIRO_LINE_JOIN_BEVEL
790 /*cairo_public*/ void cairo_set_line_join (cairo_t
* cr
, cairo_line_join_t line_join
);
791 /*cairo_public*/ void cairo_set_dash (cairo_t
* cr
, const(double)* dashes
, int num_dashes
, double offset
);
792 /*cairo_public*/ void cairo_set_miter_limit (cairo_t
* cr
, double limit
);
793 /*cairo_public*/ void cairo_translate (cairo_t
* cr
, double tx
, double ty
);
794 /*cairo_public*/ void cairo_scale (cairo_t
* cr
, double sx
, double sy
);
795 /*cairo_public*/ void cairo_rotate (cairo_t
* cr
, double angle
);
796 /*cairo_public*/ void cairo_transform (cairo_t
* cr
, const(cairo_matrix_t
)* matrix
);
797 /*cairo_public*/ void cairo_set_matrix (cairo_t
* cr
, const(cairo_matrix_t
)* matrix
);
798 /*cairo_public*/ void cairo_identity_matrix (cairo_t
* cr
);
799 /*cairo_public*/ void cairo_user_to_device (cairo_t
* cr
, double* x
, double* y
);
800 /*cairo_public*/ void cairo_user_to_device_distance (cairo_t
* cr
, double* dx
, double* dy
);
801 /*cairo_public*/ void cairo_device_to_user (cairo_t
* cr
, double* x
, double* y
);
802 /*cairo_public*/ void cairo_device_to_user_distance (cairo_t
* cr
, double* dx
, double* dy
);
804 /* Path creation functions */
805 /*cairo_public*/ void cairo_new_path (cairo_t
* cr
);
806 /*cairo_public*/ void cairo_move_to (cairo_t
* cr
, double x
, double y
);
807 /*cairo_public*/ void cairo_new_sub_path (cairo_t
* cr
);
808 /*cairo_public*/ void cairo_line_to (cairo_t
* cr
, double x
, double y
);
809 /*cairo_public*/ void cairo_curve_to (cairo_t
* cr
, double x1
, double y1
, double x2
, double y2
, double x3
, double y3
);
810 /*cairo_public*/ void cairo_arc (cairo_t
* cr
, double xc
, double yc
, double radius
, double angle1
, double angle2
);
811 /*cairo_public*/ void cairo_arc_negative (cairo_t
* cr
, double xc
, double yc
, double radius
, double angle1
, double angle2
);
814 /*cairo_public*/ void cairo_arc_to (cairo_t* cr, double x1, double y1, double x2, double y2, double radius);
817 /*cairo_public*/ void cairo_rel_move_to (cairo_t
* cr
, double dx
, double dy
);
818 /*cairo_public*/ void cairo_rel_line_to (cairo_t
* cr
, double dx
, double dy
);
819 /*cairo_public*/ void cairo_rel_curve_to (cairo_t
* cr
, double dx1
, double dy1
, double dx2
, double dy2
, double dx3
, double dy3
);
820 /*cairo_public*/ void cairo_rectangle (cairo_t
* cr
, double x
, double y
, double width
, double height
);
823 /*cairo_public*/ void cairo_stroke_to_path (cairo_t* cr);
826 /*cairo_public*/ void cairo_close_path (cairo_t
* cr
);
827 /*cairo_public*/ void cairo_path_extents (cairo_t
* cr
, double* x1
, double* y1
, double* x2
, double* y2
);
829 /* Painting functions */
830 /*cairo_public*/ void cairo_paint (cairo_t
* cr
);
831 /*cairo_public*/ void cairo_paint_with_alpha (cairo_t
* cr
, double alpha
);
832 /*cairo_public*/ void cairo_mask (cairo_t
* cr
, cairo_pattern_t
* pattern
);
833 /*cairo_public*/ void cairo_mask_surface (cairo_t
* cr
, cairo_surface_t
* surface
, double surface_x
, double surface_y
);
834 /*cairo_public*/ void cairo_stroke (cairo_t
* cr
);
835 /*cairo_public*/ void cairo_stroke_preserve (cairo_t
* cr
);
836 /*cairo_public*/ void cairo_fill (cairo_t
* cr
);
837 /*cairo_public*/ void cairo_fill_preserve (cairo_t
* cr
);
838 /*cairo_public*/ void cairo_copy_page (cairo_t
* cr
);
839 /*cairo_public*/ void cairo_show_page (cairo_t
* cr
);
841 /* Insideness testing */
842 /*cairo_public*/ cairo_bool_t
cairo_in_stroke (cairo_t
* cr
, double x
, double y
);
843 /*cairo_public*/ cairo_bool_t
cairo_in_fill (cairo_t
* cr
, double x
, double y
);
844 /*cairo_public*/ cairo_bool_t
cairo_in_clip (cairo_t
* cr
, double x
, double y
);
846 /* Rectangular extents */
847 /*cairo_public*/ void cairo_stroke_extents (cairo_t
* cr
, double* x1
, double* y1
, double* x2
, double* y2
);
848 /*cairo_public*/ void cairo_fill_extents (cairo_t
* cr
, double* x1
, double* y1
, double* x2
, double* y2
);
851 /*cairo_public*/ void cairo_reset_clip (cairo_t
* cr
);
852 /*cairo_public*/ void cairo_clip (cairo_t
* cr
);
853 /*cairo_public*/ void cairo_clip_preserve (cairo_t
* cr
);
854 /*cairo_public*/ void cairo_clip_extents (cairo_t
* cr
, double* x1
, double* y1
, double* x2
, double* y2
);
858 * @x: X coordinate of the left side of the rectangle
859 * @y: Y coordinate of the the top side of the rectangle
860 * @width: width of the rectangle
861 * @height: height of the rectangle
863 * A data structure for holding a rectangle.
867 struct cairo_rectangle_t
{
868 double x
, y
, width
, height
;
872 * cairo_rectangle_list_t:
873 * @status: Error status of the rectangle list
874 * @rectangles: Array containing the rectangles
875 * @num_rectangles: Number of rectangles in this list
877 * A data structure for holding a dynamically allocated
878 * array of rectangles.
882 struct cairo_rectangle_list_t
{
883 cairo_status_t status
;
884 cairo_rectangle_t
* rectangles
;
888 /*cairo_public*/ cairo_rectangle_list_t
* cairo_copy_clip_rectangle_list (cairo_t
* cr
);
889 /*cairo_public*/ void cairo_rectangle_list_destroy (cairo_rectangle_list_t
* rectangle_list
);
891 /* Font/Text functions */
894 * cairo_scaled_font_t:
896 * A #cairo_scaled_font_t is a font scaled to a particular size and device
897 * resolution. A #cairo_scaled_font_t is most useful for low-level font
898 * usage where a library or application wants to cache a reference
899 * to a scaled font to speed up the computation of metrics.
901 * There are various types of scaled fonts, depending on the
902 * <firstterm>font backend</firstterm> they use. The type of a
903 * scaled font can be queried using cairo_scaled_font_get_type().
905 * Memory management of #cairo_scaled_font_t is done with
906 * cairo_scaled_font_reference() and cairo_scaled_font_destroy().
910 struct cairo_scaled_font_t
;
915 * A #cairo_font_face_t specifies all aspects of a font other
916 * than the size or font matrix (a font matrix is used to distort
917 * a font by sheering it or scaling it unequally in the two
918 * directions) . A font face can be set on a #cairo_t by using
919 * cairo_set_font_face(); the size and font matrix are set with
920 * cairo_set_font_size() and cairo_set_font_matrix().
922 * There are various types of font faces, depending on the
923 * <firstterm>font backend</firstterm> they use. The type of a
924 * font face can be queried using cairo_font_face_get_type().
926 * Memory management of #cairo_font_face_t is done with
927 * cairo_font_face_reference() and cairo_font_face_destroy().
931 struct cairo_font_face_t
;
935 * @index: glyph index in the font. The exact interpretation of the
936 * glyph index depends on the font technology being used.
937 * @x: the offset in the X direction between the origin used for
938 * drawing or measuring the string and the origin of this glyph.
939 * @y: the offset in the Y direction between the origin used for
940 * drawing or measuring the string and the origin of this glyph.
942 * The #cairo_glyph_t structure holds information about a single glyph
943 * when drawing or measuring text. A font is (in simple terms) a
944 * collection of shapes used to draw text. A glyph is one of these
945 * shapes. There can be multiple glyphs for a single character
946 * (alternates to be used in different contexts, for example), or a
947 * glyph can be a <firstterm>ligature</firstterm> of multiple
948 * characters. Cairo doesn't expose any way of converting input text
949 * into glyphs, so in order to use the Cairo interfaces that take
950 * arrays of glyphs, you must directly access the appropriate
951 * underlying font system.
953 * Note that the offsets given by @x and @y are not cumulative. When
954 * drawing or measuring text, each glyph is individually positioned
955 * with respect to the overall origin
959 struct cairo_glyph_t
{
965 /*cairo_public*/ cairo_glyph_t
* cairo_glyph_allocate (int num_glyphs
);
966 /*cairo_public*/ void cairo_glyph_free (cairo_glyph_t
* glyphs
);
969 * cairo_text_cluster_t:
970 * @num_bytes: the number of bytes of UTF-8 text covered by cluster
971 * @num_glyphs: the number of glyphs covered by cluster
973 * The #cairo_text_cluster_t structure holds information about a single
974 * <firstterm>text cluster</firstterm>. A text cluster is a minimal
975 * mapping of some glyphs corresponding to some UTF-8 text.
977 * For a cluster to be valid, both @num_bytes and @num_glyphs should
978 * be non-negative, and at least one should be non-zero.
979 * Note that clusters with zero glyphs are not as well supported as
980 * normal clusters. For example, PDF rendering applications typically
981 * ignore those clusters when PDF text is being selected.
983 * See cairo_show_text_glyphs() for how clusters are used in advanced
988 struct cairo_text_cluster_t
{
993 /*cairo_public*/ cairo_text_cluster_t
* cairo_text_cluster_allocate (int num_clusters
);
994 /*cairo_public*/ void cairo_text_cluster_free (cairo_text_cluster_t
* clusters
);
997 * cairo_text_cluster_flags_t:
998 * @CAIRO_TEXT_CLUSTER_FLAG_BACKWARD: The clusters in the cluster array
999 * map to glyphs in the glyph array from end to start. (Since 1.8)
1001 * Specifies properties of a text cluster mapping.
1005 alias cairo_text_cluster_flags_t
= int;
1006 enum : cairo_text_cluster_flags_t
{
1007 CAIRO_TEXT_CLUSTER_FLAG_BACKWARD
= 0x00000001
1011 * cairo_text_extents_t:
1012 * @x_bearing: the horizontal distance from the origin to the
1013 * leftmost part of the glyphs as drawn. Positive if the
1014 * glyphs lie entirely to the right of the origin.
1015 * @y_bearing: the vertical distance from the origin to the
1016 * topmost part of the glyphs as drawn. Positive only if the
1017 * glyphs lie completely below the origin; will usually be
1019 * @width: width of the glyphs as drawn
1020 * @height: height of the glyphs as drawn
1021 * @x_advance:distance to advance in the X direction
1022 * after drawing these glyphs
1023 * @y_advance: distance to advance in the Y direction
1024 * after drawing these glyphs. Will typically be zero except
1025 * for vertical text layout as found in East-Asian languages.
1027 * The #cairo_text_extents_t structure stores the extents of a single
1028 * glyph or a string of glyphs in user-space coordinates. Because text
1029 * extents are in user-space coordinates, they are mostly, but not
1030 * entirely, independent of the current transformation matrix. If you call
1031 * <literal>cairo_scale(cr, 2.0, 2.0)</literal>, text will
1032 * be drawn twice as big, but the reported text extents will not be
1033 * doubled. They will change slightly due to hinting (so you can't
1034 * assume that metrics are independent of the transformation matrix),
1035 * but otherwise will remain unchanged.
1039 struct cairo_text_extents_t
{
1049 * cairo_font_extents_t:
1050 * @ascent: the distance that the font extends above the baseline.
1051 * Note that this is not always exactly equal to the maximum
1052 * of the extents of all the glyphs in the font, but rather
1053 * is picked to express the font designer's intent as to
1054 * how the font should align with elements above it.
1055 * @descent: the distance that the font extends below the baseline.
1056 * This value is positive for typical fonts that include
1057 * portions below the baseline. Note that this is not always
1058 * exactly equal to the maximum of the extents of all the
1059 * glyphs in the font, but rather is picked to express the
1060 * font designer's intent as to how the font should
1061 * align with elements below it.
1062 * @height: the recommended vertical distance between baselines when
1063 * setting consecutive lines of text with the font. This
1064 * is greater than @ascent+@descent by a
1065 * quantity known as the <firstterm>line spacing</firstterm>
1066 * or <firstterm>external leading</firstterm>. When space
1067 * is at a premium, most fonts can be set with only
1068 * a distance of @ascent+@descent between lines.
1069 * @max_x_advance: the maximum distance in the X direction that
1070 * the origin is advanced for any glyph in the font.
1071 * @max_y_advance: the maximum distance in the Y direction that
1072 * the origin is advanced for any glyph in the font.
1073 * This will be zero for normal fonts used for horizontal
1074 * writing. (The scripts of East Asia are sometimes written
1077 * The #cairo_font_extents_t structure stores metric information for
1078 * a font. Values are given in the current user-space coordinate
1081 * Because font metrics are in user-space coordinates, they are
1082 * mostly, but not entirely, independent of the current transformation
1083 * matrix. If you call <literal>cairo_scale(cr, 2.0, 2.0)</literal>,
1084 * text will be drawn twice as big, but the reported text extents will
1085 * not be doubled. They will change slightly due to hinting (so you
1086 * can't assume that metrics are independent of the transformation
1087 * matrix), but otherwise will remain unchanged.
1091 struct cairo_font_extents_t
{
1095 double max_x_advance
;
1096 double max_y_advance
;
1100 * cairo_font_slant_t:
1101 * @CAIRO_FONT_SLANT_NORMAL: Upright font style, since 1.0
1102 * @CAIRO_FONT_SLANT_ITALIC: Italic font style, since 1.0
1103 * @CAIRO_FONT_SLANT_OBLIQUE: Oblique font style, since 1.0
1105 * Specifies variants of a font face based on their slant.
1109 alias cairo_font_slant_t
= int;
1110 enum : cairo_font_slant_t
{
1111 CAIRO_FONT_SLANT_NORMAL
,
1112 CAIRO_FONT_SLANT_ITALIC
,
1113 CAIRO_FONT_SLANT_OBLIQUE
1117 * cairo_font_weight_t:
1118 * @CAIRO_FONT_WEIGHT_NORMAL: Normal font weight, since 1.0
1119 * @CAIRO_FONT_WEIGHT_BOLD: Bold font weight, since 1.0
1121 * Specifies variants of a font face based on their weight.
1125 alias cairo_font_weight_t
= int;
1126 enum : cairo_font_weight_t
{
1127 CAIRO_FONT_WEIGHT_NORMAL
,
1128 CAIRO_FONT_WEIGHT_BOLD
1132 * cairo_subpixel_order_t:
1133 * @CAIRO_SUBPIXEL_ORDER_DEFAULT: Use the default subpixel order for
1134 * for the target device, since 1.0
1135 * @CAIRO_SUBPIXEL_ORDER_RGB: Subpixel elements are arranged horizontally
1136 * with red at the left, since 1.0
1137 * @CAIRO_SUBPIXEL_ORDER_BGR: Subpixel elements are arranged horizontally
1138 * with blue at the left, since 1.0
1139 * @CAIRO_SUBPIXEL_ORDER_VRGB: Subpixel elements are arranged vertically
1140 * with red at the top, since 1.0
1141 * @CAIRO_SUBPIXEL_ORDER_VBGR: Subpixel elements are arranged vertically
1142 * with blue at the top, since 1.0
1144 * The subpixel order specifies the order of color elements within
1145 * each pixel on the display device when rendering with an
1146 * antialiasing mode of %CAIRO_ANTIALIAS_SUBPIXEL.
1150 alias cairo_subpixel_order_t
= int;
1151 enum : cairo_subpixel_order_t
{
1152 CAIRO_SUBPIXEL_ORDER_DEFAULT
,
1153 CAIRO_SUBPIXEL_ORDER_RGB
,
1154 CAIRO_SUBPIXEL_ORDER_BGR
,
1155 CAIRO_SUBPIXEL_ORDER_VRGB
,
1156 CAIRO_SUBPIXEL_ORDER_VBGR
1160 * cairo_hint_style_t:
1161 * @CAIRO_HINT_STYLE_DEFAULT: Use the default hint style for
1162 * font backend and target device, since 1.0
1163 * @CAIRO_HINT_STYLE_NONE: Do not hint outlines, since 1.0
1164 * @CAIRO_HINT_STYLE_SLIGHT: Hint outlines slightly to improve
1165 * contrast while retaining good fidelity to the original
1167 * @CAIRO_HINT_STYLE_MEDIUM: Hint outlines with medium strength
1168 * giving a compromise between fidelity to the original shapes
1169 * and contrast, since 1.0
1170 * @CAIRO_HINT_STYLE_FULL: Hint outlines to maximize contrast, since 1.0
1172 * Specifies the type of hinting to do on font outlines. Hinting
1173 * is the process of fitting outlines to the pixel grid in order
1174 * to improve the appearance of the result. Since hinting outlines
1175 * involves distorting them, it also reduces the faithfulness
1176 * to the original outline shapes. Not all of the outline hinting
1177 * styles are supported by all font backends.
1179 * New entries may be added in future versions.
1183 alias cairo_hint_style_t
= int;
1184 enum : cairo_hint_style_t
{
1185 CAIRO_HINT_STYLE_DEFAULT
,
1186 CAIRO_HINT_STYLE_NONE
,
1187 CAIRO_HINT_STYLE_SLIGHT
,
1188 CAIRO_HINT_STYLE_MEDIUM
,
1189 CAIRO_HINT_STYLE_FULL
1193 * cairo_hint_metrics_t:
1194 * @CAIRO_HINT_METRICS_DEFAULT: Hint metrics in the default
1195 * manner for the font backend and target device, since 1.0
1196 * @CAIRO_HINT_METRICS_OFF: Do not hint font metrics, since 1.0
1197 * @CAIRO_HINT_METRICS_ON: Hint font metrics, since 1.0
1199 * Specifies whether to hint font metrics; hinting font metrics
1200 * means quantizing them so that they are integer values in
1201 * device space. Doing this improves the consistency of
1202 * letter and line spacing, however it also means that text
1203 * will be laid out differently at different zoom factors.
1207 alias cairo_hint_metrics_t
= int;
1208 enum : cairo_hint_metrics_t
{
1209 CAIRO_HINT_METRICS_DEFAULT
,
1210 CAIRO_HINT_METRICS_OFF
,
1211 CAIRO_HINT_METRICS_ON
1215 * cairo_font_options_t:
1217 * An opaque structure holding all options that are used when
1220 * Individual features of a #cairo_font_options_t can be set or
1221 * accessed using functions named
1222 * <function>cairo_font_options_set_<emphasis>feature_name</emphasis>()</function> and
1223 * <function>cairo_font_options_get_<emphasis>feature_name</emphasis>()</function>, like
1224 * cairo_font_options_set_antialias() and
1225 * cairo_font_options_get_antialias().
1227 * New features may be added to a #cairo_font_options_t in the
1228 * future. For this reason, cairo_font_options_copy(),
1229 * cairo_font_options_equal(), cairo_font_options_merge(), and
1230 * cairo_font_options_hash() should be used to copy, check
1231 * for equality, merge, or compute a hash value of
1232 * #cairo_font_options_t objects.
1236 struct cairo_font_options_t
;
1238 /*cairo_public*/ cairo_font_options_t
* cairo_font_options_create ();
1239 /*cairo_public*/ cairo_font_options_t
* cairo_font_options_copy (const(cairo_font_options_t
)* original
);
1240 /*cairo_public*/ void cairo_font_options_destroy (cairo_font_options_t
* options
);
1241 /*cairo_public*/ cairo_status_t
cairo_font_options_status (cairo_font_options_t
* options
);
1242 /*cairo_public*/ void cairo_font_options_merge (cairo_font_options_t
* options
, const(cairo_font_options_t
)* other
);
1243 /*cairo_public*/ cairo_bool_t
cairo_font_options_equal (const(cairo_font_options_t
)* options
, const(cairo_font_options_t
)* other
);
1244 /*cairo_public*/ c_ulong
cairo_font_options_hash (const(cairo_font_options_t
)* options
);
1245 /*cairo_public*/ void cairo_font_options_set_antialias (cairo_font_options_t
* options
, cairo_antialias_t antialias
);
1246 /*cairo_public*/ cairo_antialias_t
cairo_font_options_get_antialias (const(cairo_font_options_t
)* options
);
1247 /*cairo_public*/ void cairo_font_options_set_subpixel_order (cairo_font_options_t
* options
, cairo_subpixel_order_t subpixel_order
);
1248 /*cairo_public*/ cairo_subpixel_order_t
cairo_font_options_get_subpixel_order (const(cairo_font_options_t
)* options
);
1249 /*cairo_public*/ void cairo_font_options_set_hint_style (cairo_font_options_t
* options
, cairo_hint_style_t hint_style
);
1250 /*cairo_public*/ cairo_hint_style_t
cairo_font_options_get_hint_style (const(cairo_font_options_t
)* options
);
1251 /*cairo_public*/ void cairo_font_options_set_hint_metrics (cairo_font_options_t
* options
, cairo_hint_metrics_t hint_metrics
);
1252 /*cairo_public*/ cairo_hint_metrics_t
cairo_font_options_get_hint_metrics (const(cairo_font_options_t
)* options
);
1254 /* This interface is for dealing with text as text, not caring about the
1255 font object inside the the cairo_t. */
1257 /*cairo_public*/ void cairo_select_font_face (cairo_t
* cr
, const(char)* family
, cairo_font_slant_t slant
, cairo_font_weight_t weight
);
1258 /*cairo_public*/ void cairo_set_font_size (cairo_t
* cr
, double size
);
1259 /*cairo_public*/ void cairo_set_font_matrix (cairo_t
* cr
, const(cairo_matrix_t
)* matrix
);
1260 /*cairo_public*/ void cairo_get_font_matrix (cairo_t
* cr
, cairo_matrix_t
* matrix
);
1261 /*cairo_public*/ void cairo_set_font_options (cairo_t
* cr
, const(cairo_font_options_t
)* options
);
1262 /*cairo_public*/ void cairo_get_font_options (cairo_t
* cr
, cairo_font_options_t
* options
);
1263 /*cairo_public*/ void cairo_set_font_face (cairo_t
* cr
, cairo_font_face_t
* font_face
);
1264 /*cairo_public*/ cairo_font_face_t
* cairo_get_font_face (cairo_t
* cr
);
1265 /*cairo_public*/ void cairo_set_scaled_font (cairo_t
* cr
, const(cairo_scaled_font_t
)* scaled_font
);
1266 /*cairo_public*/ cairo_scaled_font_t
* cairo_get_scaled_font (cairo_t
* cr
);
1267 /*cairo_public*/ void cairo_show_text (cairo_t
* cr
, const(char)* utf8
);
1268 /*cairo_public*/ void cairo_show_glyphs (cairo_t
* cr
, const(cairo_glyph_t
)* glyphs
, int num_glyphs
);
1269 /*cairo_public*/ void cairo_show_text_glyphs (cairo_t
* cr
, const(char)* utf8
, int utf8_len
, const(cairo_glyph_t
)* glyphs
, int num_glyphs
,
1270 const(cairo_text_cluster_t
)* clusters
, int num_clusters
, cairo_text_cluster_flags_t cluster_flags
);
1271 /*cairo_public*/ void cairo_text_path (cairo_t
* cr
, const(char)* utf8
);
1272 /*cairo_public*/ void cairo_glyph_path (cairo_t
* cr
, const(cairo_glyph_t
)* glyphs
, int num_glyphs
);
1273 /*cairo_public*/ void cairo_text_extents (cairo_t
* cr
, const(char)* utf8
, cairo_text_extents_t
* extents
);
1274 /*cairo_public*/ void cairo_glyph_extents (cairo_t
* cr
, const(cairo_glyph_t
)* glyphs
, int num_glyphs
, cairo_text_extents_t
* extents
);
1275 /*cairo_public*/ void cairo_font_extents (cairo_t
* cr
, cairo_font_extents_t
* extents
);
1277 /* Generic identifier for a font style */
1278 /*cairo_public*/ cairo_font_face_t
* cairo_font_face_reference (cairo_font_face_t
* font_face
);
1279 /*cairo_public*/ void cairo_font_face_destroy (cairo_font_face_t
* font_face
);
1280 /*cairo_public*/ uint cairo_font_face_get_reference_count (cairo_font_face_t
* font_face
);
1281 /*cairo_public*/ cairo_status_t
cairo_font_face_status (cairo_font_face_t
* font_face
);
1285 * cairo_font_type_t:
1286 * @CAIRO_FONT_TYPE_TOY: The font was created using cairo's toy font api (Since: 1.2)
1287 * @CAIRO_FONT_TYPE_FT: The font is of type FreeType (Since: 1.2)
1288 * @CAIRO_FONT_TYPE_WIN32: The font is of type Win32 (Since: 1.2)
1289 * @CAIRO_FONT_TYPE_QUARTZ: The font is of type Quartz (Since: 1.6, in 1.2 and
1290 * 1.4 it was named CAIRO_FONT_TYPE_ATSUI)
1291 * @CAIRO_FONT_TYPE_USER: The font was create using cairo's user font api (Since: 1.8)
1293 * #cairo_font_type_t is used to describe the type of a given font
1294 * face or scaled font. The font types are also known as "font
1295 * backends" within cairo.
1297 * The type of a font face is determined by the function used to
1298 * create it, which will generally be of the form
1299 * <function>cairo_<emphasis>type</emphasis>_font_face_create(<!-- -->)</function>.
1300 * The font face type can be queried with cairo_font_face_get_type()
1302 * The various #cairo_font_face_t functions can be used with a font face
1305 * The type of a scaled font is determined by the type of the font
1306 * face passed to cairo_scaled_font_create(). The scaled font type can
1307 * be queried with cairo_scaled_font_get_type()
1309 * The various #cairo_scaled_font_t functions can be used with scaled
1310 * fonts of any type, but some font backends also provide
1311 * type-specific functions that must only be called with a scaled font
1312 * of the appropriate type. These functions have names that begin with
1313 * <function>cairo_<emphasis>type</emphasis>_scaled_font(<!-- -->)</function>
1314 * such as cairo_ft_scaled_font_lock_face().
1316 * The behavior of calling a type-specific function with a scaled font
1317 * of the wrong type is undefined.
1319 * New entries may be added in future versions.
1323 alias cairo_font_type_t
= int;
1324 enum : cairo_font_type_t
{
1325 CAIRO_FONT_TYPE_TOY
,
1327 CAIRO_FONT_TYPE_WIN32
,
1328 CAIRO_FONT_TYPE_QUARTZ
,
1329 CAIRO_FONT_TYPE_USER
1332 /*cairo_public*/ cairo_font_type_t
cairo_font_face_get_type (cairo_font_face_t
* font_face
);
1333 /*cairo_public*/ void* cairo_font_face_get_user_data (cairo_font_face_t
* font_face
, const(cairo_user_data_key_t
)* key
);
1334 /*cairo_public*/ cairo_status_t
cairo_font_face_set_user_data (cairo_font_face_t
* font_face
, const(cairo_user_data_key_t
)* key
, void* user_data
, cairo_destroy_func_t destroy
);
1336 /* Portable interface to general font features. */
1337 /*cairo_public*/ cairo_scaled_font_t
* cairo_scaled_font_create (cairo_font_face_t
* font_face
, const(cairo_matrix_t
)* font_matrix
, const(cairo_matrix_t
)* ctm
, const(cairo_font_options_t
)* options
);
1338 /*cairo_public*/ cairo_scaled_font_t
* cairo_scaled_font_reference (cairo_scaled_font_t
* scaled_font
);
1339 /*cairo_public*/ void cairo_scaled_font_destroy (cairo_scaled_font_t
* scaled_font
);
1340 /*cairo_public*/ uint cairo_scaled_font_get_reference_count (cairo_scaled_font_t
* scaled_font
);
1341 /*cairo_public*/ cairo_status_t
cairo_scaled_font_status (cairo_scaled_font_t
* scaled_font
);
1342 /*cairo_public*/ cairo_font_type_t
cairo_scaled_font_get_type (cairo_scaled_font_t
* scaled_font
);
1343 /*cairo_public*/ void* cairo_scaled_font_get_user_data (cairo_scaled_font_t
* scaled_font
, const(cairo_user_data_key_t
)* key
);
1344 /*cairo_public*/ cairo_status_t
cairo_scaled_font_set_user_data (cairo_scaled_font_t
* scaled_font
, const(cairo_user_data_key_t
)* key
, void* user_data
, cairo_destroy_func_t destroy
);
1345 /*cairo_public*/ void cairo_scaled_font_extents (cairo_scaled_font_t
* scaled_font
, cairo_font_extents_t
* extents
);
1346 /*cairo_public*/ void cairo_scaled_font_text_extents (cairo_scaled_font_t
* scaled_font
, const(char)* utf8
, cairo_text_extents_t
* extents
);
1347 /*cairo_public*/ void cairo_scaled_font_glyph_extents (cairo_scaled_font_t
* scaled_font
, const(cairo_glyph_t
)* glyphs
, int num_glyphs
, cairo_text_extents_t
* extents
);
1348 /*cairo_public*/ cairo_status_t
cairo_scaled_font_text_to_glyphs (cairo_scaled_font_t
* scaled_font
, double x
, double y
, const(char)* utf8
, int utf8_len
,
1349 cairo_glyph_t
** glyphs
, int* num_glyphs
, cairo_text_cluster_t
** clusters
, int* num_clusters
,
1350 cairo_text_cluster_flags_t
* cluster_flags
);
1351 /*cairo_public*/ cairo_font_face_t
* cairo_scaled_font_get_font_face (cairo_scaled_font_t
* scaled_font
);
1352 /*cairo_public*/ void cairo_scaled_font_get_font_matrix (cairo_scaled_font_t
* scaled_font
, cairo_matrix_t
* font_matrix
);
1353 /*cairo_public*/ void cairo_scaled_font_get_ctm (cairo_scaled_font_t
* scaled_font
, cairo_matrix_t
* ctm
);
1354 /*cairo_public*/ void cairo_scaled_font_get_scale_matrix (cairo_scaled_font_t
* scaled_font
, cairo_matrix_t
* scale_matrix
);
1355 /*cairo_public*/ void cairo_scaled_font_get_font_options (cairo_scaled_font_t
* scaled_font
, cairo_font_options_t
* options
);
1358 /*cairo_public*/ cairo_font_face_t
* cairo_toy_font_face_create (const(char)* family
, cairo_font_slant_t slant
, cairo_font_weight_t weight
);
1359 /*cairo_public*/ const(char)* cairo_toy_font_face_get_family (cairo_font_face_t
* font_face
);
1360 /*cairo_public*/ cairo_font_slant_t
cairo_toy_font_face_get_slant (cairo_font_face_t
* font_face
);
1361 /*cairo_public*/ cairo_font_weight_t
cairo_toy_font_face_get_weight (cairo_font_face_t
* font_face
);
1364 /*cairo_public*/ cairo_font_face_t
* cairo_user_font_face_create ();
1366 /* User-font method signatures */
1369 * cairo_user_scaled_font_init_func_t:
1370 * @scaled_font: the scaled-font being created
1371 * @cr: a cairo context, in font space
1372 * @extents: font extents to fill in, in font space
1374 * #cairo_user_scaled_font_init_func_t is the type of function which is
1375 * called when a scaled-font needs to be created for a user font-face.
1377 * The cairo context @cr is not used by the caller, but is prepared in font
1378 * space, similar to what the cairo contexts passed to the render_glyph
1379 * method will look like. The callback can use this context for extents
1380 * computation for example. After the callback is called, @cr is checked
1381 * for any error status.
1383 * The @extents argument is where the user font sets the font extents for
1384 * @scaled_font. It is in font space, which means that for most cases its
1385 * ascent and descent members should add to 1.0. @extents is preset to
1386 * hold a value of 1.0 for ascent, height, and max_x_advance, and 0.0 for
1387 * descent and max_y_advance members.
1389 * The callback is optional. If not set, default font extents as described
1390 * in the previous paragraph will be used.
1392 * Note that @scaled_font is not fully initialized at this
1393 * point and trying to use it for text operations in the callback will result
1396 * Returns: %CAIRO_STATUS_SUCCESS upon success, or an error status on error.
1400 alias cairo_user_scaled_font_init_func_t
= cairo_status_t
function (cairo_scaled_font_t
* scaled_font
, cairo_t
* cr
, cairo_font_extents_t
* extents
);
1403 * cairo_user_scaled_font_render_glyph_func_t:
1404 * @scaled_font: user scaled-font
1405 * @glyph: glyph code to render
1406 * @cr: cairo context to draw to, in font space
1407 * @extents: glyph extents to fill in, in font space
1409 * #cairo_user_scaled_font_render_glyph_func_t is the type of function which
1410 * is called when a user scaled-font needs to render a glyph.
1412 * The callback is mandatory, and expected to draw the glyph with code @glyph to
1413 * the cairo context @cr. @cr is prepared such that the glyph drawing is done in
1414 * font space. That is, the matrix set on @cr is the scale matrix of @scaled_font,
1415 * The @extents argument is where the user font sets the font extents for
1416 * @scaled_font. However, if user prefers to draw in user space, they can
1417 * achieve that by changing the matrix on @cr. All cairo rendering operations
1418 * to @cr are permitted, however, the result is undefined if any source other
1419 * than the default source on @cr is used. That means, glyph bitmaps should
1420 * be rendered using cairo_mask() instead of cairo_paint().
1422 * Other non-default settings on @cr include a font size of 1.0 (given that
1423 * it is set up to be in font space), and font options corresponding to
1426 * The @extents argument is preset to have <literal>x_bearing</literal>,
1427 * <literal>width</literal>, and <literal>y_advance</literal> of zero,
1428 * <literal>y_bearing</literal> set to <literal>-font_extents.ascent</literal>,
1429 * <literal>height</literal> to <literal>font_extents.ascent+font_extents.descent</literal>,
1430 * and <literal>x_advance</literal> to <literal>font_extents.max_x_advance</literal>.
1431 * The only field user needs to set in majority of cases is
1432 * <literal>x_advance</literal>.
1433 * If the <literal>width</literal> field is zero upon the callback returning
1434 * (which is its preset value), the glyph extents are automatically computed
1435 * based on the drawings done to @cr. This is in most cases exactly what the
1436 * desired behavior is. However, if for any reason the callback sets the
1437 * extents, it must be ink extents, and include the extents of all drawing
1438 * done to @cr in the callback.
1440 * Returns: %CAIRO_STATUS_SUCCESS upon success, or
1441 * %CAIRO_STATUS_USER_FONT_ERROR or any other error status on error.
1445 alias cairo_user_scaled_font_render_glyph_func_t
= cairo_status_t
function (cairo_scaled_font_t
* scaled_font
, c_ulong glyph
, cairo_t
* cr
, cairo_text_extents_t
* extents
);
1448 * cairo_user_scaled_font_text_to_glyphs_func_t:
1449 * @scaled_font: the scaled-font being created
1450 * @utf8: a string of text encoded in UTF-8
1451 * @utf8_len: length of @utf8 in bytes
1452 * @glyphs: pointer to array of glyphs to fill, in font space
1453 * @num_glyphs: pointer to number of glyphs
1454 * @clusters: pointer to array of cluster mapping information to fill, or %NULL
1455 * @num_clusters: pointer to number of clusters
1456 * @cluster_flags: pointer to location to store cluster flags corresponding to the
1459 * #cairo_user_scaled_font_text_to_glyphs_func_t is the type of function which
1460 * is called to convert input text to an array of glyphs. This is used by the
1461 * cairo_show_text() operation.
1463 * Using this callback the user-font has full control on glyphs and their
1464 * positions. That means, it allows for features like ligatures and kerning,
1465 * as well as complex <firstterm>shaping</firstterm> required for scripts like
1468 * The @num_glyphs argument is preset to the number of glyph entries available
1469 * in the @glyphs buffer. If the @glyphs buffer is %NULL, the value of
1470 * @num_glyphs will be zero. If the provided glyph array is too short for
1471 * the conversion (or for convenience), a new glyph array may be allocated
1472 * using cairo_glyph_allocate() and placed in @glyphs. Upon return,
1473 * @num_glyphs should contain the number of generated glyphs. If the value
1474 * @glyphs points at has changed after the call, the caller will free the
1475 * allocated glyph array using cairo_glyph_free(). The caller will also free
1476 * the original value of @glyphs, so the callback shouldn't do so.
1477 * The callback should populate the glyph indices and positions (in font space)
1478 * assuming that the text is to be shown at the origin.
1480 * If @clusters is not %NULL, @num_clusters and @cluster_flags are also
1481 * non-%NULL, and cluster mapping should be computed. The semantics of how
1482 * cluster array allocation works is similar to the glyph array. That is,
1483 * if @clusters initially points to a non-%NULL value, that array may be used
1484 * as a cluster buffer, and @num_clusters points to the number of cluster
1485 * entries available there. If the provided cluster array is too short for
1486 * the conversion (or for convenience), a new cluster array may be allocated
1487 * using cairo_text_cluster_allocate() and placed in @clusters. In this case,
1488 * the original value of @clusters will still be freed by the caller. Upon
1489 * return, @num_clusters should contain the number of generated clusters.
1490 * If the value @clusters points at has changed after the call, the caller
1491 * will free the allocated cluster array using cairo_text_cluster_free().
1493 * The callback is optional. If @num_glyphs is negative upon
1494 * the callback returning or if the return value
1495 * is %CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED, the unicode_to_glyph callback
1496 * is tried. See #cairo_user_scaled_font_unicode_to_glyph_func_t.
1498 * Note: While cairo does not impose any limitation on glyph indices,
1499 * some applications may assume that a glyph index fits in a 16-bit
1500 * unsigned integer. As such, it is advised that user-fonts keep their
1501 * glyphs in the 0 to 65535 range. Furthermore, some applications may
1502 * assume that glyph 0 is a special glyph-not-found glyph. User-fonts
1503 * are advised to use glyph 0 for such purposes and do not use that
1504 * glyph value for other purposes.
1506 * Returns: %CAIRO_STATUS_SUCCESS upon success,
1507 * %CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED if fallback options should be tried,
1508 * or %CAIRO_STATUS_USER_FONT_ERROR or any other error status on error.
1512 alias cairo_user_scaled_font_text_to_glyphs_func_t
= cairo_status_t
function (cairo_scaled_font_t
* scaled_font
, const(char)* utf8
, int utf8_len
,
1513 cairo_glyph_t
** glyphs
, int* num_glyphs
, cairo_text_cluster_t
** clusters
,
1514 int* num_clusters
, cairo_text_cluster_flags_t
* cluster_flags
);
1517 * cairo_user_scaled_font_unicode_to_glyph_func_t:
1518 * @scaled_font: the scaled-font being created
1519 * @unicode: input unicode character code-point
1520 * @glyph_index: output glyph index
1522 * #cairo_user_scaled_font_unicode_to_glyph_func_t is the type of function which
1523 * is called to convert an input Unicode character to a single glyph.
1524 * This is used by the cairo_show_text() operation.
1526 * This callback is used to provide the same functionality as the
1527 * text_to_glyphs callback does (see #cairo_user_scaled_font_text_to_glyphs_func_t)
1528 * but has much less control on the output,
1529 * in exchange for increased ease of use. The inherent assumption to using
1530 * this callback is that each character maps to one glyph, and that the
1531 * mapping is context independent. It also assumes that glyphs are positioned
1532 * according to their advance width. These mean no ligatures, kerning, or
1533 * complex scripts can be implemented using this callback.
1535 * The callback is optional, and only used if text_to_glyphs callback is not
1536 * set or fails to return glyphs. If this callback is not set or if it returns
1537 * %CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED, an identity mapping from Unicode
1538 * code-points to glyph indices is assumed.
1540 * Note: While cairo does not impose any limitation on glyph indices,
1541 * some applications may assume that a glyph index fits in a 16-bit
1542 * unsigned integer. As such, it is advised that user-fonts keep their
1543 * glyphs in the 0 to 65535 range. Furthermore, some applications may
1544 * assume that glyph 0 is a special glyph-not-found glyph. User-fonts
1545 * are advised to use glyph 0 for such purposes and do not use that
1546 * glyph value for other purposes.
1548 * Returns: %CAIRO_STATUS_SUCCESS upon success,
1549 * %CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED if fallback options should be tried,
1550 * or %CAIRO_STATUS_USER_FONT_ERROR or any other error status on error.
1554 alias cairo_user_scaled_font_unicode_to_glyph_func_t
= cairo_status_t
function (cairo_scaled_font_t
* scaled_font
, c_ulong unicode
, c_ulong
* glyph_index
);
1556 /* User-font method setters */
1557 /*cairo_public*/ void cairo_user_font_face_set_init_func (cairo_font_face_t
* font_face
, cairo_user_scaled_font_init_func_t init_func
);
1558 /*cairo_public*/ void cairo_user_font_face_set_render_glyph_func (cairo_font_face_t
* font_face
, cairo_user_scaled_font_render_glyph_func_t render_glyph_func
);
1559 /*cairo_public*/ void cairo_user_font_face_set_text_to_glyphs_func (cairo_font_face_t
* font_face
, cairo_user_scaled_font_text_to_glyphs_func_t text_to_glyphs_func
);
1560 /*cairo_public*/ void cairo_user_font_face_set_unicode_to_glyph_func (cairo_font_face_t
* font_face
, cairo_user_scaled_font_unicode_to_glyph_func_t unicode_to_glyph_func
);
1562 /* User-font method getters */
1563 /*cairo_public*/ cairo_user_scaled_font_init_func_t
cairo_user_font_face_get_init_func (cairo_font_face_t
* font_face
);
1564 /*cairo_public*/ cairo_user_scaled_font_render_glyph_func_t
cairo_user_font_face_get_render_glyph_func (cairo_font_face_t
* font_face
);
1565 /*cairo_public*/ cairo_user_scaled_font_text_to_glyphs_func_t
cairo_user_font_face_get_text_to_glyphs_func (cairo_font_face_t
* font_face
);
1566 /*cairo_public*/ cairo_user_scaled_font_unicode_to_glyph_func_t
cairo_user_font_face_get_unicode_to_glyph_func (cairo_font_face_t
* font_face
);
1568 /* Query functions */
1570 /*cairo_public*/ cairo_operator_t
cairo_get_operator (cairo_t
* cr
);
1571 /*cairo_public*/ cairo_pattern_t
* cairo_get_source (cairo_t
* cr
);
1572 /*cairo_public*/ double cairo_get_tolerance (cairo_t
* cr
);
1573 /*cairo_public*/ cairo_antialias_t
cairo_get_antialias (cairo_t
* cr
);
1574 /*cairo_public*/ cairo_bool_t
cairo_has_current_point (cairo_t
* cr
);
1575 /*cairo_public*/ void cairo_get_current_point (cairo_t
* cr
, double* x
, double* y
);
1576 /*cairo_public*/ cairo_fill_rule_t
cairo_get_fill_rule (cairo_t
* cr
);
1577 /*cairo_public*/ double cairo_get_line_width (cairo_t
* cr
);
1578 /*cairo_public*/ cairo_line_cap_t
cairo_get_line_cap (cairo_t
* cr
);
1579 /*cairo_public*/ cairo_line_join_t
cairo_get_line_join (cairo_t
* cr
);
1580 /*cairo_public*/ double cairo_get_miter_limit (cairo_t
* cr
);
1581 /*cairo_public*/ int cairo_get_dash_count (cairo_t
* cr
);
1582 /*cairo_public*/ void cairo_get_dash (cairo_t
* cr
, double* dashes
, double* offset
);
1583 /*cairo_public*/ void cairo_get_matrix (cairo_t
* cr
, cairo_matrix_t
* matrix
);
1584 /*cairo_public*/ cairo_surface_t
* cairo_get_target (cairo_t
* cr
);
1585 /*cairo_public*/ cairo_surface_t
* cairo_get_group_target (cairo_t
* cr
);
1588 * cairo_path_data_type_t:
1589 * @CAIRO_PATH_MOVE_TO: A move-to operation, since 1.0
1590 * @CAIRO_PATH_LINE_TO: A line-to operation, since 1.0
1591 * @CAIRO_PATH_CURVE_TO: A curve-to operation, since 1.0
1592 * @CAIRO_PATH_CLOSE_PATH: A close-path operation, since 1.0
1594 * #cairo_path_data_t is used to describe the type of one portion
1595 * of a path when represented as a #cairo_path_t.
1596 * See #cairo_path_data_t for details.
1600 alias cairo_path_data_type_t
= int;
1601 enum : cairo_path_data_type_t
{
1604 CAIRO_PATH_CURVE_TO
,
1605 CAIRO_PATH_CLOSE_PATH
1609 * cairo_path_data_t:
1611 * #cairo_path_data_t is used to represent the path data inside a
1614 * The data structure is designed to try to balance the demands of
1615 * efficiency and ease-of-use. A path is represented as an array of
1616 * #cairo_path_data_t, which is a union of headers and points.
1618 * Each portion of the path is represented by one or more elements in
1619 * the array, (one header followed by 0 or more points). The length
1620 * value of the header is the number of array elements for the current
1621 * portion including the header, (ie. length == 1 + # of points), and
1622 * where the number of points for each element type is as follows:
1625 * %CAIRO_PATH_MOVE_TO: 1 point
1626 * %CAIRO_PATH_LINE_TO: 1 point
1627 * %CAIRO_PATH_CURVE_TO: 3 points
1628 * %CAIRO_PATH_CLOSE_PATH: 0 points
1631 * The semantics and ordering of the coordinate values are consistent
1632 * with cairo_move_to(), cairo_line_to(), cairo_curve_to(), and
1633 * cairo_close_path().
1635 * Here is sample code for iterating through a #cairo_path_t:
1637 * <informalexample><programlisting>
1639 * cairo_path_t *path;
1640 * cairo_path_data_t *data;
1642 * path = cairo_copy_path (cr);
1644 * for (i=0; i < path->num_data; i += path->data[i].header.length) {
1645 * data = &path->data[i];
1646 * switch (data->header.type) {
1647 * case CAIRO_PATH_MOVE_TO:
1648 * do_move_to_things (data[1].point.x, data[1].point.y);
1650 * case CAIRO_PATH_LINE_TO:
1651 * do_line_to_things (data[1].point.x, data[1].point.y);
1653 * case CAIRO_PATH_CURVE_TO:
1654 * do_curve_to_things (data[1].point.x, data[1].point.y,
1655 * data[2].point.x, data[2].point.y,
1656 * data[3].point.x, data[3].point.y);
1658 * case CAIRO_PATH_CLOSE_PATH:
1659 * do_close_path_things ();
1663 * cairo_path_destroy (path);
1664 * </programlisting></informalexample>
1666 * As of cairo 1.4, cairo does not mind if there are more elements in
1667 * a portion of the path than needed. Such elements can be used by
1668 * users of the cairo API to hold extra values in the path data
1669 * structure. For this reason, it is recommended that applications
1670 * always use <literal>data->header.length</literal> to
1671 * iterate over the path data, instead of hardcoding the number of
1672 * elements for each element type.
1676 union cairo_path_data_t
{
1677 static struct Header
{
1678 cairo_path_data_type_t type
;
1682 static struct Point
{
1690 * @status: the current error status
1691 * @data: the elements in the path
1692 * @num_data: the number of elements in the data array
1694 * A data structure for holding a path. This data structure serves as
1695 * the return value for cairo_copy_path() and
1696 * cairo_copy_path_flat() as well the input value for
1697 * cairo_append_path().
1699 * See #cairo_path_data_t for hints on how to iterate over the
1700 * actual data within the path.
1702 * The num_data member gives the number of elements in the data
1703 * array. This number is larger than the number of independent path
1704 * portions (defined in #cairo_path_data_type_t), since the data
1705 * includes both headers and coordinates for each portion.
1709 struct cairo_path_t
{
1710 cairo_status_t status
;
1711 cairo_path_data_t
* data
;
1715 /*cairo_public*/ cairo_path_t
* cairo_copy_path (cairo_t
* cr
);
1716 /*cairo_public*/ cairo_path_t
* cairo_copy_path_flat (cairo_t
* cr
);
1717 /*cairo_public*/ void cairo_append_path (cairo_t
* cr
, const(cairo_path_t
)* path
);
1718 /*cairo_public*/ void cairo_path_destroy (cairo_path_t
* path
);
1720 /* Error status queries */
1721 /*cairo_public*/ cairo_status_t
cairo_status (cairo_t
* cr
);
1722 /*cairo_public*/ const(char)* cairo_status_to_string (cairo_status_t status
);
1724 /* Backend device manipulation */
1725 /*cairo_public*/ cairo_device_t
* cairo_device_reference (cairo_device_t
* device
);
1728 * cairo_device_type_t:
1729 * @CAIRO_DEVICE_TYPE_DRM: The device is of type Direct Render Manager, since 1.10
1730 * @CAIRO_DEVICE_TYPE_GL: The device is of type OpenGL, since 1.10
1731 * @CAIRO_DEVICE_TYPE_SCRIPT: The device is of type script, since 1.10
1732 * @CAIRO_DEVICE_TYPE_XCB: The device is of type xcb, since 1.10
1733 * @CAIRO_DEVICE_TYPE_XLIB: The device is of type xlib, since 1.10
1734 * @CAIRO_DEVICE_TYPE_XML: The device is of type XML, since 1.10
1735 * @CAIRO_DEVICE_TYPE_COGL: The device is of type cogl, since 1.12
1736 * @CAIRO_DEVICE_TYPE_WIN32: The device is of type win32, since 1.12
1737 * @CAIRO_DEVICE_TYPE_INVALID: The device is invalid, since 1.10
1739 * #cairo_device_type_t is used to describe the type of a given
1740 * device. The devices types are also known as "backends" within cairo.
1742 * The device type can be queried with cairo_device_get_type()
1744 * The various #cairo_device_t functions can be used with devices of
1745 * any type, but some backends also provide type-specific functions
1746 * that must only be called with a device of the appropriate
1747 * type. These functions have names that begin with
1748 * <literal>cairo_<emphasis>type</emphasis>_device</literal> such as
1749 * cairo_xcb_device_debug_cap_xrender_version().
1751 * The behavior of calling a type-specific function with a device of
1752 * the wrong type is undefined.
1754 * New entries may be added in future versions.
1758 alias cairo_device_type_t
= int;
1759 enum : cairo_device_type_t
{
1760 CAIRO_DEVICE_TYPE_DRM
,
1761 CAIRO_DEVICE_TYPE_GL
,
1762 CAIRO_DEVICE_TYPE_SCRIPT
,
1763 CAIRO_DEVICE_TYPE_XCB
,
1764 CAIRO_DEVICE_TYPE_XLIB
,
1765 CAIRO_DEVICE_TYPE_XML
,
1766 CAIRO_DEVICE_TYPE_COGL
,
1767 CAIRO_DEVICE_TYPE_WIN32
,
1769 CAIRO_DEVICE_TYPE_INVALID
= -1
1772 /*cairo_public*/ cairo_device_type_t
cairo_device_get_type (cairo_device_t
* device
);
1773 /*cairo_public*/ cairo_status_t
cairo_device_status (cairo_device_t
* device
);
1774 /*cairo_public*/ cairo_status_t
cairo_device_acquire (cairo_device_t
* device
);
1775 /*cairo_public*/ void cairo_device_release (cairo_device_t
* device
);
1776 /*cairo_public*/ void cairo_device_flush (cairo_device_t
* device
);
1777 /*cairo_public*/ void cairo_device_finish (cairo_device_t
* device
);
1778 /*cairo_public*/ void cairo_device_destroy (cairo_device_t
* device
);
1779 /*cairo_public*/ uint cairo_device_get_reference_count (cairo_device_t
* device
);
1780 /*cairo_public*/ void* cairo_device_get_user_data (cairo_device_t
* device
, const(cairo_user_data_key_t
)* key
);
1781 /*cairo_public*/ cairo_status_t
cairo_device_set_user_data (cairo_device_t
* device
, const(cairo_user_data_key_t
)* key
, void* user_data
, cairo_destroy_func_t destroy
);
1783 /* Surface manipulation */
1784 /*cairo_public*/ cairo_surface_t
* cairo_surface_create_similar (cairo_surface_t
* other
, cairo_content_t content
, int width
, int height
);
1785 /*cairo_public*/ cairo_surface_t
* cairo_surface_create_similar_image (cairo_surface_t
* other
, cairo_format_t format
, int width
, int height
);
1786 /*cairo_public*/ cairo_surface_t
* cairo_surface_map_to_image (cairo_surface_t
* surface
, const(cairo_rectangle_int_t
)* extents
);
1787 /*cairo_public*/ void cairo_surface_unmap_image (cairo_surface_t
* surface
, cairo_surface_t
* image
);
1788 /*cairo_public*/ cairo_surface_t
* cairo_surface_create_for_rectangle (cairo_surface_t
* target
, double x
, double y
, double width
, double height
);
1791 * cairo_surface_observer_mode_t:
1792 * @CAIRO_SURFACE_OBSERVER_NORMAL: no recording is done
1793 * @CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS: operations are recorded
1795 * Whether operations should be recorded.
1799 alias cairo_surface_observer_mode_t
= int;
1800 enum : cairo_surface_observer_mode_t
{
1801 CAIRO_SURFACE_OBSERVER_NORMAL
= 0,
1802 CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS
= 0x1
1805 /*cairo_public*/ cairo_surface_t
* cairo_surface_create_observer (cairo_surface_t
* target
, cairo_surface_observer_mode_t mode
);
1807 alias cairo_surface_observer_callback_t
= void function (cairo_surface_t
* observer
, cairo_surface_t
* target
, void* data
);
1809 /*cairo_public*/ cairo_status_t
cairo_surface_observer_add_paint_callback (cairo_surface_t
* abstract_surface
, cairo_surface_observer_callback_t func
, void* data
);
1810 /*cairo_public*/ cairo_status_t
cairo_surface_observer_add_mask_callback (cairo_surface_t
* abstract_surface
, cairo_surface_observer_callback_t func
, void* data
);
1811 /*cairo_public*/ cairo_status_t
cairo_surface_observer_add_fill_callback (cairo_surface_t
* abstract_surface
, cairo_surface_observer_callback_t func
, void* data
);
1812 /*cairo_public*/ cairo_status_t
cairo_surface_observer_add_stroke_callback (cairo_surface_t
* abstract_surface
, cairo_surface_observer_callback_t func
, void* data
);
1813 /*cairo_public*/ cairo_status_t
cairo_surface_observer_add_glyphs_callback (cairo_surface_t
* abstract_surface
, cairo_surface_observer_callback_t func
, void* data
);
1814 /*cairo_public*/ cairo_status_t
cairo_surface_observer_add_flush_callback (cairo_surface_t
* abstract_surface
, cairo_surface_observer_callback_t func
, void* data
);
1815 /*cairo_public*/ cairo_status_t
cairo_surface_observer_add_finish_callback (cairo_surface_t
* abstract_surface
, cairo_surface_observer_callback_t func
, void* data
);
1816 /*cairo_public*/ cairo_status_t
cairo_surface_observer_print (cairo_surface_t
* surface
, cairo_write_func_t write_func
, void* closure
);
1817 /*cairo_public*/ double cairo_surface_observer_elapsed (cairo_surface_t
* surface
);
1818 /*cairo_public*/ cairo_status_t
cairo_device_observer_print (cairo_device_t
* device
, cairo_write_func_t write_func
, void* closure
);
1819 /*cairo_public*/ double cairo_device_observer_elapsed (cairo_device_t
* device
);
1820 /*cairo_public*/ double cairo_device_observer_paint_elapsed (cairo_device_t
* device
);
1821 /*cairo_public*/ double cairo_device_observer_mask_elapsed (cairo_device_t
* device
);
1822 /*cairo_public*/ double cairo_device_observer_fill_elapsed (cairo_device_t
* device
);
1823 /*cairo_public*/ double cairo_device_observer_stroke_elapsed (cairo_device_t
* device
);
1824 /*cairo_public*/ double cairo_device_observer_glyphs_elapsed (cairo_device_t
* device
);
1825 /*cairo_public*/ cairo_surface_t
* cairo_surface_reference (cairo_surface_t
* surface
);
1826 /*cairo_public*/ void cairo_surface_finish (cairo_surface_t
* surface
);
1827 /*cairo_public*/ void cairo_surface_destroy (cairo_surface_t
* surface
);
1828 /*cairo_public*/ cairo_device_t
* cairo_surface_get_device (cairo_surface_t
* surface
);
1829 /*cairo_public*/ uint cairo_surface_get_reference_count (cairo_surface_t
* surface
);
1830 /*cairo_public*/ cairo_status_t
cairo_surface_status (cairo_surface_t
* surface
);
1833 * cairo_surface_type_t:
1834 * @CAIRO_SURFACE_TYPE_IMAGE: The surface is of type image, since 1.2
1835 * @CAIRO_SURFACE_TYPE_PDF: The surface is of type pdf, since 1.2
1836 * @CAIRO_SURFACE_TYPE_PS: The surface is of type ps, since 1.2
1837 * @CAIRO_SURFACE_TYPE_XLIB: The surface is of type xlib, since 1.2
1838 * @CAIRO_SURFACE_TYPE_XCB: The surface is of type xcb, since 1.2
1839 * @CAIRO_SURFACE_TYPE_GLITZ: The surface is of type glitz, since 1.2
1840 * @CAIRO_SURFACE_TYPE_QUARTZ: The surface is of type quartz, since 1.2
1841 * @CAIRO_SURFACE_TYPE_WIN32: The surface is of type win32, since 1.2
1842 * @CAIRO_SURFACE_TYPE_BEOS: The surface is of type beos, since 1.2
1843 * @CAIRO_SURFACE_TYPE_DIRECTFB: The surface is of type directfb, since 1.2
1844 * @CAIRO_SURFACE_TYPE_SVG: The surface is of type svg, since 1.2
1845 * @CAIRO_SURFACE_TYPE_OS2: The surface is of type os2, since 1.4
1846 * @CAIRO_SURFACE_TYPE_WIN32_PRINTING: The surface is a win32 printing surface, since 1.6
1847 * @CAIRO_SURFACE_TYPE_QUARTZ_IMAGE: The surface is of type quartz_image, since 1.6
1848 * @CAIRO_SURFACE_TYPE_SCRIPT: The surface is of type script, since 1.10
1849 * @CAIRO_SURFACE_TYPE_QT: The surface is of type Qt, since 1.10
1850 * @CAIRO_SURFACE_TYPE_RECORDING: The surface is of type recording, since 1.10
1851 * @CAIRO_SURFACE_TYPE_VG: The surface is a OpenVG surface, since 1.10
1852 * @CAIRO_SURFACE_TYPE_GL: The surface is of type OpenGL, since 1.10
1853 * @CAIRO_SURFACE_TYPE_DRM: The surface is of type Direct Render Manager, since 1.10
1854 * @CAIRO_SURFACE_TYPE_TEE: The surface is of type 'tee' (a multiplexing surface), since 1.10
1855 * @CAIRO_SURFACE_TYPE_XML: The surface is of type XML (for debugging), since 1.10
1856 * @CAIRO_SURFACE_TYPE_SKIA: The surface is of type Skia, since 1.10
1857 * @CAIRO_SURFACE_TYPE_SUBSURFACE: The surface is a subsurface created with
1858 * cairo_surface_create_for_rectangle(), since 1.10
1859 * @CAIRO_SURFACE_TYPE_COGL: This surface is of type Cogl, since 1.12
1861 * #cairo_surface_type_t is used to describe the type of a given
1862 * surface. The surface types are also known as "backends" or "surface
1863 * backends" within cairo.
1865 * The type of a surface is determined by the function used to create
1866 * it, which will generally be of the form
1867 * <function>cairo_<emphasis>type</emphasis>_surface_create(<!-- -->)</function>,
1868 * (though see cairo_surface_create_similar() as well).
1870 * The surface type can be queried with cairo_surface_get_type()
1872 * The various #cairo_surface_t functions can be used with surfaces of
1873 * any type, but some backends also provide type-specific functions
1874 * that must only be called with a surface of the appropriate
1875 * type. These functions have names that begin with
1876 * <literal>cairo_<emphasis>type</emphasis>_surface</literal> such as cairo_image_surface_get_width().
1878 * The behavior of calling a type-specific function with a surface of
1879 * the wrong type is undefined.
1881 * New entries may be added in future versions.
1885 alias cairo_surface_type_t
= int;
1886 enum : cairo_surface_type_t
{
1887 CAIRO_SURFACE_TYPE_IMAGE
,
1888 CAIRO_SURFACE_TYPE_PDF
,
1889 CAIRO_SURFACE_TYPE_PS
,
1890 CAIRO_SURFACE_TYPE_XLIB
,
1891 CAIRO_SURFACE_TYPE_XCB
,
1892 CAIRO_SURFACE_TYPE_GLITZ
,
1893 CAIRO_SURFACE_TYPE_QUARTZ
,
1894 CAIRO_SURFACE_TYPE_WIN32
,
1895 CAIRO_SURFACE_TYPE_BEOS
,
1896 CAIRO_SURFACE_TYPE_DIRECTFB
,
1897 CAIRO_SURFACE_TYPE_SVG
,
1898 CAIRO_SURFACE_TYPE_OS2
,
1899 CAIRO_SURFACE_TYPE_WIN32_PRINTING
,
1900 CAIRO_SURFACE_TYPE_QUARTZ_IMAGE
,
1901 CAIRO_SURFACE_TYPE_SCRIPT
,
1902 CAIRO_SURFACE_TYPE_QT
,
1903 CAIRO_SURFACE_TYPE_RECORDING
,
1904 CAIRO_SURFACE_TYPE_VG
,
1905 CAIRO_SURFACE_TYPE_GL
,
1906 CAIRO_SURFACE_TYPE_DRM
,
1907 CAIRO_SURFACE_TYPE_TEE
,
1908 CAIRO_SURFACE_TYPE_XML
,
1909 CAIRO_SURFACE_TYPE_SKIA
,
1910 CAIRO_SURFACE_TYPE_SUBSURFACE
,
1911 CAIRO_SURFACE_TYPE_COGL
1914 /*cairo_public*/ cairo_surface_type_t
cairo_surface_get_type (cairo_surface_t
* surface
);
1915 /*cairo_public*/ cairo_content_t
cairo_surface_get_content (cairo_surface_t
* surface
);
1916 static if (CAIRO_HAS_PNG_FUNCTIONS
) {
1917 /*cairo_public*/ cairo_status_t
cairo_surface_write_to_png (cairo_surface_t
* surface
, const(char)* filename
);
1918 /*cairo_public*/ cairo_status_t
cairo_surface_write_to_png_stream (cairo_surface_t
* surface
, cairo_write_func_t write_func
, void* closure
);
1920 /*cairo_public*/ void* cairo_surface_get_user_data (cairo_surface_t
* surface
, const(cairo_user_data_key_t
)* key
);
1921 /*cairo_public*/ cairo_status_t
cairo_surface_set_user_data (cairo_surface_t
* surface
, const(cairo_user_data_key_t
)* key
, void* user_data
, cairo_destroy_func_t destroy
);
1923 enum CAIRO_MIME_TYPE_JPEG
= "image/jpeg";
1924 enum CAIRO_MIME_TYPE_PNG
= "image/png";
1925 enum CAIRO_MIME_TYPE_JP2
= "image/jp2";
1926 enum CAIRO_MIME_TYPE_URI
= "text/x-uri";
1927 enum CAIRO_MIME_TYPE_UNIQUE_ID
= "application/x-cairo.uuid";
1928 enum CAIRO_MIME_TYPE_JBIG2
= "application/x-cairo.jbig2";
1929 enum CAIRO_MIME_TYPE_JBIG2_GLOBAL
= "application/x-cairo.jbig2-global";
1930 enum CAIRO_MIME_TYPE_JBIG2_GLOBAL_ID
= "application/x-cairo.jbig2-global-id";
1932 /*cairo_public*/ void cairo_surface_get_mime_data (cairo_surface_t
* surface
, const(char)* mime_type
, const(ubyte)** data
, c_ulong
* length
);
1933 /*cairo_public*/ cairo_status_t
cairo_surface_set_mime_data (cairo_surface_t
* surface
, const(char)* mime_type
, const(ubyte)* data
, c_ulong length
,
1934 cairo_destroy_func_t destroy
, void* closure
);
1935 /*cairo_public*/ cairo_bool_t
cairo_surface_supports_mime_type (cairo_surface_t
* surface
, const(char)* mime_type
);
1936 /*cairo_public*/ void cairo_surface_get_font_options (cairo_surface_t
* surface
, cairo_font_options_t
* options
);
1937 /*cairo_public*/ void cairo_surface_flush (cairo_surface_t
* surface
);
1938 /*cairo_public*/ void cairo_surface_mark_dirty (cairo_surface_t
* surface
);
1939 /*cairo_public*/ void cairo_surface_mark_dirty_rectangle (cairo_surface_t
* surface
, int x
, int y
, int width
, int height
);
1940 /*cairo_public*/ void cairo_surface_set_device_scale (cairo_surface_t
* surface
, double x_scale
, double y_scale
);
1941 /*cairo_public*/ void cairo_surface_get_device_scale (cairo_surface_t
* surface
, double* x_scale
, double* y_scale
);
1942 /*cairo_public*/ void cairo_surface_set_device_offset (cairo_surface_t
* surface
, double x_offset
, double y_offset
);
1943 /*cairo_public*/ void cairo_surface_get_device_offset (cairo_surface_t
* surface
, double* x_offset
, double* y_offset
);
1944 /*cairo_public*/ void cairo_surface_set_fallback_resolution (cairo_surface_t
* surface
, double x_pixels_per_inch
, double y_pixels_per_inch
);
1945 /*cairo_public*/ void cairo_surface_get_fallback_resolution (cairo_surface_t
* surface
, double* x_pixels_per_inch
, double* y_pixels_per_inch
);
1946 /*cairo_public*/ void cairo_surface_copy_page (cairo_surface_t
* surface
);
1947 /*cairo_public*/ void cairo_surface_show_page (cairo_surface_t
* surface
);
1948 /*cairo_public*/ cairo_bool_t
cairo_surface_has_show_text_glyphs (cairo_surface_t
* surface
);
1950 /* Image-surface functions */
1951 /*cairo_public*/ cairo_surface_t
* cairo_image_surface_create (cairo_format_t format
, int width
, int height
);
1952 /*cairo_public*/ int cairo_format_stride_for_width (cairo_format_t format
, int width
);
1953 /*cairo_public*/ cairo_surface_t
* cairo_image_surface_create_for_data (ubyte* data
, cairo_format_t format
, int width
, int height
, int stride
);
1954 /*cairo_public*/ ubyte* cairo_image_surface_get_data (cairo_surface_t
* surface
);
1955 /*cairo_public*/ cairo_format_t
cairo_image_surface_get_format (cairo_surface_t
* surface
);
1956 /*cairo_public*/ int cairo_image_surface_get_width (cairo_surface_t
* surface
);
1957 /*cairo_public*/ int cairo_image_surface_get_height (cairo_surface_t
* surface
);
1958 /*cairo_public*/ int cairo_image_surface_get_stride (cairo_surface_t
* surface
);
1959 static if (CAIRO_HAS_PNG_FUNCTIONS
) {
1960 /*cairo_public*/ cairo_surface_t
* cairo_image_surface_create_from_png (const(char)* filename
);
1961 /*cairo_public*/ cairo_surface_t
* cairo_image_surface_create_from_png_stream (cairo_read_func_t read_func
, void* closure
);
1964 /* Recording-surface functions */
1965 /*cairo_public*/ cairo_surface_t
* cairo_recording_surface_create (cairo_content_t content
, const(cairo_rectangle_t
)* extents
);
1966 /*cairo_public*/ void cairo_recording_surface_ink_extents (cairo_surface_t
* surface
, double* x0
, double* y0
, double* width
, double* height
);
1967 /*cairo_public*/ cairo_bool_t
cairo_recording_surface_get_extents (cairo_surface_t
* surface
, cairo_rectangle_t
* extents
);
1969 /* raster-source pattern (callback) functions */
1972 * cairo_raster_source_acquire_func_t:
1973 * @pattern: the pattern being rendered from
1974 * @callback_data: the user data supplied during creation
1975 * @target: the rendering target surface
1976 * @extents: rectangular region of interest in pixels in sample space
1978 * #cairo_raster_source_acquire_func_t is the type of function which is
1979 * called when a pattern is being rendered from. It should create a surface
1980 * that provides the pixel data for the region of interest as defined by
1981 * extents, though the surface itself does not have to be limited to that
1982 * area. For convenience the surface should probably be of image type,
1983 * created with cairo_surface_create_similar_image() for the target (which
1984 * enables the number of copies to be reduced during transfer to the
1985 * device). Another option, might be to return a similar surface to the
1986 * target for explicit handling by the application of a set of cached sources
1987 * on the device. The region of sample data provided should be defined using
1988 * cairo_surface_set_device_offset() to specify the top-left corner of the
1989 * sample data (along with width and height of the surface).
1991 * Returns: a #cairo_surface_t
1995 alias cairo_raster_source_acquire_func_t
= cairo_surface_t
* function (cairo_pattern_t
* pattern
, void* callback_data
, cairo_surface_t
* target
, const(cairo_rectangle_int_t
)* extents
);
1998 * cairo_raster_source_release_func_t:
1999 * @pattern: the pattern being rendered from
2000 * @callback_data: the user data supplied during creation
2001 * @surface: the surface created during acquire
2003 * #cairo_raster_source_release_func_t is the type of function which is
2004 * called when the pixel data is no longer being access by the pattern
2005 * for the rendering operation. Typically this function will simply
2006 * destroy the surface created during acquire.
2010 alias cairo_raster_source_release_func_t
= void function (cairo_pattern_t
* pattern
, void* callback_data
, cairo_surface_t
* surface
);
2013 * cairo_raster_source_snapshot_func_t:
2014 * @pattern: the pattern being rendered from
2015 * @callback_data: the user data supplied during creation
2017 * #cairo_raster_source_snapshot_func_t is the type of function which is
2018 * called when the pixel data needs to be preserved for later use
2019 * during printing. This pattern will be accessed again later, and it
2020 * is expected to provide the pixel data that was current at the time
2023 * Return value: CAIRO_STATUS_SUCCESS on success, or one of the
2024 * #cairo_status_t error codes for failure.
2028 alias cairo_raster_source_snapshot_func_t
= cairo_status_t
function (cairo_pattern_t
* pattern
, void* callback_data
);
2031 * cairo_raster_source_copy_func_t:
2032 * @pattern: the #cairo_pattern_t that was copied to
2033 * @callback_data: the user data supplied during creation
2034 * @other: the #cairo_pattern_t being used as the source for the copy
2036 * #cairo_raster_source_copy_func_t is the type of function which is
2037 * called when the pattern gets copied as a normal part of rendering.
2039 * Return value: CAIRO_STATUS_SUCCESS on success, or one of the
2040 * #cairo_status_t error codes for failure.
2044 alias cairo_raster_source_copy_func_t
= cairo_status_t
function (cairo_pattern_t
* pattern
, void* callback_data
, const(cairo_pattern_t
)* other
);
2047 * cairo_raster_source_finish_func_t:
2048 * @pattern: the pattern being rendered from
2049 * @callback_data: the user data supplied during creation
2051 * #cairo_raster_source_finish_func_t is the type of function which is
2052 * called when the pattern (or a copy thereof) is no longer required.
2056 alias cairo_raster_source_finish_func_t
= void function (cairo_pattern_t
* pattern
, void* callback_data
);
2058 /*cairo_public*/ cairo_pattern_t
* cairo_pattern_create_raster_source (void* user_data
, cairo_content_t content
, int width
, int height
);
2059 /*cairo_public*/ void cairo_raster_source_pattern_set_callback_data (cairo_pattern_t
* pattern
, void* data
);
2060 /*cairo_public*/ void* cairo_raster_source_pattern_get_callback_data (cairo_pattern_t
* pattern
);
2061 /*cairo_public*/ void cairo_raster_source_pattern_set_acquire (cairo_pattern_t
* pattern
, cairo_raster_source_acquire_func_t acquire
, cairo_raster_source_release_func_t release
);
2062 /*cairo_public*/ void cairo_raster_source_pattern_get_acquire (cairo_pattern_t
* pattern
, cairo_raster_source_acquire_func_t
* acquire
, cairo_raster_source_release_func_t
* release
);
2063 /*cairo_public*/ void cairo_raster_source_pattern_set_snapshot (cairo_pattern_t
* pattern
, cairo_raster_source_snapshot_func_t snapshot
);
2064 /*cairo_public*/ cairo_raster_source_snapshot_func_t
cairo_raster_source_pattern_get_snapshot (cairo_pattern_t
* pattern
);
2065 /*cairo_public*/ void cairo_raster_source_pattern_set_copy (cairo_pattern_t
* pattern
, cairo_raster_source_copy_func_t copy
);
2066 /*cairo_public*/ cairo_raster_source_copy_func_t
cairo_raster_source_pattern_get_copy (cairo_pattern_t
* pattern
);
2067 /*cairo_public*/ void cairo_raster_source_pattern_set_finish (cairo_pattern_t
* pattern
, cairo_raster_source_finish_func_t finish
);
2068 /*cairo_public*/ cairo_raster_source_finish_func_t
cairo_raster_source_pattern_get_finish (cairo_pattern_t
* pattern
);
2070 /* Pattern creation functions */
2071 /*cairo_public*/ cairo_pattern_t
* cairo_pattern_create_rgb (double red
, double green
, double blue
);
2072 /*cairo_public*/ cairo_pattern_t
* cairo_pattern_create_rgba (double red
, double green
, double blue
, double alpha
);
2073 /*cairo_public*/ cairo_pattern_t
* cairo_pattern_create_for_surface (cairo_surface_t
* surface
);
2074 /*cairo_public*/ cairo_pattern_t
* cairo_pattern_create_linear (double x0
, double y0
, double x1
, double y1
);
2075 /*cairo_public*/ cairo_pattern_t
* cairo_pattern_create_radial (double cx0
, double cy0
, double radius0
, double cx1
, double cy1
, double radius1
);
2076 /*cairo_public*/ cairo_pattern_t
* cairo_pattern_create_mesh ();
2077 /*cairo_public*/ cairo_pattern_t
* cairo_pattern_reference (cairo_pattern_t
* pattern
);
2078 /*cairo_public*/ void cairo_pattern_destroy (cairo_pattern_t
* pattern
);
2079 /*cairo_public*/ uint cairo_pattern_get_reference_count (cairo_pattern_t
* pattern
);
2080 /*cairo_public*/ cairo_status_t
cairo_pattern_status (cairo_pattern_t
* pattern
);
2081 /*cairo_public*/ void* cairo_pattern_get_user_data (cairo_pattern_t
* pattern
, const(cairo_user_data_key_t
)* key
);
2082 /*cairo_public*/ cairo_status_t
cairo_pattern_set_user_data (cairo_pattern_t
* pattern
, const(cairo_user_data_key_t
)* key
, void* user_data
, cairo_destroy_func_t destroy
);
2085 * cairo_pattern_type_t:
2086 * @CAIRO_PATTERN_TYPE_SOLID: The pattern is a solid (uniform)
2087 * color. It may be opaque or translucent, since 1.2.
2088 * @CAIRO_PATTERN_TYPE_SURFACE: The pattern is a based on a surface (an image), since 1.2.
2089 * @CAIRO_PATTERN_TYPE_LINEAR: The pattern is a linear gradient, since 1.2.
2090 * @CAIRO_PATTERN_TYPE_RADIAL: The pattern is a radial gradient, since 1.2.
2091 * @CAIRO_PATTERN_TYPE_MESH: The pattern is a mesh, since 1.12.
2092 * @CAIRO_PATTERN_TYPE_RASTER_SOURCE: The pattern is a user pattern providing raster data, since 1.12.
2094 * #cairo_pattern_type_t is used to describe the type of a given pattern.
2096 * The type of a pattern is determined by the function used to create
2097 * it. The cairo_pattern_create_rgb() and cairo_pattern_create_rgba()
2098 * functions create SOLID patterns. The remaining
2099 * cairo_pattern_create<!-- --> functions map to pattern types in obvious
2102 * The pattern type can be queried with cairo_pattern_get_type()
2104 * Most #cairo_pattern_t functions can be called with a pattern of any
2105 * type, (though trying to change the extend or filter for a solid
2106 * pattern will have no effect). A notable exception is
2107 * cairo_pattern_add_color_stop_rgb() and
2108 * cairo_pattern_add_color_stop_rgba() which must only be called with
2109 * gradient patterns (either LINEAR or RADIAL). Otherwise the pattern
2110 * will be shutdown and put into an error state.
2112 * New entries may be added in future versions.
2116 alias cairo_pattern_type_t
= int;
2117 enum : cairo_pattern_type_t
{
2118 CAIRO_PATTERN_TYPE_SOLID
,
2119 CAIRO_PATTERN_TYPE_SURFACE
,
2120 CAIRO_PATTERN_TYPE_LINEAR
,
2121 CAIRO_PATTERN_TYPE_RADIAL
,
2122 CAIRO_PATTERN_TYPE_MESH
,
2123 CAIRO_PATTERN_TYPE_RASTER_SOURCE
2126 /*cairo_public*/ cairo_pattern_type_t
cairo_pattern_get_type (cairo_pattern_t
* pattern
);
2127 /*cairo_public*/ void cairo_pattern_add_color_stop_rgb (cairo_pattern_t
* pattern
, double offset
, double red
, double green
, double blue
);
2128 /*cairo_public*/ void cairo_pattern_add_color_stop_rgba (cairo_pattern_t
* pattern
, double offset
, double red
, double green
, double blue
, double alpha
);
2129 /*cairo_public*/ void cairo_mesh_pattern_begin_patch (cairo_pattern_t
* pattern
);
2130 /*cairo_public*/ void cairo_mesh_pattern_end_patch (cairo_pattern_t
* pattern
);
2131 /*cairo_public*/ void cairo_mesh_pattern_curve_to (cairo_pattern_t
* pattern
, double x1
, double y1
, double x2
, double y2
, double x3
, double y3
);
2132 /*cairo_public*/ void cairo_mesh_pattern_line_to (cairo_pattern_t
* pattern
, double x
, double y
);
2133 /*cairo_public*/ void cairo_mesh_pattern_move_to (cairo_pattern_t
* pattern
, double x
, double y
);
2134 /*cairo_public*/ void cairo_mesh_pattern_set_control_point (cairo_pattern_t
* pattern
, uint point_num
, double x
, double y
);
2135 /*cairo_public*/ void cairo_mesh_pattern_set_corner_color_rgb (cairo_pattern_t
* pattern
, uint corner_num
, double red
, double green
, double blue
);
2136 /*cairo_public*/ void cairo_mesh_pattern_set_corner_color_rgba (cairo_pattern_t
* pattern
, uint corner_num
, double red
, double green
, double blue
, double alpha
);
2137 /*cairo_public*/ void cairo_pattern_set_matrix (cairo_pattern_t
* pattern
, const(cairo_matrix_t
)* matrix
);
2138 /*cairo_public*/ void cairo_pattern_get_matrix (cairo_pattern_t
* pattern
, cairo_matrix_t
* matrix
);
2142 * @CAIRO_EXTEND_NONE: pixels outside of the source pattern
2143 * are fully transparent (Since 1.0)
2144 * @CAIRO_EXTEND_REPEAT: the pattern is tiled by repeating (Since 1.0)
2145 * @CAIRO_EXTEND_REFLECT: the pattern is tiled by reflecting
2146 * at the edges (Since 1.0; but only implemented for surface patterns since 1.6)
2147 * @CAIRO_EXTEND_PAD: pixels outside of the pattern copy
2148 * the closest pixel from the source (Since 1.2; but only
2149 * implemented for surface patterns since 1.6)
2151 * #cairo_extend_t is used to describe how pattern color/alpha will be
2152 * determined for areas "outside" the pattern's natural area, (for
2153 * example, outside the surface bounds or outside the gradient
2156 * Mesh patterns are not affected by the extend mode.
2158 * The default extend mode is %CAIRO_EXTEND_NONE for surface patterns
2159 * and %CAIRO_EXTEND_PAD for gradient patterns.
2161 * New entries may be added in future versions.
2165 alias cairo_extend_t
= int;
2166 enum : cairo_extend_t
{
2168 CAIRO_EXTEND_REPEAT
,
2169 CAIRO_EXTEND_REFLECT
,
2173 /*cairo_public*/ void cairo_pattern_set_extend (cairo_pattern_t
* pattern
, cairo_extend_t extend
);
2174 /*cairo_public*/ cairo_extend_t
cairo_pattern_get_extend (cairo_pattern_t
* pattern
);
2178 * @CAIRO_FILTER_FAST: A high-performance filter, with quality similar
2179 * to %CAIRO_FILTER_NEAREST (Since 1.0)
2180 * @CAIRO_FILTER_GOOD: A reasonable-performance filter, with quality
2181 * similar to %CAIRO_FILTER_BILINEAR (Since 1.0)
2182 * @CAIRO_FILTER_BEST: The highest-quality available, performance may
2183 * not be suitable for interactive use. (Since 1.0)
2184 * @CAIRO_FILTER_NEAREST: Nearest-neighbor filtering (Since 1.0)
2185 * @CAIRO_FILTER_BILINEAR: Linear interpolation in two dimensions (Since 1.0)
2186 * @CAIRO_FILTER_GAUSSIAN: This filter value is currently
2187 * unimplemented, and should not be used in current code. (Since 1.0)
2189 * #cairo_filter_t is used to indicate what filtering should be
2190 * applied when reading pixel values from patterns. See
2191 * cairo_pattern_set_filter() for indicating the desired filter to be
2192 * used with a particular pattern.
2196 alias cairo_filter_t
= int;
2197 enum : cairo_filter_t
{
2201 CAIRO_FILTER_NEAREST
,
2202 CAIRO_FILTER_BILINEAR
,
2203 CAIRO_FILTER_GAUSSIAN
2206 /*cairo_public*/ void cairo_pattern_set_filter (cairo_pattern_t
* pattern
, cairo_filter_t filter
);
2207 /*cairo_public*/ cairo_filter_t
cairo_pattern_get_filter (cairo_pattern_t
* pattern
);
2208 /*cairo_public*/ cairo_status_t
cairo_pattern_get_rgba (cairo_pattern_t
* pattern
, double* red
, double* green
, double* blue
, double* alpha
);
2209 /*cairo_public*/ cairo_status_t
cairo_pattern_get_surface (cairo_pattern_t
* pattern
, cairo_surface_t
** surface
);
2211 /*cairo_public*/ cairo_status_t
cairo_pattern_get_color_stop_rgba (cairo_pattern_t
* pattern
, int index
, double* offset
, double* red
, double* green
, double* blue
, double* alpha
);
2212 /*cairo_public*/ cairo_status_t
cairo_pattern_get_color_stop_count (cairo_pattern_t
* pattern
, int* count
);
2213 /*cairo_public*/ cairo_status_t
cairo_pattern_get_linear_points (cairo_pattern_t
* pattern
, double* x0
, double* y0
, double* x1
, double* y1
);
2214 /*cairo_public*/ cairo_status_t
cairo_pattern_get_radial_circles (cairo_pattern_t
* pattern
, double* x0
, double* y0
, double* r0
, double* x1
, double* y1
, double* r1
);
2215 /*cairo_public*/ cairo_status_t
cairo_mesh_pattern_get_patch_count (cairo_pattern_t
* pattern
, uint* count
);
2216 /*cairo_public*/ cairo_path_t
* cairo_mesh_pattern_get_path (cairo_pattern_t
* pattern
, uint patch_num
);
2217 /*cairo_public*/ cairo_status_t
cairo_mesh_pattern_get_corner_color_rgba (cairo_pattern_t
* pattern
, uint patch_num
, uint corner_num
, double* red
, double* green
, double* blue
, double* alpha
);
2218 /*cairo_public*/ cairo_status_t
cairo_mesh_pattern_get_control_point (cairo_pattern_t
* pattern
, uint patch_num
, uint point_num
, double* x
, double* y
);
2220 /* Matrix functions */
2221 /*cairo_public*/ void cairo_matrix_init (cairo_matrix_t
* matrix
, double xx
, double yx
, double xy
, double yy
, double x0
, double y0
);
2222 /*cairo_public*/ void cairo_matrix_init_identity (cairo_matrix_t
* matrix
);
2223 /*cairo_public*/ void cairo_matrix_init_translate (cairo_matrix_t
* matrix
, double tx
, double ty
);
2224 /*cairo_public*/ void cairo_matrix_init_scale (cairo_matrix_t
* matrix
, double sx
, double sy
);
2225 /*cairo_public*/ void cairo_matrix_init_rotate (cairo_matrix_t
* matrix
, double radians
);
2226 /*cairo_public*/ void cairo_matrix_translate (cairo_matrix_t
* matrix
, double tx
, double ty
);
2227 /*cairo_public*/ void cairo_matrix_scale (cairo_matrix_t
* matrix
, double sx
, double sy
);
2228 /*cairo_public*/ void cairo_matrix_rotate (cairo_matrix_t
* matrix
, double radians
);
2229 /*cairo_public*/ cairo_status_t
cairo_matrix_invert (cairo_matrix_t
* matrix
);
2230 /*cairo_public*/ void cairo_matrix_multiply (cairo_matrix_t
* result
, const(cairo_matrix_t
)* a
, const(cairo_matrix_t
)* b
);
2231 /*cairo_public*/ void cairo_matrix_transform_distance (const(cairo_matrix_t
)* matrix
, double* dx
, double* dy
);
2232 /*cairo_public*/ void cairo_matrix_transform_point (const(cairo_matrix_t
)* matrix
, double* x
, double* y
);
2234 /* Region functions */
2239 * A #cairo_region_t represents a set of integer-aligned rectangles.
2241 * It allows set-theoretical operations like cairo_region_union() and
2242 * cairo_region_intersect() to be performed on them.
2244 * Memory management of #cairo_region_t is done with
2245 * cairo_region_reference() and cairo_region_destroy().
2249 struct cairo_region_t
;
2252 * cairo_region_overlap_t:
2253 * @CAIRO_REGION_OVERLAP_IN: The contents are entirely inside the region. (Since 1.10)
2254 * @CAIRO_REGION_OVERLAP_OUT: The contents are entirely outside the region. (Since 1.10)
2255 * @CAIRO_REGION_OVERLAP_PART: The contents are partially inside and
2256 * partially outside the region. (Since 1.10)
2258 * Used as the return value for cairo_region_contains_rectangle().
2262 alias cairo_region_overlap_t
= int;
2263 enum : cairo_region_overlap_t
{
2264 CAIRO_REGION_OVERLAP_IN
, /* completely inside region */
2265 CAIRO_REGION_OVERLAP_OUT
, /* completely outside region */
2266 CAIRO_REGION_OVERLAP_PART
/* partly inside region */
2269 /*cairo_public*/ cairo_region_t
* cairo_region_create ();
2270 /*cairo_public*/ cairo_region_t
* cairo_region_create_rectangle (const(cairo_rectangle_int_t
)* rectangle
);
2271 /*cairo_public*/ cairo_region_t
* cairo_region_create_rectangles (const(cairo_rectangle_int_t
)* rects
, int count
);
2272 /*cairo_public*/ cairo_region_t
* cairo_region_copy (const(cairo_region_t
)* original
);
2273 /*cairo_public*/ cairo_region_t
* cairo_region_reference (cairo_region_t
* region
);
2274 /*cairo_public*/ void cairo_region_destroy (cairo_region_t
* region
);
2275 /*cairo_public*/ cairo_bool_t
cairo_region_equal (const(cairo_region_t
)* a
, const(cairo_region_t
)* b
);
2276 /*cairo_public*/ cairo_status_t
cairo_region_status (const(cairo_region_t
)* region
);
2277 /*cairo_public*/ void cairo_region_get_extents (const(cairo_region_t
)* region
, cairo_rectangle_int_t
* extents
);
2278 /*cairo_public*/ int cairo_region_num_rectangles (const(cairo_region_t
)* region
);
2279 /*cairo_public*/ void cairo_region_get_rectangle (const(cairo_region_t
)* region
, int nth
, cairo_rectangle_int_t
* rectangle
);
2280 /*cairo_public*/ cairo_bool_t
cairo_region_is_empty (const(cairo_region_t
)* region
);
2281 /*cairo_public*/ cairo_region_overlap_t
cairo_region_contains_rectangle (const(cairo_region_t
)* region
, const(cairo_rectangle_int_t
)* rectangle
);
2282 /*cairo_public*/ cairo_bool_t
cairo_region_contains_point (const(cairo_region_t
)* region
, int x
, int y
);
2283 /*cairo_public*/ void cairo_region_translate (cairo_region_t
* region
, int dx
, int dy
);
2284 /*cairo_public*/ cairo_status_t
cairo_region_subtract (cairo_region_t
* dst
, const(cairo_region_t
)* other
);
2285 /*cairo_public*/ cairo_status_t
cairo_region_subtract_rectangle (cairo_region_t
* dst
, const(cairo_rectangle_int_t
)* rectangle
);
2286 /*cairo_public*/ cairo_status_t
cairo_region_intersect (cairo_region_t
* dst
, const(cairo_region_t
)* other
);
2287 /*cairo_public*/ cairo_status_t
cairo_region_intersect_rectangle (cairo_region_t
* dst
, const(cairo_rectangle_int_t
)* rectangle
);
2288 /*cairo_public*/ cairo_status_t
cairo_region_union (cairo_region_t
* dst
, const(cairo_region_t
)* other
);
2289 /*cairo_public*/ cairo_status_t
cairo_region_union_rectangle (cairo_region_t
* dst
, const(cairo_rectangle_int_t
)* rectangle
);
2290 /*cairo_public*/ cairo_status_t
cairo_region_xor (cairo_region_t
* dst
, const(cairo_region_t
)* other
);
2291 /*cairo_public*/ cairo_status_t
cairo_region_xor_rectangle (cairo_region_t
* dst
, const(cairo_rectangle_int_t
)* rectangle
);
2293 /* Functions to be used while debugging (not intended for use in production code) */
2294 /*cairo_public*/ void cairo_debug_reset_static_data ();
2297 /* cairo - a vector graphics library with display and print output
2299 * Copyright © 2002 University of Southern California
2301 * This library is free software; you can redistribute it and/or
2302 * modify it either under the terms of the GNU Lesser General Public
2303 * License version 2.1 as published by the Free Software Foundation
2304 * (the "LGPL") or, at your option, under the terms of the Mozilla
2305 * Public License Version 1.1 (the "MPL"). If you do not alter this
2306 * notice, a recipient may use your version of this file under either
2307 * the MPL or the LGPL.
2309 * You should have received a copy of the LGPL along with this library
2310 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2311 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2312 * You should have received a copy of the MPL along with this library
2313 * in the file COPYING-MPL-1.1
2315 * The contents of this file are subject to the Mozilla Public License
2316 * Version 1.1 (the "License"); you may not use this file except in
2317 * compliance with the License. You may obtain a copy of the License at
2318 * http://www.mozilla.org/MPL/
2320 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2321 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2322 * the specific language governing rights and limitations.
2324 * The Original Code is the cairo graphics library.
2326 * The Initial Developer of the Original Code is University of Southern
2330 * Carl D. Worth <cworth@cworth.org>
2332 static if (CAIRO_HAS_XLIB_SURFACE
) {
2336 /*cairo_public*/ cairo_surface_t
* cairo_xlib_surface_create (Display
* dpy
, Drawable drawable
, Visual
* visual
, int width
, int height
);
2337 /*cairo_public*/ cairo_surface_t
* cairo_xlib_surface_create_for_bitmap (Display
* dpy
, Pixmap bitmap
, Screen
* screen
, int width
, int height
);
2338 /*cairo_public*/ void cairo_xlib_surface_set_size (cairo_surface_t
* surface
, int width
, int height
);
2339 /*cairo_public*/ void cairo_xlib_surface_set_drawable (cairo_surface_t
* surface
, Drawable drawable
, int width
, int height
);
2340 /*cairo_public*/ Display
* cairo_xlib_surface_get_display (cairo_surface_t
* surface
);
2341 /*cairo_public*/ Drawable
cairo_xlib_surface_get_drawable (cairo_surface_t
* surface
);
2342 /*cairo_public*/ Screen
* cairo_xlib_surface_get_screen (cairo_surface_t
* surface
);
2343 /*cairo_public*/ Visual
* cairo_xlib_surface_get_visual (cairo_surface_t
* surface
);
2344 /*cairo_public*/ int cairo_xlib_surface_get_depth (cairo_surface_t
* surface
);
2345 /*cairo_public*/ int cairo_xlib_surface_get_width (cairo_surface_t
* surface
);
2346 /*cairo_public*/ int cairo_xlib_surface_get_height (cairo_surface_t
* surface
);
2348 /* debug interface */
2349 /*cairo_public*/ void cairo_xlib_device_debug_cap_xrender_version (cairo_device_t
* device
, int major_version
, int minor_version
);
2352 * @precision: -1 implies automatically choose based on antialiasing mode,
2353 * any other value overrides and sets the corresponding PolyMode.
2355 /*cairo_public*/ void cairo_xlib_device_debug_set_precision (cairo_device_t
* device
, int precision
);
2357 /*cairo_public*/ int cairo_xlib_device_debug_get_precision (cairo_device_t
* device
);
2361 /* cairo - a vector graphics library with display and print output
2363 * Copyright © 2002 University of Southern California
2365 * This library is free software; you can redistribute it and/or
2366 * modify it either under the terms of the GNU Lesser General Public
2367 * License version 2.1 as published by the Free Software Foundation
2368 * (the "LGPL") or, at your option, under the terms of the Mozilla
2369 * Public License Version 1.1 (the "MPL"). If you do not alter this
2370 * notice, a recipient may use your version of this file under either
2371 * the MPL or the LGPL.
2373 * You should have received a copy of the LGPL along with this library
2374 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2375 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2376 * You should have received a copy of the MPL along with this library
2377 * in the file COPYING-MPL-1.1
2379 * The contents of this file are subject to the Mozilla Public License
2380 * Version 1.1 (the "License"); you may not use this file except in
2381 * compliance with the License. You may obtain a copy of the License at
2382 * http://www.mozilla.org/MPL/
2384 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2385 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2386 * the specific language governing rights and limitations.
2388 * The Original Code is the cairo graphics library.
2390 * The Initial Developer of the Original Code is University of Southern
2394 * Carl D. Worth <cworth@cworth.org>
2396 static if (CAIRO_HAS_XLIB_XRENDER_SURFACE
) {
2398 import iv
.x11
.extensions
.xrender
;
2400 /*cairo_public*/ cairo_surface_t
* cairo_xlib_surface_create_with_xrender_format (Display
* dpy
, Drawable drawable
, Screen
* screen
, XRenderPictFormat
* format
, int width
, int height
);
2401 /*cairo_public*/ XRenderPictFormat
* cairo_xlib_surface_get_xrender_format (cairo_surface_t
* surface
);
2405 /* Cairo - a vector graphics library with display and print output
2407 * Copyright © 2009 Eric Anholt
2408 * Copyright © 2009 Chris Wilson
2410 * This library is free software; you can redistribute it and/or
2411 * modify it either under the terms of the GNU Lesser General Public
2412 * License version 2.1 as published by the Free Software Foundation
2413 * (the "LGPL") or, at your option, under the terms of the Mozilla
2414 * Public License Version 1.1 (the "MPL"). If you do not alter this
2415 * notice, a recipient may use your version of this file under either
2416 * the MPL or the LGPL.
2418 * You should have received a copy of the LGPL along with this library
2419 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2420 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2421 * You should have received a copy of the MPL along with this library
2422 * in the file COPYING-MPL-1.1
2424 * The contents of this file are subject to the Mozilla Public License
2425 * Version 1.1 (the "License"); you may not use this file except in
2426 * compliance with the License. You may obtain a copy of the License at
2427 * http://www.mozilla.org/MPL/
2429 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2430 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2431 * the specific language governing rights and limitations.
2433 * The Original Code is the cairo graphics library.
2435 * The Initial Developer of the Original Code is Eric Anholt.
2441 * The cairo-gl backend provides an implementation of possibly
2442 * hardware-accelerated cairo rendering by targeting the OpenGL API.
2443 * The goal of the cairo-gl backend is to provide better performance
2444 * with equal functionality to cairo-image where possible. It does
2445 * not directly provide for applying additional OpenGL effects to
2448 * Cairo-gl allows interoperability with other GL rendering through GL
2449 * context sharing. Cairo-gl surfaces are created in reference to a
2450 * #cairo_device_t, which represents a GL context created by the user.
2451 * When that GL context is created with its sharePtr set to another
2452 * context (or vice versa), its objects (textures backing cairo-gl
2453 * surfaces) can be accessed in the other OpenGL context. This allows
2454 * cairo-gl to maintain its drawing state in one context while the
2455 * user's 3D rendering occurs in the user's other context.
2457 * However, as only one context can be current to a thread at a time,
2458 * cairo-gl may make its context current to the thread on any cairo
2459 * call which interacts with a cairo-gl surface or the cairo-gl
2460 * device. As a result, the user must make their own context current
2461 * between any cairo calls and their own OpenGL rendering.
2463 static if (CAIRO_HAS_GL_SURFACE || CAIRO_HAS_GLESV2_SURFACE
) {
2464 /*cairo_public*/ cairo_surface_t
* cairo_gl_surface_create (cairo_device_t
* device
, cairo_content_t content
, int width
, int height
);
2465 /*cairo_public*/ cairo_surface_t
* cairo_gl_surface_create_for_texture (cairo_device_t
* abstract_device
, cairo_content_t content
, uint tex
, int width
, int height
);
2466 /*cairo_public*/ void cairo_gl_surface_set_size (cairo_surface_t
* surface
, int width
, int height
);
2467 /*cairo_public*/ int cairo_gl_surface_get_width (cairo_surface_t
* abstract_surface
);
2468 /*cairo_public*/ int cairo_gl_surface_get_height (cairo_surface_t
* abstract_surface
);
2469 /*cairo_public*/ void cairo_gl_surface_swapbuffers (cairo_surface_t
* surface
);
2470 /*cairo_public*/ void cairo_gl_device_set_thread_aware (cairo_device_t
* device
, cairo_bool_t thread_aware
);
2472 static if (CAIRO_HAS_GLX_FUNCTIONS
) {
2473 import iv
.glbinds
: GLXContext
;
2474 /*cairo_public*/ cairo_device_t
* cairo_glx_device_create (Display
* dpy
, GLXContext gl_ctx
);
2475 /*cairo_public*/ Display
* cairo_glx_device_get_display (cairo_device_t
* device
);
2476 /*cairo_public*/ GLXContext
cairo_glx_device_get_context (cairo_device_t
* device
);
2477 /*cairo_public*/ cairo_surface_t
* cairo_gl_surface_create_for_window (cairo_device_t
* device
, Window win
, int width
, int height
);
2481 #if CAIRO_HAS_WGL_FUNCTIONS
2482 #include <windows.h>
2484 /*cairo_public*/ cairo_device_t*
2485 cairo_wgl_device_create (HGLRC rc);
2487 /*cairo_public*/ HGLRC
2488 cairo_wgl_device_get_context (cairo_device_t* device);
2490 /*cairo_public*/ cairo_surface_t*
2491 cairo_gl_surface_create_for_dc (cairo_device_t* device,
2499 #if CAIRO_HAS_EGL_FUNCTIONS
2500 #include <EGL/egl.h>
2502 /*cairo_public*/ cairo_device_t*
2503 cairo_egl_device_create (EGLDisplay dpy, EGLContext egl);
2505 /*cairo_public*/ cairo_surface_t*
2506 cairo_gl_surface_create_for_egl (cairo_device_t* device,
2511 /*cairo_public*/ EGLDisplay
2512 cairo_egl_device_get_display (cairo_device_t* device);
2514 /*cairo_public*/ EGLSurface
2515 cairo_egl_device_get_context (cairo_device_t* device);
2521 /* cairo - a vector graphics library with display and print output
2523 * Copyright © 2005 Red Hat, Inc
2525 * This library is free software; you can redistribute it and/or
2526 * modify it either under the terms of the GNU Lesser General Public
2527 * License version 2.1 as published by the Free Software Foundation
2528 * (the "LGPL") or, at your option, under the terms of the Mozilla
2529 * Public License Version 1.1 (the "MPL"). If you do not alter this
2530 * notice, a recipient may use your version of this file under either
2531 * the MPL or the LGPL.
2533 * You should have received a copy of the LGPL along with this library
2534 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2535 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2536 * You should have received a copy of the MPL along with this library
2537 * in the file COPYING-MPL-1.1
2539 * The contents of this file are subject to the Mozilla Public License
2540 * Version 1.1 (the "License"); you may not use this file except in
2541 * compliance with the License. You may obtain a copy of the License at
2542 * http://www.mozilla.org/MPL/
2544 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2545 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2546 * the specific language governing rights and limitations.
2548 * The Original Code is the cairo graphics library.
2550 * The Initial Developer of the Original Code is Red Hat, Inc.
2553 * Graydon Hoare <graydon@redhat.com>
2554 * Owen Taylor <otaylor@redhat.com>
2556 static if (CAIRO_HAS_FT_FONT
) {
2557 /* Fontconfig/Freetype platform-specific font interface */
2559 static if (CAIRO_HAS_FC_FONT
) import iv
.fontconfig
;
2561 /*cairo_public*/ cairo_font_face_t
* cairo_ft_font_face_create_for_ft_face (FT_Face face
, int load_flags
);
2564 * cairo_ft_synthesize_t:
2565 * @CAIRO_FT_SYNTHESIZE_BOLD: Embolden the glyphs (redraw with a pixel offset)
2566 * @CAIRO_FT_SYNTHESIZE_OBLIQUE: Slant the glyph outline by 12 degrees to the
2569 * A set of synthesis options to control how FreeType renders the glyphs
2570 * for a particular font face.
2572 * Individual synthesis features of a #cairo_ft_font_face_t can be set
2573 * using cairo_ft_font_face_set_synthesize(), or disabled using
2574 * cairo_ft_font_face_unset_synthesize(). The currently enabled set of
2575 * synthesis options can be queried with cairo_ft_font_face_get_synthesize().
2577 * Note: that when synthesizing glyphs, the font metrics returned will only
2582 alias cairo_ft_synthesize_t
= int;
2583 enum : cairo_ft_synthesize_t
{
2584 CAIRO_FT_SYNTHESIZE_BOLD
= 1 << 0,
2585 CAIRO_FT_SYNTHESIZE_OBLIQUE
= 1 << 1
2588 /*cairo_public*/ void cairo_ft_font_face_set_synthesize (cairo_font_face_t
* font_face
, uint synth_flags
);
2589 /*cairo_public*/ void cairo_ft_font_face_unset_synthesize (cairo_font_face_t
* font_face
, uint synth_flags
);
2590 /*cairo_public*/ uint cairo_ft_font_face_get_synthesize (cairo_font_face_t
* font_face
);
2592 /*cairo_public*/ FT_Face
cairo_ft_scaled_font_lock_face (cairo_scaled_font_t
* scaled_font
);
2593 /*cairo_public*/ void cairo_ft_scaled_font_unlock_face (cairo_scaled_font_t
* scaled_font
);
2595 static if (CAIRO_HAS_FC_FONT
) {
2596 /*cairo_public*/ cairo_font_face_t
* cairo_ft_font_face_create_for_pattern (FcPattern
* pattern
);
2597 /*cairo_public*/ void cairo_ft_font_options_substitute (const(cairo_font_options_t
)* options
, FcPattern
* pattern
);
2602 /* cairo - a vector graphics library with display and print output
2604 * Copyright © 2002 University of Southern California
2606 * This library is free software; you can redistribute it and/or
2607 * modify it either under the terms of the GNU Lesser General Public
2608 * License version 2.1 as published by the Free Software Foundation
2609 * (the "LGPL") or, at your option, under the terms of the Mozilla
2610 * Public License Version 1.1 (the "MPL"). If you do not alter this
2611 * notice, a recipient may use your version of this file under either
2612 * the MPL or the LGPL.
2614 * You should have received a copy of the LGPL along with this library
2615 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2616 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2617 * You should have received a copy of the MPL along with this library
2618 * in the file COPYING-MPL-1.1
2620 * The contents of this file are subject to the Mozilla Public License
2621 * Version 1.1 (the "License"); you may not use this file except in
2622 * compliance with the License. You may obtain a copy of the License at
2623 * http://www.mozilla.org/MPL/
2625 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2626 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2627 * the specific language governing rights and limitations.
2629 * The Original Code is the cairo graphics library.
2631 * The Initial Developer of the Original Code is University of Southern
2635 * Carl D. Worth <cworth@cworth.org>
2637 static if (CAIRO_HAS_PDF_SURFACE
) {
2639 * cairo_pdf_version_t:
2640 * @CAIRO_PDF_VERSION_1_4: The version 1.4 of the PDF specification. (Since 1.10)
2641 * @CAIRO_PDF_VERSION_1_5: The version 1.5 of the PDF specification. (Since 1.10)
2643 * #cairo_pdf_version_t is used to describe the version number of the PDF
2644 * specification that a generated PDF file will conform to.
2648 alias cairo_pdf_version_t
= int;
2649 enum : cairo_pdf_version_t
{
2650 CAIRO_PDF_VERSION_1_4
,
2651 CAIRO_PDF_VERSION_1_5
2654 /*cairo_public*/ cairo_surface_t
* cairo_pdf_surface_create (const(char)* filename
, double width_in_points
, double height_in_points
);
2655 /*cairo_public*/ cairo_surface_t
* cairo_pdf_surface_create_for_stream (cairo_write_func_t write_func
, void* closure
, double width_in_points
, double height_in_points
);
2656 /*cairo_public*/ void cairo_pdf_surface_restrict_to_version (cairo_surface_t
* surface
, cairo_pdf_version_t version_
);
2657 /*cairo_public*/ void cairo_pdf_get_versions (const(cairo_pdf_version_t
)** versions
, int* num_versions
);
2658 /*cairo_public*/ const(char)* cairo_pdf_version_to_string (cairo_pdf_version_t version_
);
2659 /*cairo_public*/ void cairo_pdf_surface_set_size (cairo_surface_t
* surface
, double width_in_points
, double height_in_points
);
2663 /* cairo - a vector graphics library with display and print output
2665 * Copyright © 2002 University of Southern California
2667 * This library is free software; you can redistribute it and/or
2668 * modify it either under the terms of the GNU Lesser General Public
2669 * License version 2.1 as published by the Free Software Foundation
2670 * (the "LGPL") or, at your option, under the terms of the Mozilla
2671 * Public License Version 1.1 (the "MPL"). If you do not alter this
2672 * notice, a recipient may use your version of this file under either
2673 * the MPL or the LGPL.
2675 * You should have received a copy of the LGPL along with this library
2676 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2677 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2678 * You should have received a copy of the MPL along with this library
2679 * in the file COPYING-MPL-1.1
2681 * The contents of this file are subject to the Mozilla Public License
2682 * Version 1.1 (the "License"); you may not use this file except in
2683 * compliance with the License. You may obtain a copy of the License at
2684 * http://www.mozilla.org/MPL/
2686 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2687 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2688 * the specific language governing rights and limitations.
2690 * The Original Code is the cairo graphics library.
2692 * The Initial Developer of the Original Code is University of Southern
2696 * Carl D. Worth <cworth@cworth.org>
2698 static if (CAIRO_HAS_PS_SURFACE
) {
2699 /* PS-surface functions */
2703 * @CAIRO_PS_LEVEL_2: The language level 2 of the PostScript specification. (Since 1.6)
2704 * @CAIRO_PS_LEVEL_3: The language level 3 of the PostScript specification. (Since 1.6)
2706 * #cairo_ps_level_t is used to describe the language level of the
2707 * PostScript Language Reference that a generated PostScript file will
2712 alias cairo_ps_level_t
= int;
2713 enum : cairo_ps_level_t
{
2718 /*cairo_public*/ cairo_surface_t
* cairo_ps_surface_create (const(char)* filename
, double width_in_points
, double height_in_points
);
2719 /*cairo_public*/ cairo_surface_t
* cairo_ps_surface_create_for_stream (cairo_write_func_t write_func
, void* closure
, double width_in_points
, double height_in_points
);
2720 /*cairo_public*/ void cairo_ps_surface_restrict_to_level (cairo_surface_t
* surface
, cairo_ps_level_t level
);
2721 /*cairo_public*/ void cairo_ps_get_levels (const(cairo_ps_level_t
)** levels
, int* num_levels
);
2722 /*cairo_public*/ const(char)* cairo_ps_level_to_string (cairo_ps_level_t level
);
2723 /*cairo_public*/ void cairo_ps_surface_set_eps (cairo_surface_t
* surface
, cairo_bool_t eps
);
2724 /*cairo_public*/ cairo_bool_t
cairo_ps_surface_get_eps (cairo_surface_t
* surface
);
2725 /*cairo_public*/ void cairo_ps_surface_set_size (cairo_surface_t
* surface
, double width_in_points
, double height_in_points
);
2726 /*cairo_public*/ void cairo_ps_surface_dsc_comment (cairo_surface_t
* surface
, const(char)* comment
);
2727 /*cairo_public*/ void cairo_ps_surface_dsc_begin_setup (cairo_surface_t
* surface
);
2728 /*cairo_public*/ void cairo_ps_surface_dsc_begin_page_setup (cairo_surface_t
* surface
);
2732 /* cairo - a vector graphics library with display and print output
2734 * Copyright © 2008 Chris Wilson
2736 * This library is free software; you can redistribute it and/or
2737 * modify it either under the terms of the GNU Lesser General Public
2738 * License version 2.1 as published by the Free Software Foundation
2739 * (the "LGPL") or, at your option, under the terms of the Mozilla
2740 * Public License Version 1.1 (the "MPL"). If you do not alter this
2741 * notice, a recipient may use your version of this file under either
2742 * the MPL or the LGPL.
2744 * You should have received a copy of the LGPL along with this library
2745 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2746 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2747 * You should have received a copy of the MPL along with this library
2748 * in the file COPYING-MPL-1.1
2750 * The contents of this file are subject to the Mozilla Public License
2751 * Version 1.1 (the "License"); you may not use this file except in
2752 * compliance with the License. You may obtain a copy of the License at
2753 * http://www.mozilla.org/MPL/
2755 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2756 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2757 * the specific language governing rights and limitations.
2759 * The Original Code is the cairo graphics library.
2761 * The Initial Developer of the Original Code is Chris Wilson
2764 * Chris Wilson <chris@chris-wilson.co.uk>
2766 static if (CAIRO_HAS_SCRIPT_SURFACE
) {
2768 * cairo_script_mode_t:
2769 * @CAIRO_SCRIPT_MODE_ASCII: the output will be in readable text (default). (Since 1.12)
2770 * @CAIRO_SCRIPT_MODE_BINARY: the output will use byte codes. (Since 1.12)
2772 * A set of script output variants.
2776 alias cairo_script_mode_t
= int;
2777 enum : cairo_script_mode_t
{
2778 CAIRO_SCRIPT_MODE_ASCII
,
2779 CAIRO_SCRIPT_MODE_BINARY
2782 /*cairo_public*/ cairo_device_t
* cairo_script_create (const(char)* filename
);
2783 /*cairo_public*/ cairo_device_t
* cairo_script_create_for_stream (cairo_write_func_t write_func
, void* closure
);
2784 /*cairo_public*/ void cairo_script_write_comment (cairo_device_t
* script
, const(char)* comment
, int len
);
2785 /*cairo_public*/ void cairo_script_set_mode (cairo_device_t
* script
, cairo_script_mode_t mode
);
2786 /*cairo_public*/ cairo_script_mode_t
cairo_script_get_mode (cairo_device_t
* script
);
2787 /*cairo_public*/ cairo_surface_t
* cairo_script_surface_create (cairo_device_t
* script
, cairo_content_t content
, double width
, double height
);
2788 /*cairo_public*/ cairo_surface_t
* cairo_script_surface_create_for_target (cairo_device_t
* script
, cairo_surface_t
* target
);
2789 /*cairo_public*/ cairo_status_t
cairo_script_from_recording_surface (cairo_device_t
* script
, cairo_surface_t
* recording_surface
);
2793 /* cairo - a vector graphics library with display and print output
2795 * Copyright © 2008 Chris Wilson
2797 * This library is free software; you can redistribute it and/or
2798 * modify it either under the terms of the GNU Lesser General Public
2799 * License version 2.1 as published by the Free Software Foundation
2800 * (the "LGPL") or, at your option, under the terms of the Mozilla
2801 * Public License Version 1.1 (the "MPL"). If you do not alter this
2802 * notice, a recipient may use your version of this file under either
2803 * the MPL or the LGPL.
2805 * You should have received a copy of the LGPL along with this library
2806 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2807 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2808 * You should have received a copy of the MPL along with this library
2809 * in the file COPYING-MPL-1.1
2811 * The contents of this file are subject to the Mozilla Public License
2812 * Version 1.1 (the "License"); you may not use this file except in
2813 * compliance with the License. You may obtain a copy of the License at
2814 * http://www.mozilla.org/MPL/
2816 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2817 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2818 * the specific language governing rights and limitations.
2820 * The Original Code is the cairo graphics library.
2822 * The Initial Developer of the Original Code is Chris Wilson
2825 * Chris Wilson <chris@chris-wilson.co.uk>
2827 import core
.stdc
.stdio
: FILE
;
2828 struct cairo_script_interpreter_t
;
2830 /* XXX expose csi_dictionary_t and pass to hooks */
2831 alias csi_destroy_func_t
= void function (void* closure
, void* ptr
);
2833 alias csi_surface_create_func_t
= cairo_surface_t
* function (void* closure
, cairo_content_t content
, double width
, double height
, c_long uid
);
2834 alias csi_context_create_func_t
= cairo_t
* function (void* closure
, cairo_surface_t
* surface
);
2835 alias csi_show_page_func_t
= void function (void* closure
, cairo_t
* cr
);
2836 alias csi_copy_page_func_t
= void function (void* closure
, cairo_t
* cr
);
2837 alias csi_create_source_image_t
= cairo_surface_t
* function (void* closure
, cairo_format_t format
, int width
, int height
, c_long uid
);
2839 struct cairo_script_interpreter_hooks_t
{
2841 csi_surface_create_func_t surface_create
;
2842 csi_destroy_func_t surface_destroy
;
2843 csi_context_create_func_t context_create
;
2844 csi_destroy_func_t context_destroy
;
2845 csi_show_page_func_t show_page
;
2846 csi_copy_page_func_t copy_page
;
2847 csi_create_source_image_t create_source_image
;
2850 /*cairo_public*/ cairo_script_interpreter_t
* cairo_script_interpreter_create ();
2851 /*cairo_public*/ void cairo_script_interpreter_install_hooks (cairo_script_interpreter_t
* ctx
, const(cairo_script_interpreter_hooks_t
)* hooks
);
2852 /*cairo_public*/ cairo_status_t
cairo_script_interpreter_run (cairo_script_interpreter_t
* ctx
, const(char)* filename
);
2853 /*cairo_public*/ cairo_status_t
cairo_script_interpreter_feed_stream (cairo_script_interpreter_t
* ctx
, FILE
* stream
);
2854 /*cairo_public*/ cairo_status_t
cairo_script_interpreter_feed_string (cairo_script_interpreter_t
* ctx
, const(char)* line
, int len
);
2855 /*cairo_public*/ uint cairo_script_interpreter_get_line_number (cairo_script_interpreter_t
* ctx
);
2856 /*cairo_public*/ cairo_script_interpreter_t
* cairo_script_interpreter_reference (cairo_script_interpreter_t
* ctx
);
2857 /*cairo_public*/ cairo_status_t
cairo_script_interpreter_finish (cairo_script_interpreter_t
* ctx
);
2858 /*cairo_public*/ cairo_status_t
cairo_script_interpreter_destroy (cairo_script_interpreter_t
* ctx
);
2859 /*cairo_public*/ cairo_status_t
cairo_script_interpreter_translate_stream (FILE
* stream
, cairo_write_func_t write_func
, void* closure
);
2862 /* cairo - a vector graphics library with display and print output
2866 * Copyright © 2005 Emmanuel Pacaud <emmanuel.pacaud@univ-poitiers.fr>
2868 * This library is free software; you can redistribute it and/or
2869 * modify it either under the terms of the GNU Lesser General Public
2870 * License version 2.1 as published by the Free Software Foundation
2871 * (the "LGPL") or, at your option, under the terms of the Mozilla
2872 * Public License Version 1.1 (the "MPL"). If you do not alter this
2873 * notice, a recipient may use your version of this file under either
2874 * the MPL or the LGPL.
2876 * You should have received a copy of the LGPL along with this library
2877 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2878 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2879 * You should have received a copy of the MPL along with this library
2880 * in the file COPYING-MPL-1.1
2882 * The contents of this file are subject to the Mozilla Public License
2883 * Version 1.1 (the "License"); you may not use this file except in
2884 * compliance with the License. You may obtain a copy of the License at
2885 * http://www.mozilla.org/MPL/
2887 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2888 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2889 * the specific language governing rights and limitations.
2892 static if (CAIRO_HAS_SVG_SURFACE
) {
2894 * cairo_svg_version_t:
2895 * @CAIRO_SVG_VERSION_1_1: The version 1.1 of the SVG specification. (Since 1.2)
2896 * @CAIRO_SVG_VERSION_1_2: The version 1.2 of the SVG specification. (Since 1.2)
2898 * #cairo_svg_version_t is used to describe the version number of the SVG
2899 * specification that a generated SVG file will conform to.
2903 alias cairo_svg_version_t
= int;
2904 enum : cairo_svg_version_t
{
2905 CAIRO_SVG_VERSION_1_1
,
2906 CAIRO_SVG_VERSION_1_2
2909 /*cairo_public*/ cairo_surface_t
* cairo_svg_surface_create (const(char)* filename
, double width_in_points
, double height_in_points
);
2910 /*cairo_public*/ cairo_surface_t
* cairo_svg_surface_create_for_stream (cairo_write_func_t write_func
, void* closure
, double width_in_points
, double height_in_points
);
2911 /*cairo_public*/ void cairo_svg_surface_restrict_to_version (cairo_surface_t
* surface
, cairo_svg_version_t version_
);
2912 /*cairo_public*/ void cairo_svg_get_versions (const(cairo_svg_version_t
)** versions
, int* num_versions
);
2913 /*cairo_public*/ const(char)* cairo_svg_version_to_string (cairo_svg_version_t version_
);
2917 /* cairo - a vector graphics library with display and print output
2919 * Copyright © 2009 Chris Wilson
2921 * This library is free software; you can redistribute it and/or
2922 * modify it either under the terms of the GNU Lesser General Public
2923 * License version 2.1 as published by the Free Software Foundation
2924 * (the "LGPL") or, at your option, under the terms of the Mozilla
2925 * Public License Version 1.1 (the "MPL"). If you do not alter this
2926 * notice, a recipient may use your version of this file under either
2927 * the MPL or the LGPL.
2929 * You should have received a copy of the LGPL along with this library
2930 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2931 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2932 * You should have received a copy of the MPL along with this library
2933 * in the file COPYING-MPL-1.1
2935 * The contents of this file are subject to the Mozilla Public License
2936 * Version 1.1 (the "License"); you may not use this file except in
2937 * compliance with the License. You may obtain a copy of the License at
2938 * http://www.mozilla.org/MPL/
2940 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2941 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2942 * the specific language governing rights and limitations.
2944 * The Original Code is the cairo graphics library.
2946 * The Initial Developer of the Original Code is Chris Wilson
2949 * Chris Wilson <chris@chris-wilson.co.uk>
2951 static if (CAIRO_HAS_TEE_SURFACE
) {
2952 /*cairo_public*/ cairo_surface_t
* cairo_tee_surface_create (cairo_surface_t
* master
);
2953 /*cairo_public*/ void cairo_tee_surface_add (cairo_surface_t
* surface
, cairo_surface_t
* target
);
2954 /*cairo_public*/ void cairo_tee_surface_remove (cairo_surface_t
* surface
, cairo_surface_t
* target
);
2955 /*cairo_public*/ cairo_surface_t
* cairo_tee_surface_index (cairo_surface_t
* surface
, uint index
);
2959 /* cairo - a vector graphics library with display and print output
2961 * Copyright © 2009 Chris Wilson
2963 * This library is free software; you can redistribute it and/or
2964 * modify it either under the terms of the GNU Lesser General Public
2965 * License version 2.1 as published by the Free Software Foundation
2966 * (the "LGPL") or, at your option, under the terms of the Mozilla
2967 * Public License Version 1.1 (the "MPL"). If you do not alter this
2968 * notice, a recipient may use your version of this file under either
2969 * the MPL or the LGPL.
2971 * You should have received a copy of the LGPL along with this library
2972 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
2973 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
2974 * You should have received a copy of the MPL along with this library
2975 * in the file COPYING-MPL-1.1
2977 * The contents of this file are subject to the Mozilla Public License
2978 * Version 1.1 (the "License"); you may not use this file except in
2979 * compliance with the License. You may obtain a copy of the License at
2980 * http://www.mozilla.org/MPL/
2982 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
2983 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
2984 * the specific language governing rights and limitations.
2986 * The Original Code is the cairo graphics library.
2988 * The Initial Developer of the Original Code is Chris Wilson
2991 * Chris Wilson <chris@chris-wilson.co.uk>
2993 static if (CAIRO_HAS_XML_SURFACE
) {
2994 /*cairo_public*/ cairo_device_t
* cairo_xml_create (const(char)* filename
);
2995 /*cairo_public*/ cairo_device_t
* cairo_xml_create_for_stream (cairo_write_func_t write_func
, void* closure
);
2996 /*cairo_public*/ cairo_surface_t
* cairo_xml_surface_create (cairo_device_t
* xml
, cairo_content_t content
, double width
, double height
);
2997 /*cairo_public*/ cairo_status_t
cairo_xml_for_recording_surface (cairo_device_t
* xml
, cairo_surface_t
* surface
);