Subversion Repositories Kolibri OS

Rev

Rev 1892 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1892 serge 1
/* cairo - a vector graphics library with display and print output
2
 *
3
 * Copyright © 2002 University of Southern California
4
 * Copyright © 2005 Red Hat, Inc.
5
 *
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.
13
 *
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
19
 *
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/
24
 *
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.
28
 *
29
 * The Original Code is the cairo graphics library.
30
 *
31
 * The Initial Developer of the Original Code is University of Southern
32
 * California.
33
 *
34
 * Contributor(s):
35
 *	Carl D. Worth 
36
 */
37
 
38
#ifndef CAIRO_H
39
#define CAIRO_H
40
 
41
#include "cairo-version.h"
42
#include "cairo-features.h"
43
#include "cairo-deprecated.h"
44
 
45
#ifdef  __cplusplus
46
# define CAIRO_BEGIN_DECLS  extern "C" {
47
# define CAIRO_END_DECLS    }
48
#else
49
# define CAIRO_BEGIN_DECLS
50
# define CAIRO_END_DECLS
51
#endif
52
 
53
#ifndef cairo_public
54
# if defined (_MSC_VER) && ! defined (CAIRO_WIN32_STATIC_BUILD)
55
#  define cairo_public __declspec(dllimport)
56
# else
57
#  define cairo_public
58
# endif
59
#endif
60
 
61
CAIRO_BEGIN_DECLS
62
 
63
#define CAIRO_VERSION_ENCODE(major, minor, micro) (	\
64
	  ((major) * 10000)				\
65
	+ ((minor) *   100)				\
66
	+ ((micro) *     1))
67
 
68
#define CAIRO_VERSION CAIRO_VERSION_ENCODE(	\
69
	CAIRO_VERSION_MAJOR,			\
70
	CAIRO_VERSION_MINOR,			\
71
	CAIRO_VERSION_MICRO)
72
 
73
 
74
#define CAIRO_VERSION_STRINGIZE_(major, minor, micro)	\
75
	#major"."#minor"."#micro
76
#define CAIRO_VERSION_STRINGIZE(major, minor, micro)	\
77
	CAIRO_VERSION_STRINGIZE_(major, minor, micro)
78
 
79
#define CAIRO_VERSION_STRING CAIRO_VERSION_STRINGIZE(	\
80
	CAIRO_VERSION_MAJOR,				\
81
	CAIRO_VERSION_MINOR,				\
82
	CAIRO_VERSION_MICRO)
83
 
84
 
85
cairo_public int
86
cairo_version (void);
87
 
88
cairo_public const char*
89
cairo_version_string (void);
90
 
91
/**
92
 * cairo_bool_t:
93
 *
94
 * #cairo_bool_t is used for boolean values. Returns of type
95
 * #cairo_bool_t will always be either 0 or 1, but testing against
96
 * these values explicitly is not encouraged; just use the
97
 * value as a boolean condition.
98
 *
99
 * 
100
 *  if (cairo_in_stroke (cr, x, y)) {
101
 *      /* do something */
102
 *  }
103
 * 
3959 Serge 104
 *
105
 * Since: 1.0
1892 serge 106
 **/
107
typedef int cairo_bool_t;
108
 
109
/**
110
 * cairo_t:
111
 *
112
 * A #cairo_t contains the current state of the rendering device,
113
 * including coordinates of yet to be drawn shapes.
114
 *
115
 * Cairo contexts, as #cairo_t objects are named, are central to
116
 * cairo and all drawing with cairo is always done to a #cairo_t
117
 * object.
118
 *
119
 * Memory management of #cairo_t is done with
120
 * cairo_reference() and cairo_destroy().
3959 Serge 121
 *
122
 * Since: 1.0
1892 serge 123
 **/
124
typedef struct _cairo cairo_t;
125
 
126
/**
127
 * cairo_surface_t:
128
 *
129
 * A #cairo_surface_t represents an image, either as the destination
130
 * of a drawing operation or as source when drawing onto another
131
 * surface.  To draw to a #cairo_surface_t, create a cairo context
132
 * with the surface as the target, using cairo_create().
133
 *
134
 * There are different subtypes of #cairo_surface_t for
135
 * different drawing backends; for example, cairo_image_surface_create()
136
 * creates a bitmap image in memory.
137
 * The type of a surface can be queried with cairo_surface_get_type().
138
 *
139
 * The initial contents of a surface after creation depend upon the manner
140
 * of its creation. If cairo creates the surface and backing storage for
141
 * the user, it will be initially cleared; for example,
142
 * cairo_image_surface_create() and cairo_surface_create_similar().
143
 * Alternatively, if the user passes in a reference to some backing storage
144
 * and asks cairo to wrap that in a #cairo_surface_t, then the contents are
145
 * not modified; for example, cairo_image_surface_create_for_data() and
146
 * cairo_xlib_surface_create().
147
 *
148
 * Memory management of #cairo_surface_t is done with
149
 * cairo_surface_reference() and cairo_surface_destroy().
3959 Serge 150
 *
151
 * Since: 1.0
1892 serge 152
 **/
153
typedef struct _cairo_surface cairo_surface_t;
154
 
155
/**
156
 * cairo_device_t:
157
 *
158
 * A #cairo_device_t represents the driver interface for drawing
159
 * operations to a #cairo_surface_t.  There are different subtypes of
160
 * #cairo_device_t for different drawing backends; for example,
3959 Serge 161
 * cairo_egl_device_create() creates a device that wraps an EGL display and
162
 * context.
1892 serge 163
 *
164
 * The type of a device can be queried with cairo_device_get_type().
165
 *
166
 * Memory management of #cairo_device_t is done with
167
 * cairo_device_reference() and cairo_device_destroy().
168
 *
169
 * Since: 1.10
170
 **/
171
typedef struct _cairo_device cairo_device_t;
172
 
173
/**
174
 * cairo_matrix_t:
175
 * @xx: xx component of the affine transformation
176
 * @yx: yx component of the affine transformation
177
 * @xy: xy component of the affine transformation
178
 * @yy: yy component of the affine transformation
179
 * @x0: X translation component of the affine transformation
180
 * @y0: Y translation component of the affine transformation
181
 *
182
 * A #cairo_matrix_t holds an affine transformation, such as a scale,
183
 * rotation, shear, or a combination of those. The transformation of
184
 * a point (x, y) is given by:
185
 * 
186
 *     x_new = xx * x + xy * y + x0;
187
 *     y_new = yx * x + yy * y + y0;
188
 * 
3959 Serge 189
 *
190
 * Since: 1.0
1892 serge 191
 **/
192
typedef struct _cairo_matrix {
193
    double xx; double yx;
194
    double xy; double yy;
195
    double x0; double y0;
196
} cairo_matrix_t;
197
 
198
/**
199
 * cairo_pattern_t:
200
 *
201
 * A #cairo_pattern_t represents a source when drawing onto a
202
 * surface. There are different subtypes of #cairo_pattern_t,
203
 * for different types of sources; for example,
204
 * cairo_pattern_create_rgb() creates a pattern for a solid
205
 * opaque color.
206
 *
3959 Serge 207
 * Other than various
208
 * cairo_pattern_create_type()
209
 * functions, some of the pattern types can be implicitly created using various
210
 * cairo_set_source_type() functions;
1892 serge 211
 * for example cairo_set_source_rgb().
212
 *
213
 * The type of a pattern can be queried with cairo_pattern_get_type().
214
 *
215
 * Memory management of #cairo_pattern_t is done with
216
 * cairo_pattern_reference() and cairo_pattern_destroy().
3959 Serge 217
 *
218
 * Since: 1.0
1892 serge 219
 **/
220
typedef struct _cairo_pattern cairo_pattern_t;
221
 
222
/**
223
 * cairo_destroy_func_t:
224
 * @data: The data element being destroyed.
225
 *
226
 * #cairo_destroy_func_t the type of function which is called when a
227
 * data element is destroyed. It is passed the pointer to the data
228
 * element and should free any memory and resources allocated for it.
3959 Serge 229
 *
230
 * Since: 1.0
1892 serge 231
 **/
232
typedef void (*cairo_destroy_func_t) (void *data);
233
 
234
/**
235
 * cairo_user_data_key_t:
236
 * @unused: not used; ignore.
237
 *
238
 * #cairo_user_data_key_t is used for attaching user data to cairo
239
 * data structures.  The actual contents of the struct is never used,
240
 * and there is no need to initialize the object; only the unique
241
 * address of a #cairo_data_key_t object is used.  Typically, you
242
 * would just use the address of a static #cairo_data_key_t object.
3959 Serge 243
 *
244
 * Since: 1.0
1892 serge 245
 **/
246
typedef struct _cairo_user_data_key {
247
    int unused;
248
} cairo_user_data_key_t;
249
 
250
/**
251
 * cairo_status_t:
3959 Serge 252
 * @CAIRO_STATUS_SUCCESS: no error has occurred (Since 1.0)
253
 * @CAIRO_STATUS_NO_MEMORY: out of memory (Since 1.0)
254
 * @CAIRO_STATUS_INVALID_RESTORE: cairo_restore() called without matching cairo_save() (Since 1.0)
255
 * @CAIRO_STATUS_INVALID_POP_GROUP: no saved group to pop, i.e. cairo_pop_group() without matching cairo_push_group() (Since 1.0)
256
 * @CAIRO_STATUS_NO_CURRENT_POINT: no current point defined (Since 1.0)
257
 * @CAIRO_STATUS_INVALID_MATRIX: invalid matrix (not invertible) (Since 1.0)
258
 * @CAIRO_STATUS_INVALID_STATUS: invalid value for an input #cairo_status_t (Since 1.0)
259
 * @CAIRO_STATUS_NULL_POINTER: %NULL pointer (Since 1.0)
260
 * @CAIRO_STATUS_INVALID_STRING: input string not valid UTF-8 (Since 1.0)
261
 * @CAIRO_STATUS_INVALID_PATH_DATA: input path data not valid (Since 1.0)
262
 * @CAIRO_STATUS_READ_ERROR: error while reading from input stream (Since 1.0)
263
 * @CAIRO_STATUS_WRITE_ERROR: error while writing to output stream (Since 1.0)
264
 * @CAIRO_STATUS_SURFACE_FINISHED: target surface has been finished (Since 1.0)
265
 * @CAIRO_STATUS_SURFACE_TYPE_MISMATCH: the surface type is not appropriate for the operation (Since 1.0)
266
 * @CAIRO_STATUS_PATTERN_TYPE_MISMATCH: the pattern type is not appropriate for the operation (Since 1.0)
267
 * @CAIRO_STATUS_INVALID_CONTENT: invalid value for an input #cairo_content_t (Since 1.0)
268
 * @CAIRO_STATUS_INVALID_FORMAT: invalid value for an input #cairo_format_t (Since 1.0)
269
 * @CAIRO_STATUS_INVALID_VISUAL: invalid value for an input Visual* (Since 1.0)
270
 * @CAIRO_STATUS_FILE_NOT_FOUND: file not found (Since 1.0)
271
 * @CAIRO_STATUS_INVALID_DASH: invalid value for a dash setting (Since 1.0)
1892 serge 272
 * @CAIRO_STATUS_INVALID_DSC_COMMENT: invalid value for a DSC comment (Since 1.2)
273
 * @CAIRO_STATUS_INVALID_INDEX: invalid index passed to getter (Since 1.4)
274
 * @CAIRO_STATUS_CLIP_NOT_REPRESENTABLE: clip region not representable in desired format (Since 1.4)
275
 * @CAIRO_STATUS_TEMP_FILE_ERROR: error creating or writing to a temporary file (Since 1.6)
276
 * @CAIRO_STATUS_INVALID_STRIDE: invalid value for stride (Since 1.6)
277
 * @CAIRO_STATUS_FONT_TYPE_MISMATCH: the font type is not appropriate for the operation (Since 1.8)
278
 * @CAIRO_STATUS_USER_FONT_IMMUTABLE: the user-font is immutable (Since 1.8)
279
 * @CAIRO_STATUS_USER_FONT_ERROR: error occurred in a user-font callback function (Since 1.8)
280
 * @CAIRO_STATUS_NEGATIVE_COUNT: negative number used where it is not allowed (Since 1.8)
281
 * @CAIRO_STATUS_INVALID_CLUSTERS: input clusters do not represent the accompanying text and glyph array (Since 1.8)
282
 * @CAIRO_STATUS_INVALID_SLANT: invalid value for an input #cairo_font_slant_t (Since 1.8)
283
 * @CAIRO_STATUS_INVALID_WEIGHT: invalid value for an input #cairo_font_weight_t (Since 1.8)
284
 * @CAIRO_STATUS_INVALID_SIZE: invalid value (typically too big) for the size of the input (surface, pattern, etc.) (Since 1.10)
285
 * @CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED: user-font method not implemented (Since 1.10)
286
 * @CAIRO_STATUS_DEVICE_TYPE_MISMATCH: the device type is not appropriate for the operation (Since 1.10)
287
 * @CAIRO_STATUS_DEVICE_ERROR: an operation to the device caused an unspecified error (Since 1.10)
3959 Serge 288
 * @CAIRO_STATUS_INVALID_MESH_CONSTRUCTION: a mesh pattern
289
 *   construction operation was used outside of a
290
 *   cairo_mesh_pattern_begin_patch()/cairo_mesh_pattern_end_patch()
291
 *   pair (Since 1.12)
292
 * @CAIRO_STATUS_DEVICE_FINISHED: target device has been finished (Since 1.12)
1892 serge 293
 * @CAIRO_STATUS_LAST_STATUS: this is a special value indicating the number of
294
 *   status values defined in this enumeration.  When using this value, note
295
 *   that the version of cairo at run-time may have additional status values
296
 *   defined than the value of this symbol at compile-time. (Since 1.10)
297
 *
298
 * #cairo_status_t is used to indicate errors that can occur when
299
 * using Cairo. In some cases it is returned directly by functions.
300
 * but when using #cairo_t, the last error, if any, is stored in
301
 * the context and can be retrieved with cairo_status().
302
 *
303
 * New entries may be added in future versions.  Use cairo_status_to_string()
304
 * to get a human-readable representation of an error message.
3959 Serge 305
 *
306
 * Since: 1.0
1892 serge 307
 **/
308
typedef enum _cairo_status {
309
    CAIRO_STATUS_SUCCESS = 0,
310
 
311
    CAIRO_STATUS_NO_MEMORY,
312
    CAIRO_STATUS_INVALID_RESTORE,
313
    CAIRO_STATUS_INVALID_POP_GROUP,
314
    CAIRO_STATUS_NO_CURRENT_POINT,
315
    CAIRO_STATUS_INVALID_MATRIX,
316
    CAIRO_STATUS_INVALID_STATUS,
317
    CAIRO_STATUS_NULL_POINTER,
318
    CAIRO_STATUS_INVALID_STRING,
319
    CAIRO_STATUS_INVALID_PATH_DATA,
320
    CAIRO_STATUS_READ_ERROR,
321
    CAIRO_STATUS_WRITE_ERROR,
322
    CAIRO_STATUS_SURFACE_FINISHED,
323
    CAIRO_STATUS_SURFACE_TYPE_MISMATCH,
324
    CAIRO_STATUS_PATTERN_TYPE_MISMATCH,
325
    CAIRO_STATUS_INVALID_CONTENT,
326
    CAIRO_STATUS_INVALID_FORMAT,
327
    CAIRO_STATUS_INVALID_VISUAL,
328
    CAIRO_STATUS_FILE_NOT_FOUND,
329
    CAIRO_STATUS_INVALID_DASH,
330
    CAIRO_STATUS_INVALID_DSC_COMMENT,
331
    CAIRO_STATUS_INVALID_INDEX,
332
    CAIRO_STATUS_CLIP_NOT_REPRESENTABLE,
333
    CAIRO_STATUS_TEMP_FILE_ERROR,
334
    CAIRO_STATUS_INVALID_STRIDE,
335
    CAIRO_STATUS_FONT_TYPE_MISMATCH,
336
    CAIRO_STATUS_USER_FONT_IMMUTABLE,
337
    CAIRO_STATUS_USER_FONT_ERROR,
338
    CAIRO_STATUS_NEGATIVE_COUNT,
339
    CAIRO_STATUS_INVALID_CLUSTERS,
340
    CAIRO_STATUS_INVALID_SLANT,
341
    CAIRO_STATUS_INVALID_WEIGHT,
342
    CAIRO_STATUS_INVALID_SIZE,
343
    CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED,
344
    CAIRO_STATUS_DEVICE_TYPE_MISMATCH,
345
    CAIRO_STATUS_DEVICE_ERROR,
3959 Serge 346
    CAIRO_STATUS_INVALID_MESH_CONSTRUCTION,
347
    CAIRO_STATUS_DEVICE_FINISHED,
1892 serge 348
 
349
    CAIRO_STATUS_LAST_STATUS
350
} cairo_status_t;
351
 
352
/**
353
 * cairo_content_t:
3959 Serge 354
 * @CAIRO_CONTENT_COLOR: The surface will hold color content only. (Since 1.0)
355
 * @CAIRO_CONTENT_ALPHA: The surface will hold alpha content only. (Since 1.0)
356
 * @CAIRO_CONTENT_COLOR_ALPHA: The surface will hold color and alpha content. (Since 1.0)
1892 serge 357
 *
358
 * #cairo_content_t is used to describe the content that a surface will
359
 * contain, whether color information, alpha information (translucence
360
 * vs. opacity), or both.
361
 *
362
 * Note: The large values here are designed to keep #cairo_content_t
363
 * values distinct from #cairo_format_t values so that the
364
 * implementation can detect the error if users confuse the two types.
3959 Serge 365
 *
366
 * Since: 1.0
1892 serge 367
 **/
368
typedef enum _cairo_content {
369
    CAIRO_CONTENT_COLOR		= 0x1000,
370
    CAIRO_CONTENT_ALPHA		= 0x2000,
371
    CAIRO_CONTENT_COLOR_ALPHA	= 0x3000
372
} cairo_content_t;
373
 
