diff options
author | Carl Worth <cworth@cworth.org> | 2005-01-12 14:38:22 +0000 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2005-01-12 14:38:22 +0000 |
commit | 4796dc0b26d5f56eecc4e208afc6b99ee4a7483e (patch) | |
tree | 8697a6bfc5a306063c8fdbebe663398983aa65b3 | |
parent | 72832b97606066681b640a7b7fda9fc434fd7e4c (diff) |
Add big_star_path which shows we still have fill bugs, (even now that little_star_path is working).
-rw-r--r-- | test/fill-rule-ref.png | bin | 408 -> 1983 bytes | |||
-rw-r--r-- | test/fill-rule.c | 58 | ||||
-rw-r--r-- | test/fill_rule-ref.png | bin | 408 -> 1983 bytes | |||
-rw-r--r-- | test/fill_rule.c | 58 |
4 files changed, 98 insertions, 18 deletions
diff --git a/test/fill-rule-ref.png b/test/fill-rule-ref.png Binary files differindex 25442c04..93ebe5aa 100644 --- a/test/fill-rule-ref.png +++ b/test/fill-rule-ref.png diff --git a/test/fill-rule.c b/test/fill-rule.c index 40ab9a12..037a044a 100644 --- a/test/fill-rule.c +++ b/test/fill-rule.c @@ -42,22 +42,39 @@ * planning on doing the new tessellator which should fix this * problem. * + * 2005-01-11 Carl Worth <cworth@cworth.org> + * + * Keith committed some fixes that fix the original size-20 + * star_path: + * + * * src/cairo_wideint.c: (_cairo_int32x32_64_mul), + * (_cairo_int64x64_128_mul): + * * src/cairo_wideint.h: + * int32x32_64_mul and int64x64_128_mul are different from their + * unsigned compatriots + * + * 2005-01-12 Carl Worth <cworth@cworth.org> + * + * Going back to the SVG test suite, however, the original star + * shape is still broken. Adding both shapes now as little_star_path + * and big_star_path. + * */ #include "cairo_test.h" -#define STAR_SIZE 20 +#define LITTLE_STAR_SIZE 20 +#define BIG_STAR_SIZE 80 cairo_test_t test = { "fill_rule", - "Tests cairo_set_full_rule with a star shape", - STAR_SIZE * 2 + 3, STAR_SIZE +2 + "Tests cairo_set_full_rule with some star shapes", + BIG_STAR_SIZE * 2 + 3, BIG_STAR_SIZE + LITTLE_STAR_SIZE + 3 }; - -/* Not a perfect star, but one that does show the tessellation bug. */ +/* The SVG start trimmed down, but still showing the bug (originally) */ static void -star_path (cairo_t *cr) +little_star_path (cairo_t *cr) { cairo_move_to (cr, 10, 0); cairo_rel_line_to (cr, 6, 20); @@ -66,6 +83,19 @@ star_path (cairo_t *cr) cairo_rel_line_to (cr, -16, 12); } +/* The star shape from the SVG test suite. This was is still buggy even after + we got little_star_path working. */ +static void +big_star_path (cairo_t *cr) +{ + cairo_move_to (cr, 40, 0); + cairo_rel_line_to (cr, 25, 80); + cairo_rel_line_to (cr, -65, -50); + cairo_rel_line_to (cr, 80, 0); + cairo_rel_line_to (cr, -65, 50); + cairo_close_path (cr); +} + /* Fill the same path twice, once with each fill rule */ static void draw (cairo_t *cr, int width, int height) @@ -73,12 +103,22 @@ draw (cairo_t *cr, int width, int height) cairo_set_rgb_color (cr, 1, 0, 0); cairo_translate (cr, 1, 1); - star_path (cr); + little_star_path (cr); + cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); + cairo_fill (cr); + + cairo_translate (cr, LITTLE_STAR_SIZE + 1, 0); + little_star_path (cr); + cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); + cairo_fill (cr); + + cairo_translate (cr, -(LITTLE_STAR_SIZE + 1), LITTLE_STAR_SIZE + 1); + big_star_path (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); cairo_fill (cr); - cairo_translate (cr, STAR_SIZE + 1, 0); - star_path (cr); + cairo_translate (cr, BIG_STAR_SIZE + 1, 0); + big_star_path (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); cairo_fill (cr); } diff --git a/test/fill_rule-ref.png b/test/fill_rule-ref.png Binary files differindex 25442c04..93ebe5aa 100644 --- a/test/fill_rule-ref.png +++ b/test/fill_rule-ref.png diff --git a/test/fill_rule.c b/test/fill_rule.c index 40ab9a12..037a044a 100644 --- a/test/fill_rule.c +++ b/test/fill_rule.c @@ -42,22 +42,39 @@ * planning on doing the new tessellator which should fix this * problem. * + * 2005-01-11 Carl Worth <cworth@cworth.org> + * + * Keith committed some fixes that fix the original size-20 + * star_path: + * + * * src/cairo_wideint.c: (_cairo_int32x32_64_mul), + * (_cairo_int64x64_128_mul): + * * src/cairo_wideint.h: + * int32x32_64_mul and int64x64_128_mul are different from their + * unsigned compatriots + * + * 2005-01-12 Carl Worth <cworth@cworth.org> + * + * Going back to the SVG test suite, however, the original star + * shape is still broken. Adding both shapes now as little_star_path + * and big_star_path. + * */ #include "cairo_test.h" -#define STAR_SIZE 20 +#define LITTLE_STAR_SIZE 20 +#define BIG_STAR_SIZE 80 cairo_test_t test = { "fill_rule", - "Tests cairo_set_full_rule with a star shape", - STAR_SIZE * 2 + 3, STAR_SIZE +2 + "Tests cairo_set_full_rule with some star shapes", + BIG_STAR_SIZE * 2 + 3, BIG_STAR_SIZE + LITTLE_STAR_SIZE + 3 }; - -/* Not a perfect star, but one that does show the tessellation bug. */ +/* The SVG start trimmed down, but still showing the bug (originally) */ static void -star_path (cairo_t *cr) +little_star_path (cairo_t *cr) { cairo_move_to (cr, 10, 0); cairo_rel_line_to (cr, 6, 20); @@ -66,6 +83,19 @@ star_path (cairo_t *cr) cairo_rel_line_to (cr, -16, 12); } +/* The star shape from the SVG test suite. This was is still buggy even after + we got little_star_path working. */ +static void +big_star_path (cairo_t *cr) +{ + cairo_move_to (cr, 40, 0); + cairo_rel_line_to (cr, 25, 80); + cairo_rel_line_to (cr, -65, -50); + cairo_rel_line_to (cr, 80, 0); + cairo_rel_line_to (cr, -65, 50); + cairo_close_path (cr); +} + /* Fill the same path twice, once with each fill rule */ static void draw (cairo_t *cr, int width, int height) @@ -73,12 +103,22 @@ draw (cairo_t *cr, int width, int height) cairo_set_rgb_color (cr, 1, 0, 0); cairo_translate (cr, 1, 1); - star_path (cr); + little_star_path (cr); + cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); + cairo_fill (cr); + + cairo_translate (cr, LITTLE_STAR_SIZE + 1, 0); + little_star_path (cr); + cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); + cairo_fill (cr); + + cairo_translate (cr, -(LITTLE_STAR_SIZE + 1), LITTLE_STAR_SIZE + 1); + big_star_path (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); cairo_fill (cr); - cairo_translate (cr, STAR_SIZE + 1, 0); - star_path (cr); + cairo_translate (cr, BIG_STAR_SIZE + 1, 0); + big_star_path (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); cairo_fill (cr); } |