[cairo] Recording final move_to in copy_path()
Behdad Esfahbod
behdad at behdad.org
Wed Jan 15 19:26:42 PST 2014
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/
More information about the cairo
mailing list