aboutsummaryrefslogtreecommitdiff
path: root/pixman
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-12-17 12:16:30 +0100
committermarha <marha@users.sourceforge.net>2012-12-17 12:16:30 +0100
commitb3f7d4f6ce0d42d826f384223144936ba6797a10 (patch)
tree2f329beffff890b402625bff8547e243071c47bd /pixman
parentc648afe73ef43a15094508d2dd439e05738735bf (diff)
parent840c8745518b92303d40f6834e9c616587242231 (diff)
downloadvcxsrv-b3f7d4f6ce0d42d826f384223144936ba6797a10.tar.gz
vcxsrv-b3f7d4f6ce0d42d826f384223144936ba6797a10.tar.bz2
vcxsrv-b3f7d4f6ce0d42d826f384223144936ba6797a10.zip
Merge remote-tracking branch 'origin/released'
* origin/released: libXft pixman mesa git update 17 dec 2012 Conflicts: mesalib/src/mesa/drivers/dri/swrast/swrast.c
Diffstat (limited to 'pixman')
-rw-r--r--pixman/demos/conical-test.c38
-rw-r--r--pixman/demos/radial-test.c12
-rw-r--r--pixman/pixman/pixman-radial-gradient.c6
-rw-r--r--pixman/test/utils.c54
-rw-r--r--pixman/test/utils.h5
5 files changed, 75 insertions, 40 deletions
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