1 /* cairo - a vector graphics library with display and print output
3 * Copyright © 2002 University of Southern California
4 * Copyright © 2005 Red Hat, Inc.
6 * This library is free software; you can redistribute it and/or
7 * modify it either under the terms of the GNU Lesser General Public
8 * License version 2.1 as published by the Free Software Foundation
9 * (the "LGPL") or, at your option, under the terms of the Mozilla
10 * Public License Version 1.1 (the "MPL"). If you do not alter this
11 * notice, a recipient may use your version of this file under either
12 * the MPL or the LGPL.
14 * You should have received a copy of the LGPL along with this library
15 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 * You should have received a copy of the MPL along with this library
18 * in the file COPYING-MPL-1.1
20 * The contents of this file are subject to the Mozilla Public License
21 * Version 1.1 (the "License"); you may not use this file except in
22 * compliance with the License. You may obtain a copy of the License at
23 * http://www.mozilla.org/MPL/
25 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
26 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
27 * the specific language governing rights and limitations.
29 * The Original Code is the cairo graphics library.
31 * The Initial Developer of the Original Code is University of Southern
35 * Carl D. Worth <cworth@cworth.org>
39 * These definitions are solely for use by the implementation of cairo
40 * and constitute no kind of standard. If you need any of these
41 * functions, please drop me a note. Either the library needs new
42 * functionality, or there's a way to do what you need using the
43 * existing published interfaces. cworth@cworth.org
54 #define cairo_public __declspec(dllexport)
64 #define _USE_MATH_DEFINES
73 #include "cairo-compiler-private.h"
75 #if CAIRO_HAS_PS_SURFACE || \
76 CAIRO_HAS_PDF_SURFACE || \
77 CAIRO_HAS_SVG_SURFACE || \
78 CAIRO_HAS_WIN32_SURFACE
79 #define CAIRO_HAS_FONT_SUBSET 1
82 #if CAIRO_HAS_PS_SURFACE || CAIRO_HAS_PDF_SURFACE || CAIRO_HAS_FONT_SUBSET
83 #define CAIRO_HAS_PDF_OPERATORS 1
88 #if _WIN32 && !_WIN32_WCE /* Permissions on WinCE? No worries! */
90 _cairo_win32_tmpfile (void);
91 #define tmpfile() _cairo_win32_tmpfile()
95 #define MIN(a, b) ((a) < (b) ? (a) : (b))
98 #define MAX(a, b) ((a) > (b) ? (a) : (b))
109 #define M_PI 3.14159265358979323846
113 #define M_SQRT2 1.41421356237309504880
117 #define M_SQRT1_2 0.707106781186547524400844362104849039
121 #define ARRAY_LENGTH(__array) ((int) (sizeof (__array) / sizeof (__array[0])))
125 #define STRINGIFY(macro_or_string) STRINGIFY_ARG (macro_or_string)
126 #define STRINGIFY_ARG(contents) #contents
129 #define cairo_container_of(ptr, type, member) ({ \
130 const __typeof__ (((type *) 0)->member) *mptr__ = (ptr); \
131 (type *) ((char *) mptr__ - offsetof (type, member)); \
134 #define cairo_container_of(ptr, type, member) \
135 (type *)((char *) (ptr) - (char *) &((type *)0)->member)
139 /* Size in bytes of buffer to use off the stack per functions.
140 * Mostly used by text functions. For larger allocations, they'll
142 #ifndef CAIRO_STACK_BUFFER_SIZE
143 #define CAIRO_STACK_BUFFER_SIZE (512 * sizeof (int))
146 #define CAIRO_STACK_ARRAY_LENGTH(T) (CAIRO_STACK_BUFFER_SIZE / sizeof(T))
148 #define ASSERT_NOT_REACHED \
150 static const int NOT_REACHED = 0; \
151 assert (NOT_REACHED); \
153 #define COMPILE_TIME_ASSERT1(condition, line) \
154 typedef int compile_time_assertion_at_line_##line##_failed [(condition)?1:-1]
155 #define COMPILE_TIME_ASSERT0(condition, line) COMPILE_TIME_ASSERT1(condition, line)
156 #define COMPILE_TIME_ASSERT(condition) COMPILE_TIME_ASSERT0(condition, __LINE__)
158 #define CAIRO_ALPHA_IS_OPAQUE(alpha) ((alpha) >= ((double)0xff00 / (double)0xffff))
159 #define CAIRO_ALPHA_SHORT_IS_OPAQUE(alpha) ((alpha) >= 0xff00)
160 #define CAIRO_ALPHA_IS_ZERO(alpha) ((alpha) <= 0.0)
162 #define CAIRO_COLOR_IS_OPAQUE(color) CAIRO_ALPHA_SHORT_IS_OPAQUE ((color)->alpha_short)
164 /* Reverse the bits in a byte with 7 operations (no 64-bit):
165 * Devised by Sean Anderson, July 13, 2001.
166 * Source: http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits
168 #define CAIRO_BITSWAP8(c) ((((c) * 0x0802LU & 0x22110LU) | ((c) * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16)
170 /* Return the number of 1 bits in mask.
172 * GCC 3.4 supports a "population count" builtin, which on many targets is
173 * implemented with a single instruction. There is a fallback definition
174 * in libgcc in case a target does not have one, which should be just as
175 * good as the open-coded solution below, (which is "HACKMEM 169").
177 static inline int cairo_const
178 _cairo_popcount (uint32_t mask
)
180 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
181 return __builtin_popcount (mask
);
185 y
= (mask
>> 1) &033333333333;
186 y
= mask
- y
- ((y
>>1) & 033333333333);
187 return (((y
+ (y
>> 3)) & 030707070707) % 077);
191 #ifdef WORDS_BIGENDIAN
192 #define CAIRO_BITSWAP8_IF_LITTLE_ENDIAN(c) (c)
194 #define CAIRO_BITSWAP8_IF_LITTLE_ENDIAN(c) CAIRO_BITSWAP8(c)
197 #ifdef WORDS_BIGENDIAN
199 #define cpu_to_be16(v) (v)
200 #define be16_to_cpu(v) (v)
201 #define cpu_to_be32(v) (v)
202 #define be32_to_cpu(v) (v)
206 static inline uint16_t cairo_const
207 cpu_to_be16(uint16_t v
)
209 return (v
<< 8) | (v
>> 8);
212 static inline uint16_t cairo_const
213 be16_to_cpu(uint16_t v
)
215 return cpu_to_be16 (v
);
218 static inline uint32_t cairo_const
219 cpu_to_be32(uint32_t v
)
221 return (cpu_to_be16 (v
) << 16) | cpu_to_be16 (v
>> 16);
224 static inline uint32_t cairo_const
225 be32_to_cpu(uint32_t v
)
227 return cpu_to_be32 (v
);
232 #include "cairo-types-private.h"
233 #include "cairo-cache-private.h"
234 #include "cairo-reference-count-private.h"
235 #include "cairo-spans-private.h"
238 _cairo_box_from_doubles (cairo_box_t
*box
,
239 double *x1
, double *y1
,
240 double *x2
, double *y2
);
243 _cairo_box_to_doubles (const cairo_box_t
*box
,
244 double *x1
, double *y1
,
245 double *x2
, double *y2
);
248 _cairo_box_from_rectangle (cairo_box_t
*box
,
249 const cairo_rectangle_int_t
*rectangle
);
252 _cairo_box_round_to_rectangle (const cairo_box_t
*box
,
253 cairo_rectangle_int_t
*rectangle
);
255 cairo_private cairo_bool_t
256 _cairo_rectangle_intersect (cairo_rectangle_int_t
*dst
,
257 const cairo_rectangle_int_t
*src
);
259 cairo_private cairo_bool_t
260 _cairo_box_intersects_line_segment (cairo_box_t
*box
,
261 cairo_line_t
*line
) cairo_pure
;
263 cairo_private cairo_bool_t
264 _cairo_box_contains_point (cairo_box_t
*box
,
265 const cairo_point_t
*point
) cairo_pure
;
268 _cairo_composite_rectangles_init (cairo_composite_rectangles_t
*rects
,
274 /* cairo-array.c structures and functions */
277 _cairo_array_init (cairo_array_t
*array
, int element_size
);
280 _cairo_array_init_snapshot (cairo_array_t
*array
,
281 const cairo_array_t
*other
);
284 _cairo_array_fini (cairo_array_t
*array
);
286 cairo_private cairo_status_t
287 _cairo_array_grow_by (cairo_array_t
*array
, unsigned int additional
);
290 _cairo_array_truncate (cairo_array_t
*array
, unsigned int num_elements
);
292 cairo_private cairo_status_t
293 _cairo_array_append (cairo_array_t
*array
, const void *element
);
295 cairo_private cairo_status_t
296 _cairo_array_append_multiple (cairo_array_t
*array
,
297 const void *elements
,
300 cairo_private cairo_status_t
301 _cairo_array_allocate (cairo_array_t
*array
,
302 unsigned int num_elements
,
306 _cairo_array_index (cairo_array_t
*array
, unsigned int index
);
309 _cairo_array_copy_element (cairo_array_t
*array
, int index
, void *dst
);
312 _cairo_array_num_elements (cairo_array_t
*array
);
315 _cairo_array_size (cairo_array_t
*array
);
318 const cairo_user_data_key_t
*key
;
320 cairo_destroy_func_t destroy
;
321 } cairo_user_data_slot_t
;
324 _cairo_user_data_array_init (cairo_user_data_array_t
*array
);
327 _cairo_user_data_array_fini (cairo_user_data_array_t
*array
);
330 _cairo_user_data_array_get_data (cairo_user_data_array_t
*array
,
331 const cairo_user_data_key_t
*key
);
333 cairo_private cairo_status_t
334 _cairo_user_data_array_set_data (cairo_user_data_array_t
*array
,
335 const cairo_user_data_key_t
*key
,
337 cairo_destroy_func_t destroy
);
339 cairo_private cairo_status_t
340 _cairo_user_data_array_copy (cairo_user_data_array_t
*dst
,
341 cairo_user_data_array_t
*src
);
344 _cairo_user_data_array_foreach (cairo_user_data_array_t
*array
,
345 void (*func
) (const void *key
,
350 #define _CAIRO_HASH_INIT_VALUE 5381
352 cairo_private
unsigned long
353 _cairo_hash_string (const char *c
);
355 cairo_private
unsigned long
356 _cairo_hash_bytes (unsigned long hash
,
358 unsigned int length
);
361 * A #cairo_unscaled_font_t is just an opaque handle we use in the
364 typedef struct _cairo_unscaled_font
{
365 cairo_hash_entry_t hash_entry
;
366 cairo_reference_count_t ref_count
;
367 const cairo_unscaled_font_backend_t
*backend
;
368 } cairo_unscaled_font_t
;
370 typedef struct _cairo_scaled_glyph
{
371 cairo_hash_entry_t hash_entry
;
373 cairo_text_extents_t metrics
; /* user-space metrics */
374 cairo_text_extents_t fs_metrics
; /* font-space metrics */
375 cairo_box_t bbox
; /* device-space bounds */
376 int16_t x_advance
; /* device-space rounded X advance */
377 int16_t y_advance
; /* device-space rounded Y advance */
379 cairo_image_surface_t
*surface
; /* device-space image */
380 cairo_path_fixed_t
*path
; /* device-space outline */
381 cairo_surface_t
*meta_surface
; /* device-space meta-surface */
383 void *surface_private
; /* for the surface backend */
384 } cairo_scaled_glyph_t
;
386 #define _cairo_scaled_glyph_index(g) ((g)->hash_entry.hash)
387 #define _cairo_scaled_glyph_set_index(g, i) ((g)->hash_entry.hash = (i))
389 #include "cairo-scaled-font-private.h"
391 struct _cairo_font_face
{
392 /* hash_entry must be first */
393 cairo_hash_entry_t hash_entry
;
394 cairo_status_t status
;
395 cairo_reference_count_t ref_count
;
396 cairo_user_data_array_t user_data
;
397 const cairo_font_face_backend_t
*backend
;
401 _cairo_toy_font_face_reset_static_data (void);
404 _cairo_ft_font_reset_static_data (void);
406 /* the font backend interface */
408 struct _cairo_unscaled_font_backend
{
409 void (*destroy
) (void *unscaled_font
);
412 /* #cairo_toy_font_face_t - simple family/slant/weight font faces used for
413 * the built-in font API
416 typedef struct _cairo_toy_font_face
{
417 cairo_font_face_t base
;
419 cairo_bool_t owns_family
;
420 cairo_font_slant_t slant
;
421 cairo_font_weight_t weight
;
423 cairo_font_face_t
*impl_face
; /* The non-toy font face this actually uses */
424 } cairo_toy_font_face_t
;
426 typedef enum _cairo_scaled_glyph_info
{
427 CAIRO_SCALED_GLYPH_INFO_METRICS
= (1 << 0),
428 CAIRO_SCALED_GLYPH_INFO_SURFACE
= (1 << 1),
429 CAIRO_SCALED_GLYPH_INFO_PATH
= (1 << 2),
430 CAIRO_SCALED_GLYPH_INFO_META_SURFACE
= (1 << 3)
431 } cairo_scaled_glyph_info_t
;
433 typedef struct _cairo_scaled_font_subset
{
434 cairo_scaled_font_t
*scaled_font
;
435 unsigned int font_id
;
436 unsigned int subset_id
;
438 /* Index of glyphs array is subset_glyph_index.
439 * Value of glyphs array is scaled_font_glyph_index.
441 unsigned long *glyphs
;
442 unsigned long *to_unicode
;
445 unsigned int num_glyphs
;
446 cairo_bool_t is_composite
;
447 } cairo_scaled_font_subset_t
;
449 struct _cairo_scaled_font_backend
{
450 cairo_font_type_t type
;
453 (*fini
) (void *scaled_font
);
455 cairo_warn cairo_int_status_t
456 (*scaled_glyph_init
) (void *scaled_font
,
457 cairo_scaled_glyph_t
*scaled_glyph
,
458 cairo_scaled_glyph_info_t info
);
460 /* A backend only needs to implement this or ucs4_to_index(), not
461 * both. This allows the backend to do something more sophisticated
462 * then just converting characters one by one.
464 cairo_warn cairo_int_status_t
465 (*text_to_glyphs
) (void *scaled_font
,
470 cairo_glyph_t
**glyphs
,
472 cairo_text_cluster_t
**clusters
,
474 cairo_text_cluster_flags_t
*cluster_flags
);
477 (*ucs4_to_index
) (void *scaled_font
,
479 cairo_warn cairo_int_status_t
480 (*show_glyphs
) (void *scaled_font
,
482 const cairo_pattern_t
*pattern
,
483 cairo_surface_t
*surface
,
490 cairo_glyph_t
*glyphs
,
492 int *remaining_glyphs
);
494 cairo_warn cairo_int_status_t
495 (*load_truetype_table
)(void *scaled_font
,
498 unsigned char *buffer
,
499 unsigned long *length
);
501 /* ucs4 is set to -1 if the unicode character could not be found
503 cairo_warn cairo_int_status_t
504 (*index_to_ucs4
)(void *scaled_font
,
509 struct _cairo_font_face_backend
{
510 cairo_font_type_t type
;
512 cairo_warn cairo_status_t
513 (*create_for_toy
) (cairo_toy_font_face_t
*toy_face
,
514 cairo_font_face_t
**font_face
);
516 /* The destroy() function is allowed to resurrect the font face
517 * by re-referencing. This is needed for the FreeType backend.
520 (*destroy
) (void *font_face
);
522 cairo_warn cairo_status_t
523 (*scaled_font_create
) (void *font_face
,
524 const cairo_matrix_t
*font_matrix
,
525 const cairo_matrix_t
*ctm
,
526 const cairo_font_options_t
*options
,
527 cairo_scaled_font_t
**scaled_font
);
530 (*get_implementation
) (void *font_face
,
531 const cairo_matrix_t
*font_matrix
,
532 const cairo_matrix_t
*ctm
,
533 const cairo_font_options_t
*options
);
536 extern const cairo_private
struct _cairo_font_face_backend _cairo_user_font_face_backend
;
538 /* concrete font backends */
539 #if CAIRO_HAS_FT_FONT
541 extern const cairo_private
struct _cairo_font_face_backend _cairo_ft_font_face_backend
;
545 #if CAIRO_HAS_WIN32_FONT
547 extern const cairo_private
struct _cairo_font_face_backend _cairo_win32_font_face_backend
;
551 #if CAIRO_HAS_QUARTZ_FONT
553 extern const cairo_private
struct _cairo_font_face_backend _cairo_quartz_font_face_backend
;
557 struct _cairo_space_backend
559 void (*destroy
)(void* space
);
560 cairo_surface_t
* (*surface_create
)(void* space
, void* surface
, cairo_content_t content
, unsigned long drawable
, unsigned long visualid
, cairo_bool_t double_buffered
, double width
, double height
, int color_mantissa_bits
, int alpha_mantissa_bits
, int exponent_bits
, int shared_exponent_bits
);
561 cairo_status_t (*sync
)(void *space
);
564 struct _cairo_surface_backend
{
565 cairo_surface_type_t type
;
568 (*create_similar
) (void *surface
,
569 cairo_content_t content
,
573 cairo_warn cairo_status_t
574 (*finish
) (void *surface
);
576 cairo_warn cairo_status_t
577 (*acquire_source_image
) (void *abstract_surface
,
578 cairo_image_surface_t
**image_out
,
582 (*release_source_image
) (void *abstract_surface
,
583 cairo_image_surface_t
*image
,
586 cairo_warn cairo_status_t
587 (*acquire_dest_image
) (void *abstract_surface
,
588 cairo_rectangle_int_t
*interest_rect
,
589 cairo_image_surface_t
**image_out
,
590 cairo_rectangle_int_t
*image_rect
,
594 (*release_dest_image
) (void *abstract_surface
,
595 cairo_rectangle_int_t
*interest_rect
,
596 cairo_image_surface_t
*image
,
597 cairo_rectangle_int_t
*image_rect
,
600 /* Create a new surface (@clone_out) with the following
603 * 1. It is as compatible as possible with @surface (in terms of
606 * 2. It has the same contents as @src within the given rectangle.
608 * 3. The offset of the similar surface with respect to the original
609 * surface is returned in the clone_offset vector.
610 * - if you clone the entire surface, this vector is zero.
611 * - if you clone (src_x, src_y)x(w, h) the vector is (src_x, src_y);
613 cairo_warn cairo_status_t
614 (*clone_similar
) (void *surface
,
615 cairo_surface_t
*src
,
616 cairo_content_t content
,
623 cairo_surface_t
**clone_out
);
625 /* XXX: dst should be the first argument for consistency */
626 cairo_warn cairo_int_status_t
627 (*composite
) (cairo_operator_t op
,
628 const cairo_pattern_t
*src
,
629 const cairo_pattern_t
*mask
,
638 unsigned int height
);
640 cairo_warn cairo_int_status_t
641 (*fill_rectangles
) (void *surface
,
643 const cairo_color_t
*color
,
644 cairo_rectangle_int_t
*rects
,
647 /* XXX: dst should be the first argument for consistency */
648 cairo_warn cairo_int_status_t
649 (*composite_trapezoids
) (cairo_operator_t op
,
650 const cairo_pattern_t
*pattern
,
652 cairo_antialias_t antialias
,
659 cairo_trapezoid_t
*traps
,
662 cairo_warn cairo_span_renderer_t
*
663 (*create_span_renderer
) (cairo_operator_t op
,
664 const cairo_pattern_t
*pattern
,
666 cairo_antialias_t antialias
,
667 const cairo_composite_rectangles_t
*rects
);
669 cairo_warn cairo_bool_t
670 (*check_span_renderer
) (cairo_operator_t op
,
671 const cairo_pattern_t
*pattern
,
673 cairo_antialias_t antialias
,
674 const cairo_composite_rectangles_t
*rects
);
676 cairo_warn cairo_int_status_t
677 (*copy_page
) (void *surface
);
679 cairo_warn cairo_int_status_t
680 (*show_page
) (void *surface
);
682 /* Set given region as the clip region for the surface, replacing
683 * any previously set clip region. Passing in a NULL region will
684 * clear the surface clip region.
686 * The surface is expected to store the clip region and clip all
687 * following drawing operations against it until the clip region
688 * is cleared of replaced by another clip region.
690 * Cairo will call this function whenever a clip path can be
691 * represented as a device pixel aligned set of rectangles. When
692 * this is not possible, cairo will use mask surfaces for
695 cairo_warn cairo_int_status_t
696 (*set_clip_region
) (void *surface
,
697 cairo_region_t
*region
);
699 /* Intersect the given path against the clip path currently set in
700 * the surface, using the given fill_rule and tolerance, and set
701 * the result as the new clipping path for the surface. Passing
702 * in a NULL path will clear the surface clipping path.
704 * The surface is expected to store the resulting clip path and
705 * clip all following drawing operations against it until the clip
706 * path cleared or intersected with a new path.
708 * If a surface implements this function, set_clip_region() will
709 * never be called and should not be implemented. If this
710 * function is not implemented cairo will use set_clip_region()
711 * (if available) and mask surfaces for clipping.
713 cairo_warn cairo_int_status_t
714 (*intersect_clip_path
) (void *dst
,
715 cairo_path_fixed_t
*path
,
716 cairo_fill_rule_t fill_rule
,
718 cairo_antialias_t antialias
);
720 /* Get the extents of the current surface. For many surface types
721 * this will be as simple as { x=0, y=0, width=surface->width,
722 * height=surface->height}.
724 * This function need not take account of any clipping from
725 * set_clip_region since the generic version of set_clip_region
726 * saves those, and the generic get_clip_extents will only call
727 * into the specific surface->get_extents if there is no current
730 * If this function is not implemented, or if it returns
731 * %CAIRO_INT_STATUS_UNSUPPORTED, the surface is considered to be
732 * boundless and inifnite bounds are used for it.
734 cairo_warn cairo_int_status_t
735 (*get_extents
) (void *surface
,
736 cairo_rectangle_int_t
*extents
);
739 * This is an optional entry to let the surface manage its own glyph
740 * resources. If null, render against this surface, using image
741 * surfaces as glyphs.
743 cairo_warn cairo_int_status_t
744 (*old_show_glyphs
) (cairo_scaled_font_t
*font
,
746 const cairo_pattern_t
*pattern
,
754 cairo_glyph_t
*glyphs
,
758 (*get_font_options
) (void *surface
,
759 cairo_font_options_t
*options
);
761 cairo_warn cairo_status_t
762 (*flush
) (void *surface
);
764 cairo_warn cairo_status_t
765 (*mark_dirty_rectangle
) (void *surface
,
772 (*scaled_font_fini
) (cairo_scaled_font_t
*scaled_font
);
775 (*scaled_glyph_fini
) (cairo_scaled_glyph_t
*scaled_glyph
,
776 cairo_scaled_font_t
*scaled_font
);
778 /* OK, I'm starting over somewhat by defining the 5 top-level
779 * drawing operators for the surface backend here with consistent
780 * naming and argument-order conventions. */
781 cairo_warn cairo_int_status_t
782 (*paint
) (void *surface
,
784 const cairo_pattern_t
*source
,
785 cairo_rectangle_int_t
*extents
);
787 cairo_warn cairo_int_status_t
788 (*mask
) (void *surface
,
790 const cairo_pattern_t
*source
,
791 const cairo_pattern_t
*mask
,
792 cairo_rectangle_int_t
*extents
);
794 cairo_warn cairo_int_status_t
795 (*stroke
) (void *surface
,
797 const cairo_pattern_t
*source
,
798 cairo_path_fixed_t
*path
,
799 cairo_stroke_style_t
*style
,
801 cairo_matrix_t
*ctm_inverse
,
803 cairo_antialias_t antialias
,
804 cairo_rectangle_int_t
*extents
);
806 cairo_warn cairo_int_status_t
807 (*fill
) (void *surface
,
809 const cairo_pattern_t
*source
,
810 cairo_path_fixed_t
*path
,
811 cairo_fill_rule_t fill_rule
,
813 cairo_antialias_t antialias
,
814 cairo_rectangle_int_t
*extents
);
816 cairo_warn cairo_int_status_t
817 (*show_glyphs
) (void *surface
,
819 const cairo_pattern_t
*source
,
820 cairo_glyph_t
*glyphs
,
822 cairo_scaled_font_t
*scaled_font
,
823 int *remaining_glyphs
,
824 cairo_rectangle_int_t
*extents
);
827 (*snapshot
) (void *surface
);
830 (*is_similar
) (void *surface_a
,
832 cairo_content_t content
);
834 cairo_warn cairo_status_t
835 (*reset
) (void *surface
);
837 cairo_warn cairo_int_status_t
838 (*fill_stroke
) (void *surface
,
839 cairo_operator_t fill_op
,
840 const cairo_pattern_t
*fill_source
,
841 cairo_fill_rule_t fill_rule
,
842 double fill_tolerance
,
843 cairo_antialias_t fill_antialias
,
844 cairo_path_fixed_t
*path
,
845 cairo_operator_t stroke_op
,
846 const cairo_pattern_t
*stroke_source
,
847 cairo_stroke_style_t
*stroke_style
,
848 cairo_matrix_t
*stroke_ctm
,
849 cairo_matrix_t
*stroke_ctm_inverse
,
850 double stroke_tolerance
,
851 cairo_antialias_t stroke_antialias
,
852 cairo_rectangle_int_t
*extents
);
855 (*create_solid_pattern_surface
)
857 const cairo_solid_pattern_t
*solid_pattern
);
860 (*can_repaint_solid_pattern_surface
)
862 const cairo_solid_pattern_t
*solid_pattern
);
865 (*has_show_text_glyphs
) (void *surface
);
867 cairo_warn cairo_int_status_t
868 (*show_text_glyphs
) (void *surface
,
870 const cairo_pattern_t
*source
,
873 cairo_glyph_t
*glyphs
,
875 const cairo_text_cluster_t
*clusters
,
877 cairo_text_cluster_flags_t cluster_flags
,
878 cairo_scaled_font_t
*scaled_font
,
879 cairo_rectangle_int_t
*extents
);
881 cairo_warn cairo_int_status_t
882 (*set_multisampling_samples
) (void* surface
,
883 unsigned coverage_samples
,
884 unsigned color_samples
);
886 cairo_warn cairo_bool_t
887 (*enable_multisampling
) (void* surface
,
888 cairo_bool_t enable
);
893 cairo_reference_count_t ref_count
;
894 const cairo_space_backend_t
* backend
;
895 unsigned is_software
: 1;
898 #include "cairo-surface-private.h"
900 struct _cairo_image_surface
{
901 cairo_surface_t base
;
903 pixman_format_code_t pixman_format
;
904 cairo_format_t format
;
912 pixman_image_t
*pixman_image
;
914 unsigned owns_data
: 1;
915 unsigned has_clip
: 1;
916 unsigned transparency
: 2;
919 extern const cairo_private cairo_surface_backend_t _cairo_image_surface_backend
;
921 #define CAIRO_EXTEND_SURFACE_DEFAULT CAIRO_EXTEND_NONE
922 #define CAIRO_EXTEND_GRADIENT_DEFAULT CAIRO_EXTEND_PAD
923 #define CAIRO_FILTER_DEFAULT CAIRO_FILTER_GOOD
925 struct _cairo_pattern
{
926 cairo_pattern_type_t type
;
927 cairo_reference_count_t ref_count
;
928 cairo_status_t status
;
929 cairo_user_data_array_t user_data
;
931 cairo_matrix_t matrix
;
932 cairo_filter_t filter
;
933 cairo_extend_t extend
;
934 cairo_bool_t component_alpha
;
937 struct _cairo_solid_pattern
{
938 cairo_pattern_t base
;
940 cairo_content_t content
;
943 extern const cairo_private cairo_solid_pattern_t _cairo_pattern_black
;
945 typedef struct _cairo_surface_pattern
{
946 cairo_pattern_t base
;
948 cairo_surface_t
*surface
;
949 } cairo_surface_pattern_t
;
951 typedef struct _cairo_gradient_stop
{
954 } cairo_gradient_stop_t
;
956 typedef struct _cairo_gradient_pattern
{
957 cairo_pattern_t base
;
959 unsigned int n_stops
;
960 unsigned int stops_size
;
961 cairo_gradient_stop_t
*stops
;
962 cairo_gradient_stop_t stops_embedded
[2];
963 } cairo_gradient_pattern_t
;
965 typedef struct _cairo_linear_pattern
{
966 cairo_gradient_pattern_t base
;
970 } cairo_linear_pattern_t
;
972 typedef struct _cairo_radial_pattern
{
973 cairo_gradient_pattern_t base
;
979 } cairo_radial_pattern_t
;
982 cairo_gradient_pattern_t base
;
984 cairo_linear_pattern_t linear
;
985 cairo_radial_pattern_t radial
;
986 } cairo_gradient_pattern_union_t
;
989 cairo_pattern_t base
;
991 cairo_solid_pattern_t solid
;
992 cairo_surface_pattern_t surface
;
993 cairo_gradient_pattern_union_t gradient
;
994 } cairo_pattern_union_t
;
996 typedef struct _cairo_surface_attributes
{
997 cairo_matrix_t matrix
;
998 cairo_extend_t extend
;
999 cairo_filter_t filter
;
1000 cairo_bool_t component_alpha
;
1004 } cairo_surface_attributes_t
;
1006 typedef struct _cairo_traps
{
1007 cairo_status_t status
;
1009 cairo_box_t extents
;
1013 cairo_trapezoid_t
*traps
;
1014 /* embed enough storage for a stroked rectangle */
1015 cairo_trapezoid_t traps_embedded
[4];
1017 cairo_bool_t has_limits
;
1021 #define CAIRO_FONT_SLANT_DEFAULT CAIRO_FONT_SLANT_NORMAL
1022 #define CAIRO_FONT_WEIGHT_DEFAULT CAIRO_FONT_WEIGHT_NORMAL
1024 #define CAIRO_WIN32_FONT_FAMILY_DEFAULT "Arial"
1025 #define CAIRO_QUARTZ_FONT_FAMILY_DEFAULT "Helvetica"
1026 #define CAIRO_FT_FONT_FAMILY_DEFAULT ""
1027 #define CAIRO_USER_FONT_FAMILY_DEFAULT "@cairo:"
1029 #if CAIRO_HAS_WIN32_FONT
1031 #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_WIN32_FONT_FAMILY_DEFAULT
1032 #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_win32_font_face_backend
1034 #elif CAIRO_HAS_QUARTZ_FONT
1036 #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_QUARTZ_FONT_FAMILY_DEFAULT
1037 #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_quartz_font_face_backend
1039 #elif CAIRO_HAS_FT_FONT
1041 #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_FT_FONT_FAMILY_DEFAULT
1042 #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_ft_font_face_backend
1046 #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_FT_FONT_FAMILY_DEFAULT
1047 #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_user_font_face_backend
1051 #define CAIRO_GSTATE_OPERATOR_DEFAULT CAIRO_OPERATOR_OVER
1052 #define CAIRO_GSTATE_TOLERANCE_DEFAULT 0.1
1053 #define CAIRO_GSTATE_FILL_RULE_DEFAULT CAIRO_FILL_RULE_WINDING
1054 #define CAIRO_GSTATE_LINE_WIDTH_DEFAULT 2.0
1055 #define CAIRO_GSTATE_LINE_CAP_DEFAULT CAIRO_LINE_CAP_BUTT
1056 #define CAIRO_GSTATE_LINE_JOIN_DEFAULT CAIRO_LINE_JOIN_MITER
1057 #define CAIRO_GSTATE_MITER_LIMIT_DEFAULT 10.0
1058 #define CAIRO_GSTATE_DEFAULT_FONT_SIZE 10.0
1060 #define CAIRO_SURFACE_RESOLUTION_DEFAULT 72.0
1061 #define CAIRO_SURFACE_FALLBACK_RESOLUTION_DEFAULT 300.0
1063 typedef struct _cairo_stroke_face
{
1065 cairo_point_t point
;
1067 cairo_slope_t dev_vector
;
1068 cairo_point_double_t usr_vector
;
1069 } cairo_stroke_face_t
;
1073 static inline double cairo_const
1074 _cairo_restrict_value (double value
, double min
, double max
)
1078 else if (value
> max
)
1084 /* C99 round() rounds to the nearest integral value with halfway cases rounded
1085 * away from 0. _cairo_round rounds halfway cases toward negative infinity.
1086 * This matches the rounding behaviour of _cairo_lround. */
1087 static inline double cairo_const
1088 _cairo_round (double r
)
1090 return floor (r
+ .5);
1094 _cairo_lround (double d
) cairo_const
;
1096 /* cairo-gstate.c */
1097 cairo_private cairo_status_t
1098 _cairo_gstate_init (cairo_gstate_t
*gstate
,
1099 cairo_surface_t
*target
);
1102 _cairo_gstate_fini (cairo_gstate_t
*gstate
);
1104 cairo_private cairo_status_t
1105 _cairo_gstate_save (cairo_gstate_t
**gstate
, cairo_gstate_t
**freelist
);
1107 cairo_private cairo_status_t
1108 _cairo_gstate_restore (cairo_gstate_t
**gstate
, cairo_gstate_t
**freelist
);
1110 cairo_private cairo_bool_t
1111 _cairo_gstate_is_redirected (cairo_gstate_t
*gstate
);
1113 cairo_private cairo_status_t
1114 _cairo_gstate_redirect_target (cairo_gstate_t
*gstate
, cairo_surface_t
*child
);
1116 cairo_private cairo_surface_t
*
1117 _cairo_gstate_get_target (cairo_gstate_t
*gstate
);
1119 cairo_private cairo_surface_t
*
1120 _cairo_gstate_get_parent_target (cairo_gstate_t
*gstate
);
1122 cairo_private cairo_surface_t
*
1123 _cairo_gstate_get_original_target (cairo_gstate_t
*gstate
);
1125 cairo_private cairo_clip_t
*
1126 _cairo_gstate_get_clip (cairo_gstate_t
*gstate
);
1128 cairo_private cairo_status_t
1129 _cairo_gstate_set_source (cairo_gstate_t
*gstate
, cairo_pattern_t
*source
);
1131 cairo_private cairo_pattern_t
*
1132 _cairo_gstate_get_source (cairo_gstate_t
*gstate
);
1134 cairo_private cairo_status_t
1135 _cairo_gstate_set_operator (cairo_gstate_t
*gstate
, cairo_operator_t op
);
1137 cairo_private cairo_operator_t
1138 _cairo_gstate_get_operator (cairo_gstate_t
*gstate
);
1140 cairo_private cairo_status_t
1141 _cairo_gstate_set_tolerance (cairo_gstate_t
*gstate
, double tolerance
);
1143 cairo_private
double
1144 _cairo_gstate_get_tolerance (cairo_gstate_t
*gstate
);
1146 cairo_private cairo_status_t
1147 _cairo_gstate_set_fill_rule (cairo_gstate_t
*gstate
, cairo_fill_rule_t fill_rule
);
1149 cairo_private cairo_fill_rule_t
1150 _cairo_gstate_get_fill_rule (cairo_gstate_t
*gstate
);
1152 cairo_private cairo_status_t
1153 _cairo_gstate_set_line_width (cairo_gstate_t
*gstate
, double width
);
1155 cairo_private
double
1156 _cairo_gstate_get_line_width (cairo_gstate_t
*gstate
);
1158 cairo_private cairo_status_t
1159 _cairo_gstate_set_line_cap (cairo_gstate_t
*gstate
, cairo_line_cap_t line_cap
);
1161 cairo_private cairo_line_cap_t
1162 _cairo_gstate_get_line_cap (cairo_gstate_t
*gstate
);
1164 cairo_private cairo_status_t
1165 _cairo_gstate_set_line_join (cairo_gstate_t
*gstate
, cairo_line_join_t line_join
);
1167 cairo_private cairo_line_join_t
1168 _cairo_gstate_get_line_join (cairo_gstate_t
*gstate
);
1170 cairo_private cairo_status_t
1171 _cairo_gstate_set_dash (cairo_gstate_t
*gstate
, const double *dash
, int num_dashes
, double offset
);
1174 _cairo_gstate_get_dash (cairo_gstate_t
*gstate
, double *dash
, int *num_dashes
, double *offset
);
1176 cairo_private cairo_status_t
1177 _cairo_gstate_set_miter_limit (cairo_gstate_t
*gstate
, double limit
);
1179 cairo_private
double
1180 _cairo_gstate_get_miter_limit (cairo_gstate_t
*gstate
);
1183 _cairo_gstate_get_matrix (cairo_gstate_t
*gstate
, cairo_matrix_t
*matrix
);
1185 cairo_private cairo_status_t
1186 _cairo_gstate_translate (cairo_gstate_t
*gstate
, double tx
, double ty
);
1188 cairo_private cairo_status_t
1189 _cairo_gstate_scale (cairo_gstate_t
*gstate
, double sx
, double sy
);
1191 cairo_private cairo_status_t
1192 _cairo_gstate_rotate (cairo_gstate_t
*gstate
, double angle
);
1194 cairo_private cairo_status_t
1195 _cairo_gstate_transform (cairo_gstate_t
*gstate
,
1196 const cairo_matrix_t
*matrix
);
1198 cairo_private cairo_status_t
1199 _cairo_gstate_set_matrix (cairo_gstate_t
*gstate
,
1200 const cairo_matrix_t
*matrix
);
1203 _cairo_gstate_identity_matrix (cairo_gstate_t
*gstate
);
1206 _cairo_gstate_user_to_device (cairo_gstate_t
*gstate
, double *x
, double *y
);
1209 _cairo_gstate_user_to_device_distance (cairo_gstate_t
*gstate
, double *dx
, double *dy
);
1212 _cairo_gstate_device_to_user (cairo_gstate_t
*gstate
, double *x
, double *y
);
1215 _cairo_gstate_device_to_user_distance (cairo_gstate_t
*gstate
, double *dx
, double *dy
);
1218 _cairo_gstate_user_to_backend (cairo_gstate_t
*gstate
, double *x
, double *y
);
1221 _cairo_gstate_backend_to_user (cairo_gstate_t
*gstate
, double *x
, double *y
);
1224 _cairo_gstate_backend_to_user_rectangle (cairo_gstate_t
*gstate
,
1225 double *x1
, double *y1
,
1226 double *x2
, double *y2
,
1227 cairo_bool_t
*is_tight
);
1230 _cairo_gstate_path_extents (cairo_gstate_t
*gstate
,
1231 cairo_path_fixed_t
*path
,
1232 double *x1
, double *y1
,
1233 double *x2
, double *y2
);
1235 cairo_private cairo_status_t
1236 _cairo_gstate_paint (cairo_gstate_t
*gstate
);
1238 cairo_private cairo_status_t
1239 _cairo_gstate_mask (cairo_gstate_t
*gstate
,
1240 cairo_pattern_t
*mask
);
1242 cairo_private cairo_status_t
1243 _cairo_gstate_stroke (cairo_gstate_t
*gstate
, cairo_path_fixed_t
*path
);
1245 cairo_private cairo_status_t
1246 _cairo_gstate_fill (cairo_gstate_t
*gstate
, cairo_path_fixed_t
*path
);
1248 cairo_private cairo_status_t
1249 _cairo_gstate_copy_page (cairo_gstate_t
*gstate
);
1251 cairo_private cairo_status_t
1252 _cairo_gstate_show_page (cairo_gstate_t
*gstate
);
1254 cairo_private cairo_status_t
1255 _cairo_gstate_stroke_extents (cairo_gstate_t
*gstate
,
1256 cairo_path_fixed_t
*path
,
1257 double *x1
, double *y1
,
1258 double *x2
, double *y2
);
1260 cairo_private cairo_status_t
1261 _cairo_gstate_fill_extents (cairo_gstate_t
*gstate
,
1262 cairo_path_fixed_t
*path
,
1263 double *x1
, double *y1
,
1264 double *x2
, double *y2
);
1266 cairo_private cairo_status_t
1267 _cairo_gstate_in_stroke (cairo_gstate_t
*gstate
,
1268 cairo_path_fixed_t
*path
,
1271 cairo_bool_t
*inside_ret
);
1274 _cairo_gstate_in_fill (cairo_gstate_t
*gstate
,
1275 cairo_path_fixed_t
*path
,
1278 cairo_bool_t
*inside_ret
);
1280 cairo_private cairo_status_t
1281 _cairo_gstate_clip (cairo_gstate_t
*gstate
, cairo_path_fixed_t
*path
);
1283 cairo_private cairo_status_t
1284 _cairo_gstate_reset_clip (cairo_gstate_t
*gstate
);
1286 cairo_private cairo_status_t
1287 _cairo_gstate_clip_extents (cairo_gstate_t
*gstate
,
1293 cairo_private cairo_rectangle_list_t
*
1294 _cairo_gstate_copy_clip_rectangle_list (cairo_gstate_t
*gstate
);
1296 cairo_private cairo_status_t
1297 _cairo_gstate_show_surface (cairo_gstate_t
*gstate
,
1298 cairo_surface_t
*surface
,
1304 cairo_private cairo_status_t
1305 _cairo_gstate_select_font_face (cairo_gstate_t
*gstate
,
1307 cairo_font_slant_t slant
,
1308 cairo_font_weight_t weight
);
1310 cairo_private cairo_status_t
1311 _cairo_gstate_set_font_size (cairo_gstate_t
*gstate
,
1315 _cairo_gstate_get_font_matrix (cairo_gstate_t
*gstate
,
1316 cairo_matrix_t
*matrix
);
1318 cairo_private cairo_status_t
1319 _cairo_gstate_set_font_matrix (cairo_gstate_t
*gstate
,
1320 const cairo_matrix_t
*matrix
);
1323 _cairo_gstate_get_font_options (cairo_gstate_t
*gstate
,
1324 cairo_font_options_t
*options
);
1327 _cairo_gstate_set_font_options (cairo_gstate_t
*gstate
,
1328 const cairo_font_options_t
*options
);
1330 cairo_private cairo_status_t
1331 _cairo_gstate_get_font_face (cairo_gstate_t
*gstate
,
1332 cairo_font_face_t
**font_face
);
1334 cairo_private cairo_status_t
1335 _cairo_gstate_get_scaled_font (cairo_gstate_t
*gstate
,
1336 cairo_scaled_font_t
**scaled_font
);
1338 cairo_private cairo_status_t
1339 _cairo_gstate_get_font_extents (cairo_gstate_t
*gstate
,
1340 cairo_font_extents_t
*extents
);
1342 cairo_private cairo_status_t
1343 _cairo_gstate_set_font_face (cairo_gstate_t
*gstate
,
1344 cairo_font_face_t
*font_face
);
1346 cairo_private cairo_status_t
1347 _cairo_gstate_text_to_glyphs (cairo_gstate_t
*gstate
,
1352 cairo_glyph_t
**glyphs
,
1354 cairo_text_cluster_t
**clusters
,
1356 cairo_text_cluster_flags_t
*cluster_flags
);
1358 cairo_private cairo_status_t
1359 _cairo_gstate_glyph_extents (cairo_gstate_t
*gstate
,
1360 const cairo_glyph_t
*glyphs
,
1362 cairo_text_extents_t
*extents
);
1364 cairo_private cairo_status_t
1365 _cairo_gstate_show_text_glyphs (cairo_gstate_t
*gstate
,
1368 const cairo_glyph_t
*glyphs
,
1370 const cairo_text_cluster_t
*clusters
,
1372 cairo_text_cluster_flags_t cluster_flags
);
1374 cairo_private cairo_status_t
1375 _cairo_gstate_glyph_path (cairo_gstate_t
*gstate
,
1376 const cairo_glyph_t
*glyphs
,
1378 cairo_path_fixed_t
*path
);
1380 cairo_private cairo_status_t
1381 _cairo_gstate_set_antialias (cairo_gstate_t
*gstate
,
1382 cairo_antialias_t antialias
);
1384 cairo_private cairo_antialias_t
1385 _cairo_gstate_get_antialias (cairo_gstate_t
*gstate
);
1387 cairo_private cairo_bool_t
1388 _cairo_operator_bounded_by_mask (cairo_operator_t op
) cairo_const
;
1390 cairo_private cairo_bool_t
1391 _cairo_operator_bounded_by_source (cairo_operator_t op
) cairo_const
;
1394 cairo_private
const cairo_color_t
*
1395 _cairo_stock_color (cairo_stock_t stock
) cairo_pure
;
1397 #define CAIRO_COLOR_WHITE _cairo_stock_color (CAIRO_STOCK_WHITE)
1398 #define CAIRO_COLOR_BLACK _cairo_stock_color (CAIRO_STOCK_BLACK)
1399 #define CAIRO_COLOR_TRANSPARENT _cairo_stock_color (CAIRO_STOCK_TRANSPARENT)
1401 cairo_private
uint16_t
1402 _cairo_color_double_to_short (double d
) cairo_const
;
1405 _cairo_color_init (cairo_color_t
*color
);
1408 _cairo_color_init_rgb (cairo_color_t
*color
,
1409 double red
, double green
, double blue
);
1412 _cairo_color_init_rgba (cairo_color_t
*color
,
1413 double red
, double green
, double blue
,
1417 _cairo_color_multiply_alpha (cairo_color_t
*color
,
1421 _cairo_color_get_rgba (cairo_color_t
*color
,
1428 _cairo_color_get_rgba_premultiplied (cairo_color_t
*color
,
1434 cairo_private cairo_bool_t
1435 _cairo_color_equal (const cairo_color_t
*color_a
,
1436 const cairo_color_t
*color_b
) cairo_pure
;
1438 /* cairo-font-face.c */
1440 extern const cairo_private cairo_font_face_t _cairo_font_face_nil
;
1443 _cairo_font_face_init (cairo_font_face_t
*font_face
,
1444 const cairo_font_face_backend_t
*backend
);
1446 cairo_private cairo_status_t
1447 _cairo_font_face_set_error (cairo_font_face_t
*font_face
,
1448 cairo_status_t status
);
1451 _cairo_unscaled_font_init (cairo_unscaled_font_t
*font
,
1452 const cairo_unscaled_font_backend_t
*backend
);
1454 cairo_private_no_warn cairo_unscaled_font_t
*
1455 _cairo_unscaled_font_reference (cairo_unscaled_font_t
*font
);
1458 _cairo_unscaled_font_destroy (cairo_unscaled_font_t
*font
);
1460 /* cairo-font-face-twin.c */
1462 cairo_private cairo_font_face_t
*
1463 _cairo_font_face_twin_create_fallback (void);
1465 cairo_private cairo_status_t
1466 _cairo_font_face_twin_create_for_toy (cairo_toy_font_face_t
*toy_face
,
1467 cairo_font_face_t
**font_face
);
1469 /* cairo-font-face-twin-data.c */
1471 extern const cairo_private
int8_t _cairo_twin_outlines
[];
1472 extern const cairo_private
uint16_t _cairo_twin_charmap
[128];
1474 /* cairo-font-options.c */
1477 _cairo_font_options_init_default (cairo_font_options_t
*options
);
1480 _cairo_font_options_init_copy (cairo_font_options_t
*options
,
1481 const cairo_font_options_t
*other
);
1483 /* cairo-half-float.c */
1485 cairo_private
unsigned short
1486 _cairo_float_to_half(float val
);
1489 _cairo_half_to_float(unsigned short val
);
1492 cairo_private cairo_status_t
1493 _cairo_hull_compute (cairo_pen_vertex_t
*vertices
, int *num_vertices
);
1496 cairo_private
unsigned char *
1497 _cairo_lzw_compress (unsigned char *data
, unsigned long *size_in_out
);
1500 cairo_private cairo_status_t
1501 _cairo_validate_text_clusters (const char *utf8
,
1503 const cairo_glyph_t
*glyphs
,
1505 const cairo_text_cluster_t
*clusters
,
1507 cairo_text_cluster_flags_t cluster_flags
);
1509 cairo_private cairo_status_t
1510 _cairo_intern_string (const char **str_inout
, int len
);
1513 _cairo_intern_string_reset_static_data (void);
1515 cairo_private
long long
1518 /* cairo-path-fixed.c */
1520 _cairo_path_fixed_init (cairo_path_fixed_t
*path
);
1522 cairo_private cairo_status_t
1523 _cairo_path_fixed_init_copy (cairo_path_fixed_t
*path
,
1524 cairo_path_fixed_t
*other
);
1526 cairo_private cairo_bool_t
1527 _cairo_path_fixed_is_equal (cairo_path_fixed_t
*path
,
1528 cairo_path_fixed_t
*other
);
1530 cairo_private cairo_path_fixed_t
*
1531 _cairo_path_fixed_create (void);
1534 _cairo_path_fixed_fini (cairo_path_fixed_t
*path
);
1537 _cairo_path_fixed_destroy (cairo_path_fixed_t
*path
);
1539 cairo_private cairo_status_t
1540 _cairo_path_fixed_move_to (cairo_path_fixed_t
*path
,
1545 _cairo_path_fixed_new_sub_path (cairo_path_fixed_t
*path
);
1547 cairo_private cairo_status_t
1548 _cairo_path_fixed_rel_move_to (cairo_path_fixed_t
*path
,
1552 cairo_private cairo_status_t
1553 _cairo_path_fixed_line_to (cairo_path_fixed_t
*path
,
1557 cairo_private cairo_status_t
1558 _cairo_path_fixed_rel_line_to (cairo_path_fixed_t
*path
,
1562 cairo_private cairo_status_t
1563 _cairo_path_fixed_curve_to (cairo_path_fixed_t
*path
,
1564 cairo_fixed_t x0
, cairo_fixed_t y0
,
1565 cairo_fixed_t x1
, cairo_fixed_t y1
,
1566 cairo_fixed_t x2
, cairo_fixed_t y2
);
1568 cairo_private cairo_status_t
1569 _cairo_path_fixed_rel_curve_to (cairo_path_fixed_t
*path
,
1570 cairo_fixed_t dx0
, cairo_fixed_t dy0
,
1571 cairo_fixed_t dx1
, cairo_fixed_t dy1
,
1572 cairo_fixed_t dx2
, cairo_fixed_t dy2
);
1574 cairo_private cairo_status_t
1575 _cairo_path_fixed_close_path (cairo_path_fixed_t
*path
);
1577 cairo_private cairo_bool_t
1578 _cairo_path_fixed_get_current_point (cairo_path_fixed_t
*path
,
1582 typedef cairo_status_t
1583 (cairo_path_fixed_move_to_func_t
) (void *closure
,
1584 const cairo_point_t
*point
);
1586 typedef cairo_status_t
1587 (cairo_path_fixed_line_to_func_t
) (void *closure
,
1588 const cairo_point_t
*point
);
1590 typedef cairo_status_t
1591 (cairo_path_fixed_curve_to_func_t
) (void *closure
,
1592 const cairo_point_t
*p0
,
1593 const cairo_point_t
*p1
,
1594 const cairo_point_t
*p2
);
1596 typedef cairo_status_t
1597 (cairo_path_fixed_close_path_func_t
) (void *closure
);
1599 cairo_private cairo_status_t
1600 _cairo_path_fixed_interpret (const cairo_path_fixed_t
*path
,
1601 cairo_direction_t dir
,
1602 cairo_path_fixed_move_to_func_t
*move_to
,
1603 cairo_path_fixed_line_to_func_t
*line_to
,
1604 cairo_path_fixed_curve_to_func_t
*curve_to
,
1605 cairo_path_fixed_close_path_func_t
*close_path
,
1608 cairo_private cairo_status_t
1609 _cairo_path_fixed_interpret_flat (const cairo_path_fixed_t
*path
,
1610 cairo_direction_t dir
,
1611 cairo_path_fixed_move_to_func_t
*move_to
,
1612 cairo_path_fixed_line_to_func_t
*line_to
,
1613 cairo_path_fixed_close_path_func_t
*close_path
,
1617 cairo_private cairo_status_t
1618 _cairo_path_fixed_append (cairo_path_fixed_t
*path
,
1619 const cairo_path_fixed_t
*other
,
1620 cairo_direction_t dir
);
1623 _cairo_path_fixed_approximate_clip_extents (cairo_path_fixed_t
*path
,
1624 cairo_rectangle_int_t
*extents
);
1627 _cairo_path_fixed_approximate_fill_extents (cairo_path_fixed_t
*path
,
1628 cairo_rectangle_int_t
*extents
);
1631 _cairo_path_fixed_approximate_stroke_extents (cairo_path_fixed_t
*path
,
1632 cairo_stroke_style_t
*style
,
1633 const cairo_matrix_t
*ctm
,
1634 cairo_rectangle_int_t
*extents
);
1637 _cairo_path_fixed_bounds (cairo_path_fixed_t
*path
,
1638 double *x1
, double *y1
,
1639 double *x2
, double *y2
);
1642 _cairo_path_fixed_transform (cairo_path_fixed_t
*path
,
1643 cairo_matrix_t
*matrix
);
1645 cairo_private cairo_bool_t
1646 _cairo_path_fixed_is_empty (cairo_path_fixed_t
*path
);
1648 cairo_private cairo_bool_t
1649 _cairo_path_fixed_is_box (cairo_path_fixed_t
*path
,
1652 cairo_private cairo_bool_t
1653 _cairo_path_fixed_is_rectangle (cairo_path_fixed_t
*path
,
1656 cairo_private cairo_bool_t
1657 _cairo_path_fixed_is_region (cairo_path_fixed_t
*path
);
1659 /* cairo-path-in-fill.c */
1661 _cairo_path_fixed_in_fill (cairo_path_fixed_t
*path
,
1662 cairo_fill_rule_t fill_rule
,
1666 cairo_bool_t
*is_inside
);
1668 /* cairo-path-fill.c */
1669 cairo_private cairo_status_t
1670 _cairo_path_fixed_fill_to_traps (cairo_path_fixed_t
*path
,
1671 cairo_fill_rule_t fill_rule
,
1673 cairo_traps_t
*traps
);
1675 /* cairo-path-stroke.c */
1676 cairo_private cairo_status_t
1677 _cairo_path_fixed_stroke_to_traps (cairo_path_fixed_t
*path
,
1678 cairo_stroke_style_t
*stroke_style
,
1679 const cairo_matrix_t
*ctm
,
1680 const cairo_matrix_t
*ctm_inverse
,
1682 cairo_traps_t
*traps
);
1684 /* cairo-scaled-font.c */
1687 _cairo_scaled_font_freeze_cache (cairo_scaled_font_t
*scaled_font
);
1690 _cairo_scaled_font_thaw_cache (cairo_scaled_font_t
*scaled_font
);
1693 _cairo_scaled_font_reset_cache (cairo_scaled_font_t
*scaled_font
);
1695 cairo_private cairo_status_t
1696 _cairo_scaled_font_set_error (cairo_scaled_font_t
*scaled_font
,
1697 cairo_status_t status
);
1699 cairo_private cairo_scaled_font_t
*
1700 _cairo_scaled_font_create_in_error (cairo_status_t status
);
1703 _cairo_scaled_font_reset_static_data (void);
1705 cairo_private cairo_status_t
1706 _cairo_scaled_font_register_placeholder_and_unlock_font_map (cairo_scaled_font_t
*scaled_font
);
1709 _cairo_scaled_font_unregister_placeholder_and_lock_font_map (cairo_scaled_font_t
*scaled_font
);
1711 cairo_private cairo_status_t
1712 _cairo_scaled_font_init (cairo_scaled_font_t
*scaled_font
,
1713 cairo_font_face_t
*font_face
,
1714 const cairo_matrix_t
*font_matrix
,
1715 const cairo_matrix_t
*ctm
,
1716 const cairo_font_options_t
*options
,
1717 const cairo_scaled_font_backend_t
*backend
);
1719 cairo_private cairo_status_t
1720 _cairo_scaled_font_set_metrics (cairo_scaled_font_t
*scaled_font
,
1721 cairo_font_extents_t
*fs_metrics
);
1723 /* This should only be called on an error path by a scaled_font constructor */
1725 _cairo_scaled_font_fini (cairo_scaled_font_t
*scaled_font
);
1727 cairo_private cairo_status_t
1728 _cairo_scaled_font_font_extents (cairo_scaled_font_t
*scaled_font
,
1729 cairo_font_extents_t
*extents
);
1731 cairo_private cairo_status_t
1732 _cairo_scaled_font_glyph_device_extents (cairo_scaled_font_t
*scaled_font
,
1733 const cairo_glyph_t
*glyphs
,
1735 cairo_rectangle_int_t
*extents
);
1737 cairo_private cairo_status_t
1738 _cairo_scaled_font_show_glyphs (cairo_scaled_font_t
*scaled_font
,
1739 cairo_operator_t op
,
1740 const cairo_pattern_t
*source
,
1741 cairo_surface_t
*surface
,
1747 unsigned int height
,
1748 cairo_glyph_t
*glyphs
,
1751 cairo_private cairo_status_t
1752 _cairo_scaled_font_glyph_path (cairo_scaled_font_t
*scaled_font
,
1753 const cairo_glyph_t
*glyphs
,
1755 cairo_path_fixed_t
*path
);
1758 _cairo_scaled_glyph_set_metrics (cairo_scaled_glyph_t
*scaled_glyph
,
1759 cairo_scaled_font_t
*scaled_font
,
1760 cairo_text_extents_t
*fs_metrics
);
1763 _cairo_scaled_glyph_set_surface (cairo_scaled_glyph_t
*scaled_glyph
,
1764 cairo_scaled_font_t
*scaled_font
,
1765 cairo_image_surface_t
*surface
);
1768 _cairo_scaled_glyph_set_path (cairo_scaled_glyph_t
*scaled_glyph
,
1769 cairo_scaled_font_t
*scaled_font
,
1770 cairo_path_fixed_t
*path
);
1773 _cairo_scaled_glyph_set_meta_surface (cairo_scaled_glyph_t
*scaled_glyph
,
1774 cairo_scaled_font_t
*scaled_font
,
1775 cairo_surface_t
*meta_surface
);
1777 cairo_private cairo_int_status_t
1778 _cairo_scaled_glyph_lookup (cairo_scaled_font_t
*scaled_font
,
1779 unsigned long index
,
1780 cairo_scaled_glyph_info_t info
,
1781 cairo_scaled_glyph_t
**scaled_glyph_ret
);
1783 cairo_private
double
1784 _cairo_scaled_font_get_max_scale (cairo_scaled_font_t
*scaled_font
);
1787 _cairo_scaled_font_map_destroy (void);
1789 /* cairo-stroke-style.c */
1792 _cairo_stroke_style_init (cairo_stroke_style_t
*style
);
1794 cairo_private cairo_status_t
1795 _cairo_stroke_style_init_copy (cairo_stroke_style_t
*style
,
1796 cairo_stroke_style_t
*other
);
1799 _cairo_stroke_style_fini (cairo_stroke_style_t
*style
);
1802 _cairo_stroke_style_max_distance_from_path (const cairo_stroke_style_t
*style
,
1803 const cairo_matrix_t
*ctm
,
1804 double *dx
, double *dy
);
1806 /* cairo-surface.c */
1808 cairo_private cairo_surface_t
*
1809 _cairo_surface_create_in_error (cairo_status_t status
);
1811 cairo_private cairo_status_t
1812 _cairo_surface_copy_mime_data (cairo_surface_t
*dst
,
1813 cairo_surface_t
*src
);
1815 cairo_private cairo_status_t
1816 _cairo_surface_set_error (cairo_surface_t
*surface
,
1817 cairo_status_t status
);
1820 _cairo_surface_set_resolution (cairo_surface_t
*surface
,
1824 cairo_private cairo_surface_t
*
1825 _cairo_surface_create_similar_scratch (cairo_surface_t
*other
,
1826 cairo_content_t content
,
1830 cairo_private cairo_surface_t
*
1831 _cairo_surface_create_similar_solid (cairo_surface_t
*other
,
1832 cairo_content_t content
,
1835 const cairo_color_t
*color
);
1837 cairo_private cairo_surface_t
*
1838 _cairo_surface_create_solid_pattern_surface (cairo_surface_t
*other
,
1839 const cairo_solid_pattern_t
*solid_pattern
);
1841 cairo_private cairo_int_status_t
1842 _cairo_surface_repaint_solid_pattern_surface (cairo_surface_t
*other
,
1843 cairo_surface_t
*solid_surface
,
1844 const cairo_solid_pattern_t
*solid_pattern
);
1847 _cairo_surface_init (cairo_surface_t
*surface
,
1848 const cairo_surface_backend_t
*backend
,
1849 cairo_content_t content
);
1852 _cairo_surface_set_font_options (cairo_surface_t
*surface
,
1853 cairo_font_options_t
*options
);
1855 cairo_private cairo_clip_mode_t
1856 _cairo_surface_get_clip_mode (cairo_surface_t
*surface
);
1858 cairo_private cairo_status_t
1859 _cairo_surface_composite (cairo_operator_t op
,
1860 const cairo_pattern_t
*src
,
1861 const cairo_pattern_t
*mask
,
1862 cairo_surface_t
*dst
,
1870 unsigned int height
);
1872 cairo_private cairo_status_t
1873 _cairo_surface_fill_rectangle (cairo_surface_t
*surface
,
1874 cairo_operator_t op
,
1875 const cairo_color_t
*color
,
1881 cairo_private cairo_status_t
1882 _cairo_surface_fill_region (cairo_surface_t
*surface
,
1883 cairo_operator_t op
,
1884 const cairo_color_t
*color
,
1885 cairo_region_t
*region
);
1887 cairo_private cairo_status_t
1888 _cairo_surface_fill_rectangles (cairo_surface_t
*surface
,
1889 cairo_operator_t op
,
1890 const cairo_color_t
*color
,
1891 cairo_rectangle_int_t
*rects
,
1894 cairo_private cairo_status_t
1895 _cairo_surface_paint (cairo_surface_t
*surface
,
1896 cairo_operator_t op
,
1897 const cairo_pattern_t
*source
,
1898 cairo_rectangle_int_t
*extents
);
1900 cairo_private cairo_status_t
1901 _cairo_surface_mask (cairo_surface_t
*surface
,
1902 cairo_operator_t op
,
1903 const cairo_pattern_t
*source
,
1904 const cairo_pattern_t
*mask
,
1905 cairo_rectangle_int_t
*extents
);
1907 cairo_private cairo_status_t
1908 _cairo_surface_fill_stroke (cairo_surface_t
*surface
,
1909 cairo_operator_t fill_op
,
1910 const cairo_pattern_t
*fill_source
,
1911 cairo_fill_rule_t fill_rule
,
1912 double fill_tolerance
,
1913 cairo_antialias_t fill_antialias
,
1914 cairo_path_fixed_t
*path
,
1915 cairo_operator_t stroke_op
,
1916 const cairo_pattern_t
*stroke_source
,
1917 cairo_stroke_style_t
*stroke_style
,
1918 cairo_matrix_t
*stroke_ctm
,
1919 cairo_matrix_t
*stroke_ctm_inverse
,
1920 double stroke_tolerance
,
1921 cairo_antialias_t stroke_antialias
,
1922 cairo_rectangle_int_t
*extents
);
1924 cairo_private cairo_status_t
1925 _cairo_surface_stroke (cairo_surface_t
*surface
,
1926 cairo_operator_t op
,
1927 const cairo_pattern_t
*source
,
1928 cairo_path_fixed_t
*path
,
1929 cairo_stroke_style_t
*style
,
1930 cairo_matrix_t
*ctm
,
1931 cairo_matrix_t
*ctm_inverse
,
1933 cairo_antialias_t antialias
,
1934 cairo_rectangle_int_t
*extents
);
1936 cairo_private cairo_status_t
1937 _cairo_surface_fill (cairo_surface_t
*surface
,
1938 cairo_operator_t op
,
1939 const cairo_pattern_t
*source
,
1940 cairo_path_fixed_t
*path
,
1941 cairo_fill_rule_t fill_rule
,
1943 cairo_antialias_t antialias
,
1944 cairo_rectangle_int_t
*extents
);
1946 cairo_private cairo_status_t
1947 _cairo_surface_show_text_glyphs (cairo_surface_t
*surface
,
1948 cairo_operator_t op
,
1949 const cairo_pattern_t
*source
,
1952 cairo_glyph_t
*glyphs
,
1954 const cairo_text_cluster_t
*clusters
,
1956 cairo_text_cluster_flags_t cluster_flags
,
1957 cairo_scaled_font_t
*scaled_font
,
1958 cairo_rectangle_int_t
*extents
);
1960 cairo_private cairo_status_t
1961 _cairo_surface_composite_trapezoids (cairo_operator_t op
,
1962 const cairo_pattern_t
*pattern
,
1963 cairo_surface_t
*dst
,
1964 cairo_antialias_t antialias
,
1970 unsigned int height
,
1971 cairo_trapezoid_t
*traps
,
1974 cairo_private cairo_span_renderer_t
*
1975 _cairo_surface_create_span_renderer (
1976 cairo_operator_t op
,
1977 const cairo_pattern_t
*pattern
,
1978 cairo_surface_t
*dst
,
1979 cairo_antialias_t antialias
,
1980 const cairo_composite_rectangles_t
*rects
);
1982 cairo_private cairo_bool_t
1983 _cairo_surface_check_span_renderer (
1984 cairo_operator_t op
,
1985 const cairo_pattern_t
*pattern
,
1986 cairo_surface_t
*dst
,
1987 cairo_antialias_t antialias
,
1988 const cairo_composite_rectangles_t
*rects
);
1990 cairo_private cairo_status_t
1991 _cairo_surface_acquire_source_image (cairo_surface_t
*surface
,
1992 cairo_image_surface_t
**image_out
,
1993 void **image_extra
);
1996 _cairo_surface_release_source_image (cairo_surface_t
*surface
,
1997 cairo_image_surface_t
*image
,
2000 cairo_private cairo_status_t
2001 _cairo_surface_acquire_dest_image (cairo_surface_t
*surface
,
2002 cairo_rectangle_int_t
*interest_rect
,
2003 cairo_image_surface_t
**image_out
,
2004 cairo_rectangle_int_t
*image_rect
,
2005 void **image_extra
);
2008 _cairo_surface_release_dest_image (cairo_surface_t
*surface
,
2009 cairo_rectangle_int_t
*interest_rect
,
2010 cairo_image_surface_t
*image
,
2011 cairo_rectangle_int_t
*image_rect
,
2014 cairo_private cairo_status_t
2015 _cairo_surface_clone_similar (cairo_surface_t
*surface
,
2016 cairo_surface_t
*src
,
2017 cairo_content_t content
,
2022 int *clone_offset_x
,
2023 int *clone_offset_y
,
2024 cairo_surface_t
**clone_out
);
2026 cairo_private cairo_surface_t
*
2027 _cairo_surface_snapshot (cairo_surface_t
*surface
);
2029 cairo_private cairo_status_t
2030 _cairo_surface_attach_snapshot (cairo_surface_t
*surface
,
2031 cairo_surface_t
*snapshot
,
2032 cairo_surface_func_t detach_func
);
2034 cairo_private cairo_surface_t
*
2035 _cairo_surface_has_snapshot (cairo_surface_t
*surface
,
2036 const cairo_surface_backend_t
*backend
);
2039 _cairo_surface_detach_snapshot (cairo_surface_t
*snapshot
);
2041 cairo_private cairo_bool_t
2042 _cairo_surface_is_similar (cairo_surface_t
*surface_a
,
2043 cairo_surface_t
*surface_b
,
2044 cairo_content_t content
);
2046 cairo_private cairo_status_t
2047 _cairo_surface_reset (cairo_surface_t
*surface
);
2049 cairo_private
unsigned int
2050 _cairo_surface_get_current_clip_serial (cairo_surface_t
*surface
);
2052 cairo_private
unsigned int
2053 _cairo_surface_allocate_clip_serial (cairo_surface_t
*surface
);
2055 cairo_private cairo_status_t
2056 _cairo_surface_reset_clip (cairo_surface_t
*surface
);
2058 cairo_private cairo_status_t
2059 _cairo_surface_set_clip_region (cairo_surface_t
*surface
,
2060 cairo_region_t
*region
,
2061 unsigned int serial
);
2063 cairo_private cairo_int_status_t
2064 _cairo_surface_intersect_clip_path (cairo_surface_t
*surface
,
2065 cairo_path_fixed_t
*path
,
2066 cairo_fill_rule_t fill_rule
,
2068 cairo_antialias_t antialias
);
2070 cairo_private cairo_clip_t
*
2071 _cairo_surface_get_clip (cairo_surface_t
*surface
);
2073 cairo_private cairo_status_t
2074 _cairo_surface_set_clip (cairo_surface_t
*surface
, cairo_clip_t
*clip
);
2076 cairo_private cairo_int_status_t
2077 _cairo_surface_get_extents (cairo_surface_t
*surface
,
2078 cairo_rectangle_int_t
*extents
);
2080 cairo_private cairo_status_t
2081 _cairo_surface_old_show_glyphs (cairo_scaled_font_t
*scaled_font
,
2082 cairo_operator_t op
,
2083 const cairo_pattern_t
*pattern
,
2084 cairo_surface_t
*surface
,
2090 unsigned int height
,
2091 cairo_glyph_t
*glyphs
,
2094 cairo_private cairo_status_t
2095 _cairo_surface_composite_fixup_unbounded (cairo_surface_t
*dst
,
2096 cairo_surface_attributes_t
*src_attr
,
2099 cairo_surface_attributes_t
*mask_attr
,
2109 unsigned int height
);
2111 cairo_private cairo_status_t
2112 _cairo_surface_composite_shape_fixup_unbounded (cairo_surface_t
*dst
,
2113 cairo_surface_attributes_t
*src_attr
,
2125 unsigned int height
);
2127 cairo_private cairo_bool_t
2128 _cairo_surface_is_opaque (const cairo_surface_t
*surface
);
2131 _cairo_surface_set_device_scale (cairo_surface_t
*surface
,
2135 cairo_private cairo_bool_t
2136 _cairo_surface_has_device_transform (cairo_surface_t
*surface
) cairo_pure
;
2138 /* cairo-image-surface.c */
2140 /* XXX: In cairo 1.2.0 we added a new %CAIRO_FORMAT_RGB16_565 but
2141 * neglected to adjust this macro. The net effect is that it's
2142 * impossible to externally create an image surface with this
2143 * format. This is perhaps a good thing since we also neglected to fix
2144 * up things like cairo_surface_write_to_png() for the new format
2145 * (-Wswitch-enum will tell you where). Is it obvious that format was
2148 * The reason for the new format was to allow the xlib backend to be
2149 * used on X servers with a 565 visual. So the new format did its job
2150 * for that, even without being considered "valid" for the sake of
2151 * things like cairo_image_surface_create().
2153 * Since 1.2.0 we ran into the same situtation with X servers with BGR
2154 * visuals. This time we invented #cairo_internal_format_t instead,
2155 * (see it for more discussion).
2157 * The punchline is that %CAIRO_FORMAT_VALID must not conside any
2158 * internal format to be valid. Also we need to decide if the
2159 * RGB16_565 should be moved to instead be an internal format. If so,
2160 * this macro need not change for it. (We probably will need to leave
2161 * an RGB16_565 value in the header files for the sake of code that
2162 * might have that value in it.)
2164 * If we do decide to start fully supporting RGB16_565 as an external
2165 * format, then %CAIRO_FORMAT_VALID needs to be adjusted to include
2166 * it. But that should not happen before all necessary code is fixed
2167 * to support it (at least cairo_surface_write_to_png() and a few spots
2168 * in cairo-xlib-surface.c--again see -Wswitch-enum).
2170 #define CAIRO_FORMAT_INVALID ((unsigned int) -1)
2171 #define CAIRO_FORMAT_VALID(format) ((format) <= CAIRO_FORMAT_A1)
2173 /* pixman-required stride alignment in bytes. */
2174 #define CAIRO_STRIDE_ALIGNMENT (sizeof (uint32_t))
2175 #define CAIRO_STRIDE_FOR_WIDTH_BPP(w,bpp) \
2176 ((((bpp)*(w)+7)/8 + CAIRO_STRIDE_ALIGNMENT-1) & -CAIRO_STRIDE_ALIGNMENT)
2178 #define CAIRO_CONTENT_VALID(content) ((content) && \
2179 (((content) & ~(CAIRO_CONTENT_COLOR | \
2180 CAIRO_CONTENT_ALPHA | \
2181 CAIRO_CONTENT_COLOR_ALPHA))\
2185 _cairo_format_bits_per_pixel (cairo_format_t format
) cairo_const
;
2187 cairo_private cairo_format_t
2188 _cairo_format_from_content (cairo_content_t content
) cairo_const
;
2190 cairo_private cairo_content_t
2191 _cairo_content_from_format (cairo_format_t format
) cairo_const
;
2193 cairo_private cairo_surface_t
*
2194 _cairo_image_surface_create_for_pixman_image (pixman_image_t
*pixman_image
,
2195 pixman_format_code_t pixman_format
);
2197 cairo_private cairo_bool_t
2198 _pixman_format_from_masks (cairo_format_masks_t
*masks
,
2199 pixman_format_code_t
*format_ret
);
2202 _pixman_format_to_masks (pixman_format_code_t pixman_format
,
2203 cairo_format_masks_t
*masks
);
2205 cairo_private cairo_surface_t
*
2206 _cairo_image_surface_create_with_pixman_format (unsigned char *data
,
2207 pixman_format_code_t pixman_format
,
2212 cairo_private cairo_surface_t
*
2213 _cairo_image_surface_create_with_masks (unsigned char *data
,
2214 cairo_format_masks_t
*format
,
2219 cairo_private cairo_surface_t
*
2220 _cairo_image_surface_create_with_content (cairo_content_t content
,
2224 cairo_private cairo_surface_t
*
2225 _cairo_image_surface_create_for_data_with_content (unsigned char *data
,
2226 cairo_content_t content
,
2232 _cairo_image_surface_assume_ownership_of_data (cairo_image_surface_t
*surface
);
2234 /* XXX: It's a nasty kludge that this appears here. Backend functions
2235 * like this should really be static. But we're doing this to work
2236 * around some general defects in the backend clipping interfaces,
2237 * (see some notes in test-paginated-surface.c).
2239 * I want to fix the real defects, but it's "hard" as they touch many
2240 * backends, so doing that will require synchronizing several backend
2243 cairo_private cairo_int_status_t
2244 _cairo_image_surface_set_clip_region (void *abstract_surface
,
2245 cairo_region_t
*region
);
2247 cairo_private cairo_image_surface_t
*
2248 _cairo_image_surface_coerce (cairo_image_surface_t
*surface
,
2249 cairo_format_t format
);
2251 _cairo_image_surface_span_render_row (int y
,
2252 const cairo_half_open_span_t
*spans
,
2254 cairo_image_surface_t
*mask
,
2255 const cairo_composite_rectangles_t
*rects
);
2257 cairo_private cairo_image_transparency_t
2258 _cairo_image_analyze_transparency (cairo_image_surface_t
*image
);
2260 cairo_private cairo_bool_t
2261 _cairo_surface_is_image (const cairo_surface_t
*surface
) cairo_pure
;
2263 cairo_private cairo_bool_t
2264 _cairo_surface_is_meta (const cairo_surface_t
*surface
) cairo_pure
;
2267 cairo_private cairo_status_t
2268 _cairo_pen_init (cairo_pen_t
*pen
,
2271 const cairo_matrix_t
*ctm
);
2274 _cairo_pen_init_empty (cairo_pen_t
*pen
);
2276 cairo_private cairo_status_t
2277 _cairo_pen_init_copy (cairo_pen_t
*pen
, const cairo_pen_t
*other
);
2280 _cairo_pen_fini (cairo_pen_t
*pen
);
2282 cairo_private cairo_status_t
2283 _cairo_pen_add_points (cairo_pen_t
*pen
, cairo_point_t
*point
, int num_points
);
2285 cairo_private cairo_status_t
2286 _cairo_pen_add_points_for_slopes (cairo_pen_t
*pen
,
2293 _cairo_pen_find_active_cw_vertex_index (const cairo_pen_t
*pen
,
2294 const cairo_slope_t
*slope
);
2297 _cairo_pen_find_active_ccw_vertex_index (const cairo_pen_t
*pen
,
2298 const cairo_slope_t
*slope
);
2300 typedef struct _cairo_pen_stroke_spline
{
2302 cairo_spline_t spline
;
2303 cairo_polygon_t polygon
;
2304 cairo_point_t last_point
;
2305 cairo_point_t forward_hull_point
;
2306 cairo_point_t backward_hull_point
;
2308 int backward_vertex
;
2309 } cairo_pen_stroke_spline_t
;
2311 cairo_private cairo_int_status_t
2312 _cairo_pen_stroke_spline_init (cairo_pen_stroke_spline_t
*stroker
,
2313 const cairo_pen_t
*pen
,
2314 const cairo_point_t
*a
,
2315 const cairo_point_t
*b
,
2316 const cairo_point_t
*c
,
2317 const cairo_point_t
*d
);
2319 cairo_private cairo_status_t
2320 _cairo_pen_stroke_spline (cairo_pen_stroke_spline_t
*pen
,
2322 cairo_traps_t
*traps
);
2325 _cairo_pen_stroke_spline_fini (cairo_pen_stroke_spline_t
*stroker
);
2327 /* cairo-polygon.c */
2329 _cairo_polygon_init (cairo_polygon_t
*polygon
);
2332 _cairo_polygon_fini (cairo_polygon_t
*polygon
);
2335 _cairo_polygon_add_edge (cairo_polygon_t
*polygon
,
2336 const cairo_point_t
*p1
,
2337 const cairo_point_t
*p2
,
2341 _cairo_polygon_move_to (cairo_polygon_t
*polygon
,
2342 const cairo_point_t
*point
);
2345 _cairo_polygon_line_to (cairo_polygon_t
*polygon
,
2346 const cairo_point_t
*point
);
2349 _cairo_polygon_close (cairo_polygon_t
*polygon
);
2351 #define _cairo_polygon_status(P) (P)->status
2353 /* cairo-spline.c */
2354 cairo_private cairo_bool_t
2355 _cairo_spline_init (cairo_spline_t
*spline
,
2356 cairo_spline_add_point_func_t add_point_func
,
2358 const cairo_point_t
*a
, const cairo_point_t
*b
,
2359 const cairo_point_t
*c
, const cairo_point_t
*d
);
2361 cairo_private cairo_status_t
2362 _cairo_spline_decompose (cairo_spline_t
*spline
, double tolerance
);
2364 cairo_private cairo_status_t
2365 _cairo_spline_bound (cairo_spline_add_point_func_t add_point_func
,
2367 const cairo_point_t
*p0
, const cairo_point_t
*p1
,
2368 const cairo_point_t
*p2
, const cairo_point_t
*p3
);
2370 /* cairo-matrix.c */
2372 _cairo_matrix_get_affine (const cairo_matrix_t
*matrix
,
2373 double *xx
, double *yx
,
2374 double *xy
, double *yy
,
2375 double *x0
, double *y0
);
2378 _cairo_matrix_transform_bounding_box (const cairo_matrix_t
*matrix
,
2379 double *x1
, double *y1
,
2380 double *x2
, double *y2
,
2381 cairo_bool_t
*is_tight
);
2384 _cairo_matrix_transform_bounding_box_fixed (const cairo_matrix_t
*matrix
,
2386 cairo_bool_t
*is_tight
);
2388 cairo_private cairo_bool_t
2389 _cairo_matrix_is_invertible (const cairo_matrix_t
*matrix
) cairo_pure
;
2391 cairo_private
double
2392 _cairo_matrix_compute_determinant (const cairo_matrix_t
*matrix
) cairo_pure
;
2394 cairo_private cairo_status_t
2395 _cairo_matrix_compute_basis_scale_factors (const cairo_matrix_t
*matrix
,
2396 double *sx
, double *sy
, int x_major
);
2398 cairo_private cairo_bool_t
2399 _cairo_matrix_is_identity (const cairo_matrix_t
*matrix
) cairo_pure
;
2401 cairo_private cairo_bool_t
2402 _cairo_matrix_is_translation (const cairo_matrix_t
*matrix
) cairo_pure
;
2404 cairo_private cairo_bool_t
2405 _cairo_matrix_is_integer_translation(const cairo_matrix_t
*matrix
,
2406 int *itx
, int *ity
);
2408 cairo_private cairo_bool_t
2409 _cairo_matrix_is_pixel_exact (const cairo_matrix_t
*matrix
) cairo_pure
;
2411 cairo_private
double
2412 _cairo_matrix_transformed_circle_major_axis (const cairo_matrix_t
*matrix
,
2413 double radius
) cairo_pure
;
2416 _cairo_matrix_to_pixman_matrix (const cairo_matrix_t
*matrix
,
2417 pixman_transform_t
*pixman_transform
,
2423 _cairo_traps_init (cairo_traps_t
*traps
);
2426 _cairo_traps_limit (cairo_traps_t
*traps
,
2427 cairo_box_t
*limits
);
2429 cairo_private cairo_bool_t
2430 _cairo_traps_get_limit (cairo_traps_t
*traps
,
2431 cairo_box_t
*limits
);
2434 _cairo_traps_init_box (cairo_traps_t
*traps
,
2435 const cairo_box_t
*box
);
2438 _cairo_traps_clear (cairo_traps_t
*traps
);
2441 _cairo_traps_fini (cairo_traps_t
*traps
);
2443 #define _cairo_traps_status(T) (T)->status
2446 _cairo_traps_translate (cairo_traps_t
*traps
, int x
, int y
);
2448 cairo_private cairo_status_t
2449 _cairo_traps_tessellate_triangle (cairo_traps_t
*traps
,
2450 const cairo_point_t t
[3]);
2452 cairo_private cairo_status_t
2453 _cairo_traps_tessellate_convex_quad (cairo_traps_t
*traps
,
2454 const cairo_point_t q
[4]);
2456 cairo_private cairo_status_t
2457 _cairo_traps_tessellate_rectangle (cairo_traps_t
*traps
,
2458 const cairo_point_t
*top_left
,
2459 const cairo_point_t
*bottom_right
);
2462 _cairo_traps_add_trap (cairo_traps_t
*traps
,
2463 cairo_fixed_t top
, cairo_fixed_t bottom
,
2464 cairo_line_t
*left
, cairo_line_t
*right
);
2466 cairo_private cairo_status_t
2467 _cairo_bentley_ottmann_tessellate_polygon (cairo_traps_t
*traps
,
2468 const cairo_polygon_t
*polygon
,
2469 cairo_fill_rule_t fill_rule
);
2472 _cairo_traps_contain (const cairo_traps_t
*traps
,
2473 double x
, double y
);
2476 _cairo_traps_extents (const cairo_traps_t
*traps
,
2477 cairo_box_t
*extents
);
2479 cairo_private cairo_int_status_t
2480 _cairo_traps_extract_region (const cairo_traps_t
*tr
,
2481 cairo_region_t
**region
);
2483 cairo_private cairo_status_t
2484 _cairo_traps_path (const cairo_traps_t
*traps
,
2485 cairo_path_fixed_t
*path
);
2488 _cairo_trapezoid_array_translate_and_scale (cairo_trapezoid_t
*offset_traps
,
2489 cairo_trapezoid_t
*src_traps
,
2491 double tx
, double ty
,
2492 double sx
, double sy
);
2496 _cairo_slope_init (cairo_slope_t
*slope
,
2497 const cairo_point_t
*a
,
2498 const cairo_point_t
*b
);
2501 _cairo_slope_compare (const cairo_slope_t
*a
,
2502 const cairo_slope_t
*b
) cairo_pure
;
2504 /* cairo-pattern.c */
2506 cairo_private cairo_pattern_t
*
2507 _cairo_pattern_create_in_error (cairo_status_t status
);
2509 cairo_private cairo_status_t
2510 _cairo_pattern_create_copy (cairo_pattern_t
**pattern
,
2511 const cairo_pattern_t
*other
);
2513 cairo_private cairo_status_t
2514 _cairo_pattern_init_copy (cairo_pattern_t
*pattern
,
2515 const cairo_pattern_t
*other
);
2518 _cairo_pattern_init_static_copy (cairo_pattern_t
*pattern
,
2519 const cairo_pattern_t
*other
);
2521 cairo_private cairo_status_t
2522 _cairo_pattern_init_snapshot (cairo_pattern_t
*pattern
,
2523 const cairo_pattern_t
*other
);
2526 _cairo_pattern_init_solid (cairo_solid_pattern_t
*pattern
,
2527 const cairo_color_t
*color
,
2528 cairo_content_t content
);
2531 _cairo_pattern_init_for_surface (cairo_surface_pattern_t
*pattern
,
2532 cairo_surface_t
*surface
);
2535 _cairo_pattern_init_linear (cairo_linear_pattern_t
*pattern
,
2536 double x0
, double y0
, double x1
, double y1
);
2539 _cairo_pattern_init_radial (cairo_radial_pattern_t
*pattern
,
2540 double cx0
, double cy0
, double radius0
,
2541 double cx1
, double cy1
, double radius1
);
2544 _cairo_pattern_fini (cairo_pattern_t
*pattern
);
2547 _cairo_pattern_fini_snapshot (cairo_pattern_t
*pattern
);
2549 cairo_private cairo_pattern_t
*
2550 _cairo_pattern_create_solid (const cairo_color_t
*color
,
2551 cairo_content_t content
);
2554 _cairo_pattern_transform (cairo_pattern_t
*pattern
,
2555 const cairo_matrix_t
*ctm_inverse
);
2557 cairo_private cairo_bool_t
2558 _cairo_pattern_is_opaque_solid (const cairo_pattern_t
*pattern
);
2560 cairo_private cairo_bool_t
2561 _cairo_pattern_is_opaque (const cairo_pattern_t
*abstract_pattern
);
2564 _cairo_gradient_pattern_compute_stops_common_denominator (cairo_gradient_pattern_t
*pattern
, cairo_bool_t
* multiple
, unsigned max_denom
);
2567 CAIRO_PATTERN_ACQUIRE_NONE
= 0x0,
2568 CAIRO_PATTERN_ACQUIRE_NO_REFLECT
= 1,
2569 CAIRO_PATTERN_ACQUIRE_COMPONENT_ALPHA
= 2,
2571 cairo_private cairo_int_status_t
2572 _cairo_pattern_acquire_surface (const cairo_pattern_t
*pattern
,
2573 cairo_surface_t
*dst
,
2574 cairo_content_t content
,
2578 unsigned int height
,
2580 cairo_surface_t
**surface_out
,
2581 cairo_surface_attributes_t
*attributes
);
2584 _cairo_pattern_release_surface (const cairo_pattern_t
*pattern
,
2585 cairo_surface_t
*surface
,
2586 cairo_surface_attributes_t
*attributes
);
2588 cairo_private cairo_int_status_t
2589 _cairo_pattern_acquire_surfaces (const cairo_pattern_t
*src
,
2590 const cairo_pattern_t
*mask
,
2591 cairo_surface_t
*dst
,
2592 cairo_content_t src_content
,
2598 unsigned int height
,
2600 cairo_surface_t
**src_out
,
2601 cairo_surface_t
**mask_out
,
2602 cairo_surface_attributes_t
*src_attributes
,
2603 cairo_surface_attributes_t
*mask_attributes
);
2605 cairo_private cairo_status_t
2606 _cairo_pattern_get_extents (const cairo_pattern_t
*pattern
,
2607 cairo_rectangle_int_t
*extents
);
2609 cairo_private
unsigned long
2610 _cairo_pattern_hash (const cairo_pattern_t
*pattern
);
2612 cairo_private
unsigned long
2613 _cairo_pattern_size (const cairo_pattern_t
*pattern
);
2615 cairo_private cairo_bool_t
2616 _cairo_pattern_equal (const cairo_pattern_t
*a
,
2617 const cairo_pattern_t
*b
);
2620 _cairo_pattern_reset_static_data (void);
2622 /* cairo-region.c */
2624 struct _cairo_region
{
2625 cairo_status_t status
;
2627 pixman_region32_t rgn
;
2631 _cairo_region_init (cairo_region_t
*region
);
2634 _cairo_region_init_rectangle (cairo_region_t
*region
,
2635 const cairo_rectangle_int_t
*rectangle
);
2638 _cairo_region_fini (cairo_region_t
*region
);
2640 /* cairo-unicode.c */
2643 _cairo_utf8_get_char_validated (const char *p
,
2646 cairo_private cairo_status_t
2647 _cairo_utf8_to_ucs4 (const char *str
,
2650 int *items_written
);
2653 _cairo_ucs4_to_utf8 (uint32_t unicode
,
2656 #if CAIRO_HAS_WIN32_FONT || CAIRO_HAS_QUARTZ_FONT || CAIRO_HAS_PDF_OPERATORS
2657 # define CAIRO_HAS_UTF8_TO_UTF16 1
2659 #if CAIRO_HAS_UTF8_TO_UTF16
2660 cairo_private cairo_status_t
2661 _cairo_utf8_to_utf16 (const char *str
,
2664 int *items_written
);
2667 #define _cairo_status_is_error(status) \
2668 (status != CAIRO_STATUS_SUCCESS && status <= CAIRO_STATUS_LAST_STATUS)
2670 cairo_private cairo_status_t
2671 _cairo_error (cairo_status_t status
);
2673 /* hide compiler warnings when discarding the return value */
2674 #define _cairo_error_throw(status) do { \
2675 cairo_status_t status__ = _cairo_error (status); \
2679 /* Avoid unnecessary PLT entries. */
2680 slim_hidden_proto (cairo_clip_preserve
);
2681 slim_hidden_proto (cairo_close_path
);
2682 slim_hidden_proto (cairo_create
);
2683 slim_hidden_proto (cairo_curve_to
);
2684 slim_hidden_proto (cairo_destroy
);
2685 slim_hidden_proto (cairo_fill_preserve
);
2686 slim_hidden_proto (cairo_font_face_destroy
);
2687 slim_hidden_proto (cairo_font_face_get_user_data
);
2688 slim_hidden_proto_no_warn (cairo_font_face_reference
);
2689 slim_hidden_proto (cairo_font_face_set_user_data
);
2690 slim_hidden_proto (cairo_font_options_equal
);
2691 slim_hidden_proto (cairo_font_options_hash
);
2692 slim_hidden_proto (cairo_font_options_merge
);
2693 slim_hidden_proto (cairo_font_options_set_antialias
);
2694 slim_hidden_proto (cairo_font_options_set_hint_metrics
);
2695 slim_hidden_proto (cairo_font_options_set_hint_style
);
2696 slim_hidden_proto (cairo_font_options_set_subpixel_order
);
2697 slim_hidden_proto (cairo_font_options_status
);
2698 slim_hidden_proto (cairo_format_stride_for_width
);
2699 slim_hidden_proto (cairo_get_current_point
);
2700 slim_hidden_proto (cairo_get_line_width
);
2701 slim_hidden_proto (cairo_get_matrix
);
2702 slim_hidden_proto (cairo_get_target
);
2703 slim_hidden_proto (cairo_get_tolerance
);
2704 slim_hidden_proto (cairo_glyph_allocate
);
2705 slim_hidden_proto (cairo_glyph_free
);
2706 slim_hidden_proto (cairo_image_surface_create
);
2707 slim_hidden_proto (cairo_image_surface_create_for_data
);
2708 slim_hidden_proto (cairo_image_surface_get_data
);
2709 slim_hidden_proto (cairo_image_surface_get_height
);
2710 slim_hidden_proto (cairo_image_surface_get_stride
);
2711 slim_hidden_proto (cairo_image_surface_get_width
);
2712 slim_hidden_proto (cairo_line_to
);
2713 slim_hidden_proto (cairo_mask
);
2714 slim_hidden_proto (cairo_matrix_init
);
2715 slim_hidden_proto (cairo_matrix_init_identity
);
2716 slim_hidden_proto (cairo_matrix_init_rotate
);
2717 slim_hidden_proto (cairo_matrix_init_scale
);
2718 slim_hidden_proto (cairo_matrix_init_translate
);
2719 slim_hidden_proto (cairo_matrix_invert
);
2720 slim_hidden_proto (cairo_matrix_multiply
);
2721 slim_hidden_proto (cairo_matrix_scale
);
2722 slim_hidden_proto (cairo_matrix_transform_distance
);
2723 slim_hidden_proto (cairo_matrix_transform_point
);
2724 slim_hidden_proto (cairo_matrix_translate
);
2725 slim_hidden_proto (cairo_move_to
);
2726 slim_hidden_proto (cairo_new_path
);
2727 slim_hidden_proto (cairo_paint
);
2728 slim_hidden_proto (cairo_pattern_create_for_surface
);
2729 slim_hidden_proto (cairo_pattern_create_rgb
);
2730 slim_hidden_proto (cairo_pattern_create_rgba
);
2731 slim_hidden_proto (cairo_pattern_destroy
);
2732 slim_hidden_proto (cairo_pattern_get_component_alpha
);
2733 slim_hidden_proto (cairo_pattern_get_extend
);
2734 slim_hidden_proto_no_warn (cairo_pattern_reference
);
2735 slim_hidden_proto (cairo_pattern_set_matrix
);
2736 slim_hidden_proto (cairo_pattern_set_component_alpha
);
2737 slim_hidden_proto (cairo_pattern_status
);
2738 slim_hidden_proto (cairo_pop_group
);
2739 slim_hidden_proto (cairo_push_group_with_content
);
2740 slim_hidden_proto (cairo_rel_line_to
);
2741 slim_hidden_proto (cairo_restore
);
2742 slim_hidden_proto (cairo_save
);
2743 slim_hidden_proto (cairo_scale
);
2744 slim_hidden_proto (cairo_scaled_font_create
);
2745 slim_hidden_proto (cairo_scaled_font_destroy
);
2746 slim_hidden_proto (cairo_scaled_font_extents
);
2747 slim_hidden_proto (cairo_scaled_font_get_ctm
);
2748 slim_hidden_proto (cairo_scaled_font_get_font_face
);
2749 slim_hidden_proto (cairo_scaled_font_get_font_matrix
);
2750 slim_hidden_proto (cairo_scaled_font_get_font_options
);
2751 slim_hidden_proto (cairo_scaled_font_glyph_extents
);
2752 slim_hidden_proto_no_warn (cairo_scaled_font_reference
);
2753 slim_hidden_proto (cairo_scaled_font_status
);
2754 slim_hidden_proto (cairo_scaled_font_get_user_data
);
2755 slim_hidden_proto (cairo_scaled_font_set_user_data
);
2756 slim_hidden_proto (cairo_scaled_font_text_to_glyphs
);
2757 slim_hidden_proto (cairo_set_font_options
);
2758 slim_hidden_proto (cairo_set_font_size
);
2759 slim_hidden_proto (cairo_set_line_cap
);
2760 slim_hidden_proto (cairo_set_line_join
);
2761 slim_hidden_proto (cairo_set_line_width
);
2762 slim_hidden_proto (cairo_set_matrix
);
2763 slim_hidden_proto (cairo_set_operator
);
2764 slim_hidden_proto (cairo_set_source
);
2765 slim_hidden_proto (cairo_set_source_rgb
);
2766 slim_hidden_proto (cairo_set_source_surface
);
2767 slim_hidden_proto (cairo_set_tolerance
);
2768 slim_hidden_proto (cairo_space_create
);
2769 slim_hidden_proto (cairo_space_destroy
);
2770 slim_hidden_proto (cairo_space_reference
);
2771 slim_hidden_proto (cairo_space_sync
);
2772 slim_hidden_proto (cairo_status
);
2773 slim_hidden_proto (cairo_stroke
);
2774 slim_hidden_proto (cairo_stroke_preserve
);
2775 slim_hidden_proto (cairo_surface_copy_page
);
2776 slim_hidden_proto (cairo_surface_create_for_drawable
);
2777 slim_hidden_proto (cairo_surface_create
);
2778 slim_hidden_proto (cairo_surface_create_similar
);
2779 slim_hidden_proto (cairo_surface_enable_multisampling
);
2780 slim_hidden_proto (cairo_surface_destroy
);
2781 slim_hidden_proto (cairo_surface_finish
);
2782 slim_hidden_proto (cairo_surface_flush
);
2783 slim_hidden_proto (cairo_surface_get_content
);
2784 slim_hidden_proto (cairo_surface_get_device_offset
);
2785 slim_hidden_proto (cairo_surface_get_font_options
);
2786 slim_hidden_proto (cairo_surface_get_mime_data
);
2787 slim_hidden_proto (cairo_surface_get_space
);
2788 slim_hidden_proto (cairo_surface_get_type
);
2789 slim_hidden_proto (cairo_surface_has_show_text_glyphs
);
2790 slim_hidden_proto (cairo_surface_mark_dirty_rectangle
);
2791 slim_hidden_proto_no_warn (cairo_surface_reference
);
2792 slim_hidden_proto (cairo_surface_set_device_offset
);
2793 slim_hidden_proto (cairo_surface_set_drawable
);
2794 slim_hidden_proto (cairo_surface_set_fallback_resolution
);
2795 slim_hidden_proto (cairo_surface_set_mime_data
);
2796 slim_hidden_proto (cairo_surface_set_samples
);
2797 slim_hidden_proto (cairo_surface_show_page
);
2798 slim_hidden_proto (cairo_surface_status
);
2799 slim_hidden_proto (cairo_text_cluster_allocate
);
2800 slim_hidden_proto (cairo_text_cluster_free
);
2801 slim_hidden_proto (cairo_toy_font_face_create
);
2802 slim_hidden_proto (cairo_toy_font_face_get_slant
);
2803 slim_hidden_proto (cairo_toy_font_face_get_weight
);
2804 slim_hidden_proto (cairo_translate
);
2805 slim_hidden_proto (cairo_transform
);
2806 slim_hidden_proto (cairo_user_font_face_create
);
2807 slim_hidden_proto (cairo_user_font_face_set_init_func
);
2808 slim_hidden_proto (cairo_user_font_face_set_render_glyph_func
);
2809 slim_hidden_proto (cairo_user_font_face_set_unicode_to_glyph_func
);
2810 slim_hidden_proto (cairo_user_to_device
);
2811 slim_hidden_proto (cairo_user_to_device_distance
);
2812 slim_hidden_proto (cairo_version_string
);
2813 slim_hidden_proto (cairo_region_create
);
2814 slim_hidden_proto (cairo_region_create_rectangle
);
2815 slim_hidden_proto (cairo_region_create_rectangles
);
2816 slim_hidden_proto (cairo_region_copy
);
2817 slim_hidden_proto (cairo_region_destroy
);
2818 slim_hidden_proto (cairo_region_status
);
2819 slim_hidden_proto (cairo_region_get_extents
);
2820 slim_hidden_proto (cairo_region_num_rectangles
);
2821 slim_hidden_proto (cairo_region_get_rectangle
);
2822 slim_hidden_proto (cairo_region_is_empty
);
2823 slim_hidden_proto (cairo_region_contains_rectangle
);
2824 slim_hidden_proto (cairo_region_contains_point
);
2825 slim_hidden_proto (cairo_region_translate
);
2826 slim_hidden_proto (cairo_region_subtract
);
2827 slim_hidden_proto (cairo_region_subtract_rectangle
);
2828 slim_hidden_proto (cairo_region_intersect
);
2829 slim_hidden_proto (cairo_region_intersect_rectangle
);
2830 slim_hidden_proto (cairo_region_union
);
2831 slim_hidden_proto (cairo_region_union_rectangle
);
2833 #if CAIRO_HAS_PNG_FUNCTIONS
2835 slim_hidden_proto (cairo_surface_write_to_png_stream
);
2841 #include "cairo-mutex-private.h"
2842 #include "cairo-fixed-private.h"
2843 #include "cairo-wideint-private.h"
2844 #include "cairo-malloc-private.h"
2845 #include "cairo-hash-private.h"
2848 #include <memcheck.h>
2853 _cairo_debug_check_image_surface_is_defined (const cairo_surface_t
*surface
);
2858 #define _cairo_debug_check_image_surface_is_defined(X)