374
/**
3959 Serge 375
 * cairo_format_t:
376
 * @CAIRO_FORMAT_INVALID: no such format exists or is supported.
377
 * @CAIRO_FORMAT_ARGB32: each pixel is a 32-bit quantity, with
378
 *   alpha in the upper 8 bits, then red, then green, then blue.
379
 *   The 32-bit quantities are stored native-endian. Pre-multiplied
380
 *   alpha is used. (That is, 50% transparent red is 0x80800000,
381
 *   not 0x80ff0000.) (Since 1.0)
382
 * @CAIRO_FORMAT_RGB24: each pixel is a 32-bit quantity, with
383
 *   the upper 8 bits unused. Red, Green, and Blue are stored
384
 *   in the remaining 24 bits in that order. (Since 1.0)
385
 * @CAIRO_FORMAT_A8: each pixel is a 8-bit quantity holding
386
 *   an alpha value. (Since 1.0)
387
 * @CAIRO_FORMAT_A1: each pixel is a 1-bit quantity holding
388
 *   an alpha value. Pixels are packed together into 32-bit
389
 *   quantities. The ordering of the bits matches the
390
 *   endianess of the platform. On a big-endian machine, the
391
 *   first pixel is in the uppermost bit, on a little-endian
392
 *   machine the first pixel is in the least-significant bit. (Since 1.0)
393
 * @CAIRO_FORMAT_RGB16_565: each pixel is a 16-bit quantity
394
 *   with red in the upper 5 bits, then green in the middle
395
 *   6 bits, and blue in the lower 5 bits. (Since 1.2)
396
 * @CAIRO_FORMAT_RGB30: like RGB24 but with 10bpc. (Since 1.12)
397
 *
398
 * #cairo_format_t is used to identify the memory format of
399
 * image data.
400
 *
401
 * New entries may be added in future versions.
402
 *
403
 * Since: 1.0
404
 **/
405
typedef enum _cairo_format {
406
    CAIRO_FORMAT_INVALID   = -1,
407
    CAIRO_FORMAT_ARGB32    = 0,
408
    CAIRO_FORMAT_RGB24     = 1,
409
    CAIRO_FORMAT_A8        = 2,
410
    CAIRO_FORMAT_A1        = 3,
411
    CAIRO_FORMAT_RGB16_565 = 4,
412
    CAIRO_FORMAT_RGB30     = 5
413
} cairo_format_t;
414
 
415
 
416
/**
1892 serge 417
 * cairo_write_func_t:
418
 * @closure: the output closure
419
 * @data: the buffer containing the data to write
420
 * @length: the amount of data to write
421
 *
422
 * #cairo_write_func_t is the type of function which is called when a
423
 * backend needs to write data to an output stream.  It is passed the
424
 * closure which was specified by the user at the time the write
425
 * function was registered, the data to write and the length of the
426
 * data in bytes.  The write function should return
427
 * %CAIRO_STATUS_SUCCESS if all the data was successfully written,
428
 * %CAIRO_STATUS_WRITE_ERROR otherwise.
429
 *
430
 * Returns: the status code of the write operation
3959 Serge 431
 *
432
 * Since: 1.0
1892 serge 433
 **/
434
typedef cairo_status_t (*cairo_write_func_t) (void		  *closure,
435
					      const unsigned char *data,
436
					      unsigned int	   length);
437
 
438
/**
439
 * cairo_read_func_t:
440
 * @closure: the input closure
441
 * @data: the buffer into which to read the data
442
 * @length: the amount of data to read
443
 *
444
 * #cairo_read_func_t is the type of function which is called when a
445
 * backend needs to read data from an input stream.  It is passed the
446
 * closure which was specified by the user at the time the read
447
 * function was registered, the buffer to read the data into and the
448
 * length of the data in bytes.  The read function should return
449
 * %CAIRO_STATUS_SUCCESS if all the data was successfully read,
450
 * %CAIRO_STATUS_READ_ERROR otherwise.
451
 *
452
 * Returns: the status code of the read operation
3959 Serge 453
 *
454
 * Since: 1.0
1892 serge 455
 **/
456
typedef cairo_status_t (*cairo_read_func_t) (void		*closure,
457
					     unsigned char	*data,
458
					     unsigned int	length);
459
 
3959 Serge 460
/**
461
 * cairo_rectangle_int_t:
462
 * @x: X coordinate of the left side of the rectangle
463
 * @y: Y coordinate of the the top side of the rectangle
464
 * @width: width of the rectangle
465
 * @height: height of the rectangle
466
 *
467
 * A data structure for holding a rectangle with integer coordinates.
468
 *
469
 * Since: 1.10
470
 **/
471
 
472
typedef struct _cairo_rectangle_int {
473
    int x, y;
474
    int width, height;
475
} cairo_rectangle_int_t;
476
 
477
 
1892 serge 478
/* Functions for manipulating state objects */
479
cairo_public cairo_t *
480
cairo_create (cairo_surface_t *target);
481
 
482
cairo_public cairo_t *
483
cairo_reference (cairo_t *cr);
484
 
485
cairo_public void
486
cairo_destroy (cairo_t *cr);
487
 
488
cairo_public unsigned int
489
cairo_get_reference_count (cairo_t *cr);
490
 
491
cairo_public void *
492
cairo_get_user_data (cairo_t			 *cr,
493
		     const cairo_user_data_key_t *key);
494
 
495
cairo_public cairo_status_t
496
cairo_set_user_data (cairo_t			 *cr,
497
		     const cairo_user_data_key_t *key,
498
		     void			 *user_data,
499
		     cairo_destroy_func_t	  destroy);
500
 
501
cairo_public void
502
cairo_save (cairo_t *cr);
503
 
504
cairo_public void
505
cairo_restore (cairo_t *cr);
506
 
507
cairo_public void
508
cairo_push_group (cairo_t *cr);
509
 
510
cairo_public void
511
cairo_push_group_with_content (cairo_t *cr, cairo_content_t content);
512
 
513
cairo_public cairo_pattern_t *
514
cairo_pop_group (cairo_t *cr);
515
 
516
cairo_public void
517
cairo_pop_group_to_source (cairo_t *cr);
518
 
519
/* Modify state */
520
 
521
/**
522
 * cairo_operator_t:
3959 Serge 523
 * @CAIRO_OPERATOR_CLEAR: clear destination layer (bounded) (Since 1.0)
524
 * @CAIRO_OPERATOR_SOURCE: replace destination layer (bounded) (Since 1.0)
1892 serge 525
 * @CAIRO_OPERATOR_OVER: draw source layer on top of destination layer
3959 Serge 526
 * (bounded) (Since 1.0)
1892 serge 527
 * @CAIRO_OPERATOR_IN: draw source where there was destination content
3959 Serge 528
 * (unbounded) (Since 1.0)
1892 serge 529
 * @CAIRO_OPERATOR_OUT: draw source where there was no destination
3959 Serge 530
 * content (unbounded) (Since 1.0)
1892 serge 531
 * @CAIRO_OPERATOR_ATOP: draw source on top of destination content and
3959 Serge 532
 * only there (Since 1.0)
533
 * @CAIRO_OPERATOR_DEST: ignore the source (Since 1.0)
534
 * @CAIRO_OPERATOR_DEST_OVER: draw destination on top of source (Since 1.0)
1892 serge 535
 * @CAIRO_OPERATOR_DEST_IN: leave destination only where there was
3959 Serge 536
 * source content (unbounded) (Since 1.0)
1892 serge 537
 * @CAIRO_OPERATOR_DEST_OUT: leave destination only where there was no
3959 Serge 538
 * source content (Since 1.0)
1892 serge 539
 * @CAIRO_OPERATOR_DEST_ATOP: leave destination on top of source content
3959 Serge 540
 * and only there (unbounded) (Since 1.0)
1892 serge 541
 * @CAIRO_OPERATOR_XOR: source and destination are shown where there is only
3959 Serge 542
 * one of them (Since 1.0)
543
 * @CAIRO_OPERATOR_ADD: source and destination layers are accumulated (Since 1.0)
1892 serge 544
 * @CAIRO_OPERATOR_SATURATE: like over, but assuming source and dest are
3959 Serge 545
 * disjoint geometries (Since 1.0)
1892 serge 546
 * @CAIRO_OPERATOR_MULTIPLY: source and destination layers are multiplied.
3959 Serge 547
 * This causes the result to be at least as dark as the darker inputs. (Since 1.10)
1892 serge 548
 * @CAIRO_OPERATOR_SCREEN: source and destination are complemented and
549
 * multiplied. This causes the result to be at least as light as the lighter
3959 Serge 550
 * inputs. (Since 1.10)
1892 serge 551
 * @CAIRO_OPERATOR_OVERLAY: multiplies or screens, depending on the
3959 Serge 552
 * lightness of the destination color. (Since 1.10)
1892 serge 553
 * @CAIRO_OPERATOR_DARKEN: replaces the destination with the source if it
3959 Serge 554
 * is darker, otherwise keeps the source. (Since 1.10)
1892 serge 555
 * @CAIRO_OPERATOR_LIGHTEN: replaces the destination with the source if it
3959 Serge 556
 * is lighter, otherwise keeps the source. (Since 1.10)
1892 serge 557
 * @CAIRO_OPERATOR_COLOR_DODGE: brightens the destination color to reflect
3959 Serge 558
 * the source color. (Since 1.10)
1892 serge 559
 * @CAIRO_OPERATOR_COLOR_BURN: darkens the destination color to reflect
3959 Serge 560
 * the source color. (Since 1.10)
561
 * @CAIRO_OPERATOR_HARD_LIGHT: Multiplies or screens, dependent on source
562
 * color. (Since 1.10)
563
 * @CAIRO_OPERATOR_SOFT_LIGHT: Darkens or lightens, dependent on source
564
 * color. (Since 1.10)
1892 serge 565
 * @CAIRO_OPERATOR_DIFFERENCE: Takes the difference of the source and
3959 Serge 566
 * destination color. (Since 1.10)
1892 serge 567
 * @CAIRO_OPERATOR_EXCLUSION: Produces an effect similar to difference, but
3959 Serge 568
 * with lower contrast. (Since 1.10)
1892 serge 569
 * @CAIRO_OPERATOR_HSL_HUE: Creates a color with the hue of the source
3959 Serge 570
 * and the saturation and luminosity of the target. (Since 1.10)
1892 serge 571
 * @CAIRO_OPERATOR_HSL_SATURATION: Creates a color with the saturation
572
 * of the source and the hue and luminosity of the target. Painting with
3959 Serge 573
 * this mode onto a gray area produces no change. (Since 1.10)
1892 serge 574
 * @CAIRO_OPERATOR_HSL_COLOR: Creates a color with the hue and saturation
575
 * of the source and the luminosity of the target. This preserves the gray
576
 * levels of the target and is useful for coloring monochrome images or
3959 Serge 577
 * tinting color images. (Since 1.10)
1892 serge 578
 * @CAIRO_OPERATOR_HSL_LUMINOSITY: Creates a color with the luminosity of
579
 * the source and the hue and saturation of the target. This produces an
3959 Serge 580
 * inverse effect to @CAIRO_OPERATOR_HSL_COLOR. (Since 1.10)
1892 serge 581
 *
582
 * #cairo_operator_t is used to set the compositing operator for all cairo
583
 * drawing operations.
584
 *
585
 * The default operator is %CAIRO_OPERATOR_OVER.
586
 *
587
 * The operators marked as unbounded modify their
588
 * destination even outside of the mask layer (that is, their effect is not
589
 * bound by the mask layer).  However, their effect can still be limited by
590
 * way of clipping.
591
 *
592
 * To keep things simple, the operator descriptions here
593
 * document the behavior for when both source and destination are either fully
594
 * transparent or fully opaque.  The actual implementation works for
595
 * translucent layers too.
596
 * For a more detailed explanation of the effects of each operator, including
597
 * the mathematical definitions, see
598
 * http://cairographics.org/operators/.
3959 Serge 599
 *
600
 * Since: 1.0
1892 serge 601
 **/
602
typedef enum _cairo_operator {
603
    CAIRO_OPERATOR_CLEAR,
604
 
605
    CAIRO_OPERATOR_SOURCE,
606
    CAIRO_OPERATOR_OVER,
607
    CAIRO_OPERATOR_IN,
608
    CAIRO_OPERATOR_OUT,
609
    CAIRO_OPERATOR_ATOP,
610
 
611
    CAIRO_OPERATOR_DEST,
612
    CAIRO_OPERATOR_DEST_OVER,
613
    CAIRO_OPERATOR_DEST_IN,
614
    CAIRO_OPERATOR_DEST_OUT,
615
    CAIRO_OPERATOR_DEST_ATOP,
616
 
617
    CAIRO_OPERATOR_XOR,
618
    CAIRO_OPERATOR_ADD,
619
    CAIRO_OPERATOR_SATURATE,
620
 
621
    CAIRO_OPERATOR_MULTIPLY,
622
    CAIRO_OPERATOR_SCREEN,
623
    CAIRO_OPERATOR_OVERLAY,
624
    CAIRO_OPERATOR_DARKEN,
625
    CAIRO_OPERATOR_LIGHTEN,
626
    CAIRO_OPERATOR_COLOR_DODGE,
627
    CAIRO_OPERATOR_COLOR_BURN,
628
    CAIRO_OPERATOR_HARD_LIGHT,
629
    CAIRO_OPERATOR_SOFT_LIGHT,
630
    CAIRO_OPERATOR_DIFFERENCE,
631
    CAIRO_OPERATOR_EXCLUSION,
632
    CAIRO_OPERATOR_HSL_HUE,
633
    CAIRO_OPERATOR_HSL_SATURATION,
634
    CAIRO_OPERATOR_HSL_COLOR,
635
    CAIRO_OPERATOR_HSL_LUMINOSITY
636
} cairo_operator_t;
637
 
638
cairo_public void
639
cairo_set_operator (cairo_t *cr, cairo_operator_t op);
640
 
641
cairo_public void
642
cairo_set_source (cairo_t *cr, cairo_pattern_t *source);
643
 
644
cairo_public void
645
cairo_set_source_rgb (cairo_t *cr, double red, double green, double blue);
646
 
647
cairo_public void
648
cairo_set_source_rgba (cairo_t *cr,
649
		       double red, double green, double blue,
650
		       double alpha);
651
 
652
cairo_public void
653
cairo_set_source_surface (cairo_t	  *cr,
654
			  cairo_surface_t *surface,
655
			  double	   x,
656
			  double	   y);
657
 
658
cairo_public void
659
cairo_set_tolerance (cairo_t *cr, double tolerance);
660
 
661
/**
662
 * cairo_antialias_t:
663
 * @CAIRO_ANTIALIAS_DEFAULT: Use the default antialiasing for
3959 Serge 664
 *   the subsystem and target device, since 1.0
665
 * @CAIRO_ANTIALIAS_NONE: Use a bilevel alpha mask, since 1.0
1892 serge 666
 * @CAIRO_ANTIALIAS_GRAY: Perform single-color antialiasing (using
3959 Serge 667
 *  shades of gray for black text on a white background, for example), since 1.0
1892 serge 668
 * @CAIRO_ANTIALIAS_SUBPIXEL: Perform antialiasing by taking
669
 *  advantage of the order of subpixel elements on devices
3959 Serge 670
 *  such as LCD panels, since 1.0
671
 * @CAIRO_ANTIALIAS_FAST: Hint that the backend should perform some
672
 * antialiasing but prefer speed over quality, since 1.12
673
 * @CAIRO_ANTIALIAS_GOOD: The backend should balance quality against
674
 * performance, since 1.12
675
 * @CAIRO_ANTIALIAS_BEST: Hint that the backend should render at the highest
676
 * quality, sacrificing speed if necessary, since 1.12
1892 serge 677
 *
678
 * Specifies the type of antialiasing to do when rendering text or shapes.
3959 Serge 679
 *
680
 * As it is not necessarily clear from the above what advantages a particular
681
 * antialias method provides, since 1.12, there is also a set of hints:
682
 * @CAIRO_ANTIALIAS_FAST: Allow the backend to degrade raster quality for speed
683
 * @CAIRO_ANTIALIAS_GOOD: A balance between speed and quality
684
 * @CAIRO_ANTIALIAS_BEST: A high-fidelity, but potentially slow, raster mode
685
 *
686
 * These make no guarantee on how the backend will perform its rasterisation
687
 * (if it even rasterises!), nor that they have any differing effect other
688
 * than to enable some form of antialiasing. In the case of glyph rendering,
689
 * @CAIRO_ANTIALIAS_FAST and @CAIRO_ANTIALIAS_GOOD will be mapped to
690
 * @CAIRO_ANTIALIAS_GRAY, with @CAIRO_ANTALIAS_BEST being equivalent to
691
 * @CAIRO_ANTIALIAS_SUBPIXEL.
692
 *
693
 * The interpretation of @CAIRO_ANTIALIAS_DEFAULT is left entirely up to
694
 * the backend, typically this will be similar to @CAIRO_ANTIALIAS_GOOD.
695
 *
696
 * Since: 1.0
1892 serge 697
 **/
698
typedef enum _cairo_antialias {
699
    CAIRO_ANTIALIAS_DEFAULT,
3959 Serge 700
 
701
    /* method */
1892 serge 702
    CAIRO_ANTIALIAS_NONE,
703
    CAIRO_ANTIALIAS_GRAY,
3959 Serge 704
    CAIRO_ANTIALIAS_SUBPIXEL,
705
 
706
    /* hints */
707
    CAIRO_ANTIALIAS_FAST,
708
    CAIRO_ANTIALIAS_GOOD,
709
    CAIRO_ANTIALIAS_BEST
1892 serge 710
} cairo_antialias_t;
711
 
712
cairo_public void
713
cairo_set_antialias (cairo_t *cr, cairo_antialias_t antialias);
714
 
