[cairo-announce] cairo snapshot 1.5.10 now available

Carl Worth cworth at cworth.org
Wed Feb 20 10:22:17 PST 2008

A new cairo snapshot 1.5.10 is now available from:


    which can be verified with:

        8c97a24f3297bade49508d833cf9218f42e88b8c  cairo-1.5.10.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.5.10 tag which points to a commit named:

    which can be verified with:
        git verify-tag 1.5.10

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

This is the fifth snapshot in cairo's unstable 1.5 series. It comes 3
weeks after the 1.5.8 snapshot. This snapshot adds one new API
function, (cairo_has_current_point), and the usual mix of
improvements, (more efficient PostScript/PDF output, optimized
stroking), and fixes (more robust error-handling, etc.).

With this snapshot we're getting *really* close to cairo 1.6. The
number of test-suite failures is rapidly approaching zero and the
list of things still needing to be done is getting very short.

I am a bit disappointed to not have the change from 16.16 fixed point
to 24.8 fixed point in this snapshot. We did a ton of work to make
this possible, (including fixing the infinite loop bug it was exposing
earlier), and I even had the change in place just before releasing the
snapshot. But at the last moment we noticed that the change caused
some regressions in PS/PDF/SVG rendering, (pattern offsets are wrong
at least), so we pulled it out. But look for another snapshot soon
with that change. And see details below on what *did* make it in.

Do have fun with this. And try your best to break it. We're especially
interested in learning of any regressions in quality or performance of
1.5.10 compared to any 1.4.x release of cairo.



What's new in cairo 1.5.10 compared to cairo 1.5.8
Add a new function to query if there is a current point:

	cairo_has_current_point (cairo_t *cr);

There is no current point immediately after cairo_create(), nor after
cairo_new_path() or cairo_new_sub_path(). There is a current point
after any of the path-creation functions, (cairo_move_to,
cairo_line_to, cairo_curve_to, etc.).

