pixman.h revision 81988197
1/***********************************************************
2
3Copyright 1987, 1998  The Open Group
4
5Permission to use, copy, modify, distribute, and sell this software and its
6documentation for any purpose is hereby granted without fee, provided that
7the above copyright notice appear in all copies and that both that
8copyright notice and this permission notice appear in supporting
9documentation.
10
11The above copyright notice and this permission notice shall be included in
12all copies or substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
17OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
21Except as contained in this notice, the name of The Open Group shall not be
22used in advertising or otherwise to promote the sale, use or other dealings
23in this Software without prior written authorization from The Open Group.
24
25Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
26
27                        All Rights Reserved
28
29Permission to use, copy, modify, and distribute this software and its
30documentation for any purpose and without fee is hereby granted,
31provided that the above copyright notice appear in all copies and that
32both that copyright notice and this permission notice appear in
33supporting documentation, and that the name of Digital not be
34used in advertising or publicity pertaining to distribution of the
35software without specific, written prior permission.
36
37DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
38ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
39DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
40ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
41WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
42ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
43SOFTWARE.
44
45******************************************************************/
46/*
47 * Copyright © 1998, 2004 Keith Packard
48 * Copyright   2007 Red Hat, Inc.
49 *
50 * Permission to use, copy, modify, distribute, and sell this software and its
51 * documentation for any purpose is hereby granted without fee, provided that
52 * the above copyright notice appear in all copies and that both that
53 * copyright notice and this permission notice appear in supporting
54 * documentation, and that the name of Keith Packard not be used in
55 * advertising or publicity pertaining to distribution of the software without
56 * specific, written prior permission.  Keith Packard makes no
57 * representations about the suitability of this software for any purpose.  It
58 * is provided "as is" without express or implied warranty.
59 *
60 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
61 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
62 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
63 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
64 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
66 * PERFORMANCE OF THIS SOFTWARE.
67 */
68
69#ifndef PIXMAN_H__
70#define PIXMAN_H__
71
72#include <pixman-version.h>
73
74#ifdef  __cplusplus
75#define PIXMAN_BEGIN_DECLS extern "C" {
76#define PIXMAN_END_DECLS }
77#else
78#define PIXMAN_BEGIN_DECLS
79#define PIXMAN_END_DECLS
80#endif
81
82PIXMAN_BEGIN_DECLS
83
84/*
85 * Standard integers
86 */
87
88#if !defined (PIXMAN_DONT_DEFINE_STDINT)
89
90#if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || defined (_sgi) || defined (__sun) || defined (sun) || defined (__digital__) || defined (__HP_cc)
91#  include <inttypes.h>
92/* VS 2010 (_MSC_VER 1600) has stdint.h */
93#elif defined (_MSC_VER) && _MSC_VER < 1600
94typedef __int8 int8_t;
95typedef unsigned __int8 uint8_t;
96typedef __int16 int16_t;
97typedef unsigned __int16 uint16_t;
98typedef __int32 int32_t;
99typedef unsigned __int32 uint32_t;
100typedef __int64 int64_t;
101typedef unsigned __int64 uint64_t;
102#elif defined (_AIX)
103#  include <sys/inttypes.h>
104#else
105#  include <stdint.h>
106#endif
107
108#endif
109
110/*
111 * Boolean
112 */
113typedef int pixman_bool_t;
114
115/*
116 * Fixpoint numbers
117 */
118typedef int64_t			pixman_fixed_32_32_t;
119typedef pixman_fixed_32_32_t	pixman_fixed_48_16_t;
120typedef uint32_t		pixman_fixed_1_31_t;
121typedef uint32_t		pixman_fixed_1_16_t;
122typedef int32_t			pixman_fixed_16_16_t;
123typedef pixman_fixed_16_16_t	pixman_fixed_t;
124
125#define pixman_fixed_e			((pixman_fixed_t) 1)
126#define pixman_fixed_1			(pixman_int_to_fixed(1))
127#define pixman_fixed_1_minus_e		(pixman_fixed_1 - pixman_fixed_e)
128#define pixman_fixed_minus_1		(pixman_int_to_fixed(-1))
129#define pixman_fixed_to_int(f)		((int) ((f) >> 16))
130#define pixman_int_to_fixed(i)		((pixman_fixed_t) ((i) << 16))
131#define pixman_fixed_to_double(f)	(double) ((f) / (double) pixman_fixed_1)
132#define pixman_double_to_fixed(d)	((pixman_fixed_t) ((d) * 65536.0))
133#define pixman_fixed_frac(f)		((f) & pixman_fixed_1_minus_e)
134#define pixman_fixed_floor(f)		((f) & ~pixman_fixed_1_minus_e)
135#define pixman_fixed_ceil(f)		pixman_fixed_floor ((f) + pixman_fixed_1_minus_e)
136#define pixman_fixed_fraction(f)	((f) & pixman_fixed_1_minus_e)
137#define pixman_fixed_mod_2(f)		((f) & (pixman_fixed1 | pixman_fixed_1_minus_e))
138#define pixman_max_fixed_48_16		((pixman_fixed_48_16_t) 0x7fffffff)
139#define pixman_min_fixed_48_16		(-((pixman_fixed_48_16_t) 1 << 31))
140
141/*
142 * Misc structs
143 */
144typedef struct pixman_color pixman_color_t;
145typedef struct pixman_point_fixed pixman_point_fixed_t;
146typedef struct pixman_line_fixed pixman_line_fixed_t;
147typedef struct pixman_vector pixman_vector_t;
148typedef struct pixman_transform pixman_transform_t;
149
150struct pixman_color
151{
152    uint16_t	red;
153    uint16_t    green;
154    uint16_t    blue;
155    uint16_t    alpha;
156};
157
158struct pixman_point_fixed
159{
160    pixman_fixed_t	x;
161    pixman_fixed_t	y;
162};
163
164struct pixman_line_fixed
165{
166    pixman_point_fixed_t	p1, p2;
167};
168
169/*
170 * Fixed point matrices
171 */
172
173struct pixman_vector
174{
175    pixman_fixed_t	vector[3];
176};
177
178struct pixman_transform
179{
180    pixman_fixed_t	matrix[3][3];
181};
182
183/* forward declaration (sorry) */
184struct pixman_box16;
185typedef  union pixman_image		pixman_image_t;
186
187void          pixman_transform_init_identity    (struct pixman_transform       *matrix);
188pixman_bool_t pixman_transform_point_3d         (const struct pixman_transform *transform,
189						 struct pixman_vector          *vector);
190pixman_bool_t pixman_transform_point            (const struct pixman_transform *transform,
191						 struct pixman_vector          *vector);
192pixman_bool_t pixman_transform_multiply         (struct pixman_transform       *dst,
193						 const struct pixman_transform *l,
194						 const struct pixman_transform *r);
195void          pixman_transform_init_scale       (struct pixman_transform       *t,
196						 pixman_fixed_t                 sx,
197						 pixman_fixed_t                 sy);
198pixman_bool_t pixman_transform_scale            (struct pixman_transform       *forward,
199						 struct pixman_transform       *reverse,
200						 pixman_fixed_t                 sx,
201						 pixman_fixed_t                 sy);
202void          pixman_transform_init_rotate      (struct pixman_transform       *t,
203						 pixman_fixed_t                 cos,
204						 pixman_fixed_t                 sin);
205pixman_bool_t pixman_transform_rotate           (struct pixman_transform       *forward,
206						 struct pixman_transform       *reverse,
207						 pixman_fixed_t                 c,
208						 pixman_fixed_t                 s);
209void          pixman_transform_init_translate   (struct pixman_transform       *t,
210						 pixman_fixed_t                 tx,
211						 pixman_fixed_t                 ty);
212pixman_bool_t pixman_transform_translate        (struct pixman_transform       *forward,
213						 struct pixman_transform       *reverse,
214						 pixman_fixed_t                 tx,
215						 pixman_fixed_t                 ty);
216pixman_bool_t pixman_transform_bounds           (const struct pixman_transform *matrix,
217						 struct pixman_box16           *b);
218pixman_bool_t pixman_transform_invert           (struct pixman_transform       *dst,
219						 const struct pixman_transform *src);
220pixman_bool_t pixman_transform_is_identity      (const struct pixman_transform *t);
221pixman_bool_t pixman_transform_is_scale         (const struct pixman_transform *t);
222pixman_bool_t pixman_transform_is_int_translate (const struct pixman_transform *t);
223pixman_bool_t pixman_transform_is_inverse       (const struct pixman_transform *a,
224						 const struct pixman_transform *b);
225
226/*
227 * Floating point matrices
228 */
229struct pixman_f_vector
230{
231    double  v[3];
232};
233
234struct pixman_f_transform
235{
236    double  m[3][3];
237};
238
239pixman_bool_t pixman_transform_from_pixman_f_transform (struct pixman_transform         *t,
240							const struct pixman_f_transform *ft);
241void          pixman_f_transform_from_pixman_transform (struct pixman_f_transform       *ft,
242							const struct pixman_transform   *t);
243pixman_bool_t pixman_f_transform_invert                (struct pixman_f_transform       *dst,
244							const struct pixman_f_transform *src);
245pixman_bool_t pixman_f_transform_point                 (const struct pixman_f_transform *t,
246							struct pixman_f_vector          *v);
247void          pixman_f_transform_point_3d              (const struct pixman_f_transform *t,
248							struct pixman_f_vector          *v);
249void          pixman_f_transform_multiply              (struct pixman_f_transform       *dst,
250							const struct pixman_f_transform *l,
251							const struct pixman_f_transform *r);
252void          pixman_f_transform_init_scale            (struct pixman_f_transform       *t,
253							double                           sx,
254							double                           sy);
255pixman_bool_t pixman_f_transform_scale                 (struct pixman_f_transform       *forward,
256							struct pixman_f_transform       *reverse,
257							double                           sx,
258							double                           sy);
259void          pixman_f_transform_init_rotate           (struct pixman_f_transform       *t,
260							double                           cos,
261							double                           sin);
262pixman_bool_t pixman_f_transform_rotate                (struct pixman_f_transform       *forward,
263							struct pixman_f_transform       *reverse,
264							double                           c,
265							double                           s);
266void          pixman_f_transform_init_translate        (struct pixman_f_transform       *t,
267							double                           tx,
268							double                           ty);
269pixman_bool_t pixman_f_transform_translate             (struct pixman_f_transform       *forward,
270							struct pixman_f_transform       *reverse,
271							double                           tx,
272							double                           ty);
273pixman_bool_t pixman_f_transform_bounds                (const struct pixman_f_transform *t,
274							struct pixman_box16             *b);
275void          pixman_f_transform_init_identity         (struct pixman_f_transform       *t);
276
277typedef enum
278{
279    PIXMAN_REPEAT_NONE,
280    PIXMAN_REPEAT_NORMAL,
281    PIXMAN_REPEAT_PAD,
282    PIXMAN_REPEAT_REFLECT
283} pixman_repeat_t;
284
285typedef enum
286{
287    PIXMAN_FILTER_FAST,
288    PIXMAN_FILTER_GOOD,
289    PIXMAN_FILTER_BEST,
290    PIXMAN_FILTER_NEAREST,
291    PIXMAN_FILTER_BILINEAR,
292    PIXMAN_FILTER_CONVOLUTION
293} pixman_filter_t;
294
295typedef enum
296{
297    PIXMAN_OP_CLEAR			= 0x00,
298    PIXMAN_OP_SRC			= 0x01,
299    PIXMAN_OP_DST			= 0x02,
300    PIXMAN_OP_OVER			= 0x03,
301    PIXMAN_OP_OVER_REVERSE		= 0x04,
302    PIXMAN_OP_IN			= 0x05,
303    PIXMAN_OP_IN_REVERSE		= 0x06,
304    PIXMAN_OP_OUT			= 0x07,
305    PIXMAN_OP_OUT_REVERSE		= 0x08,
306    PIXMAN_OP_ATOP			= 0x09,
307    PIXMAN_OP_ATOP_REVERSE		= 0x0a,
308    PIXMAN_OP_XOR			= 0x0b,
309    PIXMAN_OP_ADD			= 0x0c,
310    PIXMAN_OP_SATURATE			= 0x0d,
311
312    PIXMAN_OP_DISJOINT_CLEAR		= 0x10,
313    PIXMAN_OP_DISJOINT_SRC		= 0x11,
314    PIXMAN_OP_DISJOINT_DST		= 0x12,
315    PIXMAN_OP_DISJOINT_OVER		= 0x13,
316    PIXMAN_OP_DISJOINT_OVER_REVERSE	= 0x14,
317    PIXMAN_OP_DISJOINT_IN		= 0x15,
318    PIXMAN_OP_DISJOINT_IN_REVERSE	= 0x16,
319    PIXMAN_OP_DISJOINT_OUT		= 0x17,
320    PIXMAN_OP_DISJOINT_OUT_REVERSE	= 0x18,
321    PIXMAN_OP_DISJOINT_ATOP		= 0x19,
322    PIXMAN_OP_DISJOINT_ATOP_REVERSE	= 0x1a,
323    PIXMAN_OP_DISJOINT_XOR		= 0x1b,
324
325    PIXMAN_OP_CONJOINT_CLEAR		= 0x20,
326    PIXMAN_OP_CONJOINT_SRC		= 0x21,
327    PIXMAN_OP_CONJOINT_DST		= 0x22,
328    PIXMAN_OP_CONJOINT_OVER		= 0x23,
329    PIXMAN_OP_CONJOINT_OVER_REVERSE	= 0x24,
330    PIXMAN_OP_CONJOINT_IN		= 0x25,
331    PIXMAN_OP_CONJOINT_IN_REVERSE	= 0x26,
332    PIXMAN_OP_CONJOINT_OUT		= 0x27,
333    PIXMAN_OP_CONJOINT_OUT_REVERSE	= 0x28,
334    PIXMAN_OP_CONJOINT_ATOP		= 0x29,
335    PIXMAN_OP_CONJOINT_ATOP_REVERSE	= 0x2a,
336    PIXMAN_OP_CONJOINT_XOR		= 0x2b,
337
338    PIXMAN_OP_MULTIPLY                  = 0x30,
339    PIXMAN_OP_SCREEN                    = 0x31,
340    PIXMAN_OP_OVERLAY                   = 0x32,
341    PIXMAN_OP_DARKEN                    = 0x33,
342    PIXMAN_OP_LIGHTEN                   = 0x34,
343    PIXMAN_OP_COLOR_DODGE               = 0x35,
344    PIXMAN_OP_COLOR_BURN                = 0x36,
345    PIXMAN_OP_HARD_LIGHT                = 0x37,
346    PIXMAN_OP_SOFT_LIGHT                = 0x38,
347    PIXMAN_OP_DIFFERENCE                = 0x39,
348    PIXMAN_OP_EXCLUSION                 = 0x3a,
349    PIXMAN_OP_HSL_HUE			= 0x3b,
350    PIXMAN_OP_HSL_SATURATION		= 0x3c,
351    PIXMAN_OP_HSL_COLOR			= 0x3d,
352    PIXMAN_OP_HSL_LUMINOSITY		= 0x3e
353
354#ifdef PIXMAN_USE_INTERNAL_API
355    ,
356    PIXMAN_N_OPERATORS,
357    PIXMAN_OP_NONE = PIXMAN_N_OPERATORS,
358    PIXMAN_OP_any = PIXMAN_N_OPERATORS + 1
359#endif
360} pixman_op_t;
361
362/*
363 * Regions
364 */
365typedef struct pixman_region16_data	pixman_region16_data_t;
366typedef struct pixman_box16		pixman_box16_t;
367typedef struct pixman_rectangle16	pixman_rectangle16_t;
368typedef struct pixman_region16		pixman_region16_t;
369
370struct pixman_region16_data {
371    long		size;
372    long		numRects;
373/*  pixman_box16_t	rects[size];   in memory but not explicitly declared */
374};
375
376struct pixman_rectangle16
377{
378    int16_t	x, y;
379    uint16_t	width, height;
380};
381
382struct pixman_box16
383{
384    int16_t x1, y1, x2, y2;
385};
386
387struct pixman_region16
388{
389    pixman_box16_t          extents;
390    pixman_region16_data_t *data;
391};
392
393typedef enum
394{
395    PIXMAN_REGION_OUT,
396    PIXMAN_REGION_IN,
397    PIXMAN_REGION_PART
398} pixman_region_overlap_t;
399
400/* This function exists only to make it possible to preserve
401 * the X ABI - it should go away at first opportunity.
402 */
403void pixman_region_set_static_pointers (pixman_box16_t         *empty_box,
404					pixman_region16_data_t *empty_data,
405					pixman_region16_data_t *broken_data);
406
407/* creation/destruction */
408void                    pixman_region_init               (pixman_region16_t *region);
409void                    pixman_region_init_rect          (pixman_region16_t *region,
410							  int                x,
411							  int                y,
412							  unsigned int       width,
413							  unsigned int       height);
414pixman_bool_t           pixman_region_init_rects         (pixman_region16_t *region,
415							  const pixman_box16_t *boxes,
416							  int                count);
417void                    pixman_region_init_with_extents  (pixman_region16_t *region,
418							  pixman_box16_t    *extents);
419void                    pixman_region_init_from_image    (pixman_region16_t *region,
420							  pixman_image_t    *image);
421void                    pixman_region_fini               (pixman_region16_t *region);
422
423
424/* manipulation */
425void                    pixman_region_translate          (pixman_region16_t *region,
426							  int                x,
427							  int                y);
428pixman_bool_t           pixman_region_copy               (pixman_region16_t *dest,
429							  pixman_region16_t *source);
430pixman_bool_t           pixman_region_intersect          (pixman_region16_t *new_reg,
431							  pixman_region16_t *reg1,
432							  pixman_region16_t *reg2);
433pixman_bool_t           pixman_region_union              (pixman_region16_t *new_reg,
434							  pixman_region16_t *reg1,
435							  pixman_region16_t *reg2);
436pixman_bool_t           pixman_region_union_rect         (pixman_region16_t *dest,
437							  pixman_region16_t *source,
438							  int                x,
439							  int                y,
440							  unsigned int       width,
441							  unsigned int       height);
442pixman_bool_t		pixman_region_intersect_rect     (pixman_region16_t *dest,
443							  pixman_region16_t *source,
444							  int                x,
445							  int                y,
446							  unsigned int       width,
447							  unsigned int       height);
448pixman_bool_t           pixman_region_subtract           (pixman_region16_t *reg_d,
449							  pixman_region16_t *reg_m,
450							  pixman_region16_t *reg_s);
451pixman_bool_t           pixman_region_inverse            (pixman_region16_t *new_reg,
452							  pixman_region16_t *reg1,
453							  pixman_box16_t    *inv_rect);
454pixman_bool_t           pixman_region_contains_point     (pixman_region16_t *region,
455							  int                x,
456							  int                y,
457							  pixman_box16_t    *box);
458pixman_region_overlap_t pixman_region_contains_rectangle (pixman_region16_t *region,
459							  pixman_box16_t    *prect);
460pixman_bool_t           pixman_region_not_empty          (pixman_region16_t *region);
461pixman_box16_t *        pixman_region_extents            (pixman_region16_t *region);
462int                     pixman_region_n_rects            (pixman_region16_t *region);
463pixman_box16_t *        pixman_region_rectangles         (pixman_region16_t *region,
464							  int               *n_rects);
465pixman_bool_t           pixman_region_equal              (pixman_region16_t *region1,
466							  pixman_region16_t *region2);
467pixman_bool_t           pixman_region_selfcheck          (pixman_region16_t *region);
468void                    pixman_region_reset              (pixman_region16_t *region,
469							  pixman_box16_t    *box);
470void			pixman_region_clear		 (pixman_region16_t *region);
471/*
472 * 32 bit regions
473 */
474typedef struct pixman_region32_data	pixman_region32_data_t;
475typedef struct pixman_box32		pixman_box32_t;
476typedef struct pixman_rectangle32	pixman_rectangle32_t;
477typedef struct pixman_region32		pixman_region32_t;
478
479struct pixman_region32_data {
480    long		size;
481    long		numRects;
482/*  pixman_box32_t	rects[size];   in memory but not explicitly declared */
483};
484
485struct pixman_rectangle32
486{
487    int32_t x, y;
488    uint32_t width, height;
489};
490
491struct pixman_box32
492{
493    int32_t x1, y1, x2, y2;
494};
495
496struct pixman_region32
497{
498    pixman_box32_t          extents;
499    pixman_region32_data_t  *data;
500};
501
502/* creation/destruction */
503void                    pixman_region32_init               (pixman_region32_t *region);
504void                    pixman_region32_init_rect          (pixman_region32_t *region,
505							    int                x,
506							    int                y,
507							    unsigned int       width,
508							    unsigned int       height);
509pixman_bool_t           pixman_region32_init_rects         (pixman_region32_t *region,
510							    const pixman_box32_t *boxes,
511							    int                count);
512void                    pixman_region32_init_with_extents  (pixman_region32_t *region,
513							    pixman_box32_t    *extents);
514void                    pixman_region32_init_from_image    (pixman_region32_t *region,
515							    pixman_image_t    *image);
516void                    pixman_region32_fini               (pixman_region32_t *region);
517
518
519/* manipulation */
520void                    pixman_region32_translate          (pixman_region32_t *region,
521							    int                x,
522							    int                y);
523pixman_bool_t           pixman_region32_copy               (pixman_region32_t *dest,
524							    pixman_region32_t *source);
525pixman_bool_t           pixman_region32_intersect          (pixman_region32_t *new_reg,
526							    pixman_region32_t *reg1,
527							    pixman_region32_t *reg2);
528pixman_bool_t           pixman_region32_union              (pixman_region32_t *new_reg,
529							    pixman_region32_t *reg1,
530							    pixman_region32_t *reg2);
531pixman_bool_t		pixman_region32_intersect_rect     (pixman_region32_t *dest,
532							    pixman_region32_t *source,
533							    int                x,
534							    int                y,
535							    unsigned int       width,
536							    unsigned int       height);
537pixman_bool_t           pixman_region32_union_rect         (pixman_region32_t *dest,
538							    pixman_region32_t *source,
539							    int                x,
540							    int                y,
541							    unsigned int       width,
542							    unsigned int       height);
543pixman_bool_t           pixman_region32_subtract           (pixman_region32_t *reg_d,
544							    pixman_region32_t *reg_m,
545							    pixman_region32_t *reg_s);
546pixman_bool_t           pixman_region32_inverse            (pixman_region32_t *new_reg,
547							    pixman_region32_t *reg1,
548							    pixman_box32_t    *inv_rect);
549pixman_bool_t           pixman_region32_contains_point     (pixman_region32_t *region,
550							    int                x,
551							    int                y,
552							    pixman_box32_t    *box);
553pixman_region_overlap_t pixman_region32_contains_rectangle (pixman_region32_t *region,
554							    pixman_box32_t    *prect);
555pixman_bool_t           pixman_region32_not_empty          (pixman_region32_t *region);
556pixman_box32_t *        pixman_region32_extents            (pixman_region32_t *region);
557int                     pixman_region32_n_rects            (pixman_region32_t *region);
558pixman_box32_t *        pixman_region32_rectangles         (pixman_region32_t *region,
559							    int               *n_rects);
560pixman_bool_t           pixman_region32_equal              (pixman_region32_t *region1,
561							    pixman_region32_t *region2);
562pixman_bool_t           pixman_region32_selfcheck          (pixman_region32_t *region);
563void                    pixman_region32_reset              (pixman_region32_t *region,
564							    pixman_box32_t    *box);
565void			pixman_region32_clear		   (pixman_region32_t *region);
566
567
568/* Copy / Fill / Misc */
569pixman_bool_t pixman_blt                (uint32_t           *src_bits,
570					 uint32_t           *dst_bits,
571					 int                 src_stride,
572					 int                 dst_stride,
573					 int                 src_bpp,
574					 int                 dst_bpp,
575					 int                 src_x,
576					 int                 src_y,
577					 int                 dest_x,
578					 int                 dest_y,
579					 int                 width,
580					 int                 height);
581pixman_bool_t pixman_fill               (uint32_t           *bits,
582					 int                 stride,
583					 int                 bpp,
584					 int                 x,
585					 int                 y,
586					 int                 width,
587					 int                 height,
588					 uint32_t            _xor);
589
590int           pixman_version            (void);
591const char*   pixman_version_string     (void);
592
593/*
594 * Images
595 */
596typedef struct pixman_indexed		pixman_indexed_t;
597typedef struct pixman_gradient_stop	pixman_gradient_stop_t;
598
599typedef uint32_t (* pixman_read_memory_func_t) (const void *src, int size);
600typedef void     (* pixman_write_memory_func_t) (void *dst, uint32_t value, int size);
601
602typedef void     (* pixman_image_destroy_func_t) (pixman_image_t *image, void *data);
603
604struct pixman_gradient_stop {
605    pixman_fixed_t x;
606    pixman_color_t color;
607};
608
609#define PIXMAN_MAX_INDEXED  256 /* XXX depth must be <= 8 */
610
611#if PIXMAN_MAX_INDEXED <= 256
612typedef uint8_t pixman_index_type;
613#endif
614
615struct pixman_indexed
616{
617    pixman_bool_t       color;
618    uint32_t		rgba[PIXMAN_MAX_INDEXED];
619    pixman_index_type	ent[32768];
620};
621
622/*
623 * While the protocol is generous in format support, the
624 * sample implementation allows only packed RGB and GBR
625 * representations for data to simplify software rendering,
626 */
627#define PIXMAN_FORMAT(bpp,type,a,r,g,b)	(((bpp) << 24) |  \
628					 ((type) << 16) | \
629					 ((a) << 12) |	  \
630					 ((r) << 8) |	  \
631					 ((g) << 4) |	  \
632					 ((b)))
633
634#define PIXMAN_FORMAT_BPP(f)	(((f) >> 24)       )
635#define PIXMAN_FORMAT_TYPE(f)	(((f) >> 16) & 0xff)
636#define PIXMAN_FORMAT_A(f)	(((f) >> 12) & 0x0f)
637#define PIXMAN_FORMAT_R(f)	(((f) >>  8) & 0x0f)
638#define PIXMAN_FORMAT_G(f)	(((f) >>  4) & 0x0f)
639#define PIXMAN_FORMAT_B(f)	(((f)      ) & 0x0f)
640#define PIXMAN_FORMAT_RGB(f)	(((f)      ) & 0xfff)
641#define PIXMAN_FORMAT_VIS(f)	(((f)      ) & 0xffff)
642#define PIXMAN_FORMAT_DEPTH(f)	(PIXMAN_FORMAT_A(f) +	\
643				 PIXMAN_FORMAT_R(f) +	\
644				 PIXMAN_FORMAT_G(f) +	\
645				 PIXMAN_FORMAT_B(f))
646
647#define PIXMAN_TYPE_OTHER	0
648#define PIXMAN_TYPE_A		1
649#define PIXMAN_TYPE_ARGB	2
650#define PIXMAN_TYPE_ABGR	3
651#define PIXMAN_TYPE_COLOR	4
652#define PIXMAN_TYPE_GRAY	5
653#define PIXMAN_TYPE_YUY2	6
654#define PIXMAN_TYPE_YV12	7
655#define PIXMAN_TYPE_BGRA	8
656#define PIXMAN_TYPE_RGBA	9
657#define PIXMAN_TYPE_ARGB_SRGB	10
658
659#define PIXMAN_FORMAT_COLOR(f)				\
660	(PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_ARGB ||	\
661	 PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_ABGR ||	\
662	 PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_BGRA ||	\
663	 PIXMAN_FORMAT_TYPE(f) == PIXMAN_TYPE_RGBA)
664
665/* 32bpp formats */
666typedef enum {
667    PIXMAN_a8r8g8b8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,8,8,8,8),
668    PIXMAN_x8r8g8b8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,0,8,8,8),
669    PIXMAN_a8b8g8r8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_ABGR,8,8,8,8),
670    PIXMAN_x8b8g8r8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_ABGR,0,8,8,8),
671    PIXMAN_b8g8r8a8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_BGRA,8,8,8,8),
672    PIXMAN_b8g8r8x8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_BGRA,0,8,8,8),
673    PIXMAN_r8g8b8a8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_RGBA,8,8,8,8),
674    PIXMAN_r8g8b8x8 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_RGBA,0,8,8,8),
675    PIXMAN_x14r6g6b6 =	 PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,0,6,6,6),
676    PIXMAN_x2r10g10b10 = PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,0,10,10,10),
677    PIXMAN_a2r10g10b10 = PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB,2,10,10,10),
678    PIXMAN_x2b10g10r10 = PIXMAN_FORMAT(32,PIXMAN_TYPE_ABGR,0,10,10,10),
679    PIXMAN_a2b10g10r10 = PIXMAN_FORMAT(32,PIXMAN_TYPE_ABGR,2,10,10,10),
680
681/* sRGB formats */
682    PIXMAN_a8r8g8b8_sRGB = PIXMAN_FORMAT(32,PIXMAN_TYPE_ARGB_SRGB,8,8,8,8),
683
684/* 24bpp formats */
685    PIXMAN_r8g8b8 =	 PIXMAN_FORMAT(24,PIXMAN_TYPE_ARGB,0,8,8,8),
686    PIXMAN_b8g8r8 =	 PIXMAN_FORMAT(24,PIXMAN_TYPE_ABGR,0,8,8,8),
687
688/* 16bpp formats */
689    PIXMAN_r5g6b5 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ARGB,0,5,6,5),
690    PIXMAN_b5g6r5 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ABGR,0,5,6,5),
691
692    PIXMAN_a1r5g5b5 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ARGB,1,5,5,5),
693    PIXMAN_x1r5g5b5 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ARGB,0,5,5,5),
694    PIXMAN_a1b5g5r5 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ABGR,1,5,5,5),
695    PIXMAN_x1b5g5r5 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ABGR,0,5,5,5),
696    PIXMAN_a4r4g4b4 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ARGB,4,4,4,4),
697    PIXMAN_x4r4g4b4 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ARGB,0,4,4,4),
698    PIXMAN_a4b4g4r4 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ABGR,4,4,4,4),
699    PIXMAN_x4b4g4r4 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_ABGR,0,4,4,4),
700
701/* 8bpp formats */
702    PIXMAN_a8 =		 PIXMAN_FORMAT(8,PIXMAN_TYPE_A,8,0,0,0),
703    PIXMAN_r3g3b2 =	 PIXMAN_FORMAT(8,PIXMAN_TYPE_ARGB,0,3,3,2),
704    PIXMAN_b2g3r3 =	 PIXMAN_FORMAT(8,PIXMAN_TYPE_ABGR,0,3,3,2),
705    PIXMAN_a2r2g2b2 =	 PIXMAN_FORMAT(8,PIXMAN_TYPE_ARGB,2,2,2,2),
706    PIXMAN_a2b2g2r2 =	 PIXMAN_FORMAT(8,PIXMAN_TYPE_ABGR,2,2,2,2),
707
708    PIXMAN_c8 =		 PIXMAN_FORMAT(8,PIXMAN_TYPE_COLOR,0,0,0,0),
709    PIXMAN_g8 =		 PIXMAN_FORMAT(8,PIXMAN_TYPE_GRAY,0,0,0,0),
710
711    PIXMAN_x4a4 =	 PIXMAN_FORMAT(8,PIXMAN_TYPE_A,4,0,0,0),
712
713    PIXMAN_x4c4 =	 PIXMAN_FORMAT(8,PIXMAN_TYPE_COLOR,0,0,0,0),
714    PIXMAN_x4g4 =	 PIXMAN_FORMAT(8,PIXMAN_TYPE_GRAY,0,0,0,0),
715
716/* 4bpp formats */
717    PIXMAN_a4 =		 PIXMAN_FORMAT(4,PIXMAN_TYPE_A,4,0,0,0),
718    PIXMAN_r1g2b1 =	 PIXMAN_FORMAT(4,PIXMAN_TYPE_ARGB,0,1,2,1),
719    PIXMAN_b1g2r1 =	 PIXMAN_FORMAT(4,PIXMAN_TYPE_ABGR,0,1,2,1),
720    PIXMAN_a1r1g1b1 =	 PIXMAN_FORMAT(4,PIXMAN_TYPE_ARGB,1,1,1,1),
721    PIXMAN_a1b1g1r1 =	 PIXMAN_FORMAT(4,PIXMAN_TYPE_ABGR,1,1,1,1),
722
723    PIXMAN_c4 =		 PIXMAN_FORMAT(4,PIXMAN_TYPE_COLOR,0,0,0,0),
724    PIXMAN_g4 =		 PIXMAN_FORMAT(4,PIXMAN_TYPE_GRAY,0,0,0,0),
725
726/* 1bpp formats */
727    PIXMAN_a1 =		 PIXMAN_FORMAT(1,PIXMAN_TYPE_A,1,0,0,0),
728
729    PIXMAN_g1 =		 PIXMAN_FORMAT(1,PIXMAN_TYPE_GRAY,0,0,0,0),
730
731/* YUV formats */
732    PIXMAN_yuy2 =	 PIXMAN_FORMAT(16,PIXMAN_TYPE_YUY2,0,0,0,0),
733    PIXMAN_yv12 =	 PIXMAN_FORMAT(12,PIXMAN_TYPE_YV12,0,0,0,0)
734} pixman_format_code_t;
735
736/* Querying supported format values. */
737pixman_bool_t pixman_format_supported_destination (pixman_format_code_t format);
738pixman_bool_t pixman_format_supported_source      (pixman_format_code_t format);
739
740/* Constructors */
741pixman_image_t *pixman_image_create_solid_fill       (const pixman_color_t         *color);
742pixman_image_t *pixman_image_create_linear_gradient  (const pixman_point_fixed_t   *p1,
743						      const pixman_point_fixed_t   *p2,
744						      const pixman_gradient_stop_t *stops,
745						      int                           n_stops);
746pixman_image_t *pixman_image_create_radial_gradient  (const pixman_point_fixed_t   *inner,
747						      const pixman_point_fixed_t   *outer,
748						      pixman_fixed_t                inner_radius,
749						      pixman_fixed_t                outer_radius,
750						      const pixman_gradient_stop_t *stops,
751						      int                           n_stops);
752pixman_image_t *pixman_image_create_conical_gradient (const pixman_point_fixed_t   *center,
753						      pixman_fixed_t                angle,
754						      const pixman_gradient_stop_t *stops,
755						      int                           n_stops);
756pixman_image_t *pixman_image_create_bits             (pixman_format_code_t          format,
757						      int                           width,
758						      int                           height,
759						      uint32_t                     *bits,
760						      int                           rowstride_bytes);
761pixman_image_t *pixman_image_create_bits_no_clear    (pixman_format_code_t format,
762						      int                  width,
763						      int                  height,
764						      uint32_t *           bits,
765						      int                  rowstride_bytes);
766
767/* Destructor */
768pixman_image_t *pixman_image_ref                     (pixman_image_t               *image);
769pixman_bool_t   pixman_image_unref                   (pixman_image_t               *image);
770
771void		pixman_image_set_destroy_function    (pixman_image_t		   *image,
772						      pixman_image_destroy_func_t   function,
773						      void			   *data);
774void *		pixman_image_get_destroy_data        (pixman_image_t		   *image);
775
776/* Set properties */
777pixman_bool_t   pixman_image_set_clip_region         (pixman_image_t               *image,
778						      pixman_region16_t            *region);
779pixman_bool_t   pixman_image_set_clip_region32       (pixman_image_t               *image,
780						      pixman_region32_t            *region);
781void		pixman_image_set_has_client_clip     (pixman_image_t               *image,
782						      pixman_bool_t		    clien_clip);
783pixman_bool_t   pixman_image_set_transform           (pixman_image_t               *image,
784						      const pixman_transform_t     *transform);
785void            pixman_image_set_repeat              (pixman_image_t               *image,
786						      pixman_repeat_t               repeat);
787pixman_bool_t   pixman_image_set_filter              (pixman_image_t               *image,
788						      pixman_filter_t               filter,
789						      const pixman_fixed_t         *filter_params,
790						      int                           n_filter_params);
791void		pixman_image_set_source_clipping     (pixman_image_t		   *image,
792						      pixman_bool_t                 source_clipping);
793void            pixman_image_set_alpha_map           (pixman_image_t               *image,
794						      pixman_image_t               *alpha_map,
795						      int16_t                       x,
796						      int16_t                       y);
797void            pixman_image_set_component_alpha     (pixman_image_t               *image,
798						      pixman_bool_t                 component_alpha);
799pixman_bool_t   pixman_image_get_component_alpha     (pixman_image_t               *image);
800void		pixman_image_set_accessors	     (pixman_image_t		   *image,
801						      pixman_read_memory_func_t	    read_func,
802						      pixman_write_memory_func_t    write_func);
803void		pixman_image_set_indexed	     (pixman_image_t		   *image,
804						      const pixman_indexed_t	   *indexed);
805uint32_t       *pixman_image_get_data                (pixman_image_t               *image);
806int		pixman_image_get_width               (pixman_image_t               *image);
807int             pixman_image_get_height              (pixman_image_t               *image);
808int		pixman_image_get_stride              (pixman_image_t               *image); /* in bytes */
809int		pixman_image_get_depth               (pixman_image_t		   *image);
810pixman_format_code_t pixman_image_get_format	     (pixman_image_t		   *image);
811pixman_bool_t	pixman_image_fill_rectangles	     (pixman_op_t		    op,
812						      pixman_image_t		   *image,
813						      const pixman_color_t	   *color,
814						      int			    n_rects,
815						      const pixman_rectangle16_t   *rects);
816pixman_bool_t   pixman_image_fill_boxes              (pixman_op_t                   op,
817                                                      pixman_image_t               *dest,
818                                                      const pixman_color_t         *color,
819                                                      int                           n_boxes,
820                                                      const pixman_box32_t         *boxes);
821
822/* Composite */
823pixman_bool_t pixman_compute_composite_region (pixman_region16_t *region,
824					       pixman_image_t    *src_image,
825					       pixman_image_t    *mask_image,
826					       pixman_image_t    *dest_image,
827					       int16_t            src_x,
828					       int16_t            src_y,
829					       int16_t            mask_x,
830					       int16_t            mask_y,
831					       int16_t            dest_x,
832					       int16_t            dest_y,
833					       uint16_t           width,
834					       uint16_t           height);
835void          pixman_image_composite          (pixman_op_t        op,
836					       pixman_image_t    *src,
837					       pixman_image_t    *mask,
838					       pixman_image_t    *dest,
839					       int16_t            src_x,
840					       int16_t            src_y,
841					       int16_t            mask_x,
842					       int16_t            mask_y,
843					       int16_t            dest_x,
844					       int16_t            dest_y,
845					       uint16_t           width,
846					       uint16_t           height);
847void          pixman_image_composite32        (pixman_op_t        op,
848					       pixman_image_t    *src,
849					       pixman_image_t    *mask,
850					       pixman_image_t    *dest,
851					       int32_t            src_x,
852					       int32_t            src_y,
853					       int32_t            mask_x,
854					       int32_t            mask_y,
855					       int32_t            dest_x,
856					       int32_t            dest_y,
857					       int32_t            width,
858					       int32_t            height);
859
860/* Executive Summary: This function is a no-op that only exists
861 * for historical reasons.
862 *
863 * There used to be a bug in the X server where it would rely on
864 * out-of-bounds accesses when it was asked to composite with a
865 * window as the source. It would create a pixman image pointing
866 * to some bogus position in memory, but then set a clip region
867 * to the position where the actual bits were.
868 *
869 * Due to a bug in old versions of pixman, where it would not clip
870 * against the image bounds when a clip region was set, this would
871 * actually work. So when the pixman bug was fixed, a workaround was
872 * added to allow certain out-of-bound accesses. This function disabled
873 * those workarounds.
874 *
875 * Since 0.21.2, pixman doesn't do these workarounds anymore, so now this
876 * function is a no-op.
877 */
878void pixman_disable_out_of_bounds_workaround (void);
879
880/*
881 * Glyphs
882 */
883typedef struct pixman_glyph_cache_t pixman_glyph_cache_t;
884typedef struct
885{
886    int		x, y;
887    const void *glyph;
888} pixman_glyph_t;
889
890pixman_glyph_cache_t *pixman_glyph_cache_create       (void);
891void                  pixman_glyph_cache_destroy      (pixman_glyph_cache_t *cache);
892void                  pixman_glyph_cache_freeze       (pixman_glyph_cache_t *cache);
893void                  pixman_glyph_cache_thaw         (pixman_glyph_cache_t *cache);
894const void *          pixman_glyph_cache_lookup       (pixman_glyph_cache_t *cache,
895						       void                 *font_key,
896						       void                 *glyph_key);
897const void *          pixman_glyph_cache_insert       (pixman_glyph_cache_t *cache,
898						       void                 *font_key,
899						       void                 *glyph_key,
900						       int		     origin_x,
901						       int                   origin_y,
902						       pixman_image_t       *glyph_image);
903void                  pixman_glyph_cache_remove       (pixman_glyph_cache_t *cache,
904						       void                 *font_key,
905						       void                 *glyph_key);
906void                  pixman_glyph_get_extents        (pixman_glyph_cache_t *cache,
907						       int                   n_glyphs,
908						       pixman_glyph_t       *glyphs,
909						       pixman_box32_t       *extents);
910pixman_format_code_t  pixman_glyph_get_mask_format    (pixman_glyph_cache_t *cache,
911						       int		     n_glyphs,
912						       const pixman_glyph_t *glyphs);
913void                  pixman_composite_glyphs         (pixman_op_t           op,
914						       pixman_image_t       *src,
915						       pixman_image_t       *dest,
916						       pixman_format_code_t  mask_format,
917						       int32_t               src_x,
918						       int32_t               src_y,
919						       int32_t		     mask_x,
920						       int32_t		     mask_y,
921						       int32_t               dest_x,
922						       int32_t               dest_y,
923						       int32_t		     width,
924						       int32_t		     height,
925						       pixman_glyph_cache_t *cache,
926						       int		     n_glyphs,
927						       const pixman_glyph_t *glyphs);
928void                  pixman_composite_glyphs_no_mask (pixman_op_t           op,
929						       pixman_image_t       *src,
930						       pixman_image_t       *dest,
931						       int32_t               src_x,
932						       int32_t               src_y,
933						       int32_t               dest_x,
934						       int32_t               dest_y,
935						       pixman_glyph_cache_t *cache,
936						       int		     n_glyphs,
937						       const pixman_glyph_t *glyphs);
938
939/*
940 * Trapezoids
941 */
942typedef struct pixman_edge pixman_edge_t;
943typedef struct pixman_trapezoid pixman_trapezoid_t;
944typedef struct pixman_trap pixman_trap_t;
945typedef struct pixman_span_fix pixman_span_fix_t;
946typedef struct pixman_triangle pixman_triangle_t;
947
948/*
949 * An edge structure.  This represents a single polygon edge
950 * and can be quickly stepped across small or large gaps in the
951 * sample grid
952 */
953struct pixman_edge
954{
955    pixman_fixed_t	x;
956    pixman_fixed_t	e;
957    pixman_fixed_t	stepx;
958    pixman_fixed_t	signdx;
959    pixman_fixed_t	dy;
960    pixman_fixed_t	dx;
961
962    pixman_fixed_t	stepx_small;
963    pixman_fixed_t	stepx_big;
964    pixman_fixed_t	dx_small;
965    pixman_fixed_t	dx_big;
966};
967
968struct pixman_trapezoid
969{
970    pixman_fixed_t	top, bottom;
971    pixman_line_fixed_t	left, right;
972};
973
974struct pixman_triangle
975{
976    pixman_point_fixed_t p1, p2, p3;
977};
978
979/* whether 't' is a well defined not obviously empty trapezoid */
980#define pixman_trapezoid_valid(t)				   \
981    ((t)->left.p1.y != (t)->left.p2.y &&			   \
982     (t)->right.p1.y != (t)->right.p2.y &&			   \
983     (int) ((t)->bottom - (t)->top) > 0)
984
985struct pixman_span_fix
986{
987    pixman_fixed_t	l, r, y;
988};
989
990struct pixman_trap
991{
992    pixman_span_fix_t	top, bot;
993};
994
995pixman_fixed_t pixman_sample_ceil_y        (pixman_fixed_t             y,
996					    int                        bpp);
997pixman_fixed_t pixman_sample_floor_y       (pixman_fixed_t             y,
998					    int                        bpp);
999void           pixman_edge_step            (pixman_edge_t             *e,
1000					    int                        n);
1001void           pixman_edge_init            (pixman_edge_t             *e,
1002					    int                        bpp,
1003					    pixman_fixed_t             y_start,
1004					    pixman_fixed_t             x_top,
1005					    pixman_fixed_t             y_top,
1006					    pixman_fixed_t             x_bot,
1007					    pixman_fixed_t             y_bot);
1008void           pixman_line_fixed_edge_init (pixman_edge_t             *e,
1009					    int                        bpp,
1010					    pixman_fixed_t             y,
1011					    const pixman_line_fixed_t *line,
1012					    int                        x_off,
1013					    int                        y_off);
1014void           pixman_rasterize_edges      (pixman_image_t            *image,
1015					    pixman_edge_t             *l,
1016					    pixman_edge_t             *r,
1017					    pixman_fixed_t             t,
1018					    pixman_fixed_t             b);
1019void           pixman_add_traps            (pixman_image_t            *image,
1020					    int16_t                    x_off,
1021					    int16_t                    y_off,
1022					    int                        ntrap,
1023					    const pixman_trap_t       *traps);
1024void           pixman_add_trapezoids       (pixman_image_t            *image,
1025					    int16_t                    x_off,
1026					    int                        y_off,
1027					    int                        ntraps,
1028					    const pixman_trapezoid_t  *traps);
1029void           pixman_rasterize_trapezoid  (pixman_image_t            *image,
1030					    const pixman_trapezoid_t  *trap,
1031					    int                        x_off,
1032					    int                        y_off);
1033void          pixman_composite_trapezoids (pixman_op_t		       op,
1034					   pixman_image_t *	       src,
1035					   pixman_image_t *	       dst,
1036					   pixman_format_code_t	       mask_format,
1037					   int			       x_src,
1038					   int			       y_src,
1039					   int			       x_dst,
1040					   int			       y_dst,
1041					   int			       n_traps,
1042					   const pixman_trapezoid_t *  traps);
1043void          pixman_composite_triangles (pixman_op_t		       op,
1044					  pixman_image_t *	       src,
1045					  pixman_image_t *	       dst,
1046					  pixman_format_code_t	       mask_format,
1047					  int			       x_src,
1048					  int			       y_src,
1049					  int			       x_dst,
1050					  int			       y_dst,
1051					  int			       n_tris,
1052					  const pixman_triangle_t *    tris);
1053void	      pixman_add_triangles       (pixman_image_t              *image,
1054					  int32_t	               x_off,
1055					  int32_t	               y_off,
1056					  int	                       n_tris,
1057					  const pixman_triangle_t     *tris);
1058
1059PIXMAN_END_DECLS
1060
1061#endif /* PIXMAN_H__ */
1062