diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2011-10-12 04:49:27 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2012-03-24 16:29:36 -0400 |
commit | e1b8969e78eecf9abaaf2b317c10fddf64b02799 (patch) | |
tree | d879e639891bdde0972347a7e898d6878e45fa9d /demos | |
parent | 41863fbabb6dd08871aed47beba5d08ae2ae3cf6 (diff) | |
download | pixman-e1b8969e78eecf9abaaf2b317c10fddf64b02799.tar.gz |
demos: Add checkerboard demo
This is a simple demo that displays a checkboard with a projective
transformation.
Diffstat (limited to 'demos')
-rw-r--r-- | demos/Makefile.am | 5 | ||||
-rw-r--r-- | demos/checkerboard.c | 71 |
2 files changed, 75 insertions, 1 deletions
diff --git a/demos/Makefile.am b/demos/Makefile.am index 070c2d7..6049090 100644 --- a/demos/Makefile.am +++ b/demos/Makefile.am @@ -18,7 +18,9 @@ DEMOS = \ screen-test \ convolution-test \ trap-test \ - tri-test + tri-test \ + quad2quad \ + checkerboard gradient_test_SOURCES = gradient-test.c $(GTK_UTILS) alpha_test_SOURCES = alpha-test.c $(GTK_UTILS) @@ -30,6 +32,7 @@ screen_test_SOURCES = screen-test.c $(GTK_UTILS) convolution_test_SOURCES = convolution-test.c $(GTK_UTILS) radial_test_SOURCES = radial-test.c ../test/utils.c ../test/utils.h $(GTK_UTILS) tri_test_SOURCES = tri-test.c ../test/utils.c ../test/utils.h $(GTK_UTILS) +checkerboard_SOURCES = checkerboard.c $(GTK_UTILS) noinst_PROGRAMS = $(DEMOS) diff --git a/demos/checkerboard.c b/demos/checkerboard.c new file mode 100644 index 0000000..449fedb --- /dev/null +++ b/demos/checkerboard.c @@ -0,0 +1,71 @@ +#include <stdio.h> +#include <stdlib.h> +#include "pixman.h" +#include "gtk-utils.h" + +int +main (int argc, char **argv) +{ +#define WIDTH 400 +#define HEIGHT 400 +#define TILE_SIZE 25 + + pixman_image_t *checkerboard; + pixman_image_t *destination; +#define D2F(d) (pixman_double_to_fixed(d)) + pixman_transform_t trans = { { + { D2F (-1.96830), D2F (-1.82250), D2F (512.12250)}, + { D2F (0.00000), D2F (-7.29000), D2F (1458.00000)}, + { D2F (0.00000), D2F (-0.00911), D2F (0.59231)}, + }}; + int i, j; + + checkerboard = pixman_image_create_bits (PIXMAN_a8r8g8b8, + WIDTH, HEIGHT, + NULL, 0); + + destination = pixman_image_create_bits (PIXMAN_a8r8g8b8, + WIDTH, HEIGHT, + NULL, 0); + + for (i = 0; i < HEIGHT / TILE_SIZE; ++i) + { + for (j = 0; j < WIDTH / TILE_SIZE; ++j) + { + double u = (double)(j + 1) / (WIDTH / TILE_SIZE); + double v = (double)(i + 1) / (HEIGHT / TILE_SIZE); + pixman_color_t black = { 0, 0, 0, 0xffff }; + pixman_color_t white = { + v * 0xffff, + u * 0xffff, + (1 - (double)u) * 0xffff, + 0xffff }; + pixman_color_t *c; + pixman_image_t *fill; + + if ((j & 1) != (i & 1)) + c = &black; + else + c = &white; + + fill = pixman_image_create_solid_fill (c); + + pixman_image_composite (PIXMAN_OP_SRC, fill, NULL, checkerboard, + 0, 0, 0, 0, j * TILE_SIZE, i * TILE_SIZE, + TILE_SIZE, TILE_SIZE); + } + } + + pixman_image_set_transform (checkerboard, &trans); + pixman_image_set_filter (checkerboard, PIXMAN_FILTER_BEST, NULL, 0); + pixman_image_set_repeat (checkerboard, PIXMAN_REPEAT_NONE); + + pixman_image_composite (PIXMAN_OP_SRC, + checkerboard, NULL, destination, + 0, 0, 0, 0, 0, 0, + WIDTH, HEIGHT); + + show_image (destination); + + return 0; +} |