715
/**
716
 * cairo_fill_rule_t:
717
 * @CAIRO_FILL_RULE_WINDING: If the path crosses the ray from
718
 * left-to-right, counts +1. If the path crosses the ray
719
 * from right to left, counts -1. (Left and right are determined
720
 * from the perspective of looking along the ray from the starting
3959 Serge 721
 * point.) If the total count is non-zero, the point will be filled. (Since 1.0)
1892 serge 722
 * @CAIRO_FILL_RULE_EVEN_ODD: Counts the total number of
723
 * intersections, without regard to the orientation of the contour. If
724
 * the total number of intersections is odd, the point will be
3959 Serge 725
 * filled. (Since 1.0)
1892 serge 726
 *
727
 * #cairo_fill_rule_t is used to select how paths are filled. For both
728
 * fill rules, whether or not a point is included in the fill is
729
 * determined by taking a ray from that point to infinity and looking
730
 * at intersections with the path. The ray can be in any direction,
731
 * as long as it doesn't pass through the end point of a segment
732
 * or have a tricky intersection such as intersecting tangent to the path.
733
 * (Note that filling is not actually implemented in this way. This
734
 * is just a description of the rule that is applied.)
735
 *
736
 * The default fill rule is %CAIRO_FILL_RULE_WINDING.
737
 *
738
 * New entries may be added in future versions.
3959 Serge 739
 *
740
 * Since: 1.0
1892 serge 741
 **/
742
typedef enum _cairo_fill_rule {
743
    CAIRO_FILL_RULE_WINDING,
744
    CAIRO_FILL_RULE_EVEN_ODD
745
} cairo_fill_rule_t;
746
 
747
cairo_public void
748
cairo_set_fill_rule (cairo_t *cr, cairo_fill_rule_t fill_rule);
749
 
750
cairo_public void
751
cairo_set_line_width (cairo_t *cr, double width);
752
 
753
/**
754
 * cairo_line_cap_t:
3959 Serge 755
 * @CAIRO_LINE_CAP_BUTT: start(stop) the line exactly at the start(end) point (Since 1.0)
756
 * @CAIRO_LINE_CAP_ROUND: use a round ending, the center of the circle is the end point (Since 1.0)
757
 * @CAIRO_LINE_CAP_SQUARE: use squared ending, the center of the square is the end point (Since 1.0)
1892 serge 758
 *
759
 * Specifies how to render the endpoints of the path when stroking.
760
 *
761
 * The default line cap style is %CAIRO_LINE_CAP_BUTT.
3959 Serge 762
 *
763
 * Since: 1.0
1892 serge 764
 **/
765
typedef enum _cairo_line_cap {
766
    CAIRO_LINE_CAP_BUTT,
767
    CAIRO_LINE_CAP_ROUND,
768
    CAIRO_LINE_CAP_SQUARE
769
} cairo_line_cap_t;
770
 
771
cairo_public void
772
cairo_set_line_cap (cairo_t *cr, cairo_line_cap_t line_cap);
773
 
774
/**
775
 * cairo_line_join_t:
776
 * @CAIRO_LINE_JOIN_MITER: use a sharp (angled) corner, see
3959 Serge 777
 * cairo_set_miter_limit() (Since 1.0)
1892 serge 778
 * @CAIRO_LINE_JOIN_ROUND: use a rounded join, the center of the circle is the
3959 Serge 779
 * joint point (Since 1.0)
1892 serge 780
 * @CAIRO_LINE_JOIN_BEVEL: use a cut-off join, the join is cut off at half
3959 Serge 781
 * the line width from the joint point (Since 1.0)
1892 serge 782
 *
783
 * Specifies how to render the junction of two lines when stroking.
784
 *
785
 * The default line join style is %CAIRO_LINE_JOIN_MITER.
3959 Serge 786
 *
787
 * Since: 1.0
1892 serge 788
 **/
789
typedef enum _cairo_line_join {
790
    CAIRO_LINE_JOIN_MITER,
791
    CAIRO_LINE_JOIN_ROUND,
792
    CAIRO_LINE_JOIN_BEVEL
793
} cairo_line_join_t;
794
 
795
cairo_public void
796
cairo_set_line_join (cairo_t *cr, cairo_line_join_t line_join);
797
 
798
cairo_public void
799
cairo_set_dash (cairo_t      *cr,
800
		const double *dashes,
801
		int	      num_dashes,
802
		double	      offset);
803
 
804
cairo_public void
805
cairo_set_miter_limit (cairo_t *cr, double limit);
806
 
807
cairo_public void
808
cairo_translate (cairo_t *cr, double tx, double ty);
809
 
810
cairo_public void
811
cairo_scale (cairo_t *cr, double sx, double sy);
812
 
813
cairo_public void
814
cairo_rotate (cairo_t *cr, double angle);
815
 
816
cairo_public void
817
cairo_transform (cairo_t	      *cr,
818
		 const cairo_matrix_t *matrix);
819
 
820
cairo_public void
821
cairo_set_matrix (cairo_t	       *cr,
822
		  const cairo_matrix_t *matrix);
823
 
824
cairo_public void
825
cairo_identity_matrix (cairo_t *cr);
826
 
827
cairo_public void
828
cairo_user_to_device (cairo_t *cr, double *x, double *y);
829
 
830
cairo_public void
831
cairo_user_to_device_distance (cairo_t *cr, double *dx, double *dy);
832
 
833
cairo_public void
834
cairo_device_to_user (cairo_t *cr, double *x, double *y);
835
 
836
cairo_public void
837
cairo_device_to_user_distance (cairo_t *cr, double *dx, double *dy);
838
 
839
/* Path creation functions */
840
cairo_public void
841
cairo_new_path (cairo_t *cr);
842
 
843
cairo_public void
844
cairo_move_to (cairo_t *cr, double x, double y);
845
 
846
cairo_public void
847
cairo_new_sub_path (cairo_t *cr);
848
 
849
cairo_public void
850
cairo_line_to (cairo_t *cr, double x, double y);
851
 
852
cairo_public void
853
cairo_curve_to (cairo_t *cr,
854
		double x1, double y1,
855
		double x2, double y2,
856
		double x3, double y3);
857
 
858
cairo_public void
859
cairo_arc (cairo_t *cr,
860
	   double xc, double yc,
861
	   double radius,
862
	   double angle1, double angle2);
863
 
864
cairo_public void
865
cairo_arc_negative (cairo_t *cr,
866
		    double xc, double yc,
867
		    double radius,
868
		    double angle1, double angle2);
869
 
870
/* XXX: NYI
871
cairo_public void
872
cairo_arc_to (cairo_t *cr,
873
	      double x1, double y1,
874
	      double x2, double y2,
875
	      double radius);
876
*/
877
 
878
cairo_public void
879
cairo_rel_move_to (cairo_t *cr, double dx, double dy);
880
 
881
cairo_public void
882
cairo_rel_line_to (cairo_t *cr, double dx, double dy);
883
 
884
cairo_public void
885
cairo_rel_curve_to (cairo_t *cr,
886
		    double dx1, double dy1,
887
		    double dx2, double dy2,
888
		    double dx3, double dy3);
889
 
890
cairo_public void
891
cairo_rectangle (cairo_t *cr,
892
		 double x, double y,
893
		 double width, double height);
894
 
895
/* XXX: NYI
896
cairo_public void
897
cairo_stroke_to_path (cairo_t *cr);
898
*/
899
 
900
cairo_public void
901
cairo_close_path (cairo_t *cr);
902
 
903
cairo_public void
904
cairo_path_extents (cairo_t *cr,
905
		    double *x1, double *y1,
906
		    double *x2, double *y2);
907
 
908
/* Painting functions */
909
cairo_public void
910
cairo_paint (cairo_t *cr);
911
 
912
cairo_public void
913
cairo_paint_with_alpha (cairo_t *cr,
914
			double   alpha);
915
 
916
cairo_public void
917
cairo_mask (cairo_t         *cr,
918
	    cairo_pattern_t *pattern);
919
 
920
cairo_public void
921
cairo_mask_surface (cairo_t         *cr,
922
		    cairo_surface_t *surface,
923
		    double           surface_x,
924
		    double           surface_y);
925
 
926
cairo_public void
927
cairo_stroke (cairo_t *cr);
928
 
929
cairo_public void
930
cairo_stroke_preserve (cairo_t *cr);
931
 
932
cairo_public void
933
cairo_fill (cairo_t *cr);
934
 
935
cairo_public void
936
cairo_fill_preserve (cairo_t *cr);
937
 
938
cairo_public void
939
cairo_copy_page (cairo_t *cr);
940
 
941
cairo_public void
942
cairo_show_page (cairo_t *cr);
943
 
944
/* Insideness testing */
945
cairo_public cairo_bool_t
946
cairo_in_stroke (cairo_t *cr, double x, double y);
947
 
948
cairo_public cairo_bool_t
949
cairo_in_fill (cairo_t *cr, double x, double y);
950
 
951
cairo_public cairo_bool_t
952
cairo_in_clip (cairo_t *cr, double x, double y);
953
 
954
/* Rectangular extents */
955
cairo_public void
956
cairo_stroke_extents (cairo_t *cr,
957
		      double *x1, double *y1,
958
		      double *x2, double *y2);
959
 
960
cairo_public void
961
cairo_fill_extents (cairo_t *cr,
962
		    double *x1, double *y1,
963
		    double *x2, double *y2);
964
 
965
/* Clipping */
966
cairo_public void
967
cairo_reset_clip (cairo_t *cr);
968
 
969
cairo_public void
970
cairo_clip (cairo_t *cr);
971
 
972
cairo_public void
973
cairo_clip_preserve (cairo_t *cr);
974
 
975
cairo_public void
976
cairo_clip_extents (cairo_t *cr,
977
		    double *x1, double *y1,
978
		    double *x2, double *y2);
979
 
980
/**
981
 * cairo_rectangle_t:
982
 * @x: X coordinate of the left side of the rectangle
983
 * @y: Y coordinate of the the top side of the rectangle
984
 * @width: width of the rectangle
985
 * @height: height of the rectangle
986
 *
987
 * A data structure for holding a rectangle.
988
 *
989
 * Since: 1.4
990
 **/
991
typedef struct _cairo_rectangle {
992
    double x, y, width, height;
993
} cairo_rectangle_t;
994
 
995
/**
996
 * cairo_rectangle_list_t:
997
 * @status: Error status of the rectangle list
998
 * @rectangles: Array containing the rectangles
999
 * @num_rectangles: Number of rectangles in this list
1000
 *
1001
 * A data structure for holding a dynamically allocated
1002
 * array of rectangles.
1003
 *
1004
 * Since: 1.4
1005
 **/
1006
typedef struct _cairo_rectangle_list {
1007
    cairo_status_t     status;
1008
    cairo_rectangle_t *rectangles;
1009
    int                num_rectangles;
1010
} cairo_rectangle_list_t;
1011
 
1012
cairo_public cairo_rectangle_list_t *
1013
cairo_copy_clip_rectangle_list (cairo_t *cr);
1014
 
1015
cairo_public void
1016
cairo_rectangle_list_destroy (cairo_rectangle_list_t *rectangle_list);
1017
 
1018
/* Font/Text functions */
1019
 
1020
/**
1021
 * cairo_scaled_font_t:
1022
 *
1023
 * A #cairo_scaled_font_t is a font scaled to a particular size and device
1024
 * resolution. A #cairo_scaled_font_t is most useful for low-level font
1025
 * usage where a library or application wants to cache a reference
1026
 * to a scaled font to speed up the computation of metrics.
1027
 *
1028
 * There are various types of scaled fonts, depending on the
1029
 * font backend they use. The type of a
1030
 * scaled font can be queried using cairo_scaled_font_get_type().
1031
 *
1032
 * Memory management of #cairo_scaled_font_t is done with
1033
 * cairo_scaled_font_reference() and cairo_scaled_font_destroy().
3959 Serge 1034
 *
1035
 * Since: 1.0
1892 serge 1036
 **/
1037
typedef struct _cairo_scaled_font cairo_scaled_font_t;
1038
 
1039
/**
1040
 * cairo_font_face_t:
1041
 *
1042
 * A #cairo_font_face_t specifies all aspects of a font other
1043
 * than the size or font matrix (a font matrix is used to distort
1044
 * a font by sheering it or scaling it unequally in the two
1045
 * directions) . A font face can be set on a #cairo_t by using
1046
 * cairo_set_font_face(); the size and font matrix are set with
1047
 * cairo_set_font_size() and cairo_set_font_matrix().
1048
 *
1049
 * There are various types of font faces, depending on the
1050
 * font backend they use. The type of a
1051
 * font face can be queried using cairo_font_face_get_type().
1052
 *
1053
 * Memory management of #cairo_font_face_t is done with
1054
 * cairo_font_face_reference() and cairo_font_face_destroy().
3959 Serge 1055
 *
1056
 * Since: 1.0
1892 serge 1057
 **/
1058
typedef struct _cairo_font_face cairo_font_face_t;
1059
 
1060
/**
1061
 * cairo_glyph_t:
1062
 * @index: glyph index in the font. The exact interpretation of the
1063
 *      glyph index depends on the font technology being used.
1064
 * @x: the offset in the X direction between the origin used for
1065
 *     drawing or measuring the string and the origin of this glyph.
1066
 * @y: the offset in the Y direction between the origin used for
1067
 *     drawing or measuring the string and the origin of this glyph.
1068
 *
1069
 * The #cairo_glyph_t structure holds information about a single glyph
1070
 * when drawing or measuring text. A font is (in simple terms) a
1071
 * collection of shapes used to draw text. A glyph is one of these
1072
 * shapes. There can be multiple glyphs for a single character
1073
 * (alternates to be used in different contexts, for example), or a
1074
 * glyph can be a ligature of multiple
1075
 * characters. Cairo doesn't expose any way of converting input text
1076
 * into glyphs, so in order to use the Cairo interfaces that take
1077
 * arrays of glyphs, you must directly access the appropriate
1078
 * underlying font system.
1079
 *
1080
 * Note that the offsets given by @x and @y are not cumulative. When
1081
 * drawing or measuring text, each glyph is individually positioned
1082
 * with respect to the overall origin
3959 Serge 1083
 *
1084
 * Since: 1.0
1892 serge 1085
 **/
1086
typedef struct {
1087
    unsigned long        index;
1088
    double               x;
1089
    double               y;
1090
} cairo_glyph_t;
1091
 
1092
cairo_public cairo_glyph_t *
1093
cairo_glyph_allocate (int num_glyphs);
1094
 
1095
cairo_public void
1096
cairo_glyph_free (cairo_glyph_t *glyphs);
1097
 
1098
/**
1099
 * cairo_text_cluster_t:
1100
 * @num_bytes: the number of bytes of UTF-8 text covered by cluster
1101
 * @num_glyphs: the number of glyphs covered by cluster
1102
 *
1103
 * The #cairo_text_cluster_t structure holds information about a single
1104
 * text cluster.  A text cluster is a minimal
1105
 * mapping of some glyphs corresponding to some UTF-8 text.
1106
 *
1107
 * For a cluster to be valid, both @num_bytes and @num_glyphs should
1108
 * be non-negative, and at least one should be non-zero.
1109
 * Note that clusters with zero glyphs are not as well supported as
1110
 * normal clusters.  For example, PDF rendering applications typically
1111
 * ignore those clusters when PDF text is being selected.
1112
 *
1113
 * See cairo_show_text_glyphs() for how clusters are used in advanced
1114
 * text operations.
1115
 *
1116
 * Since: 1.8
1117
 **/
1118
typedef struct {
1119
    int        num_bytes;
1120
    int        num_glyphs;
1121
} cairo_text_cluster_t;
1122
 
1123
cairo_public cairo_text_cluster_t *
1124
cairo_text_cluster_allocate (int num_clusters);
1125
 
1126
cairo_public void
1127
cairo_text_cluster_free (cairo_text_cluster_t *clusters);
1128
 
1129
/**
1130
 * cairo_text_cluster_flags_t:
1131
 * @CAIRO_TEXT_CLUSTER_FLAG_BACKWARD: The clusters in the cluster array
3959 Serge 1132
 * map to glyphs in the glyph array from end to start. (Since 1.8)
1892 serge 1133
 *
1134
 * Specifies properties of a text cluster mapping.
1135
 *
1136
 * Since: 1.8
1137
 **/
1138
typedef enum _cairo_text_cluster_flags {
1139
    CAIRO_TEXT_CLUSTER_FLAG_BACKWARD = 0x00000001
1140
} cairo_text_cluster_flags_t;
1141
 
1142
/**
1143
 * cairo_text_extents_t:
1144
 * @x_bearing: the horizontal distance from the origin to the
1145
 *   leftmost part of the glyphs as drawn. Positive if the
1146
 *   glyphs lie entirely to the right of the origin.
1147
 * @y_bearing: the vertical distance from the origin to the
1148
 *   topmost part of the glyphs as drawn. Positive only if the
1149
 *   glyphs lie completely below the origin; will usually be
1150
 *   negative.
1151
 * @width: width of the glyphs as drawn
1152
 * @height: height of the glyphs as drawn
1153
 * @x_advance:distance to advance in the X direction
1154
 *    after drawing these glyphs
1155
 * @y_advance: distance to advance in the Y direction
1156
 *   after drawing these glyphs. Will typically be zero except
1157
 *   for vertical text layout as found in East-Asian languages.
1158
 *
1159
 * The #cairo_text_extents_t structure stores the extents of a single
1160
 * glyph or a string of glyphs in user-space coordinates. Because text
1161
 * extents are in user-space coordinates, they are mostly, but not
1162
 * entirely, independent of the current transformation matrix. If you call
1163
 * cairo_scale(cr, 2.0, 2.0), text will
1164
 * be drawn twice as big, but the reported text extents will not be
1165
 * doubled. They will change slightly due to hinting (so you can't
1166
 * assume that metrics are independent of the transformation matrix),
1167
 * but otherwise will remain unchanged.
3959 Serge 1168
 *
1169
 * Since: 1.0
1892 serge 1170
 **/
1171
typedef struct {
1172
    double x_bearing;
1173
    double y_bearing;
1174
    double width;
1175
    double height;
1176
    double x_advance;
1177
    double y_advance;
1178
} cairo_text_extents_t;
1179
 
