2 * Copyright © 2004,2006 Red Hat, Inc.
4 * Permission to use, copy, modify, distribute, and sell this software
5 * and its documentation for any purpose is hereby granted without
6 * fee, provided that the above copyright notice appear in all copies
7 * and that both that copyright notice and this permission notice
8 * appear in supporting documentation, and that the name of
9 * Red Hat, Inc. not be used in advertising or publicity pertaining to
10 * distribution of the software without specific, written prior
11 * permission. Red Hat, Inc. makes no representations about the
12 * suitability of this software for any purpose. It is provided "as
13 * is" without express or implied warranty.
15 * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
16 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17 * FITNESS, IN NO EVENT SHALL RED HAT, INC. BE LIABLE FOR ANY SPECIAL,
18 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
19 * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
20 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
21 * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 * Author: Carl D. Worth <cworth@cworth.org>
26 #ifndef _CAIRO_BOILERPLATE_H_
27 #define _CAIRO_BOILERPLATE_H_
39 #include "cairo-compiler-private.h"
44 # include <inttypes.h>
45 #elif HAVE_SYS_INT_TYPES_H
46 # include <sys/int_types.h>
47 #elif defined(_MSC_VER)
49 typedef __int8 int8_t;
50 typedef unsigned __int8 uint8_t;
51 typedef __int16 int16_t;
52 typedef unsigned __int16 uint16_t;
53 typedef __int32 int32_t;
54 typedef unsigned __int32 uint32_t;
55 typedef __int64 int64_t;
56 typedef unsigned __int64 uint64_t;
58 #error Cannot find definitions for fixed-width integral types (uint8_t, uint32_t, etc.)
62 # define HAVE_UINT64_T 1
65 # define INT16_MIN (-32767-1)
68 # define INT16_MAX (32767)
71 # define UINT16_MAX (65535)
74 #ifndef CAIRO_BOILERPLATE_DEBUG
75 #define CAIRO_BOILERPLATE_DEBUG(x)
78 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
79 #define CAIRO_BOILERPLATE_PRINTF_FORMAT(fmt_index, va_index) \
80 __attribute__((__format__(__printf__, fmt_index, va_index)))
82 #define CAIRO_BOILERPLATE_PRINTF_FORMAT(fmt_index, va_index)
94 #define M_PI 3.14159265358979323846
99 /* A fake format we use for the flattened ARGB output of the PS and
101 #define CAIRO_TEST_CONTENT_COLOR_ALPHA_FLATTENED ((unsigned int) -1)
103 extern const cairo_user_data_key_t cairo_boilerplate_output_basename_key;
106 cairo_boilerplate_content (cairo_content_t content);
109 cairo_boilerplate_content_name (cairo_content_t content);
112 cairo_boilerplate_format_from_content (cairo_content_t content);
115 CAIRO_BOILERPLATE_MODE_TEST,
116 CAIRO_BOILERPLATE_MODE_PERF
117 } cairo_boilerplate_mode_t;
119 typedef cairo_surface_t *
120 (*cairo_boilerplate_create_surface_t) (const char *name,
121 cairo_content_t content,
126 cairo_boilerplate_mode_t mode,
129 typedef cairo_surface_t *
130 (*cairo_boilerplate_create_similar_t) (cairo_surface_t *other,
131 cairo_content_t content,
136 (*cairo_boilerplate_force_fallbacks_t) (cairo_surface_t *surface,
137 double x_pixels_per_inch,
138 double y_pixels_per_inch);
140 typedef cairo_status_t
141 (*cairo_boilerplate_finish_surface_t) (cairo_surface_t *surface);
143 typedef cairo_surface_t *
144 (*cairo_boilerplate_get_image_surface_t) (cairo_surface_t *surface,
149 typedef cairo_status_t
150 (*cairo_boilerplate_write_to_png_t) (cairo_surface_t *surface,
151 const char *filename);
154 (*cairo_boilerplate_cleanup_t) (void *closure);
157 (*cairo_boilerplate_wait_t) (void *closure);
160 (*cairo_boilerplate_describe_t) (void *closure);
162 typedef struct _cairo_boilerplate_target {
164 const char *basename;
165 const char *file_extension;
166 const char *reference_target;
167 cairo_surface_type_t expected_type;
168 cairo_content_t content;
169 unsigned int error_tolerance;
170 const char *probe; /* runtime dl check */
171 cairo_boilerplate_create_surface_t create_surface;
172 cairo_boilerplate_create_similar_t create_similar;
173 cairo_boilerplate_force_fallbacks_t force_fallbacks;
174 cairo_boilerplate_finish_surface_t finish_surface;
175 cairo_boilerplate_get_image_surface_t get_image_surface;
176 cairo_boilerplate_write_to_png_t write_to_png;
177 cairo_boilerplate_cleanup_t cleanup;
178 cairo_boilerplate_wait_t synchronize;
179 cairo_boilerplate_describe_t describe;
180 cairo_bool_t is_measurable;
181 cairo_bool_t is_vector;
182 cairo_bool_t is_recording;
183 } cairo_boilerplate_target_t;
185 const cairo_boilerplate_target_t *
186 cairo_boilerplate_get_image_target (cairo_content_t content);
188 const cairo_boilerplate_target_t *
189 cairo_boilerplate_get_target_by_name (const char *name,
190 cairo_content_t content);
192 const cairo_boilerplate_target_t **
193 cairo_boilerplate_get_targets (int *num_targets,
194 cairo_bool_t *limited_targets);
197 cairo_boilerplate_free_targets (const cairo_boilerplate_target_t **targets);
200 _cairo_boilerplate_get_image_surface (cairo_surface_t *src,
205 cairo_boilerplate_get_image_surface_from_png (const char *filename,
208 cairo_bool_t flatten);
211 cairo_boilerplate_surface_create_in_error (cairo_status_t status);
214 CAIRO_BOILERPLATE_OPEN_NO_DAEMON = 0x1,
218 cairo_boilerplate_open_any2ppm (const char *filename,
221 int (**close_cb) (FILE *));
224 cairo_boilerplate_image_surface_create_from_ppm_stream (FILE *file);
227 cairo_boilerplate_convert_to_image (const char *filename,
231 cairo_boilerplate_version (void);
234 cairo_boilerplate_version_string (void);
237 cairo_boilerplate_fini (void);
239 #include "cairo-boilerplate-system.h"