X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fart%2Fart_vpath_bpath.c;fp=lib%2Fart%2Fart_vpath_bpath.c;h=3f9afe7229665bee0298098b1bde0f4cc8ec255f;hb=3a3813dce687c2a99181ccae01c4a5dde409c976;hp=55a46e6679fbab3f5232454b2bd1d67d6384714c;hpb=b474880d62af3ea84ac5f79a1f398b0dbb3f9130;p=swftools.git diff --git a/lib/art/art_vpath_bpath.c b/lib/art/art_vpath_bpath.c index 55a46e6..3f9afe7 100644 --- a/lib/art/art_vpath_bpath.c +++ b/lib/art/art_vpath_bpath.c @@ -164,9 +164,19 @@ art_vpath_render_bez (ArtVpath **p_vpath, int *pn, int *pn_max, /* z3_0_dot is dist z0-z3 squared */ z3_0_dot = x3_0 * x3_0 + y3_0 * y3_0; - /* todo: this test is far from satisfactory. */ if (z3_0_dot < 0.001) - goto nosubdivide; + { + /* if start and end point are almost identical, the flatness tests + * don't work properly, so fall back on testing whether both of + * the other two control points are the same as the start point, + * too. + */ + if (hypot(x1 - x0, y1 - y0) < 0.001 + && hypot(x2 - x0, y2 - y0) < 0.001) + goto nosubdivide; + else + goto subdivide; + } /* we can avoid subdivision if: @@ -203,6 +213,7 @@ art_vpath_render_bez (ArtVpath **p_vpath, int *pn, int *pn_max, if (z2_dot + z2_dot > z3_0_dot) goto subdivide; + nosubdivide: /* don't subdivide */ art_vpath_add_point (p_vpath, pn, pn_max,