[cairo-announce] cairo release 1.2.0 now available

Carl Worth cworth at cworth.org
Fri Jun 30 19:36:04 PDT 2006

A new cairo release 1.2.0 is now available from:


    which can be verified with:

        c5da7f89cdd3782102357f99a47f516d11661e92  cairo-1.2.0.tar.gz

        (signed by Carl Worth)

  Additionally, a git clone of the source tree:

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

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

    which can be verified with:
        git verify-tag 1.2.0

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

We are very pleased to announce this release, the first major update
to cairo since the original 1.0 release 10 months ago. Compared to
cairo 1.0, the 1.2 release doubles the number of supported backends,
adding PDF, PostScript, and SVG backends to the previous xlib, win32
and image backends.

As with all of cairo's major releases, cairo 1.2 retains both source
and binary compatibility with the cairo 1.0 series. Programs compiled
for cairo 1.0 should run with cairo 1.2 without requiring any

I want to personally express my congratulations and admiration to
everyone on the cairo team. This includes authors of code,
contributors on the cairo mailing list, and users who have submitted
bug reports and suggestions. This release has been a huge effort, and
its high quality is due to the contributions of dozens of
people---many more than are mentioned below. So thank you!

I would also like to thank everyone for their patience during this
long and uncertain release process. I imagine some people may have
thought cairo 1.2 would never appear as date after projected date
slipped by. I should express particular thanks to Behdad Esfahbod
without whom the release still wouldn't be done, nor would it be
nearly as good, (many documentation updates, good catches of bad
mistakes that almost got frozen in the release, etc). Thanks Behdad!


What is cairo
Cairo is a 2D graphics library with support for multiple output
devices. Currently supported output targets include the X Window
System, win32, and image buffers. Experimental backends include OpenGL
(through glitz), Quartz, XCB, PostScript and PDF file output.

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 including 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 releases of cairo can be found at:


Snapshots of in-development versions of cairo:


The programming manual for using cairo:


Mailing lists for contacting cairo users and developers:


Answers to some frequently asked questions about cairo:


What's new in cairo 1.2 compared to 1.0
New, supported backends (PDF, PostScript, and SVG)
The major theme of the 1.2 release is new PDF, PostScript and SVG
backends for cairo. Unlike the 1.0 series, in the 1.2 series these
backends are not marked as experimental and are now fully supported,
(that is, they will now have the same API stability guarantees as the
rest of the library).

These new backends form an integral part of the new printing support
that will soon be released as part of GTK+ 2.10.

Earlier, experimental versions of the PDF and PostScript backends used
image fallbacks exclusively, which was obviously unsatisfactory for
many uses. In contrast, the PDF backend in the cairo 1.2.0 release
will emit vectorized output for all operations drawn with the default
OVER operator, even when the drawing includes translucence. The
PostScript backend emits vectorized output as long as there is no
translucency. The SVG backend can handle basically anything with
vector output, (particularly if the user selects SVG 1.2 output).

And as always, with any supported cairo backend, the backends should
work fine with any possible cairo operations, (through image
fallbacks). In 1.2.0, when a fallback is necessary on any page, it
renders the entire page as a fallback. It is expected that future
releases will fallback more gracefully and use images only for the
minimum region necessary.

Text support in these backends has seen a tremendous amount of
work. At a minimum, text will be rendered as paths in any of the
backends, (assuming no other operations force a fallback). And in the
PDF and PostScript backends, both type1 and TrueType fonts will be
directly embedded in the output file. This results in higher-quality
previews and better performance. Note however, that due to a known bug
in the PDF backend, it is not currently possible to use a PDF viewer
to select text in a PDF file generated by cairo. It is anticipated
that this shortcoming will be addressed shortly in a subsequent

New, experimental backends (beos and directfb)
The 1.2.0 release includes two new backends that did not exist in the
1.0 series:

	* beos backend
	* directfb backend

These are experimental still, (as are the existing xcb, glitz, and
quartz backends), meaning we don't yet guarantee they are fully
functional, (not yet passing the entire test suite), nor are we
guaranteeing strong API compatibility into the future.

But please feel free to experiment with these backends and give use
feedback, or help us to improve them.

Group rendering API
The long-awaited group-rendering support is now available with the
following function calls:


This API provides a much more convenient mechanism for doing rendering
to an intermediate surface without the need to manually create a
temporary cairo_surface_t and a temporary cairo_t and clean them up

