cairo 1.5.10 snapshot available
From: Carl Worth <>
Date: Wed, 20 Feb 2008 10:22:17 -0800
Subject: cairo snapshot 1.5.10 now available

A new cairo snapshot 1.5.10 is now available from:

    which can be verified with:
        8c97a24f3297bade49508d833cf9218f42e88b8c  cairo-1.5.10.tar.gz
        (signed by Carl Worth)

  Additionally, a git clone of the source tree:

        git clone git://

    will include a signed 1.5.10 tag which points to a commit named:

    which can be verified with:
        git verify-tag 1.5.10

    and can be checked out with a command such as:
        git checkout -b build 1.5.10

This is the fifth snapshot in cairo's unstable 1.5 series. It comes 3
weeks after the 1.5.8 snapshot. This snapshot adds one new API
function, (cairo_has_current_point), and the usual mix of
improvements, (more efficient PostScript/PDF output, optimized
stroking), and fixes (more robust error-handling, etc.).

With this snapshot we're getting *really* close to cairo 1.6. The
number of test-suite failures is rapidly approaching zero and the
list of things still needing to be done is getting very short.

I am a bit disappointed to not have the change from 16.16 fixed point
to 24.8 fixed point in this snapshot. We did a ton of work to make
this possible, (including fixing the infinite loop bug it was exposing
earlier), and I even had the change in place just before releasing the
snapshot. But at the last moment we noticed that the change caused
some regressions in PS/PDF/SVG rendering, (pattern offsets are wrong
at least), so we pulled it out. But look for another snapshot soon
with that change. And see details below on what *did* make it in.

Do have fun with this. And try your best to break it. We're especially
interested in learning of any regressions in quality or performance of
1.5.10 compared to any 1.4.x release of cairo.



What's new in cairo 1.5.10 compared to cairo 1.5.8
Add a new function to query if there is a current point:

    cairo_has_current_point (cairo_t *cr);

There is no current point immediately after cairo_create(), nor after
cairo_new_path() or cairo_new_sub_path(). There is a current point
after any of the path-creation functions, (cairo_move_to,
cairo_line_to, cairo_curve_to, etc.).

With this new function, we also revert the change of the return type
of cairo_get_current_point from cairo 1.5.8, (it's now a void function

Optimize stroking code to avoid repeated calculation of redundant
values, (particularly significant for very large, offscreen paths).

General fixes
Patch a few more potential buffer overruns, (due to integer

Many fixes and improvements to cairo's error-handling, (ensure that
correct error values are returned, clean up memory leaks on
error-handling paths, etc.).

Fix a potential infinite loop when stroking a spline with a pen that
has been transformed to a line segment.

Remove treating NULL as a synonym for a valid cairo_font_options_t*
with default values, (a change that had been introduced as of cairo

Remove the altered handling of tolerance and fallback-resolution that
had been introduced as of cairo 1.5.4.

Pass the original Drawable, (as opposed to the root window), to
XCreatePixmap when creating a similar surface. This gives the X server
more information so that it can be clever and efficient.

Fix the rendering of repeating and reflecting patterns.

Ensure miter limit is always >= 1, (smaller limits are not meaningful,
but they can cause some PDF viewers to fail to display pages).

Generate more efficient output when the same path is used for both
fill and stroke.

Start sharing much of the cairo-pdf code rather than implementing very
similar code in cairo-ps.

Implement native support for repeating and reflecting linear

Implement reflected surface patterns.

Ensure miter limit is always >= 1, (smaller limits are not meaningful,
but they can cause some PostScript viewers to crash).

Generate PostScript that will perform more efficiently and use less
memory on printers, (use currentfile instead of a giant string array
for image data, and avoid using PostScript patterns for paint() and
fill() when possible).

Avoid unnecessary rasterization when copying a "similar" surface to
another svg surface, (allow the SOURCE operator to be implemented with
all-vector operations if there are no underlying objects).

Eliminate infinite loop when attempting to render an empty string.