GNOME 3590 Published by

A new cairo release 1.4.8 is now available from:

http://cairographics.org/releases/cairo-1.4.8.tar.gz

which can be verified with:

http://cairographics.org/releases/cairo-1.4.8.tar.gz.sha1
e0730d852262d68a68d5a4c4a99657b0baeed13c cairo-1.4.8.tar.gz

http://cairographics.org/releases/cairo-1.4.8.tar.gz.sha1.asc
(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:
fea4f344c46cf5f85c6af3102333008768c55063

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!

-Carl

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:

http://bugzilla.gnome.org/show_bug.cgi?id=431990

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=E9zier splines, transforming and compositing translucent images, and antialiased text rendering. All drawing operations can be transformed by any affine transformation (scale, rotation, shear, etc.).

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 1.1.

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

http://cairographics.org/

The latest releases of cairo can be found at:

http://cairographics.org/releases

Snapshots of in-development versions of cairo:

http://cairographics.org/snapshots

The programming manual for using cairo:

http://cairographics.org/manual

Mailing lists for contacting cairo users and developers:

http://cairographics.org/lists

Answers to some frequently asked questions about cairo:

http://cairographics.org/FAQ

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 point
er 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 implementatio
ns
[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 improvemen
ts 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 CAI
RO_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 reso
urces.
[cairo-xlib-surface] Defer xlib resource cleanup.
[cairo-xlib] Cache freed GCs
[cairo-xlib-display] Cache the screen_info for the lifetime of the di
splay.
[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_tr
ansform()
[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_trap
ezoids
[cairo] cairo_pop_group() returns a NULL pattern
[cairo-clip] Add missing error status for _cairo__clip_intersect_regi
on()
[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_repl
ay()
[cairo-pattern] Return the nil cairo_pattern_t for CAIRO_STATUS_NO_ME
MORY.
[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 cre
ation
[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 err
or.
[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 ser
ver.

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