Backend-specific pkg-config files
In addition to the original cairo.pc file, cairo will also now install
a pkg-config files for each configured backend, (for example
cairo-pdf.pc, cairo-svg.pc, cairo-xlib.pc, cairo-win32.pc, etc.) this
also includes optional font backends (such as cairo-ft.pc) and the
optional png functionality (cairo-png.pc).

These new pkg-config files should be very convenient for allowing
cairo-using code to easily check for the existing of optional
functionality in cairo without having to write complex rules to grub
through cairo header files or the compiled library looking for

Help for drawing disconnected circles
A new path-construction function was added which clears the current
point in preparation for a new sub path. This makes it much easier to
use cairo_arc to draw a circular arc that is not connected to the
current path:


Degenerate paths for easier "dots"
Degenerate paths are now consistently handled in a manner similar to
the PDF specification. This means that round caps can now be used to
easily draw circles (move_to, close_path, stroke), or dotted lines,
(set_dash with a 0 length for on segments).

The following function been added to complement


Type querying functions
There are new get_type functions for querying sub-types of object:


Scaled font query/convenience functions
More convenience in working with cairo_scaled_font_t with new getter


As well as a convenience function for setting a scaled font into a
cairo context:


and a function to allow text extents to be queried directly from a
scaled font, (without requiring a cairo_surface_t or a cairo_t):


These new scaled font functions were motivated by the needs of the
pango library.

image backend
It is now possible to obtain access to the image data of any image
surface with the following new functions:


xlib backend
Fix potentially big performance bug by making xlib's create_similar
try harder to create a pixmap of a depth matching that of the screen.

Add the following functions to allow the user to extract all the
details of the underlying Xlib drawable from an xlib surface:


win32 backend
Performance improvements by preferring GDI over pixman rendering when possible.
Fixes for text rendering.

Add a new function to create a font_face for an HFONT:


PostScript backend
We anticipate that with cairo 1.2, toolkits will begin to use cairo
for printing on systems that use PostScript as the spool format. To
support this use case, we have added 4 new function calls that are
specific to the PostScript backend:


These functions allow variation of the page size/orientation from one
page to the next in the PostScript output. They also allow the toolkit
to provide per-document and per-page printer control options in a
device-independent way, (for example, by using PPD options and
emitting them as DSC comments into the PostScript output). This should
allow toolkits to provide very fine-grained control of many options
available in printers, (media size, media type, tray selection, etc.).

PDF backend
The PDF backend also provides capability for per-page size changes,
with the following API:


There has been a lot of interest in adding additional PDF-specific API
for inserting various kinds of meta-data or other structure into the
PDF output. We have avoided this in 1.2.0 since we don't yet know
exactly what the interface should look like. If you have interest or
knowledge in this area, please share your ideas with us.

SVG backend
Unlike some earlier, experimental versions of the SVG backend, the SVG
backend in cairo 1.2.0 does not have any dependency on the libxml2

The SVG backend provides flexibility with regard to what version of
SVG it targets. It will target SVG 1.1 by default, which will require
image fallbacks for some of the "fancier" cairo compositing
operators. Or with the following new function calls:


it can be made to target SVG 1.2 in which there is native support for
these compositing operators.

Optimizations and bug fixes
Shortly after the 1.0 maintenance series branched off the mainline
there was a major rework of the cairo font internals. This should
provide some good performance benefits, but it's also another area
people should look at closely for potential regressions, (thanks to
Federico Mena-Quintero for already pointing out a problem with bitmap
fonts containing a very large number of glyphs).

There has not yet been any widespread, systematic optimization of
cairo, but various performance improvements have been made, (and some
of them are fairly significant). So if some things seem faster than
1.0 then things are good. If there are any performance regressions
compared to 1.0 then there is a real problem and we would like to hear
about that.

Now that 1.2.0 is done, the major focus of the cairo project over the
next few months will be on performance and optimization. We are very
interested in benchmarks demonstrating cairo call sequences that are
of interest to users. Please send your benchmarks to the cairo mailing
list for inclusion in an upcoming automated performance regression
testing environment. Ideally benchmarks should run for a (fairly
short), fixed amount of time, terminate, and print a single number.

There has been a huge number of bug fixes---too many to mention in
detail. Again, things should be better, and never worse compared to
1.0. Please let us know if your testing shows otherwise.

What's new in cairo 1.2.0 compared to 1.1.10
There has been one API addition since the cairo 1.1.10 snapshot:


