1#include <stdlib.h>
2#include "utils.h"
3
4static const pixman_op_t pdf_ops[] =
5{
6    PIXMAN_OP_MULTIPLY,
7    PIXMAN_OP_SCREEN,
8    PIXMAN_OP_OVERLAY,
9    PIXMAN_OP_DARKEN,
10    PIXMAN_OP_LIGHTEN,
11    PIXMAN_OP_COLOR_DODGE,
12    PIXMAN_OP_COLOR_BURN,
13    PIXMAN_OP_HARD_LIGHT,
14    PIXMAN_OP_SOFT_LIGHT,
15    PIXMAN_OP_DIFFERENCE,
16    PIXMAN_OP_EXCLUSION,
17    PIXMAN_OP_HSL_HUE,
18    PIXMAN_OP_HSL_SATURATION,
19    PIXMAN_OP_HSL_COLOR,
20    PIXMAN_OP_HSL_LUMINOSITY
21};
22
23static const uint32_t pixels[] =
24{
25    0x00808080,
26    0x80123456,
27    0x00000000,
28    0xffffffff,
29    0x00ffffff,
30    0x80808080,
31    0x00123456,
32};
33
34int
35main ()
36{
37    int o, s, m, d;
38
39    enable_divbyzero_exceptions();
40
41    for (o = 0; o < ARRAY_LENGTH (pdf_ops); ++o)
42    {
43	pixman_op_t op = pdf_ops[o];
44
45	for (s = 0; s < ARRAY_LENGTH (pixels); ++s)
46	{
47	    pixman_image_t *src;
48
49	    src = pixman_image_create_bits (
50		PIXMAN_a8r8g8b8, 1, 1, (uint32_t *)&(pixels[s]), 4);
51
52	    for (m = -1; m < ARRAY_LENGTH (pixels); ++m)
53	    {
54		pixman_image_t *msk = NULL;
55		if (m >= 0)
56		{
57		    msk = pixman_image_create_bits (
58			PIXMAN_a8r8g8b8, 1, 1, (uint32_t *)&(pixels[m]), 4);
59		}
60
61		for (d = 0; d < ARRAY_LENGTH (pixels); ++d)
62		{
63		    pixman_image_t *dst;
64		    uint32_t dp = pixels[d];
65
66		    dst = pixman_image_create_bits (
67			PIXMAN_a8r8g8b8, 1, 1, &dp, 4);
68
69		    pixman_image_composite (op, src, msk, dst,
70					    0, 0, 0, 0, 0, 0, 1, 1);
71
72		    pixman_image_unref (dst);
73		}
74		if (msk)
75		    pixman_image_unref (msk);
76	    }
77
78	    pixman_image_unref (src);
79	}
80    }
81
82    return 0;
83}
84