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