[cairo] cairo release 1.4.6 now available

Carl Worth cworth at cworth.org
Tue May 1 13:45:18 PDT 2007

A new cairo release 1.4.6 is now available from:


    which can be verified with:

        bfd1532e10789fc4f87a196540c049d88c6ece42  cairo-1.4.6.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.4.6 tag which points to a commit named:

    which can be verified with:
        git verify-tag 1.4.6

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

This is the third update in cairo's stable 1.4 series. It comes a
little less than three weeks since the 1.4.4 release. This release
fixes the broken mutex initialization that made cairo 1.4.4 unusable
on win32, OS/2, and BeOS systems. This release also adds significant
improvements to cairo's PDF backend, (native gradients!), and a couple
of performance optimizations, (one of which is very significant for
users of the xlib backend). See below for more details.


Summary of changes from 1.4.4 to 1.4.6
Repaired mutex initialization
We apologize that cairo 1.4.4 did little more than crash on many
platforms which are less-frequently used by the most regular cairo
maintainers, (win32, OS/2, and BeOS). The mutex initialization
problems that caused those crashes should be fixed now. And to avoid
similar problems in the future, we've now started posting pre-release
snapshots to get better testing, (subscribe to cairo at cairographics.org
if you're interested in getting notified of those and testing them).

PDF Improvements
Thanks to Adrian Johnson, (cairo PDF hacker extraordinaire), we have
several improvements to cairo's PDF backend to announce:

Native gradients:

  As of cairo 1.4.6, cairo will now generate native PDF gradients in
  many cases, (previously, the presence of a gradient on any page
  would force rasterized output for that page). Currently, only
  gradients with extend types of PAD (the default) or NONE will
  generate native PDF gradients---others will still trigger
  rasterization, (but look for support for other extend modes in a
  future release). Many thanks to Miklós Erdélyi as well, who did the
  initial work for this support.

Better compatibility with PDF viewers:

  The PDF output from cairo should now be displayed correctly by a
  wider range of PDF viewers. Adrian tested cairo's PDF output against
  many PDF viewers, identified a common bug in many of those viewers
  (ignoring the CTM matrix in some cases), and modified cairo's output
  to avoid triggering that bugs (pre-transforming coordinates and
  using an identity matrix).

Better OpenType/CFF subsetting:

  Cairo will now embed CFF and TrueType fonts as CID fonts.

Performance optimizations
Faster cairo_paint_with_alpha:

  The cairo_paint_with_alpha call is used to apply a uniform alpha
  mask to a pattern. For example, it can be used to gradually fade an
  image out or in. Jeff Muizelaar fixed some missing/broken
  optimizations within the implementation of this function resulting
  in cairo_paint_with_alpha being up to 4 times faster when using
  cairo's image backend.

Optimize rendering of "off-screen" geometry:

  Something that applications often do is to ask cairo to render
  things that are either partially or wholly outside the current clip
  region. Since 1.4.0 the image backend has been fixed to not waste
  too much time in this case. But other backends have still been

  In particular, the xlib backend has often performed quite badly in
  this situation. This is due to a bug in the implementation of
  trapezoid rasterization in many X servers.

  Now, in cairo 1.4.6 there is a higher-level fix for this
  situation. Cairo now eliminates or clips trapezoids that are wholly
  or partially outside the clip region before handing the trapezoids
  to the backend. This means that the X server's performance bug is
  avoided in almost all cases.

  The net result is that doing an extreme zoom-in of vector-based
  objects drawn with cairo might have previously brought the X server
  to its knees as it allocated buffers large enough to fit all of the
  geometry, (whether visible or not). But now the memory usage should
  be bounded and performance should be dramatically better.

Behdad contributed an impressively long series of changes that
organizes cairo's internals in several ways that will be very
beneficial to cairo developers. Thanks, Behdad!

Behdad has also provided a utility for generating malloc statistics,
(which was used during the great malloc purges of 1.4.2 and
1.4.4). This utility isn't specific to cairo so may be of benefit to
others. It is found in cairo/util/malloc-stats.c and here are Behdad's
notes on using it:

    To build, do:

        make malloc-stats.so

    inside util/, and to use, run:

        LD_PRELOAD=malloc-stats.so some-program

    For binaries managed by libtool, eg, cairo-perf, do:

        ../libtool --mode=execute /bin/true ./cairo-perf
        LD_PRELOAD="../util/malloc-stats.so" .libs/lt-cairo-perf

Finally, the cairo-perf-diff-files utility was enhanced to allow for
generating performance reports from several runs of the same backend
while some system variables were changed. For example, this is now
being used to allow cairo-perf to measure the performance of various
different acceleration architectures and configuration options of the
X.org X server.

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, as well as PDF, PostScript, and SVG
file output. Experimental backends include OpenGL (through glitz),
Quartz, 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 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:


Log of all changes from 1.4.4 to 1.4.6
Adrian Johnson (10):
      Add support for creating CID/composite font subsets
      Make CFF Subsetting create CID subsets
      Add CFF CID Fallback
      Make cairo-output-stream.c accept variable width printf fields
      Enable embedding of CID fonts in PDF
      Exclude Type1 fonts from CID subsets
      Ensure _cairo_scaled_font_subsets_map_glyph() returns correct values
      Add support for transparent gradients
      PDF: Change CTM to identity
      Fix cygwin compile error

Behdad Esfahbod (102):
      [cairoint.h] Define WARN_UNUSED_RESULT if undefined
      [pixman] Rename icint.h to pixmanint.h
      Put back __inline definition for MSC compilers, in both cairo and pixman
      Rename cairo-font.c to cairo-font-face.c
      [doc] Make section title capitalization more consistent
      [test] Allow bypassing all test targets by setting CAIRO_TEST_TARGET=" "
      [perf] Make targets more consistent with the test suite
      [boilerplate] s/_cairo_test_content_name/cairo_boilerplate_content_name/g
      [boilerplate] Add cairo_boilerplate_get/free_targets
      [cairo-mutex] Remove multiple-inclusion guards from cairo-mutex-list-private.h
      [cairo-mutex] Err on unintended inclusion of cairo-mutex-list-private.h
      [cairo-mutex] Remove unneeded #undef CAIRO_MUTEX_EXTERNAL
      [cairo-freelist] Remove redundant struct declarations
      [cairo-truetype-subset] Shut gcc warning up
      [cairo-mutex] Inlucde cairo-features.h and config.h
      [cairo-mutex] Define CAIRO_MUTEX_NOOP
      [cairo-mutex] Define and use CAIRO_MUTEX_USE_GENERIC_INITIALIZATION
      [cairo-mutex] Err if at least one of mutex macros are not defined
      [cairo-mutex] Use CAIRO_MUTEX_NOOP when applicable
      [cairo-mutex] Add default no-op implementation for CAIRO_MUTEX_FINI
      [cairo-mutex] Add default implementation for CAIRO_MUTEX_INIT
      [cairo-mutex] Prefer "#if CAIRO_SOMETHING" over "#if defined CAIRO_SOMETHING"
      [cairo-commit] Just warn for BeOS and let the sanity check macros err
      [cairo-mutex] Support non-reentrant compilation if CAIRO_NO_MUTEX defined
      [cairo-mutex] Warn if no mutex definition found and let sanity macros err
      [cairo-commit] Update attribution headers in cairo-mutex-private.h
      [cairo-mutex] Switch to HAVE_WINDOWS_H to use Win32 mutexes
      [configure.in] Support --disable-pthread
      [cairo-mutex] If no mutex implementation is found, should #error instead of #warning
      [boilerplate] Rename quartz-boilerplate to boilerplate-quartz
      [boilerplate] Rename test-beos to boilerplate-beos
      [boilerplate] Rename test-directfb to boilerplate-directfb
      [boilerplate] Move includes around
      [boilerplate] Strip xlib boilerplate into cairo-boilerplate-xlib*
      [boilerplate] Properly namespace boilerplate methods
      [boilerplate] Sort backend entries in Makefile.am alphabetically
      [boilerplate] Add a boolean is_vector to boilerplate target type
      [boilerplate/test] Move vector_ignored_tests from boilerplate/ to test/
      [boilerplate] Fix renaming typo
      [boilerplate] Remove unused variables
      [boilerplate] Strip ps boilerplate into cairo-boilerplate-ps*
      [boilerplate] Rename xcairo_surface_set_user_data to cairo_boilerplate_surface_set_user_data
      [boilerplate] Strip pdf boilerplate into cairo-boilerplate-pdf*
      [boilerplate] Strip svg boilerplate into cairo-boilerplate-svg*
      [boilerplate] Strip xcb boilerplate into cairo-boilerplate-xcb*
      [boilerplate] Minor indentation fix
      [boilerplate] Strip glitz boilerplate into cairo-boilerplate-glitz*
      [directfb] Silence compiler warning
      [boilerplate] Remove empty cleanup_win32
      [boilerplate] Rename create_win32_surface to _cairo_boilerplate_win32_create_surface
      [boilerplate] Strip win32 boilerplate into cairo-boilerplate-win32*
      [boilerplate] Clean up includes and remove unnecessary ones
      [boilerplate] Remove leftover call to cairo_test_log
      [boilerplate] Fix typos in cairo-boilerplate-glitz.c
      [boilerplate] Cleanup includes in cairo-boilerplate-beos.cpp
      [boilerplate] Move xasprintf to xmalloc.c
      [boilerplate] Strip test-surfaces boilerplate into cairo-boilerplate-test-surfaces*
      [boilerplate] Add cairo_boilerplate_format_from_content
      [pixman] Fix typo in Makefile.am
      [Makefile.am] Add a "make snapshot" target
      [xlib] Move cairo_xlib_surface_t definition into cairo-xlib-surface-private.h
      [boilerplate] Minor indentation fix
      [cairo-surface] Move cairo_surface_t struct in cairo-surface-private.h
      [xlib] Get rid of _cairo_xlib_test_disable_render
      [paginated] Move cairo_paginated_mode_t to cairo-types-private.h
      [pdf] Move cairo_pdf_surface_t to cairo-pdf-surface-private.h
      [boilerplate] Add cairo-boilerplate-xlib.h to Makefile.am
      [paginated] Move cairo_paginated_surface_t to cairo-paginated-surface-private.h
      [pdf] Get rid of _cairo_pdf_test_force_fallbacks
      [ps/pdf/svg] Fix minor coding style issue
      [pdf] Fix header file header!
      [ps] Move cairo_ps_surface_t to cairo-ps-surface-private.h
      [ps] Get rid of _cairo_ps_test_force_fallbacks
      [svg] Move cairo_svg_surface_t to cairo-svg-surface-private.h
      [paginated] Include cairo-surface-private.h
      [svg] Get rid of _cairo_svg_test_force_fallbacks
      Move cairo_cache_t to cairo-types-private.h
      [scaled-font] Move cairo_scaled_font_t to cairo-scaled-font-private.h
      Move cairo_hash_entry_t to cairo-types-private.h
      Move a couple typedefs to cairo-types-private.h
      [scaled-font] Get rid of _cairo_scaled_font_test_set_max_glyphs_cached_per_font
      [check-def.sh] Do not allow _cairo_.*_test_ symbols anymore
      [RELEASING] Remove *-test.h from instructions
      [doc/public/Headers.mk] Update.
      Update .gitignore to ignore .perf
      [.gitignore] Add cairo-*.*.*
      [boilerplate] Add missing headers.  Oops!
      Add util/ to distribution
      [util] Import my malloc wrapper that prints simple statistics
      [util] Change make target from "tools" to "util"
      [cairo-mutex] Properly paranthesize macro arguments
      [BeOS] Add mutex implementation
      [BeOS] Remove old-style mutex initialization cruft
      [cairo-mutex] Add a poor man's mutex implementation in case of CAIRO_NO_MUTEX
      [ROADMAP] Add URL to David Turner's patchset
      [ROADMAP] Add cairo_xlib_surface_get_xrender_format()
      [perf] Don't build cairo-perf in "make all"
      [perf] Check availability before including nonstandard headers
      [ROADMAP] Mark clipping trapezoids done
      [TODO] Add various items discussed recently
      [cairo-mutex] Fix CAIRO_MUTEX_FINALIZE definition to take parantheses
      [cairo-mutex-private.h] Move implementation-specific parts to cairo-mutex-type-private.h

Carl Worth (29):
      Update version to 1.4.5 after the 1.4.4 release
      Fix two bugs in documentation code sample of cairo_arc
      perf: Add new paint-with-alpha test
      Allow fbCompositeSrc_x888x8x8888mmx when destination has alpha
      Add a content value to solid patterns
      Correct misattribution of Mathias' work to Chris
      cairo-perf-diff-files: Remove some overzealous option parsing.
      cairo-perf-diff: Fix implementation of --help
      cairo-perf-diff-files: Add new --min-change option, (replacing third positional argument)
      Replace old_filename and new_filename with a filenames array
      Replace old and new reports with reports array
      Move implementation of getline and strndup
      cairo-perf-diff: Separate command-line options within the args structure
      cairo-perf-diff-files: Sort and compute stats at the time of loading a report
      cairo-perf-diff-files: Simplify code to grow report->tests
      cairo-perf-diff-files: Use pointers instead of indexing to iterate over reports
      Implement support for generating a report from more than two files
      Make the traditional speedup vs. slowdown report style available again
      cairo-perf-diff: Repair command-line option parsing.
      cairo-perf-diff-files: Always print old and new configuration names
      Don't test PDF tests known to fail due to poppler limitations
      Clip trapezoids that are partially (or wholly) outside the clip region.
      Clarify documentation of cairo_in_stroke and cairo_in_fill
      Fix typo in Makefile preventing builds from succeeding
      pixman.h: Add missing definition of WARN_UNUSED_RESULT
      cairo-perf-diff-files: Add missing include of libgen.h for basename
      Add missing prototypes for getline and strndup
      NEWS: Add notes for cairo 1.4.6
      Increment version to 1.4.6 (and library versioning to 13:3:11)

Chris Wilson (22):
      Change of email address.
      Update .gitignore
      Add suppression for leak from XauFileName.
      create-for-stream - free resources after test failure.
      cairo-perf - Check that the surface is created.
      cairo-perf - add the missing newline.
      Define a CAIRO_ALPHA_IS_OPAQUE variant that operates on uint16.
      Create opaque similar solid surfaces when possible.
      cairo-xlib-surface - track picture properties.
      Optionally provide a pattern to use for creating a similar solid surface.
      Embed simple clip XRectangles in cairo_xlib_surface_t
      Fix command line for running cairo-perf under valgrind.
      Add callgrind output files to CLEANFILES and .gitignore.
      Include cairo-perf in make check
      cairo-png - handle short reads
      Clean up compiler warnings from cairo-png
      cairo-boilerplate - use xmalloc and friends
      Do not print out libpng error messages to stderr.
      Add a _cairo_error() to png_simple_error_callback()
      Free all memory when cairo-perf exits.
      Minor typo in cairo_surface_destroy() documentation.
      [cairo-xlib-surface.c] Free the Pixmap on surface construction failure.

Dave Yeo (1):
      [OS2] Fix #include "cairo-mutex-list-private.h"

Jeff Muizelaar (1):
      Fix bugs in fbCompositeSrc_8888x8x8888mmx and fbCompositeSrc_x888x8x8888mmx

Kouhei Sutou (1):
      Support MinGW DLL compilation

Mathias Hasselmann (8):
      [cairo-perf] Use full 64 bit of the clock cycle counters to avoid overflows
      Merge branch 'master' of git+ssh://hasselmm@git.freedesktop.org/git/cairo
      Merge branch 'master' of git+ssh://hasselmm@git.freedesktop.org/git/cairo
      Update _cairo_mutex_initialized during initialization.
      Introduce CAIRO_MUTEX_FINALIZE as counter-part for CAIRO_MUTEX_INITIALIZE
      Reintroduce DllMain as deterministic mutex initialization path
      Properly use CAIRO_MUTEX_{INIT,FINI} and remove CAIRO_MUTEX_LIST_PRIVATE_H sentinal before explicitly including the mutex list.
      Define INT32 limits on MSVC as noticed by Hans-Jürgen Schäler

Peter Weilbacher (5):
      Fix build break related to mutexes on OS/2
      Use deprecated png symbol only when compiling against old version
      Merge branch 'master' of git+ssh://pmw@git.freedesktop.org/git/cairo
      [perf] Add OS/2 implementation for timer routines
      Merge branch 'master' of git+ssh://pmw@git.freedesktop.org/git/cairo
-------------- 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/attachments/20070501/9074d44e/attachment.pgp

More information about the cairo mailing list