From 65a8a279430a08e6f28b1e0354e9f18fda1a0ad7 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 26 Feb 2008 14:14:38 +0000 Subject: [PATCH] [test] Add reflected-stroke to exercise stroking with a reflected ctm. Parts of the stroker depend upon whether we have in effect a reflection matrix (one whose determinant < 0). This test incopororates the same drawing under the a couple of reflections to exercise stroking under matrices with both positive and negative determinants. --- test/.gitignore | 1 + test/Makefile.am | 2 + test/reflected-stroke-ref.png | Bin 0 -> 4802 bytes test/reflected-stroke.c | 100 ++++++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+) create mode 100644 test/reflected-stroke-ref.png create mode 100644 test/reflected-stroke.c diff --git a/test/.gitignore b/test/.gitignore index ca44c944b..2e235a424 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -140,6 +140,7 @@ pthread-show-text rectangle-rounding-error rectilinear-miter-limit rectilinear-stroke +reflected-stroke rel-path rotate-image-surface-paint scale-down-source-surface-paint diff --git a/test/Makefile.am b/test/Makefile.am index c3e6bbf0c..96692af46 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -101,6 +101,7 @@ random-intersections$(EXEEXT) \ rectangle-rounding-error$(EXEEXT) \ rectilinear-miter-limit$(EXEEXT) \ rectilinear-stroke$(EXEEXT) \ +reflected-stroke$(EXEEXT) \ rel-path$(EXEEXT) \ rgb24-ignore-alpha$(EXEEXT) \ rotate-image-surface-paint$(EXEEXT) \ @@ -472,6 +473,7 @@ REFERENCE_IMAGES = \ rectangle-rounding-error-ref.png \ rectilinear-miter-limit-ref.png \ rectilinear-stroke-ref.png \ + reflected-stroke-ref.png \ rel-path-quartz-ref.png \ rel-path-quartz-rgb24-ref.png \ rel-path-ps-rgb24-ref.png \ diff --git a/test/reflected-stroke-ref.png b/test/reflected-stroke-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..14ed834aae231715d008616b2bd7e6663efc99ee GIT binary patch literal 4802 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 literal 0 HcmV?d00001 diff --git a/test/reflected-stroke.c b/test/reflected-stroke.c new file mode 100644 index 000000000..aa320987c --- /dev/null +++ b/test/reflected-stroke.c @@ -0,0 +1,100 @@ +/* + * Copyright © 2008 Chris Wilson + * + * 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 + * the author not be used in advertising or publicity pertaining to + * distribution of the software without specific, written prior + * permission. The author makes no representations about the + * suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL THE AUTHOR. 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: Chris Wilson + */ + +#include "cairo-test.h" + +static cairo_test_draw_function_t draw; + +cairo_test_t test = { + "reflected-stroke", + "Exercises the stroker with a reflected ctm", + 200, 200, + draw +}; + +static void +draw_symbol (cairo_t *cr) +{ + double dash[] = {6, 3}; + + cairo_rectangle (cr, -25, -25, 50, 50); + cairo_stroke (cr); + + cairo_move_to (cr, 0, -25); + cairo_curve_to (cr, 12.5, -12.5, 12.5, -12.5, 0, 0); + cairo_curve_to (cr, -12.5, 12.5, -12.5, 12.5, 0, 25); + cairo_curve_to (cr, 12.5, 12.5, 12.5, 12.5, 0, 0); + cairo_stroke (cr); + + cairo_save (cr); + cairo_set_dash (cr, dash, sizeof (dash) / sizeof (dash[0]), 0.); + cairo_move_to (cr, 0, 0); + cairo_arc (cr, 0, 0, 12.5, 0, 3 * M_PI / 2); + cairo_close_path (cr); + cairo_stroke (cr); + cairo_restore (cr); +} + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + cairo_set_source_rgb (cr, 0, 0, 0); + + cairo_save (cr); + cairo_translate (cr, 50, 50); + cairo_scale (cr, 1, 1); + draw_symbol (cr); + cairo_restore (cr); + + cairo_save (cr); + cairo_translate (cr, 150, 50); + cairo_scale (cr, -1, 1); + draw_symbol (cr); + cairo_restore (cr); + + cairo_save (cr); + cairo_translate (cr, 150, 150); + cairo_scale (cr, -1, -1); + draw_symbol (cr); + cairo_restore (cr); + + cairo_save (cr); + cairo_translate (cr, 50, 150); + cairo_scale (cr, 1, -1); + draw_symbol (cr); + cairo_restore (cr); + + return CAIRO_TEST_SUCCESS; +} + +int +main (void) +{ + return cairo_test (&test); +} +