[cairo-announce] cairo release 1.10.0 now available

Chris Wilson chris at chris-wilson.co.uk
Mon Sep 6 10:52:09 PDT 2010

A new cairo release 1.10.0 is now available from:


    which can be verified with:

	efe7e47408d5188690228ccadc8523652f6bf702  cairo-1.10.0.tar.gz

	(signed by Chris Wilson)

  Additionally, a git clone of the source tree:

	git clone git://git.cairographics.org/git/cairo

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

    which can be verified with:
	git verify-tag 1.10.0

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

Release 1.10.0 (2010-09-06 Chris Wilson <chris at chris-wilson.co.uk>)

The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.

One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.

The traces generated by cairo-trace have been collected in


and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not

nly is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and

Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.

Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.

Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.

Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!


List of all changes between 1.9.14 and 1.10.0

ndrea Canciani (15):
      test: improve clip-*-unbounded tests
      quartz: fix stroking with unbounded operators
      quartz: fix solid masking fallback
      quartz: improve backend detection
      Fix configuration if gobject is absent
      Correct color stops comparison function
      gstate: Correct comment
      pattern: Add gradient degeneracy testing functions
      pattern: Simplify degenerate linear pattern to solid colors
      perf: Improve calibration
      Replace insertion sort with mergesort in the scan converter
      test: Update linear-gradient-large ref image
      subsurface: Silence compiler warnings
      subsurface: Avoid invalid accesses
      subsurface: Correct cloning condition

Benjamin Otte (20):
      tee: Move definitions into separate header
      configure: Disable tee backend by default
      configure: Disable xml backend by default
      Add cairo-gobject library
      configure: Fix gobject handling
      gl: Handle errors from _cairo_gl_gradient_render()
      gobject: Include the extra library in the pkgconfig file
      build: Fudge the build system some more so it handles extra libs
      subsurface: Properly account for device offsets in the target
      subsurface: Make subsurfaces their own type
      subsurface: Don't crash when the device transform isn't integer
      subsurface: Make CAIRO_SURFACE_TYPE_SUBSURFACE public
      subsurface: Don't apply device transform twice for source/mask
      subsurface: Don't clip size to target size
      surface-offset: Use right variable in mask
      test: Add subsurface-outside-target
      subsurface: Fix acquire_source_surface for out-of-bounds surfaces
      gobject: Fix pkgconfig file variable
      build: Work around caching not reevaluating uncached variables
      gobject: Fix header defines

Chris Wilson (12):
      version: 1.9.15 post-snapshot bump
      Mark the context as invalid on the final cairo_destroy()
      check: Fix for link-time-optimisation
      Reduce the cairo_device_type_t to only hold the used entries.
      check: Make the actual error stand out
      Bump pixman requirements to 0.18.4 for assorted fixes.
      check: Ignore the documentation errors.
      test: Rename clip-fill-*-unbounded.image16 ref to match REFERENCE_IMAGES
      test: Add subsurface-outside-target refs to REFERENCE_IMAGES
      NEWS: Sum up 2 years of development for 1.10.0 in 60 lines
      version: 1.10.0 *release*
      version: 1.10.1 open for bugfixing

David Schleef (1):
      perf: Fix README to say cairo-perf-micro

Kristian Høgsberg (1):
      egl: Use EGL_KHR_surfaceless_opengl extension when available

Krzysztof Kosiński (1):
      tests: Add linear-gradient-large test

M Joonas Pihlaja (6):
      script: Fix script backend build.
      subsurface: Fix crash when acquiring a source image.
      subsurface: Add a note to the docs about usage restrictions.
      device: Refer the user to per-backend docs about devices.
      build: Remove stray backslash.
      freelist: Separate freelist inlines from the datatype in headers.

Maarten Bosmans (1):
      build: prefer libpng14 over older versions

Nicolaus L Hepler (1):
      ft-font: Make alpha mapping consistent

Rich Walsh (9):
      os2: New API to create surfaces without a persistent HPS.
      os2: Fix blitting 24 bpp pixel data.
      os2: Fix buffer allocator behaviour on arithmetic overflow.
      os2: Don't fake an Anchor Block when one isn't needed.
      os2: Document ownership of OS/2 objects passed to surfaces.
      os2: Consolidate error paths of cairo_os2_surface_create().
      os2: Tweak an inline declaration.
      os2: Fix clipping to bounds when blitting pixels.
      os2: Restore surface type checking in the get_extents method.

Søren Sandmann Pedersen (1):
      Update documentation to reflect that rgb565 is no longer deprecated.

What is cairo
Cairo is a 2D graphics library with support for multiple output
devices. Currently supported output targets include the X Window
System, quartz, win32, and image buffers, as well as PDF, PostScript,
and SVG file output. Experimental backends include OpenGL, XCB, BeOS,
OS/2, and DirectFB.

Cairo is designed to produce consistent output on all output media
while taking advantage of display hardware acceleration when available
(for example, through the X Render Extension).

The cairo API provides operations similar to the drawing operators of
PostScript and PDF. Operations in cairo include stroking and filling
cubic Bézier splines, transforming and compositing translucent images,
and antialiased text rendering. All drawing operations can be
transformed by any affine transformation (scale, rotation, shear,

Cairo has been designed to let you draw anything you want in a modern
2D graphical user interface.  At the same time, the cairo API has been
designed to be as fun and easy to learn as possible. If you're not
having fun while programming with cairo, then we have failed
somewhere---let us know and we'll try to fix it next time around.

Cairo is free software and is available to be redistributed and/or
modified under the terms of either the GNU Lesser General Public
License (LGPL) version 2.1 or the Mozilla Public License (MPL) version

Where to get more information about cairo
The primary source of information about cairo is:


The latest versions of cairo can always be found at:


Documentation on using cairo and frequently-asked questions:


Mailing lists for contacting cairo users and developers:


Roadmap and unscheduled things to do, (please feel free to help out):


Chris Wilson, Intel Open Source Technology Centre

More information about the cairo-announce mailing list