[cairo-announce] cairo release 1.4.8 now available

Carl Worth cworth at cworth.org
Fri Jun 8 16:14:28 PDT 2007

A new cairo release 1.4.8 is now available from:


    which can be verified with:

        e0730d852262d68a68d5a4c4a99657b0baeed13c  cairo-1.4.8.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.8 tag which points to a commit named:

    which can be verified with:
        git verify-tag 1.4.8

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

This is the fourth update in cairo's stable 1.4 series. It comes just
over five weeks after the 1.4.6 release. This release includes a
thread-safe surface-cache for solid patterns which significantly
improves text rendering with the xlib backend. Also, dozens of error
paths in cairo have been fixed thanks to extensive fault-injection
testing by Chris Wilson.

Have fun!


What's new in 1.4.8 compared to 1.4.9

Surface cache for solid patterns
Originally written by Jorn Baayen, the introduction of a small cache
for surfaces created for solid patterns improves performance
dramatically. For example, this reduces the volume of X requests
during text rendering to the same level as Xft.

This cache first made its appearance in a 1.3.x snapshot, but was
removed before appearing in any previous major release due to
complications with multi-threaded programs. For example, programs like
evince that would carefully restrict usage of cairo-xlib to a single
thread were unpleasantly surprised to find that using cairo-image in a
separate thread could trigger X requests.

Behdad Esfahbod designed a fix which was implemented by Chris
Wilson. Now, the necessary X requests are queued up until the next
time the application directly operates on an xlib surface.

