diff options
author | Tor Andersson <tor@ghostscript.com> | 2011-03-01 22:40:14 +0000 |
---|---|---|
committer | Tor Andersson <tor@ghostscript.com> | 2011-03-01 22:40:14 +0000 |
commit | a34132a9d9559d46077eebdb0dfc2b8395c9f119 (patch) | |
tree | 1f1c19381151e148164854379951e01a9dc876a7 | |
parent | 48fa19c8e1117ac556e277e0924833d124a5faea (diff) | |
download | mupdf-a34132a9d9559d46077eebdb0dfc2b8395c9f119.tar.xz |
Fix subtle path stroking bug where closepath did not update the pen position.
-rw-r--r-- | draw/pathstroke.c | 9 | ||||
-rw-r--r-- | fitz/dev_trace.c | 1 | ||||
-rw-r--r-- | fitz/res_path.c | 5 |
3 files changed, 8 insertions, 7 deletions
diff --git a/draw/pathstroke.c b/draw/pathstroke.c index 50343b3f..1eb514eb 100644 --- a/draw/pathstroke.c +++ b/draw/pathstroke.c @@ -271,8 +271,6 @@ fz_strokeflush(struct sctx *s) { fz_linedot(s, s->beg[0]); } - - s->dot = 0; } static void @@ -283,6 +281,7 @@ fz_strokemoveto(struct sctx *s, fz_point cur) s->beg[0] = cur; s->sn = 1; s->bn = 1; + s->dot = 0; } static void @@ -328,8 +327,9 @@ fz_strokeclosepath(struct sctx *s) fz_linedot(s, s->beg[0]); } - s->bn = 0; - s->sn = 0; + s->seg[0] = s->beg[0]; + s->bn = 1; + s->sn = 1; s->dot = 0; } @@ -644,6 +644,7 @@ fz_dashpath(fz_gel *gel, fz_path *path, fz_strokestate *stroke, fz_matrix ctm, f case FZ_CLOSEPATH: fz_dashlineto(&s, beg); + p0 = p1 = beg; break; } } diff --git a/fitz/dev_trace.c b/fitz/dev_trace.c index 84e590bf..50ba02f3 100644 --- a/fitz/dev_trace.c +++ b/fitz/dev_trace.c @@ -54,6 +54,7 @@ fz_tracepath(fz_path *path, int indent) break; case FZ_CLOSEPATH: printf("<closepath />\n"); + break; } } } diff --git a/fitz/res_path.c b/fitz/res_path.c index 6c5f1802..ebfb3cdc 100644 --- a/fitz/res_path.c +++ b/fitz/res_path.c @@ -19,10 +19,8 @@ fz_clonepath(fz_path *old) fz_path *path; path = fz_malloc(sizeof(fz_path)); - memcpy(path, old, sizeof(fz_path)); - path->len = old->len; - path->cap = path->len; + path->cap = old->len; path->els = fz_calloc(path->cap, sizeof(fz_pathel)); memcpy(path->els, old->els, sizeof(fz_pathel) * path->len); @@ -207,6 +205,7 @@ fz_debugpath(fz_path *path, int indent) break; case FZ_CLOSEPATH: printf("h\n"); + break; } } } |