Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
===================================================================
The cairo community is astounded (and flabbergast) to finally announce
the 1.10.0 release of the cairo graphics library. This is a major update
to cairo, with new features and enhanced functionality which maintains
compatibility for applications written using any previous major cairo
release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
a previous version of cairo upgrade to cairo 1.10.0.
One of the more interesting departures for cairo for this release is the
inclusion of a tracing utility, cairo-trace. cairo-trace generates a
human-readable, replayable, compact representation of the sequences of
drawing commands made by an application. This can be used to inspecting
applications to understand issues and as a means for profiling
real-world usage of cairo.
The traces generated by cairo-trace have been collected in
git://git.cairographics.org/git/cairo-traces
and have driven the performance tuning of cairo over the last couple of
years. In particular, the image backend is much faster with a new
polygon rasterisation and a complete overhaul of the tessellator. Not
only is this faster, but also eliminates visual artifacts from
self-intersecting strokes. Not only has cairo-trace been driving
performance improvements within cairo, but as a repeatable means of
driving complex graphics it has been used to tune OpenGL, DDX, and
pixman.
Cairo's API has been extended to better support printing, notably
through the ability to include a single compressed representation of an
image for patterns used throughout a document, leading to dramatic file
size reductions. Also the meta-surface used to record the vector
commands compromising a drawing sequence is now exposed as a
CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
subsurface would be as a source glyph in a texture atlas, or as a
restricted subwindow within a canvas.
Cairo's API has also resurrected the RGB16 format from the past as
the prevalence of 16-bit framebuffers has not diminished and is a
fore-taste of the extended format support we anticipate in the future.
Increasing cairo's utility, we introduce the cairo_region_t for handling
sets of pixel aligned rectangles commonly used in graphics applications.
This is a merger of the GdkRegion and the pixman_region_t, hopefully
providing the utility of the former with the speed of the latter.
Furthermore cairo has been reworked to interoperate more closely with
various acceleration architectures, gaining the ability to share
those hardware resources through the new cairo_device_t. For instance,
with the new OpenGL backend that supersedes the Glitz backend, hardware
and rendering operations can be shared between a classic OpenGL
application mixing libVA for the hardware assisted video decode with
cairo for high quality overlays all within the same OpenGL canvas.
Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
Sandmann Pedersen and many others that have contributed over the last
couple of years to cairo. Thank you all!
Snapshot 1.9.14 (2010-07-26)
============================
A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
we are being to see the results of the stabilisation effort. Clipping bugs
seems to have been the order of the last couple of weeks, with a couple
reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
finding those regressions. At this point all that seems to remain to do is
to fix the outstanding regressions in the PDF backend...
Bugs fixes
----------
Clip doesn't work for text on the image backend
https://bugs.freedesktop.org/show_bug.cgi?id=29008
Add explicit dependency for cxx
https://bugs.freedesktop.org/show_bug.cgi?id=29114
Fix regressions in reporting clip extents
https://bugs.freedesktop.org/show_bug.cgi?id=29120https://bugs.freedesktop.org/show_bug.cgi?id=29121https://bugs.freedesktop.org/show_bug.cgi?id=29122https://bugs.freedesktop.org/show_bug.cgi?id=29124https://bugs.freedesktop.org/show_bug.cgi?id=29125
Snapshot 1.9.12 (2010-07-12)
============================
A couple of weeks spent fixing those annoying bugs and cleaning up the build
system; the list of outstanding tasks to complete for the stable release is
finally shrinking. The chief bug fixer has been Benjamin Otte who not only
made sure that the public API is consistent and being tested for its
consistency, but also ensured that the documentation was up-to-date and
spent time clarifying cases where even the Cairo developers have come
unstuck in the past. Many thanks, Benjamin. However, he was not alone,
as Andrea Canciani continued his fine work in isolating broken corner cases
and proceeding to fix them, and tidying up the quartz backend. And last, but
definitely not least, M Joonas Pihlaja tried building Cairo across a
perverse range of systems and fixed up all the loose bits of code that came
unravelled. Thanks everybody!
API Changes
-----------
cairo_surface_set_mime_data, cairo_surface_get_mime_data:
The length parameter is now an unsigned long (as opposed to an unsigned
int). The parameter is intended to be an equivalent to a size_t without
requiring POSIX types and be large enough to store the size of the
largest possible allocation.
cairo_gl_surface_create_for_texture:
This a new surface constructor for cairo-gl that explicitly enables
render-to-texture for foreign, i.e. application, textures.
cairo_region_xor, cairo_region_xor_rectangle
A couple of utility routines add to the region handling interface for
the purpose of replacing existing GdkRegion functionality.
Bugs fixes
----------
https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
Inkscape was caught in the act of attempting to modify a finished surface.
Unfortunately, we had the ordering of our guards and assertions wrong and
so an ordinary application error was triggering an assert in Cairo. This
lead Benjamin to add a test case to ensure that the entire public API
could handle erroneous input and then proceeded to fix a whole slew of
uncovered bugs.
https://bugs.freedesktop.org/show_bug.cgi?id=28888
A regression introduced by the special casing of uploading images to an
xlib surface in-place which was ignoring the translation applied to the
image.
Snapshot 1.9.10 (2010-06-26)
============================
The first "quick" snapshot in the run up to the stable release. The
last snapshot was picked up by the bleeding edge distributions and so the
bug reports have to started to roll in. The most frequent of these are the
introduction of rendering errors by applications that modify a surface
without subsequently calling cairo_surface_mark_dirty(). Make sure the
application developers are aware of increased reliance on strict use of the
Cairo API before 1.10 is released!
The usual slew of bugs reported and we would like to thank Zoxc for
contributing the WGL interface for cairo-gl, and finding more build
failures on win32. And it just wouldn't be a 1.9 snapshot unless
Benjamin Otte improved the error handling within cairo-gl, as well as
isolating and fixing some more errors in the test suite. The biggest bug of
the snapshot turned out to be a major sign extension issue that had lain
hidden for many years and was suddenly exposed by incorrectly rounding
rectangles when performing non-antialiased rendering. Also to the relief
of many we have included the downstream patch to honour the user's LCD
filtering preferences for subpixel rendering of fonts. The interface
remains private for the time being, whilst the proposed public API is
finalized.
API changes
-----------
None.
Snapshot 1.9.8 (2010-06-12)
===========================
One major API changes since the last snapshot, and a whole slew of bugs
fixed and inconsistencies eliminated. Far too many bugs fixed to
individually identify. We need to thank Benjamin Otte for his fantastic
work on the cairo-gl backend making it faster and more robust, Andrea
Canciani for finding so many bugs and developing test cases for them, as
well fixing them. And last but not least we must all thank Adrian Johnson for
continuing to eliminate bugs and improving the PostScript and PDF backends.
This snapshot represents almost 4 months of bug fixing, bringing Cairo to
a point where we consider it almost ready to be a candidate for release.
There are a few known bugs left to be fixed, being tracked in
https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
whirl and report any regressions. The plan is to release a new snapshot
every other week leading to a 1.10 release with a target date of
2010-08-16.
API additions
-------------
CAIRO_FORMAT_RGB16_565
16 bit devices still remain popular, and so with great demand,
CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
and use 16 bit images as sources and render targets.
cairo_surface_create_for_rectangle()
It is common practice to cut an image up into many smaller pieces and use
each of those as a source - a technique called texture atlasing.
cairo_surface_create_for_rectangle() extends Cairo to directly support use
of these subregions of another cairo_surface_t both as a source and as a
render target.
cairo_region_create()
cairo_region_create_rectangle()
cairo_region_create_rectangles()
cairo_region_copy()
cairo_region_reference()
cairo_region_destroy()
cairo_region_equal()
cairo_region_status()
cairo_region_get_extents()
cairo_region_num_rectangles()
cairo_region_get_rectangle()
cairo_region_is_empty()
cairo_region_contains_rectangle()
cairo_region_contains_point()
cairo_region_translate()
cairo_region_subtract()
cairo_region_subtract_rectangle()
cairo_region_intersect()
cairo_region_intersect_rectangle()
cairo_region_union()
cairo_region_union_rectangle()
The Cairo region API was actually added a couple of snapshots ago, but we
forgot to mention it at the time. A simple API for the handling of
rectangular pixel-aligned regions by Soeren Sandmann.
Backend-specific improvements
-----------------------------
cairo-gl
Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
backend, reducing a lot of code duplication and enabled him to begin working
on improving performance by reducing state changes and associated overhead.
cairo-xlib
Access to the underlying connection to the Display is now thread-safe
enabling cairo-xlib to be used in a multi-threaded application without fear
of random corruption. Thanks Benjamin Otte!
cairo-xlib will now attempt to use PolyModeImprecise when compositing
trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
should allow hardware drivers more scope for accelerating the operation at
the cost of potentially incurring minute rendering errors. The mode can be
forced back to PolyModePrecise by setting the antialias parameter to
CAIRO_ANTIALIAS_SUBPIXEL.
cairo-svg
A notable improvement was contributed by Alexander Shulgin to enable SVG to
reference external image through the use an extended MIME data type.
Snapshot 1.9.6 (2010-02-19)
===========================
API additions
-------------
Add cairo_device_t
The device is a generic method for accessing the underlying interface
with the native graphics subsystem, typically the X connection or
perhaps the GL context. By exposing a cairo_device_t on a surface and
its various methods we enable finer control over interoperability with
external interactions of the device by applications. The use case in
mind is, for example, a multi-threaded gstreamer which needs to serialise
its own direct access to the device along with Cairo's across many
threads.
Secondly, the cairo_device_t is a unifying API for the mismash of
backend specific methods for controlling creation of surfaces with
explicit devices and a convenient hook for debugging and introspection.
The principal components of the API are the memory management of:
cairo_device_reference(),
cairo_device_finish() and
cairo_device_destroy();
along with a pair of routines for serialising interaction:
cairo_device_acquire() and
cairo_device_release()
and a method to flush any outstanding accesses:
cairo_device_flush().
The device for a particular surface may be retrieved using:
cairo_surface_get_device().
The device returned is owned by the surface.
API changes (to API new in the cairo 1.9.x series)
--------------------------------------------------
cairo_recording_surface_create()
cairo_recording_surface_ink_extents()
These are the replacement names for the functions previously named
cairo_meta_surface_create and cairo_meta_surface_ink_extents.
cairo_surface_set_mime_data
This interface is now changed such that the MIME data will be
detached if the surface is modified at all. This guarantees that
the MIME data will not become out of synch due to surface
modifications, and also means that for the MIME data to be useful,
it must be set after all modifications to the surface are
complete.
API removal (of experiment API)
-------------------------------
The cairo-glitz backend is removed entirely, (in favor of the new
cairo-gl backend). See below for more on cairo-gl.
Generic fixes
-------------
Many improvements for drawing of dashed strokes
Fix incorrect handling of negative offset
Faster computation of first dash (avoids near-infinite looping)
Approximate extremely fine dash patterns with appropriate alpha value
Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
Backend-specific improvements
-----------------------------
cairo-drm
This is a new, direct-rendering backend that supports Intel graphics
chipsets in the i915 and i965 families. It's still experimental and
will likely remain that way for a while. It's already got extremely
good performance on the hardware it supports, so if nothing else
provides a working proof and performance target for the cairo-gl
work for Intel graphics.
cairo-gl
Start using GLSL to accelerate many operations. Many thanks to Eric
Anholt and T. Zachary Laine for this work. For the first time, we
have what looks like what will be a very compelling OpenGL-based
backend for cairo (in terms of both quality and performance).
See this writeup from Eric for more details on recent progress of
cairo-gl (which he presented at FOSDEM 2010):
http://anholt.livejournal.com/42146.html
cairo-image
The image backend is made dramatically faster (3-5 times faster for
benchmarks consisting primarily of glyph rendering).
cairo-quartz fixes:
Many fixes from Robert O'Callahan and Andrea Canciani including:
Fixed gradient pattern painting
Improved A8 image handling
Fixes for "unbounded" and other compositing operators
cairo-pdf fixes:
Improvements to embedding of JPEG and JPEG2000 data.
cairo-ps fixes:
Fix printing of rotated user fonts.
Snapshot 1.9.4 (2009-10-15)
===========================
API additions:
cairo_meta_surface_create()
cairo_meta_surface_ink_extents()
Finally exporting the internal meta-surface so that applications
have a method to record and replay a sequence of drawing commands.
cairo_in_clip()
Determines whether a given point is inside the current clip.
??? Should this be called cairo_in_paint() instead? in-clip is the test
that is performed, but in-paint would be similar to in-fill and in-stroke.
New utilities:
cairo-test-trace
A companion to cairo-perf-trace, this utility replays a trace against
multiple targets in parallel and looks for differences in the output,
and then records any drawing commands that cause a failure.
Future plans:
Further minimisation of the fail trace using "delta debugging".
More control over test/reference targets.
Backend improvements:
xlib
Server-side gradients. The theory is that we can offload computation
of gradients to the GPU and avoid pushing large images over the
connection. Even if the driver has to fallback and use pixman to render
a temporary source, it should be able to do so in a more efficient manner
than Cairo itself. However, cairo-perf suggests otherwise:
On tiny, Celeron/i915:
before: firefox-20090601 211.585
after: firefox-20090601 270.939
and on tiger, CoreDuo/nvidia:
before: firefox-20090601 70.143
after: firefox-20090601 87.326
In particular, looking at tiny:
xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
█▋
xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
█▋
New experimental backends:
QT
OpenVG - The initial work was done by Øyvind Kolås, and made ready for
inclusion by Pierre Tardy.
OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
directed rendering using OpenGL at a high-level into Cairo. In
contrast to the previous attempt using Glitz which tried to
implement the RENDER protocol on top of OpenGL, using the
high-level interface should permit greater flexibility and
more offloading onto the GPU.
The initial work on the backend was performed by Eric Anholt.
Long standing bugs fixed:
Self-intersecting strokes.
A long standing bug where the coverage from overlapping semi-opaque
strokes (including neighbouring edges) was simply summed in lieu of
a costly global calculation has been fixed (by performing the costly
global calculation!) In order to mitigate the extra cost, the
tessellator has been overhauled and tune, which handles the fallback
for when we are unable to use the new span rasteriser on the stroke
(e.g. when using the current RENDER protocol). The large number of
pixel artefacts that implementing self-intersection elimination
removes is ample justification for the potential performance
regression. If you unfortunately do suffer a substantial performance
regression in your application, please consider obtaining a
cairo-trace and submitting it to us for analysis and inclusion into
our performance suite.
Special thanks:
To the AuroraUX team for providing access to one of their OpenSolaris
machines for cairo and pixman development. http://www.auroraux.org/
Snapshot 1.9.2 (2009-06-12)
===========================
API additions:
cairo_surface_set_mime_data()
cairo_surface_get_mime_data()
Should this take unsigned int, unsigned long or size_t for the length
parameter? (Some datasets may be >4GiB in size.)
Associate an alternate, compressed, representation for a surface.
Currently:
"image/jp2" (JPEG2000) is understood by PDF >= 1.5
"image/jpeg" is understood by PDF,PS,SVG,win32-printing.
"image/png" is understood by SVG.
cairo_pdf_version_t
cairo_pdf_surface_restrict_to_version()
cairo_pdf_get_versions()
cairo_pdf_version_to_string()
Similar to restrict to version and level found in SVG and PS,
these limit the features used in the output to comply with the PDF
specification for that version.
CAIRO_STATUS_INVALID_SIZE
Indicates that the request surface size is not supported by the
backend. This generally indicates that the request is too large.
CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
Indicates that a required callback for a user-font was not implemented.
CAIRO_STATUS_LAST_STATUS
This is a special value to indicate the number of status values enumerated
at compile time. (This may differ to the number known at run-time.)
The built-in twin font is now called "@cairo:" and supports a limited set
of options like "@cairo:mono". Where are these specified?
cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
New experimental backends:
CairoScript
New utility:
cairo-trace and cairo-perf-trace
cairo-trace generates a human-readable, replayable, compact(-ish!)
representation of the sequences of drawing commands made by an
application.
Under the util/cairo-script directory is a library to replay traces.
perf/cairo-perf-trace replays traces against multiple backends
and makes useful benchmark reports. This is integrated with
'make perf'. You may collect your own traces or take advantage
of traces collected by the community:
git://git.cairographics.org/git/cairo-traces
(Put this into perf/cairo-traces to run these as part of "make perf".)
There is additional WIP in building a debugging tool for cairo applications
based on CairoScript (currently very preliminary, mostly serves to show
that GtkSourceView is too slow) :
people.freedesktop.org:~ickle/sphinx
Test suite overhaul:
The test suite is undergoing an overhaul, primarily to improve its speed
and utility. (Expect more changes in the near future to improve XFAIL
handling.)
Optimisations:
polygon rasterisation! Joonas implemented the Tor polygon scan converter,
on typical geometry is about 30% faster for the image backend.
Bovine Polaroids! For those not in on the joke, this is the long
awaited "copy-on-write snapshot" or "COW snapshot" support. The
user-visible feature is that including the same image multiple times
into a PDF file should result in only a single instance of that
image in the final output. This is unlike previous versions of cairo
which would generate very large PDF files with multiple copies of
the same image. Adrian says that the PDF is not quite working as
well as it should yet, so we hope for futher improvements before
cairo 1.10.
Bug fixes:
EXTEND_PAD.
Better handling of large scale-factors on image patterns.
Emit /Interpolate for PS,PDF images.
Global glyph cache - cap on the total number of inactive glyphs,
should prove fairer for fonts with larger glyph sets.
Compilation without fontconfig
Improved handling of low-bitdepth sources (e.g. copying the contents
of 16-bit xserver windows)
Regressions:
cairo_traps_extract_region >10x slower. Fix pending.
Still to come:
Region tracking API (ssp) for damage tracking, hit testing etc
mime-surface
An expiremental OpenGL backend?
Tweaks to tessellator, allocations of patterns, delayed
initialisation of the xlib backend (reduce the cairo overhead of
render_bench by ~80%).
Release 1.8.10 (2010-02-19 Carl Worth <cworth@cworth.org>)
==========================================================
The cairo community is pleased to announce the 1.8.10 release of the
cairo graphics library. This is the fifth update to cairo's stable 1.8
series. This release consists of about a dozen hand-picked fixes
compared to 1.8.8 (which was released about 8 months ago).
We recommend that everyone using cairo upgrade to 1.8.10.
-Carl
General Bug fixes
=================
* Fix path construction for the case of cairo_curve_to immediately
after cairo_new_sub_path followed at some point by
cairo_close_path. (Previously, the final point for the close_path
was computed incorrectly.)
* Fix for cairo_push_group or cairo_pop_group with a non-empty current
path. (Previously the path may have been erroneously translated when
either of these functions was called.)
* Fix to correctly report an error if
cairo_surface_set_fallback_resolution is called with a value of 0
(in either axis). Previously, an assertion would occur later rather
than an error being properly reported when the original, invalid
value was passed.
Bug 23067: Using clear drawing operator crashes printing
http://bugs.freedesktop.org/show_bug.cgi?id=23067
* Fix to handle a cairo_arc of radius 0 as equivalent to a
cairo_line_to to the center coordinate, (previously cairo would do
nothing for a cairo_arc call with a radius of 0).
Backend-specific bug fixes
==========================
cairo-xlib
----------
* Fix to correctly copy from a Window source. Previously, cairo was
failing to include the contents of any sub-windows when copying from
a Window source.
Bug 12996: Xlib source surface fast-paths do not use
IncludeInferiors, while slow paths do
https://bugs.freedesktop.org/show_bug.cgi?id=12996
cairo-ft
--------
* Fix conversion of freetype index to UCS4 value, (which would
previously miss the first character and cause the space glyph to map
to 0x00A0 instead of 0x0020).
cairo-pdf
---------
* Fix Type 1 subsetting to avoid generating corrupt data.
Launchpad Ubuntu/cups bug 419143: Printing from evince (and
perhaps other GTK apps) to PostScript printers is broken
https://bugs.launchpad.net/ubuntu/+source/cups/+bug/419143
* Fix Type 1 subsetting to correctly identify binary eexec data.
* Fix Type 1 subsetting to include fixed-content portion in the
embedded font, (since some fonts may contain additional PostScript
code after the cleartomark).
* Fix Type 1 subsetting to append "cleartomark" operator for binary
fonts that don't include it.
Build fixes
===========
* Fix to compile on OpenBSD, (which has a libpng.pc file but none of
libpng10.pc, libpng12.pc, or libpng13.pc which cairo was looking for
previously).
This changes the buildlink3.mk files to use an include guard for the
recursive include. The use of BUILDLINK_DEPTH, BUILDLINK_DEPENDS,
BUILDLINK_PACKAGES and BUILDLINK_ORDER is handled by a single new
variable BUILDLINK_TREE. Each buildlink3.mk file adds a pair of
enter/exit marker, which can be used to reconstruct the tree and
to determine first level includes. Avoiding := for large variables
(BUILDLINK_ORDER) speeds up parse time as += has linear complexity.
The include guard reduces system time by avoiding reading files over and
over again. For complex packages this reduces both %user and %sys time to
half of the former time.
Release 1.8.6 (2008-12-13 Chris Wilson <chris@chris-wilson.co.uk>)
=========================================================
The cairo community is pleased to announce the 1.8.6 release of the
cairo graphics library. This is the third update to cairo's stable
1.8 series and contains a small number of bug fixes (in particular a
few fixes for failures of cairo 1.8.4 on Quartz and PDF, and build fixes for
a couple of backends). This is being released just under a month after
cairo 1.8.4.
We recommend that everyone using cairo upgrade to 1.8.6.
-Chris
Build fixes
-----------
Fix build of DirectFB backend with debugging enabled:
Bug in _cairo_directfb_surface_release_source_image function
http://bugs.freedesktop.org/show_bug.cgi?id=18322
Fix build on OS/2.
Bug fixes
---------
Workaround a mis-compilation of cairo_matrix_invert() that generated invalid
matrices and triggered assertion failures later. The issue was reported by
Peter Hercek.
Invalid computation of the modulus:
https://bugzilla.mozilla.org/show_bug.cgi?id=466258
Invalid referencing of patterns in the Quartz backend:
Failed assertion `CAIRO_REFERENCE_COUNT_HAS_REFERENCE
(&pattern->ref_count)' when using cairo quartz backend
http://bugs.freedesktop.org/show_bug.cgi?id=18632
Invalid references to glyphs after early culling, causing segmentation faults
in the PDF backend:
http://lists.cairographics.org/archives/cairo/2008-December/015976.html
Check for XRender in the XCB backend, or else we may attempt an invalid memory
access:
XCB backend fails with missing render.
https://bugs.freedesktop.org/show_bug.cgi?id=18588
Release 1.8.4 (2008-11-14 Carl Worth <cworth@cworth.org>)
=========================================================
The cairo community is pleased to announce the 1.8.4 release of the
cairo graphics library. This is the second update to cairo's stable
1.8 series and contains a small number of bug fixes, (in particular a
few fixes for build failures of cairo 1.8.2 on various systems). This
is being released just over two weeks after cairo 1.8.2.
We recommend that everyone using cairo upgrade to 1.8.4.
-Carl
Build fixes
-----------
Fix build with older XRender that doesn't define RepeatNone:
Build of xlib backend fails against old XRender (RepeatNone undeclared)
https://bugs.freedesktop.org/show_bug.cgi?id=18385
Fix build with bash version <= 3.0:
doltlibtool broken on linux with bash 3.00.0
https://bugs.freedesktop.org/show_bug.cgi?id=18363
Bug fixes
---------
Avoid triggering a bug in X.org server 6.9 resulting in a hung machine
requiring a reboot:
https://bugs.freedesktop.org/show_bug.cgi?id=15628#c2
Fix display of user fonts as exercised by proposed support for type3
fonts in poppler (unsigned promotion fixes):
Use cairo user-font for Type 3 fonts
http://lists.freedesktop.org/archives/poppler/2008-October/004181.html
Avoid miscomputing size of fallback images required when rendering
with CLEAR, IN, or SOURCE operator to vector surfaces, (PS, PDF, SVG,
etc.).
Be more tolerant of broken fonts when subsetting type1 fonts:
Error handling in cairo_type1_font_subset_get_glyph_names_and_widths
http://lists.cairographics.org/archives/cairo/2008-October/015569.html
Fix cairo_fill_extents, cairo_stroke_extents, cairo_path_extents, to
correctly allow NULL parameters as documented.
Fix potential crash on emitting a type3 glyph after having drawn text
paths from the same font, (for example with cairo_text_path).
Release 1.8.2 (2008-10-29 Carl Worth <cworth@cworth.org>)
=========================================================
The cairo community is pleased to announce the 1.8.2 release of the
cairo graphics library. This is the first update to cairo's stable 1.8
series and contains a large number of bug fixes. It is being released
just over one month since cairo 1.8.0.
This release consists primarily of bug fixes, but there is one notable
new feature, (the ability to build cairo without an external font
backend), and there are a few optimizations as well. See below for
details on these changes and the most important bug fixes.
While many people have contributed to this release, Chris Wilson
deserves particular mention. He has contributed well over twice as
many changes to cairo since 1.8.0 than everyone else combined. We
greatly appreciate the tremendous efforts of Chris and all cairo
contributors.
We recommend everyone upgrade to cairo 1.8.2 and hope that everyone
will have lots of fun with cairo!
-Carl
New feature
-----------
It is now possible to build cairo without any font backend, (such as
freetype, win32 or quartz). This is most useful when the application
provides custom font rendering through the user-font API. But in the
case where no external font backend is available, and no user-font is
provided, cairo will render with a failsafe font, (a stroked font
covering visible ASCII character). (Behdad Esfahbod)
Optimizations
-------------
Dramatically speed up compilation with dolt (removes much of the
libtool overhead) (Behdad Esfahbod with thanks to Josh Triplett).
Several minor optimizations to tessellator (special-cased comparisons,
faster insert for skiplist, etc.) (Chris Wilson).
Optimize away fractional translation component when doing
EXTEND_NEAREST filtering, (for better performance).
General bug fixes
-----------------
Allow cloning sub-regions of similar surfaces to fix this bug
(Chris Wilson):
Crafted gif file will crash firefox
[XError: 'BadAlloc (insufficient resources for operation)']
https://bugzilla.mozilla.org/show_bug.cgi?id=424333
Fix some matrix confusion to fix this regression (Chris Wilson):
Translucent star exports in a wrong way to PDF
https://bugs.launchpad.net/inkscape/+bug/234546
Fix some long-standing bugs with respect to properly computing the
extents of transformed, filtered surfaces (Owen Taylor, Carl Worth,
and Chris Wilson):
Bad clipping with EXTEND_NONE
http://bugs.freedesktop.org/show_bug.cgi?id=15349
Improve filtering handling in cairo-pattern.c
http://bugs.freedesktop.org/show_bug.cgi?id=15367
Many thanks to Chris Wilson for digging out and cleaning up
these fixes.
Fix compilation on Solaris 10 (Chris Wilson):
Cairo requires -DREENTRANT (along with -D_POSIX_THREAD_SEMANTICS)
to compile on Solaris 10 with pthreads
https://bugs.freedesktop.org/show_bug.cgi?id=18010
Fix very old bug causing dashes to be rendered at the wrong length in
fallback images (Adrian Johnson)
Dashed strokes too long in fallback images
https://bugs.freedesktop.org/show_bug.cgi?id=9189
Fix broken dashing when a dashed path starts outside the clip region
(Chris Wilson).
Avoid range overflow when computing large patterns (Benjamin Otte and
Chris Wilson).
Avoid crashing due to an invalid font with an incorrect entry in its
CMAP table (Adrian Johnson).
Fix bugs in computing maximum size of text requests that can be sent
with the Render extension, (avoiding potential crashes when rendering
large amounts of text) (Behdad Esfahbod and Chris Wilson).
Fix rendering of operators unbounded by the mask (Chris Wilson).
Fix compilation on systems without compiler support for a native
64-bit type (Chris Wilson).
Fix several cases of missing error-status propagation. (Chris Wilson,
doing the work he seems to never tire of).
Fix several locking issues found with the lockdep valgrind skin (Chris
Wilson).
Backend-specific bug fixes
--------------------------
xlib: Avoid crash due to attempting XRender calls on pixmaps with
formats not supported by the Render extension (Chris Wilson):
XRender crashes due to NULL pointer from Cairo on SGI O2
https://bugs.freedesktop.org/show_bug.cgi?id=1173
xlib: Add support for XImages with depth of 4, 20, 24, or 28 bits
(Chris Wilson):
cairo doesn't support 24 bits per pixel mode on X11
https://bugs.freedesktop.org/show_bug.cgi?id=9102
xlib: Avoid mistakenly considering two surfaces as similar just
because their depths match (while their Render formats do not) (Karl
Tomlinson).
ps: Fix slight mis-scaling of bitmapped fonts (Adrian Johnson)
svg: Correctly emit comp-op for paint, mask, and show_glyphs
operations (Emmanuel Pacaud).
svg: Use finer-grained fallbacks for SVG 1.2 (as PS and PDF backends
have been doing since 1.6.0) (Chris Wilson).
from the announcement:
The dominant theme of this release is improvements to cairo's ability
to handle text. The highlights include a new "user fonts" feature as
well as a new cairo_show_text_glyphs API which allows glyphs to be
embedded in PDF output along with their original text, (for searching,
selection, and copy-and-paste). Another major feature is a revamp of
cairo's build system making it much easier to build cairo on various
platforms.
output at the end of the write and this was restored with 1.2.30, but
cairo didn't override the flush function, resulting in fflush on a
non-stream. This in turn resulted in crashes of graphviz when compiling
doxygen. Bump revision.
Major changes between the 1.4 and 1.6 branch:
- Now uses external "pixman" library instead of a bundled one.
- Improvements to PDF, SVG and PostScript output
- New support for arbitrary X server visuals
(the 8-bit display support patch (patch-ae in pkgsrc) is integrated)
- rendering backend improvements
- various new API additions, while maintaining ABI compatibility
- New Quartz backend
- bug fixes
Release 1.4.12 (2007-11-26 Carl Worth <cworth@cworth.org>)
==========================================================
This is the sixth update in cairo's stable 1.4 series. It comes five
months after the 1.4.10 release. This fix includes various bug fixes
originally developed during the 1.5.x development and backported to
1.4.
Some of the most significant bug fixes prevent crashes:
* Avoid overflow when allocating large buffers (Vladimir Vukicevic)
* Fix crash with cairo_pattern_set_user_data (Carl Worth)
* Fix broken locking in cairo-ft error path (Chris Wilson)
* Avoid crash when cleaning up after Render extension (Carl Worth)
* Avoid crash for zero-sized bitmap glyph (Chris Wilson)
* Avoid crash with type-1 fonts and ft and atsui enabled (Brian Ewins)
* Fix many error-handling cases in the Quartz/ATSUI code (Brian Ewins)
* Eliminate cairo_stroke crash with scaling near zero (Carl Worth)
Other fixes address rendering problems:
* Fix PDF linear gradients without stops at 0.0 and 1.0 (Adrian Johnson)
* Fix PDF CFF subsetting to work with Apple Preview (Adrian Johnson)
* Report proper errors on out-of-memory on win32 (Vladimir Vukicevic)
* Fix EXTEND_NONE gradients for cairo-quartz (Brian Ewins)
* Fix odd-number-of-dashes dashing for cairo-quartz (Brian Ewins)
* Fix erroneous results from cairo_stroke_extents (Carl Worth)
* Force non-AA text when bitmap strikes are available (Keith Packard)
* Fix cairo-atsui font metrics (Richard Hult)
And some avoid raising cairo errors for innocent problems:
* Avoid drawing shutdown for glyph-not-found in font (Behdad Esfahbod)
* Don't raise an error for creating an empty path (Chris Wilson)
At least one optimization managed to sneak in:
* Free glyph surfaces after uploading to X server cache (Behdad Esfahbod)
And there are a few very minor fixes, (such as build fixes).
changes:
The most significant
change in this release is a fix to avoid an X error in certain cases,
(that were causing OpenOffice.org to crash in Fedora). There is also a
semantic change to include child window contents when using an xlib
surface as a source, an optimization when drawing many rectangles, and
several minor fixes.
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.
Release 1.4.6 (2007-05-01 Carl Worth <cworth@cworth.org>)
=========================================================
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).
Release 1.4.4 (2007-04-13 Carl Worth <cworth@cworth.org>)
=========================================================
This is the second update release in cairo's stable 1.4 series. It
comes just less than a month after 1.4.2. The changes since 1.4.2
consist primarily of bug fixes, but also include at least one
optimization. See below for details.
There have been lots of individuals doing lots of great work on cairo,
but two efforts during the 1.4.4 series deserve particular mention:
Internal cleanup of error handling, (Chris Wilson)
--------------------------------------------------
Chris contributed a tremendous series of patches (74 patches!) to
improve cairo's handling of out-of-memory and other errors. He began
by adding gcc's warn_unused_attribute to as many functions as
possible, and then launched into the ambitious efforts of adding
correct code to quiet the dozens of resulting warnings.
Chris also wrote a custom valgrind skin to systematically inject
malloc failures into cairo, and did all the work necessary to verify
that cairo's performance test suite runs to completion without
crashing.
The end result is a much more robust implementation. Previously, many
error conditions would have gone unnoticed and would have led to
assertion failures, segmentation faults, or other harder-to-diagnose
problems. Now, more than ever, cairo should cleanly let the user know
of problems through cairo_status and other similar status
functions. Well done, Chris!
More malloc reduction, (Mathias Hasselmann)
-------------------------------------------
After 1.4.0, Behdad launched an effort to chase down excessive calls
to malloc within the implementation of cairo. He fixed a lot of
malloc-happy objects for 1.4.2, but one of the worst offenders,
(pixman regions), was left around. Mathias contributed an excellent
series of 15 patches to finish off this effort.
The end result is a cairo that calls malloc much less often than it
did before. Compared to 1.4.2, 55% of the calls to malloc have been
eliminate, (and 60% have been eliminated compared to 1.4.0). Well
done, Mathias!
This switches to the new stable branch. Too many changes to list here,
see the changelog.
Most notably: speed improvements, PDF output improvement, API additions,
bugfixes.
I still know that it was necessary for some package, but I don't
remember which one and on which platform, and even the CVS log message
doesn't give any useful information.
-remove dependency on libpixman which was stale for ages
-don't bother setting the gtk-doc installation path to share/doc,
the new "devhelp" will find it at the default location (and the
previous versions didn't find it at share/doc either)
Release 1.2.2 (2006-08-08 Carl Worth)
=========================================================
This is the first bug fix release in the 1.2 series since the original
1.2.0 release made six weeks ago.
There were some very serious bugs in the 1.2.0 release, (see below),
so everybody is encouraged to upgrade from 1.2.0 to 1.2.2. The 1.2.2
release maintains source and binary compatibility with 1.2.0 and does
not make any API additions.
Fix crashes with BGR X servers
------------------------------
With cairo 1.2.0 many people reported problems with all cairo-using
programs, (including all GTK+ programs with GTK+ >= 2.8) immediately
crashing with a complaint about an unsupported image format. This bug
affected X servers that do not provide the Render extension and that
provide a visual with BGR rather than RGB channel order.
report: https://bugs.freedesktop.org/show_bug.cgi?id=7294
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9ae66174e774b57f16ad791452ed44efc2770a59
Fix the "disappearing text" bug
-------------------------------
With cairo 1.2.0 many people reported that text would disappear from
applications, sometimes reappearing with mouse motion or
selection. The text would disappear after the first space in a string
of text. This bug was caused by an underlying bug in (very common) X
servers, and only affected text rendered without antialiasing, (either
a bitmap font or a vector font with antialiasing disabled). The bug
was also exacerbated by a KDE migration bug that caused antialiasing
to be disabled more than desired.
report: https://bugs.freedesktop.org/show_bug.cgi?id=7494
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=456cdb3058f3b416109a9600167cd8842300ae14
see also:
Xorg: https://bugs.freedesktop.org/show_bug.cgi?id=7681
KDE: http://qa.mandriva.com/show_bug.cgi?id=23990
Fix broken image fallback scaling (aka. "broken printing")
----------------------------------------------------------
The various "print" backends, (pdf, ps, and svg), sometimes fallback
to using image-based rendering for some operations. In cairo 1.2.0
these image fallbacks were scaled improperly. Applications using cairo
can influence the resolution of the image fallbacks with
cairo_surface_set_fallback_resolution. With the bug, any calue other
than 72.0 would lead to incorrect results, (larger values would lead
to increasingly shrunken output).
report: https://bugs.freedesktop.org/show_bug.cgi?id=7533
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=1feb4291cf7813494355459bb547eec604c54ffb
Fix inadvertent semantic change of font matrix translation (Behdad Esfahbod)
----------------------------------------------------------------------------
The 1.2.0 release introduced an inadvertent change to how the
translation components of a font matrix are interpreted. In the 1.0
series, font matrix translation could be used to offset the glyph
origin, (though glyph metrics were reported incorrectly in
1.0). However in 1.2.0, the translation was applied to the advance
values betwen each glyph. The 1.2.0 behavior is fairly useless in
practice, and it was not intentional to introduce a semantic
change. With 1.2.2 we return to the 1.0 semantics, with a much better
implementation that provides correct glyph metrics.
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=84840e6bba6e72aa88fad7a0ee929e8955ba9051
Fix create_similar to preserve fallback resolution and font options (Behdad Esfahbod)
-------------------------------------------------------------------------------------
There has been a long-standing issue with cairo_surface_create_similar
such that font options and other settings from the original
destination surface would not be preserved to the intermediate
"similar" surface. This could result in incorrect rendering
(particulary with respect to text hinting/antialiasing) with
fallbacks, for example.
report: https://bugs.freedesktop.org/show_bug.cgi?id=4106
fixes: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9fcb3c32c1f16fe6ab913e27eb54d18b7d9a06b0http://gitweb.freedesktop.org/?p=cairo;a=commit;h=bdb4e1edadb78a2118ff70b28163f8bd4317f1ec
xlib: Fix text performance regression from 1.0 to 1.2.0 (Vladimir Vukicevic)
----------------------------------------------------------------------------
Several people noticed that upgrading from cairo 1.0 to cairo 1.2.0
caused a significant peformance regression when using the xlib
backend. This performance regression was particularly noticeable when
doing lots of text rendering and when using a high-latency connection
to the X server, (such as a remote X server over an ssh
connection). The slowdown was identified and fixed in 1.2.2.
report: https://bugs.freedesktop.org/show_bug.cgi?id=7514
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7191885c88068dad57d68ced69a752d1162b12c
PDF: Eliminate dependency on FreeType library dependency (Adrian Johnson)
-------------------------------------------------------------------------
The cairo 1.2 series adds a supported pdf backend to cairo. In cairo
1.2.0 this backend required the freetype library, which was an
undesirable dependency on systems such as win32, (cairo is designed to
always prefer the "native" font system). As of cairo 1.2.2 the
freetype library is not required to use the pdf backend on the win32
platform.
report: https://bugs.freedesktop.org/show_bug.cgi?id=7538
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=a0989f427be87c60415963dd6822b3c5c3781691
PDF: Fix broken output on amd64 (Adrian Johnson)
------------------------------------------------
report: http://bugzilla.gnome.org/show_bug.cgi?id=349826
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f4b12e497b7ac282b2f6831b8fb68deebc412e60
PS: Fix broken output for truetype fonts > 64k (Adrian Johnson)
---------------------------------------------------------------
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=067d97eb1793a6b0d0dddfbd0b54117844511a94
PDF: Fix so that dashing doesn't get stuck on (Kent Worsnop)
------------------------------------------------------------
Kent notices that with the PDF backend in cairo 1.2.0 as soon as a
stroke was performed with dashing, all subsequent strokes would also
be dashed. There was no way to turn dashing off again.
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=778c4730a86296bf0a71080cf7008d7291792256
Fix memory leaks in failure paths in gradient creation (Alfred Peng)
--------------------------------------------------------------------
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=db06681b487873788b51a6766894fc619eb8d8f2
Fix memory leak in _cairo_surface_show_glyphs (Chris Wilson)
------------------------------------------------------------
report: https://bugs.freedesktop.org/show_bug.cgi?id=7766
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e2fddcccb43d06486d3680a19cfdd5a54963fcbd
Solaris: Add definition of cairo_private for some Sun compilers (Alfred Peng)
-----------------------------------------------------------------------------
report: https://bugzilla.mozilla.org/show_bug.cgi?id=341874
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=04757a3aa8deeff3265719ebe01b021638990ec6
Solaris: Change version number of Sun's Xorg server with buggy repeat (Brian Cameron)
-------------------------------------------------------------------------------------
report: https://bugs.freedesktop.org/show_bug.cgi?id=7483
fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e0ad1aa995bcec4246c0b8ab0d5a5a79871ce235
Various memory leak fixes
-------------------------
Fix memory leak in _cairo_surface_show_glyphs (bug 7766)
Fix file handle leak in failure path (bug 7616)
Fix some memory leaks in the test cases.
Fix some memory leaks in font subsetting code used in print backends.
Documentation improvements (Behdad Esfahbod)
--------------------------------------------
Added new documentation for several functions (cairo_show_page,
cairo_copy_page, cairo_in_stroke, cairo_in_fill).
Fixed some syntax errors that were preventing some existing
documentation from being published.
Fixed several minor typographical errors.
Added an index for new symbols in 1.2.
and add a new helper target and script, "show-buildlink3", that outputs
a listing of the buildlink3.mk files included as well as the depth at
which they are included.
For example, "make show-buildlink3" in fonts/Xft2 displays:
zlib
fontconfig
iconv
zlib
freetype2
expat
freetype2
Xrender
renderproto
RECOMMENDED is removed. It becomes ABI_DEPENDS.
BUILDLINK_RECOMMENDED.foo becomes BUILDLINK_ABI_DEPENDS.foo.
BUILDLINK_DEPENDS.foo becomes BUILDLINK_API_DEPENDS.foo.
BUILDLINK_DEPENDS does not change.
IGNORE_RECOMMENDED (which defaulted to "no") becomes USE_ABI_DEPENDS
which defaults to "yes".
Added to obsolete.mk checking for IGNORE_RECOMMENDED.
I did not manually go through and fix any aesthetic tab/spacing issues.
I have tested the above patch on DragonFly building and packaging
subversion and pkglint and their many dependencies.
I have also tested USE_ABI_DEPENDS=no on my NetBSD workstation (where I
have used IGNORE_RECOMMENDED for a long time). I have been an active user
of IGNORE_RECOMMENDED since it was available.
As suggested, I removed the documentation sentences suggesting bumping for
"security" issues.
As discussed on tech-pkg.
I will commit to revbump, pkglint, pkg_install, createbuildlink separately.
Note that if you use wip, it will fail! I will commit to pkgsrc-wip
later (within day).
Release 1.0.4 (2006-03-15 Behdad Esfahbod)
==============================================================
This is a bug fix release. Many fixes in this release are
backported from the head branch and do not have bug numbers.
For the bugs in bugzilla that are fixed in this release, see:
https://bugs.freedesktop.org/buglist.cgi?bug_id=4674,4823,5528,5734,6176,6196,6197
This includes the bug causing Pango crashes with some corrupt
fonts. For a list of all changes, see ChangeLog.
This is a maintenance (bug-fix only) release
Three fixes in the 1.0.2 release deserve particular mention:
-Dashed curves
-Better support for multi-thread applications
-Many win32 compilation and rendering fixes
file's sole purpose was to provide a dependency on pkg-config and set
some environment variables. Instead, turn pkg-config into a "tool"
in the tools framework, where the pkg-config wrapper automatically
adds PKG_CONFIG_LIBDIR to the environment before invoking the real
pkg-config.
For all package Makefiles that included pkg-config/buildlink3.mk, remove
that inclusion and replace it with USE_TOOLS+=pkg-config.
Several changes are involved since they are all interrelated. These
changes affect about 1000 files.
The first major change is rewriting bsd.builtin.mk as well as all of
the builtin.mk files to follow the new example in bsd.builtin.mk.
The loop to include all of the builtin.mk files needed by the package
is moved from bsd.builtin.mk and into bsd.buildlink3.mk. bsd.builtin.mk
is now included by each of the individual builtin.mk files and provides
some common logic for all of the builtin.mk files. Currently, this
includes the computation for whether the native or pkgsrc version of
the package is preferred. This causes USE_BUILTIN.* to be correctly
set when one builtin.mk file includes another.
The second major change is teach the builtin.mk files to consider
files under ${LOCALBASE} to be from pkgsrc-controlled packages. Most
of the builtin.mk files test for the presence of built-in software by
checking for the existence of certain files, e.g. <pthread.h>, and we
now assume that if that file is under ${LOCALBASE}, then it must be
from pkgsrc. This modification is a nod toward LOCALBASE=/usr. The
exceptions to this new check are the X11 distribution packages, which
are handled specially as noted below.
The third major change is providing builtin.mk and version.mk files
for each of the X11 distribution packages in pkgsrc. The builtin.mk
file can detect whether the native X11 distribution is the same as
the one provided by pkgsrc, and the version.mk file computes the
version of the X11 distribution package, whether it's built-in or not.
The fourth major change is that the buildlink3.mk files for X11 packages
that install parts which are part of X11 distribution packages, e.g.
Xpm, Xcursor, etc., now use imake to query the X11 distribution for
whether the software is already provided by the X11 distribution.
This is more accurate than grepping for a symbol name in the imake
config files. Using imake required sprinkling various builtin-imake.mk
helper files into pkgsrc directories. These files are used as input
to imake since imake can't use stdin for that purpose.
The fifth major change is in how packages note that they use X11.
Instead of setting USE_X11, package Makefiles should now include
x11.buildlink3.mk instead. This causes the X11 package buildlink3
and builtin logic to be executed at the correct place for buildlink3.mk
and builtin.mk files that previously set USE_X11, and fixes packages
that relied on buildlink3.mk files to implicitly note that X11 is
needed. Package buildlink3.mk should also include x11.buildlink3.mk
when linking against the package libraries requires also linking
against the X11 libraries. Where it was obvious, redundant inclusions
of x11.buildlink3.mk have been removed.
http://cairographics.org/manual/cairo-Microsoft-Windows-Backend.html
Disabled backend: quartz
------------------------
Unfortunately, the quartz backend code is currently out of date with
respect to some recent backend interface changes. So, the quartz
backend is disabled in this snapshot.
If the quartz backend is brought up-to-date before the next snapshot,
we would be glad to make a 0.4.1 snapshot that re-enables it, (we do
not expect many more big backend interface changes).
API Changes
-----------
The font system has been revamped, (as Owen Taylor's work with
integrating pango and cairo gave us the first serious usage of the
non-toy font API).
One fundamental, user-visible change is that the cairo_font_t object
now represents a font that is scaled to a particular device
resolution. Further changes are described below.
cairo.h
-------
Removed cairo_font_set_transform and cairo_font_current_transform.
Added cairo_font_extents and cairo_font_glyph_extents. See
documentation for details:
http://cairographics.org/manual/cairo-cairo-t.html#cairo-font-extents
cairo-ft.h
----------
The cairo_ft_font API changed considerably. Please see the
documentation for details:
http://cairographics.org/manual/cairo-FreeType-Fonts.html
Performance
-----------
Make the fast-path clipping (pixel-aligned rectangles) faster.
Add optimization for applying a constant alpha to a pattern.
Optimize gradients that are horizontal or vertical in device space.
Xlib: When RENDER is not available, use image surfaces for
intermediate surfaces rather than xlib surfaces.
Backend-specific changes
------------------------
Glitz
-----
Major update to glitz backend. The output quality should now be just
as good as the image and xlib backends.
Track changes to glitz 0.4.0.
PDF
---
Various improvements to produce more conformant output.
Internals
---------
David Reveman contributed a large re-work of the cairo_pattern_t
implementation, providing cleaner code and more optimization
opportunities.
Backend interface changes
-------------------------
Rework backend interface to accept patterns, not surfaces for source
and mask.
Remove set_matrix, set_filter, and set_repeat functions.
More sophisticated backend interface for image fallbacks,
({acquire,release}_{source,dest}_image() and clone_similar).
Bug fixes
---------
Only install header files for backends that have been compiled.
Fixed some rounding errors leading to incorrectly placed glyphs.
Many other minor fixes.
New license: LGPL/MPL
---------------------
The most significant news with this release is that the license of
cairo has changed. It is now dual-licensed under the LGPL and the
MPL. For details see the COPYING file as well as COPYING-LGPL-2.1 and
COPYING-MPL-1.1.
I express my thanks to everyone involved in the license change process
for their patience and support!
New font and glyph internals
----------------------------
Graydon Hoare has put a tremendous amount of work into new internals
for handling fonts and glyphs, including caches where appropriate.
This work has no impact on the user-level API, but should result in
great performance improvements for applications using text.
New test suite
--------------
This snapshot of cairo includes a (small) test suite in
cairo/test. The tests can be run with "make check". The test suite was
designed to make it very easy to add new tests, and we hope to see
many contributions here. As you find bugs, please try adding a minimal
test case to the suite, and submit it with the bug report to the
cairo@cairographics.org mailing list. This will make it much easier
for us to track progress in fixing bugs.
New name for glitz backend
--------------------------
The gl backend has now been renamed to the glitz backend. This means
that the following names have changed:
CAIRO_HAS_GL_SURFACE -> CAIRO_HAS_GLITZ_SURFACE
cairo_set_target_gl -> cairo_set_target_glitz
cairo_gl_surface_create -> cairo_glitz_surface_create
This change obviously breaks backwards compatibility for applications
using the old gl backend.
Up-to-date with latest glitz snapshots
--------------------------------------
This snapshot of cairo is now up to date with the latest glitz
snapshot, (currently 0.2.3). We know that the latest cairo and glitz
snapshots have been incompatible for a very long time. We've finally
fixed that now and we're determined to not let that happen again.
Revert some tessellation regression bugs
Miscellaneous changes
---------------------
Changed CAIRO_FILTER_DEFAULT to CAIRO_FILTER_BEST to make gradients
easier.
Track XCB API change regarding iterators.
Various bug fixes
-----------------
Fix calculation of required number of vertices for pen.
Fix to avoid zero-dimensioned pixmaps.
Fix broken sort of pen vertices.
Fix bug when cairo_show_text called with a NULL string.
Fix clipping bugs.
Fix bug in computing image length with XCB.
Fix infinite loop bug in cairo_arc.
Fix memory management interactions with libpixman.
in the process. (More information on tech-pkg.)
Bump PKGREVISION and BUILDLINK_DEPENDS of all packages using libtool and
installing .la files.
Bump PKGREVISION (only) of all packages depending directly on the above
via a buildlink3 include.
All library names listed by *.la files no longer need to be listed
in the PLIST, e.g., instead of:
lib/libfoo.a
lib/libfoo.la
lib/libfoo.so
lib/libfoo.so.0
lib/libfoo.so.0.1
one simply needs:
lib/libfoo.la
and bsd.pkg.mk will automatically ensure that the additional library
names are listed in the installed package +CONTENTS file.
Also make LIBTOOLIZE_PLIST default to "yes".
Fixes for gcc 3.4
-----------------
Fix prototype mismatches so that cairo can be built by gcc 3.4.
Updates to track glitz
----------------------
Various fixes to support the latest glitz snapshot (0.1.2).
Gradient updates
----------------
Radial gradients now support both inner and outer circles.
Transformed linear gradients are now properly handled.
Fixes for extend type reflect.
Glitz updates
-------------
Converted shading routines to use fixed point values and introduced a
shading operator structure for more efficient shading calculations.
Support compositing with mask surface when mask is solid or
multi-texturing is available.
PNG backend cleanups
--------------------
Fix output to properly compensate for pre-multiplied alpha format in cairo.
Add support for A8 and A1 image formats.
Bug fixes
---------
Avoid crash or infinite loop on null strings and degeneratively short
splines.
New? bugs in cairo_clip
-----------------------
There are some fairly serious bugs in cairo_clip. It is sometimes
causing an incorrect result. And even when it does work, it is
sometimes so slow as to be unusable. Some of these bugs may not be
new, (indeed cairo_clip has only ever had a braindead-slow
implementation), but I think they're worth mentioning here.
* Cairo was updated to track the changes in libpixman, and now depends
on libpixman version 0.1.1
Changes 0.1.21:
* New OpenGL backend
* Automatic detection of available backends
Changes 0.1.20:
* New pattern API
* Update to XCB backend
* Faster clipping
Includes new functions:
- cairo_current_path, cairo_current_path_flat,
cairo_surface_get_filter. Support for XCB backend. Fixes for
building in cygwin. Adds cairo_surface_get_filter.
by moving the inclusion of buildlink3.mk files outside of the protected
region. This bug would be seen by users that have set PREFER_PKGSRC
or PREFER_NATIVE to non-default values.
BUILDLINK_PACKAGES should be ordered so that for any package in the
list, that package doesn't depend on any packages to the left of it
in the list. This ordering property is used to check for builtin
packages in the correct order. The problem was that including a
buildlink3.mk file for <pkg> correctly ensured that <pkg> was removed
from BUILDLINK_PACKAGES and appended to the end. However, since the
inclusion of any other buildlink3.mk files within that buildlink3.mk
was in a region that was protected against multiple inclusion, those
dependencies weren't also moved to the end of BUILDLINK_PACKAGES.
Cairo is a vector graphics library with cross-device output support. Currently
supported output targets include the X Window System and in-memory image
buffers. PostScript and PDF file output is planned. Cairo is designed to
produce identical output on all output media while taking advantage of display
hardware acceleration when available (eg. through the X Render Extension).
Cairo provides a stateful user-level API with capabilities similar to the PDF
1.4 imaging model. Cairo provides operations including stroking and filling
Bezier cubic splines, transforming and compositing translucent images, and
antialiased text rendering.