There's also a new feature without any API change:

	Dots can now be drawn by using CAIRO_LINE_CAP_ROUND with
	degenerate sub-paths, (cairo_move_to() followed by either
	cairo_close_path() or a cairo_line_to() to the same location).

And at least the following bugs have been fixed:

 6759  fontconfig option AntiAlias doesn't work in cairo 1.1.2
 6955  Some characters aren't displayed when using xlib (cache u...
 7268  positive device_offset values don't work as source
 * PDF emit_glyph function needs to support bitmapped glyphs
 * PS emit_glyph function needs to support bitmapped glyphs
 * SVG emit_glyph function needs to support bitmapped glyphs
 * PDF: minefield page one is falling back unnecessarily
 * PS/PDF: Fix broken placement for vertical glyphs
 * PS: Fix to not draw BUTT-capped zero-length dash segments
 * Do device offset before float->fixed conversion
 * PS: Fix source surfaces with transformations
 * PS: Fix to not draw BUTT-capped degnerate sub-paths
 * PS: Don't walk off end of array when printing "~>"
 * Fix some memory leaks in the test suite rig
 * SVG: Fix memory leak when using cairo_mask
 * Fix EXTEND_REFLECT and EXTEND_PAD to not crash (though these are
   still not yet fully implemented for surface patterns).

