From 2dd4ff32064c3c564e0902ae07330272e6676c22 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 2 Nov 2012 14:48:40 +0000 Subject: [PATCH] test: Add stroke-clipped Exercise a bug in the determine of clip-bounds when stroking, as reported by ed44. Signed-off-by: Chris Wilson --- test/Makefile.sources | 1 + test/reference/stroke-clipped.ref.png | Bin 0 -> 5886 bytes test/stroke-clipped.c | 54 ++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 test/reference/stroke-clipped.ref.png create mode 100644 test/stroke-clipped.c diff --git a/test/Makefile.sources b/test/Makefile.sources index fdf262c36..7dc8b889d 100644 --- a/test/Makefile.sources +++ b/test/Makefile.sources @@ -290,6 +290,7 @@ test_sources = \ scale-source-surface-paint.c \ scaled-font-zero-matrix.c \ stroke-ctm-caps.c \ + stroke-clipped.c \ stroke-image.c \ stroke-open-box.c \ select-font-face.c \ diff --git a/test/reference/stroke-clipped.ref.png b/test/reference/stroke-clipped.ref.png new file mode 100644 index 0000000000000000000000000000000000000000..3240cfe51c4a50f69cf7d37b5dedf57ad4761bb9 GIT binary patch literal 5886 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 Z+UHa>f1sP~i50YQR28)pD&#D~{tGPnjvN30 literal 0 HcmV?d00001 diff --git a/test/stroke-clipped.c b/test/stroke-clipped.c new file mode 100644 index 000000000..4b8079480 --- /dev/null +++ b/test/stroke-clipped.c @@ -0,0 +1,54 @@ +/* + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "cairo-test.h" + +#define SIZE 200 + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + int row; + + cairo_set_source_rgb(cr, 1, 1, 1); + cairo_paint(cr); + + cairo_set_source_rgb(cr, 1, 0, 0); + for(row = 0; row < SIZE; row++) { + cairo_rectangle(cr, 0, row, SIZE, 1); + cairo_clip(cr); + + cairo_arc(cr, SIZE/2, SIZE/2, SIZE/2-8, 0, 2*M_PI); + cairo_stroke(cr); + + cairo_reset_clip(cr); + } + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (stroke_clipped, + "Check that the stroke is accurately drawn through smaller clips", + "stroke", /* keywords */ + NULL, /* requirements */ + SIZE, SIZE, + NULL, draw)