1180
/**
1181
 * cairo_font_extents_t:
1182
 * @ascent: the distance that the font extends above the baseline.
1183
 *          Note that this is not always exactly equal to the maximum
1184
 *          of the extents of all the glyphs in the font, but rather
1185
 *          is picked to express the font designer's intent as to
1186
 *          how the font should align with elements above it.
1187
 * @descent: the distance that the font extends below the baseline.
1188
 *           This value is positive for typical fonts that include
1189
 *           portions below the baseline. Note that this is not always
1190
 *           exactly equal to the maximum of the extents of all the
1191
 *           glyphs in the font, but rather is picked to express the
3959 Serge 1192
 *           font designer's intent as to how the font should
1892 serge 1193
 *           align with elements below it.
1194
 * @height: the recommended vertical distance between baselines when
1195
 *          setting consecutive lines of text with the font. This
1196
 *          is greater than @ascent+@descent by a
1197
 *          quantity known as the line spacing
1198
 *          or external leading. When space
1199
 *          is at a premium, most fonts can be set with only
1200
 *          a distance of @ascent+@descent between lines.
1201
 * @max_x_advance: the maximum distance in the X direction that
3959 Serge 1202
 *         the origin is advanced for any glyph in the font.
1892 serge 1203
 * @max_y_advance: the maximum distance in the Y direction that
3959 Serge 1204
 *         the origin is advanced for any glyph in the font.
1205
 *         This will be zero for normal fonts used for horizontal
1892 serge 1206
 *         writing. (The scripts of East Asia are sometimes written
1207
 *         vertically.)
1208
 *
1209
 * The #cairo_font_extents_t structure stores metric information for
1210
 * a font. Values are given in the current user-space coordinate
1211
 * system.
1212
 *
1213
 * Because font metrics are in user-space coordinates, they are
1214
 * mostly, but not entirely, independent of the current transformation
1215
 * matrix. If you call cairo_scale(cr, 2.0, 2.0),
1216
 * text will be drawn twice as big, but the reported text extents will
1217
 * not be doubled. They will change slightly due to hinting (so you
1218
 * can't assume that metrics are independent of the transformation
1219
 * matrix), but otherwise will remain unchanged.
3959 Serge 1220
 *
1221
 * Since: 1.0
1892 serge 1222
 **/
1223
typedef struct {
1224
    double ascent;
1225
    double descent;
1226
    double height;
1227
    double max_x_advance;
1228
    double max_y_advance;
1229
} cairo_font_extents_t;
1230
 
1231
/**
1232
 * cairo_font_slant_t:
3959 Serge 1233
 * @CAIRO_FONT_SLANT_NORMAL: Upright font style, since 1.0
1234
 * @CAIRO_FONT_SLANT_ITALIC: Italic font style, since 1.0
1235
 * @CAIRO_FONT_SLANT_OBLIQUE: Oblique font style, since 1.0
1892 serge 1236
 *
1237
 * Specifies variants of a font face based on their slant.
3959 Serge 1238
 *
1239
 * Since: 1.0
1892 serge 1240
 **/
1241
typedef enum _cairo_font_slant {
1242
    CAIRO_FONT_SLANT_NORMAL,
1243
    CAIRO_FONT_SLANT_ITALIC,
1244
    CAIRO_FONT_SLANT_OBLIQUE
1245
} cairo_font_slant_t;
1246
 
1247
/**
1248
 * cairo_font_weight_t:
3959 Serge 1249
 * @CAIRO_FONT_WEIGHT_NORMAL: Normal font weight, since 1.0
1250
 * @CAIRO_FONT_WEIGHT_BOLD: Bold font weight, since 1.0
1892 serge 1251
 *
1252
 * Specifies variants of a font face based on their weight.
3959 Serge 1253
 *
1254
 * Since: 1.0
1892 serge 1255
 **/
1256
typedef enum _cairo_font_weight {
1257
    CAIRO_FONT_WEIGHT_NORMAL,
1258
    CAIRO_FONT_WEIGHT_BOLD
1259
} cairo_font_weight_t;
1260
 
1261
/**
1262
 * cairo_subpixel_order_t:
1263
 * @CAIRO_SUBPIXEL_ORDER_DEFAULT: Use the default subpixel order for
3959 Serge 1264
 *   for the target device, since 1.0
1892 serge 1265
 * @CAIRO_SUBPIXEL_ORDER_RGB: Subpixel elements are arranged horizontally
3959 Serge 1266
 *   with red at the left, since 1.0
1892 serge 1267
 * @CAIRO_SUBPIXEL_ORDER_BGR:  Subpixel elements are arranged horizontally
3959 Serge 1268
 *   with blue at the left, since 1.0
1892 serge 1269
 * @CAIRO_SUBPIXEL_ORDER_VRGB: Subpixel elements are arranged vertically
3959 Serge 1270
 *   with red at the top, since 1.0
1892 serge 1271
 * @CAIRO_SUBPIXEL_ORDER_VBGR: Subpixel elements are arranged vertically
3959 Serge 1272
 *   with blue at the top, since 1.0
1892 serge 1273
 *
1274
 * The subpixel order specifies the order of color elements within
1275
 * each pixel on the display device when rendering with an
1276
 * antialiasing mode of %CAIRO_ANTIALIAS_SUBPIXEL.
3959 Serge 1277
 *
1278
 * Since: 1.0
1892 serge 1279
 **/
1280
typedef enum _cairo_subpixel_order {
1281
    CAIRO_SUBPIXEL_ORDER_DEFAULT,
1282
    CAIRO_SUBPIXEL_ORDER_RGB,
1283
    CAIRO_SUBPIXEL_ORDER_BGR,
1284
    CAIRO_SUBPIXEL_ORDER_VRGB,
1285
    CAIRO_SUBPIXEL_ORDER_VBGR
1286
} cairo_subpixel_order_t;
1287
 
1288
/**
1289
 * cairo_hint_style_t:
1290
 * @CAIRO_HINT_STYLE_DEFAULT: Use the default hint style for
3959 Serge 1291
 *   font backend and target device, since 1.0
1292
 * @CAIRO_HINT_STYLE_NONE: Do not hint outlines, since 1.0
1892 serge 1293
 * @CAIRO_HINT_STYLE_SLIGHT: Hint outlines slightly to improve
1294
 *   contrast while retaining good fidelity to the original
3959 Serge 1295
 *   shapes, since 1.0
1892 serge 1296
 * @CAIRO_HINT_STYLE_MEDIUM: Hint outlines with medium strength
1297
 *   giving a compromise between fidelity to the original shapes
3959 Serge 1298
 *   and contrast, since 1.0
1299
 * @CAIRO_HINT_STYLE_FULL: Hint outlines to maximize contrast, since 1.0
1892 serge 1300
 *
1301
 * Specifies the type of hinting to do on font outlines. Hinting
1302
 * is the process of fitting outlines to the pixel grid in order
1303
 * to improve the appearance of the result. Since hinting outlines
1304
 * involves distorting them, it also reduces the faithfulness
1305
 * to the original outline shapes. Not all of the outline hinting
1306
 * styles are supported by all font backends.
1307
 *
1308
 * New entries may be added in future versions.
3959 Serge 1309
 *
1310
 * Since: 1.0
1892 serge 1311
 **/
1312
typedef enum _cairo_hint_style {
1313
    CAIRO_HINT_STYLE_DEFAULT,
1314
    CAIRO_HINT_STYLE_NONE,
1315
    CAIRO_HINT_STYLE_SLIGHT,
1316
    CAIRO_HINT_STYLE_MEDIUM,
1317
    CAIRO_HINT_STYLE_FULL
1318
} cairo_hint_style_t;
1319
 
1320
/**
1321
 * cairo_hint_metrics_t:
1322
 * @CAIRO_HINT_METRICS_DEFAULT: Hint metrics in the default
3959 Serge 1323
 *  manner for the font backend and target device, since 1.0
1324
 * @CAIRO_HINT_METRICS_OFF: Do not hint font metrics, since 1.0
1325
 * @CAIRO_HINT_METRICS_ON: Hint font metrics, since 1.0
1892 serge 1326
 *
1327
 * Specifies whether to hint font metrics; hinting font metrics
1328
 * means quantizing them so that they are integer values in
1329
 * device space. Doing this improves the consistency of
1330
 * letter and line spacing, however it also means that text
1331
 * will be laid out differently at different zoom factors.
3959 Serge 1332
 *
1333
 * Since: 1.0
1892 serge 1334
 **/
1335
typedef enum _cairo_hint_metrics {
1336
    CAIRO_HINT_METRICS_DEFAULT,
1337
    CAIRO_HINT_METRICS_OFF,
1338
    CAIRO_HINT_METRICS_ON
1339
} cairo_hint_metrics_t;
1340
 
1341
/**
1342
 * cairo_font_options_t:
1343
 *
1344
 * An opaque structure holding all options that are used when
1345
 * rendering fonts.
1346
 *
1347
 * Individual features of a #cairo_font_options_t can be set or
1348
 * accessed using functions named
3959 Serge 1349
 * cairo_font_options_set_feature_name() and
1350
 * cairo_font_options_get_feature_name(), like
1892 serge 1351
 * cairo_font_options_set_antialias() and
1352
 * cairo_font_options_get_antialias().
1353
 *
1354
 * New features may be added to a #cairo_font_options_t in the
1355
 * future.  For this reason, cairo_font_options_copy(),
1356
 * cairo_font_options_equal(), cairo_font_options_merge(), and
1357
 * cairo_font_options_hash() should be used to copy, check
1358
 * for equality, merge, or compute a hash value of
1359
 * #cairo_font_options_t objects.
3959 Serge 1360
 *
1361
 * Since: 1.0
1892 serge 1362
 **/
1363
typedef struct _cairo_font_options cairo_font_options_t;
1364
 
1365
cairo_public cairo_font_options_t *
1366
cairo_font_options_create (void);
1367
 
1368
cairo_public cairo_font_options_t *
1369
cairo_font_options_copy (const cairo_font_options_t *original);
1370
 
1371
cairo_public void
1372
cairo_font_options_destroy (cairo_font_options_t *options);
1373
 
1374
cairo_public cairo_status_t
1375
cairo_font_options_status (cairo_font_options_t *options);
1376
 
1377
cairo_public void
1378
cairo_font_options_merge (cairo_font_options_t       *options,
1379
			  const cairo_font_options_t *other);
1380
cairo_public cairo_bool_t
1381
cairo_font_options_equal (const cairo_font_options_t *options,
1382
			  const cairo_font_options_t *other);
1383
 
1384
cairo_public unsigned long
1385
cairo_font_options_hash (const cairo_font_options_t *options);
1386
 
1387
cairo_public void
1388
cairo_font_options_set_antialias (cairo_font_options_t *options,
1389
				  cairo_antialias_t     antialias);
1390
cairo_public cairo_antialias_t
1391
cairo_font_options_get_antialias (const cairo_font_options_t *options);
1392
 
1393
cairo_public void
1394
cairo_font_options_set_subpixel_order (cairo_font_options_t   *options,
1395
				       cairo_subpixel_order_t  subpixel_order);
1396
cairo_public cairo_subpixel_order_t
1397
cairo_font_options_get_subpixel_order (const cairo_font_options_t *options);
1398
 
1399
cairo_public void
1400
cairo_font_options_set_hint_style (cairo_font_options_t *options,
1401
				   cairo_hint_style_t     hint_style);
1402
cairo_public cairo_hint_style_t
1403
cairo_font_options_get_hint_style (const cairo_font_options_t *options);
1404
 
1405
cairo_public void
1406
cairo_font_options_set_hint_metrics (cairo_font_options_t *options,
1407
				     cairo_hint_metrics_t  hint_metrics);
1408
cairo_public cairo_hint_metrics_t
1409
cairo_font_options_get_hint_metrics (const cairo_font_options_t *options);
1410
 
1411
/* This interface is for dealing with text as text, not caring about the
1412
   font object inside the the cairo_t. */
1413
 
1414
cairo_public void
1415
cairo_select_font_face (cairo_t              *cr,
1416
			const char           *family,
1417
			cairo_font_slant_t   slant,
1418
			cairo_font_weight_t  weight);
1419
 
1420
cairo_public void
1421
cairo_set_font_size (cairo_t *cr, double size);
1422
 
1423
cairo_public void
1424
cairo_set_font_matrix (cairo_t		    *cr,
1425
		       const cairo_matrix_t *matrix);
1426
 
1427
cairo_public void
1428
cairo_get_font_matrix (cairo_t *cr,
1429
		       cairo_matrix_t *matrix);
1430
 
1431
cairo_public void
1432
cairo_set_font_options (cairo_t                    *cr,
1433
			const cairo_font_options_t *options);
1434
 
1435
cairo_public void
1436
cairo_get_font_options (cairo_t              *cr,
1437
			cairo_font_options_t *options);
1438
 
1439
cairo_public void
1440
cairo_set_font_face (cairo_t *cr, cairo_font_face_t *font_face);
1441
 
1442
cairo_public cairo_font_face_t *
1443
cairo_get_font_face (cairo_t *cr);
1444
 
1445
cairo_public void
1446
cairo_set_scaled_font (cairo_t                   *cr,
1447
		       const cairo_scaled_font_t *scaled_font);
1448
 
1449
cairo_public cairo_scaled_font_t *
1450
cairo_get_scaled_font (cairo_t *cr);
1451
 
1452
cairo_public void
1453
cairo_show_text (cairo_t *cr, const char *utf8);
1454
 
1455
cairo_public void
1456
cairo_show_glyphs (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs);
1457
 
1458
cairo_public void
1459
cairo_show_text_glyphs (cairo_t			   *cr,
1460
			const char		   *utf8,
1461
			int			    utf8_len,
1462
			const cairo_glyph_t	   *glyphs,
1463
			int			    num_glyphs,
1464
			const cairo_text_cluster_t *clusters,
1465
			int			    num_clusters,
1466
			cairo_text_cluster_flags_t  cluster_flags);
1467
 
1468
cairo_public void
1469
cairo_text_path  (cairo_t *cr, const char *utf8);
1470
 
1471
cairo_public void
1472
cairo_glyph_path (cairo_t *cr, const cairo_glyph_t *glyphs, int num_glyphs);
1473
 
1474
cairo_public void
1475
cairo_text_extents (cairo_t              *cr,
1476
		    const char    	 *utf8,
1477
		    cairo_text_extents_t *extents);
1478
 
1479
cairo_public void
1480
cairo_glyph_extents (cairo_t               *cr,
1481
		     const cairo_glyph_t   *glyphs,
1482
		     int                   num_glyphs,
1483
		     cairo_text_extents_t  *extents);
1484
 
1485
cairo_public void
1486
cairo_font_extents (cairo_t              *cr,
1487
		    cairo_font_extents_t *extents);
1488
 
1489
/* Generic identifier for a font style */
1490
 
1491
cairo_public cairo_font_face_t *
1492
cairo_font_face_reference (cairo_font_face_t *font_face);
1493
 
1494
cairo_public void
1495
cairo_font_face_destroy (cairo_font_face_t *font_face);
1496
 
1497
cairo_public unsigned int
1498
cairo_font_face_get_reference_count (cairo_font_face_t *font_face);
1499
 
1500
cairo_public cairo_status_t
1501
cairo_font_face_status (cairo_font_face_t *font_face);
1502
 
1503
 
1504
/**
1505
 * cairo_font_type_t:
3959 Serge 1506
 * @CAIRO_FONT_TYPE_TOY: The font was created using cairo's toy font api (Since: 1.2)
1507
 * @CAIRO_FONT_TYPE_FT: The font is of type FreeType (Since: 1.2)
1508
 * @CAIRO_FONT_TYPE_WIN32: The font is of type Win32 (Since: 1.2)
1509
 * @CAIRO_FONT_TYPE_QUARTZ: The font is of type Quartz (Since: 1.6, in 1.2 and
1510
 * 1.4 it was named CAIRO_FONT_TYPE_ATSUI)
1892 serge 1511
 * @CAIRO_FONT_TYPE_USER: The font was create using cairo's user font api (Since: 1.8)
1512
 *
1513
 * #cairo_font_type_t is used to describe the type of a given font
1514
 * face or scaled font. The font types are also known as "font
1515
 * backends" within cairo.
1516
 *
1517
 * The type of a font face is determined by the function used to
1518
 * create it, which will generally be of the form
3959 Serge 1519
 * cairo_type_font_face_create().
1520
 * The font face type can be queried with cairo_font_face_get_type()
1892 serge 1521
 *
1522
 * The various #cairo_font_face_t functions can be used with a font face
1523
 * of any type.
1524
 *
1525
 * The type of a scaled font is determined by the type of the font
1526
 * face passed to cairo_scaled_font_create(). The scaled font type can
1527
 * be queried with cairo_scaled_font_get_type()
1528
 *
1529
 * The various #cairo_scaled_font_t functions can be used with scaled
1530
 * fonts of any type, but some font backends also provide
1531
 * type-specific functions that must only be called with a scaled font
1532
 * of the appropriate type. These functions have names that begin with
3959 Serge 1533
 * cairo_type_scaled_font()
1534
 * such as cairo_ft_scaled_font_lock_face().
1892 serge 1535
 *
1536
 * The behavior of calling a type-specific function with a scaled font
1537
 * of the wrong type is undefined.
1538
 *
1539
 * New entries may be added in future versions.
1540
 *
1541
 * Since: 1.2
1542
 **/
1543
typedef enum _cairo_font_type {
1544
    CAIRO_FONT_TYPE_TOY,
1545
    CAIRO_FONT_TYPE_FT,
1546
    CAIRO_FONT_TYPE_WIN32,
1547
    CAIRO_FONT_TYPE_QUARTZ,
1548
    CAIRO_FONT_TYPE_USER
1549
} cairo_font_type_t;
1550
 
1551
cairo_public cairo_font_type_t
1552
cairo_font_face_get_type (cairo_font_face_t *font_face);
1553
 
1554
cairo_public void *
1555
cairo_font_face_get_user_data (cairo_font_face_t	   *font_face,
1556
			       const cairo_user_data_key_t *key);
1557
 
