annotate CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/pixman-1/pixman.h @ 69:33d812a61356

planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author jpayne
date Tue, 18 Mar 2025 17:55:14 -0400
parents
children
rev   line source
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);