Improved error handling paths
Chris Wilson continued the excellent work he started in cairo 1.4.4 to
make cairo much more robust against out-of-memory and other errors. He
applied his memory allocation fault injection cairo's main test suite,
(previously he had applied it to cairo's performance suite).

Chris's testing found dozens of bugs which he fixed. Many of these
bugs had perhaps never been hit by any users. But at least one was
hit by the gnome-about program which resulted in dozens of duplicated
bug reports against that program:


We were very pleasantly surprised to see this bug get fixed as a
side-effect of Chris's work. Well done, Chris!

Other fixes
Cleanup of mutex declarations (Behdad Esfahbod)

Remove unnecessary clip region from SVG output (Emmanuel Pacaud)

Remove Xsun from the buggy_repeat blacklist (Elaine Xiong)

ATSUI: Fix glyph measurement: faster and more correct (Brian Ewins)

Quartz: fixed 'extend' behaviour for patterns, improved pattern performance,
and a few smaller correctness fixes. (Brian Ewins, Vladimir Vukicevic)

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 changes from 1.4.6 to 1.4.8
Adrian Johnson (3):
      Ensure surface backend finish() is never called more than once.
      CFF Subsetting: Filter out Unique ID from subset
      TrueType Subsetting: Remove post table

Behdad Esfahbod (19):
      [cairo-mutex] Rename macro arguments from "name" to "mutex"
      [cairo-mutex] Make sure CAIRO_MUTEX_FINI() evaluates its argument once
      [cairo-mutex] Make CAIRO_MUTEX_INIT/FINI take mutex object, not pointer to it
      [cairo-mutex] Make sure mutex implementation declares enough macros
      [cairo-mutex] Improve error message if no thread implementation found
      [RELEASING] Update GNOME URL to point to 2.19 planning page
      [cairo-mutex] Fix usage of CAIRO_MUTEX_DECLARE()
      [cairo-mutex] Rewrite defaults for CAIRO_MUTEX macros not defined by the implementation
      [cairo-mutex] Remove NOOP definition of CAIRO_MUTEX_INITIALIZE
      [cairo-mutex] Define a NOOP CAIRO_MUTEX_FINALIZE() for pthread
      [cairo-mutex] Document the API for adding cairo_mutex_t implementations
      [boilerplate] Fix typo
      [cairo-mutex] Fix typo.
      [TODO] Add link to cairo_copy_clip() proposal
      [test] If a test target fails, end the test
      [docs] Update to latest source changes and kill warnings
      [Type1] #include <ctype.h> (#10989)
      [ROADMAP] Add link for a8mask patch
      [NEWS] Add par about Chris 'ickle' Wilson's error-handling improvements work

Boris Zbarsky (1):
      [quartz] implementing release_source_image (#11059)

Brian Ewins (10):
      [atsui] use ATSGlyphGetScreenMetrics to measure glyphs.
      [quartz] Refactor code to create a CGImageRef from a pattern
      [quartz] implement CAIRO_EXTEND_NONE
      [quartz] implement CAIRO_EXTEND_REFLECT
      [atsui] clean up warnings
      [atsui] remove unused code
      [quartz] ensure that line widths are scaled.
      [quartz] fixes the offsets in the font-matrix test
      [quartz] fall back on extended gradients
      [NEWS] add note about quartz fixes

Carl Worth (10):
      Increment version to 1.4.7 after the 1.4.6 release
      ROADMAP: Add bugs for 565 and 655 Visuals to the list
      Document behavior of color stops added with identical offsets.
      Fix typo in comment.
      Add CAIRO_INTERNAL_FORMAT_RGB16_565 and prefer it over deprecated CAIRO_FORMAT_RGB16_565
      Fix return value of cairo_surface_write_to_png for unsupported formats
      Remove stale reference to cairo-xlib-test.h
      Update release notes for 1.4.8
      Add include of X11/Xlib.h to cairo-xlib-xrender.h
      Update version to 1.4.8 (and libtool info to 13:4:11)

Chris Wilson (72):
      [cairo-xlib-surface] Check that the acquire surfaces are xlib surfaces
      [pixman] Free the old rects if we fail to allocate new.
      [cairo-xlib] Split per-display attributes from per-screen.
      [cairo-xlib] Introduce a workqueue for deferred destruction of X resources.
      [cairo-xlib-surface] Defer xlib resource cleanup.
      [cairo-xlib] Cache freed GCs
      [cairo-xlib-display] Cache the screen_info for the lifetime of the display.
      [cairo-xlib-display] Allocate the close_display hooks from a freelist.
      [cairo-xlib-surface] Defer application of clip mask until required.
      [cairo-pattern] Cache surface for solid patterns
      [cairo-pattern] Don't cache fallback surfaces
      [NEWS] Surface cache for solid patterns
      [cairo-color] Only compare the shorts for equality.
      [cairo-paginated-surface] Propagate malloc failure
      [test-fallback-surface] Destroy the backing image on malloc failure.
      [cairo-test] Destroy the check image on failure
      [cairo-boilerplate] Protect against the nil cairo_scaled_font_t
      [cairo-boilerplate-ps] Destroy the target on creation failure
      [test/nil-surface] Destroy the auxiliary context on failure paths.
      [cairo-pattern] Cleanly handle an invalid pattern in cairo_pattern_transform()
      [cairo-font-options] Check for the nil-object.
      [cairo-surface] Check for errors when generating the scaled font.
      [test/fallback-resolution] Cleanup after test failure
      [test/in-fill-empty-trapezoid] Cleanup after test failure.
      [cairo-xcb-surface] Fix compilation
      [cairo-scaled-font] Check _cairo_scaled_glyph_loop() status
      [cairo-pattern] Return status from _cairo_pattern_init_copy()
      [cairo-xlib-surface] Free the allocation if we fail to queue the work.
      [cairo] Return after detecting the invalid font-options.
      [ciro-surface-fallback] Propagate status for _clip_and_composite_trapezoids
      [cairo] cairo_pop_group() returns a NULL pattern
      [cairo-clip] Add missing error status for _cairo__clip_intersect_region()
      [cairo] Use _cairo_clip_nil for CAIRO_STATUS_NO_MEMORY
      [cairo-clip] Correctly report allocation failure
      [cairo-scaled-font] Check for allocation failure.
      [cairo-meta-surface] Add a surface->status guard to meta_surface_replay()
      [cairo-pattern] Return the nil cairo_pattern_t for CAIRO_STATUS_NO_MEMORY.
      [cairo-truetype-subset] Set CAIRO_STATUS_NO_MEMORY on malloc failure.
      [valgrind-suppressions] Update to cover XrmGetStringDatabase
      [cairo-xlib-screen] Clear the gc_needs_clip_reset after use.
      [cairo-scaled-font] Return status of _cairo_scaled_font_glyph_path()
      [cairo-path] Check for errors during the count.
      [cairo-traps] Initialize traps to use embedded buffer.
      [pixman] Propagate allocation failure.
      [cairo-scaled-font-subsets] Correctly destroy the hash table.
      [cairo-paginated-surface] Check surface status during finish.
      [cairo-xlib-surface] Always nullify GC after pushing to screen.
      [cairo-xlib-screen] Increase number of GC depths.
      [cairo-ft-font] Destroy surface if glyph transformation fails.
      [cairo-deflate-stream] Free the stream on error.
      [cairo-ft-font] Race between unscaled removal from hash table and creation
      [cairo-ft-font] Destroy the unscaled reference on error.
      [cairo-ft-font] Destroy the path on error.
      [cairo-scaled-font-subsets] Destroy the parent and subfont on error.
      [cairo-truetype-subset] Destroy the arrays on error.
      [cairo-scaled-font-subsets] Destroy the glyph if we fail to cache it.
      [cairo-gstate] Remove a redundant conditional.
      [cairo-pattern] Check for the nil surface.
      [cairo-pdf-surface] Free allstops on error.
      [cairo-pdf-surface] emit_pattern_stops() array overrun.
      [cairo-truetype-subset] Avoid a potential 0 byte allocation.
      [cairo-pattern] Fully initialise the error pattern.
      [cairo-ft-font] Remove erroneous cached font faces.
      [cairo-scaled-font-subsets] Shortcut empty subset.
      [cairo-gstate] Check status on existing fonts.
      [cairo-gstate] Check scaled font status.
      [cairo-ps-surface] Check status of glyph_lookup.
      [cairo] Propagate surface->status on cairo_t creation.
      [cairo-ft-font] Propagate error rather than asserting.
      [cairo-ft-font] Markup error paths with _cairo_error().
      [cairo-scaled-font] Skip the mask composition onto the surface on error.
      [cairo-bentley-ottmann] Malloc reduction.

Emmanuel Pacaud (1):
      SVG: Don't clip SVG element, as clipping region is implicit.

James Cloos (1):
      [cairo-directfb-surface] Fix typo from commit a8c8e17d

Jinghua Luo (2):
      glitz: fix a typo preventing build glitz backend from succeeding.
      glitz: kill some compiler warnings.

Kouhei Sutou (1):
      [doc] Minor documentation fixes

Luo jinghua (1):
      [cairo-xlib-surface]: flush work queue before sending glyphs to X server.

Vladimir Vukicevic (3):
      [test] add XFAIL test surface-pattern-big-scale down
      [misc] make _cairo_image_surface_nil_invalid static const
      [quartz] fix DO_IMAGE

elaine (1):
      [xlib] The buggy_repeat path should be removed for Xsun now
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://cairographics.org/archives/cairo-announce/attachments/20070608/b450a3d9/attachment.pgp 

More information about the cairo-announce mailing list