1558
cairo_public cairo_status_t
1559
cairo_font_face_set_user_data (cairo_font_face_t	   *font_face,
1560
			       const cairo_user_data_key_t *key,
1561
			       void			   *user_data,
1562
			       cairo_destroy_func_t	    destroy);
1563
 
1564
/* Portable interface to general font features. */
1565
 
1566
cairo_public cairo_scaled_font_t *
1567
cairo_scaled_font_create (cairo_font_face_t          *font_face,
1568
			  const cairo_matrix_t       *font_matrix,
1569
			  const cairo_matrix_t       *ctm,
1570
			  const cairo_font_options_t *options);
1571
 
1572
cairo_public cairo_scaled_font_t *
1573
cairo_scaled_font_reference (cairo_scaled_font_t *scaled_font);
1574
 
1575
cairo_public void
1576
cairo_scaled_font_destroy (cairo_scaled_font_t *scaled_font);
1577
 
1578
cairo_public unsigned int
1579
cairo_scaled_font_get_reference_count (cairo_scaled_font_t *scaled_font);
1580
 
1581
cairo_public cairo_status_t
1582
cairo_scaled_font_status (cairo_scaled_font_t *scaled_font);
1583
 
1584
cairo_public cairo_font_type_t
1585
cairo_scaled_font_get_type (cairo_scaled_font_t *scaled_font);
1586
 
1587
cairo_public void *
1588
cairo_scaled_font_get_user_data (cairo_scaled_font_t         *scaled_font,
1589
				 const cairo_user_data_key_t *key);
1590
 
1591
cairo_public cairo_status_t
1592
cairo_scaled_font_set_user_data (cairo_scaled_font_t         *scaled_font,
1593
				 const cairo_user_data_key_t *key,
1594
				 void                        *user_data,
1595
				 cairo_destroy_func_t	      destroy);
1596
 
1597
cairo_public void
1598
cairo_scaled_font_extents (cairo_scaled_font_t  *scaled_font,
1599
			   cairo_font_extents_t *extents);
1600
 
1601
cairo_public void
1602
cairo_scaled_font_text_extents (cairo_scaled_font_t  *scaled_font,
1603
				const char  	     *utf8,
1604
				cairo_text_extents_t *extents);
1605
 
1606
cairo_public void
1607
cairo_scaled_font_glyph_extents (cairo_scaled_font_t   *scaled_font,
1608
				 const cairo_glyph_t   *glyphs,
1609
				 int                   num_glyphs,
1610
				 cairo_text_extents_t  *extents);
1611
 
1612
cairo_public cairo_status_t
1613
cairo_scaled_font_text_to_glyphs (cairo_scaled_font_t        *scaled_font,
1614
				  double		      x,
1615
				  double		      y,
1616
				  const char	             *utf8,
1617
				  int		              utf8_len,
1618
				  cairo_glyph_t	            **glyphs,
1619
				  int		             *num_glyphs,
1620
				  cairo_text_cluster_t      **clusters,
1621
				  int		             *num_clusters,
1622
				  cairo_text_cluster_flags_t *cluster_flags);
1623
 
1624
cairo_public cairo_font_face_t *
1625
cairo_scaled_font_get_font_face (cairo_scaled_font_t *scaled_font);
1626
 
1627
cairo_public void
1628
cairo_scaled_font_get_font_matrix (cairo_scaled_font_t	*scaled_font,
1629
				   cairo_matrix_t	*font_matrix);
1630
 
1631
cairo_public void
1632
cairo_scaled_font_get_ctm (cairo_scaled_font_t	*scaled_font,
1633
			   cairo_matrix_t	*ctm);
1634
 
1635
cairo_public void
1636
cairo_scaled_font_get_scale_matrix (cairo_scaled_font_t	*scaled_font,
1637
				    cairo_matrix_t	*scale_matrix);
1638
 
1639
cairo_public void
1640
cairo_scaled_font_get_font_options (cairo_scaled_font_t		*scaled_font,
1641
				    cairo_font_options_t	*options);
1642
 
1643
 
1644
/* Toy fonts */
1645
 
1646
cairo_public cairo_font_face_t *
1647
cairo_toy_font_face_create (const char           *family,
1648
			    cairo_font_slant_t    slant,
1649
			    cairo_font_weight_t   weight);
1650
 
1651
cairo_public const char *
1652
cairo_toy_font_face_get_family (cairo_font_face_t *font_face);
1653
 
1654
cairo_public cairo_font_slant_t
1655
cairo_toy_font_face_get_slant (cairo_font_face_t *font_face);
1656
 
1657
cairo_public cairo_font_weight_t
1658
cairo_toy_font_face_get_weight (cairo_font_face_t *font_face);
1659
 
1660
 
1661
/* User fonts */
1662
 
1663
cairo_public cairo_font_face_t *
1664
cairo_user_font_face_create (void);
1665
 
1666
/* User-font method signatures */
1667
 
1668
/**
1669
 * cairo_user_scaled_font_init_func_t:
1670
 * @scaled_font: the scaled-font being created
1671
 * @cr: a cairo context, in font space
1672
 * @extents: font extents to fill in, in font space
1673
 *
1674
 * #cairo_user_scaled_font_init_func_t is the type of function which is
1675
 * called when a scaled-font needs to be created for a user font-face.
1676
 *
1677
 * The cairo context @cr is not used by the caller, but is prepared in font
1678
 * space, similar to what the cairo contexts passed to the render_glyph
1679
 * method will look like.  The callback can use this context for extents
1680
 * computation for example.  After the callback is called, @cr is checked
1681
 * for any error status.
1682
 *
1683
 * The @extents argument is where the user font sets the font extents for
1684
 * @scaled_font.  It is in font space, which means that for most cases its
1685
 * ascent and descent members should add to 1.0.  @extents is preset to
1686
 * hold a value of 1.0 for ascent, height, and max_x_advance, and 0.0 for
1687
 * descent and max_y_advance members.
1688
 *
1689
 * The callback is optional.  If not set, default font extents as described
1690
 * in the previous paragraph will be used.
1691
 *
1692
 * Note that @scaled_font is not fully initialized at this
1693
 * point and trying to use it for text operations in the callback will result
1694
 * in deadlock.
1695
 *
1696
 * Returns: %CAIRO_STATUS_SUCCESS upon success, or an error status on error.
1697
 *
1698
 * Since: 1.8
1699
 **/
1700
typedef cairo_status_t (*cairo_user_scaled_font_init_func_t) (cairo_scaled_font_t  *scaled_font,
1701
							      cairo_t              *cr,
1702
							      cairo_font_extents_t *extents);
1703
 
1704
/**
1705
 * cairo_user_scaled_font_render_glyph_func_t:
1706
 * @scaled_font: user scaled-font
1707
 * @glyph: glyph code to render
1708
 * @cr: cairo context to draw to, in font space
1709
 * @extents: glyph extents to fill in, in font space
1710
 *
1711
 * #cairo_user_scaled_font_render_glyph_func_t is the type of function which
1712
 * is called when a user scaled-font needs to render a glyph.
1713
 *
1714
 * The callback is mandatory, and expected to draw the glyph with code @glyph to
1715
 * the cairo context @cr.  @cr is prepared such that the glyph drawing is done in
1716
 * font space.  That is, the matrix set on @cr is the scale matrix of @scaled_font,
1717
 * The @extents argument is where the user font sets the font extents for
1718
 * @scaled_font.  However, if user prefers to draw in user space, they can
1719
 * achieve that by changing the matrix on @cr.  All cairo rendering operations
1720
 * to @cr are permitted, however, the result is undefined if any source other
1721
 * than the default source on @cr is used.  That means, glyph bitmaps should
1722
 * be rendered using cairo_mask() instead of cairo_paint().
1723
 *
1724
 * Other non-default settings on @cr include a font size of 1.0 (given that
1725
 * it is set up to be in font space), and font options corresponding to
1726
 * @scaled_font.
1727
 *
1728
 * The @extents argument is preset to have x_bearing,
1729
 * width, and y_advance of zero,
1730
 * y_bearing set to -font_extents.ascent,
1731
 * height to font_extents.ascent+font_extents.descent,
1732
 * and x_advance to font_extents.max_x_advance.
1733
 * The only field user needs to set in majority of cases is
1734
 * x_advance.
1735
 * If the width field is zero upon the callback returning
1736
 * (which is its preset value), the glyph extents are automatically computed
1737
 * based on the drawings done to @cr.  This is in most cases exactly what the
1738
 * desired behavior is.  However, if for any reason the callback sets the
1739
 * extents, it must be ink extents, and include the extents of all drawing
1740
 * done to @cr in the callback.
1741
 *
1742
 * Returns: %CAIRO_STATUS_SUCCESS upon success, or
1743
 * %CAIRO_STATUS_USER_FONT_ERROR or any other error status on error.
1744
 *
1745
 * Since: 1.8
1746
 **/
1747
typedef cairo_status_t (*cairo_user_scaled_font_render_glyph_func_t) (cairo_scaled_font_t  *scaled_font,
1748
								      unsigned long         glyph,
1749
								      cairo_t              *cr,
1750
								      cairo_text_extents_t *extents);
1751
 
1752
/**
1753
 * cairo_user_scaled_font_text_to_glyphs_func_t:
1754
 * @scaled_font: the scaled-font being created
1755
 * @utf8: a string of text encoded in UTF-8
1756
 * @utf8_len: length of @utf8 in bytes
1757
 * @glyphs: pointer to array of glyphs to fill, in font space
1758
 * @num_glyphs: pointer to number of glyphs
1759
 * @clusters: pointer to array of cluster mapping information to fill, or %NULL
1760
 * @num_clusters: pointer to number of clusters
1761
 * @cluster_flags: pointer to location to store cluster flags corresponding to the
1762
 *                 output @clusters
1763
 *
1764
 * #cairo_user_scaled_font_text_to_glyphs_func_t is the type of function which
1765
 * is called to convert input text to an array of glyphs.  This is used by the
1766
 * cairo_show_text() operation.
1767
 *
1768
 * Using this callback the user-font has full control on glyphs and their
1769
 * positions.  That means, it allows for features like ligatures and kerning,
1770
 * as well as complex shaping required for scripts like
1771
 * Arabic and Indic.
1772
 *
1773
 * The @num_glyphs argument is preset to the number of glyph entries available
1774
 * in the @glyphs buffer. If the @glyphs buffer is %NULL, the value of
1775
 * @num_glyphs will be zero.  If the provided glyph array is too short for
1776
 * the conversion (or for convenience), a new glyph array may be allocated
1777
 * using cairo_glyph_allocate() and placed in @glyphs.  Upon return,
1778
 * @num_glyphs should contain the number of generated glyphs.  If the value
1779
 * @glyphs points at has changed after the call, the caller will free the
3959 Serge 1780
 * allocated glyph array using cairo_glyph_free().  The caller will also free
1781
 * the original value of @glyphs, so the callback shouldn't do so.
1892 serge 1782
 * The callback should populate the glyph indices and positions (in font space)
1783
 * assuming that the text is to be shown at the origin.
1784
 *
1785
 * If @clusters is not %NULL, @num_clusters and @cluster_flags are also
1786
 * non-%NULL, and cluster mapping should be computed. The semantics of how
1787
 * cluster array allocation works is similar to the glyph array.  That is,
1788
 * if @clusters initially points to a non-%NULL value, that array may be used
1789
 * as a cluster buffer, and @num_clusters points to the number of cluster
1790
 * entries available there.  If the provided cluster array is too short for
1791
 * the conversion (or for convenience), a new cluster array may be allocated
3959 Serge 1792
 * using cairo_text_cluster_allocate() and placed in @clusters.  In this case,
1793
 * the original value of @clusters will still be freed by the caller.  Upon
1794
 * return, @num_clusters should contain the number of generated clusters.
1892 serge 1795
 * If the value @clusters points at has changed after the call, the caller
1796
 * will free the allocated cluster array using cairo_text_cluster_free().
1797
 *
1798
 * The callback is optional.  If @num_glyphs is negative upon
1799
 * the callback returning or if the return value
1800
 * is %CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED, the unicode_to_glyph callback
1801
 * is tried.  See #cairo_user_scaled_font_unicode_to_glyph_func_t.
1802
 *
1803
 * Note: While cairo does not impose any limitation on glyph indices,
1804
 * some applications may assume that a glyph index fits in a 16-bit
1805
 * unsigned integer.  As such, it is advised that user-fonts keep their
1806
 * glyphs in the 0 to 65535 range.  Furthermore, some applications may
1807
 * assume that glyph 0 is a special glyph-not-found glyph.  User-fonts
1808
 * are advised to use glyph 0 for such purposes and do not use that
1809
 * glyph value for other purposes.
1810
 *
1811
 * Returns: %CAIRO_STATUS_SUCCESS upon success,
1812
 * %CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED if fallback options should be tried,
1813
 * or %CAIRO_STATUS_USER_FONT_ERROR or any other error status on error.
1814
 *
1815
 * Since: 1.8
1816
 **/
1817
typedef cairo_status_t (*cairo_user_scaled_font_text_to_glyphs_func_t) (cairo_scaled_font_t        *scaled_font,
1818
									const char	           *utf8,
1819
									int		            utf8_len,
1820
									cairo_glyph_t	          **glyphs,
1821
									int		           *num_glyphs,
1822
									cairo_text_cluster_t      **clusters,
1823
									int		           *num_clusters,
1824
									cairo_text_cluster_flags_t *cluster_flags);
1825
 
1826
/**
1827
 * cairo_user_scaled_font_unicode_to_glyph_func_t:
1828
 * @scaled_font: the scaled-font being created
1829
 * @unicode: input unicode character code-point
1830
 * @glyph_index: output glyph index
1831
 *
1832
 * #cairo_user_scaled_font_unicode_to_glyph_func_t is the type of function which
1833
 * is called to convert an input Unicode character to a single glyph.
1834
 * This is used by the cairo_show_text() operation.
1835
 *
1836
 * This callback is used to provide the same functionality as the
1837
 * text_to_glyphs callback does (see #cairo_user_scaled_font_text_to_glyphs_func_t)
1838
 * but has much less control on the output,
1839
 * in exchange for increased ease of use.  The inherent assumption to using
1840
 * this callback is that each character maps to one glyph, and that the
1841
 * mapping is context independent.  It also assumes that glyphs are positioned
1842
 * according to their advance width.  These mean no ligatures, kerning, or
1843
 * complex scripts can be implemented using this callback.
1844
 *
1845
 * The callback is optional, and only used if text_to_glyphs callback is not
1846
 * set or fails to return glyphs.  If this callback is not set or if it returns
1847
 * %CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED, an identity mapping from Unicode
1848
 * code-points to glyph indices is assumed.
1849
 *
1850
 * Note: While cairo does not impose any limitation on glyph indices,
1851
 * some applications may assume that a glyph index fits in a 16-bit
1852
 * unsigned integer.  As such, it is advised that user-fonts keep their
1853
 * glyphs in the 0 to 65535 range.  Furthermore, some applications may
1854
 * assume that glyph 0 is a special glyph-not-found glyph.  User-fonts
1855
 * are advised to use glyph 0 for such purposes and do not use that
1856
 * glyph value for other purposes.
1857
 *
1858
 * Returns: %CAIRO_STATUS_SUCCESS upon success,
1859
 * %CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED if fallback options should be tried,
1860
 * or %CAIRO_STATUS_USER_FONT_ERROR or any other error status on error.
1861
 *
1862
 * Since: 1.8
1863
 **/
1864
typedef cairo_status_t (*cairo_user_scaled_font_unicode_to_glyph_func_t) (cairo_scaled_font_t *scaled_font,
1865
									  unsigned long        unicode,
1866
									  unsigned long       *glyph_index);
1867
 
1868
/* User-font method setters */
1869
 
1870
cairo_public void
1871
cairo_user_font_face_set_init_func (cairo_font_face_t                  *font_face,
1872
				    cairo_user_scaled_font_init_func_t  init_func);
1873
 
1874
cairo_public void
1875
cairo_user_font_face_set_render_glyph_func (cairo_font_face_t                          *font_face,
1876
					    cairo_user_scaled_font_render_glyph_func_t  render_glyph_func);
1877
 
1878
cairo_public void
1879
cairo_user_font_face_set_text_to_glyphs_func (cairo_font_face_t                            *font_face,
1880
					      cairo_user_scaled_font_text_to_glyphs_func_t  text_to_glyphs_func);
1881
 
1882
cairo_public void
1883
cairo_user_font_face_set_unicode_to_glyph_func (cairo_font_face_t                              *font_face,
1884
					        cairo_user_scaled_font_unicode_to_glyph_func_t  unicode_to_glyph_func);
1885
 
1886
/* User-font method getters */
1887
 
1888
cairo_public cairo_user_scaled_font_init_func_t
1889
cairo_user_font_face_get_init_func (cairo_font_face_t *font_face);
1890
 
1891
cairo_public cairo_user_scaled_font_render_glyph_func_t
1892
cairo_user_font_face_get_render_glyph_func (cairo_font_face_t *font_face);
1893
 
1894
cairo_public cairo_user_scaled_font_text_to_glyphs_func_t
1895
cairo_user_font_face_get_text_to_glyphs_func (cairo_font_face_t *font_face);
1896
 
1897
cairo_public cairo_user_scaled_font_unicode_to_glyph_func_t
1898
cairo_user_font_face_get_unicode_to_glyph_func (cairo_font_face_t *font_face);
1899
 
1900
 
1901
/* Query functions */
1902
 
1903
cairo_public cairo_operator_t
1904
cairo_get_operator (cairo_t *cr);
1905
 
1906
cairo_public cairo_pattern_t *
1907
cairo_get_source (cairo_t *cr);
1908
 
1909
cairo_public double
1910
cairo_get_tolerance (cairo_t *cr);
1911
 
1912
cairo_public cairo_antialias_t
1913
cairo_get_antialias (cairo_t *cr);
1914
 
1915
cairo_public cairo_bool_t
1916
cairo_has_current_point (cairo_t *cr);
1917
 
