Re: Recording final move_to in copy_path()
Uli Schlachter <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
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). > I know I should be adding a test for this, but... But? :-P Uli -- Bruce Schneier can read and understand Perl programs. -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo