cairo release 0.9.2 now available
Posted on: 08/13/2005 03:58 PM

A new cairo release 0.9.2 is now available from:

which can be verified with:
6b9139a9dafae6593dd5bcdf89308ff42c32e689 cairo-0.9.2.tar.gz
(signed by Carl Worth)

What is cairo?
Cairo is a vector graphics library designed to provide high-quality display and print output. Currently available backends include the X Window System, OpenGL (via glitz), Quartz, win32, in-memory image buffers, PNG images, PostScript, and PDF files.

As of version 2.7/2.8, GTK+ now performs much of its drawing through cairo and allows application code to perform rendering through cairo.

For more information on cairo, see

Why this release?
This is a development release leading up to cairo 1.0.

The cairo 1.0 release will be source and binary compatible with the cairo 0.9.x series. All API changes in cairo 0.9.x are finalized at this point, and cairo 0.9.x should be considered API frozen. Barring discovery of serious issues with the new APIs, no API changes are anticipated between this release and the 1.0 release.

Have fun! And please report any problems here:

Detailed notes on this release are included below.


Release 0.9.2 (2005-08-13 Carl Worth lt;cworth@cworth.orggt;)
Release numbering
* You will notice that this release jumped from 0.9.0 to 0.9.2. We've
decided to use an odd micro version number (eg. 0.9.1) to indicate
in-progress development between releases. As soon as 0.9.2 is
tagged, the version will be incremented in CVS to 0.9.3 where it
will stay until just before 0.9.4 is built, uploaded, and tagged.

So, even-micro == a released version, odd-micro == something in-between.

Libpixman dependency dropped
* As of this release, the dependency on an internal libpixman has
been dropped. Instead, the code from libpixman needed for cairo has
been incorporated into the cairo source tree. The motivation for
this change is that while cairo's API is stable and ready to be
maintained after the 1.0 release, libpixman's API is not, so we do
not want to expose it at this time.

Also, the incorporation of libpixman into cairo also renames all
previously-public libpixman symbols in order to avoid any conflict
with a future release of libpixman

API additions
* Macros and functions have been added so that the version of cairo
can be queried at either compile-time or at run-time. The version
is made available as both a human-readable string and as a single

CAIRO_VERSION eg. 000902

const char*
cairo_version_string (void); /* eg. "0.9.2" */

cairo_version (void); /* eg. 000902 */

A macro is provided to convert a three-part component version into
the encoded single-integer form:


For example, the CAIRO_VERSION value of 000902 is obtained as
CAIRO_VERSION_ENCODE(0,9,2). The intent is to make version
comparisons easy, either at compile-time:


Or at run-time:

if (cairo_version() gt;= CAIRO_VERSION_ENCODE(0,9,2)) { /* ... */ }

Thread safety
* This release adds pthread-based locking (when available) to make
the caches used by cairo safe for threaded programs. Some may
remember a failed experiment with this locking between the 0.5.1
and 0.5.2 snapshots, (where even single-threaded programs that
linked with -lpthread would deadlock). We believe that that problem
has been fixed, so we are looking forward to testing and reports
from users with threaded applications.

Bug fixes
* The XCB and Quartz backends failed to compiled in the 0.9.0 release
due to minor syntax errors. These have now been fixed.

* Various crashes in glitz and pixman due to size 0 glyphs have been

Corrections to previous 0.9.0 announcement

* The previous announcement for 0.9.0 was written rather hastily and
had some problems. It neglected to mention the new
cairo_get_antialias function and it it incorrectly listed a new
function as cairo_flush instead of the correct cairo_surface_flush.

* In addition the following release notes were mistakenly omitted:

Soname change
* In all prior snapshots, the libtool library versioning was set to
1:0:0. As this release is intended to mark the beginning of
backwards-compatible releases, the versioning has been incremented
to 2:0:0. You will notice that the numeric extension on the
installed library filename will change similarly.

This change will also require all cairo-using applications to be
recompiled. We recognize that this may cause some frustration since
this release is backwards-compatible with 0.6.0 and in that sense
"shouldn't" require re-compilation. However, since all historical
snapshots have used the same 1:0:0 version in spite of incompatible
API changes between them, it was essential that the upcoming 1.0
release series have distinct library versioning.

All future releases will use the library versioning to properly
indicate compatibility between releases. So, any application
re-compiled now to work with the 0.9.0 will not need to be
recompiled when a compatible 1.0 release of cairo is made in the

Semantic changes
* The behavior of cairo_set_source with a pattern with a non-identity
matrix was previously not well-defined. The new behavior is as

The pattern's transformation matrix will be locked to the
user space in effect at the time of cairo_set_source(). This means
that further modifications of the CTM will not affect the source

Printed from Linux Compatible (