1918
cairo_public void
1919
cairo_get_current_point (cairo_t *cr, double *x, double *y);
1920
 
1921
cairo_public cairo_fill_rule_t
1922
cairo_get_fill_rule (cairo_t *cr);
1923
 
1924
cairo_public double
1925
cairo_get_line_width (cairo_t *cr);
1926
 
1927
cairo_public cairo_line_cap_t
1928
cairo_get_line_cap (cairo_t *cr);
1929
 
1930
cairo_public cairo_line_join_t
1931
cairo_get_line_join (cairo_t *cr);
1932
 
1933
cairo_public double
1934
cairo_get_miter_limit (cairo_t *cr);
1935
 
1936
cairo_public int
1937
cairo_get_dash_count (cairo_t *cr);
1938
 
1939
cairo_public void
1940
cairo_get_dash (cairo_t *cr, double *dashes, double *offset);
1941
 
1942
cairo_public void
1943
cairo_get_matrix (cairo_t *cr, cairo_matrix_t *matrix);
1944
 
1945
cairo_public cairo_surface_t *
1946
cairo_get_target (cairo_t *cr);
1947
 
1948
cairo_public cairo_surface_t *
1949
cairo_get_group_target (cairo_t *cr);
1950
 
1951
/**
1952
 * cairo_path_data_type_t:
3959 Serge 1953
 * @CAIRO_PATH_MOVE_TO: A move-to operation, since 1.0
1954
 * @CAIRO_PATH_LINE_TO: A line-to operation, since 1.0
1955
 * @CAIRO_PATH_CURVE_TO: A curve-to operation, since 1.0
1956
 * @CAIRO_PATH_CLOSE_PATH: A close-path operation, since 1.0
1892 serge 1957
 *
1958
 * #cairo_path_data_t is used to describe the type of one portion
1959
 * of a path when represented as a #cairo_path_t.
1960
 * See #cairo_path_data_t for details.
3959 Serge 1961
 *
1962
 * Since: 1.0
1892 serge 1963
 **/
1964
typedef enum _cairo_path_data_type {
1965
    CAIRO_PATH_MOVE_TO,
1966
    CAIRO_PATH_LINE_TO,
1967
    CAIRO_PATH_CURVE_TO,
1968
    CAIRO_PATH_CLOSE_PATH
1969
} cairo_path_data_type_t;
1970
 
1971
/**
1972
 * cairo_path_data_t:
1973
 *
1974
 * #cairo_path_data_t is used to represent the path data inside a
1975
 * #cairo_path_t.
1976
 *
1977
 * The data structure is designed to try to balance the demands of
1978
 * efficiency and ease-of-use. A path is represented as an array of
1979
 * #cairo_path_data_t, which is a union of headers and points.
1980
 *
1981
 * Each portion of the path is represented by one or more elements in
1982
 * the array, (one header followed by 0 or more points). The length
1983
 * value of the header is the number of array elements for the current
1984
 * portion including the header, (ie. length == 1 + # of points), and
1985
 * where the number of points for each element type is as follows:
1986
 *
1987
 * 
1988
 *     %CAIRO_PATH_MOVE_TO:     1 point
1989
 *     %CAIRO_PATH_LINE_TO:     1 point
1990
 *     %CAIRO_PATH_CURVE_TO:    3 points
1991
 *     %CAIRO_PATH_CLOSE_PATH:  0 points
1992
 * 
1993
 *
1994
 * The semantics and ordering of the coordinate values are consistent
1995
 * with cairo_move_to(), cairo_line_to(), cairo_curve_to(), and
1996
 * cairo_close_path().
1997
 *
1998
 * Here is sample code for iterating through a #cairo_path_t:
1999
 *
2000
 * 
2001
 *      int i;
2002
 *      cairo_path_t *path;
2003
 *      cairo_path_data_t *data;
2004
 *  
2005
 *      path = cairo_copy_path (cr);
2006
 *  
2007
 *      for (i=0; i < path->num_data; i += path->data[i].header.length) {
2008
 *          data = &path->data[i];
2009
 *          switch (data->header.type) {
2010
 *          case CAIRO_PATH_MOVE_TO:
2011
 *              do_move_to_things (data[1].point.x, data[1].point.y);
2012
 *              break;
2013
 *          case CAIRO_PATH_LINE_TO:
2014
 *              do_line_to_things (data[1].point.x, data[1].point.y);
2015
 *              break;
2016
 *          case CAIRO_PATH_CURVE_TO:
2017
 *              do_curve_to_things (data[1].point.x, data[1].point.y,
2018
 *                                  data[2].point.x, data[2].point.y,
2019
 *                                  data[3].point.x, data[3].point.y);
2020
 *              break;
2021
 *          case CAIRO_PATH_CLOSE_PATH:
2022
 *              do_close_path_things ();
2023
 *              break;
2024
 *          }
2025
 *      }
2026
 *      cairo_path_destroy (path);
2027
 * 
2028
 *
2029
 * As of cairo 1.4, cairo does not mind if there are more elements in
2030
 * a portion of the path than needed.  Such elements can be used by
2031
 * users of the cairo API to hold extra values in the path data
2032
 * structure.  For this reason, it is recommended that applications
2033
 * always use data->header.length to
2034
 * iterate over the path data, instead of hardcoding the number of
2035
 * elements for each element type.
3959 Serge 2036
 *
2037
 * Since: 1.0
1892 serge 2038
 **/
2039
typedef union _cairo_path_data_t cairo_path_data_t;
2040
union _cairo_path_data_t {
2041
    struct {
2042
	cairo_path_data_type_t type;
2043
	int length;
2044
    } header;
2045
    struct {
2046
	double x, y;
2047
    } point;
2048
};
2049
 
2050
/**
2051
 * cairo_path_t:
2052
 * @status: the current error status
2053
 * @data: the elements in the path
2054
 * @num_data: the number of elements in the data array
2055
 *
2056
 * A data structure for holding a path. This data structure serves as
2057
 * the return value for cairo_copy_path() and
2058
 * cairo_copy_path_flat() as well the input value for
2059
 * cairo_append_path().
2060
 *
2061
 * See #cairo_path_data_t for hints on how to iterate over the
2062
 * actual data within the path.
2063
 *
2064
 * The num_data member gives the number of elements in the data
2065
 * array. This number is larger than the number of independent path
2066
 * portions (defined in #cairo_path_data_type_t), since the data
2067
 * includes both headers and coordinates for each portion.
3959 Serge 2068
 *
2069
 * Since: 1.0
1892 serge 2070
 **/
2071
typedef struct cairo_path {
2072
    cairo_status_t status;
2073
    cairo_path_data_t *data;
2074
    int num_data;
2075
} cairo_path_t;
2076
 
2077
cairo_public cairo_path_t *
2078
cairo_copy_path (cairo_t *cr);
2079
 
2080
cairo_public cairo_path_t *
2081
cairo_copy_path_flat (cairo_t *cr);
2082
 
2083
cairo_public void
2084
cairo_append_path (cairo_t		*cr,
2085
		   const cairo_path_t	*path);
2086
 
2087
cairo_public void
2088
cairo_path_destroy (cairo_path_t *path);
2089
 
2090
/* Error status queries */
2091
 
2092
cairo_public cairo_status_t
2093
cairo_status (cairo_t *cr);
2094
 
2095
cairo_public const char *
2096
cairo_status_to_string (cairo_status_t status);
2097
 
2098
/* Backend device manipulation */
2099
 
2100
cairo_public cairo_device_t *
2101
cairo_device_reference (cairo_device_t *device);
2102
 
2103
/**
2104
 * cairo_device_type_t:
3959 Serge 2105
 * @CAIRO_DEVICE_TYPE_DRM: The device is of type Direct Render Manager, since 1.10
2106
 * @CAIRO_DEVICE_TYPE_GL: The device is of type OpenGL, since 1.10
2107
 * @CAIRO_DEVICE_TYPE_SCRIPT: The device is of type script, since 1.10
2108
 * @CAIRO_DEVICE_TYPE_XCB: The device is of type xcb, since 1.10
2109
 * @CAIRO_DEVICE_TYPE_XLIB: The device is of type xlib, since 1.10
2110
 * @CAIRO_DEVICE_TYPE_XML: The device is of type XML, since 1.10
2111
 * @CAIRO_DEVICE_TYPE_COGL: The device is of type cogl, since 1.12
2112
 * @CAIRO_DEVICE_TYPE_WIN32: The device is of type win32, since 1.12
2113
 * @CAIRO_DEVICE_TYPE_INVALID: The device is invalid, since 1.10
1892 serge 2114
 *
2115
 * #cairo_device_type_t is used to describe the type of a given
2116
 * device. The devices types are also known as "backends" within cairo.
2117
 *
2118
 * The device type can be queried with cairo_device_get_type()
2119
 *
3959 Serge 2120
 * The various #cairo_device_t functions can be used with devices of
1892 serge 2121
 * any type, but some backends also provide type-specific functions
2122
 * that must only be called with a device of the appropriate
2123
 * type. These functions have names that begin with
3959 Serge 2124
 * cairo_type_device such as
2125
 * cairo_xcb_device_debug_cap_xrender_version().
1892 serge 2126
 *
3959 Serge 2127
 * The behavior of calling a type-specific function with a device of
1892 serge 2128
 * the wrong type is undefined.
2129
 *
2130
 * New entries may be added in future versions.
2131
 *
2132
 * Since: 1.10
2133
 **/
2134
typedef enum _cairo_device_type {
2135
    CAIRO_DEVICE_TYPE_DRM,
2136
    CAIRO_DEVICE_TYPE_GL,
2137
    CAIRO_DEVICE_TYPE_SCRIPT,
2138
    CAIRO_DEVICE_TYPE_XCB,
2139
    CAIRO_DEVICE_TYPE_XLIB,
3959 Serge 2140
    CAIRO_DEVICE_TYPE_XML,
2141
    CAIRO_DEVICE_TYPE_COGL,
2142
    CAIRO_DEVICE_TYPE_WIN32,
2143
 
2144
    CAIRO_DEVICE_TYPE_INVALID = -1
1892 serge 2145
} cairo_device_type_t;
2146
 
2147
cairo_public cairo_device_type_t
2148
cairo_device_get_type (cairo_device_t *device);
2149
 
2150
cairo_public cairo_status_t
2151
cairo_device_status (cairo_device_t *device);
2152
 
2153
cairo_public cairo_status_t
2154
cairo_device_acquire (cairo_device_t *device);
2155
 
2156
cairo_public void
2157
cairo_device_release (cairo_device_t *device);
2158
 
2159
cairo_public void
2160
cairo_device_flush (cairo_device_t *device);
2161
 
2162
cairo_public void
2163
cairo_device_finish (cairo_device_t *device);
2164
 
2165
cairo_public void
2166
cairo_device_destroy (cairo_device_t *device);
2167
 
2168
cairo_public unsigned int
2169
cairo_device_get_reference_count (cairo_device_t *device);
2170
 
2171
cairo_public void *
2172
cairo_device_get_user_data (cairo_device_t		 *device,
2173
			    const cairo_user_data_key_t *key);
2174
 
2175
cairo_public cairo_status_t
2176
cairo_device_set_user_data (cairo_device_t		 *device,
2177
			    const cairo_user_data_key_t *key,
2178
			    void			 *user_data,
2179
			    cairo_destroy_func_t	  destroy);
2180
 
2181
 
2182
/* Surface manipulation */
2183
 
2184
cairo_public cairo_surface_t *
2185
cairo_surface_create_similar (cairo_surface_t  *other,
2186
			      cairo_content_t	content,
2187
			      int		width,
2188
			      int		height);
2189
 
2190
cairo_public cairo_surface_t *
3959 Serge 2191
cairo_surface_create_similar_image (cairo_surface_t  *other,
2192
				    cairo_format_t    format,
2193
				    int		width,
2194
				    int		height);
2195
 
2196
cairo_public cairo_surface_t *
2197
cairo_surface_map_to_image (cairo_surface_t  *surface,
2198
			    const cairo_rectangle_int_t *extents);
2199
 
2200
cairo_public void
2201
cairo_surface_unmap_image (cairo_surface_t *surface,
2202
			   cairo_surface_t *image);
2203
 
2204
cairo_public cairo_surface_t *
1892 serge 2205
cairo_surface_create_for_rectangle (cairo_surface_t	*target,
2206
                                    double		 x,
2207
                                    double		 y,
2208
                                    double		 width,
2209
                                    double		 height);
2210
 
3959 Serge 2211
typedef enum {
2212
	CAIRO_SURFACE_OBSERVER_NORMAL = 0,
2213
	CAIRO_SURFACE_OBSERVER_RECORD_OPERATIONS = 0x1
2214
} cairo_surface_observer_mode_t;
2215
 
1892 serge 2216
cairo_public cairo_surface_t *
3959 Serge 2217
cairo_surface_create_observer (cairo_surface_t *target,
2218
			       cairo_surface_observer_mode_t mode);
2219
 
2220
typedef void (*cairo_surface_observer_callback_t) (cairo_surface_t *observer,
2221
						   cairo_surface_t *target,
2222
						   void *data);
2223
 
2224
cairo_public cairo_status_t
2225
cairo_surface_observer_add_paint_callback (cairo_surface_t *abstract_surface,
2226
					   cairo_surface_observer_callback_t func,
2227
					   void *data);
2228
 
2229
cairo_public cairo_status_t
2230
cairo_surface_observer_add_mask_callback (cairo_surface_t *abstract_surface,
2231
					  cairo_surface_observer_callback_t func,
2232
					  void *data);
2233
 
2234
cairo_public cairo_status_t
2235
cairo_surface_observer_add_fill_callback (cairo_surface_t *abstract_surface,
2236
					  cairo_surface_observer_callback_t func,
2237
					  void *data);
2238
 
2239
cairo_public cairo_status_t
2240
cairo_surface_observer_add_stroke_callback (cairo_surface_t *abstract_surface,
2241
					    cairo_surface_observer_callback_t func,
2242
					    void *data);
2243
 
2244
cairo_public cairo_status_t
2245
cairo_surface_observer_add_glyphs_callback (cairo_surface_t *abstract_surface,
2246
					    cairo_surface_observer_callback_t func,
2247
					    void *data);
2248
 
2249
cairo_public cairo_status_t
2250
cairo_surface_observer_add_flush_callback (cairo_surface_t *abstract_surface,
2251
					   cairo_surface_observer_callback_t func,
2252
					   void *data);
2253
 
2254
cairo_public cairo_status_t
2255
cairo_surface_observer_add_finish_callback (cairo_surface_t *abstract_surface,
2256
					    cairo_surface_observer_callback_t func,
2257
					    void *data);
2258
 
2259
cairo_public cairo_status_t
2260
cairo_surface_observer_print (cairo_surface_t *surface,
2261
			      cairo_write_func_t write_func,
2262
			      void *closure);
2263
cairo_public double
2264
cairo_surface_observer_elapsed (cairo_surface_t *surface);
2265
 
2266
cairo_public cairo_status_t
2267
cairo_device_observer_print (cairo_device_t *device,
2268
			     cairo_write_func_t write_func,
2269
			     void *closure);
2270
 
2271
cairo_public double
2272
cairo_device_observer_elapsed (cairo_device_t *device);
2273
 
2274
cairo_public double
2275
cairo_device_observer_paint_elapsed (cairo_device_t *device);
2276
 
2277
cairo_public double
2278
cairo_device_observer_mask_elapsed (cairo_device_t *device);
2279
 
2280
cairo_public double
2281
cairo_device_observer_fill_elapsed (cairo_device_t *device);
2282
 
2283
cairo_public double
2284
cairo_device_observer_stroke_elapsed (cairo_device_t *device);
2285
 
2286
cairo_public double
2287
cairo_device_observer_glyphs_elapsed (cairo_device_t *device);
2288
 
2289
cairo_public cairo_surface_t *
1892 serge 2290
cairo_surface_reference (cairo_surface_t *surface);
2291
 
2292
cairo_public void
2293
cairo_surface_finish (cairo_surface_t *surface);
2294
 
2295
cairo_public void
2296
cairo_surface_destroy (cairo_surface_t *surface);
2297
 
2298
cairo_public cairo_device_t *
2299
cairo_surface_get_device (cairo_surface_t *surface);
2300
 
2301
cairo_public unsigned int
2302
cairo_surface_get_reference_count (cairo_surface_t *surface);
2303
 
2304
cairo_public cairo_status_t
2305
cairo_surface_status (cairo_surface_t *surface);
2306
 
