[cairo] cairo_get_current_point bug ?

Mike Emmel mike.emmel at gmail.com
Thu Sep 14 10:30:02 PDT 2006


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


More information about the cairo mailing list