16ba797d6Smrg#include <stdio.h> 26ba797d6Smrg#include <stdlib.h> 36ba797d6Smrg#include "pixman.h" 46ba797d6Smrg#include "gtk-utils.h" 56ba797d6Smrg 66ba797d6Smrgint 76ba797d6Smrgmain (int argc, char **argv) 86ba797d6Smrg{ 96ba797d6Smrg#define WIDTH 400 106ba797d6Smrg#define HEIGHT 200 116ba797d6Smrg 126ba797d6Smrg uint32_t *alpha = malloc (WIDTH * HEIGHT * 4); 136ba797d6Smrg uint32_t *dest = malloc (WIDTH * HEIGHT * 4); 146ba797d6Smrg uint32_t *src = malloc (WIDTH * HEIGHT * 4); 156ba797d6Smrg pixman_image_t *grad_img; 166ba797d6Smrg pixman_image_t *alpha_img; 176ba797d6Smrg pixman_image_t *dest_img; 186ba797d6Smrg pixman_image_t *src_img; 196ba797d6Smrg int i; 206ba797d6Smrg pixman_gradient_stop_t stops[2] = 216ba797d6Smrg { 226ba797d6Smrg { pixman_int_to_fixed (0), { 0x0000, 0x0000, 0x0000, 0x0000 } }, 236ba797d6Smrg { pixman_int_to_fixed (1), { 0xffff, 0x0000, 0x1111, 0xffff } } 246ba797d6Smrg }; 256ba797d6Smrg pixman_point_fixed_t p1 = { pixman_double_to_fixed (0), 0 }; 266ba797d6Smrg pixman_point_fixed_t p2 = { pixman_double_to_fixed (WIDTH), 276ba797d6Smrg pixman_int_to_fixed (0) }; 286ba797d6Smrg#if 0 296ba797d6Smrg pixman_transform_t trans = { 306ba797d6Smrg { { pixman_double_to_fixed (2), pixman_double_to_fixed (0.5), pixman_double_to_fixed (-100), }, 316ba797d6Smrg { pixman_double_to_fixed (0), pixman_double_to_fixed (3), pixman_double_to_fixed (0), }, 326ba797d6Smrg { pixman_double_to_fixed (0), pixman_double_to_fixed (0.000), pixman_double_to_fixed (1.0) } 336ba797d6Smrg } 346ba797d6Smrg }; 356ba797d6Smrg#else 366ba797d6Smrg pixman_transform_t trans = { 376ba797d6Smrg { { pixman_fixed_1, 0, 0 }, 386ba797d6Smrg { 0, pixman_fixed_1, 0 }, 396ba797d6Smrg { 0, 0, pixman_fixed_1 } } 406ba797d6Smrg }; 416ba797d6Smrg#endif 426ba797d6Smrg 436ba797d6Smrg#if 0 446ba797d6Smrg pixman_point_fixed_t c_inner; 456ba797d6Smrg pixman_point_fixed_t c_outer; 466ba797d6Smrg pixman_fixed_t r_inner; 476ba797d6Smrg pixman_fixed_t r_outer; 486ba797d6Smrg#endif 496ba797d6Smrg 506ba797d6Smrg for (i = 0; i < WIDTH * HEIGHT; ++i) 516ba797d6Smrg alpha[i] = 0x4f00004f; /* pale blue */ 526ba797d6Smrg 536ba797d6Smrg alpha_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, 546ba797d6Smrg WIDTH, HEIGHT, 556ba797d6Smrg alpha, 566ba797d6Smrg WIDTH * 4); 576ba797d6Smrg 586ba797d6Smrg for (i = 0; i < WIDTH * HEIGHT; ++i) 596ba797d6Smrg dest[i] = 0xffffff00; /* yellow */ 606ba797d6Smrg 616ba797d6Smrg dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, 626ba797d6Smrg WIDTH, HEIGHT, 636ba797d6Smrg dest, 646ba797d6Smrg WIDTH * 4); 656ba797d6Smrg 666ba797d6Smrg for (i = 0; i < WIDTH * HEIGHT; ++i) 676ba797d6Smrg src[i] = 0xffff0000; 686ba797d6Smrg 696ba797d6Smrg src_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, 706ba797d6Smrg WIDTH, HEIGHT, 716ba797d6Smrg src, 726ba797d6Smrg WIDTH * 4); 736ba797d6Smrg 746ba797d6Smrg#if 0 756ba797d6Smrg c_inner.x = pixman_double_to_fixed (50.0); 766ba797d6Smrg c_inner.y = pixman_double_to_fixed (50.0); 776ba797d6Smrg c_outer.x = pixman_double_to_fixed (50.0); 786ba797d6Smrg c_outer.y = pixman_double_to_fixed (50.0); 796ba797d6Smrg r_inner = 0; 806ba797d6Smrg r_outer = pixman_double_to_fixed (50.0); 816ba797d6Smrg 826ba797d6Smrg grad_img = pixman_image_create_conical_gradient (&c_inner, r_inner, 836ba797d6Smrg stops, 2); 846ba797d6Smrg#endif 856ba797d6Smrg#if 0 866ba797d6Smrg grad_img = pixman_image_create_conical_gradient (&c_inner, r_inner, 876ba797d6Smrg stops, 2); 886ba797d6Smrg grad_img = pixman_image_create_linear_gradient (&c_inner, &c_outer, 896ba797d6Smrg r_inner, r_outer, 906ba797d6Smrg stops, 2); 916ba797d6Smrg#endif 926ba797d6Smrg 936ba797d6Smrg grad_img = pixman_image_create_linear_gradient (&p1, &p2, 946ba797d6Smrg stops, 2); 956ba797d6Smrg 966ba797d6Smrg pixman_image_set_transform (grad_img, &trans); 976ba797d6Smrg pixman_image_set_repeat (grad_img, PIXMAN_REPEAT_PAD); 986ba797d6Smrg 996ba797d6Smrg pixman_image_composite (PIXMAN_OP_OVER, grad_img, NULL, alpha_img, 1006ba797d6Smrg 0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT); 1016ba797d6Smrg 1026ba797d6Smrg pixman_image_set_alpha_map (src_img, alpha_img, 10, 10); 1036ba797d6Smrg 1046ba797d6Smrg pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dest_img, 1056ba797d6Smrg 0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT); 1066ba797d6Smrg 1076ba797d6Smrg printf ("0, 0: %x\n", dest[0]); 1086ba797d6Smrg printf ("10, 10: %x\n", dest[10 * 10 + 10]); 1096ba797d6Smrg printf ("w, h: %x\n", dest[(HEIGHT - 1) * 100 + (WIDTH - 1)]); 1106ba797d6Smrg 1116ba797d6Smrg show_image (dest_img); 1126ba797d6Smrg 1136ba797d6Smrg pixman_image_unref (src_img); 1146ba797d6Smrg pixman_image_unref (grad_img); 1156ba797d6Smrg pixman_image_unref (alpha_img); 1166ba797d6Smrg free (dest); 1176ba797d6Smrg 1186ba797d6Smrg return 0; 1196ba797d6Smrg} 120