2307
/**
2308
 * cairo_surface_type_t:
3959 Serge 2309
 * @CAIRO_SURFACE_TYPE_IMAGE: The surface is of type image, since 1.2
2310
 * @CAIRO_SURFACE_TYPE_PDF: The surface is of type pdf, since 1.2
2311
 * @CAIRO_SURFACE_TYPE_PS: The surface is of type ps, since 1.2
2312
 * @CAIRO_SURFACE_TYPE_XLIB: The surface is of type xlib, since 1.2
2313
 * @CAIRO_SURFACE_TYPE_XCB: The surface is of type xcb, since 1.2
2314
 * @CAIRO_SURFACE_TYPE_GLITZ: The surface is of type glitz, since 1.2
2315
 * @CAIRO_SURFACE_TYPE_QUARTZ: The surface is of type quartz, since 1.2
2316
 * @CAIRO_SURFACE_TYPE_WIN32: The surface is of type win32, since 1.2
2317
 * @CAIRO_SURFACE_TYPE_BEOS: The surface is of type beos, since 1.2
2318
 * @CAIRO_SURFACE_TYPE_DIRECTFB: The surface is of type directfb, since 1.2
2319
 * @CAIRO_SURFACE_TYPE_SVG: The surface is of type svg, since 1.2
2320
 * @CAIRO_SURFACE_TYPE_OS2: The surface is of type os2, since 1.4
2321
 * @CAIRO_SURFACE_TYPE_WIN32_PRINTING: The surface is a win32 printing surface, since 1.6
2322
 * @CAIRO_SURFACE_TYPE_QUARTZ_IMAGE: The surface is of type quartz_image, since 1.6
1892 serge 2323
 * @CAIRO_SURFACE_TYPE_SCRIPT: The surface is of type script, since 1.10
2324
 * @CAIRO_SURFACE_TYPE_QT: The surface is of type Qt, since 1.10
2325
 * @CAIRO_SURFACE_TYPE_RECORDING: The surface is of type recording, since 1.10
2326
 * @CAIRO_SURFACE_TYPE_VG: The surface is a OpenVG surface, since 1.10
2327
 * @CAIRO_SURFACE_TYPE_GL: The surface is of type OpenGL, since 1.10
2328
 * @CAIRO_SURFACE_TYPE_DRM: The surface is of type Direct Render Manager, since 1.10
2329
 * @CAIRO_SURFACE_TYPE_TEE: The surface is of type 'tee' (a multiplexing surface), since 1.10
2330
 * @CAIRO_SURFACE_TYPE_XML: The surface is of type XML (for debugging), since 1.10
2331
 * @CAIRO_SURFACE_TYPE_SKIA: The surface is of type Skia, since 1.10
2332
 * @CAIRO_SURFACE_TYPE_SUBSURFACE: The surface is a subsurface created with
2333
 *   cairo_surface_create_for_rectangle(), since 1.10
3959 Serge 2334
 * @CAIRO_SURFACE_TYPE_COGL: This surface is of type Cogl, since 1.12
1892 serge 2335
 *
2336
 * #cairo_surface_type_t is used to describe the type of a given
2337
 * surface. The surface types are also known as "backends" or "surface
2338
 * backends" within cairo.
2339
 *
2340
 * The type of a surface is determined by the function used to create
3959 Serge 2341
 * it, which will generally be of the form
2342
 * cairo_type_surface_create(),
1892 serge 2343
 * (though see cairo_surface_create_similar() as well).
2344
 *
2345
 * The surface type can be queried with cairo_surface_get_type()
2346
 *
2347
 * The various #cairo_surface_t functions can be used with surfaces of
2348
 * any type, but some backends also provide type-specific functions
2349
 * that must only be called with a surface of the appropriate
2350
 * type. These functions have names that begin with
3959 Serge 2351
 * cairo_type_surface such as cairo_image_surface_get_width().
1892 serge 2352
 *
2353
 * The behavior of calling a type-specific function with a surface of
2354
 * the wrong type is undefined.
2355
 *
2356
 * New entries may be added in future versions.
2357
 *
2358
 * Since: 1.2
2359
 **/
2360
typedef enum _cairo_surface_type {
2361
    CAIRO_SURFACE_TYPE_IMAGE,
2362
    CAIRO_SURFACE_TYPE_PDF,
2363
    CAIRO_SURFACE_TYPE_PS,
2364
    CAIRO_SURFACE_TYPE_XLIB,
2365
    CAIRO_SURFACE_TYPE_XCB,
2366
    CAIRO_SURFACE_TYPE_GLITZ,
2367
    CAIRO_SURFACE_TYPE_QUARTZ,
2368
    CAIRO_SURFACE_TYPE_WIN32,
2369
    CAIRO_SURFACE_TYPE_BEOS,
2370
    CAIRO_SURFACE_TYPE_DIRECTFB,
2371
    CAIRO_SURFACE_TYPE_SVG,
2372
    CAIRO_SURFACE_TYPE_OS2,
2373
    CAIRO_SURFACE_TYPE_WIN32_PRINTING,
2374
    CAIRO_SURFACE_TYPE_QUARTZ_IMAGE,
2375
    CAIRO_SURFACE_TYPE_SCRIPT,
2376
    CAIRO_SURFACE_TYPE_QT,
2377
    CAIRO_SURFACE_TYPE_RECORDING,
2378
    CAIRO_SURFACE_TYPE_VG,
2379
    CAIRO_SURFACE_TYPE_GL,
2380
    CAIRO_SURFACE_TYPE_DRM,
2381
    CAIRO_SURFACE_TYPE_TEE,
2382
    CAIRO_SURFACE_TYPE_XML,
2383
    CAIRO_SURFACE_TYPE_SKIA,
3959 Serge 2384
    CAIRO_SURFACE_TYPE_SUBSURFACE,
2385
    CAIRO_SURFACE_TYPE_COGL
1892 serge 2386
} cairo_surface_type_t;
2387
 
2388
cairo_public cairo_surface_type_t
2389
cairo_surface_get_type (cairo_surface_t *surface);
2390
 
2391
cairo_public cairo_content_t
2392
cairo_surface_get_content (cairo_surface_t *surface);
2393
 
2394
#if CAIRO_HAS_PNG_FUNCTIONS
2395
 
2396
cairo_public cairo_status_t
2397
cairo_surface_write_to_png (cairo_surface_t	*surface,
2398
			    const char		*filename);
2399
 
2400
cairo_public cairo_status_t
2401
cairo_surface_write_to_png_stream (cairo_surface_t	*surface,
2402
				   cairo_write_func_t	write_func,
2403
				   void			*closure);
2404
 
2405
#endif
2406
 
2407
cairo_public void *
2408
cairo_surface_get_user_data (cairo_surface_t		 *surface,
2409
			     const cairo_user_data_key_t *key);
2410
 
2411
cairo_public cairo_status_t
2412
cairo_surface_set_user_data (cairo_surface_t		 *surface,
2413
			     const cairo_user_data_key_t *key,
2414
			     void			 *user_data,
2415
			     cairo_destroy_func_t	 destroy);
2416
 
2417
#define CAIRO_MIME_TYPE_JPEG "image/jpeg"
2418
#define CAIRO_MIME_TYPE_PNG "image/png"
2419
#define CAIRO_MIME_TYPE_JP2 "image/jp2"
2420
#define CAIRO_MIME_TYPE_URI "text/x-uri"
3959 Serge 2421
#define CAIRO_MIME_TYPE_UNIQUE_ID "application/x-cairo.uuid"
1892 serge 2422
 
2423
cairo_public void
2424
cairo_surface_get_mime_data (cairo_surface_t		*surface,
2425
                             const char			*mime_type,
2426
                             const unsigned char       **data,
2427
                             unsigned long		*length);
2428
 
2429
cairo_public cairo_status_t
2430
cairo_surface_set_mime_data (cairo_surface_t		*surface,
2431
                             const char			*mime_type,
2432
                             const unsigned char	*data,
2433
                             unsigned long		 length,
2434
			     cairo_destroy_func_t	 destroy,
2435
			     void			*closure);
2436
 
3959 Serge 2437
cairo_public cairo_bool_t
2438
cairo_surface_supports_mime_type (cairo_surface_t		*surface,
2439
				  const char		        *mime_type);
2440
 
1892 serge 2441
cairo_public void
2442
cairo_surface_get_font_options (cairo_surface_t      *surface,
2443
				cairo_font_options_t *options);
2444
 
2445
cairo_public void
2446
cairo_surface_flush (cairo_surface_t *surface);
2447
 
2448
cairo_public void
2449
cairo_surface_mark_dirty (cairo_surface_t *surface);
2450
 
2451
cairo_public void
2452
cairo_surface_mark_dirty_rectangle (cairo_surface_t *surface,
2453
				    int              x,
2454
				    int              y,
2455
				    int              width,
2456
				    int              height);
2457
 
2458
cairo_public void
2459
cairo_surface_set_device_offset (cairo_surface_t *surface,
2460
				 double           x_offset,
2461
				 double           y_offset);
2462
 
2463
cairo_public void
2464
cairo_surface_get_device_offset (cairo_surface_t *surface,
2465
				 double          *x_offset,
2466
				 double          *y_offset);
2467
 
2468
cairo_public void
2469
cairo_surface_set_fallback_resolution (cairo_surface_t	*surface,
2470
				       double		 x_pixels_per_inch,
2471
				       double		 y_pixels_per_inch);
2472
 
2473
cairo_public void
2474
cairo_surface_get_fallback_resolution (cairo_surface_t	*surface,
2475
				       double		*x_pixels_per_inch,
2476
				       double		*y_pixels_per_inch);
2477
 
2478
cairo_public void
2479
cairo_surface_copy_page (cairo_surface_t *surface);
2480
 
2481
cairo_public void
2482
cairo_surface_show_page (cairo_surface_t *surface);
2483
 
2484
cairo_public cairo_bool_t
2485
cairo_surface_has_show_text_glyphs (cairo_surface_t *surface);
2486
 
2487
/* Image-surface functions */
2488
 
2489
cairo_public cairo_surface_t *
2490
cairo_image_surface_create (cairo_format_t	format,
2491
			    int			width,
2492
			    int			height);
2493
 
2494
cairo_public int
2495
cairo_format_stride_for_width (cairo_format_t	format,
2496
			       int		width);
2497
 
2498
cairo_public cairo_surface_t *
2499
cairo_image_surface_create_for_data (unsigned char	       *data,
2500
				     cairo_format_t		format,
2501
				     int			width,
2502
				     int			height,
2503
				     int			stride);
2504
 
2505
cairo_public unsigned char *
2506
cairo_image_surface_get_data (cairo_surface_t *surface);
2507
 
2508
cairo_public cairo_format_t
2509
cairo_image_surface_get_format (cairo_surface_t *surface);
2510
 
2511
cairo_public int
2512
cairo_image_surface_get_width (cairo_surface_t *surface);
2513
 
2514
cairo_public int
2515
cairo_image_surface_get_height (cairo_surface_t *surface);
2516
 
2517
cairo_public int
2518
cairo_image_surface_get_stride (cairo_surface_t *surface);
2519
 
2520
#if CAIRO_HAS_PNG_FUNCTIONS
2521
 
2522
cairo_public cairo_surface_t *
2523
cairo_image_surface_create_from_png (const char	*filename);
2524
 
2525
cairo_public cairo_surface_t *
2526
cairo_image_surface_create_from_png_stream (cairo_read_func_t	read_func,
2527
					    void		*closure);
2528
 
2529
#endif
2530
 
2531
/* Recording-surface functions */
2532
 
2533
cairo_public cairo_surface_t *
2534
cairo_recording_surface_create (cairo_content_t		 content,
2535
                                const cairo_rectangle_t *extents);
2536
 
2537
cairo_public void
2538
cairo_recording_surface_ink_extents (cairo_surface_t *surface,
2539
                                     double *x0,
2540
                                     double *y0,
2541
                                     double *width,
2542
                                     double *height);
2543
 
3959 Serge 2544
cairo_public cairo_bool_t
2545
cairo_recording_surface_get_extents (cairo_surface_t *surface,
2546
				     cairo_rectangle_t *extents);
2547
 
2548
/* raster-source pattern (callback) functions */
2549
 
2550
/**
2551
 * cairo_raster_source_acquire_func_t:
2552
 * @pattern: the pattern being rendered from
2553
 * @callback_data: the user data supplied during creation
2554
 * @target: the rendering target surface
2555
 * @extents: rectangular region of interest in pixels in sample space
2556
 *
2557
 * #cairo_raster_source_acquire_func_t is the type of function which is
2558
 * called when a pattern is being rendered from. It should create a surface
2559
 * that provides the pixel data for the region of interest as defined by
2560
 * extents, though the surface itself does not have to be limited to that
2561
 * area. For convenience the surface should probably be of image type,
2562
 * created with cairo_surface_create_similar_image() for the target (which
2563
 * enables the number of copies to be reduced during transfer to the
2564
 * device). Another option, might be to return a similar surface to the
2565
 * target for explicit handling by the application of a set of cached sources
2566
 * on the device. The region of sample data provided should be defined using
2567
 * cairo_surface_set_device_offset() to specify the top-left corner of the
2568
 * sample data (along with width and height of the surface).
2569
 *
2570
 * Returns: a #cairo_surface_t
2571
 *
2572
 * Since: 1.12
2573
 **/
2574
typedef cairo_surface_t *
2575
(*cairo_raster_source_acquire_func_t) (cairo_pattern_t *pattern,
2576
				       void *callback_data,
2577
				       cairo_surface_t *target,
2578
				       const cairo_rectangle_int_t *extents);
2579
 
2580
/**
2581
 * cairo_raster_source_release_func_t:
2582
 * @pattern: the pattern being rendered from
2583
 * @callback_data: the user data supplied during creation
2584
 * @surface: the surface created during acquire
2585
 *
2586
 * #cairo_raster_source_release_func_t is the type of function which is
2587
 * called when the pixel data is no longer being access by the pattern
2588
 * for the rendering operation. Typically this function will simply
2589
 * destroy the surface created during acquire.
2590
 *
2591
 * Since: 1.12
2592
 **/
2593
typedef void
2594
(*cairo_raster_source_release_func_t) (cairo_pattern_t *pattern,
2595
				       void *callback_data,
2596
				       cairo_surface_t *surface);
2597
 
2598
/**
2599
 * cairo_raster_source_snapshot_func_t:
2600
 * @pattern: the pattern being rendered from
2601
 * @callback_data: the user data supplied during creation
2602
 *
2603
 * #cairo_raster_source_snapshot_func_t is the type of function which is
2604
 * called when the pixel data needs to be preserved for later use
2605
 * during printing. This pattern will be accessed again later, and it
2606
 * is expected to provide the pixel data that was current at the time
2607
 * of snapshotting.
2608
 *
2609
 * Return value: CAIRO_STATUS_SUCCESS on success, or one of the
2610
 * #cairo_status_t error codes for failure.
2611
 *
2612
 * Since: 1.12
2613
 **/
2614
typedef cairo_status_t
2615
(*cairo_raster_source_snapshot_func_t) (cairo_pattern_t *pattern,
2616
					void *callback_data);
2617
 
2618
/**
2619
 * cairo_raster_source_copy_func_t:
2620
 * @pattern: the #cairo_pattern_t that was copied to
2621
 * @callback_data: the user data supplied during creation
2622
 * @other: the #cairo_pattern_t being used as the source for the copy
2623
 *
2624
 * #cairo_raster_source_copy_func_t is the type of function which is
2625
 * called when the pattern gets copied as a normal part of rendering.
2626
 *
2627
 * Return value: CAIRO_STATUS_SUCCESS on success, or one of the
2628
 * #cairo_status_t error codes for failure.
2629
 *
2630
 * Since: 1.12
2631
 **/
2632
typedef cairo_status_t
2633
(*cairo_raster_source_copy_func_t) (cairo_pattern_t *pattern,
2634
				    void *callback_data,
2635
				    const cairo_pattern_t *other);
2636
 
2637
/**
2638
 * cairo_raster_source_finish_func_t:
2639
 * @pattern: the pattern being rendered from
2640
 * @callback_data: the user data supplied during creation
2641
 *
2642
 * #cairo_raster_source_finish_func_t is the type of function which is
2643
 * called when the pattern (or a copy thereof) is no longer required.
2644
 *
2645
 * Since: 1.12
2646
 **/
2647
typedef void
2648
(*cairo_raster_source_finish_func_t) (cairo_pattern_t *pattern,
2649
				      void *callback_data);
2650
 
2651
cairo_public cairo_pattern_t *
2652
cairo_pattern_create_raster_source (void *user_data,
2653
				    cairo_content_t content,
2654
				    int width, int height);
2655
 
2656
cairo_public void
2657
cairo_raster_source_pattern_set_callback_data (cairo_pattern_t *pattern,
2658
					       void *data);
2659
 
2660
cairo_public void *
2661
cairo_raster_source_pattern_get_callback_data (cairo_pattern_t *pattern);
2662
 
2663
cairo_public void
2664
cairo_raster_source_pattern_set_acquire (cairo_pattern_t *pattern,
2665
					 cairo_raster_source_acquire_func_t acquire,
2666
					 cairo_raster_source_release_func_t release);
2667
 
2668
cairo_public void
2669
cairo_raster_source_pattern_get_acquire (cairo_pattern_t *pattern,
2670
					 cairo_raster_source_acquire_func_t *acquire,
2671
					 cairo_raster_source_release_func_t *release);
2672
cairo_public void
2673
cairo_raster_source_pattern_set_snapshot (cairo_pattern_t *pattern,
2674
					  cairo_raster_source_snapshot_func_t snapshot);
2675
 
2676
cairo_public cairo_raster_source_snapshot_func_t
2677
cairo_raster_source_pattern_get_snapshot (cairo_pattern_t *pattern);
2678
 
2679
cairo_public void
2680
cairo_raster_source_pattern_set_copy (cairo_pattern_t *pattern,
2681
				      cairo_raster_source_copy_func_t copy);
2682
 
2683
cairo_public cairo_raster_source_copy_func_t
2684
cairo_raster_source_pattern_get_copy (cairo_pattern_t *pattern);
2685
 
2686
cairo_public void
2687
cairo_raster_source_pattern_set_finish (cairo_pattern_t *pattern,
2688
					cairo_raster_source_finish_func_t finish);
2689
 
2690
cairo_public cairo_raster_source_finish_func_t
2691
cairo_raster_source_pattern_get_finish (cairo_pattern_t *pattern);
2692
 
1892 serge 2693
/* Pattern creation functions */
2694
 
2695
cairo_public cairo_pattern_t *
2696
cairo_pattern_create_rgb (double red, double green, double blue);
2697
 
2698
cairo_public cairo_pattern_t *
2699
cairo_pattern_create_rgba (double red, double green, double blue,
2700
			   double alpha);
2701
 
2702
cairo_public cairo_pattern_t *
2703
cairo_pattern_create_for_surface (cairo_surface_t *surface);
2704
 
2705
cairo_public cairo_pattern_t *
2706
cairo_pattern_create_linear (double x0, double y0,
2707
			     double x1, double y1);
2708
 
2709
cairo_public cairo_pattern_t *
2710
cairo_pattern_create_radial (double cx0, double cy0, double radius0,
2711
			     double cx1, double cy1, double radius1);
2712
 
2713
cairo_public cairo_pattern_t *
3959 Serge 2714
cairo_pattern_create_mesh (void);
2715
 
2716
cairo_public cairo_pattern_t *
1892 serge 2717
cairo_pattern_reference (cairo_pattern_t *pattern);
2718
 
2719
cairo_public void
2720
cairo_pattern_destroy (cairo_pattern_t *pattern);
2721
 
