1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <stdlib.h>
2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "utils.h"
3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic const pixman_op_t pdf_ops[] =
5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_MULTIPLY,
7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_SCREEN,
8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_OVERLAY,
9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_DARKEN,
10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_LIGHTEN,
11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_COLOR_DODGE,
12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_COLOR_BURN,
13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_HARD_LIGHT,
14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_SOFT_LIGHT,
15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_DIFFERENCE,
16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_EXCLUSION,
17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_HSL_HUE,
18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_HSL_SATURATION,
19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_HSL_COLOR,
20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PIXMAN_OP_HSL_LUMINOSITY
21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org};
22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic const uint32_t pixels[] =
24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    0x00808080,
26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    0x80123456,
27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    0x00000000,
28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    0xffffffff,
29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    0x00ffffff,
30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    0x80808080,
31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    0x00123456,
32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org};
33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgint
35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgmain ()
36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org{
37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    int o, s, m, d;
38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    enable_divbyzero_exceptions();
40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    for (o = 0; o < ARRAY_LENGTH (pdf_ops); ++o)
42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    {
43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	pixman_op_t op = pdf_ops[o];
44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	for (s = 0; s < ARRAY_LENGTH (pixels); ++s)
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	{
47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	    pixman_image_t *src;
48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	    src = pixman_image_create_bits (
50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		PIXMAN_a8r8g8b8, 1, 1, (uint32_t *)&(pixels[s]), 4);
51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	    for (m = -1; m < ARRAY_LENGTH (pixels); ++m)
53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	    {
54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		pixman_image_t *msk = NULL;
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		if (m >= 0)
56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		{
57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		    msk = pixman_image_create_bits (
58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org			PIXMAN_a8r8g8b8, 1, 1, (uint32_t *)&(pixels[m]), 4);
59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		}
60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		for (d = 0; d < ARRAY_LENGTH (pixels); ++d)
62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		{
63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		    pixman_image_t *dst;
64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		    uint32_t dp = pixels[d];
65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		    dst = pixman_image_create_bits (
67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org			PIXMAN_a8r8g8b8, 1, 1, &dp, 4);
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		    pixman_image_composite (op, src, msk, dst,
70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org					    0, 0, 0, 0, 0, 0, 1, 1);
71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		    pixman_image_unref (dst);
73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		}
74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		if (msk)
75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org		    pixman_image_unref (msk);
76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	    }
77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	    pixman_image_unref (src);
79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org	}
80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    }
81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    return 0;
83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}
84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org