GNOME 3590 Published by

A new cairo release 1.4.6 is now available from:

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

which can be verified with:

http://cairographics.org/releases/cairo-1.4.6.tar.gz.sha1
bfd1532e10789fc4f87a196540c049d88c6ece42 cairo-1.4.6.tar.gz

http://cairographics.org/releases/cairo-1.4.6.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.6 tag which points to a commit named:
ddca8fec07ff95caeda6e4ce9efc3239b146bd2d

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.

-Carl

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@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=F3s Erd=E9lyi 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
suffering.

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.

Miscellaneous
-------------
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=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 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 pix
man
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_na
me/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_SO
METHING"
[cairo-commit] Just warn for BeOS and let the sanity check macros err
[cairo-mutex] Support non-reentrant compilation if CAIRO_NO_MUTEX def
ined
[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 inst
ead 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 tes
t/
[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_boilerplat
e_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-p
rivate.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_cache
d_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-m
utex-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 struct
ure
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 ov
er 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 regio
n.
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 surf
ace.
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 failur
e.

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

Jeff Muizelaar (1):
Fix bugs in fbCompositeSrc_8888x8x8888mmx and fbCompositeSrc_x888x8x8
888mmx

Kouhei Sutou (1):
Support MinGW DLL compilation

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

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