From 941d3693fac831c4ce8c61cbac7c77b566b97611 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 22 Sep 2009 14:43:45 +0100 Subject: [PATCH] [test] Exercise push-group-color. Hunting for a known bug in the xlib backend where it invalidly converts an argb32 source to rgb24. However, this does not appear to be that bug, but still a useful exercise nevertheless. --- test/Makefile.am | 2 + test/Makefile.sources | 1 + test/push-group-color.c | 141 +++++++++++++++++++++++++++++ test/push-group-color.ref.png | Bin 0 -> 2902 bytes test/push-group-color.xlib.ref.png | Bin 0 -> 2964 bytes 5 files changed, 144 insertions(+) create mode 100644 test/push-group-color.c create mode 100644 test/push-group-color.ref.png create mode 100644 test/push-group-color.xlib.ref.png diff --git a/test/Makefile.am b/test/Makefile.am index 2a01270b5..042805208 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -759,6 +759,8 @@ REFERENCE_IMAGES = \ push-group.rgb24.ref.png \ push-group.xlib.ref.png \ push-group.xlib.rgb24.ref.png \ + push-group-color.ref.png \ + push-group-color.xlib.ref.png \ quartz-surface-source.ps2.ref.png \ quartz-surface-source.ps3.ref.png \ quartz-surface-source.ref.png \ diff --git a/test/Makefile.sources b/test/Makefile.sources index 04a0110b8..4f3ecea1a 100644 --- a/test/Makefile.sources +++ b/test/Makefile.sources @@ -156,6 +156,7 @@ test_sources = \ pixman-rotate.c \ png.c \ push-group.c \ + push-group-color.c \ radial-gradient.c \ random-intersections-eo.c \ random-intersections-nonzero.c \ diff --git a/test/push-group-color.c b/test/push-group-color.c new file mode 100644 index 000000000..1bc5bca9b --- /dev/null +++ b/test/push-group-color.c @@ -0,0 +1,141 @@ +/* + * Copyright © 2005 Mozilla Corporation + * Copyright © 2009 Intel Corporation + * + * Permission to use, copy, modify, distribute, and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation, and that the name of + * Mozilla Corporation not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Mozilla Corporation makes no representations about the + * suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * MOZILLA CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL MOZILLA CORPORATION BE LIABLE FOR ANY SPECIAL, + * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR + * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Author: Vladimir Vukicevic + * Chris Wilson + */ + +#include "cairo-test.h" + +#define UNIT_SIZE 100 +#define PAD 5 +#define INNER_PAD 10 + +#define WIDTH (UNIT_SIZE + PAD) + PAD +#define HEIGHT (UNIT_SIZE + PAD) + PAD + +static cairo_pattern_t * +argb32_source (void) +{ + cairo_surface_t *surface; + cairo_pattern_t *pattern; + cairo_t *cr; + + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 16, 16); + cr = cairo_create (surface); + cairo_surface_destroy (surface); + + cairo_set_source_rgb (cr, 1, 0, 0); + cairo_rectangle (cr, 8, 0, 8, 8); + cairo_fill (cr); + + cairo_set_source_rgb (cr, 0, 1, 0); + cairo_rectangle (cr, 0, 8, 8, 8); + cairo_fill (cr); + + cairo_set_source_rgb (cr, 0, 0, 1); + cairo_rectangle (cr, 8, 8, 8, 8); + cairo_fill (cr); + + pattern = cairo_pattern_create_for_surface (cairo_get_target (cr)); + cairo_destroy (cr); + + return pattern; +} + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_pattern_t *gradient, *image; + + cairo_set_source_rgb (cr, 1,1,1); + cairo_paint (cr); + + cairo_translate (cr, PAD, PAD); + + /* clip to the unit size */ + cairo_rectangle (cr, 0, 0, + UNIT_SIZE, UNIT_SIZE); + cairo_clip (cr); + + cairo_rectangle (cr, 0, 0, + UNIT_SIZE, UNIT_SIZE); + cairo_set_source_rgba (cr, 0, 0, 0, 1); + cairo_set_line_width (cr, 2); + cairo_stroke (cr); + + /* start a group */ + cairo_push_group_with_content (cr, CAIRO_CONTENT_COLOR); + + /* draw a gradient background */ + cairo_save (cr); + cairo_translate (cr, INNER_PAD, INNER_PAD); + cairo_new_path (cr); + cairo_rectangle (cr, 0, 0, + UNIT_SIZE - (INNER_PAD*2), UNIT_SIZE - (INNER_PAD*2)); + gradient = cairo_pattern_create_linear (UNIT_SIZE - (INNER_PAD*2), 0, + UNIT_SIZE - (INNER_PAD*2), UNIT_SIZE - (INNER_PAD*2)); + cairo_pattern_add_color_stop_rgba (gradient, 0.0, 0.3, 0.3, 0.3, 1.0); + cairo_pattern_add_color_stop_rgba (gradient, 1.0, 1.0, 1.0, 1.0, 1.0); + cairo_set_source (cr, gradient); + cairo_pattern_destroy (gradient); + cairo_fill (cr); + cairo_restore (cr); + + /* draw diamond */ + cairo_move_to (cr, UNIT_SIZE / 2, 0); + cairo_line_to (cr, UNIT_SIZE , UNIT_SIZE / 2); + cairo_line_to (cr, UNIT_SIZE / 2, UNIT_SIZE); + cairo_line_to (cr, 0 , UNIT_SIZE / 2); + cairo_close_path (cr); + cairo_set_source_rgba (cr, 0, 0, 1, 1); + cairo_fill (cr); + + /* draw circle */ + cairo_arc (cr, + UNIT_SIZE / 2, UNIT_SIZE / 2, + UNIT_SIZE / 3.5, + 0, M_PI * 2); + cairo_set_source_rgba (cr, 1, 0, 0, 1); + cairo_fill (cr); + + /* and put the image on top */ + cairo_translate (cr, UNIT_SIZE/2 - 8, UNIT_SIZE/2 - 8); + image = argb32_source (); + cairo_set_source (cr, image); + cairo_pattern_destroy (image); + cairo_paint (cr); + + cairo_pop_group_to_source (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + cairo_paint (cr); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (push_group_color, + "Verify that cairo_push_group_with_content works.", + "group", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw) diff --git a/test/push-group-color.ref.png b/test/push-group-color.ref.png new file mode 100644 index 0000000000000000000000000000000000000000..c270bde9dd927a033ac9fb6c97d3058526dfdbfb GIT binary patch literal 2902 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 AzyJUM literal 0 HcmV?d00001 diff --git a/test/push-group-color.xlib.ref.png b/test/push-group-color.xlib.ref.png new file mode 100644 index 0000000000000000000000000000000000000000..e245e4dcfcb589f493cdf8d29b7d43eb1de5a557 GIT binary patch literal 2964 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