With this new function, we also revert the change of the return type
of cairo_get_current_point from cairo 1.5.8, (it's now a void function

Optimize stroking code to avoid repeated calculation of redundant
values, (particularly significant for very large, offscreen paths).

General fixes
Patch a few more potential buffer overruns, (due to integer

Many fixes and improvements to cairo's error-handling, (ensure that
correct error values are returned, clean up memory leaks on
error-handling paths, etc.).

Fix a potential infinite loop when stroking a spline with a pen that
has been transformed to a line segment.

Remove treating NULL as a synonym for a valid cairo_font_options_t*
with default values, (a change that had been introduced as of cairo

Remove the altered handling of tolerance and fallback-resolution that
had been introduced as of cairo 1.5.4.

Pass the original Drawable, (as opposed to the root window), to
XCreatePixmap when creating a similar surface. This gives the X server
more information so that it can be clever and efficient.

Fix the rendering of repeating and reflecting patterns.

Ensure miter limit is always >= 1, (smaller limits are not meaningful,
but they can cause some PDF viewers to fail to display pages).

Generate more efficient output when the same path is used for both
fill and stroke.

Start sharing much of the cairo-pdf code rather than implementing very
similar code in cairo-ps.

Implement native support for repeating and reflecting linear

Implement reflected surface patterns.

Ensure miter limit is always >= 1, (smaller limits are not meaningful,
but they can cause some PostScript viewers to crash).

Generate PostScript that will perform more efficiently and use less
memory on printers, (use currentfile instead of a giant string array
for image data, and avoid using PostScript patterns for paint() and
fill() when possible).

Avoid unnecessary rasterization when copying a "similar" surface to
another svg surface, (allow the SOURCE operator to be implemented with
all-vector operations if there are no underlying objects).

Eliminate infinite loop when attempting to render an empty string.

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 include 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 versions of cairo can always be found at:


Documentation on using cairo and frequently-asked questions:


Mailing lists for contacting cairo users and developers:


Roadmap and unscheduled things to do, (please feel free to help out):


Summary of all changes from cairo 1.5.8 to 1.5.10
Adrian Johnson (34):
      PDF: Use correct surface size when emitting patterns
      Update operator-source PS ref images
      PS: Implement linear gradient repeat and reflect
      Update clip-operator ps ref image
      Add operator-clear ps ref image
      PS: Implement reflected surface patterns
      Add linear-gradient-reflect ps ref image
      Update gradient-alpha ps ref images
      Update over-around-source ps ref image
      Ensure PS/PDF miter is >= 1.0
      Add dash-curve ps ref image
      Update operator-source ps ref images
      PDF: Fix uninitialized variable in previous commit
      PDF: Remove stale comments
      Add word_wrap stream to pdf-operators
      Add PS linecap path workarounds to pdf_operators
      pdf-operators: only one path matrix is required
      PS: Remove the Type 3 outline glyph code
      Make PS backend use cairo-pdf-operators.c
      PS: Don't use patterns for paint surface extend none
      Update rotate-image-surface-paint ps ref image
      PS: Don't use patterns for fill surface extend none
      PS: Use InterleaveType 2 for image and mask
      PS: Use currentfile as the image data source
      Update PS ref images
      Win32-printing: Fix meta surface patterns
      PDF: Word wrap _cairo_pdf_operators_show_glyphs output
      PDF: Allow word_wrap_stream to split hex strings
      Implement PDF fill-stroke
      PS: Remove unused code
      PDF/PS: No need to use save/restore for solid colors
      PDF/PS: Fix mismatched save restore when using fill-stroke
      Use correct prefix for _cairo_pdf_operators_stroke
      Change PDF newline characters from \r\n to \n

Alp Toker (2):
      Revert "Change cairo_get_current_point() to return cairo_status_t instead of void"
      Introduce cairo_has_current_point()

Antoine Azar (2):
      Fixed rounding function call
      Added cairo-misc.c to makefile

Azar at .(none) (2):
      replaced round with _cairo_lround. Round doesn't compile on Win32
      Some fixes and improvements to the Win32 build

Behdad Esfahbod (5):
      [xlib] Move multiple CAIRO_MUTEX_INITIALIZE into one place they all end up anyway
      [configure.in] Make PS/PDF/SVG default enabled
      [docs] Fix typo
      [cairo-pdf-operators] Pass matrix by reference, not by value
      [cairo-misc.c] Add misc functions to this file

Bertram Felgenhauer (1):
      [perf] add tests for magnified and minified image sources.

Carl Worth (25):
      Increment cairo version to 1.5.9 after the 1.5.8 snapshot
      cairo_xlib_surface_create_similar: Pass the original drawable to XCreatePixmap
      Add several Makefile.win32 files to EXTRA_DIST
      Make _cairo_slope_compare return a non-zero result for slopes that differ by pi
      Remove _cairo_slope_[counter_]clockwise
      Eliminate a potential infinite loop in spline stroking
      Add a spline to the degenerate-pen test case
      Revert "[meta-surface] Adjust tolerance when replaying to surfaces with device scale"
      cairo-svg: Make operation_supported depend on analyze_operation instead of the other way around.
      Add svg-specific reference images for meta-surface-pattern test
      svg: Add support for flattening SOURCE painting when there's nothing beneath it
      Re-enable some pdf tests now that poppler has knockout support
      Re-enable pdf tests with gradients and add poppler-based reference images
      Add poppler-specific reference image for text-pattern
      Add poppler-specific reference images for tests needing EXTEND_PAD
      Add poppler-specific reference image for push-group
      Add poppler-specific reference image for source-clip-scale
      Update ps-specific reference images
      Expand the documentation of cairo/test/README
      Update ps-specific reference images for ghostscript 8.61
      Add svg-specific reference image for mask-alpha
      NEWS: Add notes for cairo 1.5.10
      Increment cairo version to 1.5.10 and libtool versioning to 17:0:15
      Mention that cairo_get_current_point is void again
      Update REFERENCE_IMAGES for distcheck

Chris Wilson (29):
      [test/invalid] Test cairo_translate() and friends for NaN safety.
      [test/font-options] Check the defaults values.
      [cairo-pdf-surface] Minor code tidy.
      [cairo-png] Improve error return for invalid parameters.
      [xmalloc] Hide valgrind warning.
      [test/a1-sample-image] Fix the memleak.
      [cairo-surface] Hide the compiler warnings.
      [check] Only build documents during make check if we have GTK_DOC
      [test] Add tests using each backend as a source.
      [cairo-ft-font] Tidy usage of cairo_error().
      [test/a8-mask] Fix memleak.
      [test] Summarise the tests failures per backend.
      [cairo-output-stream] Add format(printf) markup.
      [cairo-ps-surface] Tidy return from _analyze_image_transparency().
      [test/font-options] Check for HAVE_FCFINI
      [boilerplage] Add getopts to the boilerplate library.
      [cairo-font-options] Disallow use of NULL font-options.
      [cairo-ft-font] Propagate error detected during determination of scale factors.
      [cairo-scaled-font] Create error objects on demand.
      [test/invalid-matrix] Promote incorrect status warning to an error.
      [test/invalid-matrix] Check scale(0,0)
      [test/invalid-matrix] Test detection of infinities.
      [test/bitmap-font] Destroy the font options after use.
      [pdf] Minor make check fix.
      [pdf-operators] Missing private markup.
      [cairo-pdf-operators] Cleanup word_wrap_stream
      [cairo-surface] Check surface status on internal paths as well.
      [cairo-scaled-font-subsets] Fix memleak on failure to reserve .notdef glyph.
      [gitignore] Ignore cairo-no-features.h

Kristian Høgsberg (1):
      [pdf] Use compressed PDF stream instead of compress_dup()

Peter Weilbacher (4):
      [os2] Improve documentation
      Merge branch 'master' of ssh://pmw@git.freedesktop.org/git/cairo
      [os2] only call FcInit/Fini when compiled with FT font backend
      [os2] fix typo in comment

Shailendra Jain (1):
      Compile fix for AIX.

Vladimir Vukicevic (10):
      Remove get-xrender-format from list of tests to be run on all platforms
      Fix text-zero-len on ATSUI to not infinite loop
      Optimize stroker by hoisting some calculations out of loops
      Optimize dashed strokes, part 2
      Update test ref images that changed with stroking changes
      Followup patch to dashed stroke optimization
      Do correct calculation of pen dimensions for stroke optimization
      Avoid buffer overflow in ps/pdf surface
      [pdf] restore alpha_size back to correct bit size
      [stroker] fix _compute_normalized_device_slope to return correct sign

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.cairographics.org/archives/cairo-announce/attachments/20080220/ada49c81/attachment.pgp 

More information about the cairo-announce mailing list