LCOV - code coverage report
Current view: top level - gfx/cairo/cairo/src - cairoint.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 28 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 10 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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 <cworth@cworth.org>
      36             :  */
      37             : 
      38             : /*
      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
      44             :  */
      45             : 
      46             : #ifndef _CAIROINT_H_
      47             : #define _CAIROINT_H_
      48             : 
      49             : #if HAVE_CONFIG_H
      50             : #include "config.h"
      51             : #endif
      52             : 
      53             : #ifdef _MSC_VER
      54             : #define cairo_public __declspec(dllexport)
      55             : #endif
      56             : 
      57             : #include <assert.h>
      58             : #include <stdlib.h>
      59             : #include <string.h>
      60             : #include <stdarg.h>
      61             : #include <stddef.h>
      62             : 
      63             : #ifdef _MSC_VER
      64             : #define _USE_MATH_DEFINES
      65             : #endif
      66             : #include <math.h>
      67             : #include <limits.h>
      68             : #include <stdio.h>
      69             : 
      70             : #include "cairo.h"
      71             : #include <pixman.h>
      72             : 
      73             : #include "cairo-compiler-private.h"
      74             : 
      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
      80             : #endif
      81             : 
      82             : #if CAIRO_HAS_PS_SURFACE || CAIRO_HAS_PDF_SURFACE || CAIRO_HAS_FONT_SUBSET
      83             : #define CAIRO_HAS_PDF_OPERATORS 1
      84             : #endif
      85             : 
      86             : CAIRO_BEGIN_DECLS
      87             : 
      88             : #if _WIN32 && !_WIN32_WCE /* Permissions on WinCE? No worries! */
      89             : cairo_private FILE *
      90             : _cairo_win32_tmpfile (void);
      91             : #define tmpfile() _cairo_win32_tmpfile()
      92             : #endif
      93             : 
      94             : #undef MIN
      95             : #define MIN(a, b) ((a) < (b) ? (a) : (b))
      96             : 
      97             : #undef MAX
      98             : #define MAX(a, b) ((a) > (b) ? (a) : (b))
      99             : 
     100             : #ifndef FALSE
     101             : #define FALSE 0
     102             : #endif
     103             : 
     104             : #ifndef TRUE
     105             : #define TRUE 1
     106             : #endif
     107             : 
     108             : #ifndef M_PI
     109             : #define M_PI 3.14159265358979323846
     110             : #endif
     111             : 
     112             : #ifndef NDEBUG
     113             : #undef assert
     114             : #define assert(expr) \
     115             :     do { if (!(expr)) fprintf(stderr, "Assertion failed at %s:%d: %s\n", \
     116             :           __FILE__, __LINE__, #expr); } while (0)
     117             : #endif
     118             : 
     119             : #ifndef M_SQRT2
     120             : #define M_SQRT2 1.41421356237309504880
     121             : #endif
     122             : 
     123             : #ifndef M_SQRT1_2
     124             : #define M_SQRT1_2 0.707106781186547524400844362104849039
     125             : #endif
     126             : 
     127             : #undef  ARRAY_LENGTH
     128             : #define ARRAY_LENGTH(__array) ((int) (sizeof (__array) / sizeof (__array[0])))
     129             : 
     130             : #undef STRINGIFY
     131             : #undef STRINGIFY_ARG
     132             : #define STRINGIFY(macro_or_string)    STRINGIFY_ARG (macro_or_string)
     133             : #define STRINGIFY_ARG(contents)       #contents
     134             : 
     135             : #if defined (__GNUC__)
     136             : #define cairo_container_of(ptr, type, member) ({ \
     137             :     const __typeof__ (((type *) 0)->member) *mptr__ = (ptr); \
     138             :     (type *) ((char *) mptr__ - offsetof (type, member)); \
     139             : })
     140             : #else
     141             : #define cairo_container_of(ptr, type, member) \
     142             :     ((type *)((char *) (ptr) - (char *) &((type *)0)->member))
     143             : #endif
     144             : 
     145             : 
     146             : #define ASSERT_NOT_REACHED              \
     147             : do {                                    \
     148             :     assert (!"reached");              \
     149             : } while (0)
     150             : #define COMPILE_TIME_ASSERT1(condition, line)           \
     151             :     typedef int compile_time_assertion_at_line_##line##_failed [(condition)?1:-1]
     152             : #define COMPILE_TIME_ASSERT0(condition, line)   COMPILE_TIME_ASSERT1(condition, line)
     153             : #define COMPILE_TIME_ASSERT(condition)          COMPILE_TIME_ASSERT0(condition, __LINE__)
     154             : 
     155             : #define CAIRO_ALPHA_IS_CLEAR(alpha) ((alpha) <= ((double)0x00ff / (double)0xffff))
     156             : #define CAIRO_ALPHA_SHORT_IS_CLEAR(alpha) ((alpha) <= 0x00ff)
     157             : 
     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)
     161             : 
     162             : #define CAIRO_COLOR_IS_CLEAR(color) CAIRO_ALPHA_SHORT_IS_CLEAR ((color)->alpha_short)
     163             : #define CAIRO_COLOR_IS_OPAQUE(color) CAIRO_ALPHA_SHORT_IS_OPAQUE ((color)->alpha_short)
     164             : 
     165             : /* Reverse the bits in a byte with 7 operations (no 64-bit):
     166             :  * Devised by Sean Anderson, July 13, 2001.
     167             :  * Source: http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits
     168             :  */
     169             : #define CAIRO_BITSWAP8(c) ((((c) * 0x0802LU & 0x22110LU) | ((c) * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16)
     170             : 
     171             : /* Return the number of 1 bits in mask.
     172             :  *
     173             :  * GCC 3.4 supports a "population count" builtin, which on many targets is
     174             :  * implemented with a single instruction. There is a fallback definition
     175             :  * in libgcc in case a target does not have one, which should be just as
     176             :  * good as the open-coded solution below, (which is "HACKMEM 169").
     177             :  */
     178             : static inline int cairo_const
     179           0 : _cairo_popcount (uint32_t mask)
     180             : {
     181             : #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
     182           0 :     return __builtin_popcount (mask);
     183             : #else
     184             :     register int y;
     185             : 
     186             :     y = (mask >> 1) &033333333333;
     187             :     y = mask - y - ((y >>1) & 033333333333);
     188             :     return (((y + (y >> 3)) & 030707070707) % 077);
     189             : #endif
     190             : }
     191             : 
     192             : #ifdef WORDS_BIGENDIAN
     193             : #define CAIRO_BITSWAP8_IF_LITTLE_ENDIAN(c) (c)
     194             : #else
     195             : #define CAIRO_BITSWAP8_IF_LITTLE_ENDIAN(c) CAIRO_BITSWAP8(c)
     196             : #endif
     197             : 
     198             : #ifdef WORDS_BIGENDIAN
     199             : 
     200             : #define cpu_to_be16(v) (v)
     201             : #define be16_to_cpu(v) (v)
     202             : #define cpu_to_be32(v) (v)
     203             : #define be32_to_cpu(v) (v)
     204             : 
     205             : #else
     206             : 
     207             : static inline uint16_t cairo_const
     208           0 : cpu_to_be16(uint16_t v)
     209             : {
     210           0 :     return (v << 8) | (v >> 8);
     211             : }
     212             : 
     213             : static inline uint16_t cairo_const
     214           0 : be16_to_cpu(uint16_t v)
     215             : {
     216           0 :     return cpu_to_be16 (v);
     217             : }
     218             : 
     219             : static inline uint32_t cairo_const
     220           0 : cpu_to_be32(uint32_t v)
     221             : {
     222           0 :     return (cpu_to_be16 (v) << 16) | cpu_to_be16 (v >> 16);
     223             : }
     224             : 
     225             : static inline uint32_t cairo_const
     226           0 : be32_to_cpu(uint32_t v)
     227             : {
     228           0 :     return cpu_to_be32 (v);
     229             : }
     230             : 
     231             : #endif
     232             : 
     233             : 
     234             : /* The glibc versions of ispace() and isdigit() are slow in UTF-8 locales.
     235             :  */
     236             : 
     237             : static inline int cairo_const
     238           0 : _cairo_isspace (int c)
     239             : {
     240           0 :     return (c == 0x20 || (c >= 0x09 && c <= 0x0d));
     241             : }
     242             : 
     243             : static inline int cairo_const
     244           0 : _cairo_isdigit (int c)
     245             : {
     246           0 :     return (c >= '0' && c <= '9');
     247             : }
     248             : 
     249             : #include "cairo-types-private.h"
     250             : #include "cairo-cache-private.h"
     251             : #include "cairo-reference-count-private.h"
     252             : #include "cairo-spans-private.h"
     253             : 
     254             : cairo_private void
     255             : _cairo_box_from_doubles (cairo_box_t *box,
     256             :                          double *x1, double *y1,
     257             :                          double *x2, double *y2);
     258             : 
     259             : cairo_private void
     260             : _cairo_box_to_doubles (const cairo_box_t *box,
     261             :                        double *x1, double *y1,
     262             :                        double *x2, double *y2);
     263             : 
     264             : cairo_private void
     265             : _cairo_box_from_rectangle (cairo_box_t                 *box,
     266             :                            const cairo_rectangle_int_t *rectangle);
     267             : 
     268             : cairo_private cairo_bool_t
     269             : _cairo_rectangle_contains (const cairo_rectangle_int_t *containing_rectangle,
     270             :                            const cairo_rectangle_int_t *contained_rectangle);
     271             : 
     272             : cairo_private void
     273             : _cairo_box_round_to_rectangle (const cairo_box_t     *box,
     274             :                                cairo_rectangle_int_t *rectangle);
     275             : 
     276             : cairo_private void
     277             : _cairo_boxes_get_extents (const cairo_box_t *boxes,
     278             :                           int num_boxes,
     279             :                           cairo_box_t *extents);
     280             : 
     281             : static inline void
     282           0 : _cairo_unbounded_rectangle_init (cairo_rectangle_int_t *rect)
     283             : {
     284           0 :     rect->x = CAIRO_RECT_INT_MIN;
     285           0 :     rect->y = CAIRO_RECT_INT_MIN;
     286           0 :     rect->width = CAIRO_RECT_INT_MAX - CAIRO_RECT_INT_MIN;
     287           0 :     rect->height = CAIRO_RECT_INT_MAX - CAIRO_RECT_INT_MIN;
     288           0 : }
     289             : 
     290             : cairo_private cairo_bool_t
     291             : _cairo_rectangle_intersect (cairo_rectangle_int_t *dst,
     292             :                             const cairo_rectangle_int_t *src);
     293             : 
     294             : cairo_private cairo_bool_t
     295             : _cairo_box_intersects_line_segment (cairo_box_t *box,
     296             :                                     cairo_line_t *line) cairo_pure;
     297             : 
     298             : cairo_private cairo_bool_t
     299             : _cairo_box_contains_point (cairo_box_t *box,
     300             :                            const cairo_point_t *point) cairo_pure;
     301             : 
     302             : /* cairo-array.c structures and functions */
     303             : 
     304             : cairo_private void
     305             : _cairo_array_init (cairo_array_t *array, int element_size);
     306             : 
     307             : cairo_private void
     308             : _cairo_array_init_snapshot (cairo_array_t       *array,
     309             :                             const cairo_array_t *other);
     310             : 
     311             : cairo_private void
     312             : _cairo_array_fini (cairo_array_t *array);
     313             : 
     314             : cairo_private cairo_status_t
     315             : _cairo_array_grow_by (cairo_array_t *array, unsigned int additional);
     316             : 
     317             : cairo_private void
     318             : _cairo_array_truncate (cairo_array_t *array, unsigned int num_elements);
     319             : 
     320             : cairo_private cairo_status_t
     321             : _cairo_array_append (cairo_array_t *array, const void *element);
     322             : 
     323             : cairo_private cairo_status_t
     324             : _cairo_array_append_multiple (cairo_array_t     *array,
     325             :                               const void        *elements,
     326             :                               int                num_elements);
     327             : 
     328             : cairo_private cairo_status_t
     329             : _cairo_array_allocate (cairo_array_t     *array,
     330             :                        unsigned int       num_elements,
     331             :                        void             **elements);
     332             : 
     333             : cairo_private void *
     334             : _cairo_array_index (cairo_array_t *array, unsigned int index);
     335             : 
     336             : cairo_private void
     337             : _cairo_array_copy_element (cairo_array_t *array, int index, void *dst);
     338             : 
     339             : cairo_private int
     340             : _cairo_array_num_elements (cairo_array_t *array);
     341             : 
     342             : cairo_private int
     343             : _cairo_array_size (cairo_array_t *array);
     344             : 
     345             : typedef struct {
     346             :     const cairo_user_data_key_t *key;
     347             :     void *user_data;
     348             :     cairo_destroy_func_t destroy;
     349             : } cairo_user_data_slot_t;
     350             : 
     351             : cairo_private void
     352             : _cairo_user_data_array_init (cairo_user_data_array_t *array);
     353             : 
     354             : cairo_private void
     355             : _cairo_user_data_array_fini (cairo_user_data_array_t *array);
     356             : 
     357             : cairo_private void *
     358             : _cairo_user_data_array_get_data (cairo_user_data_array_t     *array,
     359             :                                  const cairo_user_data_key_t *key);
     360             : 
     361             : cairo_private cairo_status_t
     362             : _cairo_user_data_array_set_data (cairo_user_data_array_t     *array,
     363             :                                  const cairo_user_data_key_t *key,
     364             :                                  void                        *user_data,
     365             :                                  cairo_destroy_func_t         destroy);
     366             : 
     367             : cairo_private cairo_status_t
     368             : _cairo_user_data_array_copy (cairo_user_data_array_t    *dst,
     369             :                              cairo_user_data_array_t    *src);
     370             : 
     371             : cairo_private void
     372             : _cairo_user_data_array_foreach (cairo_user_data_array_t     *array,
     373             :                                 void (*func) (const void *key,
     374             :                                               void *elt,
     375             :                                               void *closure),
     376             :                                 void *closure);
     377             : 
     378             : #define _CAIRO_HASH_INIT_VALUE 5381
     379             : 
     380             : cairo_private unsigned long
     381             : _cairo_hash_string (const char *c);
     382             : 
     383             : cairo_private unsigned long
     384             : _cairo_hash_bytes (unsigned long hash,
     385             :                    const void *bytes,
     386             :                    unsigned int length);
     387             : 
     388             : #define _cairo_scaled_glyph_index(g) ((g)->hash_entry.hash)
     389             : #define _cairo_scaled_glyph_set_index(g, i)  ((g)->hash_entry.hash = (i))
     390             : 
     391             : #include "cairo-scaled-font-private.h"
     392             : 
     393             : struct _cairo_font_face {
     394             :     /* hash_entry must be first */
     395             :     cairo_hash_entry_t hash_entry;
     396             :     cairo_status_t status;
     397             :     cairo_reference_count_t ref_count;
     398             :     cairo_user_data_array_t user_data;
     399             :     const cairo_font_face_backend_t *backend;
     400             : };
     401             : 
     402             : cairo_private void
     403             : _cairo_reset_static_data (void);
     404             : 
     405             : cairo_private void
     406             : _cairo_toy_font_face_reset_static_data (void);
     407             : 
     408             : cairo_private void
     409             : _cairo_ft_font_reset_static_data (void);
     410             : 
     411             : cairo_private void
     412             : _cairo_win32_font_reset_static_data (void);
     413             : 
     414             : /* the font backend interface */
     415             : 
     416             : struct _cairo_unscaled_font_backend {
     417             :     void (*destroy)                 (void                            *unscaled_font);
     418             : };
     419             : 
     420             : /* #cairo_toy_font_face_t - simple family/slant/weight font faces used for
     421             :  * the built-in font API
     422             :  */
     423             : 
     424             : typedef struct _cairo_toy_font_face {
     425             :     cairo_font_face_t base;
     426             :     const char *family;
     427             :     cairo_bool_t owns_family;
     428             :     cairo_font_slant_t slant;
     429             :     cairo_font_weight_t weight;
     430             : 
     431             :     cairo_font_face_t *impl_face; /* The non-toy font face this actually uses */
     432             : } cairo_toy_font_face_t;
     433             : 
     434             : typedef enum _cairo_scaled_glyph_info {
     435             :     CAIRO_SCALED_GLYPH_INFO_METRICS      = (1 << 0),
     436             :     CAIRO_SCALED_GLYPH_INFO_SURFACE      = (1 << 1),
     437             :     CAIRO_SCALED_GLYPH_INFO_PATH         = (1 << 2),
     438             :     CAIRO_SCALED_GLYPH_INFO_RECORDING_SURFACE = (1 << 3)
     439             : } cairo_scaled_glyph_info_t;
     440             : 
     441             : typedef struct _cairo_scaled_font_subset {
     442             :     cairo_scaled_font_t *scaled_font;
     443             :     unsigned int font_id;
     444             :     unsigned int subset_id;
     445             : 
     446             :     /* Index of glyphs array is subset_glyph_index.
     447             :      * Value of glyphs array is scaled_font_glyph_index.
     448             :      */
     449             :     unsigned long *glyphs;
     450             :     unsigned long *to_unicode;
     451             :     char          **utf8;
     452             :     char          **glyph_names;
     453             :     unsigned int num_glyphs;
     454             :     cairo_bool_t is_composite;
     455             :     cairo_bool_t is_scaled;
     456             : } cairo_scaled_font_subset_t;
     457             : 
     458             : struct _cairo_scaled_font_backend {
     459             :     cairo_font_type_t type;
     460             : 
     461             :     void
     462             :     (*fini)             (void                   *scaled_font);
     463             : 
     464             :     cairo_warn cairo_int_status_t
     465             :     (*scaled_glyph_init)        (void                        *scaled_font,
     466             :                                  cairo_scaled_glyph_t        *scaled_glyph,
     467             :                                  cairo_scaled_glyph_info_t    info);
     468             : 
     469             :     /* A backend only needs to implement this or ucs4_to_index(), not
     470             :      * both. This allows the backend to do something more sophisticated
     471             :      * then just converting characters one by one.
     472             :      */
     473             :     cairo_warn cairo_int_status_t
     474             :     (*text_to_glyphs) (void                       *scaled_font,
     475             :                        double                      x,
     476             :                        double                      y,
     477             :                        const char                 *utf8,
     478             :                        int                         utf8_len,
     479             :                        cairo_glyph_t             **glyphs,
     480             :                        int                        *num_glyphs,
     481             :                        cairo_text_cluster_t      **clusters,
     482             :                        int                        *num_clusters,
     483             :                        cairo_text_cluster_flags_t *cluster_flags);
     484             : 
     485             :     unsigned long
     486             :     (*ucs4_to_index)            (void                        *scaled_font,
     487             :                                  uint32_t                     ucs4);
     488             :     cairo_warn cairo_int_status_t
     489             :     (*show_glyphs)      (void                   *scaled_font,
     490             :                          cairo_operator_t        op,
     491             :                          const cairo_pattern_t  *pattern,
     492             :                          cairo_surface_t        *surface,
     493             :                          int                     source_x,
     494             :                          int                     source_y,
     495             :                          int                     dest_x,
     496             :                          int                     dest_y,
     497             :                          unsigned int            width,
     498             :                          unsigned int            height,
     499             :                          cairo_glyph_t          *glyphs,
     500             :                          int                     num_glyphs,
     501             :                          cairo_region_t         *clip_region,
     502             :                          int                    *remaining_glyphs);
     503             : 
     504             :     cairo_warn cairo_int_status_t
     505             :     (*load_truetype_table)(void                 *scaled_font,
     506             :                            unsigned long         tag,
     507             :                            long                  offset,
     508             :                            unsigned char        *buffer,
     509             :                            unsigned long        *length);
     510             : 
     511             :     /* ucs4 is set to -1 if the unicode character could not be found
     512             :      * for the glyph */
     513             :     cairo_warn cairo_int_status_t
     514             :     (*index_to_ucs4)(void                       *scaled_font,
     515             :                      unsigned long               index,
     516             :                      uint32_t                   *ucs4);
     517             : };
     518             : 
     519             : struct _cairo_font_face_backend {
     520             :     cairo_font_type_t   type;
     521             : 
     522             :     cairo_warn cairo_status_t
     523             :     (*create_for_toy)  (cairo_toy_font_face_t   *toy_face,
     524             :                         cairo_font_face_t      **font_face);
     525             : 
     526             :     /* The destroy() function is allowed to resurrect the font face
     527             :      * by re-referencing. This is needed for the FreeType backend.
     528             :      */
     529             :     void
     530             :     (*destroy)     (void                        *font_face);
     531             : 
     532             :     cairo_warn cairo_status_t
     533             :     (*scaled_font_create) (void                         *font_face,
     534             :                            const cairo_matrix_t         *font_matrix,
     535             :                            const cairo_matrix_t         *ctm,
     536             :                            const cairo_font_options_t   *options,
     537             :                            cairo_scaled_font_t         **scaled_font);
     538             : 
     539             :     cairo_font_face_t *
     540             :     (*get_implementation) (void                         *font_face,
     541             :                            const cairo_matrix_t         *font_matrix,
     542             :                            const cairo_matrix_t         *ctm,
     543             :                            const cairo_font_options_t   *options);
     544             : };
     545             : 
     546             : extern const cairo_private struct _cairo_font_face_backend _cairo_user_font_face_backend;
     547             : 
     548             : /* concrete font backends */
     549             : #if CAIRO_HAS_FT_FONT
     550             : 
     551             : extern const cairo_private struct _cairo_font_face_backend _cairo_ft_font_face_backend;
     552             : 
     553             : #endif
     554             : 
     555             : #if CAIRO_HAS_WIN32_FONT
     556             : 
     557             : extern const cairo_private struct _cairo_font_face_backend _cairo_win32_font_face_backend;
     558             : 
     559             : #endif
     560             : 
     561             : #if CAIRO_HAS_DWRITE_FONT
     562             : 
     563             : extern const cairo_private struct _cairo_font_face_backend _cairo_dwrite_font_face_backend;
     564             : 
     565             : #endif
     566             : 
     567             : #if CAIRO_HAS_QUARTZ_FONT
     568             : 
     569             : extern const cairo_private struct _cairo_font_face_backend _cairo_quartz_font_face_backend;
     570             : 
     571             : #endif
     572             : 
     573             : struct _cairo_surface_backend {
     574             :     cairo_surface_type_t type;
     575             : 
     576             :     cairo_surface_t *
     577             :     (*create_similar)           (void                   *surface,
     578             :                                  cairo_content_t         content,
     579             :                                  int                     width,
     580             :                                  int                     height);
     581             : 
     582             :     cairo_warn cairo_status_t
     583             :     (*finish)                   (void                   *surface);
     584             : 
     585             :     cairo_warn cairo_status_t
     586             :     (*acquire_source_image)     (void                    *abstract_surface,
     587             :                                  cairo_image_surface_t  **image_out,
     588             :                                  void                   **image_extra);
     589             : 
     590             :     void
     591             :     (*release_source_image)     (void                   *abstract_surface,
     592             :                                  cairo_image_surface_t  *image,
     593             :                                  void                   *image_extra);
     594             : 
     595             :     cairo_warn cairo_status_t
     596             :     (*acquire_dest_image)       (void                    *abstract_surface,
     597             :                                  cairo_rectangle_int_t   *interest_rect,
     598             :                                  cairo_image_surface_t  **image_out,
     599             :                                  cairo_rectangle_int_t   *image_rect,
     600             :                                  void                   **image_extra);
     601             : 
     602             :     void
     603             :     (*release_dest_image)       (void                    *abstract_surface,
     604             :                                  cairo_rectangle_int_t   *interest_rect,
     605             :                                  cairo_image_surface_t   *image,
     606             :                                  cairo_rectangle_int_t   *image_rect,
     607             :                                  void                    *image_extra);
     608             : 
     609             :     /* Create a new surface (@clone_out) with the following
     610             :      * characteristics:
     611             :      *
     612             :      * 1. It is as compatible as possible with @surface (in terms of
     613             :      *    efficiency)
     614             :      *
     615             :      * 2. It has the same contents as @src within the given rectangle.
     616             :      *
     617             :      * 3. The offset of the similar surface with respect to the original
     618             :      *    surface is returned in the clone_offset vector.
     619             :      *    - if you clone the entire surface, this vector is zero.
     620             :      *    - if you clone (src_x, src_y)x(w, h) the vector is (src_x, src_y);
     621             :      */
     622             :     cairo_warn cairo_status_t
     623             :     (*clone_similar)            (void                   *surface,
     624             :                                  cairo_surface_t        *src,
     625             :                                  int                     src_x,
     626             :                                  int                     src_y,
     627             :                                  int                     width,
     628             :                                  int                     height,
     629             :                                  int                    *clone_offset_x,
     630             :                                  int                    *clone_offset_y,
     631             :                                  cairo_surface_t       **clone_out);
     632             : 
     633             :     /* XXX remove to a separate cairo_surface_compositor_t */
     634             :     /* XXX: dst should be the first argument for consistency */
     635             :     cairo_warn cairo_int_status_t
     636             :     (*composite)                (cairo_operator_t        op,
     637             :                                  const cairo_pattern_t  *src,
     638             :                                  const cairo_pattern_t  *mask,
     639             :                                  void                   *dst,
     640             :                                  int                     src_x,
     641             :                                  int                     src_y,
     642             :                                  int                     mask_x,
     643             :                                  int                     mask_y,
     644             :                                  int                     dst_x,
     645             :                                  int                     dst_y,
     646             :                                  unsigned int            width,
     647             :                                  unsigned int            height,
     648             :                                  cairo_region_t         *clip_region);
     649             : 
     650             :     cairo_warn cairo_int_status_t
     651             :     (*fill_rectangles)          (void                    *surface,
     652             :                                  cairo_operator_t         op,
     653             :                                  const cairo_color_t     *color,
     654             :                                  cairo_rectangle_int_t   *rects,
     655             :                                  int                      num_rects);
     656             : 
     657             :     /* XXX: dst should be the first argument for consistency */
     658             :     cairo_warn cairo_int_status_t
     659             :     (*composite_trapezoids)     (cairo_operator_t        op,
     660             :                                  const cairo_pattern_t  *pattern,
     661             :                                  void                   *dst,
     662             :                                  cairo_antialias_t       antialias,
     663             :                                  int                     src_x,
     664             :                                  int                     src_y,
     665             :                                  int                     dst_x,
     666             :                                  int                     dst_y,
     667             :                                  unsigned int            width,
     668             :                                  unsigned int            height,
     669             :                                  cairo_trapezoid_t      *traps,
     670             :                                  int                     num_traps,
     671             :                                  cairo_region_t         *region);
     672             : 
     673             :     cairo_warn cairo_span_renderer_t *
     674             :     (*create_span_renderer)     (cairo_operator_t                        op,
     675             :                                  const cairo_pattern_t                  *pattern,
     676             :                                  void                                   *dst,
     677             :                                  cairo_antialias_t                       antialias,
     678             :                                  const cairo_composite_rectangles_t *rects,
     679             :                                  cairo_region_t *clip_region);
     680             : 
     681             :     cairo_warn cairo_bool_t
     682             :     (*check_span_renderer)      (cairo_operator_t                        op,
     683             :                                  const cairo_pattern_t                  *pattern,
     684             :                                  void                                   *dst,
     685             :                                  cairo_antialias_t                       antialias);
     686             : 
     687             :     cairo_warn cairo_int_status_t
     688             :     (*copy_page)                (void                   *surface);
     689             : 
     690             :     cairo_warn cairo_int_status_t
     691             :     (*show_page)                (void                   *surface);
     692             : 
     693             :     /* Get the extents of the current surface. For many surface types
     694             :      * this will be as simple as { x=0, y=0, width=surface->width,
     695             :      * height=surface->height}.
     696             :      *
     697             :      * If this function is not implemented, or if it returns
     698             :      * FALSE the surface is considered to be
     699             :      * boundless and infinite bounds are used for it.
     700             :      */
     701             :     cairo_warn cairo_bool_t
     702             :     (*get_extents)              (void                    *surface,
     703             :                                  cairo_rectangle_int_t   *extents);
     704             : 
     705             :     /*
     706             :      * This is an optional entry to let the surface manage its own glyph
     707             :      * resources. If null, render against this surface, using image
     708             :      * surfaces as glyphs.
     709             :      */
     710             :     cairo_warn cairo_int_status_t
     711             :     (*old_show_glyphs)          (cairo_scaled_font_t            *font,
     712             :                                  cairo_operator_t                op,
     713             :                                  const cairo_pattern_t          *pattern,
     714             :                                  void                           *surface,
     715             :                                  int                             source_x,
     716             :                                  int                             source_y,
     717             :                                  int                             dest_x,
     718             :                                  int                             dest_y,
     719             :                                  unsigned int                    width,
     720             :                                  unsigned int                    height,
     721             :                                  cairo_glyph_t                  *glyphs,
     722             :                                  int                             num_glyphs,
     723             :                                  cairo_region_t                 *clip_region);
     724             : 
     725             :     void
     726             :     (*get_font_options)         (void                  *surface,
     727             :                                  cairo_font_options_t  *options);
     728             : 
     729             :     cairo_warn cairo_status_t
     730             :     (*flush)                    (void                  *surface);
     731             : 
     732             :     cairo_warn cairo_status_t
     733             :     (*mark_dirty_rectangle)     (void                  *surface,
     734             :                                  int                    x,
     735             :                                  int                    y,
     736             :                                  int                    width,
     737             :                                  int                    height);
     738             : 
     739             :     void
     740             :     (*scaled_font_fini)         (cairo_scaled_font_t   *scaled_font);
     741             : 
     742             :     void
     743             :     (*scaled_glyph_fini)        (cairo_scaled_glyph_t   *scaled_glyph,
     744             :                                  cairo_scaled_font_t    *scaled_font);
     745             : 
     746             :     /* OK, I'm starting over somewhat by defining the 5 top-level
     747             :      * drawing operators for the surface backend here with consistent
     748             :      * naming and argument-order conventions. */
     749             :     cairo_warn cairo_int_status_t
     750             :     (*paint)                    (void                   *surface,
     751             :                                  cairo_operator_t        op,
     752             :                                  const cairo_pattern_t  *source,
     753             :                                  cairo_clip_t           *clip);
     754             : 
     755             :     cairo_warn cairo_int_status_t
     756             :     (*mask)                     (void                   *surface,
     757             :                                  cairo_operator_t        op,
     758             :                                  const cairo_pattern_t  *source,
     759             :                                  const cairo_pattern_t  *mask,
     760             :                                  cairo_clip_t           *clip);
     761             : 
     762             :     cairo_warn cairo_int_status_t
     763             :     (*stroke)                   (void                   *surface,
     764             :                                  cairo_operator_t        op,
     765             :                                  const cairo_pattern_t  *source,
     766             :                                  cairo_path_fixed_t     *path,
     767             :                                  const cairo_stroke_style_t     *style,
     768             :                                  const cairo_matrix_t   *ctm,
     769             :                                  const cairo_matrix_t   *ctm_inverse,
     770             :                                  double                  tolerance,
     771             :                                  cairo_antialias_t       antialias,
     772             :                                  cairo_clip_t           *clip);
     773             : 
     774             :     cairo_warn cairo_int_status_t
     775             :     (*fill)                     (void                   *surface,
     776             :                                  cairo_operator_t        op,
     777             :                                  const cairo_pattern_t  *source,
     778             :                                  cairo_path_fixed_t     *path,
     779             :                                  cairo_fill_rule_t       fill_rule,
     780             :                                  double                  tolerance,
     781             :                                  cairo_antialias_t       antialias,
     782             :                                  cairo_clip_t           *clip);
     783             : 
     784             :     cairo_warn cairo_int_status_t
     785             :     (*show_glyphs)              (void                   *surface,
     786             :                                  cairo_operator_t        op,
     787             :                                  const cairo_pattern_t  *source,
     788             :                                  cairo_glyph_t          *glyphs,
     789             :                                  int                     num_glyphs,
     790             :                                  cairo_scaled_font_t    *scaled_font,
     791             :                                  cairo_clip_t           *clip,
     792             :                                  int                    *remaining_glyphs);
     793             : 
     794             :     cairo_surface_t *
     795             :     (*snapshot)                 (void                   *surface);
     796             : 
     797             :     cairo_bool_t
     798             :     (*is_similar)               (void                   *surface_a,
     799             :                                  void                   *surface_b);
     800             : 
     801             :     cairo_warn cairo_int_status_t
     802             :     (*fill_stroke)              (void                   *surface,
     803             :                                  cairo_operator_t        fill_op,
     804             :                                  const cairo_pattern_t  *fill_source,
     805             :                                  cairo_fill_rule_t       fill_rule,
     806             :                                  double                  fill_tolerance,
     807             :                                  cairo_antialias_t       fill_antialias,
     808             :                                  cairo_path_fixed_t     *path,
     809             :                                  cairo_operator_t        stroke_op,
     810             :                                  const cairo_pattern_t  *stroke_source,
     811             :                                  const cairo_stroke_style_t     *stroke_style,
     812             :                                  const cairo_matrix_t   *stroke_ctm,
     813             :                                  const cairo_matrix_t   *stroke_ctm_inverse,
     814             :                                  double                  stroke_tolerance,
     815             :                                  cairo_antialias_t       stroke_antialias,
     816             :                                  cairo_clip_t           *clip);
     817             : 
     818             :     cairo_surface_t *
     819             :     (*create_solid_pattern_surface)
     820             :                                 (void                         *surface,
     821             :                                  const cairo_solid_pattern_t  *solid_pattern);
     822             : 
     823             :     cairo_bool_t
     824             :     (*can_repaint_solid_pattern_surface)
     825             :                                 (void                         *surface,
     826             :                                  const cairo_solid_pattern_t  *solid_pattern);
     827             : 
     828             :     cairo_bool_t
     829             :     (*has_show_text_glyphs)     (void                       *surface);
     830             : 
     831             :     cairo_warn cairo_int_status_t
     832             :     (*show_text_glyphs)         (void                       *surface,
     833             :                                  cairo_operator_t            op,
     834             :                                  const cairo_pattern_t      *source,
     835             :                                  const char                 *utf8,
     836             :                                  int                         utf8_len,
     837             :                                  cairo_glyph_t              *glyphs,
     838             :                                  int                         num_glyphs,
     839             :                                  const cairo_text_cluster_t *clusters,
     840             :                                  int                         num_clusters,
     841             :                                  cairo_text_cluster_flags_t  cluster_flags,
     842             :                                  cairo_scaled_font_t        *scaled_font,
     843             :                                  cairo_clip_t               *clip);
     844             : };
     845             : 
     846             : #include "cairo-surface-private.h"
     847             : 
     848             : struct _cairo_image_surface {
     849             :     cairo_surface_t base;
     850             : 
     851             :     pixman_format_code_t pixman_format;
     852             :     cairo_format_t format;
     853             :     unsigned char *data;
     854             : 
     855             :     int width;
     856             :     int height;
     857             :     int stride;
     858             :     int depth;
     859             : 
     860             :     pixman_image_t *pixman_image;
     861             : 
     862             :     unsigned owns_data : 1;
     863             :     unsigned transparency : 2;
     864             : };
     865             : 
     866             : extern const cairo_private cairo_surface_backend_t _cairo_image_surface_backend;
     867             : 
     868             : #define CAIRO_EXTEND_SURFACE_DEFAULT CAIRO_EXTEND_NONE
     869             : #define CAIRO_EXTEND_GRADIENT_DEFAULT CAIRO_EXTEND_PAD
     870             : #define CAIRO_FILTER_DEFAULT CAIRO_FILTER_GOOD
     871             : 
     872             : extern const cairo_private cairo_solid_pattern_t _cairo_pattern_clear;
     873             : extern const cairo_private cairo_solid_pattern_t _cairo_pattern_black;
     874             : extern const cairo_private cairo_solid_pattern_t _cairo_pattern_white;
     875             : 
     876             : typedef struct _cairo_surface_attributes {
     877             :     cairo_matrix_t matrix;
     878             :     cairo_extend_t extend;
     879             :     cairo_filter_t filter;
     880             :     cairo_bool_t has_component_alpha;
     881             :     int            x_offset;
     882             :     int            y_offset;
     883             :     void           *extra;
     884             : } cairo_surface_attributes_t;
     885             : 
     886             : typedef struct _cairo_traps {
     887             :     cairo_status_t status;
     888             : 
     889             :     const cairo_box_t *limits;
     890             :     int num_limits;
     891             : 
     892             :     unsigned int maybe_region : 1; /* hint: 0 implies that it cannot be */
     893             :     unsigned int has_intersections : 1;
     894             :     unsigned int is_rectilinear : 1;
     895             :     unsigned int is_rectangular : 1;
     896             : 
     897             :     int num_traps;
     898             :     int traps_size;
     899             :     cairo_trapezoid_t *traps;
     900             :     cairo_trapezoid_t  traps_embedded[16];
     901             : } cairo_traps_t;
     902             : 
     903             : #define CAIRO_FONT_SLANT_DEFAULT   CAIRO_FONT_SLANT_NORMAL
     904             : #define CAIRO_FONT_WEIGHT_DEFAULT  CAIRO_FONT_WEIGHT_NORMAL
     905             : 
     906             : #define CAIRO_WIN32_FONT_FAMILY_DEFAULT "Arial"
     907             : #define CAIRO_QUARTZ_FONT_FAMILY_DEFAULT  "Helvetica"
     908             : #define CAIRO_FT_FONT_FAMILY_DEFAULT     ""
     909             : #define CAIRO_USER_FONT_FAMILY_DEFAULT     "@cairo:"
     910             : 
     911             : #if   CAIRO_HAS_DWRITE_FONT
     912             : 
     913             : #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_WIN32_FONT_FAMILY_DEFAULT
     914             : #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_dwrite_font_face_backend
     915             : 
     916             : #elif CAIRO_HAS_WIN32_FONT
     917             : 
     918             : #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_WIN32_FONT_FAMILY_DEFAULT
     919             : #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_win32_font_face_backend
     920             : 
     921             : #elif CAIRO_HAS_QUARTZ_FONT
     922             : 
     923             : #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_QUARTZ_FONT_FAMILY_DEFAULT
     924             : #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_quartz_font_face_backend
     925             : 
     926             : #elif CAIRO_HAS_FT_FONT
     927             : 
     928             : #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_FT_FONT_FAMILY_DEFAULT
     929             : #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_ft_font_face_backend
     930             : 
     931             : #else
     932             : 
     933             : #define CAIRO_FONT_FAMILY_DEFAULT CAIRO_FT_FONT_FAMILY_DEFAULT
     934             : #define CAIRO_FONT_FACE_BACKEND_DEFAULT &_cairo_user_font_face_backend
     935             : 
     936             : #endif
     937             : 
     938             : #define CAIRO_GSTATE_OPERATOR_DEFAULT   CAIRO_OPERATOR_OVER
     939             : #ifdef MOZ_GFX_OPTIMIZE_MOBILE
     940             : // Skia uses a tolerance of 0.5 we'll use something more
     941             : // tolerant for now
     942             : #define CAIRO_GSTATE_TOLERANCE_DEFAULT  0.3
     943             : #else
     944             : #define CAIRO_GSTATE_TOLERANCE_DEFAULT  0.1
     945             : #endif
     946             : #define CAIRO_GSTATE_FILL_RULE_DEFAULT  CAIRO_FILL_RULE_WINDING
     947             : #define CAIRO_GSTATE_LINE_WIDTH_DEFAULT 2.0
     948             : #define CAIRO_GSTATE_LINE_CAP_DEFAULT   CAIRO_LINE_CAP_BUTT
     949             : #define CAIRO_GSTATE_LINE_JOIN_DEFAULT  CAIRO_LINE_JOIN_MITER
     950             : #define CAIRO_GSTATE_MITER_LIMIT_DEFAULT        10.0
     951             : #define CAIRO_GSTATE_DEFAULT_FONT_SIZE  10.0
     952             : 
     953             : #define CAIRO_SURFACE_RESOLUTION_DEFAULT 72.0
     954             : #define CAIRO_SURFACE_FALLBACK_RESOLUTION_DEFAULT 300.0
     955             : 
     956             : typedef struct _cairo_stroke_face {
     957             :     cairo_point_t ccw;
     958             :     cairo_point_t point;
     959             :     cairo_point_t cw;
     960             :     cairo_slope_t dev_vector;
     961             :     cairo_point_double_t usr_vector;
     962             : } cairo_stroke_face_t;
     963             : 
     964             : /* cairo.c */
     965             : 
     966             : static inline double cairo_const
     967           0 : _cairo_restrict_value (double value, double min, double max)
     968             : {
     969           0 :     if (value < min)
     970           0 :         return min;
     971           0 :     else if (value > max)
     972           0 :         return max;
     973             :     else
     974           0 :         return value;
     975             : }
     976             : 
     977             : /* C99 round() rounds to the nearest integral value with halfway cases rounded
     978             :  * away from 0. _cairo_round rounds halfway cases toward negative infinity.
     979             :  * This matches the rounding behaviour of _cairo_lround. */
     980             : static inline double cairo_const
     981           0 : _cairo_round (double r)
     982             : {
     983           0 :     return floor (r + .5);
     984             : }
     985             : 
     986             : #if DISABLE_SOME_FLOATING_POINT || __STDC_VERSION__ < 199901L
     987             : cairo_private int
     988             : _cairo_lround (double d) cairo_const;
     989             : #else
     990             : #define _cairo_lround lround
     991             : #endif
     992             : 
     993             : cairo_private uint16_t
     994             : _cairo_half_from_float (float f) cairo_const;
     995             : 
     996             : cairo_private cairo_bool_t
     997             : _cairo_operator_bounded_by_mask (cairo_operator_t op) cairo_const;
     998             : 
     999             : cairo_private cairo_bool_t
    1000             : _cairo_operator_bounded_by_source (cairo_operator_t op) cairo_const;
    1001             : 
    1002             : enum {
    1003             :     CAIRO_OPERATOR_BOUND_BY_MASK = 1 << 1,
    1004             :     CAIRO_OPERATOR_BOUND_BY_SOURCE = 1 << 2,
    1005             : };
    1006             : 
    1007             : cairo_private uint32_t
    1008             : _cairo_operator_bounded_by_either (cairo_operator_t op) cairo_const;
    1009             : /* cairo-color.c */
    1010             : cairo_private const cairo_color_t *
    1011             : _cairo_stock_color (cairo_stock_t stock) cairo_pure;
    1012             : 
    1013             : #define CAIRO_COLOR_WHITE       _cairo_stock_color (CAIRO_STOCK_WHITE)
    1014             : #define CAIRO_COLOR_BLACK       _cairo_stock_color (CAIRO_STOCK_BLACK)
    1015             : #define CAIRO_COLOR_TRANSPARENT _cairo_stock_color (CAIRO_STOCK_TRANSPARENT)
    1016             : 
    1017             : cairo_private uint16_t
    1018             : _cairo_color_double_to_short (double d) cairo_const;
    1019             : 
    1020             : cairo_private void
    1021             : _cairo_color_init (cairo_color_t *color);
    1022             : 
    1023             : cairo_private void
    1024             : _cairo_color_init_rgb (cairo_color_t *color,
    1025             :                        double red, double green, double blue);
    1026             : 
    1027             : cairo_private void
    1028             : _cairo_color_init_rgba (cairo_color_t *color,
    1029             :                         double red, double green, double blue,
    1030             :                         double alpha);
    1031             : 
    1032             : cairo_private void
    1033             : _cairo_color_multiply_alpha (cairo_color_t *color,
    1034             :                              double         alpha);
    1035             : 
    1036             : cairo_private void
    1037             : _cairo_color_get_rgba (cairo_color_t *color,
    1038             :                        double        *red,
    1039             :                        double        *green,
    1040             :                        double        *blue,
    1041             :                        double        *alpha);
    1042             : 
    1043             : cairo_private void
    1044             : _cairo_color_get_rgba_premultiplied (cairo_color_t *color,
    1045             :                                      double        *red,
    1046             :                                      double        *green,
    1047             :                                      double        *blue,
    1048             :                                      double        *alpha);
    1049             : 
    1050             : cairo_private cairo_bool_t
    1051             : _cairo_color_equal (const cairo_color_t *color_a,
    1052             :                     const cairo_color_t *color_b) cairo_pure;
    1053             : 
    1054             : cairo_private cairo_bool_t
    1055             : _cairo_color_stop_equal (const cairo_color_stop_t *color_a,
    1056             :                          const cairo_color_stop_t *color_b) cairo_pure;
    1057             : 
    1058             : cairo_private cairo_content_t
    1059             : _cairo_color_get_content (const cairo_color_t *color) cairo_pure;
    1060             : 
    1061             : /* cairo-font-face.c */
    1062             : 
    1063             : extern const cairo_private cairo_font_face_t _cairo_font_face_nil;
    1064             : 
    1065             : cairo_private void
    1066             : _cairo_font_face_init (cairo_font_face_t               *font_face,
    1067             :                        const cairo_font_face_backend_t *backend);
    1068             : 
    1069             : cairo_private cairo_status_t
    1070             : _cairo_font_face_set_error (cairo_font_face_t *font_face,
    1071             :                             cairo_status_t     status);
    1072             : 
    1073             : cairo_private void
    1074             : _cairo_unscaled_font_init (cairo_unscaled_font_t               *font,
    1075             :                            const cairo_unscaled_font_backend_t *backend);
    1076             : 
    1077             : cairo_private_no_warn cairo_unscaled_font_t *
    1078             : _cairo_unscaled_font_reference (cairo_unscaled_font_t *font);
    1079             : 
    1080             : cairo_private void
    1081             : _cairo_unscaled_font_destroy (cairo_unscaled_font_t *font);
    1082             : 
    1083             : /* cairo-font-face-twin.c */
    1084             : 
    1085             : cairo_private cairo_font_face_t *
    1086             : _cairo_font_face_twin_create_fallback (void);
    1087             : 
    1088             : cairo_private cairo_status_t
    1089             : _cairo_font_face_twin_create_for_toy (cairo_toy_font_face_t   *toy_face,
    1090             :                                       cairo_font_face_t      **font_face);
    1091             : 
    1092             : /* cairo-font-face-twin-data.c */
    1093             : 
    1094             : extern const cairo_private int8_t _cairo_twin_outlines[];
    1095             : extern const cairo_private uint16_t _cairo_twin_charmap[128];
    1096             : 
    1097             : /* cairo-font-options.c */
    1098             : 
    1099             : cairo_private void
    1100             : _cairo_font_options_init_default (cairo_font_options_t *options);
    1101             : 
    1102             : cairo_private void
    1103             : _cairo_font_options_init_copy (cairo_font_options_t             *options,
    1104             :                                const cairo_font_options_t       *other);
    1105             : 
    1106             : cairo_private void
    1107             : _cairo_font_options_set_lcd_filter (cairo_font_options_t   *options,
    1108             :                                    cairo_lcd_filter_t  lcd_filter);
    1109             : 
    1110             : cairo_private cairo_lcd_filter_t
    1111             : _cairo_font_options_get_lcd_filter (const cairo_font_options_t *options);
    1112             : 
    1113             : cairo_private void
    1114             : _cairo_font_options_set_round_glyph_positions (cairo_font_options_t   *options,
    1115             :                                                cairo_round_glyph_positions_t  round);
    1116             : 
    1117             : cairo_private cairo_round_glyph_positions_t
    1118             : _cairo_font_options_get_round_glyph_positions (const cairo_font_options_t *options);
    1119             : 
    1120             : /* cairo-hull.c */
    1121             : cairo_private cairo_status_t
    1122             : _cairo_hull_compute (cairo_pen_vertex_t *vertices, int *num_vertices);
    1123             : 
    1124             : /* cairo-lzw.c */
    1125             : cairo_private unsigned char *
    1126             : _cairo_lzw_compress (unsigned char *data, unsigned long *size_in_out);
    1127             : 
    1128             : /* cairo-misc.c */
    1129             : cairo_private cairo_status_t
    1130             : _cairo_validate_text_clusters (const char                  *utf8,
    1131             :                                int                          utf8_len,
    1132             :                                const cairo_glyph_t         *glyphs,
    1133             :                                int                          num_glyphs,
    1134             :                                const cairo_text_cluster_t  *clusters,
    1135             :                                int                          num_clusters,
    1136             :                                cairo_text_cluster_flags_t   cluster_flags);
    1137             : 
    1138             : cairo_private cairo_status_t
    1139             : _cairo_intern_string (const char **str_inout, int len);
    1140             : 
    1141             : cairo_private void
    1142             : _cairo_intern_string_reset_static_data (void);
    1143             : 
    1144             : /* cairo-path-fixed.c */
    1145             : cairo_private cairo_path_fixed_t *
    1146             : _cairo_path_fixed_create (void);
    1147             : 
    1148             : cairo_private void
    1149             : _cairo_path_fixed_init (cairo_path_fixed_t *path);
    1150             : 
    1151             : cairo_private cairo_status_t
    1152             : _cairo_path_fixed_init_copy (cairo_path_fixed_t *path,
    1153             :                              const cairo_path_fixed_t *other);
    1154             : 
    1155             : cairo_private cairo_bool_t
    1156             : _cairo_path_fixed_is_equal (const cairo_path_fixed_t *path,
    1157             :                             const cairo_path_fixed_t *other);
    1158             : 
    1159             : cairo_private void
    1160             : _cairo_path_fixed_fini (cairo_path_fixed_t *path);
    1161             : 
    1162             : cairo_private void
    1163             : _cairo_path_fixed_destroy (cairo_path_fixed_t *path);
    1164             : 
    1165             : cairo_private cairo_status_t
    1166             : _cairo_path_fixed_move_to (cairo_path_fixed_t  *path,
    1167             :                            cairo_fixed_t        x,
    1168             :                            cairo_fixed_t        y);
    1169             : 
    1170             : cairo_private void
    1171             : _cairo_path_fixed_new_sub_path (cairo_path_fixed_t *path);
    1172             : 
    1173             : cairo_private cairo_status_t
    1174             : _cairo_path_fixed_rel_move_to (cairo_path_fixed_t *path,
    1175             :                                cairo_fixed_t       dx,
    1176             :                                cairo_fixed_t       dy);
    1177             : 
    1178             : cairo_private cairo_status_t
    1179             : _cairo_path_fixed_line_to (cairo_path_fixed_t *path,
    1180             :                            cairo_fixed_t        x,
    1181             :                            cairo_fixed_t        y);
    1182             : 
    1183             : cairo_private cairo_status_t
    1184             : _cairo_path_fixed_rel_line_to (cairo_path_fixed_t *path,
    1185             :                                cairo_fixed_t       dx,
    1186             :                                cairo_fixed_t       dy);
    1187             : 
    1188             : cairo_private cairo_status_t
    1189             : _cairo_path_fixed_curve_to (cairo_path_fixed_t  *path,
    1190             :                             cairo_fixed_t x0, cairo_fixed_t y0,
    1191             :                             cairo_fixed_t x1, cairo_fixed_t y1,
    1192             :                             cairo_fixed_t x2, cairo_fixed_t y2);
    1193             : 
    1194             : cairo_private cairo_status_t
    1195             : _cairo_path_fixed_rel_curve_to (cairo_path_fixed_t *path,
    1196             :                                 cairo_fixed_t dx0, cairo_fixed_t dy0,
    1197             :                                 cairo_fixed_t dx1, cairo_fixed_t dy1,
    1198             :                                 cairo_fixed_t dx2, cairo_fixed_t dy2);
    1199             : 
    1200             : cairo_private cairo_status_t
    1201             : _cairo_path_fixed_close_path (cairo_path_fixed_t *path);
    1202             : 
    1203             : cairo_private cairo_bool_t
    1204             : _cairo_path_fixed_get_current_point (cairo_path_fixed_t *path,
    1205             :                                      cairo_fixed_t      *x,
    1206             :                                      cairo_fixed_t      *y);
    1207             : 
    1208             : typedef cairo_status_t
    1209             : (cairo_path_fixed_move_to_func_t) (void          *closure,
    1210             :                                    const cairo_point_t *point);
    1211             : 
    1212             : typedef cairo_status_t
    1213             : (cairo_path_fixed_line_to_func_t) (void          *closure,
    1214             :                                    const cairo_point_t *point);
    1215             : 
    1216             : typedef cairo_status_t
    1217             : (cairo_path_fixed_curve_to_func_t) (void          *closure,
    1218             :                                     const cairo_point_t *p0,
    1219             :                                     const cairo_point_t *p1,
    1220             :                                     const cairo_point_t *p2);
    1221             : 
    1222             : typedef cairo_status_t
    1223             : (cairo_path_fixed_close_path_func_t) (void *closure);
    1224             : 
    1225             : cairo_private cairo_status_t
    1226             : _cairo_path_fixed_interpret (const cairo_path_fixed_t     *path,
    1227             :                        cairo_direction_t                   dir,
    1228             :                        cairo_path_fixed_move_to_func_t    *move_to,
    1229             :                        cairo_path_fixed_line_to_func_t    *line_to,
    1230             :                        cairo_path_fixed_curve_to_func_t   *curve_to,
    1231             :                        cairo_path_fixed_close_path_func_t *close_path,
    1232             :                        void                               *closure);
    1233             : 
    1234             : cairo_private cairo_status_t
    1235             : _cairo_path_fixed_interpret_flat (const cairo_path_fixed_t *path,
    1236             :                        cairo_direction_t                   dir,
    1237             :                        cairo_path_fixed_move_to_func_t    *move_to,
    1238             :                        cairo_path_fixed_line_to_func_t    *line_to,
    1239             :                        cairo_path_fixed_close_path_func_t *close_path,
    1240             :                        void                               *closure,
    1241             :                        double                             tolerance);
    1242             : 
    1243             : cairo_private cairo_bool_t
    1244             : _cairo_path_fixed_extents (const cairo_path_fixed_t *path,
    1245             :                            cairo_box_t *box);
    1246             : 
    1247             : cairo_private void
    1248             : _cairo_path_fixed_approximate_clip_extents (const cairo_path_fixed_t    *path,
    1249             :                                             cairo_rectangle_int_t *extents);
    1250             : 
    1251             : cairo_private void
    1252             : _cairo_path_fixed_approximate_fill_extents (const cairo_path_fixed_t *path,
    1253             :                                             cairo_rectangle_int_t *extents);
    1254             : 
    1255             : cairo_private void
    1256             : _cairo_path_fixed_fill_extents (const cairo_path_fixed_t        *path,
    1257             :                                 cairo_fill_rule_t        fill_rule,
    1258             :                                 double                   tolerance,
    1259             :                                 cairo_rectangle_int_t   *extents);
    1260             : 
    1261             : cairo_private void
    1262             : _cairo_path_fixed_approximate_stroke_extents (const cairo_path_fixed_t *path,
    1263             :                                               const cairo_stroke_style_t *style,
    1264             :                                               const cairo_matrix_t *ctm,
    1265             :                                               cairo_rectangle_int_t *extents);
    1266             : 
    1267             : cairo_private cairo_status_t
    1268             : _cairo_path_fixed_stroke_extents (const cairo_path_fixed_t *path,
    1269             :                                   const cairo_stroke_style_t *style,
    1270             :                                   const cairo_matrix_t *ctm,
    1271             :                                   const cairo_matrix_t *ctm_inverse,
    1272             :                                   double tolerance,
    1273             :                                   cairo_rectangle_int_t *extents);
    1274             : 
    1275             : cairo_private void
    1276             : _cairo_path_fixed_transform (cairo_path_fixed_t *path,
    1277             :                              const cairo_matrix_t       *matrix);
    1278             : 
    1279             : cairo_private cairo_bool_t
    1280             : _cairo_path_fixed_is_box (const cairo_path_fixed_t *path,
    1281             :                           cairo_box_t *box);
    1282             : 
    1283             : cairo_private cairo_bool_t
    1284             : _cairo_path_fixed_is_rectangle (const cairo_path_fixed_t *path,
    1285             :                                 cairo_box_t        *box);
    1286             : 
    1287             : /* cairo-path-in-fill.c */
    1288             : cairo_private cairo_bool_t
    1289             : _cairo_path_fixed_in_fill (const cairo_path_fixed_t     *path,
    1290             :                            cairo_fill_rule_t     fill_rule,
    1291             :                            double                tolerance,
    1292             :                            double                x,
    1293             :                            double                y);
    1294             : 
    1295             : /* cairo-path-fill.c */
    1296             : cairo_private cairo_status_t
    1297             : _cairo_path_fixed_fill_to_polygon (const cairo_path_fixed_t *path,
    1298             :                                    double              tolerance,
    1299             :                                    cairo_polygon_t      *polygon);
    1300             : 
    1301             : cairo_private cairo_int_status_t
    1302             : _cairo_path_fixed_fill_rectilinear_to_traps (const cairo_path_fixed_t *path,
    1303             :                                              cairo_fill_rule_t fill_rule,
    1304             :                                              cairo_traps_t *traps);
    1305             : 
    1306             : cairo_private cairo_status_t
    1307             : _cairo_path_fixed_fill_rectilinear_to_boxes (const cairo_path_fixed_t *path,
    1308             :                                              cairo_fill_rule_t fill_rule,
    1309             :                                              cairo_boxes_t *boxes);
    1310             : 
    1311             : cairo_private cairo_region_t *
    1312             : _cairo_path_fixed_fill_rectilinear_to_region (const cairo_path_fixed_t  *path,
    1313             :                                               cairo_fill_rule_t  fill_rule,
    1314             :                                               const cairo_rectangle_int_t *extents);
    1315             : 
    1316             : cairo_private cairo_status_t
    1317             : _cairo_path_fixed_fill_to_traps (const cairo_path_fixed_t   *path,
    1318             :                                  cairo_fill_rule_t           fill_rule,
    1319             :                                  double                      tolerance,
    1320             :                                  cairo_traps_t              *traps);
    1321             : 
    1322             : /* cairo-path-stroke.c */
    1323             : cairo_private cairo_status_t
    1324             : _cairo_path_fixed_stroke_to_polygon (const cairo_path_fixed_t   *path,
    1325             :                                      const cairo_stroke_style_t *stroke_style,
    1326             :                                      const cairo_matrix_t       *ctm,
    1327             :                                      const cairo_matrix_t       *ctm_inverse,
    1328             :                                      double              tolerance,
    1329             :                                      cairo_polygon_t    *polygon);
    1330             : 
    1331             : cairo_private cairo_int_status_t
    1332             : _cairo_path_fixed_stroke_rectilinear_to_traps (const cairo_path_fixed_t *path,
    1333             :                                                const cairo_stroke_style_t       *stroke_style,
    1334             :                                                const cairo_matrix_t     *ctm,
    1335             :                                                cairo_traps_t            *traps);
    1336             : 
    1337             : cairo_private cairo_int_status_t
    1338             : _cairo_path_fixed_stroke_rectilinear_to_boxes (const cairo_path_fixed_t *path,
    1339             :                                                const cairo_stroke_style_t       *stroke_style,
    1340             :                                                const cairo_matrix_t     *ctm,
    1341             :                                                cairo_boxes_t            *boxes);
    1342             : 
    1343             : cairo_private cairo_status_t
    1344             : _cairo_path_fixed_stroke_to_traps (const cairo_path_fixed_t     *path,
    1345             :                                    const cairo_stroke_style_t   *stroke_style,
    1346             :                                    const cairo_matrix_t *ctm,
    1347             :                                    const cairo_matrix_t *ctm_inverse,
    1348             :                                    double                tolerance,
    1349             :                                    cairo_traps_t        *traps);
    1350             : 
    1351             : cairo_private cairo_status_t
    1352             : _cairo_path_fixed_stroke_to_shaper (cairo_path_fixed_t  *path,
    1353             :                                    const cairo_stroke_style_t   *stroke_style,
    1354             :                                    const cairo_matrix_t *ctm,
    1355             :                                    const cairo_matrix_t *ctm_inverse,
    1356             :                                    double                tolerance,
    1357             :                                    cairo_status_t (*add_triangle) (void *closure,
    1358             :                                                                    const cairo_point_t triangle[3]),
    1359             :                                    cairo_status_t (*add_triangle_fan) (void *closure,
    1360             :                                                                        const cairo_point_t *midpt,
    1361             :                                                                        const cairo_point_t *points,
    1362             :                                                                        int npoints),
    1363             :                                    cairo_status_t (*add_quad) (void *closure,
    1364             :                                                                const cairo_point_t quad[4]),
    1365             :                                    void *closure);
    1366             : 
    1367             : /* cairo-scaled-font.c */
    1368             : 
    1369             : cairo_private void
    1370             : _cairo_scaled_font_freeze_cache (cairo_scaled_font_t *scaled_font);
    1371             : 
    1372             : cairo_private void
    1373             : _cairo_scaled_font_thaw_cache (cairo_scaled_font_t *scaled_font);
    1374             : 
    1375             : cairo_private void
    1376             : _cairo_scaled_font_reset_cache (cairo_scaled_font_t *scaled_font);
    1377             : 
    1378             : cairo_private cairo_status_t
    1379             : _cairo_scaled_font_set_error (cairo_scaled_font_t *scaled_font,
    1380             :                               cairo_status_t status);
    1381             : 
    1382             : cairo_private cairo_scaled_font_t *
    1383             : _cairo_scaled_font_create_in_error (cairo_status_t status);
    1384             : 
    1385             : cairo_private void
    1386             : _cairo_scaled_font_reset_static_data (void);
    1387             : 
    1388             : cairo_private cairo_status_t
    1389             : _cairo_scaled_font_register_placeholder_and_unlock_font_map (cairo_scaled_font_t *scaled_font);
    1390             : 
    1391             : cairo_private void
    1392             : _cairo_scaled_font_unregister_placeholder_and_lock_font_map (cairo_scaled_font_t *scaled_font);
    1393             : 
    1394             : cairo_private cairo_status_t
    1395             : _cairo_scaled_font_init (cairo_scaled_font_t               *scaled_font,
    1396             :                          cairo_font_face_t                 *font_face,
    1397             :                          const cairo_matrix_t              *font_matrix,
    1398             :                          const cairo_matrix_t              *ctm,
    1399             :                          const cairo_font_options_t        *options,
    1400             :                          const cairo_scaled_font_backend_t *backend);
    1401             : 
    1402             : cairo_private cairo_status_t
    1403             : _cairo_scaled_font_set_metrics (cairo_scaled_font_t         *scaled_font,
    1404             :                                 cairo_font_extents_t        *fs_metrics);
    1405             : 
    1406             : /* This should only be called on an error path by a scaled_font constructor */
    1407             : cairo_private void
    1408             : _cairo_scaled_font_fini (cairo_scaled_font_t *scaled_font);
    1409             : 
    1410             : cairo_private cairo_status_t
    1411             : _cairo_scaled_font_font_extents (cairo_scaled_font_t  *scaled_font,
    1412             :                                  cairo_font_extents_t *extents);
    1413             : 
    1414             : cairo_private cairo_status_t
    1415             : _cairo_scaled_font_glyph_device_extents (cairo_scaled_font_t     *scaled_font,
    1416             :                                          const cairo_glyph_t     *glyphs,
    1417             :                                          int                      num_glyphs,
    1418             :                                          cairo_rectangle_int_t   *extents,
    1419             :                                          cairo_bool_t            *overlap);
    1420             : 
    1421             : cairo_private void
    1422             : _cairo_scaled_font_glyph_approximate_extents (cairo_scaled_font_t        *scaled_font,
    1423             :                                               const cairo_glyph_t        *glyphs,
    1424             :                                               int                      num_glyphs,
    1425             :                                               cairo_rectangle_int_t   *extents);
    1426             : 
    1427             : cairo_private cairo_status_t
    1428             : _cairo_scaled_font_show_glyphs (cairo_scaled_font_t *scaled_font,
    1429             :                                 cairo_operator_t     op,
    1430             :                                 const cairo_pattern_t *source,
    1431             :                                 cairo_surface_t     *surface,
    1432             :                                 int                  source_x,
    1433             :                                 int                  source_y,
    1434             :                                 int                  dest_x,
    1435             :                                 int                  dest_y,
    1436             :                                 unsigned int         width,
    1437             :                                 unsigned int         height,
    1438             :                                 cairo_glyph_t       *glyphs,
    1439             :                                 int                  num_glyphs,
    1440             :                                 cairo_region_t      *clip_region);
    1441             : 
    1442             : cairo_private cairo_status_t
    1443             : _cairo_scaled_font_glyph_path (cairo_scaled_font_t *scaled_font,
    1444             :                                const cairo_glyph_t *glyphs,
    1445             :                                int                  num_glyphs,
    1446             :                                cairo_path_fixed_t  *path);
    1447             : 
    1448             : cairo_private void
    1449             : _cairo_scaled_glyph_set_metrics (cairo_scaled_glyph_t *scaled_glyph,
    1450             :                                  cairo_scaled_font_t *scaled_font,
    1451             :                                  cairo_text_extents_t *fs_metrics);
    1452             : 
    1453             : cairo_private void
    1454             : _cairo_scaled_glyph_set_surface (cairo_scaled_glyph_t *scaled_glyph,
    1455             :                                  cairo_scaled_font_t *scaled_font,
    1456             :                                  cairo_image_surface_t *surface);
    1457             : 
    1458             : cairo_private void
    1459             : _cairo_scaled_glyph_set_path (cairo_scaled_glyph_t *scaled_glyph,
    1460             :                               cairo_scaled_font_t *scaled_font,
    1461             :                               cairo_path_fixed_t *path);
    1462             : 
    1463             : cairo_private void
    1464             : _cairo_scaled_glyph_set_recording_surface (cairo_scaled_glyph_t *scaled_glyph,
    1465             :                                            cairo_scaled_font_t *scaled_font,
    1466             :                                            cairo_surface_t *recording_surface);
    1467             : 
    1468             : cairo_private cairo_int_status_t
    1469             : _cairo_scaled_glyph_lookup (cairo_scaled_font_t *scaled_font,
    1470             :                             unsigned long index,
    1471             :                             cairo_scaled_glyph_info_t info,
    1472             :                             cairo_scaled_glyph_t **scaled_glyph_ret);
    1473             : 
    1474             : cairo_private double
    1475             : _cairo_scaled_font_get_max_scale (cairo_scaled_font_t *scaled_font);
    1476             : 
    1477             : cairo_private void
    1478             : _cairo_scaled_font_map_destroy (void);
    1479             : 
    1480             : /* cairo-stroke-style.c */
    1481             : 
    1482             : cairo_private void
    1483             : _cairo_stroke_style_init (cairo_stroke_style_t *style);
    1484             : 
    1485             : cairo_private cairo_status_t
    1486             : _cairo_stroke_style_init_copy (cairo_stroke_style_t *style,
    1487             :                                const cairo_stroke_style_t *other);
    1488             : 
    1489             : cairo_private void
    1490             : _cairo_stroke_style_fini (cairo_stroke_style_t *style);
    1491             : 
    1492             : cairo_private void
    1493             : _cairo_stroke_style_max_distance_from_path (const cairo_stroke_style_t *style,
    1494             :                                             const cairo_matrix_t *ctm,
    1495             :                                             double *dx, double *dy);
    1496             : 
    1497             : cairo_private double
    1498             : _cairo_stroke_style_dash_period (const cairo_stroke_style_t *style);
    1499             : 
    1500             : cairo_private double
    1501             : _cairo_stroke_style_dash_stroked (const cairo_stroke_style_t *style);
    1502             : 
    1503             : cairo_private cairo_bool_t
    1504             : _cairo_stroke_style_dash_can_approximate (const cairo_stroke_style_t *style,
    1505             :                                           const cairo_matrix_t *ctm,
    1506             :                                           double tolerance);
    1507             : 
    1508             : cairo_private void
    1509             : _cairo_stroke_style_dash_approximate (const cairo_stroke_style_t *style,
    1510             :                                       const cairo_matrix_t *ctm,
    1511             :                                       double tolerance,
    1512             :                                       double *dash_offset,
    1513             :                                       double *dashes,
    1514             :                                       unsigned int *num_dashes);
    1515             : 
    1516             : 
    1517             : /* cairo-surface.c */
    1518             : 
    1519             : cairo_private cairo_surface_t *
    1520             : _cairo_surface_create_in_error (cairo_status_t status);
    1521             : 
    1522             : cairo_private cairo_status_t
    1523             : _cairo_surface_copy_mime_data (cairo_surface_t *dst,
    1524             :                                cairo_surface_t *src);
    1525             : 
    1526             : cairo_private cairo_status_t
    1527             : _cairo_surface_set_error (cairo_surface_t       *surface,
    1528             :                           cairo_status_t         status);
    1529             : 
    1530             : cairo_private void
    1531             : _cairo_surface_set_resolution (cairo_surface_t *surface,
    1532             :                                double x_res,
    1533             :                                double y_res);
    1534             : 
    1535             : cairo_private cairo_surface_t *
    1536             : _cairo_surface_create_similar_scratch (cairo_surface_t *other,
    1537             :                                        cairo_content_t  content,
    1538             :                                        int              width,
    1539             :                                        int              height);
    1540             : 
    1541             : cairo_private cairo_surface_t *
    1542             : _cairo_surface_create_similar_solid (cairo_surface_t        *other,
    1543             :                                      cairo_content_t         content,
    1544             :                                      int                     width,
    1545             :                                      int                     height,
    1546             :                                      const cairo_color_t    *color,
    1547             :                                      cairo_bool_t            allow_fallback);
    1548             : 
    1549             : cairo_private cairo_surface_t *
    1550             : _cairo_surface_create_solid_pattern_surface (cairo_surface_t       *other,
    1551             :                                              const cairo_solid_pattern_t *solid_pattern);
    1552             : 
    1553             : cairo_private cairo_int_status_t
    1554             : _cairo_surface_repaint_solid_pattern_surface (cairo_surface_t       *other,
    1555             :                                               cairo_surface_t       *solid_surface,
    1556             :                                               const cairo_solid_pattern_t *solid_pattern);
    1557             : 
    1558             : cairo_private void
    1559             : _cairo_surface_init (cairo_surface_t                    *surface,
    1560             :                      const cairo_surface_backend_t      *backend,
    1561             :                      cairo_device_t                     *device,
    1562             :                      cairo_content_t                     content);
    1563             : 
    1564             : cairo_private void
    1565             : _cairo_surface_set_font_options (cairo_surface_t       *surface,
    1566             :                                  cairo_font_options_t  *options);
    1567             : 
    1568             : cairo_private cairo_status_t
    1569             : _cairo_surface_composite (cairo_operator_t      op,
    1570             :                           const cairo_pattern_t *src,
    1571             :                           const cairo_pattern_t *mask,
    1572             :                           cairo_surface_t       *dst,
    1573             :                           int                    src_x,
    1574             :                           int                    src_y,
    1575             :                           int                    mask_x,
    1576             :                           int                    mask_y,
    1577             :                           int                    dst_x,
    1578             :                           int                    dst_y,
    1579             :                           unsigned int           width,
    1580             :                           unsigned int           height,
    1581             :                           cairo_region_t        *clip_region);
    1582             : 
    1583             : cairo_private cairo_status_t
    1584             : _cairo_surface_fill_rectangle (cairo_surface_t     *surface,
    1585             :                                cairo_operator_t     op,
    1586             :                                const cairo_color_t *color,
    1587             :                                int                  x,
    1588             :                                int                  y,
    1589             :                                int                  width,
    1590             :                                int                  height);
    1591             : 
    1592             : cairo_private cairo_status_t
    1593             : _cairo_surface_fill_region (cairo_surface_t        *surface,
    1594             :                             cairo_operator_t        op,
    1595             :                             const cairo_color_t    *color,
    1596             :                             cairo_region_t         *region);
    1597             : 
    1598             : cairo_private cairo_status_t
    1599             : _cairo_surface_fill_rectangles (cairo_surface_t         *surface,
    1600             :                                 cairo_operator_t         op,
    1601             :                                 const cairo_color_t     *color,
    1602             :                                 cairo_rectangle_int_t   *rects,
    1603             :                                 int                      num_rects);
    1604             : 
    1605             : cairo_private cairo_status_t
    1606             : _cairo_surface_paint (cairo_surface_t   *surface,
    1607             :                       cairo_operator_t   op,
    1608             :                       const cairo_pattern_t *source,
    1609             :                       cairo_clip_t          *clip);
    1610             : 
    1611             : cairo_private cairo_status_t
    1612             : _cairo_surface_mask (cairo_surface_t    *surface,
    1613             :                      cairo_operator_t    op,
    1614             :                      const cairo_pattern_t      *source,
    1615             :                      const cairo_pattern_t      *mask,
    1616             :                      cairo_clip_t               *clip);
    1617             : 
    1618             : cairo_private cairo_status_t
    1619             : _cairo_surface_fill_stroke (cairo_surface_t         *surface,
    1620             :                             cairo_operator_t         fill_op,
    1621             :                             const cairo_pattern_t   *fill_source,
    1622             :                             cairo_fill_rule_t        fill_rule,
    1623             :                             double                   fill_tolerance,
    1624             :                             cairo_antialias_t        fill_antialias,
    1625             :                             cairo_path_fixed_t      *path,
    1626             :                             cairo_operator_t         stroke_op,
    1627             :                             const cairo_pattern_t   *stroke_source,
    1628             :                             const cairo_stroke_style_t    *stroke_style,
    1629             :                             const cairo_matrix_t            *stroke_ctm,
    1630             :                             const cairo_matrix_t            *stroke_ctm_inverse,
    1631             :                             double                   stroke_tolerance,
    1632             :                             cairo_antialias_t        stroke_antialias,
    1633             :                             cairo_clip_t            *clip);
    1634             : 
    1635             : cairo_private cairo_status_t
    1636             : _cairo_surface_stroke (cairo_surface_t          *surface,
    1637             :                        cairo_operator_t          op,
    1638             :                        const cairo_pattern_t    *source,
    1639             :                        cairo_path_fixed_t       *path,
    1640             :                        const cairo_stroke_style_t       *style,
    1641             :                        const cairo_matrix_t             *ctm,
    1642             :                        const cairo_matrix_t             *ctm_inverse,
    1643             :                        double                    tolerance,
    1644             :                        cairo_antialias_t         antialias,
    1645             :                        cairo_clip_t             *clip);
    1646             : 
    1647             : cairo_private cairo_status_t
    1648             : _cairo_surface_fill (cairo_surface_t    *surface,
    1649             :                      cairo_operator_t    op,
    1650             :                      const cairo_pattern_t *source,
    1651             :                      cairo_path_fixed_t *path,
    1652             :                      cairo_fill_rule_t   fill_rule,
    1653             :                      double              tolerance,
    1654             :                      cairo_antialias_t   antialias,
    1655             :                      cairo_clip_t       *clip);
    1656             : 
    1657             : cairo_private cairo_status_t
    1658             : _cairo_surface_show_text_glyphs (cairo_surface_t            *surface,
    1659             :                                  cairo_operator_t            op,
    1660             :                                  const cairo_pattern_t      *source,
    1661             :                                  const char                 *utf8,
    1662             :                                  int                         utf8_len,
    1663             :                                  cairo_glyph_t              *glyphs,
    1664             :                                  int                         num_glyphs,
    1665             :                                  const cairo_text_cluster_t *clusters,
    1666             :                                  int                         num_clusters,
    1667             :                                  cairo_text_cluster_flags_t  cluster_flags,
    1668             :                                  cairo_scaled_font_t        *scaled_font,
    1669             :                                  cairo_clip_t               *clip);
    1670             : 
    1671             : cairo_private cairo_status_t
    1672             : _cairo_surface_paint_extents (cairo_surface_t *surface,
    1673             :                               cairo_operator_t          op,
    1674             :                               const cairo_pattern_t     *source,
    1675             :                               cairo_clip_t              *clip,
    1676             :                               cairo_rectangle_int_t     *extents);
    1677             : 
    1678             : cairo_private cairo_status_t
    1679             : _cairo_surface_mask_extents (cairo_surface_t *surface,
    1680             :                              cairo_operator_t            op,
    1681             :                              const cairo_pattern_t      *source,
    1682             :                              const cairo_pattern_t      *mask,
    1683             :                              cairo_clip_t               *clip,
    1684             :                              cairo_rectangle_int_t      *extents);
    1685             : 
    1686             : cairo_private cairo_status_t
    1687             : _cairo_surface_stroke_extents (cairo_surface_t *surface,
    1688             :                                cairo_operator_t op,
    1689             :                                const cairo_pattern_t *source,
    1690             :                                cairo_path_fixed_t       *path,
    1691             :                                const cairo_stroke_style_t *style,
    1692             :                                const cairo_matrix_t *ctm,
    1693             :                                const cairo_matrix_t *ctm_inverse,
    1694             :                                double tolerance,
    1695             :                                cairo_antialias_t         antialias,
    1696             :                                cairo_clip_t *clip,
    1697             :                                cairo_rectangle_int_t *extents);
    1698             : 
    1699             : cairo_private cairo_status_t
    1700             : _cairo_surface_fill_extents (cairo_surface_t            *surface,
    1701             :                              cairo_operator_t            op,
    1702             :                              const cairo_pattern_t      *source,
    1703             :                              cairo_path_fixed_t         *path,
    1704             :                              cairo_fill_rule_t           fill_rule,
    1705             :                              double                      tolerance,
    1706             :                              cairo_antialias_t           antialias,
    1707             :                              cairo_clip_t               *clip,
    1708             :                              cairo_rectangle_int_t      *extents);
    1709             : 
    1710             : cairo_private cairo_status_t
    1711             : _cairo_surface_glyphs_extents (cairo_surface_t *surface,
    1712             :                                cairo_operator_t    op,
    1713             :                                const cairo_pattern_t *source,
    1714             :                                cairo_glyph_t      *glyphs,
    1715             :                                int                 num_glyphs,
    1716             :                                cairo_scaled_font_t  *scaled_font,
    1717             :                                cairo_clip_t         *clip,
    1718             :                                cairo_rectangle_int_t *extents);
    1719             : 
    1720             : cairo_private cairo_status_t
    1721             : _cairo_surface_composite_trapezoids (cairo_operator_t   op,
    1722             :                                      const cairo_pattern_t *pattern,
    1723             :                                      cairo_surface_t    *dst,
    1724             :                                      cairo_antialias_t  antialias,
    1725             :                                      int                src_x,
    1726             :                                      int                src_y,
    1727             :                                      int                dst_x,
    1728             :                                      int                dst_y,
    1729             :                                      unsigned int       width,
    1730             :                                      unsigned int       height,
    1731             :                                      cairo_trapezoid_t  *traps,
    1732             :                                      int                ntraps,
    1733             :                                      cairo_region_t     *clip_region);
    1734             : 
    1735             : cairo_private cairo_span_renderer_t *
    1736             : _cairo_surface_create_span_renderer (cairo_operator_t                    op,
    1737             :                                      const cairo_pattern_t              *pattern,
    1738             :                                      cairo_surface_t                    *dst,
    1739             :                                      cairo_antialias_t                   antialias,
    1740             :                                      const cairo_composite_rectangles_t *rects,
    1741             :                                      cairo_region_t                     *clip_region);
    1742             : 
    1743             : cairo_private cairo_bool_t
    1744             : _cairo_surface_check_span_renderer (cairo_operator_t                     op,
    1745             :                                     const cairo_pattern_t               *pattern,
    1746             :                                     cairo_surface_t                     *dst,
    1747             :                                     cairo_antialias_t                    antialias);
    1748             : 
    1749             : cairo_private cairo_status_t
    1750             : _cairo_surface_acquire_source_image (cairo_surface_t         *surface,
    1751             :                                      cairo_image_surface_t  **image_out,
    1752             :                                      void                   **image_extra);
    1753             : 
    1754             : cairo_private void
    1755             : _cairo_surface_release_source_image (cairo_surface_t        *surface,
    1756             :                                      cairo_image_surface_t  *image,
    1757             :                                      void                   *image_extra);
    1758             : 
    1759             : cairo_private cairo_status_t
    1760             : _cairo_surface_acquire_dest_image (cairo_surface_t         *surface,
    1761             :                                    cairo_rectangle_int_t   *interest_rect,
    1762             :                                    cairo_image_surface_t  **image_out,
    1763             :                                    cairo_rectangle_int_t   *image_rect,
    1764             :                                    void                   **image_extra);
    1765             : 
    1766             : cairo_private void
    1767             : _cairo_surface_release_dest_image (cairo_surface_t        *surface,
    1768             :                                    cairo_rectangle_int_t  *interest_rect,
    1769             :                                    cairo_image_surface_t  *image,
    1770             :                                    cairo_rectangle_int_t  *image_rect,
    1771             :                                    void                   *image_extra);
    1772             : 
    1773             : cairo_private cairo_status_t
    1774             : _cairo_surface_clone_similar (cairo_surface_t  *surface,
    1775             :                               cairo_surface_t  *src,
    1776             :                               int               src_x,
    1777             :                               int               src_y,
    1778             :                               int               width,
    1779             :                               int               height,
    1780             :                               int              *clone_offset_x,
    1781             :                               int              *clone_offset_y,
    1782             :                               cairo_surface_t **clone_out);
    1783             : 
    1784             : cairo_private cairo_surface_t *
    1785             : _cairo_surface_snapshot (cairo_surface_t *surface);
    1786             : 
    1787             : cairo_private cairo_surface_t *
    1788             : _cairo_surface_has_snapshot (cairo_surface_t *surface,
    1789             :                              const cairo_surface_backend_t *backend);
    1790             : 
    1791             : cairo_private cairo_bool_t
    1792             : _cairo_surface_is_similar (cairo_surface_t *surface_a,
    1793             :                            cairo_surface_t *surface_b);
    1794             : 
    1795             : cairo_private cairo_bool_t
    1796             : _cairo_surface_get_extents (cairo_surface_t         *surface,
    1797             :                             cairo_rectangle_int_t   *extents);
    1798             : 
    1799             : cairo_private cairo_status_t
    1800             : _cairo_surface_old_show_glyphs (cairo_scaled_font_t     *scaled_font,
    1801             :                                 cairo_operator_t         op,
    1802             :                                 const cairo_pattern_t   *pattern,
    1803             :                                 cairo_surface_t         *surface,
    1804             :                                 int                      source_x,
    1805             :                                 int                      source_y,
    1806             :                                 int                      dest_x,
    1807             :                                 int                      dest_y,
    1808             :                                 unsigned int             width,
    1809             :                                 unsigned int             height,
    1810             :                                 cairo_glyph_t           *glyphs,
    1811             :                                 int                      num_glyphs,
    1812             :                                 cairo_region_t          *clip_region);
    1813             : 
    1814             : cairo_private cairo_status_t
    1815             : _cairo_surface_composite_fixup_unbounded (cairo_surface_t            *dst,
    1816             :                                           cairo_surface_attributes_t *src_attr,
    1817             :                                           int                         src_width,
    1818             :                                           int                         src_height,
    1819             :                                           cairo_surface_attributes_t *mask_attr,
    1820             :                                           int                         mask_width,
    1821             :                                           int                         mask_height,
    1822             :                                           int                         src_x,
    1823             :                                           int                         src_y,
    1824             :                                           int                         mask_x,
    1825             :                                           int                         mask_y,
    1826             :                                           int                         dst_x,
    1827             :                                           int                         dst_y,
    1828             :                                           unsigned int                width,
    1829             :                                           unsigned int                height,
    1830             :                                           cairo_region_t            *clip_region);
    1831             : 
    1832             : cairo_private cairo_status_t
    1833             : _cairo_surface_composite_shape_fixup_unbounded (cairo_surface_t            *dst,
    1834             :                                                 cairo_surface_attributes_t *src_attr,
    1835             :                                                 int                         src_width,
    1836             :                                                 int                         src_height,
    1837             :                                                 int                         mask_width,
    1838             :                                                 int                         mask_height,
    1839             :                                                 int                         src_x,
    1840             :                                                 int                         src_y,
    1841             :                                                 int                         mask_x,
    1842             :                                                 int                         mask_y,
    1843             :                                                 int                         dst_x,
    1844             :                                                 int                         dst_y,
    1845             :                                                 unsigned int                width,
    1846             :                                                 unsigned int                height,
    1847             :                                                 cairo_region_t              *clip_region);
    1848             : 
    1849             : cairo_private cairo_bool_t
    1850             : _cairo_surface_is_opaque (const cairo_surface_t *surface);
    1851             : 
    1852             : cairo_private int
    1853             : _cairo_surface_get_text_path_fill_threshold (const cairo_surface_t *surface);
    1854             : 
    1855             : cairo_private void
    1856             : _cairo_surface_set_device_scale (cairo_surface_t *surface,
    1857             :                                  double           sx,
    1858             :                                  double           sy);
    1859             : 
    1860             : cairo_private cairo_bool_t
    1861             : _cairo_surface_has_device_transform (cairo_surface_t *surface) cairo_pure;
    1862             : 
    1863             : cairo_private void
    1864             : _cairo_surface_release_device_reference (cairo_surface_t *surface);
    1865             : 
    1866             : /* cairo-image-surface.c */
    1867             : 
    1868             : /* XXX: In cairo 1.2.0 we added a new %CAIRO_FORMAT_RGB16_565 but
    1869             :  * neglected to adjust this macro. The net effect is that it's
    1870             :  * impossible to externally create an image surface with this
    1871             :  * format. This is perhaps a good thing since we also neglected to fix
    1872             :  * up things like cairo_surface_write_to_png() for the new format
    1873             :  * (-Wswitch-enum will tell you where). Is it obvious that format was
    1874             :  * added in haste?
    1875             :  *
    1876             :  * The reason for the new format was to allow the xlib backend to be
    1877             :  * used on X servers with a 565 visual. So the new format did its job
    1878             :  * for that, even without being considered "valid" for the sake of
    1879             :  * things like cairo_image_surface_create().
    1880             :  *
    1881             :  * Since 1.2.0 we ran into the same situtation with X servers with BGR
    1882             :  * visuals. This time we invented #cairo_internal_format_t instead,
    1883             :  * (see it for more discussion).
    1884             :  *
    1885             :  * The punchline is that %CAIRO_FORMAT_VALID must not conside any
    1886             :  * internal format to be valid. Also we need to decide if the
    1887             :  * RGB16_565 should be moved to instead be an internal format. If so,
    1888             :  * this macro need not change for it. (We probably will need to leave
    1889             :  * an RGB16_565 value in the header files for the sake of code that
    1890             :  * might have that value in it.)
    1891             :  *
    1892             :  * If we do decide to start fully supporting RGB16_565 as an external
    1893             :  * format, then %CAIRO_FORMAT_VALID needs to be adjusted to include
    1894             :  * it. But that should not happen before all necessary code is fixed
    1895             :  * to support it (at least cairo_surface_write_to_png() and a few spots
    1896             :  * in cairo-xlib-surface.c--again see -Wswitch-enum).
    1897             :  */
    1898             : #define CAIRO_FORMAT_VALID(format) ((format) >= CAIRO_FORMAT_ARGB32 &&               \
    1899             :                                     (format) <= CAIRO_FORMAT_RGB16_565)
    1900             : 
    1901             : /* pixman-required stride alignment in bytes. */
    1902             : #define CAIRO_STRIDE_ALIGNMENT (sizeof (uint32_t))
    1903             : #define CAIRO_STRIDE_FOR_WIDTH_BPP(w,bpp) \
    1904             :    ((((bpp)*(w)+7)/8 + CAIRO_STRIDE_ALIGNMENT-1) & -CAIRO_STRIDE_ALIGNMENT)
    1905             : 
    1906             : #define CAIRO_CONTENT_VALID(content) ((content) &&                               \
    1907             :                                       (((content) & ~(CAIRO_CONTENT_COLOR |      \
    1908             :                                                       CAIRO_CONTENT_ALPHA |      \
    1909             :                                                       CAIRO_CONTENT_COLOR_ALPHA))\
    1910             :                                        == 0))
    1911             : 
    1912             : static inline cairo_bool_t
    1913             : _cairo_valid_stride_alignment(int stride)
    1914             : {
    1915             :     return !(stride & (CAIRO_STRIDE_ALIGNMENT-1));
    1916             : }
    1917             : 
    1918             : cairo_private int
    1919             : _cairo_format_bits_per_pixel (cairo_format_t format) cairo_const;
    1920             : 
    1921             : cairo_private cairo_format_t
    1922             : _cairo_format_from_content (cairo_content_t content) cairo_const;
    1923             : 
    1924             : cairo_private cairo_format_t
    1925             : _cairo_format_from_pixman_format (pixman_format_code_t pixman_format);
    1926             : 
    1927             : cairo_private cairo_content_t
    1928             : _cairo_content_from_format (cairo_format_t format) cairo_const;
    1929             : 
    1930             : cairo_private cairo_content_t
    1931             : _cairo_content_from_pixman_format (pixman_format_code_t pixman_format);
    1932             : 
    1933             : cairo_private cairo_surface_t *
    1934             : _cairo_image_surface_create_for_pixman_image (pixman_image_t            *pixman_image,
    1935             :                                               pixman_format_code_t       pixman_format);
    1936             : 
    1937             : cairo_private pixman_format_code_t
    1938             : _cairo_format_to_pixman_format_code (cairo_format_t format);
    1939             : 
    1940             : cairo_private cairo_bool_t
    1941             : _pixman_format_from_masks (cairo_format_masks_t *masks,
    1942             :                            pixman_format_code_t *format_ret);
    1943             : 
    1944             : cairo_private cairo_bool_t
    1945             : _pixman_format_to_masks (pixman_format_code_t    pixman_format,
    1946             :                          cairo_format_masks_t   *masks);
    1947             : 
    1948             : cairo_private void
    1949             : _cairo_image_reset_static_data (void);
    1950             : 
    1951             : cairo_private cairo_surface_t *
    1952             : _cairo_image_surface_create_with_pixman_format (unsigned char           *data,
    1953             :                                                 pixman_format_code_t     pixman_format,
    1954             :                                                 int                      width,
    1955             :                                                 int                      height,
    1956             :                                                 int                      stride);
    1957             : 
    1958             : cairo_private cairo_surface_t *
    1959             : _cairo_image_surface_create_with_content (cairo_content_t       content,
    1960             :                                           int                   width,
    1961             :                                           int                   height);
    1962             : 
    1963             : cairo_private void
    1964             : _cairo_image_surface_assume_ownership_of_data (cairo_image_surface_t *surface);
    1965             : 
    1966             : cairo_private cairo_image_surface_t *
    1967             : _cairo_image_surface_coerce (cairo_image_surface_t      *surface);
    1968             : 
    1969             : cairo_private cairo_image_surface_t *
    1970             : _cairo_image_surface_coerce_to_format (cairo_image_surface_t    *surface,
    1971             :                                        cairo_format_t            format);
    1972             : 
    1973             : cairo_private void
    1974             : _cairo_image_surface_span_render_row (int                                y,
    1975             :                                       const cairo_half_open_span_t       *spans,
    1976             :                                       unsigned                           num_spans,
    1977             :                                       uint8_t                           *data,
    1978             :                                       uint32_t                           stride);
    1979             : 
    1980             : cairo_private cairo_image_transparency_t
    1981             : _cairo_image_analyze_transparency (cairo_image_surface_t      *image);
    1982             : 
    1983             : cairo_private cairo_bool_t
    1984             : _cairo_surface_is_image (const cairo_surface_t *surface) cairo_pure;
    1985             : 
    1986             : cairo_private cairo_bool_t
    1987             : _cairo_surface_is_recording (const cairo_surface_t *surface) cairo_pure;
    1988             : 
    1989             : /* cairo-pen.c */
    1990             : cairo_private cairo_status_t
    1991             : _cairo_pen_init (cairo_pen_t    *pen,
    1992             :                  double          radius,
    1993             :                  double          tolerance,
    1994             :                  const cairo_matrix_t   *ctm);
    1995             : 
    1996             : cairo_private void
    1997             : _cairo_pen_init_empty (cairo_pen_t *pen);
    1998             : 
    1999             : cairo_private cairo_status_t
    2000             : _cairo_pen_init_copy (cairo_pen_t *pen, const cairo_pen_t *other);
    2001             : 
    2002             : cairo_private void
    2003             : _cairo_pen_fini (cairo_pen_t *pen);
    2004             : 
    2005             : cairo_private cairo_status_t
    2006             : _cairo_pen_add_points (cairo_pen_t *pen, cairo_point_t *point, int num_points);
    2007             : 
    2008             : cairo_private cairo_status_t
    2009             : _cairo_pen_add_points_for_slopes (cairo_pen_t *pen,
    2010             :                                   cairo_point_t *a,
    2011             :                                   cairo_point_t *b,
    2012             :                                   cairo_point_t *c,
    2013             :                                   cairo_point_t *d);
    2014             : 
    2015             : cairo_private int
    2016             : _cairo_pen_find_active_cw_vertex_index (const cairo_pen_t *pen,
    2017             :                                         const cairo_slope_t *slope);
    2018             : 
    2019             : cairo_private int
    2020             : _cairo_pen_find_active_ccw_vertex_index (const cairo_pen_t *pen,
    2021             :                                          const cairo_slope_t *slope);
    2022             : 
    2023             : /* cairo-polygon.c */
    2024             : cairo_private void
    2025             : _cairo_polygon_init (cairo_polygon_t *polygon);
    2026             : 
    2027             : cairo_private void
    2028             : _cairo_polygon_limit (cairo_polygon_t   *polygon,
    2029             :                       const cairo_box_t *boxes,
    2030             :                       int                num_boxes);
    2031             : 
    2032             : cairo_private void
    2033             : _cairo_polygon_fini (cairo_polygon_t *polygon);
    2034             : 
    2035             : cairo_private cairo_status_t
    2036             : _cairo_polygon_add_line (cairo_polygon_t *polygon,
    2037             :                          const cairo_line_t *line,
    2038             :                          int top, int bottom,
    2039             :                          int dir);
    2040             : 
    2041             : cairo_private cairo_status_t
    2042             : _cairo_polygon_add_external_edge (void *polygon,
    2043             :                                   const cairo_point_t *p1,
    2044             :                                   const cairo_point_t *p2);
    2045             : 
    2046             : cairo_private cairo_status_t
    2047             : _cairo_polygon_move_to (cairo_polygon_t *polygon,
    2048             :                         const cairo_point_t *point);
    2049             : 
    2050             : cairo_private cairo_status_t
    2051             : _cairo_polygon_line_to (cairo_polygon_t *polygon,
    2052             :                         const cairo_point_t *point);
    2053             : 
    2054             : cairo_private cairo_status_t
    2055             : _cairo_polygon_close (cairo_polygon_t *polygon);
    2056             : 
    2057             : #define _cairo_polygon_status(P) ((cairo_polygon_t *) (P))->status
    2058             : 
    2059             : /* cairo-spline.c */
    2060             : cairo_private cairo_bool_t
    2061             : _cairo_spline_init (cairo_spline_t *spline,
    2062             :                     cairo_spline_add_point_func_t add_point_func,
    2063             :                     void *closure,
    2064             :                     const cairo_point_t *a, const cairo_point_t *b,
    2065             :                     const cairo_point_t *c, const cairo_point_t *d);
    2066             : 
    2067             : cairo_private cairo_status_t
    2068             : _cairo_spline_decompose (cairo_spline_t *spline, double tolerance);
    2069             : 
    2070             : cairo_private cairo_status_t
    2071             : _cairo_spline_bound (cairo_spline_add_point_func_t add_point_func,
    2072             :                      void *closure,
    2073             :                      const cairo_point_t *p0, const cairo_point_t *p1,
    2074             :                      const cairo_point_t *p2, const cairo_point_t *p3);
    2075             : 
    2076             : /* cairo-matrix.c */
    2077             : cairo_private void
    2078             : _cairo_matrix_get_affine (const cairo_matrix_t *matrix,
    2079             :                           double *xx, double *yx,
    2080             :                           double *xy, double *yy,
    2081             :                           double *x0, double *y0);
    2082             : 
    2083             : cairo_private void
    2084             : _cairo_matrix_transform_bounding_box (const cairo_matrix_t *matrix,
    2085             :                                       double *x1, double *y1,
    2086             :                                       double *x2, double *y2,
    2087             :                                       cairo_bool_t *is_tight);
    2088             : 
    2089             : cairo_private void
    2090             : _cairo_matrix_transform_bounding_box_fixed (const cairo_matrix_t *matrix,
    2091             :                                             cairo_box_t          *bbox,
    2092             :                                             cairo_bool_t         *is_tight);
    2093             : 
    2094             : cairo_private cairo_bool_t
    2095             : _cairo_matrix_is_invertible (const cairo_matrix_t *matrix) cairo_pure;
    2096             : 
    2097             : cairo_private cairo_bool_t
    2098             : _cairo_matrix_is_scale_0 (const cairo_matrix_t *matrix) cairo_pure;
    2099             : 
    2100             : cairo_private double
    2101             : _cairo_matrix_compute_determinant (const cairo_matrix_t *matrix) cairo_pure;
    2102             : 
    2103             : cairo_private cairo_status_t
    2104             : _cairo_matrix_compute_basis_scale_factors (const cairo_matrix_t *matrix,
    2105             :                                            double *sx, double *sy, int x_major);
    2106             : 
    2107             : cairo_private cairo_bool_t
    2108             : _cairo_matrix_is_identity (const cairo_matrix_t *matrix) cairo_pure;
    2109             : 
    2110             : cairo_private cairo_bool_t
    2111             : _cairo_matrix_is_translation (const cairo_matrix_t *matrix) cairo_pure;
    2112             : 
    2113             : cairo_private cairo_bool_t
    2114             : _cairo_matrix_is_integer_translation(const cairo_matrix_t *matrix,
    2115             :                                      int *itx, int *ity);
    2116             : 
    2117             : cairo_private cairo_bool_t
    2118             : _cairo_matrix_has_unity_scale (const cairo_matrix_t *matrix);
    2119             : 
    2120             : cairo_private cairo_bool_t
    2121             : _cairo_matrix_is_pixel_exact (const cairo_matrix_t *matrix) cairo_pure;
    2122             : 
    2123             : cairo_private void
    2124             : _cairo_matrix_transformed_circle_axes (const cairo_matrix_t *matrix,
    2125             :                                        double radius,
    2126             :                                        double *major,
    2127             :                                        double *minor);
    2128             : 
    2129             : cairo_private double
    2130             : _cairo_matrix_transformed_circle_major_axis (const cairo_matrix_t *matrix,
    2131             :                                              double radius) cairo_pure;
    2132             : 
    2133             : cairo_private void
    2134             : _cairo_matrix_to_pixman_matrix (const cairo_matrix_t    *matrix,
    2135             :                                 pixman_transform_t      *pixman_transform,
    2136             :                                 double                   xc,
    2137             :                                 double                   yc);
    2138             : 
    2139             : /* cairo-traps.c */
    2140             : cairo_private void
    2141             : _cairo_traps_init (cairo_traps_t *traps);
    2142             : 
    2143             : cairo_private void
    2144             : _cairo_traps_limit (cairo_traps_t       *traps,
    2145             :                     const cairo_box_t   *boxes,
    2146             :                     int                  num_boxes);
    2147             : 
    2148             : cairo_private cairo_status_t
    2149             : _cairo_traps_init_boxes (cairo_traps_t      *traps,
    2150             :                          const cairo_boxes_t *boxes);
    2151             : 
    2152             : cairo_private void
    2153             : _cairo_traps_clear (cairo_traps_t *traps);
    2154             : 
    2155             : cairo_private void
    2156             : _cairo_traps_fini (cairo_traps_t *traps);
    2157             : 
    2158             : #define _cairo_traps_status(T) (T)->status
    2159             : 
    2160             : cairo_private void
    2161             : _cairo_traps_translate (cairo_traps_t *traps, int x, int y);
    2162             : 
    2163             : cairo_private cairo_status_t
    2164             : _cairo_traps_tessellate_rectangle (cairo_traps_t *traps,
    2165             :                                    const cairo_point_t *top_left,
    2166             :                                    const cairo_point_t *bottom_right);
    2167             : 
    2168             : cairo_private void
    2169             : _cairo_traps_add_trap (cairo_traps_t *traps,
    2170             :                        cairo_fixed_t top, cairo_fixed_t bottom,
    2171             :                        cairo_line_t *left, cairo_line_t *right);
    2172             : 
    2173             : cairo_private cairo_status_t
    2174             : _cairo_bentley_ottmann_tessellate_rectilinear_polygon (cairo_traps_t     *traps,
    2175             :                                                        const cairo_polygon_t *polygon,
    2176             :                                                        cairo_fill_rule_t          fill_rule);
    2177             : 
    2178             : cairo_private cairo_status_t
    2179             : _cairo_bentley_ottmann_tessellate_polygon (cairo_traps_t         *traps,
    2180             :                                            const cairo_polygon_t *polygon,
    2181             :                                            cairo_fill_rule_t      fill_rule);
    2182             : 
    2183             : cairo_private cairo_status_t
    2184             : _cairo_bentley_ottmann_tessellate_traps (cairo_traps_t *traps,
    2185             :                                          cairo_fill_rule_t fill_rule);
    2186             : 
    2187             : cairo_private cairo_status_t
    2188             : _cairo_bentley_ottmann_tessellate_rectangular_traps (cairo_traps_t *traps,
    2189             :                                                      cairo_fill_rule_t fill_rule);
    2190             : 
    2191             : cairo_private cairo_status_t
    2192             : _cairo_bentley_ottmann_tessellate_boxes (const cairo_boxes_t *in,
    2193             :                                          cairo_fill_rule_t fill_rule,
    2194             :                                          cairo_boxes_t *out);
    2195             : 
    2196             : cairo_private cairo_status_t
    2197             : _cairo_bentley_ottmann_tessellate_rectilinear_traps (cairo_traps_t *traps,
    2198             :                                                      cairo_fill_rule_t fill_rule);
    2199             : 
    2200             : cairo_private cairo_status_t
    2201             : _cairo_bentley_ottmann_tessellate_rectilinear_polygon_to_boxes (const cairo_polygon_t *polygon,
    2202             :                                                                 cairo_fill_rule_t fill_rule,
    2203             :                                                                 cairo_boxes_t *boxes);
    2204             : 
    2205             : cairo_private int
    2206             : _cairo_traps_contain (const cairo_traps_t *traps,
    2207             :                       double x, double y);
    2208             : 
    2209             : cairo_private void
    2210             : _cairo_traps_extents (const cairo_traps_t *traps,
    2211             :                       cairo_box_t         *extents);
    2212             : 
    2213             : cairo_private cairo_int_status_t
    2214             : _cairo_traps_extract_region (cairo_traps_t  *traps,
    2215             :                              cairo_region_t **region);
    2216             : 
    2217             : cairo_private cairo_status_t
    2218             : _cairo_traps_path (const cairo_traps_t *traps,
    2219             :                    cairo_path_fixed_t  *path);
    2220             : 
    2221             : cairo_private void
    2222             : _cairo_trapezoid_array_translate_and_scale (cairo_trapezoid_t *offset_traps,
    2223             :                                             cairo_trapezoid_t *src_traps,
    2224             :                                             int num_traps,
    2225             :                                             double tx, double ty,
    2226             :                                             double sx, double sy);
    2227             : 
    2228             : /* cairo-pattern.c */
    2229             : 
    2230             : cairo_private cairo_pattern_t *
    2231             : _cairo_pattern_create_in_error (cairo_status_t status);
    2232             : 
    2233             : cairo_private cairo_status_t
    2234             : _cairo_pattern_create_copy (cairo_pattern_t       **pattern,
    2235             :                             const cairo_pattern_t  *other);
    2236             : 
    2237             : cairo_private cairo_status_t
    2238             : _cairo_pattern_init_copy (cairo_pattern_t       *pattern,
    2239             :                           const cairo_pattern_t *other);
    2240             : 
    2241             : cairo_private void
    2242             : _cairo_pattern_init_static_copy (cairo_pattern_t        *pattern,
    2243             :                                  const cairo_pattern_t *other);
    2244             : 
    2245             : cairo_private cairo_status_t
    2246             : _cairo_pattern_init_snapshot (cairo_pattern_t       *pattern,
    2247             :                               const cairo_pattern_t *other);
    2248             : 
    2249             : cairo_private void
    2250             : _cairo_pattern_init_solid (cairo_solid_pattern_t        *pattern,
    2251             :                            const cairo_color_t          *color);
    2252             : 
    2253             : cairo_private void
    2254             : _cairo_pattern_init_for_surface (cairo_surface_pattern_t *pattern,
    2255             :                                  cairo_surface_t *surface);
    2256             : 
    2257             : cairo_private void
    2258             : _cairo_pattern_init_linear (cairo_linear_pattern_t *pattern,
    2259             :                             double x0, double y0, double x1, double y1);
    2260             : 
    2261             : cairo_private void
    2262             : _cairo_pattern_init_radial (cairo_radial_pattern_t *pattern,
    2263             :                             double cx0, double cy0, double radius0,
    2264             :                             double cx1, double cy1, double radius1);
    2265             : 
    2266             : cairo_private void
    2267             : _cairo_pattern_fini (cairo_pattern_t *pattern);
    2268             : 
    2269             : cairo_private cairo_pattern_t *
    2270             : _cairo_pattern_create_solid (const cairo_color_t        *color);
    2271             : 
    2272             : cairo_private void
    2273             : _cairo_pattern_transform (cairo_pattern_t      *pattern,
    2274             :                           const cairo_matrix_t *ctm_inverse);
    2275             : 
    2276             : cairo_private cairo_bool_t
    2277             : _cairo_gradient_pattern_is_solid (const cairo_gradient_pattern_t *gradient,
    2278             :                                   const cairo_rectangle_int_t *extents,
    2279             :                                   cairo_color_t *color);
    2280             : 
    2281             : cairo_private cairo_bool_t
    2282             : _cairo_pattern_is_opaque_solid (const cairo_pattern_t *pattern);
    2283             : 
    2284             : cairo_private cairo_bool_t
    2285             : _cairo_pattern_is_opaque (const cairo_pattern_t *pattern,
    2286             :                           const cairo_rectangle_int_t *extents);
    2287             : 
    2288             : cairo_private cairo_bool_t
    2289             : _cairo_pattern_is_clear (const cairo_pattern_t *pattern);
    2290             : 
    2291             : cairo_private_no_warn cairo_filter_t
    2292             : _cairo_pattern_analyze_filter (const cairo_pattern_t    *pattern,
    2293             :                                double                   *pad_out);
    2294             : 
    2295             : enum {
    2296             :     CAIRO_PATTERN_ACQUIRE_NONE = 0x0,
    2297             :     CAIRO_PATTERN_ACQUIRE_NO_REFLECT = 0x1
    2298             : };
    2299             : cairo_private cairo_int_status_t
    2300             : _cairo_pattern_acquire_surface (const cairo_pattern_t      *pattern,
    2301             :                                 cairo_surface_t            *dst,
    2302             :                                 int                        x,
    2303             :                                 int                        y,
    2304             :                                 unsigned int               width,
    2305             :                                 unsigned int               height,
    2306             :                                 unsigned int               flags,
    2307             :                                 cairo_surface_t            **surface_out,
    2308             :                                 cairo_surface_attributes_t *attributes);
    2309             : 
    2310             : cairo_private void
    2311             : _cairo_pattern_release_surface (const cairo_pattern_t      *pattern,
    2312             :                                 cairo_surface_t            *surface,
    2313             :                                 cairo_surface_attributes_t *attributes);
    2314             : 
    2315             : cairo_private cairo_int_status_t
    2316             : _cairo_pattern_acquire_surfaces (const cairo_pattern_t      *src,
    2317             :                                  const cairo_pattern_t      *mask,
    2318             :                                  cairo_surface_t            *dst,
    2319             :                                  int                        src_x,
    2320             :                                  int                        src_y,
    2321             :                                  int                        mask_x,
    2322             :                                  int                        mask_y,
    2323             :                                  unsigned int               width,
    2324             :                                  unsigned int               height,
    2325             :                                  unsigned int               flags,
    2326             :                                  cairo_surface_t            **src_out,
    2327             :                                  cairo_surface_t            **mask_out,
    2328             :                                  cairo_surface_attributes_t *src_attributes,
    2329             :                                  cairo_surface_attributes_t *mask_attributes);
    2330             : 
    2331             : cairo_private void
    2332             : _cairo_pattern_get_extents (const cairo_pattern_t           *pattern,
    2333             :                             cairo_rectangle_int_t           *extents);
    2334             : 
    2335             : cairo_private unsigned long
    2336             : _cairo_pattern_hash (const cairo_pattern_t *pattern);
    2337             : 
    2338             : cairo_private unsigned long
    2339             : _cairo_linear_pattern_hash (unsigned long hash,
    2340             :                             const cairo_linear_pattern_t *linear);
    2341             : 
    2342             : cairo_private unsigned long
    2343             : _cairo_radial_pattern_hash (unsigned long hash,
    2344             :                             const cairo_radial_pattern_t *radial);
    2345             : 
    2346             : cairo_private cairo_bool_t
    2347             : _cairo_linear_pattern_equal (const cairo_linear_pattern_t *a,
    2348             :                              const cairo_linear_pattern_t *b);
    2349             : 
    2350             : cairo_private unsigned long
    2351             : _cairo_pattern_size (const cairo_pattern_t *pattern);
    2352             : 
    2353             : cairo_private cairo_bool_t
    2354             : _cairo_radial_pattern_equal (const cairo_radial_pattern_t *a,
    2355             :                              const cairo_radial_pattern_t *b);
    2356             : 
    2357             : cairo_private cairo_bool_t
    2358             : _cairo_pattern_equal (const cairo_pattern_t *a,
    2359             :                       const cairo_pattern_t *b);
    2360             : 
    2361             : cairo_private void
    2362             : _cairo_pattern_reset_static_data (void);
    2363             : 
    2364             : #if CAIRO_HAS_DRM_SURFACE
    2365             : 
    2366             : cairo_private void
    2367             : _cairo_drm_device_reset_static_data (void);
    2368             : 
    2369             : #endif
    2370             : 
    2371             : cairo_private void
    2372             : _cairo_clip_reset_static_data (void);
    2373             : 
    2374             : /* cairo-unicode.c */
    2375             : 
    2376             : cairo_private int
    2377             : _cairo_utf8_get_char_validated (const char *p,
    2378             :                                 uint32_t   *unicode);
    2379             : 
    2380             : cairo_private cairo_status_t
    2381             : _cairo_utf8_to_ucs4 (const char *str,
    2382             :                      int         len,
    2383             :                      uint32_t  **result,
    2384             :                      int        *items_written);
    2385             : 
    2386             : cairo_private int
    2387             : _cairo_ucs4_to_utf8 (uint32_t    unicode,
    2388             :                      char       *utf8);
    2389             : 
    2390             : #if CAIRO_HAS_WIN32_FONT || CAIRO_HAS_QUARTZ_FONT || CAIRO_HAS_PDF_OPERATORS || CAIRO_HAS_DW_FONT
    2391             : # define CAIRO_HAS_UTF8_TO_UTF16 1
    2392             : #endif
    2393             : #if CAIRO_HAS_UTF8_TO_UTF16
    2394             : cairo_private cairo_status_t
    2395             : _cairo_utf8_to_utf16 (const char *str,
    2396             :                       int         len,
    2397             :                       uint16_t  **result,
    2398             :                       int        *items_written);
    2399             : #endif
    2400             : 
    2401             : /* cairo-observer.c */
    2402             : 
    2403             : cairo_private void
    2404             : _cairo_observers_notify (cairo_list_t *observers, void *arg);
    2405             : 
    2406             : /* Avoid unnecessary PLT entries.  */
    2407             : slim_hidden_proto (cairo_clip_preserve);
    2408             : slim_hidden_proto (cairo_close_path);
    2409             : slim_hidden_proto (cairo_create);
    2410             : slim_hidden_proto (cairo_curve_to);
    2411             : slim_hidden_proto (cairo_destroy);
    2412             : slim_hidden_proto (cairo_fill_preserve);
    2413             : slim_hidden_proto (cairo_font_face_destroy);
    2414             : slim_hidden_proto (cairo_font_face_get_user_data);
    2415             : slim_hidden_proto_no_warn (cairo_font_face_reference);
    2416             : slim_hidden_proto (cairo_font_face_set_user_data);
    2417             : slim_hidden_proto (cairo_font_options_equal);
    2418             : slim_hidden_proto (cairo_font_options_hash);
    2419             : slim_hidden_proto (cairo_font_options_merge);
    2420             : slim_hidden_proto (cairo_font_options_set_antialias);
    2421             : slim_hidden_proto (cairo_font_options_set_hint_metrics);
    2422             : slim_hidden_proto (cairo_font_options_set_hint_style);
    2423             : slim_hidden_proto (cairo_font_options_set_subpixel_order);
    2424             : slim_hidden_proto (cairo_font_options_status);
    2425             : slim_hidden_proto (cairo_format_stride_for_width);
    2426             : slim_hidden_proto (cairo_get_current_point);
    2427             : slim_hidden_proto (cairo_get_line_width);
    2428             : slim_hidden_proto (cairo_get_matrix);
    2429             : slim_hidden_proto (cairo_get_target);
    2430             : slim_hidden_proto (cairo_get_tolerance);
    2431             : slim_hidden_proto (cairo_glyph_allocate);
    2432             : slim_hidden_proto (cairo_glyph_free);
    2433             : slim_hidden_proto (cairo_image_surface_create);
    2434             : slim_hidden_proto (cairo_image_surface_create_for_data);
    2435             : slim_hidden_proto (cairo_image_surface_get_data);
    2436             : slim_hidden_proto (cairo_image_surface_get_format);
    2437             : slim_hidden_proto (cairo_image_surface_get_height);
    2438             : slim_hidden_proto (cairo_image_surface_get_stride);
    2439             : slim_hidden_proto (cairo_image_surface_get_width);
    2440             : slim_hidden_proto (cairo_line_to);
    2441             : slim_hidden_proto (cairo_mask);
    2442             : slim_hidden_proto (cairo_matrix_init);
    2443             : slim_hidden_proto (cairo_matrix_init_identity);
    2444             : slim_hidden_proto (cairo_matrix_init_rotate);
    2445             : slim_hidden_proto (cairo_matrix_init_scale);
    2446             : slim_hidden_proto (cairo_matrix_init_translate);
    2447             : slim_hidden_proto (cairo_matrix_invert);
    2448             : slim_hidden_proto (cairo_matrix_multiply);
    2449             : slim_hidden_proto (cairo_matrix_scale);
    2450             : slim_hidden_proto (cairo_matrix_transform_distance);
    2451             : slim_hidden_proto (cairo_matrix_transform_point);
    2452             : slim_hidden_proto (cairo_matrix_translate);
    2453             : slim_hidden_proto (cairo_move_to);
    2454             : slim_hidden_proto (cairo_new_path);
    2455             : slim_hidden_proto (cairo_paint);
    2456             : slim_hidden_proto (cairo_pattern_create_for_surface);
    2457             : slim_hidden_proto (cairo_pattern_create_rgb);
    2458             : slim_hidden_proto (cairo_pattern_create_rgba);
    2459             : slim_hidden_proto (cairo_pattern_destroy);
    2460             : slim_hidden_proto (cairo_pattern_get_extend);
    2461             : slim_hidden_proto_no_warn (cairo_pattern_reference);
    2462             : slim_hidden_proto (cairo_pattern_set_matrix);
    2463             : slim_hidden_proto (cairo_pop_group);
    2464             : slim_hidden_proto (cairo_push_group_with_content);
    2465             : slim_hidden_proto (cairo_rel_line_to);
    2466             : slim_hidden_proto (cairo_restore);
    2467             : slim_hidden_proto (cairo_save);
    2468             : slim_hidden_proto (cairo_scale);
    2469             : slim_hidden_proto (cairo_scaled_font_create);
    2470             : slim_hidden_proto (cairo_scaled_font_destroy);
    2471             : slim_hidden_proto (cairo_scaled_font_extents);
    2472             : slim_hidden_proto (cairo_scaled_font_get_ctm);
    2473             : slim_hidden_proto (cairo_scaled_font_get_font_face);
    2474             : slim_hidden_proto (cairo_scaled_font_get_font_matrix);
    2475             : slim_hidden_proto (cairo_scaled_font_get_font_options);
    2476             : slim_hidden_proto (cairo_scaled_font_glyph_extents);
    2477             : slim_hidden_proto_no_warn (cairo_scaled_font_reference);
    2478             : slim_hidden_proto (cairo_scaled_font_status);
    2479             : slim_hidden_proto (cairo_scaled_font_get_user_data);
    2480             : slim_hidden_proto (cairo_scaled_font_set_user_data);
    2481             : slim_hidden_proto (cairo_scaled_font_text_to_glyphs);
    2482             : slim_hidden_proto (cairo_set_font_options);
    2483             : slim_hidden_proto (cairo_set_font_size);
    2484             : slim_hidden_proto (cairo_set_line_cap);
    2485             : slim_hidden_proto (cairo_set_line_join);
    2486             : slim_hidden_proto (cairo_set_line_width);
    2487             : slim_hidden_proto (cairo_set_matrix);
    2488             : slim_hidden_proto (cairo_set_operator);
    2489             : slim_hidden_proto (cairo_set_source);
    2490             : slim_hidden_proto (cairo_set_source_rgb);
    2491             : slim_hidden_proto (cairo_set_source_surface);
    2492             : slim_hidden_proto (cairo_set_tolerance);
    2493             : slim_hidden_proto (cairo_status);
    2494             : slim_hidden_proto (cairo_stroke);
    2495             : slim_hidden_proto (cairo_stroke_preserve);
    2496             : slim_hidden_proto (cairo_surface_copy_page);
    2497             : slim_hidden_proto (cairo_surface_destroy);
    2498             : slim_hidden_proto (cairo_surface_finish);
    2499             : slim_hidden_proto (cairo_surface_flush);
    2500             : slim_hidden_proto (cairo_surface_get_content);
    2501             : slim_hidden_proto (cairo_surface_get_device_offset);
    2502             : slim_hidden_proto (cairo_surface_get_font_options);
    2503             : slim_hidden_proto (cairo_surface_get_mime_data);
    2504             : slim_hidden_proto (cairo_surface_get_type);
    2505             : slim_hidden_proto (cairo_surface_has_show_text_glyphs);
    2506             : slim_hidden_proto (cairo_surface_set_subpixel_antialiasing);
    2507             : slim_hidden_proto (cairo_surface_get_subpixel_antialiasing);
    2508             : slim_hidden_proto (cairo_surface_mark_dirty);
    2509             : slim_hidden_proto (cairo_surface_mark_dirty_rectangle);
    2510             : slim_hidden_proto_no_warn (cairo_surface_reference);
    2511             : slim_hidden_proto (cairo_surface_set_device_offset);
    2512             : slim_hidden_proto (cairo_surface_set_fallback_resolution);
    2513             : slim_hidden_proto (cairo_surface_set_mime_data);
    2514             : slim_hidden_proto (cairo_surface_show_page);
    2515             : slim_hidden_proto (cairo_surface_status);
    2516             : slim_hidden_proto (cairo_text_cluster_allocate);
    2517             : slim_hidden_proto (cairo_text_cluster_free);
    2518             : slim_hidden_proto (cairo_toy_font_face_create);
    2519             : slim_hidden_proto (cairo_toy_font_face_get_slant);
    2520             : slim_hidden_proto (cairo_toy_font_face_get_weight);
    2521             : slim_hidden_proto (cairo_translate);
    2522             : slim_hidden_proto (cairo_transform);
    2523             : slim_hidden_proto (cairo_user_font_face_create);
    2524             : slim_hidden_proto (cairo_user_font_face_set_init_func);
    2525             : slim_hidden_proto (cairo_user_font_face_set_render_glyph_func);
    2526             : slim_hidden_proto (cairo_user_font_face_set_unicode_to_glyph_func);
    2527             : slim_hidden_proto (cairo_user_to_device);
    2528             : slim_hidden_proto (cairo_user_to_device_distance);
    2529             : slim_hidden_proto (cairo_version_string);
    2530             : slim_hidden_proto (cairo_region_create);
    2531             : slim_hidden_proto (cairo_region_create_rectangle);
    2532             : slim_hidden_proto (cairo_region_create_rectangles);
    2533             : slim_hidden_proto (cairo_region_copy);
    2534             : slim_hidden_proto (cairo_region_reference);
    2535             : slim_hidden_proto (cairo_region_destroy);
    2536             : slim_hidden_proto (cairo_region_equal);
    2537             : slim_hidden_proto (cairo_region_status);
    2538             : slim_hidden_proto (cairo_region_get_extents);
    2539             : slim_hidden_proto (cairo_region_num_rectangles);
    2540             : slim_hidden_proto (cairo_region_get_rectangle);
    2541             : slim_hidden_proto (cairo_region_is_empty);
    2542             : slim_hidden_proto (cairo_region_contains_rectangle);
    2543             : slim_hidden_proto (cairo_region_contains_point);
    2544             : slim_hidden_proto (cairo_region_translate);
    2545             : slim_hidden_proto (cairo_region_subtract);
    2546             : slim_hidden_proto (cairo_region_subtract_rectangle);
    2547             : slim_hidden_proto (cairo_region_intersect);
    2548             : slim_hidden_proto (cairo_region_intersect_rectangle);
    2549             : slim_hidden_proto (cairo_region_union);
    2550             : slim_hidden_proto (cairo_region_union_rectangle);
    2551             : slim_hidden_proto (cairo_region_xor);
    2552             : slim_hidden_proto (cairo_region_xor_rectangle);
    2553             : 
    2554             : #if CAIRO_HAS_PNG_FUNCTIONS
    2555             : 
    2556             : slim_hidden_proto (cairo_surface_write_to_png_stream);
    2557             : 
    2558             : #endif
    2559             : 
    2560             : cairo_private_no_warn cairo_filter_t
    2561             : _cairo_pattern_analyze_filter (const cairo_pattern_t    *pattern,
    2562             :                                double                   *pad_out);
    2563             : 
    2564             : CAIRO_END_DECLS
    2565             : 
    2566             : #include "cairo-mutex-private.h"
    2567             : #include "cairo-fixed-private.h"
    2568             : #include "cairo-wideint-private.h"
    2569             : #include "cairo-malloc-private.h"
    2570             : #include "cairo-hash-private.h"
    2571             : 
    2572             : #if HAVE_VALGRIND
    2573             : #include <memcheck.h>
    2574             : 
    2575             : #define VG(x) x
    2576             : 
    2577             : cairo_private void
    2578             : _cairo_debug_check_image_surface_is_defined (const cairo_surface_t *surface);
    2579             : 
    2580             : #else
    2581             : 
    2582             : #define VG(x)
    2583             : #define _cairo_debug_check_image_surface_is_defined(X)
    2584             : 
    2585             : #endif
    2586             : 
    2587             : cairo_private void
    2588             : _cairo_debug_print_path (FILE *stream, cairo_path_fixed_t *path);
    2589             : 
    2590             : cairo_private void
    2591             : _cairo_debug_print_clip (FILE *stream, cairo_clip_t *clip);
    2592             : 
    2593             : #endif

Generated by: LCOV version 1.13