[cairo] Recording final move_to in copy_path()
Uli Schlachter
psychon at znc.in
Wed Jan 15 11:59:02 PST 2014
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.
More information about the cairo
mailing list