2722
cairo_public unsigned int
2723
cairo_pattern_get_reference_count (cairo_pattern_t *pattern);
2724
 
2725
cairo_public cairo_status_t
2726
cairo_pattern_status (cairo_pattern_t *pattern);
2727
 
2728
cairo_public void *
2729
cairo_pattern_get_user_data (cairo_pattern_t		 *pattern,
2730
			     const cairo_user_data_key_t *key);
2731
 
2732
cairo_public cairo_status_t
2733
cairo_pattern_set_user_data (cairo_pattern_t		 *pattern,
2734
			     const cairo_user_data_key_t *key,
2735
			     void			 *user_data,
2736
			     cairo_destroy_func_t	  destroy);
2737
 
2738
/**
2739
 * cairo_pattern_type_t:
2740
 * @CAIRO_PATTERN_TYPE_SOLID: The pattern is a solid (uniform)
3959 Serge 2741
 * color. It may be opaque or translucent, since 1.2.
2742
 * @CAIRO_PATTERN_TYPE_SURFACE: The pattern is a based on a surface (an image), since 1.2.
2743
 * @CAIRO_PATTERN_TYPE_LINEAR: The pattern is a linear gradient, since 1.2.
2744
 * @CAIRO_PATTERN_TYPE_RADIAL: The pattern is a radial gradient, since 1.2.
2745
 * @CAIRO_PATTERN_TYPE_MESH: The pattern is a mesh, since 1.12.
2746
 * @CAIRO_PATTERN_TYPE_RASTER_SOURCE: The pattern is a user pattern providing raster data, since 1.12.
1892 serge 2747
 *
2748
 * #cairo_pattern_type_t is used to describe the type of a given pattern.
2749
 *
2750
 * The type of a pattern is determined by the function used to create
2751
 * it. The cairo_pattern_create_rgb() and cairo_pattern_create_rgba()
2752
 * functions create SOLID patterns. The remaining
2753
 * cairo_pattern_create functions map to pattern types in obvious
2754
 * ways.
2755
 *
2756
 * The pattern type can be queried with cairo_pattern_get_type()
2757
 *
2758
 * Most #cairo_pattern_t functions can be called with a pattern of any
2759
 * type, (though trying to change the extend or filter for a solid
2760
 * pattern will have no effect). A notable exception is
2761
 * cairo_pattern_add_color_stop_rgb() and
2762
 * cairo_pattern_add_color_stop_rgba() which must only be called with
2763
 * gradient patterns (either LINEAR or RADIAL). Otherwise the pattern
2764
 * will be shutdown and put into an error state.
2765
 *
2766
 * New entries may be added in future versions.
2767
 *
2768
 * Since: 1.2
2769
 **/
2770
typedef enum _cairo_pattern_type {
2771
    CAIRO_PATTERN_TYPE_SOLID,
2772
    CAIRO_PATTERN_TYPE_SURFACE,
2773
    CAIRO_PATTERN_TYPE_LINEAR,
3959 Serge 2774
    CAIRO_PATTERN_TYPE_RADIAL,
2775
    CAIRO_PATTERN_TYPE_MESH,
2776
    CAIRO_PATTERN_TYPE_RASTER_SOURCE
1892 serge 2777
} cairo_pattern_type_t;
2778
 
2779
cairo_public cairo_pattern_type_t
2780
cairo_pattern_get_type (cairo_pattern_t *pattern);
2781
 
2782
cairo_public void
2783
cairo_pattern_add_color_stop_rgb (cairo_pattern_t *pattern,
2784
				  double offset,
2785
				  double red, double green, double blue);
2786
 
2787
cairo_public void
2788
cairo_pattern_add_color_stop_rgba (cairo_pattern_t *pattern,
2789
				   double offset,
2790
				   double red, double green, double blue,
2791
				   double alpha);
2792
 
2793
cairo_public void
3959 Serge 2794
cairo_mesh_pattern_begin_patch (cairo_pattern_t *pattern);
2795
 
2796
cairo_public void
2797
cairo_mesh_pattern_end_patch (cairo_pattern_t *pattern);
2798
 
2799
cairo_public void
2800
cairo_mesh_pattern_curve_to (cairo_pattern_t *pattern,
2801
			     double x1, double y1,
2802
			     double x2, double y2,
2803
			     double x3, double y3);
2804
 
2805
cairo_public void
2806
cairo_mesh_pattern_line_to (cairo_pattern_t *pattern,
2807
			    double x, double y);
2808
 
2809
cairo_public void
2810
cairo_mesh_pattern_move_to (cairo_pattern_t *pattern,
2811
			    double x, double y);
2812
 
2813
cairo_public void
2814
cairo_mesh_pattern_set_control_point (cairo_pattern_t *pattern,
2815
				      unsigned int point_num,
2816
				      double x, double y);
2817
 
2818
cairo_public void
2819
cairo_mesh_pattern_set_corner_color_rgb (cairo_pattern_t *pattern,
2820
					 unsigned int corner_num,
2821
					 double red, double green, double blue);
2822
 
2823
cairo_public void
2824
cairo_mesh_pattern_set_corner_color_rgba (cairo_pattern_t *pattern,
2825
					  unsigned int corner_num,
2826
					  double red, double green, double blue,
2827
					  double alpha);
2828
 
2829
cairo_public void
1892 serge 2830
cairo_pattern_set_matrix (cairo_pattern_t      *pattern,
2831
			  const cairo_matrix_t *matrix);
2832
 
2833
cairo_public void
2834
cairo_pattern_get_matrix (cairo_pattern_t *pattern,
2835
			  cairo_matrix_t  *matrix);
2836
 
2837
/**
2838
 * cairo_extend_t:
2839
 * @CAIRO_EXTEND_NONE: pixels outside of the source pattern
3959 Serge 2840
 *   are fully transparent (Since 1.0)
2841
 * @CAIRO_EXTEND_REPEAT: the pattern is tiled by repeating (Since 1.0)
1892 serge 2842
 * @CAIRO_EXTEND_REFLECT: the pattern is tiled by reflecting
3959 Serge 2843
 *   at the edges (Since 1.0; but only implemented for surface patterns since 1.6)
1892 serge 2844
 * @CAIRO_EXTEND_PAD: pixels outside of the pattern copy
2845
 *   the closest pixel from the source (Since 1.2; but only
2846
 *   implemented for surface patterns since 1.6)
2847
 *
2848
 * #cairo_extend_t is used to describe how pattern color/alpha will be
2849
 * determined for areas "outside" the pattern's natural area, (for
2850
 * example, outside the surface bounds or outside the gradient
2851
 * geometry).
2852
 *
3959 Serge 2853
 * Mesh patterns are not affected by the extend mode.
2854
 *
1892 serge 2855
 * The default extend mode is %CAIRO_EXTEND_NONE for surface patterns
2856
 * and %CAIRO_EXTEND_PAD for gradient patterns.
2857
 *
2858
 * New entries may be added in future versions.
3959 Serge 2859
 *
2860
 * Since: 1.0
1892 serge 2861
 **/
2862
typedef enum _cairo_extend {
2863
    CAIRO_EXTEND_NONE,
2864
    CAIRO_EXTEND_REPEAT,
2865
    CAIRO_EXTEND_REFLECT,
2866
    CAIRO_EXTEND_PAD
2867
} cairo_extend_t;
2868
 
2869
cairo_public void
2870
cairo_pattern_set_extend (cairo_pattern_t *pattern, cairo_extend_t extend);
2871
 
2872
cairo_public cairo_extend_t
2873
cairo_pattern_get_extend (cairo_pattern_t *pattern);
2874
 
2875
/**
2876
 * cairo_filter_t:
2877
 * @CAIRO_FILTER_FAST: A high-performance filter, with quality similar
3959 Serge 2878
 *     to %CAIRO_FILTER_NEAREST (Since 1.0)
1892 serge 2879
 * @CAIRO_FILTER_GOOD: A reasonable-performance filter, with quality
3959 Serge 2880
 *     similar to %CAIRO_FILTER_BILINEAR (Since 1.0)
1892 serge 2881
 * @CAIRO_FILTER_BEST: The highest-quality available, performance may
3959 Serge 2882
 *     not be suitable for interactive use. (Since 1.0)
2883
 * @CAIRO_FILTER_NEAREST: Nearest-neighbor filtering (Since 1.0)
2884
 * @CAIRO_FILTER_BILINEAR: Linear interpolation in two dimensions (Since 1.0)
1892 serge 2885
 * @CAIRO_FILTER_GAUSSIAN: This filter value is currently
3959 Serge 2886
 *     unimplemented, and should not be used in current code. (Since 1.0)
1892 serge 2887
 *
2888
 * #cairo_filter_t is used to indicate what filtering should be
2889
 * applied when reading pixel values from patterns. See
3959 Serge 2890
 * cairo_pattern_set_filter() for indicating the desired filter to be
1892 serge 2891
 * used with a particular pattern.
3959 Serge 2892
 *
2893
 * Since: 1.0
2894
 **/
1892 serge 2895
typedef enum _cairo_filter {
2896
    CAIRO_FILTER_FAST,
2897
    CAIRO_FILTER_GOOD,
2898
    CAIRO_FILTER_BEST,
2899
    CAIRO_FILTER_NEAREST,
2900
    CAIRO_FILTER_BILINEAR,
2901
    CAIRO_FILTER_GAUSSIAN
2902
} cairo_filter_t;
2903
 
2904
cairo_public void
2905
cairo_pattern_set_filter (cairo_pattern_t *pattern, cairo_filter_t filter);
2906
 
2907
cairo_public cairo_filter_t
2908
cairo_pattern_get_filter (cairo_pattern_t *pattern);
2909
 
2910
cairo_public cairo_status_t
2911
cairo_pattern_get_rgba (cairo_pattern_t *pattern,
2912
			double *red, double *green,
2913
			double *blue, double *alpha);
2914
 
2915
cairo_public cairo_status_t
2916
cairo_pattern_get_surface (cairo_pattern_t *pattern,
2917
			   cairo_surface_t **surface);
2918
 
2919
 
2920
cairo_public cairo_status_t
2921
cairo_pattern_get_color_stop_rgba (cairo_pattern_t *pattern,
2922
				   int index, double *offset,
2923
				   double *red, double *green,
2924
				   double *blue, double *alpha);
2925
 
2926
cairo_public cairo_status_t
2927
cairo_pattern_get_color_stop_count (cairo_pattern_t *pattern,
2928
				    int *count);
2929
 
2930
cairo_public cairo_status_t
2931
cairo_pattern_get_linear_points (cairo_pattern_t *pattern,
2932
				 double *x0, double *y0,
2933
				 double *x1, double *y1);
2934
 
2935
cairo_public cairo_status_t
2936
cairo_pattern_get_radial_circles (cairo_pattern_t *pattern,
2937
				  double *x0, double *y0, double *r0,
2938
				  double *x1, double *y1, double *r1);
2939
 
3959 Serge 2940
cairo_public cairo_status_t
2941
cairo_mesh_pattern_get_patch_count (cairo_pattern_t *pattern,
2942
				    unsigned int *count);
2943
 
2944
cairo_public cairo_path_t *
2945
cairo_mesh_pattern_get_path (cairo_pattern_t *pattern,
2946
			     unsigned int patch_num);
2947
 
2948
cairo_public cairo_status_t
2949
cairo_mesh_pattern_get_corner_color_rgba (cairo_pattern_t *pattern,
2950
					  unsigned int patch_num,
2951
					  unsigned int corner_num,
2952
					  double *red, double *green,
2953
					  double *blue, double *alpha);
2954
 
2955
cairo_public cairo_status_t
2956
cairo_mesh_pattern_get_control_point (cairo_pattern_t *pattern,
2957
				      unsigned int patch_num,
2958
				      unsigned int point_num,
2959
				      double *x, double *y);
2960
 
1892 serge 2961
/* Matrix functions */
2962
 
2963
cairo_public void
2964
cairo_matrix_init (cairo_matrix_t *matrix,
2965
		   double  xx, double  yx,
2966
		   double  xy, double  yy,
2967
		   double  x0, double  y0);
2968
 
2969
cairo_public void
2970
cairo_matrix_init_identity (cairo_matrix_t *matrix);
2971
 
2972
cairo_public void
2973
cairo_matrix_init_translate (cairo_matrix_t *matrix,
2974
			     double tx, double ty);
2975
 
2976
cairo_public void
2977
cairo_matrix_init_scale (cairo_matrix_t *matrix,
2978
			 double sx, double sy);
2979
 
2980
cairo_public void
2981
cairo_matrix_init_rotate (cairo_matrix_t *matrix,
2982
			  double radians);
2983
 
2984
cairo_public void
2985
cairo_matrix_translate (cairo_matrix_t *matrix, double tx, double ty);
2986
 
2987
cairo_public void
2988
cairo_matrix_scale (cairo_matrix_t *matrix, double sx, double sy);
2989
 
2990
cairo_public void
2991
cairo_matrix_rotate (cairo_matrix_t *matrix, double radians);
2992
 
2993
cairo_public cairo_status_t
2994
cairo_matrix_invert (cairo_matrix_t *matrix);
2995
 
2996
cairo_public void
2997
cairo_matrix_multiply (cairo_matrix_t	    *result,
2998
		       const cairo_matrix_t *a,
2999
		       const cairo_matrix_t *b);
3000
 
3001
cairo_public void
3002
cairo_matrix_transform_distance (const cairo_matrix_t *matrix,
3003
				 double *dx, double *dy);
3004
 
3005
cairo_public void
3006
cairo_matrix_transform_point (const cairo_matrix_t *matrix,
3007
			      double *x, double *y);
3008
 
3009
/* Region functions */
3010
 
3011
/**
3012
 * cairo_region_t:
3013
 *
3014
 * A #cairo_region_t represents a set of integer-aligned rectangles.
3015
 *
3016
 * It allows set-theoretical operations like cairo_region_union() and
3017
 * cairo_region_intersect() to be performed on them.
3018
 *
3019
 * Memory management of #cairo_region_t is done with
3020
 * cairo_region_reference() and cairo_region_destroy().
3021
 *
3022
 * Since: 1.10
3023
 **/
3024
typedef struct _cairo_region cairo_region_t;
3025
 
3026
typedef enum _cairo_region_overlap {
3027
    CAIRO_REGION_OVERLAP_IN,		/* completely inside region */
3028
    CAIRO_REGION_OVERLAP_OUT,		/* completely outside region */
3029
    CAIRO_REGION_OVERLAP_PART		/* partly inside region */
3030
} cairo_region_overlap_t;
3031
 
3032
cairo_public cairo_region_t *
3033
cairo_region_create (void);
3034
 
3035
cairo_public cairo_region_t *
3036
cairo_region_create_rectangle (const cairo_rectangle_int_t *rectangle);
3037
 
3038
cairo_public cairo_region_t *
3039
cairo_region_create_rectangles (const cairo_rectangle_int_t *rects,
3040
				int count);
3041
 
3042
cairo_public cairo_region_t *
3043
cairo_region_copy (const cairo_region_t *original);
3044
 
3045
cairo_public cairo_region_t *
3046
cairo_region_reference (cairo_region_t *region);
3047
 
3048
cairo_public void
3049
cairo_region_destroy (cairo_region_t *region);
3050
 
3051
cairo_public cairo_bool_t
3052
cairo_region_equal (const cairo_region_t *a, const cairo_region_t *b);
3053
 
3054
cairo_public cairo_status_t
3055
cairo_region_status (const cairo_region_t *region);
3056
 
3057
cairo_public void
3058
cairo_region_get_extents (const cairo_region_t        *region,
3059
			  cairo_rectangle_int_t *extents);
3060
 
3061
cairo_public int
3062
cairo_region_num_rectangles (const cairo_region_t *region);
3063
 
3064
cairo_public void
3065
cairo_region_get_rectangle (const cairo_region_t  *region,
3066
			    int                    nth,
3067
			    cairo_rectangle_int_t *rectangle);
3068
 
3069
cairo_public cairo_bool_t
3070
cairo_region_is_empty (const cairo_region_t *region);
3071
 
3072
cairo_public cairo_region_overlap_t
3073
cairo_region_contains_rectangle (const cairo_region_t *region,
3074
				 const cairo_rectangle_int_t *rectangle);
3075
 
3076
cairo_public cairo_bool_t
3077
cairo_region_contains_point (const cairo_region_t *region, int x, int y);
3078
 
3079
cairo_public void
3080
cairo_region_translate (cairo_region_t *region, int dx, int dy);
3081
 
3082
cairo_public cairo_status_t
3083
cairo_region_subtract (cairo_region_t *dst, const cairo_region_t *other);
3084
 
3085
cairo_public cairo_status_t
3086
cairo_region_subtract_rectangle (cairo_region_t *dst,
3087
				 const cairo_rectangle_int_t *rectangle);
3088
 
3089
cairo_public cairo_status_t
3090
cairo_region_intersect (cairo_region_t *dst, const cairo_region_t *other);
3091
 
3092
cairo_public cairo_status_t
3093
cairo_region_intersect_rectangle (cairo_region_t *dst,
3094
				  const cairo_rectangle_int_t *rectangle);
3095
 
3096
cairo_public cairo_status_t
3097
cairo_region_union (cairo_region_t *dst, const cairo_region_t *other);
3098
 
3099
cairo_public cairo_status_t
3100
cairo_region_union_rectangle (cairo_region_t *dst,
3101
			      const cairo_rectangle_int_t *rectangle);
3102
 
3103
cairo_public cairo_status_t
3104
cairo_region_xor (cairo_region_t *dst, const cairo_region_t *other);
3105
 
3106
cairo_public cairo_status_t
3107
cairo_region_xor_rectangle (cairo_region_t *dst,
3108
			    const cairo_rectangle_int_t *rectangle);
3109
 
3110
/* Functions to be used while debugging (not intended for use in production code) */
3111
cairo_public void
3112
cairo_debug_reset_static_data (void);
3113
 
3114
 
3115
CAIRO_END_DECLS
3116
 
3117
#endif /* CAIRO_H */