From 96b083d3f0e47f919cb6d0f06735427eaea21565 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 8 Oct 2008 18:53:46 +0100 Subject: [PATCH] [test] Exercise degenerate dashes. Add a test case to capture the current behaviour when a segment ends on an off/on dash transition. Originally filed as bug: Miter artifacts for dashed strokes https://bugs.freedesktop.org/show_bug.cgi?id=17973 --- test/.gitignore | 1 + test/Makefile.am | 2 + test/degenerate-dash-ref.png | Bin 0 -> 2005 bytes test/degenerate-dash.c | 97 +++++++++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+) create mode 100644 test/degenerate-dash-ref.png create mode 100644 test/degenerate-dash.c diff --git a/test/.gitignore b/test/.gitignore index b185cd207..5a57541f5 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -52,6 +52,7 @@ dash-scale dash-state dash-zero-length degenerate-arc +degenerate-dash degenerate-path degenerate-pen device-offset diff --git a/test/Makefile.am b/test/Makefile.am index eb961accb..339bc18ab 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -42,6 +42,7 @@ dash-scale$(EXEEXT) \ dash-state$(EXEEXT) \ dash-zero-length$(EXEEXT) \ degenerate-arc$(EXEEXT) \ +degenerate-dash$(EXEEXT) \ degenerate-path$(EXEEXT) \ degenerate-pen$(EXEEXT) \ device-offset$(EXEEXT) \ @@ -395,6 +396,7 @@ REFERENCE_IMAGES = \ degenerate-arc-ref.png \ degenerate-arc-ps2-ref.png \ degenerate-arc-ps3-ref.png \ + degenerate-dash-ref.png \ degenerate-pen-ref.png \ degenerate-pen-ps2-ref.png \ degenerate-pen-ps3-ref.png \ diff --git a/test/degenerate-dash-ref.png b/test/degenerate-dash-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..ec51a3ce4e9a4242356352f45c3865c8a28904aa GIT binary patch literal 2005 zcmbW23pCVO9LN7w8Ck}ol*eeOb$X6OB4v_jNQBd;d+ch@C8a1{Q zDO!ygh8hhcyI!*qW>Dji=4doyyoUab*}t~hbN1}nb@tqI@9%!k`JH>u`Q7jR{H}Po z<22L^)Bpg`aB+6@f@A-}R8@gjLm%!%IH&}<;v50R!YF)FoCN@g?_3=B9EvS?_tMk7 zZ~uyP>GJy&@cMJsnu?@m(aE&b7o}e@TO6cewC^8XoyE@X(~Az$Y@OZR@S7~_g9CHA z)emcx`98`zWB3H{O@7DMK>0GZlEV^&sy52F64h^>7kz`D5XtC^NPH*jlwUHDm#~KyIf6-AU#hrxktrGI-Od#PXDbw?dy*srK`Oslgs*g9 zrT7}2X!(V3c@BB%WFe*@#4}04%nqHr$Ot)~-gbfQxBrSr6#ED*lI8-ll-Ct<&r`;A)C=9|HU1+d#{kDt$nndJQ$k}sSKn|Ai|?Z zrDWr4y$*v~a&{;fW}qnJ;l#omU14$TGuuk?)A)uh8$PA@G+>i{0ztYu&h01;0|E20 zdsAO+pZ?%?Vd?n#K_WPNu-fO+?e0fN<17#iQ$D1t*P)hPkH=_u-~*gD75LnA-GMGF zolPi-m_(k$e<-0;E$tw2s+Q`sH_MEV++Ef*{9wqmKsPa0XR)vLPme2L(<9)bzX?+4 z{|E@!jq2Bkyv?a3MAi1+uLsh!CXM<#?0qk_-2wz>H*nu5N3=~KDbvZ!Y@Hr$l*cl` zmJJu1wH9sKC?mE;3ZdsG7zbU^olWCGRaa{>If_Y;Ob(IBLW(;@WGZ!*RlA8+-a8JI zrb=L!jm^vmcB1e=02gp|587P02t;(=Mv=@u8hIg%+%o zV6Dv?hj-ejuy1`9P{c(`6?XY>gwp@=x)1Uc*52xz$BAZoS7!GdHetRMirchc9jhs5 z1bd(NcZe0^ko1ojGpQt_cTaqHHGJd^$?T}_*jgds$q0*H(BeA-|M|f#6mlepf{U>! zGOCAx7jKf25iS~FWR%aGJukv~w{Lu$|IoiBQJVJ&VgAl{xX#-B*PnMKd;;C!PR2-G zZ0p_VqRV{T+f`npmR?J%@KJPXOPuWV;DdTgx0yJaP}nNKv-bAo%jM9#;@DQb;=75S z`zpxUaYg;sPWP-3V#E0jL`;Kc7y*&#VpC05DpgZInYMSZ^g8Ty^CDe$4EIifrU#yM zu!nIzy>i0NZx<{5YA)!_La;5|Y*vTrZh + * + * Based on an original test case by M Joonas Pihlaja. + */ + +#include "cairo-test.h" + +#ifndef ARRAY_LENGTH +#define ARRAY_LENGTH(A) (int) (sizeof (A) / sizeof ((A)[0])) +#endif + +#define PAD 5 + +static cairo_test_draw_function_t draw; + +static const cairo_test_t test = { + "degenerate-dash", + "Tests the behaviour of dashed segments that end on a off-on transition", + 210 + 2*PAD, 210 + 2*PAD, + draw +}; + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + const double dashes[] = { 25, 25 }; + cairo_line_join_t joins[] = { + CAIRO_LINE_JOIN_ROUND, + CAIRO_LINE_JOIN_MITER, + CAIRO_LINE_JOIN_BEVEL + }; + cairo_line_cap_t caps[] = { + CAIRO_LINE_CAP_ROUND, + CAIRO_LINE_CAP_SQUARE, + CAIRO_LINE_CAP_BUTT, + }; + int i, j; + + cairo_set_source_rgb (cr, 1,1,1); + cairo_paint (cr); + + cairo_set_source_rgb (cr, 1, 0, 0); + + cairo_set_dash (cr, dashes, 2, 0.); + cairo_set_line_width (cr, 10); + + cairo_translate (cr, 5 + PAD, 5 + PAD); + + for (i = 0; i < ARRAY_LENGTH (joins); i++) { + cairo_set_line_join (cr, joins[i]); + cairo_save (cr); + + for (j = 0; j < ARRAY_LENGTH (caps); j++) { + cairo_set_line_cap (cr, caps[j]); + + cairo_move_to (cr, 0, 0); + cairo_line_to (cr, 50, 0); + cairo_line_to (cr, 50,50); + cairo_stroke (cr); + + cairo_translate (cr, 75, 0); + } + cairo_restore (cr); + + cairo_translate (cr, 0, 75); + } + + return CAIRO_TEST_SUCCESS; +} + +int +main (void) +{ + return cairo_test (&test); +}