[cairo] Re: cairo_get_current_point bug ?

Mike Emmel mike.emmel at gmail.com
Thu Sep 14 16:59:11 PDT 2006


Attached is a patch for cairo_get_current_point



On 9/14/06, Mike Emmel <mike.emmel at gmail.com> wrote:
> Also if it would set cr->status to no current point I
> get my path_is_empty function thats quite useful.
>
> Mike
>
>
> On 9/14/06, Mike Emmel <mike.emmel at gmail.com> wrote:
> > Here is the function
> >
> > void
> > cairo_get_current_point (cairo_t *cr, double *x_ret, double *y_ret)
> > {
> >     cairo_status_t status;
> >     cairo_fixed_t x_fixed, y_fixed;
> >     double x, y;
> >
> >     status = _cairo_path_fixed_get_current_point (&cr->path, &x_fixed,
> > &y_fixed);
> >     if (status == CAIRO_STATUS_NO_CURRENT_POINT) {
> >     x = 0.0;
> >     y = 0.0;
> >     } else {
> >     x = _cairo_fixed_to_double (x_fixed);
> >     y = _cairo_fixed_to_double (y_fixed);
> >     _cairo_gstate_backend_to_user (cr->gstate, &x, &y);
> >     }
> >
> >     if (x_ret)
> >     *x_ret = x;
> >     if (y_ret)
> >     *y_ret = y;
> > }
> >
> >
> > The problem is that if no path is set the current transform is not
> > used to transform the points
> > If you say translate then add a move_to 0,0 you get different results.
> >
> > So I think it should be.
> >
> >   if (status == CAIRO_STATUS_NO_CURRENT_POINT) {
> >     x = 0.0;
> >     y = 0.0;
> >     _cairo_gstate_backend_to_user (cr->gstate, &x, &y);
> >     } else {
> >
> >
> > The workaround is to always do a move_to(0,0) in a new cairo_t.
> >
> > Mike
> >
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cairo.patch
Type: text/x-patch
Size: 1284 bytes
Desc: not available
Url : http://lists.freedesktop.org/archives/cairo/attachments/20060914/358ac727/cairo.bin


More information about the cairo mailing list