From 2621a323a0ccfe33ff42ed17536db0dc89473a9f Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 16 Jan 2008 23:24:41 +0000 Subject: [PATCH] [test/dash-curve] Add a new test case for dashes along splines. Modify the dash-state test case and use curves instead of lines - exercises _cairo_stroker_curve_to_dashed() and degenerate splines. --- test/.gitignore | 1 + test/Makefile.am | 2 ++ test/dash-curve-ref.png | Bin 0 -> 39642 bytes test/dash-curve.c | 74 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+) create mode 100644 test/dash-curve-ref.png create mode 100644 test/dash-curve.c diff --git a/test/.gitignore b/test/.gitignore index 5665cbed5..2aaf613be 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -32,6 +32,7 @@ create-for-stream.svg create-from-png create-from-png-stream dash-caps-joins +dash-curve dash-no-dash dash-offset-negative dash-scale diff --git a/test/Makefile.am b/test/Makefile.am index 805ac1620..3c63ebc84 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -25,6 +25,7 @@ create-for-stream$(EXEEXT) \ create-from-png$(EXEEXT) \ create-from-png-stream$(EXEEXT) \ dash-caps-joins$(EXEEXT) \ +dash-curve$(EXEEXT) \ dash-no-dash$(EXEEXT) \ dash-offset-negative$(EXEEXT) \ dash-scale$(EXEEXT) \ @@ -265,6 +266,7 @@ REFERENCE_IMAGES = \ dash-caps-joins-ps-rgb24-ref.png \ dash-caps-joins-quartz-ref.png \ dash-caps-joins-ref.png \ + dash-curve-ref.png \ dash-no-dash-ref.png \ dash-offset-negative-ref.png \ dash-scale-ps-argb32-ref.png \ diff --git a/test/dash-curve-ref.png b/test/dash-curve-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..542b2d827b9fedad788a763e70857670e7d489aa GIT binary patch literal 39642 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 literal 0 HcmV?d00001 diff --git a/test/dash-curve.c b/test/dash-curve.c new file mode 100644 index 000000000..48f5c12cb --- /dev/null +++ b/test/dash-curve.c @@ -0,0 +1,74 @@ +/* + * Copyright © 2007 Jeff Smith + * + * 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 + * Jeff Smith not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. Jeff Smith makes no representations about the + * suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * JEFF SMITH DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL JEFF SMITH 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: Jeff Smith + */ + +#include "cairo-test.h" + +static cairo_test_draw_function_t draw; + +cairo_test_t test = { + "dash-curve", + "Tries to explore the state space of the dashing code along curves", + 25*60, 4*60, + draw +}; + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + double dashes[2] = {20, 20}; + int a=0, b=0, c=0; + + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_paint (cr); + + for (a=0; a<4; a++) + for (b=0; b<5; b++) + for (c=0; c<5; c++) { + cairo_move_to (cr, ((b*5)+c)*60+10, a*60+10); + cairo_rel_curve_to (cr, + 0, b*10, + 0, b*10, + c*10, b*10); + + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_set_line_width (cr, 8); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND); + cairo_set_dash (cr, dashes, 2, a*10); + cairo_stroke_preserve (cr); + + cairo_set_source_rgb (cr, 0, 0.5, 1); + cairo_set_line_width (cr, 2); + cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT); + cairo_set_dash (cr, 0, 0, 0); + cairo_stroke (cr); + } + return CAIRO_TEST_SUCCESS; +} + +int +main (void) +{ + return cairo_test (&test); +}