Detailed list of changes since 1.1.10
Behdad Esfahbod:
      Note that create_similar clears surface.
      Accept CAIRO_TEST_TARGET being empty or containing a list of backends to test.
      Add test device-offset-positive.
      Correct comment about expected result in device-offset-positive test.
      Reference images for new test...
      Update .gitignore
      Add create-for-stream.* to .gitignore.
      Replace noinst_ with check_, such that nothing is built with default make
      Make configure generate cairo-features.h. Generate AC_DEFINE and AM_CONDITIONALS
      Minor refinements, mostly to configure.in.
      Removed excess mkdir.
      Pass --cache-file=config.cache and --disable-static to configure from
      Rewrite configure caching.
      Fix circular dependency in cairo.pc and cairo-xlib.pc.
      More configure foo fixes for .pc files.
      Remove config.cache in make distclean.
      Report Xlib Xrender status.
      Update list of ignored header files.
      Ignore *.bak
      Use $RELEASE_OR_SNAPSHOT to determine upload directory.
      Make docs not build by "make all", but by "make doc", "make dist", and "make
      Remove cairo_public from source files.
      Prefix "cairo_*_test_*" symbols with underscore.
      Fix support for non-pkg-config cflags and libs (needed for supporting
      Add "Since: 1.2" to docs for most new API functions.
      Mark enum additions as "Since 1.2" too.
      Require gtk-doc 1.6, and make it ignore cairo_public and cairo_private
      Update lots of docs.
      Hook some more symbols into docs.
      Remove CAIRO_SVG_VERSION_LAST from public header file.
      Minor doc syntax fixes.
      Use $no_x in configure.in.
      Fix an oops.
      Detect and report crashes in tests.
      Make CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD not crash on surface patterns,

Carl Worth:
      Increment CAIRO_VERSION to 1.1.11 after making the 1.1.10 snapshot
      PDF: Don't fallback due to CAIRO_ANTIALIAS_NONE
      PS PDF: Drop unused hex_digit functions, (now that output stream supports %02x)
      test/fallback-resolution: Remove extra call to cairo_show_page
      output-stream: Support %X in addition to %x
      Add new CAIRO_BITSWAP8 macro for swapping the bits within a byte.
      ft-font: Use compile-time test (WORDS_BIGENDIAN) rather than run-time function to test endian-ness.
      SVG: Fix to not crash on bitmapped glyphs
      New bitmap-font test with bundled 6x13 font.
      PS: Add support for emitting bitmapped glyphs into type3 fonts.
      PDF: Push glyph stream creation down from emit glyph to outline/bitmap variants
      PDF: Fix display of bitmapped glyphs (bitmap-font test now passes)
      ROADMAP: Update with 1.1.10 notes as well as new blockers and fixes
      Add 'private' cairo_scaled_font_test_set_max_glyphs_cached_per_font for testing
      Add test/glyph-cache-pressure to demonstrate xlib failure (bug 6955)
      Bug 6955: Fix by adding freeze/thaw around scaled_font glyph cache in _cairo_xlib_surface_show_glyphs
      xlib: Prefer BAIL over FAIL when the cleanup code is also used in succesful cases.
      ROADMAP: Note that bug 6955 is fixed.
      Remove comment which had been incorrectly copied
      ROADMAP: Note that SVG bitmap glyphs now work. Move some bugs to a punt list.
      Fix bug 7268: Fix coordinate space for _cairo_surface_get_extents
      ROADMAP: Note that bug 6617 might already be fixed.
      ROADMAP: Note that cairo_xlib_surface_get_width/height exist now.
      xlib: Fix failure path to do cache thawing cleanup.
      ft-text-antialias-none: Update reference images and igore list.
      ROADMAP: Note that bug 6759 is now fixed.
      Prefer using configure-generated variable for finding stdint.h or similar.
      Add documentation for how degenerate segments and sub-paths are treated.
      Prefer sub_path over subpath in identifiers.
      Prefer sub-path over subpath in documentation.
      Prefer TRUE and FALSE over 1 and 0 for assigning cairo_bool_t values
      Merge branch 'degenerate-path' into cairo
      ROADMAP: Note that degenerate path stuff has been pushed out now.
      Update reference images for ft-text-vertical-layout
      Ignore degenerate-path
      Squelch some bogus compiler warnings about possibly uninitialized values.
      PS: Fix for dash-zero-length
      Add several more stress tests to test/dash-zero-length
      Mark test/leaky-dash as an expected failure.
      Update PDF and PS reference images for test/text-pattern.
      Move device_transform of path to before floating->fixed conversion.
      Add PDF-specific reference image for composite-integer-translate-over
      Add PDF-specific reference image for paint-source-alpha
      Update PDF-specific reference image for scale-source-surface-paint
      ps: Fix transformation of source surfaces.
      ps: Fix degenerate-path test failure.
      Add ps-specific reference image for test/degenerate-path
      Add new libz/libpng suppressions.
      ps: Fix to not walk off the end of the data array.
      Add another suppression due to mysterious occurences in libc
      Add valgrind suppressions for still-reachable memory from XGetDefault and XrmGetStringDatabase
      Add valgrind suppressions for pthread initialization still reachable/possibly lost memory
      Fix a memory leak by removing accidentally duplicated code.
      Fix some leaks in the test suite itself.
      Add yet another XrmGetStringDatabase valgrind suppression.
      SVG: Fix leak in _cairo_svg_surface_mask
      Even _more_ valgrind suppresions for Xrm (XrmGetFileDatabase this time)
      Don't remove INSTALL during maintainer-clean
      Add many references images (and a font) missing from EXTRA_DIST
      Add src/cairo-features.h and test/*.ps to CLEANFILES
      Update version to 1.2.0 and add notes to NEWS file.

Emmanuel Pacaud:
      SVG: dumb implementation of bitmap glyphs.
      SVG: fix bit order for bitmap font data and use a group with matrix

Ian Osgood:
      Update the XCB backend for screen sensitivity.

Jeff Muizelaar:
      Add new test case degenerate-path to show current 'bug'
      Initial support for degenerate-path stroking
      PS: Workaround to avoid splitting final ~> terminating sequence.

Jinghua Luo:
      Add missing prototype for _cairo_lzw_compress.
      Add ft-text-antilaias-none test case demonstrating bug #6759.
      freetype: Respect configurations in font pattern.
      freetype: cleanup _cairo_ft_scaled_glyph_init.
      freetype: Fix warnings in _decompose_glyph_outline.
      freetype: Clear target mode correctly in _cairo_ft_options_merge.
      freetype: Compare all elements in ft_options but not use memcmp.
      freetype: Don't ignore antialias in some cases.
      Turn hinting off to get consistent results for ft-text-antialias-none test case.
      Turn hinting off to get consistent results for ft-text-vertical-layout test case.

Jonathon Jongsma:
      Fix a minor documentation typo in cairo_pop_group_to_source

Keith Packard:
      Skip TrueType font output for PS/PDF until it handles vertical layout.

Kristian Høgsberg:
      Implement 0-padding and field width for _cairo_output_stream_printf().
      Add 'x' case to printf switch so we actually implement %02x.

Michael Emmel:
      Added major updates fixes and enhancements by

Robert O'Callahan:
      Surface size getters for xlib

Torsten Schoenfeld:
      Fix build after recent pixman.h change.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.freedesktop.org/archives/cairo-announce/attachments/20060701/94d554b3/attachment.pgp

More information about the cairo-announce mailing list