gradient-crash-test.c revision 1b18d63a
11b18d63aSmrg#include <stdio.h> 21b18d63aSmrg#include <stdlib.h> 31b18d63aSmrg#include "pixman.h" 41b18d63aSmrg 51b18d63aSmrgint 61b18d63aSmrgmain (int argc, char **argv) 71b18d63aSmrg{ 81b18d63aSmrg#define WIDTH 400 91b18d63aSmrg#define HEIGHT 200 101b18d63aSmrg 111b18d63aSmrg uint32_t *dest = malloc (WIDTH * HEIGHT * 4); 121b18d63aSmrg pixman_image_t *src_img; 131b18d63aSmrg pixman_image_t *dest_img; 141b18d63aSmrg int i, j; 151b18d63aSmrg 161b18d63aSmrg pixman_gradient_stop_t onestop[1] = 171b18d63aSmrg { 181b18d63aSmrg { pixman_int_to_fixed (1), { 0xffff, 0xeeee, 0xeeee, 0xeeee } }, 191b18d63aSmrg }; 201b18d63aSmrg 211b18d63aSmrg pixman_gradient_stop_t subsetstops[2] = 221b18d63aSmrg { 231b18d63aSmrg { pixman_int_to_fixed (1), { 0xffff, 0xeeee, 0xeeee, 0xeeee } }, 241b18d63aSmrg { pixman_int_to_fixed (1), { 0xffff, 0xeeee, 0xeeee, 0xeeee } }, 251b18d63aSmrg }; 261b18d63aSmrg 271b18d63aSmrg pixman_gradient_stop_t stops01[2] = 281b18d63aSmrg { 291b18d63aSmrg { pixman_int_to_fixed (0), { 0xffff, 0xeeee, 0xeeee, 0xeeee } }, 301b18d63aSmrg { pixman_int_to_fixed (1), { 0xffff, 0x1111, 0x1111, 0x1111 } } 311b18d63aSmrg }; 321b18d63aSmrg 331b18d63aSmrg pixman_point_fixed_t p1 = { pixman_double_to_fixed (0), 0 }; 341b18d63aSmrg pixman_point_fixed_t p2 = { pixman_double_to_fixed (WIDTH / 8.), 351b18d63aSmrg pixman_int_to_fixed (0) }; 361b18d63aSmrg 371b18d63aSmrg#if 0 381b18d63aSmrg pixman_transform_t trans = { 391b18d63aSmrg { { pixman_double_to_fixed (2), pixman_double_to_fixed (0.5), pixman_double_to_fixed (-100), }, 401b18d63aSmrg { pixman_double_to_fixed (0), pixman_double_to_fixed (3), pixman_double_to_fixed (0), }, 411b18d63aSmrg { pixman_double_to_fixed (0), pixman_double_to_fixed (0.000), pixman_double_to_fixed (1.0) } 421b18d63aSmrg } 431b18d63aSmrg }; 441b18d63aSmrg#else 451b18d63aSmrg pixman_transform_t trans = { 461b18d63aSmrg { { pixman_fixed_1, 0, 0 }, 471b18d63aSmrg { 0, pixman_fixed_1, 0 }, 481b18d63aSmrg { 0, 0, pixman_fixed_1 } } 491b18d63aSmrg }; 501b18d63aSmrg#endif 511b18d63aSmrg 521b18d63aSmrg pixman_point_fixed_t c_inner; 531b18d63aSmrg pixman_point_fixed_t c_outer; 541b18d63aSmrg pixman_fixed_t r_inner; 551b18d63aSmrg pixman_fixed_t r_outer; 561b18d63aSmrg 571b18d63aSmrg for (i = 0; i < WIDTH * HEIGHT; ++i) 581b18d63aSmrg dest[i] = 0x4f00004f; /* pale blue */ 591b18d63aSmrg 601b18d63aSmrg dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, 611b18d63aSmrg WIDTH, HEIGHT, 621b18d63aSmrg dest, 631b18d63aSmrg WIDTH * 4); 641b18d63aSmrg 651b18d63aSmrg c_inner.x = pixman_double_to_fixed (50.0); 661b18d63aSmrg c_inner.y = pixman_double_to_fixed (50.0); 671b18d63aSmrg c_outer.x = pixman_double_to_fixed (50.0); 681b18d63aSmrg c_outer.y = pixman_double_to_fixed (50.0); 691b18d63aSmrg r_inner = 0; 701b18d63aSmrg r_outer = pixman_double_to_fixed (50.0); 711b18d63aSmrg 721b18d63aSmrg for (i = 0; i < 3; ++i) 731b18d63aSmrg { 741b18d63aSmrg pixman_gradient_stop_t *stops; 751b18d63aSmrg int num_stops; 761b18d63aSmrg if (i == 0) 771b18d63aSmrg { 781b18d63aSmrg stops = onestop; 791b18d63aSmrg num_stops = sizeof(onestop) / sizeof(onestop[0]); 801b18d63aSmrg } 811b18d63aSmrg else if (i == 1) 821b18d63aSmrg { 831b18d63aSmrg stops = subsetstops; 841b18d63aSmrg num_stops = sizeof(subsetstops) / sizeof(subsetstops[0]); 851b18d63aSmrg } 861b18d63aSmrg else 871b18d63aSmrg { 881b18d63aSmrg stops = stops01; 891b18d63aSmrg num_stops = sizeof(stops01) / sizeof(stops01[0]); 901b18d63aSmrg } 911b18d63aSmrg 921b18d63aSmrg for (j = 0; j < 3; ++j) 931b18d63aSmrg { 941b18d63aSmrg if (j == 0) 951b18d63aSmrg src_img = pixman_image_create_conical_gradient (&c_inner, r_inner, 961b18d63aSmrg stops, num_stops); 971b18d63aSmrg else if (j == 1) 981b18d63aSmrg src_img = pixman_image_create_radial_gradient (&c_inner, &c_outer, 991b18d63aSmrg r_inner, r_outer, 1001b18d63aSmrg stops, num_stops); 1011b18d63aSmrg else 1021b18d63aSmrg src_img = pixman_image_create_linear_gradient (&p1, &p2, 1031b18d63aSmrg stops, num_stops); 1041b18d63aSmrg pixman_image_set_transform (src_img, &trans); 1051b18d63aSmrg pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NONE); 1061b18d63aSmrg pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dest_img, 1071b18d63aSmrg 0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT); 1081b18d63aSmrg 1091b18d63aSmrg } 1101b18d63aSmrg pixman_image_unref (src_img); 1111b18d63aSmrg } 1121b18d63aSmrg 1131b18d63aSmrg pixman_image_unref (dest_img); 1141b18d63aSmrg free (dest); 1151b18d63aSmrg 1161b18d63aSmrg return 0; 1171b18d63aSmrg} 118