From a6dfdeec82ec34d88276fd0bb0ddcc94405d89f3 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 3 Sep 2009 00:59:21 +0100 Subject: [PATCH] [test] Add clip-disjoint Soeren found another bug (thanks Soeren!) in the clipping code - as reproduced by this test case. --- test/Makefile.am | 2 + test/Makefile.sources | 1 + test/clip-disjoint.c | 90 ++++++++++++++++++++++++++++++++ test/clip-disjoint.ref.png | Bin 0 -> 5520 bytes test/clip-disjoint.xlib.ref.png | Bin 0 -> 5395 bytes 5 files changed, 93 insertions(+) create mode 100644 test/clip-disjoint.c create mode 100644 test/clip-disjoint.ref.png create mode 100644 test/clip-disjoint.xlib.ref.png diff --git a/test/Makefile.am b/test/Makefile.am index aaa520d54..6b084e6e8 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -161,6 +161,8 @@ REFERENCE_IMAGES = \ clear.svg12.argb32.xfail.png \ clear.svg12.rgb24.xfail.png \ clip-all.ref.png \ + clip-disjoint.ref.png \ + clip-disjoint.xlib.ref.png \ clip-empty.ref.png \ clip-fill.ref.png \ clip-fill.ps.xfail.png \ diff --git a/test/Makefile.sources b/test/Makefile.sources index 3dbdd5518..aec133f3a 100644 --- a/test/Makefile.sources +++ b/test/Makefile.sources @@ -14,6 +14,7 @@ test_sources = \ caps-sub-paths.c \ clear.c \ clip-all.c \ + clip-disjoint.c \ clip-empty.c \ clip-fill.c \ clip-fill-rule.c \ diff --git a/test/clip-disjoint.c b/test/clip-disjoint.c new file mode 100644 index 000000000..797898ea1 --- /dev/null +++ b/test/clip-disjoint.c @@ -0,0 +1,90 @@ +/* + * Copyright © 2008 Red Hat, Inc. + * + * 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 + * Red Hat, Inc. not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Red Hat, Inc. makes no representations about the + * suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * RED HAT, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL RED HAT, INC. 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: Soren Sandmann + */ + +#include "cairo-test.h" + +#define WIDTH 300 +#define HEIGHT 300 + +typedef struct { + double x, y; +} point_t; + +static void +paint_curve (cairo_t *cr) +{ + const point_t points[] = { + { 100, 320 }, { 110, -80 }, + { 180, 60 }, { 300, 170 }, + { 300, -40 } + }; + unsigned i; + + cairo_set_line_width (cr, 2); + cairo_move_to (cr, points[0].x, points[0].y); + + for (i = 1; i < sizeof (points) / sizeof (points[0]) - 2; i += 3) { + cairo_curve_to (cr, + points[i].x, points[i].y, + points[i + 1].x, points[i + 1].y, + points[i + 2].x, points[i + 2].y); + } + cairo_set_line_width (cr, 5); + cairo_stroke (cr); +} + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + /* Fill window with light blue */ + cairo_set_source_rgba (cr, 0.8, 0.8, 1.9, 1.0); + cairo_paint (cr); + + /* Paint curve in green */ + cairo_set_source_rgba (cr, 0.6, 0.8, 0.6, 1.0); + paint_curve (cr); + + /* Make clip region */ + cairo_rectangle (cr, 228, 131, 50, 13); + cairo_rectangle (cr, 20, 99, 200, 75); + cairo_clip_preserve (cr); + + /* Fill clip region with red */ + cairo_set_source_rgba (cr, 1.0, 0.5, 0.5, 0.8); + cairo_fill (cr); + + /* Paint curve again, this time in blue */ + cairo_set_source_rgba (cr, 0, 0, 1.0, 1.0); + paint_curve (cr); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (clip_disjoint, + "Tests stroking through two disjoint clips.", + "clip, stroke", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw) diff --git a/test/clip-disjoint.ref.png b/test/clip-disjoint.ref.png new file mode 100644 index 0000000000000000000000000000000000000000..131e0e58032830b06f612cfa0e41eca0535d5876 GIT binary patch literal 5520 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 DI&b<{ literal 0 HcmV?d00001