[cairo-announce] cairo snapshot 1.3.12 now available

Carl Worth cworth at cworth.org
Sat Jan 20 03:23:40 PST 2007

A new cairo snapshot 1.3.12 is now available from:


    which can be verified with:

        d84b48e06b2499e894f81c42361650ab5e00b974  cairo-1.3.12.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.3.12 tag which points to a commit named:

    which can be verified with:
        git verify-tag 1.3.12

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

The relentless march toward the cairo 1.4 release continues, (even if
slightly late out of the starting blocks in 2007). This is the sixth
development snapshot in the 1.3 series. It comes 4 weeks after the
1.3.10 snapshot.

What's new in cairo 1.3.12
As usual, this snapshot has some fun performance improvements to show

image-rgba long-lines-uncropped-100  470.08 -> 4.95: 94.91x speedup
image-rgb  long-lines-uncropped-100  461.60 -> 4.96: 93.02x speedup

This 100x improvement, (and yes, that's 100x, not 100%), in the image
backend occurs when drawing large shapes where only a fraction of the
shape actually appears in the final result, (the rest being outside
the bounds of the destination surface). Many applications should see
speedups here, and the actual amount of speedup depends on the ratio
of non-visible to visible portions of geometry.

[Note: There remains a similar performance bug when drawing mostly
non-visible objects with the xlib backend. This is due to a similar
bug in the X server itself, but we hope a future cairo snapshot will
workaround that bug to get a similar speedup with the xlib backend.]

image-rgba       unaligned_clip-100    0.09 -> 0.06:  1.67x speedup
image-rgb        unaligned_clip-100    0.09 -> 0.06:  1.66x speedup

This speedup is due to further MMX optimization by Soeren Sandmann for
a case commonly hit when rendering PDF files, (and thanks to Jeff
Muizelaar for writing code to extract the test case for us).

There's another MMX optimization in this snapshot (without a fancy
speedup chart) by Dan Williams which improves compositing performance
specifically for the OLPC machine.

Thanks to Adrian Johnson, cairo's PDF output is now much more
efficient in the way it encodes text output. By reducing redundant
information and adding compression to text output streams, Adrian
achieved a ~25x improvement in the efficiency of encoding text in PDF
files, (was ~45 bytes per glyph and is now ~1.6 bytes per glyph).

Bug fixes
In addition to those performance improvements, this snapshot includes
several bug fixes:

 * A huge number of bug fixes for cairo-atsui text rendering, (for mac
   OS X). These bugs affect font selection, glyph positioning, glyph
   rendering, etc. One noteworthy bug fixes is that
   cairo_select_font_face will no longer arbitrarily select bold nor
   italic when not requested, (at least not when using a standard CSS2
   font family name such as "serif", "sans-serif", "monospace", etc.).
   All these fixes are thanks to Brian Ewins who continues to do a
   great job as the new cairo-atsui maintainer.

 * Fix PDF output so that images that are scaled down no longer
   mysteriously repeat (Carl Worth).

 * Fix segfault on Mac OS X dues to attempt to measure extents of a
   zero-length string (Behdad Esfahbod).

 * Fix text extents to not include the size of initial/trailing
   non-inked characters (Behdad Esfahbod).

API tweaks
Three functions have had API changes to improve consistency. Note that
the API functions being changed here are all functions that were
introduced as new functions during these 1.3.x snapshots. As always,
there will not be any API changes to functions included in a major
release (1.2.x, 1.4.x, etc.) of cairo.

The changes are as follows:

 * Rename of cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list.

 * Change cairo_get_dash_count to return an int rather than accepting a
   pointer to an int for the return value.

 * Change cairo_get_dash to have a void return type rather than
   returning cairo_status_t.

It's possible there will be one more round of changes to these
functions, (and perhaps cairo_get_color_stop as well), as we seek to
establish a unifying convention for returning lists of values.

Summary of all changes from 1.3.10 to 1.3.12
Adrian Johnson (3):
      PDF: Use Td where possible instead of Tm for positioning glyphs
      Add cairo-deflate-stream.c
      PDF: Compress the content stream

