Re: Recording final move_to in copy_path()
Behdad Esfahbod <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
On 14-01-16 03:59 AM, Uli Schlachter wrote: > Hi, > > On 15.01.2014 04:17, Behdad Esfahbod wrote: >> Currently if one does cairo_copy_path(), any final move_to in the path is not >> copied over. This is unfortunate since copying the path and applying it later >> does not leave the current point the way it was before. >> >> Unless there's any objections, I'm going to push the following patch that >> fixes this: >> >> diff --git a/src/cairo-path-fixed.c b/src/cairo-path-fixed.c >> index 14913fd..4143307 100644 >> --- a/src/cairo-path-fixed.c >> +++ b/src/cairo-path-fixed.c >> @@ -847,6 +847,9 @@ _cairo_path_fixed_interpret (const cairo_path_fixed_t >> } >> } cairo_path_foreach_buf_end (buf, path); >> >> + if (path->has_current_point) >> + return (*move_to) (closure, &path->current_point); >> + >> return CAIRO_STATUS_SUCCESS; >> } > > This does not do what you want it to do, because cairo_move_to() implicitly > calls cairo_new_sub_path() (see _cairo_path_fixed_move_to()). This means that > e.g. no line join will be applied if the path is continued. > > Thus, I guess you will need to some more complicated patch for this. Something > that checks path->has_current_point and also checks if patch->last_move_point == > path->current_point (this is just a quick idea, no idea if it is correct). Ah, good catch. Thanks! What about path->has_current_point and last_op == close_path? >> I know I should be adding a test for this, but... > > But? :-P Was checking to see if any maintainer is paying attention ;). Will add. -- behdad http://behdad.org/ -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo