From 840c8745518b92303d40f6834e9c616587242231 Mon Sep 17 00:00:00 2001 From: marha Date: Mon, 17 Dec 2012 11:51:13 +0100 Subject: libXft pixman mesa git update 17 dec 2012 libXft: 835cd2a6cb4aa8f89e6e7dead66483643a6e7ee8 pixman: 526dc06e5694172abf979c03a5cf530207fe2d27 mesa: 1358f3a905448f6fb546aba951e317f743a83c76 --- pixman/demos/conical-test.c | 38 ++---------------------- pixman/demos/radial-test.c | 12 +++++++- pixman/pixman/pixman-radial-gradient.c | 6 ++-- pixman/test/utils.c | 54 ++++++++++++++++++++++++++++++++++ pixman/test/utils.h | 5 ++++ 5 files changed, 75 insertions(+), 40 deletions(-) (limited to 'pixman') diff --git a/pixman/demos/conical-test.c b/pixman/demos/conical-test.c index 1e08e42f7..6b3243016 100644 --- a/pixman/demos/conical-test.c +++ b/pixman/demos/conical-test.c @@ -46,40 +46,6 @@ create_conical (int index) &c, pixman_double_to_fixed (angle), stops, NUM_STOPS); } -#define CHECK_SIZE 25 - -static void -fill_checkerboard (pixman_image_t *image, int width, int height) -{ -#define C1 0xaaaa -#define C2 0x8888 - - pixman_color_t check1 = { C1, C1, C1, 0xffff }; - pixman_color_t check2 = { C2, C2, C2, 0xffff }; - pixman_image_t *c1, *c2; - int i, j; - - c1 = pixman_image_create_solid_fill (&check1); - c2 = pixman_image_create_solid_fill (&check2); - - for (j = 0; j < height; j += CHECK_SIZE) - { - for (i = 0; i < width; i += CHECK_SIZE) - { - pixman_image_t *src; - - if ((((i / CHECK_SIZE) ^ (j / CHECK_SIZE)) & 1) == 0) - src = c1; - else - src = c2; - - pixman_image_composite32 (PIXMAN_OP_SRC, src, NULL, image, - 0, 0, 0, 0, i, j, - CHECK_SIZE, CHECK_SIZE); - } - } -} - int main (int argc, char **argv) { @@ -92,8 +58,8 @@ main (int argc, char **argv) dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, NULL, 0); - - fill_checkerboard (dest_img, WIDTH, HEIGHT); + + draw_checkerboard (dest_img, 25, 0xffaaaaaa, 0xff888888); pixman_transform_init_identity (&transform); diff --git a/pixman/demos/radial-test.c b/pixman/demos/radial-test.c index e64f3577f..08a367cd2 100644 --- a/pixman/demos/radial-test.c +++ b/pixman/demos/radial-test.c @@ -1,7 +1,7 @@ #include "../test/utils.h" #include "gtk-utils.h" -#define NUM_GRADIENTS 7 +#define NUM_GRADIENTS 9 #define NUM_STOPS 3 #define NUM_REPEAT 4 #define SIZE 128 @@ -28,6 +28,9 @@ * centers (0, 0) and (1, 0), but with different radiuses. From left * to right: * + * - Degenerate start circle completely inside the end circle + * 0.00 -> 1.75; dr = 1.75 > 0; a = 1 - 1.75^2 < 0 + * * - Small start circle completely inside the end circle * 0.25 -> 1.75; dr = 1.5 > 0; a = 1 - 1.50^2 < 0 * @@ -49,15 +52,20 @@ * - Small end circle completely inside the start circle * 1.75 -> 0.25; dr = -1.5 > 0; a = 1 - 1.50^2 < 0 * + * - Degenerate end circle completely inside the start circle + * 0.00 -> 1.75; dr = 1.75 > 0; a = 1 - 1.75^2 < 0 + * */ const static double radiuses[NUM_GRADIENTS] = { + 0.00, 0.25, 0.50, 0.50, 1.00, 1.00, 1.50, + 1.75, 1.75 }; @@ -139,6 +147,8 @@ main (int argc, char **argv) WIDTH, HEIGHT, NULL, 0); + draw_checkerboard (dest_img, 25, 0xffaaaaaa, 0xffbbbbbb); + pixman_transform_init_identity (&transform); /* diff --git a/pixman/pixman/pixman-radial-gradient.c b/pixman/pixman/pixman-radial-gradient.c index 8d562468d..6a217963d 100644 --- a/pixman/pixman/pixman-radial-gradient.c +++ b/pixman/pixman/pixman-radial-gradient.c @@ -109,7 +109,7 @@ radial_compute_color (double a, } else { - if (t * dr > mindr) + if (t * dr >= mindr) return _pixman_gradient_walker_pixel (walker, t); } @@ -145,9 +145,9 @@ radial_compute_color (double a, } else { - if (t0 * dr > mindr) + if (t0 * dr >= mindr) return _pixman_gradient_walker_pixel (walker, t0); - else if (t1 * dr > mindr) + else if (t1 * dr >= mindr) return _pixman_gradient_walker_pixel (walker, t1); } } diff --git a/pixman/test/utils.c b/pixman/test/utils.c index 66c8dcb89..08eaabbf6 100644 --- a/pixman/test/utils.c +++ b/pixman/test/utils.c @@ -548,6 +548,60 @@ write_png (pixman_image_t *image, const char *filename) #endif +static void +color8_to_color16 (uint32_t color8, pixman_color_t *color16) +{ + color16->alpha = ((color8 & 0xff000000) >> 24); + color16->red = ((color8 & 0x00ff0000) >> 16); + color16->green = ((color8 & 0x0000ff00) >> 8); + color16->blue = ((color8 & 0x000000ff) >> 0); + + color16->alpha |= color16->alpha << 8; + color16->red |= color16->red << 8; + color16->blue |= color16->blue << 8; + color16->green |= color16->green << 8; +} + +void +draw_checkerboard (pixman_image_t *image, + int check_size, + uint32_t color1, uint32_t color2) +{ + pixman_color_t check1, check2; + pixman_image_t *c1, *c2; + int n_checks_x, n_checks_y; + int i, j; + + color8_to_color16 (color1, &check1); + color8_to_color16 (color2, &check2); + + c1 = pixman_image_create_solid_fill (&check1); + c2 = pixman_image_create_solid_fill (&check2); + + n_checks_x = ( + pixman_image_get_width (image) + check_size - 1) / check_size; + n_checks_y = ( + pixman_image_get_height (image) + check_size - 1) / check_size; + + for (j = 0; j < n_checks_y; j++) + { + for (i = 0; i < n_checks_x; i++) + { + pixman_image_t *src; + + if (((i ^ j) & 1)) + src = c1; + else + src = c2; + + pixman_image_composite32 (PIXMAN_OP_SRC, src, NULL, image, + 0, 0, 0, 0, + i * check_size, j * check_size, + check_size, check_size); + } + } +} + /* * A function, which can be used as a core part of the test programs, * intended to detect various problems with the help of fuzzing input diff --git a/pixman/test/utils.h b/pixman/test/utils.h index 78cf0d16d..45b457ead 100644 --- a/pixman/test/utils.h +++ b/pixman/test/utils.h @@ -124,6 +124,11 @@ a8r8g8b8_to_rgba_np (uint32_t *dst, uint32_t *src, int n_pixels); pixman_bool_t write_png (pixman_image_t *image, const char *filename); +void +draw_checkerboard (pixman_image_t *image, + int check_size, + uint32_t color1, uint32_t color2); + /* A pair of macros which can help to detect corruption of * floating point registers after a function call. This may * happen if _mm_empty() call is forgotten in MMX/SSE2 fast -- cgit v1.2.3