Alp Toker (1):
      Fix various code/comment typos

Behdad Esfahbod (8):
      [cairo-scaled-font] Skip invisible glyphs (like space) in glyph_extents() (#9422)
      Don't call into backends if num_glyphs is zero (#5177)
      [test] Add new test text-zero-len (#5177)
      In _cairo_scaled_font_text_to_glyphs, bail if text is zero-length (#5177)
      [src/Makefile.am] Don't remove cairo-features.h in "make clean"
      Spell check the docs
      [cairo-type1-subset] Do not use an array of pointers, to reduce .data size
      [TODO] Move some items from ROADMAP, and some new ones, into TODO

Brian Ewins (10):
      [ATSUI] Compute glyph extents from the bounding boxes of their paths (#9350)
      [test/text-rotate] Use the same text for measuring and printing
      [ATSUI] Scale glyphs using _cairo_matrix_compute_scale_factor (#9350)
      [perf/cairo-perf-diff] Pass CAIRO_AUTOGEN_OPTIONS to autogen.
      [ATSUI] Select Bitstream Vera and CSS font families reliably.
      [ATSUI] correct the rotation of glyph paths. (#9378)
      [ATSUI] Refactor code for creating CGBitmapContexts from cairo surfaces.
      [ATSUI] [1/2] Implement CAIRO_SCALED_GLYPH_INFO_SURFACE support.(#9467)
      [ATSUI] [2/2] Implement CAIRO_SCALED_GLYPH_INFO_SURFACE support.(#9467)
      [test] Test handling of out-of-range glyph indexes. (#9530)

Carl Worth (14):
      Bump version to 1.3.11 after making 1.3.10 snapshot
      Add long-lines perf case
      Restrict _clip_and_composite_trapezoids to destination extents
      Add unaligned_clip perf case courtesy of Jeff Muizelaar
      cairo-path-fixed: Don't add redundant, succesive MOVE_TO operations to the path
      Fix cairo_get_dash and cairo_get_dash_count APIs
      Add new scale-down-source-surface-paint test
      PDF: Fix CAIRO_EXTEND_NONE for source surface patterns
      Fix two misspellings in a recent comment.
      ROADMAP: Add 3 bugs to fix before the next snapshot
      .gitignore: Add text-glyph-range
      cairo-wideint: Fix to eliminate comparison of signed and unsigned values
      NEWS: Add notes for 1.3.12 snapshot
      configure.in: Increment cairo version to 1.3.12

Dan Amelang (1):
      Use the "-" option (instead of "-a") when calling "strings"

Dan Williams (1):
      Implement pixman fbCompositeSrc_8888x0565mmx

Jinghua Luo (2):
      glitz: fix all compiler warnings in glitz backend.
      Glitz: position large glyph correctly.

Jonathan Watt (1):
      Remove WINVER from public header file

Kalle Vahlman (1):
      Add --use-ms option to cairo-perf-diff-files

Kjartan Maraas (1):
      Remove unused variables (#7963)

M Joonas Pihlaja (1):
      Make UTF-8 output from cairo-perf-diff-files optional

Pavel Roskin (1):
      Clean up _fbOnes()

Peter Weilbacher (1):
      Fix for OS/2 display drivers that cannot handle 32bit output (feed them a 24bit buffer instead).

Robert O'Callahan (1):
      Rename cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list

Soeren Sandmann (1):
      Add SRC and IN implementations to avoid CompositeGeneral in some cases hit by PDF rendering

Vladimir Vukicevic (4):
      Merge branch 'master' of git+ssh://git.cairographics.org/git/cairo
      [nquartz] use pattern snapshots, and correctly setup/teardown source
      [nquartz] add test reference files for nquartz backend
      Merge branch 'master' of git+ssh://git.cairographics.org/git/cairo

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:

-------------- 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/20070120/faaf43bf/attachment.pgp

More information about the cairo-announce mailing list