jpayne@69
|
1 /***********************************************************
|
jpayne@69
|
2
|
jpayne@69
|
3 Copyright 1987, 1998 The Open Group
|
jpayne@69
|
4
|
jpayne@69
|
5 Permission to use, copy, modify, distribute, and sell this software and its
|
jpayne@69
|
6 documentation for any purpose is hereby granted without fee, provided that
|
jpayne@69
|
7 the above copyright notice appear in all copies and that both that
|
jpayne@69
|
8 copyright notice and this permission notice appear in supporting
|
jpayne@69
|
9 documentation.
|
jpayne@69
|
10
|
jpayne@69
|
11 The above copyright notice and this permission notice shall be included in
|
jpayne@69
|
12 all copies or substantial portions of the Software.
|
jpayne@69
|
13
|
jpayne@69
|
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
jpayne@69
|
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
jpayne@69
|
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
jpayne@69
|
17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
jpayne@69
|
18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
jpayne@69
|
19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
jpayne@69
|
20
|
jpayne@69
|
21 Except as contained in this notice, the name of The Open Group shall not be
|
jpayne@69
|
22 used in advertising or otherwise to promote the sale, use or other dealings
|
jpayne@69
|
23 in this Software without prior written authorization from The Open Group.
|
jpayne@69
|
24
|
jpayne@69
|
25 Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
|
jpayne@69
|
26
|
jpayne@69
|
27 All Rights Reserved
|
jpayne@69
|
28
|
jpayne@69
|
29 Permission to use, copy, modify, and distribute this software and its
|
jpayne@69
|
30 documentation for any purpose and without fee is hereby granted,
|
jpayne@69
|
31 provided that the above copyright notice appear in all copies and that
|
jpayne@69
|
32 both that copyright notice and this permission notice appear in
|
jpayne@69
|
33 supporting documentation, and that the name of Digital not be
|
jpayne@69
|
34 used in advertising or publicity pertaining to distribution of the
|
jpayne@69
|
35 software without specific, written prior permission.
|
jpayne@69
|
36
|
jpayne@69
|
37 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
jpayne@69
|
38 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
|
jpayne@69
|
39 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
jpayne@69
|
40 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
jpayne@69
|
41 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
jpayne@69
|
42 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
jpayne@69
|
43 SOFTWARE.
|
jpayne@69
|
44
|
jpayne@69
|
45 ******************************************************************/
|
jpayne@69
|
46 /*
|
jpayne@69
|
47 * Copyright © 1998, 2004 Keith Packard
|
jpayne@69
|
48 * Copyright 2007 Red Hat, Inc.
|
jpayne@69
|
49 *
|
jpayne@69
|
50 * Permission to use, copy, modify, distribute, and sell this software and its
|
jpayne@69
|
51 * documentation for any purpose is hereby granted without fee, provided that
|
jpayne@69
|
52 * the above copyright notice appear in all copies and that both that
|
jpayne@69
|
53 * copyright notice and this permission notice appear in supporting
|
jpayne@69
|
54 * documentation, and that the name of Keith Packard not be used in
|
jpayne@69
|
55 * advertising or publicity pertaining to distribution of the software without
|
jpayne@69
|
56 * specific, written prior permission. Keith Packard makes no
|
jpayne@69
|
57 * representations about the suitability of this software for any purpose. It
|
jpayne@69
|
58 * is provided "as is" without express or implied warranty.
|
jpayne@69
|
59 *
|
jpayne@69
|
60 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
jpayne@69
|
61 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
jpayne@69
|
62 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
jpayne@69
|
63 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
jpayne@69
|
64 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
jpayne@69
|
65 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
jpayne@69
|
66 * PERFORMANCE OF THIS SOFTWARE.
|
jpayne@69
|
67 */
|
jpayne@69
|
68
|
jpayne@69
|
69 #ifndef PIXMAN_H__
|
jpayne@69
|
70 #define PIXMAN_H__
|
jpayne@69
|
71
|
jpayne@69
|
72 #include <pixman-version.h>
|
jpayne@69
|
73
|
jpayne@69
|
74 #ifdef __cplusplus
|
jpayne@69
|
75 #define PIXMAN_BEGIN_DECLS extern "C" {
|
jpayne@69
|
76 #define PIXMAN_END_DECLS }
|
jpayne@69
|
77 #else
|
jpayne@69
|
78 #define PIXMAN_BEGIN_DECLS
|
jpayne@69
|
79 #define PIXMAN_END_DECLS
|
jpayne@69
|
80 #endif
|
jpayne@69
|
81
|
jpayne@69
|
82 PIXMAN_BEGIN_DECLS
|
jpayne@69
|
83
|
jpayne@69
|
84 /*
|
jpayne@69
|
85 * Standard integers
|
jpayne@69
|
86 */
|
jpayne@69
|
87
|
jpayne@69
|
88 #if !defined (PIXMAN_DONT_DEFINE_STDINT)
|
jpayne@69
|
89
|
jpayne@69
|
90 #if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || defined (_sgi) || defined (__sun) || defined (sun) || defined (__digital__) || defined (__HP_cc)
|
jpayne@69
|
91 # include <inttypes.h>
|
jpayne@69
|
92 /* VS 2010 (_MSC_VER 1600) has stdint.h */
|
jpayne@69
|
93 #elif defined (_MSC_VER) && _MSC_VER < 1600
|
jpayne@69
|
94 typedef __int8 int8_t;
|
jpayne@69
|
95 typedef unsigned __int8 uint8_t;
|
jpayne@69
|
96 typedef __int16 int16_t;
|
jpayne@69
|
97 typedef unsigned __int16 uint16_t;
|
jpayne@69
|
98 typedef __int32 int32_t;
|
jpayne@69
|
99 typedef unsigned __int32 uint32_t;
|
jpayne@69
|
100 typedef __int64 int64_t;
|
jpayne@69
|
101 typedef unsigned __int64 uint64_t;
|
jpayne@69
|
102 #elif defined (_AIX)
|
jpayne@69
|
103 # include <sys/inttypes.h>
|
jpayne@69
|
104 #else
|
jpayne@69
|
105 # include <stdint.h>
|
jpayne@69
|
106 #endif
|
jpayne@69
|
107
|
jpayne@69
|
108 #endif
|
jpayne@69
|
109
|
jpayne@69
|
110 /*
|
jpayne@69
|
111 * Boolean
|
jpayne@69
|
112 */
|
jpayne@69
|
113 typedef int pixman_bool_t;
|
jpayne@69
|
114
|
jpayne@69
|
115 /*
|
jpayne@69
|
116 * Fixpoint numbers
|
jpayne@69
|
117 */
|
jpayne@69
|
118 typedef int64_t pixman_fixed_32_32_t;
|
jpayne@69
|
119 typedef pixman_fixed_32_32_t pixman_fixed_48_16_t;
|
jpayne@69
|
120 typedef uint32_t pixman_fixed_1_31_t;
|
jpayne@69
|
121 typedef uint32_t pixman_fixed_1_16_t;
|
jpayne@69
|
122 typedef int32_t pixman_fixed_16_16_t;
|
jpayne@69
|
123 typedef pixman_fixed_16_16_t pixman_fixed_t;
|
jpayne@69
|
124
|
jpayne@69
|
125 #define pixman_fixed_e ((pixman_fixed_t) 1)
|
jpayne@69
|
126 #define pixman_fixed_1 (pixman_int_to_fixed(1))
|
jpayne@69
|
127 #define pixman_fixed_1_minus_e (pixman_fixed_1 - pixman_fixed_e)
|
jpayne@69
|
128 #define pixman_fixed_minus_1 (pixman_int_to_fixed(-1))
|
jpayne@69
|
129 #define pixman_fixed_to_int(f) ((int) ((f) >> 16))
|
jpayne@69
|
130 #define pixman_int_to_fixed(i) ((pixman_fixed_t) ((uint32_t) (i) << 16))
|
jpayne@69
|
131 #define pixman_fixed_to_double(f) (double) ((f) / (double) pixman_fixed_1)
|
jpayne@69
|
132 #define pixman_double_to_fixed(d) ((pixman_fixed_t) ((d) * 65536.0))
|
jpayne@69
|
133 #define pixman_fixed_frac(f) ((f) & pixman_fixed_1_minus_e)
|
jpayne@69
|
134 #define pixman_fixed_floor(f) ((f) & ~pixman_fixed_1_minus_e)
|
jpayne@69
|
135 #define pixman_fixed_ceil(f) pixman_fixed_floor ((f) + pixman_fixed_1_minus_e)
|
jpayne@69
|
136 #define pixman_fixed_fraction(f) ((f) & pixman_fixed_1_minus_e)
|
jpayne@69
|
137 #define pixman_fixed_mod_2(f) ((f) & (pixman_fixed1 | pixman_fixed_1_minus_e))
|
jpayne@69
|
138 #define pixman_max_fixed_48_16 ((pixman_fixed_48_16_t) 0x7fffffff)
|
jpayne@69
|
139 #define pixman_min_fixed_48_16 (-((pixman_fixed_48_16_t) 1 << 31))
|
jpayne@69
|
140
|
jpayne@69
|
141 /*
|
jpayne@69
|
142 * Misc structs
|
jpayne@69
|
143 */
|
jpayne@69
|
144 typedef struct pixman_color pixman_color_t;
|
jpayne@69
|
145 typedef struct pixman_point_fixed pixman_point_fixed_t;
|
jpayne@69
|
146 typedef struct pixman_line_fixed pixman_line_fixed_t;
|
jpayne@69
|
147 typedef struct pixman_vector pixman_vector_t;
|
jpayne@69
|
148 typedef struct pixman_transform pixman_transform_t;
|
jpayne@69
|
149
|
jpayne@69
|
150 struct pixman_color
|
jpayne@69
|
151 {
|
jpayne@69
|
152 uint16_t red;
|
jpayne@69
|
153 uint16_t green;
|
jpayne@69
|
154 uint16_t blue;
|
jpayne@69
|
155 uint16_t alpha;
|
jpayne@69
|
156 };
|
jpayne@69
|
157
|
jpayne@69
|
158 struct pixman_point_fixed
|
jpayne@69
|
159 {
|
jpayne@69
|
160 pixman_fixed_t x;
|
jpayne@69
|
161 pixman_fixed_t y;
|
jpayne@69
|
162 };
|
jpayne@69
|
163
|
jpayne@69
|
164 struct pixman_line_fixed
|
jpayne@69
|
165 {
|
jpayne@69
|
166 pixman_point_fixed_t p1, p2;
|
jpayne@69
|
167 };
|
jpayne@69
|
168
|
jpayne@69
|
169 /*
|
jpayne@69
|
170 * Fixed point matrices
|
jpayne@69
|
171 */
|
jpayne@69
|
172
|
jpayne@69
|
173 struct pixman_vector
|
jpayne@69
|
174 {
|
jpayne@69
|
175 pixman_fixed_t vector[3];
|
jpayne@69
|
176 };
|
jpayne@69
|
177
|
jpayne@69
|
178 struct pixman_transform
|
jpayne@69
|
179 {
|
jpayne@69
|
180 pixman_fixed_t matrix[3][3];
|
jpayne@69
|
181 };
|
jpayne@69
|
182
|
jpayne@69
|
183 /* forward declaration (sorry) */
|
jpayne@69
|
184 struct pixman_box16;
|
jpayne@69
|
185 typedef union pixman_image pixman_image_t;
|
jpayne@69
|
186
|
jpayne@69
|
187 PIXMAN_API
|
jpayne@69
|
188 void pixman_transform_init_identity (struct pixman_transform *matrix);
|
jpayne@69
|
189
|
jpayne@69
|
190 PIXMAN_API
|
jpayne@69
|
191 pixman_bool_t pixman_transform_point_3d (const struct pixman_transform *transform,
|
jpayne@69
|
192 struct pixman_vector *vector);
|
jpayne@69
|
193
|
jpayne@69
|
194 PIXMAN_API
|
jpayne@69
|
195 pixman_bool_t pixman_transform_point (const struct pixman_transform *transform,
|
jpayne@69
|
196 struct pixman_vector *vector);
|
jpayne@69
|
197
|
jpayne@69
|
198 PIXMAN_API
|
jpayne@69
|
199 pixman_bool_t pixman_transform_multiply (struct pixman_transform *dst,
|
jpayne@69
|
200 const struct pixman_transform *l,
|
jpayne@69
|
201 const struct pixman_transform *r);
|
jpayne@69
|
202
|
jpayne@69
|
203 PIXMAN_API
|
jpayne@69
|
204 void pixman_transform_init_scale (struct pixman_transform *t,
|
jpayne@69
|
205 pixman_fixed_t sx,
|
jpayne@69
|
206 pixman_fixed_t sy);
|
jpayne@69
|
207
|
jpayne@69
|
208 PIXMAN_API
|
jpayne@69
|
209 pixman_bool_t pixman_transform_scale (struct pixman_transform *forward,
|
jpayne@69
|
210 struct pixman_transform *reverse,
|
jpayne@69
|
211 pixman_fixed_t sx,
|
jpayne@69
|
212 pixman_fixed_t sy);
|
jpayne@69
|
213
|
jpayne@69
|
214 PIXMAN_API
|
jpayne@69
|
215 void pixman_transform_init_rotate (struct pixman_transform *t,
|
jpayne@69
|
216 pixman_fixed_t cos,
|
jpayne@69
|
217 pixman_fixed_t sin);
|
jpayne@69
|
218
|
jpayne@69
|
219 PIXMAN_API
|
jpayne@69
|
220 pixman_bool_t pixman_transform_rotate (struct pixman_transform *forward,
|
jpayne@69
|
221 struct pixman_transform *reverse,
|
jpayne@69
|
222 pixman_fixed_t c,
|
jpayne@69
|
223 pixman_fixed_t s);
|
jpayne@69
|
224
|
jpayne@69
|
225 PIXMAN_API
|
jpayne@69
|
226 void pixman_transform_init_translate (struct pixman_transform *t,
|
jpayne@69
|
227 pixman_fixed_t tx,
|
jpayne@69
|
228 pixman_fixed_t ty);
|
jpayne@69
|
229
|
jpayne@69
|
230 PIXMAN_API
|
jpayne@69
|
231 pixman_bool_t pixman_transform_translate (struct pixman_transform *forward,
|
jpayne@69
|
232 struct pixman_transform *reverse,
|
jpayne@69
|
233 pixman_fixed_t tx,
|
jpayne@69
|
234 pixman_fixed_t ty);
|
jpayne@69
|
235
|
jpayne@69
|
236 PIXMAN_API
|
jpayne@69
|
237 pixman_bool_t pixman_transform_bounds (const struct pixman_transform *matrix,
|
jpayne@69
|
238 struct pixman_box16 *b);
|
jpayne@69
|
239
|
jpayne@69
|
240 PIXMAN_API
|
jpayne@69
|
241 pixman_bool_t pixman_transform_invert (struct pixman_transform *dst,
|
jpayne@69
|
242 const struct pixman_transform *src);
|
jpayne@69
|
243
|
jpayne@69
|
244 PIXMAN_API
|
jpayne@69
|
245 pixman_bool_t pixman_transform_is_identity (const struct pixman_transform *t);
|
jpayne@69
|
246
|
jpayne@69
|
247 PIXMAN_API
|
jpayne@69
|
248 pixman_bool_t pixman_transform_is_scale (const struct pixman_transform *t);
|
jpayne@69
|
249
|
jpayne@69
|
250 PIXMAN_API
|
jpayne@69
|
251 pixman_bool_t pixman_transform_is_int_translate (const struct pixman_transform *t);
|
jpayne@69
|
252
|
jpayne@69
|
253 PIXMAN_API
|
jpayne@69
|
254 pixman_bool_t pixman_transform_is_inverse (const struct pixman_transform *a,
|
jpayne@69
|
255 const struct pixman_transform *b);
|
jpayne@69
|
256
|
jpayne@69
|
257 /*
|
jpayne@69
|
258 * Floating point matrices
|
jpayne@69
|
259 */
|
jpayne@69
|
260 typedef struct pixman_f_transform pixman_f_transform_t;
|
jpayne@69
|
261 typedef struct pixman_f_vector pixman_f_vector_t;
|
jpayne@69
|
262
|
jpayne@69
|
263 struct pixman_f_vector
|
jpayne@69
|
264 {
|
jpayne@69
|
265 double v[3];
|
jpayne@69
|
266 };
|
jpayne@69
|
267
|
jpayne@69
|
268 struct pixman_f_transform
|
jpayne@69
|
269 {
|
jpayne@69
|
270 double m[3][3];
|
jpayne@69
|
271 };
|
jpayne@69
|
272
|
jpayne@69
|
273
|
jpayne@69
|
274 PIXMAN_API
|
jpayne@69
|
275 pixman_bool_t pixman_transform_from_pixman_f_transform (struct pixman_transform *t,
|
jpayne@69
|
276 const struct pixman_f_transform *ft);
|
jpayne@69
|
277
|
jpayne@69
|
278 PIXMAN_API
|
jpayne@69
|
279 void pixman_f_transform_from_pixman_transform (struct pixman_f_transform *ft,
|
jpayne@69
|
280 const struct pixman_transform *t);
|
jpayne@69
|
281
|
jpayne@69
|
282 PIXMAN_API
|
jpayne@69
|
283 pixman_bool_t pixman_f_transform_invert (struct pixman_f_transform *dst,
|
jpayne@69
|
284 const struct pixman_f_transform *src);
|
jpayne@69
|
285
|
jpayne@69
|
286 PIXMAN_API
|
jpayne@69
|
287 pixman_bool_t pixman_f_transform_point (const struct pixman_f_transform *t,
|
jpayne@69
|
288 struct pixman_f_vector *v);
|
jpayne@69
|
289
|
jpayne@69
|
290 PIXMAN_API
|
jpayne@69
|
291 void pixman_f_transform_point_3d (const struct pixman_f_transform *t,
|
jpayne@69
|
292 struct pixman_f_vector *v);
|
jpayne@69
|
293
|
jpayne@69
|
294 PIXMAN_API
|
jpayne@69
|
295 void pixman_f_transform_multiply (struct pixman_f_transform *dst,
|
jpayne@69
|
296 const struct pixman_f_transform *l,
|
jpayne@69
|
297 const struct pixman_f_transform *r);
|
jpayne@69
|
298
|
jpayne@69
|
299 PIXMAN_API
|
jpayne@69
|
300 void pixman_f_transform_init_scale (struct pixman_f_transform *t,
|
jpayne@69
|
301 double sx,
|
jpayne@69
|
302 double sy);
|
jpayne@69
|
303
|
jpayne@69
|
304 PIXMAN_API
|
jpayne@69
|
305 pixman_bool_t pixman_f_transform_scale (struct pixman_f_transform *forward,
|
jpayne@69
|
306 struct pixman_f_transform *reverse,
|
jpayne@69
|
307 double sx,
|
jpayne@69
|
308 double sy);
|
jpayne@69
|
309
|
jpayne@69
|
310 PIXMAN_API
|
jpayne@69
|
311 void pixman_f_transform_init_rotate (struct pixman_f_transform *t,
|
jpayne@69
|
312 double cos,
|
jpayne@69
|
313 double sin);
|
jpayne@69
|
314
|
jpayne@69
|
315 PIXMAN_API
|
jpayne@69
|
316 pixman_bool_t pixman_f_transform_rotate (struct pixman_f_transform *forward,
|
jpayne@69
|
317 struct pixman_f_transform *reverse,
|
jpayne@69
|
318 double c,
|
jpayne@69
|
319 double s);
|
jpayne@69
|
320
|
jpayne@69
|
321 PIXMAN_API
|
jpayne@69
|
322 void pixman_f_transform_init_translate (struct pixman_f_transform *t,
|
jpayne@69
|
323 double tx,
|
jpayne@69
|
324 double ty);
|
jpayne@69
|
325
|
jpayne@69
|
326 PIXMAN_API
|
jpayne@69
|
327 pixman_bool_t pixman_f_transform_translate (struct pixman_f_transform *forward,
|
jpayne@69
|
328 struct pixman_f_transform *reverse,
|
jpayne@69
|
329 double tx,
|
jpayne@69
|
330 double ty);
|
jpayne@69
|
331
|
jpayne@69
|
332 PIXMAN_API
|
jpayne@69
|
333 pixman_bool_t pixman_f_transform_bounds (const struct pixman_f_transform *t,
|
jpayne@69
|
334 struct pixman_box16 *b);
|
jpayne@69
|
335
|
jpayne@69
|
336 PIXMAN_API
|
jpayne@69
|
337 void pixman_f_transform_init_identity (struct pixman_f_transform *t);
|
jpayne@69
|
338
|
jpayne@69
|
339 typedef enum
|
jpayne@69
|
340 {
|
jpayne@69
|
341 PIXMAN_REPEAT_NONE,
|
jpayne@69
|
342 PIXMAN_REPEAT_NORMAL,
|
jpayne@69
|
343 PIXMAN_REPEAT_PAD,
|
jpayne@69
|
344 PIXMAN_REPEAT_REFLECT
|
jpayne@69
|
345 } pixman_repeat_t;
|
jpayne@69
|
346
|
jpayne@69
|
347 typedef enum
|
jpayne@69
|
348 {
|
jpayne@69
|
349 PIXMAN_DITHER_NONE,
|
jpayne@69
|
350 PIXMAN_DITHER_FAST,
|
jpayne@69
|
351 PIXMAN_DITHER_GOOD,
|
jpayne@69
|
352 PIXMAN_DITHER_BEST,
|
jpayne@69
|
353 PIXMAN_DITHER_ORDERED_BAYER_8,
|
jpayne@69
|
354 PIXMAN_DITHER_ORDERED_BLUE_NOISE_64,
|
jpayne@69
|
355 } pixman_dither_t;
|
jpayne@69
|
356
|
jpayne@69
|
357 typedef enum
|
jpayne@69
|
358 {
|
jpayne@69
|
359 PIXMAN_FILTER_FAST,
|
jpayne@69
|
360 PIXMAN_FILTER_GOOD,
|
jpayne@69
|
361 PIXMAN_FILTER_BEST,
|
jpayne@69
|
362 PIXMAN_FILTER_NEAREST,
|
jpayne@69
|
363 PIXMAN_FILTER_BILINEAR,
|
jpayne@69
|
364 PIXMAN_FILTER_CONVOLUTION,
|
jpayne@69
|
365
|
jpayne@69
|
366 /* The SEPARABLE_CONVOLUTION filter takes the following parameters:
|
jpayne@69
|
367 *
|
jpayne@69
|
368 * width: integer given as 16.16 fixpoint number
|
jpayne@69
|
369 * height: integer given as 16.16 fixpoint number
|
jpayne@69
|
370 * x_phase_bits: integer given as 16.16 fixpoint
|
jpayne@69
|
371 * y_phase_bits: integer given as 16.16 fixpoint
|
jpayne@69
|
372 * xtables: (1 << x_phase_bits) tables of size width
|
jpayne@69
|
373 * ytables: (1 << y_phase_bits) tables of size height
|
jpayne@69
|
374 *
|
jpayne@69
|
375 * When sampling at (x, y), the location is first rounded to one of
|
jpayne@69
|
376 * n_x_phases * n_y_phases subpixel positions. These subpixel positions
|
jpayne@69
|
377 * determine an xtable and a ytable to use.
|
jpayne@69
|
378 *
|
jpayne@69
|
379 * Conceptually a width x height matrix is then formed in which each entry
|
jpayne@69
|
380 * is the product of the corresponding entries in the x and y tables.
|
jpayne@69
|
381 * This matrix is then aligned with the image pixels such that its center
|
jpayne@69
|
382 * is as close as possible to the subpixel location chosen earlier. Then
|
jpayne@69
|
383 * the image is convolved with the matrix and the resulting pixel returned.
|
jpayne@69
|
384 */
|
jpayne@69
|
385 PIXMAN_FILTER_SEPARABLE_CONVOLUTION
|
jpayne@69
|
386 } pixman_filter_t;
|
jpayne@69
|
387
|
jpayne@69
|
388 typedef enum
|
jpayne@69
|
389 {
|
jpayne@69
|
390 PIXMAN_OP_CLEAR = 0x00,
|
jpayne@69
|
391 PIXMAN_OP_SRC = 0x01,
|
jpayne@69
|
392 PIXMAN_OP_DST = 0x02,
|
jpayne@69
|
393 PIXMAN_OP_OVER = 0x03,
|
jpayne@69
|
394 PIXMAN_OP_OVER_REVERSE = 0x04,
|
jpayne@69
|
395 PIXMAN_OP_IN = 0x05,
|
jpayne@69
|
396 PIXMAN_OP_IN_REVERSE = 0x06,
|
jpayne@69
|
397 PIXMAN_OP_OUT = 0x07,
|
jpayne@69
|
398 PIXMAN_OP_OUT_REVERSE = 0x08,
|
jpayne@69
|
399 PIXMAN_OP_ATOP = 0x09,
|
jpayne@69
|
400 PIXMAN_OP_ATOP_REVERSE = 0x0a,
|
jpayne@69
|
401 PIXMAN_OP_XOR = 0x0b,
|
jpayne@69
|
402 PIXMAN_OP_ADD = 0x0c,
|
jpayne@69
|
403 PIXMAN_OP_SATURATE = 0x0d,
|
jpayne@69
|
404
|
jpayne@69
|
405 PIXMAN_OP_DISJOINT_CLEAR = 0x10,
|
jpayne@69
|
406 PIXMAN_OP_DISJOINT_SRC = 0x11,
|
jpayne@69
|
407 PIXMAN_OP_DISJOINT_DST = 0x12,
|
jpayne@69
|
408 PIXMAN_OP_DISJOINT_OVER = 0x13,
|
jpayne@69
|
409 PIXMAN_OP_DISJOINT_OVER_REVERSE = 0x14,
|
jpayne@69
|
410 PIXMAN_OP_DISJOINT_IN = 0x15,
|
jpayne@69
|
411 PIXMAN_OP_DISJOINT_IN_REVERSE = 0x16,
|
jpayne@69
|
412 PIXMAN_OP_DISJOINT_OUT = 0x17,
|
jpayne@69
|
413 PIXMAN_OP_DISJOINT_OUT_REVERSE = 0x18,
|
jpayne@69
|
414 PIXMAN_OP_DISJOINT_ATOP = 0x19,
|
jpayne@69
|
415 PIXMAN_OP_DISJOINT_ATOP_REVERSE = 0x1a,
|
jpayne@69
|
416 PIXMAN_OP_DISJOINT_XOR = 0x1b,
|
jpayne@69
|
417
|
jpayne@69
|
418 PIXMAN_OP_CONJOINT_CLEAR = 0x20,
|
jpayne@69
|
419 PIXMAN_OP_CONJOINT_SRC = 0x21,
|
jpayne@69
|
420 PIXMAN_OP_CONJOINT_DST = 0x22,
|
jpayne@69
|
421 PIXMAN_OP_CONJOINT_OVER = 0x23,
|
jpayne@69
|
422 PIXMAN_OP_CONJOINT_OVER_REVERSE = 0x24,
|
jpayne@69
|
423 PIXMAN_OP_CONJOINT_IN = 0x25,
|
jpayne@69
|
424 PIXMAN_OP_CONJOINT_IN_REVERSE = 0x26,
|
jpayne@69
|
425 PIXMAN_OP_CONJOINT_OUT = 0x27,
|
jpayne@69
|
426 PIXMAN_OP_CONJOINT_OUT_REVERSE = 0x28,
|
jpayne@69
|
427 PIXMAN_OP_CONJOINT_ATOP = 0x29,
|
jpayne@69
|
428 PIXMAN_OP_CONJOINT_ATOP_REVERSE = 0x2a,
|
jpayne@69
|
429 PIXMAN_OP_CONJOINT_XOR = 0x2b,
|
jpayne@69
|
430
|
jpayne@69
|
431 PIXMAN_OP_MULTIPLY = 0x30,
|
jpayne@69
|
432 PIXMAN_OP_SCREEN = 0x31,
|
jpayne@69
|
433 PIXMAN_OP_OVERLAY = 0x32,
|
jpayne@69
|
434 PIXMAN_OP_DARKEN = 0x33,
|
jpayne@69
|
435 PIXMAN_OP_LIGHTEN = 0x34,
|
jpayne@69
|
436 PIXMAN_OP_COLOR_DODGE = 0x35,
|
jpayne@69
|
437 PIXMAN_OP_COLOR_BURN = 0x36,
|
jpayne@69
|
438 PIXMAN_OP_HARD_LIGHT = 0x37,
|
jpayne@69
|
439 PIXMAN_OP_SOFT_LIGHT = 0x38,
|
jpayne@69
|
440 PIXMAN_OP_DIFFERENCE = 0x39,
|
jpayne@69
|
441 PIXMAN_OP_EXCLUSION = 0x3a,
|
jpayne@69
|
442 PIXMAN_OP_HSL_HUE = 0x3b,
|
jpayne@69
|
443 PIXMAN_OP_HSL_SATURATION = 0x3c,
|
jpayne@69
|
444 PIXMAN_OP_HSL_COLOR = 0x3d,
|
jpayne@69
|
445 PIXMAN_OP_HSL_LUMINOSITY = 0x3e
|
jpayne@69
|
446
|
jpayne@69
|
447 #ifdef PIXMAN_USE_INTERNAL_API
|
jpayne@69
|
448 ,
|
jpayne@69
|
449 PIXMAN_N_OPERATORS,
|
jpayne@69
|
450 PIXMAN_OP_NONE = PIXMAN_N_OPERATORS
|
jpayne@69
|
451 #endif
|
jpayne@69
|
452 } pixman_op_t;
|
jpayne@69
|
453
|
jpayne@69
|
454 /*
|
jpayne@69
|
455 * Regions
|
jpayne@69
|
456 */
|
jpayne@69
|
457 typedef struct pixman_region16_data pixman_region16_data_t;
|
jpayne@69
|
458 typedef struct pixman_box16 pixman_box16_t;
|
jpayne@69
|
459 typedef struct pixman_rectangle16 pixman_rectangle16_t;
|
jpayne@69
|
460 typedef struct pixman_region16 pixman_region16_t;
|
jpayne@69
|
461
|
jpayne@69
|
462 struct pixman_region16_data {
|
jpayne@69
|
463 long size;
|
jpayne@69
|
464 long numRects;
|
jpayne@69
|
465 /* pixman_box16_t rects[size]; in memory but not explicitly declared */
|
jpayne@69
|
466 };
|
jpayne@69
|
467
|
jpayne@69
|
468 struct pixman_rectangle16
|
jpayne@69
|
469 {
|
jpayne@69
|
470 int16_t x, y;
|
jpayne@69
|
471 uint16_t width, height;
|
jpayne@69
|
472 };
|
jpayne@69
|
473
|
jpayne@69
|
474 struct pixman_box16
|
jpayne@69
|
475 {
|
jpayne@69
|
476 int16_t x1, y1, x2, y2;
|
jpayne@69
|
477 };
|
jpayne@69
|
478
|
jpayne@69
|
479 struct pixman_region16
|
jpayne@69
|
480 {
|
jpayne@69
|
481 pixman_box16_t extents;
|
jpayne@69
|
482 pixman_region16_data_t *data;
|
jpayne@69
|
483 };
|
jpayne@69
|
484
|
jpayne@69
|
485 typedef enum
|
jpayne@69
|
486 {
|
jpayne@69
|
487 PIXMAN_REGION_OUT,
|
jpayne@69
|
488 PIXMAN_REGION_IN,
|
jpayne@69
|
489 PIXMAN_REGION_PART
|
jpayne@69
|
490 } pixman_region_overlap_t;
|
jpayne@69
|
491
|
jpayne@69
|
492 /* This function exists only to make it possible to preserve
|
jpayne@69
|
493 * the X ABI - it should go away at first opportunity.
|
jpayne@69
|
494 */
|
jpayne@69
|
495 PIXMAN_API
|
jpayne@69
|
496 void pixman_region_set_static_pointers (pixman_box16_t *empty_box,
|
jpayne@69
|
497 pixman_region16_data_t *empty_data,
|
jpayne@69
|
498 pixman_region16_data_t *broken_data);
|
jpayne@69
|
499
|
jpayne@69
|
500 /* creation/destruction */
|
jpayne@69
|
501 PIXMAN_API
|
jpayne@69
|
502 void pixman_region_init (pixman_region16_t *region);
|
jpayne@69
|
503
|
jpayne@69
|
504 PIXMAN_API
|
jpayne@69
|
505 void pixman_region_init_rect (pixman_region16_t *region,
|
jpayne@69
|
506 int x,
|
jpayne@69
|
507 int y,
|
jpayne@69
|
508 unsigned int width,
|
jpayne@69
|
509 unsigned int height);
|
jpayne@69
|
510
|
jpayne@69
|
511 PIXMAN_API
|
jpayne@69
|
512 pixman_bool_t pixman_region_init_rects (pixman_region16_t *region,
|
jpayne@69
|
513 const pixman_box16_t *boxes,
|
jpayne@69
|
514 int count);
|
jpayne@69
|
515
|
jpayne@69
|
516 PIXMAN_API
|
jpayne@69
|
517 void pixman_region_init_with_extents (pixman_region16_t *region,
|
jpayne@69
|
518 const pixman_box16_t *extents);
|
jpayne@69
|
519
|
jpayne@69
|
520 PIXMAN_API
|
jpayne@69
|
521 void pixman_region_init_from_image (pixman_region16_t *region,
|
jpayne@69
|
522 pixman_image_t *image);
|
jpayne@69
|
523
|
jpayne@69
|
524 PIXMAN_API
|
jpayne@69
|
525 void pixman_region_fini (pixman_region16_t *region);
|
jpayne@69
|
526
|
jpayne@69
|
527
|
jpayne@69
|
528 /* manipulation */
|
jpayne@69
|
529 PIXMAN_API
|
jpayne@69
|
530 void pixman_region_translate (pixman_region16_t *region,
|
jpayne@69
|
531 int x,
|
jpayne@69
|
532 int y);
|
jpayne@69
|
533
|
jpayne@69
|
534 PIXMAN_API
|
jpayne@69
|
535 pixman_bool_t pixman_region_copy (pixman_region16_t *dest,
|
jpayne@69
|
536 const pixman_region16_t *source);
|
jpayne@69
|
537
|
jpayne@69
|
538 PIXMAN_API
|
jpayne@69
|
539 pixman_bool_t pixman_region_intersect (pixman_region16_t *new_reg,
|
jpayne@69
|
540 const pixman_region16_t *reg1,
|
jpayne@69
|
541 const pixman_region16_t *reg2);
|
jpayne@69
|
542
|
jpayne@69
|
543 PIXMAN_API
|
jpayne@69
|
544 pixman_bool_t pixman_region_union (pixman_region16_t *new_reg,
|
jpayne@69
|
545 const pixman_region16_t *reg1,
|
jpayne@69
|
546 const pixman_region16_t *reg2);
|
jpayne@69
|
547
|
jpayne@69
|
548 PIXMAN_API
|
jpayne@69
|
549 pixman_bool_t pixman_region_union_rect (pixman_region16_t *dest,
|
jpayne@69
|
550 const pixman_region16_t *source,
|
jpayne@69
|
551 int x,
|
jpayne@69
|
552 int y,
|
jpayne@69
|
553 unsigned int width,
|
jpayne@69
|
554 unsigned int height);
|
jpayne@69
|
555
|
jpayne@69
|
556 PIXMAN_API
|
jpayne@69
|
557 pixman_bool_t pixman_region_intersect_rect (pixman_region16_t *dest,
|
jpayne@69
|
558 const pixman_region16_t *source,
|
jpayne@69
|
559 int x,
|
jpayne@69
|
560 int y,
|
jpayne@69
|
561 unsigned int width,
|
jpayne@69
|
562 unsigned int height);
|
jpayne@69
|
563
|
jpayne@69
|
564 PIXMAN_API
|
jpayne@69
|
565 pixman_bool_t pixman_region_subtract (pixman_region16_t *reg_d,
|
jpayne@69
|
566 const pixman_region16_t *reg_m,
|
jpayne@69
|
567 const pixman_region16_t *reg_s);
|
jpayne@69
|
568
|
jpayne@69
|
569 PIXMAN_API
|
jpayne@69
|
570 pixman_bool_t pixman_region_inverse (pixman_region16_t *new_reg,
|
jpayne@69
|
571 const pixman_region16_t *reg1,
|
jpayne@69
|
572 const pixman_box16_t *inv_rect);
|
jpayne@69
|
573
|
jpayne@69
|
574 PIXMAN_API
|
jpayne@69
|
575 pixman_bool_t pixman_region_contains_point (const pixman_region16_t *region,
|
jpayne@69
|
576 int x,
|
jpayne@69
|
577 int y,
|
jpayne@69
|
578 pixman_box16_t *box);
|
jpayne@69
|
579
|
jpayne@69
|
580 PIXMAN_API
|
jpayne@69
|
581 pixman_region_overlap_t pixman_region_contains_rectangle (const pixman_region16_t *region,
|
jpayne@69
|
582 const pixman_box16_t *prect);
|
jpayne@69
|
583
|
jpayne@69
|
584 PIXMAN_API
|
jpayne@69
|
585 pixman_bool_t pixman_region_empty (const pixman_region16_t *region);
|
jpayne@69
|
586
|
jpayne@69
|
587 PIXMAN_API
|
jpayne@69
|
588 pixman_bool_t pixman_region_not_empty (const pixman_region16_t *region);
|
jpayne@69
|
589
|
jpayne@69
|
590 PIXMAN_API
|
jpayne@69
|
591 pixman_box16_t * pixman_region_extents (const pixman_region16_t *region);
|
|