2007-04-13 17:36:31 -07:00
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
Of all the work that went into the 1.4.4 release
|
|
|
|
|
|
|
|
|
|
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!
|
|
|
|
|
|
|
|
|
|
Other improvements since 1.4.2
|
|
|
|
|
------------------------------
|
|
|
|
|
• Centralize mutex declarations (will reduce future build breaks),
|
|
|
|
|
(Chris Wilson)
|
|
|
|
|
|
|
|
|
|
• Reduce malloc by caching recently freed pattern objects (Chris
|
|
|
|
|
Wilson)
|
|
|
|
|
|
|
|
|
|
• Fix some broken composite operations (David Reveman)
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=5777
|
|
|
|
|
|
|
|
|
|
Backend-specific fixes
|
|
|
|
|
----------------------
|
|
|
|
|
PDF:
|
|
|
|
|
• Use TJ operator for more compact representation of glyphs (Adrian
|
|
|
|
|
Johnson)
|
|
|
|
|
|
|
|
|
|
• Fix glyph positioning bug when glyphs are not horizontal
|
|
|
|
|
http://lists.freedesktop.org/archives/cairo/2007-April/010337.html
|
|
|
|
|
|
|
|
|
|
win32:
|
|
|
|
|
• Fix crash when rendering with bitmap fonts (Carl Worth)
|
|
|
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=376498
|
|
|
|
|
|
|
|
|
|
xlib:
|
|
|
|
|
• Turn metrics-hinting on by default (Behdad Esfahbod)
|
|
|
|
|
|
|
|
|
|
• Fix edge-effect problem with transformed images drawn to xlib
|
|
|
|
|
(Behdad Esfahbod)
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10508
|
|
|
|
|
|
|
|
|
|
• Avoid dereferencing a NULL screen. (Chris Wilson)
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10517
|
|
|
|
|
|
|
|
|
|
Quartz/ATSUI:
|
|
|
|
|
• Fix scaling of glyph surfaces
|
|
|
|
|
(Brian Ewins)
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=9568
|
|
|
|
|
|
|
|
|
|
• Fix compilation failure when both xlib and quartz enabled
|
|
|
|
|
(Brian Ewins)
|
|
|
|
|
|
|
|
|
|
• Fix rounding bug leading to incorrectly positioned glyphs
|
|
|
|
|
(Robert O'Callahan)
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10531
|
|
|
|
|
|
2007-03-19 23:22:39 -07:00
|
|
|
Release 1.4.2 (2007-03-19 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
=========================================================
|
|
|
|
|
This is the first update release in cairo's stable 1.4 series. It
|
|
|
|
|
comes just less than 2 weeks after 1.4.0. We hadn't anticipated an
|
|
|
|
|
update this early, but we've managed to collect some important fixes
|
|
|
|
|
that we wanted to get out to cairo users as soon as possible, (6 fixes
|
|
|
|
|
for crashes, 1 case where graphical elements would not be drawn at
|
|
|
|
|
all, a handful of backend-specific bugs, and several important build
|
|
|
|
|
fixes).
|
|
|
|
|
|
|
|
|
|
There's almost nothing but bug fixes in this release, (see below one
|
|
|
|
|
optimization that Behdad did sneak in), so we recommend that everyone
|
|
|
|
|
upgrade to this release when possible.
|
|
|
|
|
|
|
|
|
|
Thanks to the many people that worked to fix these bugs, and those
|
|
|
|
|
that did the work to report them and to test the fixes, (wherever
|
|
|
|
|
possible both names are credited below).
|
|
|
|
|
|
|
|
|
|
Critical fixes
|
|
|
|
|
--------------
|
|
|
|
|
• Fix a crash due to a LOCK vs. UNLOCK typo (M. Drochner fixing Carl
|
|
|
|
|
Worth's embarrassing typo).
|
|
|
|
|
|
|
|
|
|
http://bugs.freedesktop.org/show_bug.cgi?id=10235
|
|
|
|
|
|
|
|
|
|
• Fix potential buffer overflow, which on some systems with a checking
|
|
|
|
|
variant of snprintf would lead to a crash (Adrian Johnson, Stanislav
|
|
|
|
|
Brabec, and sangu).
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10267
|
|
|
|
|
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=232576
|
|
|
|
|
|
|
|
|
|
• Fix a crash in cairo_stroke_extents or cairo_in_stroke when line
|
|
|
|
|
width is 0.0. (Carl Worth and Sebastien Bacher)
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10231
|
|
|
|
|
|
|
|
|
|
• Fix a crash on certain combinations of X server/video drivers (Carl
|
|
|
|
|
Worth and Tomas Carnecky).
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10250
|
|
|
|
|
|
|
|
|
|
• Fix a crash due to mishandling of invalid user input (Carl Worth and
|
|
|
|
|
Alexander Darovsky).
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=9844
|
|
|
|
|
|
|
|
|
|
• xlib: Cleanup server-side glyph caches on XCloseDisplay. This
|
|
|
|
|
eliminated a crash detected by the perf suite, (and that
|
|
|
|
|
applications could have run into as well). (Chris Wilson)
|
|
|
|
|
|
|
|
|
|
Other bug fixes
|
|
|
|
|
---------------
|
|
|
|
|
• Fix for some geometry which simply disappeared under some
|
|
|
|
|
transformations---a stroked line with an extreme skew in X, for
|
|
|
|
|
example (Carl Worth and Jonathan Watt).
|
|
|
|
|
|
|
|
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=373632
|
|
|
|
|
|
|
|
|
|
• SVG: Fix radial gradients for CAIRO_EXTEND_REFLECT and when r0 > r1
|
|
|
|
|
(Emmanuel Pacaud).
|
|
|
|
|
|
|
|
|
|
• PDF: Set page group color space to DeviceRGB.
|
|
|
|
|
|
|
|
|
|
This fixes incorrect (muddy) transparent colors when rendering cairo
|
|
|
|
|
PDF output in some viewers. (Adrian Johnson, Adam Goode, and
|
|
|
|
|
MenTaLguY).
|
|
|
|
|
|
|
|
|
|
http://lists.freedesktop.org/archives/cairo/2006-November/008551.html
|
|
|
|
|
|
|
|
|
|
• win32: Return correct metrics when hinting is off, and fix font
|
|
|
|
|
descent computation (Behdad Esfahbod).
|
|
|
|
|
|
|
|
|
|
• quartz: Fix glyph interfaces to correctly return user-space rather
|
|
|
|
|
than device-space coordinates (Brian Ewins).
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=9568
|
|
|
|
|
|
|
|
|
|
• xcb: Fix parameter-order confusion with xcb_create_pixmap, which now
|
|
|
|
|
makes all tests that pass with xlib now pass with xcb (Carl Worth,
|
|
|
|
|
Jamey Sharp).
|
|
|
|
|
|
|
|
|
|
• Fix some memory leaks in the perf suite (Chris Wilson).
|
|
|
|
|
|
|
|
|
|
• Fix perf suite to consider changes in pixman/src (Mathias
|
|
|
|
|
Hasselmann).
|
|
|
|
|
|
|
|
|
|
Build fixes
|
|
|
|
|
-----------
|
|
|
|
|
• Don't include pre-generated cairo-features.h file. This was causing
|
|
|
|
|
build failures when building with the directfb backend enabled
|
|
|
|
|
(Behdad Esfahbod).
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10189
|
|
|
|
|
|
|
|
|
|
• Eliminate use of maintainer mode from cairo's automake/configure
|
|
|
|
|
script. This means that updates to files such as Makefile.am will
|
|
|
|
|
take effect, (by rerunning automake and friends as necessary) when
|
|
|
|
|
invoking make rather than being silently ignored. (Behdad Esfahbod)
|
|
|
|
|
|
|
|
|
|
• Don't compile cairo-deflate-stream.c, which depends on zlib, unless
|
|
|
|
|
building the pdf backend which requires it. (Carl Worth, Tor
|
|
|
|
|
Lillqvist)
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10202
|
|
|
|
|
|
|
|
|
|
• Don't make the ps backend link against zlib anymore, since it
|
|
|
|
|
doesn't require it (Carl Worth).
|
|
|
|
|
|
|
|
|
|
• Use "find !" rather than "find -not" for better portability (Thomas
|
|
|
|
|
Klausner).
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10226
|
|
|
|
|
|
|
|
|
|
• Don't use unsupported visibility attribute "hidden" on Solaris
|
|
|
|
|
(Gilles Dauphin, Thomas Klausner).
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10227
|
|
|
|
|
|
|
|
|
|
Optimization
|
|
|
|
|
------------
|
|
|
|
|
• It was Behdad that suggested we focus strictly on bug fixes now that
|
|
|
|
|
we shipped so many performance improvements in 1.4.0, but it was
|
|
|
|
|
also Behdad that got distracted by the chance to remove a lot of
|
|
|
|
|
mallocs from cairo. Paths, gstates, trapezoids, splines, polygons,
|
|
|
|
|
and gradient color stops will now use small, stack-allocated buffers
|
|
|
|
|
in the most common cases rather than calling malloc as
|
|
|
|
|
often. (Behdad Esfahbod). And look for more from Mathias Hasselmann
|
|
|
|
|
soon.
|
|
|
|
|
|
2007-03-06 01:09:02 -08:00
|
|
|
Release 1.4.0 (2007-03-06 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
=========================================================
|
|
|
|
|
The many people[*] who have been working hard on cairo are very
|
|
|
|
|
pleased to announce the long-awaited release of cairo 1.4. This
|
|
|
|
|
release comes 4 months after the last stable update release (1.2.6)
|
|
|
|
|
and 9 months since the initial release of 1.2.0.
|
|
|
|
|
|
|
|
|
|
The release notes below are intended to capture the highlights of the
|
|
|
|
|
changes that have occurred from the 1.2 series to the new 1.4.0
|
|
|
|
|
release.
|
|
|
|
|
|
|
|
|
|
Performance improvements
|
|
|
|
|
------------------------
|
|
|
|
|
Within the cairo project, the last 6 months or so has seen an intense
|
|
|
|
|
effort focusing on the performance of cairo itself. That effort has
|
|
|
|
|
paid off considerably, as can be seen in the following highlights of
|
2007-03-06 01:25:17 -08:00
|
|
|
some of the performance differences from cairo 1.2.6 to cairo 1.4.0.
|
|
|
|
|
|
|
|
|
|
(Note: The performance results reported here were measured on an x86
|
|
|
|
|
laptop. Many of the improvements in 1.4---particular those involving
|
|
|
|
|
text rendering---are even more dramatic on embedded platforms without
|
|
|
|
|
hardware floating-point units. Such devices played an important part
|
|
|
|
|
of many of the optimizations that found their way into cairo over the
|
|
|
|
|
last few months.)
|
2007-03-06 01:09:02 -08:00
|
|
|
|
|
|
|
|
• Dramatic improvement when drawing objects that are mostly off-screen
|
|
|
|
|
with the image backend (with the xlib backend this case is still
|
|
|
|
|
slow due to an X server bug):
|
|
|
|
|
|
|
|
|
|
image-rgba long-lines-uncropped-100 479.64 -> 4.98: 96.24x speedup
|
|
|
|
|
███████████████████████████████████████████████▋
|
|
|
|
|
|
|
|
|
|
• Dramatic improvement when copying a small fraction of an image
|
|
|
|
|
surface to an xlib surface:
|
|
|
|
|
|
|
|
|
|
xlib-rgba subimage_copy-512 3.93 -> 0.07: 54.52x speedup
|
|
|
|
|
██████████████████████████▊
|
|
|
|
|
|
|
|
|
|
• Dramatic improvement to tessellation speed for complex objects:
|
|
|
|
|
|
|
|
|
|
image-rgb tessellate-256-100 874.16 -> 34.79: 25.13x speedup
|
|
|
|
|
████████████▏
|
|
|
|
|
xlib-rgba zrusin_another_fill-415 148.40 -> 13.85: 10.72x speedup
|
|
|
|
|
████▉
|
|
|
|
|
xlib-rgb world_map-800 680.20 -> 345.54: 1.97x speedup
|
|
|
|
|
▌
|
|
|
|
|
|
|
|
|
|
• Dramatic improvement to the speed of stroking rectilinear shapes,
|
|
|
|
|
(such as the outline of a rectangle or "box"):
|
|
|
|
|
|
|
|
|
|
image-rgb box-outline-stroke-100 0.18 -> 0.01: 24.22x speedup
|
|
|
|
|
███████████▋
|
|
|
|
|
xlib-rgb box-outline-stroke-100 0.46 -> 0.06: 8.05x speedup
|
|
|
|
|
███▌
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
• Dramatic improvements to text rendering speeds:
|
|
|
|
|
|
|
|
|
|
xlib-rgba text_image_rgba_over-256 63.12 -> 9.61: 6.57x speedup
|
|
|
|
|
██▊
|
|
|
|
|
|
|
|
|
|
• 3x improvements to floating-point to fixed-point conversion speeds:
|
|
|
|
|
|
|
|
|
|
image-rgba pattern_create_radial-16 9.29 -> 3.44: 2.70x speedup
|
|
|
|
|
▉
|
|
|
|
|
|
|
|
|
|
• 2x improvements to linear gradient computation:
|
|
|
|
|
|
|
|
|
|
image-rgb paint_linear_rgb_source-512 26.22 -> 11.61: 2.26x speedup
|
|
|
|
|
▋
|
|
|
|
|
|
|
|
|
|
• 2x improvement to a case common in PDF rendering:
|
|
|
|
|
|
|
|
|
|
image-rgb unaligned_clip-100 0.10 -> 0.06: 1.81x speedup
|
|
|
|
|
▍
|
|
|
|
|
|
|
|
|
|
• 1.3x improvement to rectangle filling speed (note: this improvement
|
|
|
|
|
is new since 1.3.16---previously this test case was a 1.3x slowdown
|
|
|
|
|
compared to 1.2.6):
|
|
|
|
|
|
|
|
|
|
image-rgba rectangles-512 6.19 -> 4.37: 1.42x speedup
|
|
|
|
|
▎
|
|
|
|
|
xlib-rgba rectangles-512 7.48 -> 5.58: 1.34x speedup
|
|
|
|
|
▏
|
|
|
|
|
|
|
|
|
|
NOTE: In spite of our best efforts, there are some measurable
|
|
|
|
|
performance regressions in 1.4 compared to 1.2. It appears that the
|
|
|
|
|
primary problem is the increased overhead of the new tessellator when
|
|
|
|
|
drawing many, very simple shapes. The following test cases capture
|
|
|
|
|
some of that slowdown:
|
|
|
|
|
|
|
|
|
|
image-rgba mosaic_tessellate_lines-800 11.03 -> 14.29: 1.30x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgba box-outline-fill-100 0.01 -> 0.01: 1.26x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgba fill_solid_rgb_over-64 0.20 -> 0.22: 1.12x slowdown
|
|
|
|
|
|
|
|
|
|
image-rgba fill_image_rgba_over-64 0.23 -> 0.25: 1.10x slowdown
|
|
|
|
|
|
|
|
|
|
xlib-rgb paint_image_rgba_source-256 3.24 -> 3.47: 1.07x slowdown
|
|
|
|
|
|
|
|
|
|
We did put some special effort into eliminating this slowdown for the
|
|
|
|
|
very common case of drawing axis-aligned rectangles with an identity
|
|
|
|
|
matrix (see the box-outline-stroke and rectangles speedup numbers
|
|
|
|
|
above). Eliminating the rest of this slowdown will be a worthwhile
|
|
|
|
|
project going forward.
|
|
|
|
|
|
|
|
|
|
Also note that the "box-outline-fill" case is a slowdown while
|
|
|
|
|
"box-outline-stroke" is a (huge) speedup. These two test cases
|
|
|
|
|
resulted from the fact that some GTK+ theme authors were filling
|
|
|
|
|
between two rectangles to avoid slow performance from the more natural
|
|
|
|
|
means of achieving the same shape by stroking a single rectangle. With
|
|
|
|
|
1.4 that workaround should definitely be eliminated as it will now
|
|
|
|
|
cause things to perform more slowly.
|
|
|
|
|
|
|
|
|
|
Greatly improved PDF output
|
|
|
|
|
---------------------------
|
|
|
|
|
We are very happy to be able to announce that cairo-generated PDF
|
|
|
|
|
output will now have text that can be selected, cut-and-pasted, and
|
|
|
|
|
searched with most capable PDF viewer applications. This is something
|
|
|
|
|
that was not ever possible with cairo 1.2.
|
|
|
|
|
|
|
|
|
|
Also, the PDF output now has much more compact encoding of text than
|
|
|
|
|
before. Cairo is now much more careful to not embed multiple copies of
|
|
|
|
|
the same font at different sizes. It also compresses text and font
|
|
|
|
|
streams within the PDF output.
|
|
|
|
|
|
|
|
|
|
API additions
|
|
|
|
|
-------------
|
|
|
|
|
There are several new functions available in 1.4 that were not
|
|
|
|
|
available in 1.2. Curiously, almost all of the new functions simply
|
|
|
|
|
allow the user to query state that has been set in cairo (many new
|
|
|
|
|
"get" functions) rather than providing any fundamentally new
|
|
|
|
|
operations. The new functionality is:
|
|
|
|
|
|
|
|
|
|
• Getting information about the current clip region
|
|
|
|
|
|
|
|
|
|
cairo_clip_extents
|
|
|
|
|
cairo_copy_clip_rectangle_list
|
|
|
|
|
cairo_rectangle_list_destroy
|
|
|
|
|
|
|
|
|
|
• Getting information about the current dash setting
|
|
|
|
|
|
|
|
|
|
cairo_get_dash_count
|
|
|
|
|
cairo_get_dash
|
|
|
|
|
|
|
|
|
|
• Getting information from a pattern
|
|
|
|
|
|
|
|
|
|
cairo_pattern_get_rgba
|
|
|
|
|
cairo_pattern_get_surface
|
|
|
|
|
cairo_pattern_get_color_stop_rgba
|
|
|
|
|
cairo_pattern_get_color_stop_count
|
|
|
|
|
cairo_pattern_get_linear_points
|
|
|
|
|
cairo_pattern_get_radial_circles
|
|
|
|
|
|
|
|
|
|
• Getting the current scaled font
|
|
|
|
|
|
|
|
|
|
cairo_get_scaled_font
|
|
|
|
|
|
|
|
|
|
• Getting reference counts
|
|
|
|
|
|
|
|
|
|
cairo_get_reference_count
|
|
|
|
|
cairo_surface_get_reference_count
|
|
|
|
|
cairo_pattern_get_reference_count
|
|
|
|
|
cairo_font_face_get_reference_count
|
|
|
|
|
cairo_scaled_font_get_reference_count
|
|
|
|
|
|
|
|
|
|
• Setting/getting user data on objects
|
|
|
|
|
|
|
|
|
|
cairo_set_user_data
|
|
|
|
|
cairo_get_user_data
|
|
|
|
|
cairo_pattern_set_user_data
|
|
|
|
|
cairo_pattern_get_user_data
|
|
|
|
|
cairo_scaled_font_set_user_data
|
|
|
|
|
cairo_scaled_font_get_user_data
|
|
|
|
|
|
|
|
|
|
• New cairo-win32 functions:
|
|
|
|
|
|
|
|
|
|
cairo_win32_surface_create_with_ddb
|
|
|
|
|
cairo_win32_surface_get_image
|
|
|
|
|
cairo_win32_scaled_font_get_logical_to_device
|
|
|
|
|
cairo_win32_scaled_font_get_device_to_logical
|
|
|
|
|
|
|
|
|
|
API deprecation
|
|
|
|
|
---------------
|
|
|
|
|
The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never
|
|
|
|
|
worked as a format value for cairo_image_surface_create, and it wasn't
|
|
|
|
|
necessary for supporting 16-bit 565 X server visuals.
|
|
|
|
|
|
|
|
|
|
A sampling of bug fixes in cairo 1.4
|
|
|
|
|
------------------------------------
|
|
|
|
|
• Fixed radial gradients
|
|
|
|
|
• Fixed dashing (degenerate and "leaky" cases)
|
|
|
|
|
• Fixed transformed images in PDF/PS output (eliminate bogus repeating)
|
|
|
|
|
• Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD
|
|
|
|
|
• cairo_show_page no longer needed for single-page output
|
|
|
|
|
• SVG: Fix bug preventing text from appearing in many viewers
|
|
|
|
|
• cairo-ft: Return correct metrics when hinting is off
|
|
|
|
|
• Eliminate crash in cairo_create_similar if nil surface is returned
|
|
|
|
|
• Eliminate crash after INVALID_RESTORE error
|
|
|
|
|
• Fix many bugs related to multi-threaded use and locking
|
|
|
|
|
• Fix for glyph spacing 32 times larger than desired (cairo-win32)
|
|
|
|
|
• Fixed several problems in cairo-atsui (assertion failures)
|
|
|
|
|
• Fix PDF output to avoid problems when printing from Acrobat Reader
|
|
|
|
|
• Fix segfault on Mac OS X (measuring a zero-length string)
|
|
|
|
|
• Fix text extents to not include the size of non-inked characters
|
|
|
|
|
• Fix for glyph cache race condition in glitz backend (Jinghua Luo)
|
|
|
|
|
• Fix make check to work on OPD platforms (IA64 or PPC64)
|
|
|
|
|
• Fix compilation problems of cairo "wideint" code on some platforms
|
|
|
|
|
• Many, many others...
|
|
|
|
|
|
|
|
|
|
Experimental backends (quartz, XCB, OS/2, BeOS, directfb)
|
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
None of cairo's experimental backends are graduating to "supported"
|
|
|
|
|
status with 1.4.0, but two of them in particular (quartz and xcb), are
|
|
|
|
|
very close.
|
|
|
|
|
|
|
|
|
|
The quartz baceknd has been entirely rewritten and is now much more
|
|
|
|
|
efficient. The XCB backend has been updated to track the latest XCB
|
|
|
|
|
API (which recently had a 1.0 release).
|
|
|
|
|
|
|
|
|
|
We hope to see these backends become supported in a future release,
|
|
|
|
|
(once they are passing all the tests in cairo's test suite).
|
|
|
|
|
|
|
|
|
|
The experimental OS/2 backend is new in cairo 1.4 compared to cairo
|
|
|
|
|
1.2.
|
|
|
|
|
|
|
|
|
|
Documentation improvements
|
|
|
|
|
--------------------------
|
|
|
|
|
We have added documentation for several functions and types that
|
|
|
|
|
were previously undocumented, and improved documentation on other
|
|
|
|
|
ones. As of this release, there remain only two undocumented
|
|
|
|
|
symbols: cairo_filter_t and cairo_operator_t.
|
|
|
|
|
|
|
|
|
|
[*]Thanks to everyone
|
|
|
|
|
---------------------
|
|
|
|
|
I've accounted for 41 distinct people with attributed code added to
|
|
|
|
|
cairo between 1.2.6 and 1.4.0, (their names are below). That's an
|
|
|
|
|
impressive number, but there are certainly dozens more that
|
|
|
|
|
contributed with testing, suggestions, clarifying questions, and
|
|
|
|
|
encouragement. I'm grateful for the friendships that have developed as
|
|
|
|
|
we have worked on cairo together. Thanks to everyone for making this
|
|
|
|
|
all so much fun!
|
|
|
|
|
|
|
|
|
|
Adrian Johnson, Alfred Peng, Alp Toker, Behdad Esfahbod,
|
|
|
|
|
Benjamin Otte, Brian Ewins, Carl Worth, Christian Biesinger,
|
|
|
|
|
Christopher (Monty) Montgomery, Daniel Amelang, Dan Williams,
|
|
|
|
|
Dave Yeo, David Turner, Emmanuel Pacaud, Eugeniy Meshcheryakov,
|
|
|
|
|
Frederic Crozat, Hans Breuer, Ian Osgood, Jamey Sharp, Jeff Muizelaar,
|
|
|
|
|
Jeff Smith, Jinghua Luo, Jonathan Watt, Joonas Pihlaja, Jorn Baayen,
|
|
|
|
|
Kalle Vahlman, Kjartan Maraas, Kristian Høgsberg, M Joonas Pihlaja,
|
|
|
|
|
Mathias Hasselmann, Mathieu Lacage, Michael Emmel, Nicholas Miell,
|
|
|
|
|
Pavel Roskin, Peter Weilbacher, Robert O'Callahan,
|
|
|
|
|
Soren Sandmann Pedersen, Stuart Parmenter, T Rowley,
|
|
|
|
|
Vladimir Vukicevic
|
|
|
|
|
|
2007-03-02 13:18:11 -08:00
|
|
|
Snapshot 1.3.16 (2007-03-02 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
===========================================================
|
|
|
|
|
New API functions
|
|
|
|
|
-----------------
|
|
|
|
|
A few new public functions have been added to the cairo API since the
|
|
|
|
|
1.3.14 snapshot. These include a function to query the current scaled
|
|
|
|
|
font:
|
|
|
|
|
|
|
|
|
|
cairo_get_scaled_font
|
|
|
|
|
|
|
|
|
|
New functions to query the reference count of all cairo objects:
|
|
|
|
|
|
|
|
|
|
cairo_get_reference_count
|
|
|
|
|
|
|
|
|
|
cairo_surface_get_reference_count
|
|
|
|
|
cairo_pattern_get_reference_count
|
|
|
|
|
|
|
|
|
|
cairo_font_face_get_reference_count
|
|
|
|
|
cairo_scaled_font_get_reference_count
|
|
|
|
|
|
|
|
|
|
And new functions to allow the use of user_data with any cairo object,
|
2007-03-02 16:49:47 -05:00
|
|
|
(previously these were only available on cairo_surface_t and
|
|
|
|
|
cairo_font_face_t objects):
|
2007-03-02 13:18:11 -08:00
|
|
|
|
|
|
|
|
cairo_set_user_data
|
|
|
|
|
cairo_get_user_data
|
|
|
|
|
|
|
|
|
|
cairo_pattern_set_user_data
|
|
|
|
|
cairo_pattern_get_user_data
|
|
|
|
|
|
|
|
|
|
cairo_scaled_font_set_user_data
|
|
|
|
|
cairo_scaled_font_get_user_data
|
|
|
|
|
|
|
|
|
|
Usability improvement for PDF/PS/SVG generation
|
|
|
|
|
-----------------------------------------------
|
|
|
|
|
In previous versions of cairo, generating single-page output with the
|
|
|
|
|
cairo-pdf, cairo-ps, or cairo-svg backends required a final call to
|
|
|
|
|
cairo_show_page. This was often quite confusing as people would port
|
|
|
|
|
functional code from a non-paginated backend and be totally mystified
|
|
|
|
|
as to why the output was blank until they learned to add this call.
|
|
|
|
|
|
|
|
|
|
Now that call to cairo_show_page is optional, (it will be generated
|
|
|
|
|
implicitly if the user does not call it). So cairo_show_page is only
|
2007-03-02 16:49:47 -05:00
|
|
|
needed to explicitly separate multiple pages.
|
2007-03-02 13:18:11 -08:00
|
|
|
|
|
|
|
|
Greatly improved PDF output
|
|
|
|
|
---------------------------
|
|
|
|
|
We are very happy to be able to announce that cairo-generated PDF
|
|
|
|
|
output will now have text that can be selected, cut-and-paste, and
|
|
|
|
|
searched with most capable PDF viewer applications. This is something
|
|
|
|
|
that was not ever possible with cairo 1.2.
|
|
|
|
|
|
|
|
|
|
Also, the PDF output now has much more compact encoding of text than
|
|
|
|
|
before. Cairo is now much more careful to not embed multiple copies of
|
|
|
|
|
the same font at different sizes. It also compresses text and font
|
|
|
|
|
streams within the PDF output.
|
|
|
|
|
|
|
|
|
|
Major bug fixes
|
|
|
|
|
---------------
|
|
|
|
|
• Fixed radial gradients
|
|
|
|
|
|
|
|
|
|
The rendering of radial gradients has been greatly improved. In
|
|
|
|
|
the cairo 1.2 series, there was a serious regression affecting
|
|
|
|
|
radial gradients---results would be very incorrect unless one of
|
|
|
|
|
the gradient circles had a radius of 0.0 and a center point within
|
|
|
|
|
the other circle. These bugs have now been fixed.
|
|
|
|
|
|
|
|
|
|
• Fixed dashing
|
|
|
|
|
|
|
|
|
|
Several fixes have been made to the implementation of dashed
|
|
|
|
|
stroking. Previously, some dashed, stroked rectangles would
|
|
|
|
|
mis-render and fill half of the rectangle with a large triangular
|
|
|
|
|
shape. This bug has now been fixed.
|
|
|
|
|
|
|
|
|
|
• Fixed transformed images in PDF/PS output
|
|
|
|
|
|
|
|
|
|
In previous versions of cairo, painting with an image-based source
|
|
|
|
|
surface pattern to the PDF or PS backends would cause many kinds
|
|
|
|
|
of incorrect results. One of the most common problems was that an
|
|
|
|
|
image would be repeated many times even when the user had
|
|
|
|
|
explicitly requested no repetition with CAIRO_EXTEND_NONE. These
|
|
|
|
|
bugs have now been fixed.
|
|
|
|
|
|
|
|
|
|
• Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD
|
|
|
|
|
|
|
|
|
|
In the 1.2 version of cairo any use of CAIRO_EXTEND_REFLECT or
|
|
|
|
|
CAIRO_EXTEND_PAD with a surface-based pattern resulted in an
|
|
|
|
|
error, (cairo would stop rendering). This bug has now been
|
|
|
|
|
fixed.
|
|
|
|
|
|
|
|
|
|
Now, CAIRO_EXTEND_REFLECT should work properly with surface
|
|
|
|
|
patterns.
|
|
|
|
|
|
|
|
|
|
CAIRO_EXTEND_PAD is still not working correctly, but it will now
|
|
|
|
|
simply behave as CAIRO_EXTEND_NONE rather than triggering the
|
|
|
|
|
error.
|
|
|
|
|
|
|
|
|
|
New rewrite of quartz backend (still experimental)
|
|
|
|
|
--------------------------------------------------
|
|
|
|
|
Cairo's quartz backend has been entirely rewritten and is now much
|
|
|
|
|
more efficient. This backend is still marked as experimental, not
|
|
|
|
|
supported, but it is now much closer to becoming an officially
|
|
|
|
|
supported backend. (For people that used the experimental nquartz
|
|
|
|
|
backend in previous snapshots, that implementation has now been
|
|
|
|
|
renamed from "nquartz" to "quartz" and has replaced the old quartz
|
|
|
|
|
backend.)
|
|
|
|
|
|
2007-03-02 22:52:38 -05:00
|
|
|
Documentation improvements
|
|
|
|
|
--------------------------
|
|
|
|
|
We have added documentation for several functions and types that
|
|
|
|
|
were previously undocumented, and improved documentation on other
|
|
|
|
|
ones. As of this release, there remain only two undocumented
|
|
|
|
|
symbols: cairo_filter_t and cairo_operator_t.
|
|
|
|
|
|
2007-03-02 13:18:11 -08:00
|
|
|
Other bug fixes
|
|
|
|
|
---------------
|
|
|
|
|
• cairo-svg: Fix bug that was preventing text from appearing in many
|
|
|
|
|
viewers
|
|
|
|
|
|
|
|
|
|
• cairo-ft: Return correct metrics when hinting is off
|
|
|
|
|
|
|
|
|
|
• Cairo 1.3.14 deadlocks in cairo_scaled_font_glyph_extents or
|
|
|
|
|
_cairo_ft_unscaled_font_lock_face
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=10035
|
|
|
|
|
|
2007-03-02 16:49:47 -05:00
|
|
|
• cairo crashes in cairo_create_similar if nil surface returned by
|
2007-03-02 13:18:11 -08:00
|
|
|
other->backend->create_similar
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=9844
|
|
|
|
|
|
2007-03-02 16:49:47 -05:00
|
|
|
• evolution crash in _cairo_gstate_backend_to_user()
|
2007-03-02 13:18:11 -08:00
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=9906
|
|
|
|
|
|
|
|
|
|
• Fix memory leak in rectilinear stroking code
|
|
|
|
|
|
|
|
|
|
Things not in this release
|
|
|
|
|
--------------------------
|
2007-03-02 16:49:47 -05:00
|
|
|
• Solid-surface-pattern cache: This patch had been applied during
|
2007-03-02 13:18:11 -08:00
|
|
|
the 1.3.x series, but it was reverted due to some inter-thread
|
|
|
|
|
problems it caused. The patch is interesting since it made a big
|
|
|
|
|
benefit for text rendering performance---so we'll work to bring a
|
|
|
|
|
corrected version of this patch back as soon as possible.
|
|
|
|
|
|
2007-02-14 00:32:54 -08:00
|
|
|
Snapshot 1.3.14 (2006-02-13 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
===========================================================
|
|
|
|
|
This is the seventh development snapshot in the 1.3 series, (and there
|
|
|
|
|
likely won't be many more before the 1.4.0 release). It comes just
|
|
|
|
|
over 3 weeks after the 1.3.12 snapshot.
|
|
|
|
|
|
|
|
|
|
Since we're so close to the 1.4.0 release, there are not a lot of new
|
|
|
|
|
features nor even a lot of new performance improvements in this
|
|
|
|
|
snapshot. Instead, there are a great number of bug fixes. Some are
|
|
|
|
|
long-standing bugs that we're glad to say goodbye to, and several are
|
|
|
|
|
fixes for regressions that were introduced as part of the optimization
|
|
|
|
|
efforts during the 1.3.x series.
|
|
|
|
|
|
|
|
|
|
PDF text selection fixed
|
|
|
|
|
------------------------
|
|
|
|
|
The inability to correctly select text in cairo-generated PDF has been
|
|
|
|
|
a defect ever since the initial support for the PDF backend in the
|
|
|
|
|
cairo 1.2.0 release. With the 1.3.14 snapshot, in most situations, and
|
|
|
|
|
with most PDF viewer applications, the PDF generated by cairo will
|
|
|
|
|
allow text to be correctly selected for copy-and-paste, (as well as
|
|
|
|
|
searching).
|
|
|
|
|
|
|
|
|
|
We're very excited about this new functionality, (and very grateful to
|
|
|
|
|
Adrian Johnson, Behdad Esfahbod, and others that have put a lot of
|
|
|
|
|
work into this lately). Please test this new ability and give feedback
|
|
|
|
|
on the cairo@cairographics.org list.
|
|
|
|
|
|
|
|
|
|
Many thread-safety issues fixed
|
|
|
|
|
-------------------------------
|
|
|
|
|
We've discovered that no release of cairo has ever provided safe text
|
|
|
|
|
rendering from a multi-threaded application. With the 1.3.14 snapshot
|
|
|
|
|
a huge number of the bugs in this area have been fixed, and multiple
|
|
|
|
|
application dvelopers have now reported success at writing
|
|
|
|
|
multi-threaded applications with cairo.
|
|
|
|
|
|
|
|
|
|
Other fixes
|
|
|
|
|
-----------
|
|
|
|
|
Fixed a bug that was causing glyph spacing to be 32 times larger than
|
|
|
|
|
desired when using cairo-win32.
|
|
|
|
|
|
|
|
|
|
Fixed a regression in the rendering of linear gradients that had been
|
|
|
|
|
present since the 1.3.8 snapshot.
|
|
|
|
|
|
|
|
|
|
Fixed several problems in cairo-atsui that were leading to assertion
|
|
|
|
|
failures when rendering text.
|
|
|
|
|
|
|
|
|
|
Fix corrupted results when rendering a transformed source image
|
|
|
|
|
surface to an xlib surface. This was a regression that had been
|
|
|
|
|
present since the 1.3.2 snapshot.
|
|
|
|
|
|
|
|
|
|
Fixed PDF output to prevent problems printing from some versions of
|
|
|
|
|
Acrobat Reader, (a single glyph was being substituted for every
|
|
|
|
|
glyph).
|
|
|
|
|
|
|
|
|
|
And many other fixes as well, (see the logs for details).
|
|
|
|
|
|
2007-01-20 02:58:15 -08:00
|
|
|
Snapshot 1.3.12 (2007-01-20 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
===========================================================
|
|
|
|
|
The relentless march toward the cairo 1.4 release continues, (even if
|
|
|
|
|
slightly late out of the starting blocks in 2007). This is the sixth
|
|
|
|
|
development snapshot in the 1.3 series. It comes 4 weeks after the
|
|
|
|
|
1.3.10 snapshot.
|
|
|
|
|
|
|
|
|
|
Performance
|
|
|
|
|
-----------
|
|
|
|
|
As usual, this snapshot has some fun performance improvements to show
|
|
|
|
|
off:
|
|
|
|
|
|
|
|
|
|
image-rgba long-lines-uncropped-100 470.08 -> 4.95: 94.91x speedup
|
|
|
|
|
███████████████████████████████████████████████
|
|
|
|
|
image-rgb long-lines-uncropped-100 461.60 -> 4.96: 93.02x speedup
|
|
|
|
|
██████████████████████████████████████████████
|
|
|
|
|
|
|
|
|
|
This 100x improvement, (and yes, that's 100x, not 100%), in the image
|
|
|
|
|
backend occurs when drawing large shapes where only a fraction of the
|
|
|
|
|
shape actually appears in the final result, (the rest being outside
|
|
|
|
|
the bounds of the destination surface). Many applications should see
|
|
|
|
|
speedups here, and the actual amount of speedup depends on the ratio
|
|
|
|
|
of non-visible to visible portions of geometry.
|
|
|
|
|
|
|
|
|
|
[Note: There remains a similar performance bug when drawing mostly
|
|
|
|
|
non-visible objects with the xlib backend. This is due to a similar
|
|
|
|
|
bug in the X server itself, but we hope a future cairo snapshot will
|
|
|
|
|
workaround that bug to get a similar speedup with the xlib backend.]
|
|
|
|
|
|
|
|
|
|
image-rgba unaligned_clip-100 0.09 -> 0.06: 1.67x speedup
|
|
|
|
|
▍
|
|
|
|
|
image-rgb unaligned_clip-100 0.09 -> 0.06: 1.66x speedup
|
|
|
|
|
▍
|
|
|
|
|
|
|
|
|
|
This speedup is due to further MMX optimization by Soeren Sandmann for
|
|
|
|
|
a case commonly hit when rendering PDF files, (and thanks to Jeff
|
|
|
|
|
Muizelaar for writing code to extract the test case for us).
|
|
|
|
|
|
|
|
|
|
There's another MMX optimization in this snapshot (without a fancy
|
|
|
|
|
speedup chart) by Dan Williams which improves compositing performance
|
|
|
|
|
specifically for the OLPC machine.
|
|
|
|
|
|
|
|
|
|
Thanks to Adrian Johnson, cairo's PDF output is now much more
|
|
|
|
|
efficient in the way it encodes text output. By reducing redundant
|
|
|
|
|
information and adding compression to text output streams, Adrian
|
|
|
|
|
achieved a ~25x improvement in the efficiency of encoding text in PDF
|
|
|
|
|
files, (was ~45 bytes per glyph and is now ~1.6 bytes per glyph).
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
In addition to those performance improvements, this snapshot includes
|
|
|
|
|
several bug fixes:
|
|
|
|
|
|
|
|
|
|
* A huge number of bug fixes for cairo-atsui text rendering, (for mac
|
|
|
|
|
OS X). These bugs affect font selection, glyph positioning, glyph
|
|
|
|
|
rendering, etc. One noteworthy bug fixes is that
|
|
|
|
|
cairo_select_font_face will no longer arbitrarily select bold nor
|
|
|
|
|
italic when not requested, (at least not when using a standard CSS2
|
|
|
|
|
font family name such as "serif", "sans-serif", "monospace", etc.).
|
|
|
|
|
All these fixes are thanks to Brian Ewins who continues to do a
|
|
|
|
|
great job as the new cairo-atsui maintainer.
|
|
|
|
|
|
|
|
|
|
* Fix PDF output so that images that are scaled down no longer
|
|
|
|
|
mysteriously repeat (Carl Worth).
|
|
|
|
|
|
|
|
|
|
* Fix segfault on Mac OS X dues to attempt to measure extents of a
|
|
|
|
|
zero-length string (Behdad Esfahbod).
|
|
|
|
|
|
|
|
|
|
* Fix text extents to not include the size of initial/trailing
|
|
|
|
|
non-inked characters (Behdad Esfahbod).
|
|
|
|
|
|
|
|
|
|
API tweaks
|
|
|
|
|
----------
|
|
|
|
|
Three functions have had API changes to improve consistency. Note that
|
|
|
|
|
the API functions being changed here are all functions that were
|
|
|
|
|
introduced as new functions during these 1.3.x snapshots. As always,
|
|
|
|
|
there will not be any API changes to functions included in a major
|
|
|
|
|
release (1.2.x, 1.4.x, etc.) of cairo.
|
|
|
|
|
|
|
|
|
|
The changes are as follows:
|
|
|
|
|
|
|
|
|
|
* Rename of cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list.
|
|
|
|
|
|
|
|
|
|
* Change cairo_get_dash_count to return an int rather than accepting a
|
|
|
|
|
pointer to an int for the return value.
|
|
|
|
|
|
|
|
|
|
* Change cairo_get_dash to have a void return type rather than
|
|
|
|
|
returning cairo_status_t.
|
|
|
|
|
|
|
|
|
|
It's possible there will be one more round of changes to these
|
|
|
|
|
functions, (and perhaps cairo_get_color_stop as well), as we seek to
|
|
|
|
|
establish a unifying convention for returning lists of values.
|
|
|
|
|
|
2006-12-23 00:29:21 -08:00
|
|
|
Snapshot 1.3.10 (2006-12-23 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
===========================================================
|
|
|
|
|
Santa Claus is coming just a little bit early this year, and he's
|
|
|
|
|
bringing a shiny new cairo snapshot for all the good little boys and
|
|
|
|
|
girls to play with.
|
|
|
|
|
|
|
|
|
|
This is the fifth development snapshot in the 1.3 series. It comes 9
|
|
|
|
|
days after the 1.3.8 snapshot, and still well within our goal of
|
|
|
|
|
having a new snapshot every week, (though don't expect one next
|
|
|
|
|
week---we'll all be too stuffed with sugar plums).
|
|
|
|
|
|
|
|
|
|
Speaking of sugar plums, there's a sweet treat waiting in this cairo
|
|
|
|
|
snapshot---greatly improved performance for stroking rectilinear
|
|
|
|
|
shapes, like the ever common rectangle:
|
|
|
|
|
|
|
|
|
|
image-rgb box-outline-stroke-100 0.18 -> 0.01: 25.58x speedup
|
|
|
|
|
████████████████████████▋
|
|
|
|
|
image-rgba box-outline-stroke-100 0.18 -> 0.01: 25.57x speedup
|
|
|
|
|
████████████████████████▋
|
|
|
|
|
xlib-rgb box-outline-stroke-100 0.49 -> 0.06: 8.67x speedup
|
|
|
|
|
███████▋
|
|
|
|
|
xlib-rgba box-outline-stroke-100 0.22 -> 0.04: 5.39x speedup
|
|
|
|
|
████▍
|
|
|
|
|
|
|
|
|
|
In past releases of cairo, some people had noticed that using
|
|
|
|
|
cairo_stroke to draw rectilinear shapes could be awfully slow. Many
|
|
|
|
|
people had worked around this by using cairo_fill with a more complex
|
|
|
|
|
path and gotten a 5-15x performance benefit from that.
|
|
|
|
|
|
|
|
|
|
If you're one of those people, please rip that workaround out, as now
|
|
|
|
|
the more natural use of cairo_stroke should be 1.2-2x faster than the
|
|
|
|
|
unnatural use of cairo_fill.
|
|
|
|
|
|
|
|
|
|
And if you hadn't ever implemented that workaround, then you just
|
|
|
|
|
might get to see your stroked rectangles now get drawn 5-25x faster.
|
|
|
|
|
|
|
|
|
|
Beyond that performance fix, there are a handful of bug fixes in this
|
|
|
|
|
snapshot:
|
|
|
|
|
|
|
|
|
|
* Fix for glyph cache race condition in glitz backend (Jinghua Luo)
|
|
|
|
|
|
|
|
|
|
* Many fixes for ATSUI text rendering (Brian Ewins)
|
|
|
|
|
|
|
|
|
|
* Un-break recent optimization-triggered regression in rendering text
|
|
|
|
|
with a translation in the font matrix (Behdad Esfahbod)
|
|
|
|
|
|
|
|
|
|
* Fix make check to work on OPD platforms (IA64 or PPC64)
|
|
|
|
|
(Frederic Crozat)
|
|
|
|
|
|
|
|
|
|
* Fix a couple of character spacing issues on Windows
|
|
|
|
|
(Jonathan Watt)
|
|
|
|
|
|
|
|
|
|
Have fun with that, everybody, and we'll be back for more in the new
|
|
|
|
|
year, (with a plan to add the last of our performance improvements in
|
|
|
|
|
this round, fix a few bad, lingering bugs, and then finish off a nice,
|
|
|
|
|
stable 1.4 release before the end of January).
|
|
|
|
|
|
|
|
|
|
-Carl
|
|
|
|
|
|
2006-12-14 20:43:31 -08:00
|
|
|
Snapshot 1.3.8 (2006-12-14 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
This is the fourth development snapshot in the 1.3 series. It comes
|
|
|
|
|
just slightly more than one week after the 1.3.6 snapshot.
|
|
|
|
|
|
|
|
|
|
After the bug fixes in 1.3.6, we're back to our original program of
|
|
|
|
|
weekly snapshots, each one faster than the one from the week
|
|
|
|
|
before. Cairo 1.3.8 brings a 2x improvement in the speed of rendering
|
|
|
|
|
linear gradients (thanks to David Turner), and a significant reduction
|
|
|
|
|
in X traffic when rendering text (thanks to Xan Lopez and Behdad
|
|
|
|
|
Esfahbod), making cairo behave very much like Xft does.
|
|
|
|
|
|
|
|
|
|
A few other things in the 1.3.8 snapshot worth noting include a more
|
|
|
|
|
forgiving image comparator in the test suite, (using the "perceptual
|
|
|
|
|
diff" metric and GPL implementation by Hector Yee[*]), a bug fix for
|
|
|
|
|
broken linking on x86_64 (thanks to M Joonas Pihlaja) and an even
|
|
|
|
|
better implementation of _cairo_lround, (not faster, but supporting a
|
|
|
|
|
more complete input range), from Daniel Amelang.
|
|
|
|
|
|
|
|
|
|
[*] http://pdiff.sourceforge.net/
|
|
|
|
|
|
2006-12-06 13:20:04 -08:00
|
|
|
Snapshot 1.3.6 (2006-12-06 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
This is the third development snapshot in the 1.3 series. It comes two
|
|
|
|
|
weeks after the 1.3.4 snapshot.
|
|
|
|
|
|
|
|
|
|
We don't have fancy performance charts this week as the primary
|
|
|
|
|
changes in this snapshot are bug fixes. The performance work continues
|
|
|
|
|
and the next snapshot (planned for one week from today) should include
|
|
|
|
|
several improvements. The bug fixes in this snapshot include:
|
|
|
|
|
|
|
|
|
|
* Fix undesirable rounding in glyph positioning (Dan Amelang)
|
|
|
|
|
|
|
|
|
|
This bug was noticed by several users, most commonly by seeing
|
|
|
|
|
improper text spacing or scrambled glyphs as drawn by nautilus. For
|
|
|
|
|
example:
|
|
|
|
|
|
|
|
|
|
Update to cairo-1.3.4 worsen font rendering
|
|
|
|
|
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=217819
|
|
|
|
|
|
|
|
|
|
* Fix reduced range of valid input coordinates to tessellator
|
|
|
|
|
(M Joonas Pihlaja)
|
|
|
|
|
|
|
|
|
|
This bug was causing lots of assertion failures in mozilla as
|
|
|
|
|
mentioned here:
|
|
|
|
|
|
|
|
|
|
CAIRO_BO_GUARD_BITS and coordinate space?
|
|
|
|
|
http://lists.freedesktop.org/archives/cairo/2006-December/008743.html
|
|
|
|
|
|
|
|
|
|
* Fix several regressions in new tessellator (M Joonas Pihlaja)
|
|
|
|
|
|
|
|
|
|
Joonas just had a good eye for detail here. I don't think any
|
|
|
|
|
external cairo users had noticed any of these bugs yet.
|
|
|
|
|
|
|
|
|
|
* Fix compilation problems of cairo "wideint" code on some platforms
|
|
|
|
|
(Mathieu Lacage)
|
|
|
|
|
|
|
|
|
|
* Fix failed configure due to broken grep (Dan Amelang)
|
|
|
|
|
|
|
|
|
|
This bug was reported here:
|
|
|
|
|
|
|
|
|
|
AX_C_FLOAT_WORDS_BIGENDIAN doesn't work because grep doesn't
|
|
|
|
|
work with binary file
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=9124
|
|
|
|
|
|
|
|
|
|
* Remove the pkg-config minimum version requirement (Behdad Esfahbod)
|
|
|
|
|
|
|
|
|
|
Some systems ship with pkg-config 0.15 and there was really no good
|
|
|
|
|
reason for cairo to insist on having version 0.19 before it would
|
|
|
|
|
build.
|
|
|
|
|
|
|
|
|
|
There is also one new (but inert) feature in this snapshot. There's a
|
|
|
|
|
new option that can be passed to cairo's configure script:
|
|
|
|
|
|
|
|
|
|
--disable-some-floating-point
|
|
|
|
|
|
|
|
|
|
Disable certain code paths that rely heavily on double precision
|
|
|
|
|
floating-point calculation. This option can improve
|
|
|
|
|
performance on systems without a double precision floating-point
|
|
|
|
|
unit, but might degrade performance on those that do.
|
|
|
|
|
|
|
|
|
|
As of this snapshot, this option does not make any change to cairo,
|
|
|
|
|
but it is possible that future versions of cairo will respect this
|
|
|
|
|
option and change the implementation of various functions as
|
|
|
|
|
appropriate.
|
|
|
|
|
|
2006-11-22 19:15:00 -08:00
|
|
|
Snapshot 1.3.4 (2006-11-22 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
This is the second development snapshot in the 1.3 series. It comes
|
|
|
|
|
one week after the 1.3.2 snapshot.
|
|
|
|
|
|
|
|
|
|
This snapshot has a couple of significant performance improvements,
|
|
|
|
|
and also adds new support for producing multi-page SVG output, (when
|
|
|
|
|
targeting SVG 1.2)---thanks to Emmanuel Pacaud. The details of the
|
|
|
|
|
performance improvements are as follows:
|
|
|
|
|
|
|
|
|
|
1. The long-awaited "new tessellator".
|
|
|
|
|
|
|
|
|
|
The credit for this being an improvement goes to Joonas Pihlaja. He
|
|
|
|
|
took my really slow code and really put it through its paces to get
|
|
|
|
|
the dramatic performance improvement seen below (up to 38x faster
|
|
|
|
|
on realistic cases, and more than 10x faster for the zrusin_another
|
|
|
|
|
test).
|
|
|
|
|
|
|
|
|
|
His own writeup of the work he did is quite thorough, but more than
|
|
|
|
|
can be quoted here. Please see his post for the interesting details:
|
|
|
|
|
|
|
|
|
|
http://lists.freedesktop.org/archives/cairo/2006-November/008483.html
|
|
|
|
|
|
|
|
|
|
(Though note that this snapshot also includes some additional,
|
|
|
|
|
significant improvements that were only sketched out in that
|
|
|
|
|
email---see "Generating fewer trapezoids").
|
|
|
|
|
|
|
|
|
|
2. More floating-point improvements
|
|
|
|
|
|
|
|
|
|
Daniel Amelang continues to work the magic he began in the 1.3.2
|
|
|
|
|
snapshot. This time he short-circuits floating-point
|
|
|
|
|
transformations by identity matrices and applies the earlier
|
|
|
|
|
floating-to-fixed-point technique to the problem of rounding.
|
|
|
|
|
|
|
|
|
|
The improvements here will primarily benefit text performance, and
|
|
|
|
|
will benefit platforms without hardware floating-point more than
|
|
|
|
|
those that have it, (some text tests show 20% improvement on an x86
|
|
|
|
|
machine and closer to 80% improvement on arm).
|
|
|
|
|
|
|
|
|
|
The performance chart comparing 1.3.2 to 1.3.4 really speaks for
|
|
|
|
|
itself, (this is on an x86 laptop). This is quite a lot of progress
|
|
|
|
|
for one week:
|
|
|
|
|
|
|
|
|
|
xlib-rgb stroke_similar_rgba_over-256 74.99 1.45% -> 2.03 68.38%: 36.86x speedup
|
|
|
|
|
███████████████████████████████████▉
|
|
|
|
|
xlib-rgb stroke_similar_rgba_source-256 78.23 1.43% -> 3.30 67.05%: 23.71x speedup
|
|
|
|
|
██████████████████████▊
|
|
|
|
|
xlib-rgba tessellate-256-100 820.42 0.15% -> 35.06 2.84%: 23.40x speedup
|
|
|
|
|
██████████████████████▍
|
|
|
|
|
image-rgba tessellate-256-100 819.55 0.32% -> 35.04 3.56%: 23.39x speedup
|
|
|
|
|
██████████████████████▍
|
|
|
|
|
xlib-rgb stroke_image_rgba_over-256 78.10 1.43% -> 4.33 65.56%: 18.04x speedup
|
|
|
|
|
█████████████████
|
|
|
|
|
xlib-rgb stroke_image_rgba_source-256 80.11 1.63% -> 5.75 63.99%: 13.94x speedup
|
|
|
|
|
█████████████
|
|
|
|
|
xlib-rgba zrusin_another_tessellate-415 89.22 0.35% -> 8.38 5.23%: 10.65x speedup
|
|
|
|
|
█████████▋
|
|
|
|
|
image-rgba zrusin_another_tessellate-415 87.38 0.89% -> 8.37 5.22%: 10.44x speedup
|
|
|
|
|
█████████▍
|
|
|
|
|
image-rgba zrusin_another_fill-415 117.67 1.34% -> 12.88 2.77%: 9.14x speedup
|
|
|
|
|
████████▏
|
|
|
|
|
xlib-rgba zrusin_another_fill-415 140.52 1.57% -> 15.79 2.88%: 8.90x speedup
|
|
|
|
|
███████▉
|
|
|
|
|
image-rgba tessellate-64-100 9.68 3.42% -> 1.42 0.60%: 6.82x speedup
|
|
|
|
|
█████▉
|
|
|
|
|
xlib-rgba tessellate-64-100 9.78 4.35% -> 1.45 0.83%: 6.72x speedup
|
|
|
|
|
█████▊
|
|
|
|
|
xlib-rgb stroke_linear_rgba_over-256 46.01 2.44% -> 7.74 54.51%: 5.94x speedup
|
|
|
|
|
█████
|
|
|
|
|
xlib-rgb stroke_linear_rgba_source-256 48.09 2.15% -> 9.14 53.00%: 5.26x speedup
|
|
|
|
|
████▎
|
|
|
|
|
xlib-rgb stroke_radial_rgba_over-256 50.96 2.34% -> 12.46 47.99%: 4.09x speedup
|
|
|
|
|
███▏
|
|
|
|
|
xlib-rgb stroke_radial_rgba_source-256 53.06 1.57% -> 13.96 46.57%: 3.80x speedup
|
|
|
|
|
██▊
|
|
|
|
|
image-rgba paint_similar_rgba_source-256 0.12 1.57% -> 0.08 9.92%: 1.42x speedup
|
|
|
|
|
▍
|
|
|
|
|
image-rgba paint_image_rgba_source-256 0.12 2.49% -> 0.08 10.70%: 1.41x speedup
|
|
|
|
|
▍
|
|
|
|
|
image-rgba world_map-800 356.28 0.46% -> 275.72 1.15%: 1.29x speedup
|
|
|
|
|
▎
|
|
|
|
|
xlib-rgba world_map-800 456.81 0.39% -> 357.95 1.39%: 1.28x speedup
|
|
|
|
|
▎
|
|
|
|
|
image-rgb tessellate-16-100 0.09 0.57% -> 0.07 3.43%: 1.23x speedup
|
|
|
|
|
▎
|
|
|
|
|
image-rgba tessellate-16-100 0.09 0.06% -> 0.07 2.46%: 1.23x speedup
|
|
|
|
|
▎
|
|
|
|
|
image-rgba text_solid_rgb_over-256 5.39 4.01% -> 4.47 0.70%: 1.21x speedup
|
|
|
|
|
▎
|
|
|
|
|
image-rgba text_solid_rgba_over-256 5.37 0.82% -> 4.45 0.75%: 1.21x speedup
|
|
|
|
|
▎
|
|
|
|
|
image-rgba text_image_rgb_over-64 0.78 0.10% -> 0.65 0.74%: 1.20x speedup
|
|
|
|
|
▎
|
|
|
|
|
image-rgba text_image_rgba_over-64 0.78 0.29% -> 0.65 0.68%: 1.19x speedup
|
|
|
|
|
▎
|
|
|
|
|
image-rgb text_solid_rgb_over-64 0.76 2.45% -> 0.63 0.81%: 1.19x speedup
|
|
|
|
|
▎
|
|
|
|
|
image-rgba text_solid_rgba_over-64 0.76 0.33% -> 0.64 0.66%: 1.19x speedup
|
|
|
|
|
▎
|
|
|
|
|
image-rgba text_similar_rgba_over-256 5.99 4.72% -> 5.04 1.09%: 1.19x speedup
|
|
|
|
|
▎
|
|
|
|
|
|
|
|
|
|
We should point out that there is some potential for slowdown in this
|
|
|
|
|
snapshot. The following are the worst slowdowns reported by the cairo
|
|
|
|
|
performance suite when comparing 1.3.2 to 1.3.4:
|
|
|
|
|
|
|
|
|
|
image-rgba subimage_copy-256 0.01 0.87% -> 0.01 3.61%: 1.45x slowdown
|
|
|
|
|
▌
|
|
|
|
|
xlib-rgb paint_solid_rgb_over-256 0.31 10.23% -> 0.38 0.33%: 1.26x slowdown
|
|
|
|
|
▎
|
|
|
|
|
image-rgba box-outline-fill-100 0.01 0.30% -> 0.01 2.52%: 1.21x slowdown
|
|
|
|
|
▎
|
|
|
|
|
image-rgba fill_solid_rgb_over-64 0.20 1.22% -> 0.22 1.59%: 1.12x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgb fill_similar_rgb_over-64 0.21 1.04% -> 0.24 1.06%: 1.11x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgba fill_image_rgb_over-64 0.21 1.19% -> 0.24 0.72%: 1.11x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgba fill_similar_rgb_over-64 0.21 0.18% -> 0.24 0.30%: 1.11x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgb fill_solid_rgba_over-64 0.22 1.66% -> 0.24 1.15%: 1.11x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgb fill_image_rgb_over-64 0.21 0.14% -> 0.24 0.80%: 1.11x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgba fill_image_rgba_over-64 0.22 1.34% -> 0.25 0.20%: 1.11x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgba fill_solid_rgba_over-64 0.22 1.48% -> 0.24 0.95%: 1.11x slowdown
|
|
|
|
|
▏
|
|
|
|
|
image-rgb fill_similar_rgba_over-64 0.22 1.13% -> 0.25 1.25%: 1.10x slowdown
|
|
|
|
|
▏
|
|
|
|
|
|
|
|
|
|
The 45% slowdown for subimage_copy is an extreme case. It's unlikely
|
|
|
|
|
to hit many applications unless they often use cairo_rectangle;
|
|
|
|
|
cairo_fill to copy a single pixel at a time. In any case, it shows a
|
|
|
|
|
worst-case impact of the overhead of the new tessellator. The other
|
|
|
|
|
slowdowns (~ 10%) are probably more realistic, and still very
|
|
|
|
|
concerning.
|
|
|
|
|
|
|
|
|
|
We will work to ensure that performance regressions like these are not
|
|
|
|
|
present from one major release of cairo to the next, (for example,
|
|
|
|
|
from 1.2 to 1.4).
|
|
|
|
|
|
|
|
|
|
But we're putting this 1.3.4 snapshot out there now, even with this
|
|
|
|
|
potential slowdown so that people can experiment with it. If you've
|
|
|
|
|
got complex geometry, we hope you will see some benefit from the new
|
|
|
|
|
tessellator. If you've got primarily simple geometry, we hope things
|
|
|
|
|
won't slowdown too much, but please let us know what slowdown you see,
|
|
|
|
|
if any, so we can calibrate our performance suite against real-world
|
|
|
|
|
impacts.
|
|
|
|
|
|
|
|
|
|
Thanks, and have fun with cairo!
|
|
|
|
|
|
2006-11-15 13:30:16 -08:00
|
|
|
Snapshot 1.3.2 (2006-11-14 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
This is the first development snapshot since the 1.2 stable series
|
|
|
|
|
branched off shortly after the 1.2.4 release in August 2006.
|
|
|
|
|
|
|
|
|
|
This snapshot includes all the bug fixes from the 1.2.6 release,
|
|
|
|
|
(since they originated here on the 1.3 branch first and were
|
|
|
|
|
cherry-picked over to 1.2). But more importantly, it contains some new
|
|
|
|
|
API in preparation for a future 1.4 release, and most importantly, it
|
|
|
|
|
contains several performance improvements.
|
|
|
|
|
|
|
|
|
|
The bug fixes will not be reviewed here, as most of them are already
|
|
|
|
|
described in the 1.2.6 release notes. But details for the new API and
|
|
|
|
|
some performance improvements are included here.
|
|
|
|
|
|
|
|
|
|
As with all snapshots, this is experimental code, and the new API
|
|
|
|
|
added here is still experimental and is not guaranteed to appear
|
|
|
|
|
unchanged in any future release of cairo.
|
|
|
|
|
|
|
|
|
|
API additions
|
|
|
|
|
-------------
|
|
|
|
|
Several new API additions are available in this release. There is a
|
|
|
|
|
common theme among all the additions in that they allow cairo to
|
|
|
|
|
advertise information about its state that it was refusing to
|
|
|
|
|
volunteer earlier. So this isn't groundbreaking new functionality, but
|
|
|
|
|
it is essential for easily achieving several tasks.
|
|
|
|
|
|
|
|
|
|
The new functions can be divided into three categories:
|
|
|
|
|
|
|
|
|
|
Getting information about the current clip region
|
|
|
|
|
-------------------------------------------------
|
|
|
|
|
cairo_clip_extents
|
|
|
|
|
cairo_copy_clip_rectangles
|
|
|
|
|
cairo_rectangle_list_destroy
|
|
|
|
|
|
|
|
|
|
Getting information about the current dash setting
|
|
|
|
|
--------------------------------------------------
|
|
|
|
|
cairo_get_dash_count
|
|
|
|
|
cairo_get_dash
|
|
|
|
|
|
|
|
|
|
Getting information from a pattern
|
|
|
|
|
----------------------------------
|
|
|
|
|
cairo_pattern_get_rgba
|
|
|
|
|
cairo_pattern_get_surface
|
|
|
|
|
cairo_pattern_get_color_stop_rgba
|
|
|
|
|
cairo_pattern_get_color_stop_count
|
|
|
|
|
cairo_pattern_get_linear_points
|
|
|
|
|
cairo_pattern_get_radial_circles
|
|
|
|
|
|
|
|
|
|
In each of these areas, we have new API for providing a list of
|
|
|
|
|
uniform values from cairo. The closest thing we had to this before was
|
|
|
|
|
cairo_copy_path, (which is rather unique in providing a list of
|
|
|
|
|
non-uniform data).
|
|
|
|
|
|
|
|
|
|
The copy_clip_rectangles/rectangle_list_destroy functions follow a
|
|
|
|
|
style similar to that of cairo_copy_path. Meanwhile, the dash and
|
|
|
|
|
pattern color stop functions introduce a new style in which there is a
|
|
|
|
|
single call to return the number of elements available (get_dash_count
|
|
|
|
|
and get_color_stop_count) and then a function to be called once to get
|
|
|
|
|
each element (get_dash and get_color_stop_rgba).
|
|
|
|
|
|
|
|
|
|
I'm interested in hearing feedback from users of these new API
|
|
|
|
|
functions, particularly from people writing language bindings. One
|
|
|
|
|
open question is whether the clip "getter" functionality should adopt
|
|
|
|
|
a style similar to that of the new dash and color_stop interfaces.
|
|
|
|
|
|
|
|
|
|
API deprecation
|
|
|
|
|
---------------
|
|
|
|
|
The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never
|
|
|
|
|
worked as a format value for cairo_image_surface_create, and it wasn't
|
|
|
|
|
necessary for supporting 16-bit 565 X server visuals.
|
|
|
|
|
|
|
|
|
|
XCB backend changes
|
|
|
|
|
-------------------
|
|
|
|
|
The XCB backend has been updated to track the latest XCB API (which
|
|
|
|
|
recently had a 1.0 release).
|
|
|
|
|
|
|
|
|
|
New quartz backend
|
|
|
|
|
------------------
|
|
|
|
|
Vladimir Vukicevic has written a new "native quartz" backend which
|
|
|
|
|
will eventually replace the current "image-surface wrapping" quartz
|
|
|
|
|
backend. For now, both backends are available, (the old one is
|
|
|
|
|
"quartz" and the new one is "nquartz"). But it is anticipated that the
|
|
|
|
|
new backend will replace the old one and take on the "quartz" name
|
|
|
|
|
before this backend is marked as supported in a release of cairo.
|
|
|
|
|
|
|
|
|
|
New OS/2 backend
|
|
|
|
|
----------------
|
|
|
|
|
Doodle and Peter Weilbacher have contributed a new, experimental
|
|
|
|
|
backend for using cairo on OS/2 systems.
|
|
|
|
|
|
|
|
|
|
Performance improvements
|
|
|
|
|
------------------------
|
|
|
|
|
Here are some highlights from cairo's performance suite showing
|
|
|
|
|
improvements from cairo 1.2.6 to cairo 1.3.2. The command used to
|
|
|
|
|
generate this data is:
|
|
|
|
|
|
|
|
|
|
./cairo-perf-diff 1.2.6 HEAD
|
|
|
|
|
|
|
|
|
|
available in the perf/ directory of a recent checkout of cairo's
|
|
|
|
|
source, (the cairo-perf-diff script does require a git checkout and
|
|
|
|
|
will not work from a tar file---though ./cairo-perf can still be used
|
|
|
|
|
to generate a single report there and ./cairo-perf-diff-files can be
|
|
|
|
|
used to compare two reports).
|
|
|
|
|
|
|
|
|
|
Results are described below both for an x86 laptop (with an old Radeon
|
|
|
|
|
video card, recent X.org build, XAA, free software drivers), as well
|
|
|
|
|
as for a Nokia 770. First the x86 results with comments on each, (all
|
|
|
|
|
times are reported in milliseconds).
|
|
|
|
|
|
|
|
|
|
Copying subsets of an image surface to an xlib surface (much faster)
|
|
|
|
|
--------------------------------------------------------------------
|
|
|
|
|
xlib-rgba subimage_copy-512 10.50 -> : 53.97x speedup
|
|
|
|
|
█████████████████████████████████████████████████████
|
|
|
|
|
|
|
|
|
|
Thanks to Christopher (Monty) Montgomery for this big performance
|
|
|
|
|
improvement. Any application which has a large image surface and is
|
|
|
|
|
copying small pieces of it at a time to an xlib surface, (imagine an
|
|
|
|
|
application that loads a single image containing all the "sprites" for
|
|
|
|
|
that application), will benefit from this fix. The larger the ratio of
|
|
|
|
|
the image surface to the portion being copied, the larger the benefit.
|
|
|
|
|
|
|
|
|
|
Floating-point conversion (3x faster)
|
|
|
|
|
-------------------------------------
|
|
|
|
|
xlib-rgba pattern_create_radial-16 27.75 -> 3.93 : 2.94x speedup
|
|
|
|
|
██
|
|
|
|
|
image-rgb pattern_create_radial-16 26.06 -> 3.74 : 2.90x speedup
|
|
|
|
|
█▉
|
|
|
|
|
|
|
|
|
|
Thanks to Daniel Amelang, (and others who had contributed the idea
|
|
|
|
|
earlier), for this nice improvement in the speed of converting
|
|
|
|
|
floating-point values to fixed-point.
|
|
|
|
|
|
|
|
|
|
Text rendering (1.3 - 2x faster)
|
|
|
|
|
------------------------------
|
|
|
|
|
xlib-rgba text_image_rgba_source-256 319.73 -> 62.40 : 2.13x speedup
|
|
|
|
|
█▏
|
|
|
|
|
image-rgb text_solid_rgba_over-64 2.85 -> 0.88 : 1.35x speedup
|
|
|
|
|
▍
|
|
|
|
|
|
|
|
|
|
I don't think we've ever set out to improve text performance
|
|
|
|
|
specifically, but we did it a bit anyway. I believe the extra
|
|
|
|
|
improvement in the xlib backend is due to Monty's image copying fix
|
|
|
|
|
above, and the rest is due to the floating-point conversion speedup.
|
|
|
|
|
|
|
|
|
|
Thin stroke improvements (1.5x faster)
|
|
|
|
|
---------------------------------------------
|
|
|
|
|
image-rgb world_map-800 1641.09 -> 414.77 : 1.65x speedup
|
|
|
|
|
▋
|
|
|
|
|
xlib-rgba world_map-800 1939.66 -> 529.94 : 1.52x speedup
|
|
|
|
|
▌
|
|
|
|
|
|
|
|
|
|
The most modest stuff to announce in this release is the 50%
|
|
|
|
|
improvement I made in the world_map case. This is in improvement that
|
|
|
|
|
should help basically anything that is doing strokes with many
|
|
|
|
|
straight line segments, (and the thinner the better, since that makes
|
|
|
|
|
tessellation dominate rasterization). The fixes here are to use a
|
|
|
|
|
custom quadrilateral tessellator rather than the generic tessellator
|
|
|
|
|
for straight line segments and the miter joins.
|
|
|
|
|
|
|
|
|
|
Performance results from the Nokia 770
|
|
|
|
|
--------------------------------------
|
|
|
|
|
xlib-rgba subimage_copy-512 55.88 -> 2.04 : 27.34x speedup
|
|
|
|
|
██████████████████████████▍
|
|
|
|
|
xlib-rgb text_image_rgb_over-256 1487.58 -> 294.43 : 5.05x speedup
|
|
|
|
|
████
|
|
|
|
|
image-rgb pattern_create_radial-16 187.13 -> 91.86 : 2.04x speedup
|
|
|
|
|
█
|
|
|
|
|
xlib-rgba world_map-800 21261.41 -> 15628.02 : 1.36x speedup
|
|
|
|
|
▍
|
|
|
|
|
|
|
|
|
|
Here we see that the subimage_copy improvement was only about half as
|
|
|
|
|
large as the corresponding improvement on my laptop, (27x faster
|
|
|
|
|
compared to 54x) and the floating-point conversion fix also was quite
|
|
|
|
|
as significant, (2x compared to 3x). Oddly the improvement to text
|
|
|
|
|
rendering performance was more than twice as good (5x compared to
|
|
|
|
|
2x). I don't know what the reason for that is, but I don't think it's
|
|
|
|
|
anything anybody should complain about.
|
|
|
|
|
|
2006-11-02 19:52:03 -05:00
|
|
|
Release 1.2.6 (2006-11-02 Behdad Esfahbod <behdad@behdad.org>)
|
|
|
|
|
==============================================================
|
|
|
|
|
This is the third bug fix release in the 1.2 series, coming less than
|
|
|
|
|
two months after the 1.2.4 release made on August 18.
|
|
|
|
|
|
|
|
|
|
The 1.2.4 release turned out to be a pretty solid one, except for a crasher
|
|
|
|
|
bug when forwarding an X connection where the client and the server have
|
|
|
|
|
varying byte orders, eg. from a PPC to an i686. Other than that, various
|
|
|
|
|
other small bugs have been fixed.
|
|
|
|
|
|
|
|
|
|
Various improvements have been made in the testing infrastructure to prevent
|
|
|
|
|
false positives, and to make sure the generated cairo shared object behaves as
|
|
|
|
|
expected in terms of exported symbols and relocations.
|
|
|
|
|
|
|
|
|
|
There were a total of 89 changes since 1.2.4. The following list the most
|
|
|
|
|
important ones:
|
|
|
|
|
|
|
|
|
|
Common fixes
|
|
|
|
|
------------
|
|
|
|
|
- Avoid unsigned loop control variable to eliminate infinite,
|
|
|
|
|
memory-scribbling loop. (#7593)
|
|
|
|
|
- Fix cairo_image_surface_create to report INVALID_FORMAT errors.
|
|
|
|
|
Previously the detected error was being lost and a nil surface was
|
|
|
|
|
returned that erroneously reported CAIRO_STATUS_NO_MEMORY.
|
|
|
|
|
- Change _cairo_color_compute_shorts to not rely on any particular
|
|
|
|
|
floating-point epsilon value. (#7497)
|
|
|
|
|
- Fix infinite-join test case (bug #8379)
|
|
|
|
|
- Pass correct surface to create_similar in _cairo_clip_init_deep_copy().
|
|
|
|
|
|
|
|
|
|
PS/PDF fixes
|
|
|
|
|
------------
|
|
|
|
|
- Fix Type 1 embedding in PDF.
|
|
|
|
|
- Correct the value of /LastChar in the PDF Type 1 font dictionary.
|
|
|
|
|
- Improve error checking in TrueType subsetting.
|
|
|
|
|
- Compute right index when looking up left side bearing. (bug #8180)
|
|
|
|
|
- Correct an unsigned to signed conversion problem in truetype subsetting
|
|
|
|
|
bbox.
|
|
|
|
|
- Type1 subsetting: Don't put .notdef in Encoding when there are 256 glyphs.
|
|
|
|
|
- Add cairo version to PS header / PDF document info dictionary.
|
|
|
|
|
- Set CTM before path construction.
|
|
|
|
|
|
|
|
|
|
Win32 fixes
|
|
|
|
|
-----------
|
|
|
|
|
- Get correct unhinted outlines on win32. (bug 7603)
|
|
|
|
|
- Make cairo as a win32 static library possible.
|
|
|
|
|
- Use CAIRO_FORMAT_RGB24 for BITSPIXEL==32 surfaces too.
|
|
|
|
|
|
|
|
|
|
Build system fixes
|
|
|
|
|
------------------
|
|
|
|
|
- Define WINVER if it's not defined. (bug 6456)
|
|
|
|
|
- Fix the AMD64 final link by removing SLIM from pixman.
|
|
|
|
|
- Misc win32 compilation fixes.
|
|
|
|
|
- Add Sun Pro C definition of pixman_private.
|
|
|
|
|
- Use pixman_private consistently as prefix not suffix.
|
|
|
|
|
- Added three tests check-plt.sh, check-def.sh, and check-header.sh that check
|
|
|
|
|
that the shared object, the .def file, and the public headers agree about
|
|
|
|
|
the exported symbols.
|
|
|
|
|
- Require pkg-config 0.19. (#8686)
|
|
|
|
|
|
|
|
|
|
|
2006-08-18 17:35:33 -07:00
|
|
|
Release 1.2.4 (2006-08-18 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
=========================================================
|
|
|
|
|
This is the second bug fix release in the 1.2 series, coming less than
|
|
|
|
|
two weeks after the 1.2.2 release made on August 8.
|
|
|
|
|
|
|
|
|
|
The big motivation for a quick release was that there were a log of
|
|
|
|
|
build system snags that people ran into with the 1.2.2 release. But,
|
|
|
|
|
by the time we got those all done, we found that we had a bunch of
|
|
|
|
|
fixes for cairo's rendering as well. So there's a lot of goodness in
|
|
|
|
|
here for such a short time period.
|
|
|
|
|
|
|
|
|
|
Rendering fixes
|
|
|
|
|
---------------
|
|
|
|
|
Fix image surfaces to not be clipped when used as a source (Vladimir Vukicevic)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=72e25648c4c4bc82ddd938aa4e05887a293f0d8b
|
|
|
|
|
|
|
|
|
|
Fix a couple of corner cases in dashing degenerate paths (Jeff Muizelaar)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=fbb1758ba8384650157b2bbbc93d161b0c2a05f0
|
|
|
|
|
|
|
|
|
|
Fix support for type1 fonts on win32 (Adrian Johnson)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=da1019c9138695cb838a54f8b871bbfd0e8996d7
|
|
|
|
|
|
|
|
|
|
Fix assertion failure when rotating bitmap fonts (Carl Worth)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0bfa6d4f33b8ddb5dc55bbe419c15df4af856ff9
|
|
|
|
|
|
|
|
|
|
Fix assertion failure when calling cairo_text_path with bitmap fonts (Carl Worth)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9878a033531e6b96b5f27e69e10e90dee7440cd9
|
|
|
|
|
|
|
|
|
|
Fix mis-handling of cairo_close_path in some situations (Tim Rowley, Carl Worth)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=53f74e59faf1af78f2f0741ccf1f23aa5dad4efc
|
|
|
|
|
|
|
|
|
|
Respect font_matrix translation in _cairo_gstate_glyph_path (Behdad Esfahbod)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f183b835b111d23e838889178aa8106ec84663b3
|
|
|
|
|
|
|
|
|
|
Fix vertical metrics adjustment to work with non-identity shapes (Behdad Esfahbod)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7bc263842a798d657a95e539e1693372448837f
|
|
|
|
|
|
|
|
|
|
[PS] Set correct ImageMatrix in _cairo_ps_surface_emit_bitmap_glyph_data (Behdad Esfahbod)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=d47388ad759b0a1a0869655a87d9b5eb6ae2445d
|
|
|
|
|
|
|
|
|
|
Build system fixes
|
|
|
|
|
------------------
|
|
|
|
|
Fix xlib detection to prefer pkg-config to avoid false libXt dependency (Behdad Esfahbod)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0e78e7144353703cbd28aae6a67cd9ca261f1d68
|
|
|
|
|
|
|
|
|
|
Fix typos causing win32 build problem with PS,PDF, and SVG backends (Behdad Esfahbod)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=aea83b908d020e26732753830bb3056e6702a774
|
|
|
|
|
|
|
|
|
|
Fix configure cache to not use stale results (Behdad Esfahbod)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6d0e3260444a2d5b6fb0cb223ac79f1c0e7b3a6e
|
|
|
|
|
|
|
|
|
|
Fix to not pass unsupported warning options to the compiler (Jens Granseuer)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=97524a8fdb899de1ae4a3e920fb7bda6d76c5571
|
|
|
|
|
|
|
|
|
|
Fix to allow env. variables such as png_REQUIRES to override configure detection (Jens Granseuer)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=abd16e47d6331bd3811c908e524b4dcb6bd23bf0
|
|
|
|
|
|
|
|
|
|
Fix test suite to not use an old system cairo when converting svg2png (Behdad Esfahbod)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6122cc85c8f71b1ba2df3ab86907768edebe1781
|
|
|
|
|
|
|
|
|
|
Fix test suite to not require signal.h to be present (Behdad Esfahbod)
|
|
|
|
|
http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6f8cf53b1e1ccdbe1ab6a275656b19c6e5120e40
|
|
|
|
|
|
|
|
|
|
Code cleanups
|
|
|
|
|
-------------
|
|
|
|
|
Many useful warnings cleanups from sparse, valgrind, and careful eyes
|
|
|
|
|
(Kjartan Maraas, Pavel Roskin)
|
|
|
|
|
|
2006-08-08 16:04:54 -07:00
|
|
|
Release 1.2.2 (2006-08-08 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
=========================================================
|
|
|
|
|
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
|
2006-08-08 16:51:48 -07:00
|
|
|
cairo_surface_set_fallback_resolution. With the bug, any value other
|
2006-08-08 16:04:54 -07:00
|
|
|
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
|
2006-08-08 16:51:48 -07:00
|
|
|
values between each glyph. The 1.2.0 behavior is fairly useless in
|
2006-08-08 16:04:54 -07:00
|
|
|
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
|
2006-08-08 16:51:48 -07:00
|
|
|
(particularly with respect to text hinting/antialiasing) with
|
2006-08-08 16:04:54 -07:00
|
|
|
fallbacks, for example.
|
|
|
|
|
|
|
|
|
|
report: https://bugs.freedesktop.org/show_bug.cgi?id=4106
|
|
|
|
|
fixes: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9fcb3c32c1f16fe6ab913e27eb54d18b7d9a06b0
|
|
|
|
|
http://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
|
2006-08-08 16:51:48 -07:00
|
|
|
caused a significant performance regression when using the xlib
|
2006-08-08 16:04:54 -07:00
|
|
|
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.
|
|
|
|
|
|
2006-06-27 15:44:52 +02:00
|
|
|
Release 1.2.0 (2006-06-27 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
=========================================================
|
|
|
|
|
This is the culmination of the work that has gone on within the 1.1
|
|
|
|
|
branch of cairo.
|
|
|
|
|
|
|
|
|
|
There has been one API addition since the cairo 1.1.10 snapshot:
|
|
|
|
|
|
|
|
|
|
cairo_xlib_surface_get_width
|
|
|
|
|
cairo_xlib_surface_get_height
|
|
|
|
|
|
|
|
|
|
There's also a new feature without any API change:
|
|
|
|
|
|
|
|
|
|
Dots can now be drawn by using CAIRO_LINE_CAP_ROUND with
|
|
|
|
|
degenerate sub-paths, (cairo_move_to() followed by either
|
|
|
|
|
cairo_close_path() or a cairo_line_to() to the same location).
|
|
|
|
|
|
|
|
|
|
And at least the following bugs have been fixed:
|
|
|
|
|
|
|
|
|
|
6759 fontconfig option AntiAlias doesn't work in cairo 1.1.2
|
|
|
|
|
6955 Some characters aren't displayed when using xlib (cache u...
|
|
|
|
|
7268 positive device_offset values don't work as source
|
|
|
|
|
* PDF emit_glyph function needs to support bitmapped glyphs
|
|
|
|
|
* PS emit_glyph function needs to support bitmapped glyphs
|
|
|
|
|
* SVG emit_glyph function needs to support bitmapped glyphs
|
|
|
|
|
* PDF: minefield page one is falling back unnecessarily
|
|
|
|
|
* PS/PDF: Fix broken placement for vertical glyphs
|
|
|
|
|
* PS: Fix to not draw BUTT-capped zero-length dash segments
|
|
|
|
|
* Do device offset before float->fixed conversion
|
|
|
|
|
http://bugzilla.gnome.org/show_bug.cgi?id=332266
|
|
|
|
|
* PS: Fix source surfaces with transformations
|
|
|
|
|
* PS: Fix to not draw BUTT-capped degnerate sub-paths
|
|
|
|
|
* PS: Don't walk off end of array when printing "~>"
|
|
|
|
|
* Fix some memory leaks in the test suite rig
|
|
|
|
|
* SVG: Fix memory leak when using cairo_mask
|
|
|
|
|
* Fix EXTEND_REFLECT and EXTEND_PAD to not crash (though these are
|
|
|
|
|
still not yet fully implemented for surface patterns).
|
|
|
|
|
|
|
|
|
|
This has been a tremendous effort by everyone, and I'm proud to have
|
|
|
|
|
been a part of it. Congratulations to all contributors to cairo!
|
|
|
|
|
|
2006-06-16 09:45:44 -07:00
|
|
|
Snapshot 1.1.10 (2006-06-16 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
===========================================================
|
|
|
|
|
This is the fifth in a series of snapshots working toward the 1.2
|
|
|
|
|
release of cairo.
|
|
|
|
|
|
|
|
|
|
The primary motivation for this snapshot is to fix a long-standing bug
|
|
|
|
|
that had long been silent, but as of the 1.1.8 snapshot started
|
|
|
|
|
causing crashes when run against 16-bit depth X servers, (often Xvnc
|
|
|
|
|
or Xnest). The fix for this adds a new CAIRO_FORMAT_RGB16_565 to the
|
|
|
|
|
API.
|
|
|
|
|
|
|
|
|
|
This snapshot also includes a rewrite of cairo's SVG backend to
|
|
|
|
|
eliminate the dependency on libxml2. With this in place, cairo 1.2
|
|
|
|
|
will not depend on any libraries that cairo 1.0 did not.
|
|
|
|
|
|
|
|
|
|
As usual, there are also a few fixes for minor bugs.
|
|
|
|
|
|
2006-06-14 08:14:43 -07:00
|
|
|
Snapshot 1.1.8 (2006-06-14 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
This is the fourth in a series of snapshots working toward the 1.2
|
|
|
|
|
release of cairo. At this point, all major features of the 1.2 release
|
|
|
|
|
are in place, leaving just a few bug fixes left.
|
|
|
|
|
|
|
|
|
|
In particular, there well be no additional API changes between this
|
|
|
|
|
1.1.8 snapshot and the 1.2 release.
|
|
|
|
|
|
|
|
|
|
The announcement for 1.1.6 mentioned several API changes being
|
|
|
|
|
considered. Only one of these changes was actually implemented
|
|
|
|
|
(set_dpi -> fallback_resolution). This change does introduce one
|
|
|
|
|
source-level incompatibility with respect to previous 1.1.x snapshots,
|
|
|
|
|
so see below for details.
|
|
|
|
|
|
|
|
|
|
Here is an abbreviated summary of changes since the 1.1.6 snapshot:
|
|
|
|
|
|
|
|
|
|
** API Change **
|
|
|
|
|
----------------
|
|
|
|
|
According to the plan mentioned in the 1.1.6 notes, one source-level
|
|
|
|
|
incompatible change has been implemented. The following three
|
|
|
|
|
functions have been removed from cairo's API:
|
|
|
|
|
|
|
|
|
|
cairo_pdf_surface_set_dpi
|
|
|
|
|
cairo_ps_surface_set_dpi
|
|
|
|
|
cairo_svg_surface_set_dpi
|
|
|
|
|
|
|
|
|
|
and in their place the following function has been added:
|
|
|
|
|
|
|
|
|
|
cairo_surface_set_fallback_resolution
|
|
|
|
|
|
|
|
|
|
The signature and semantics of the function remains the same, so it is
|
|
|
|
|
a simple matter of changing the name of the function when calling
|
|
|
|
|
it. As a transition mechanism, this snapshot will (on many systems)
|
|
|
|
|
build to include the old symbols so that code previously compiled will
|
|
|
|
|
still run. However, all source code using the old names must be
|
|
|
|
|
updated before it will compile. And the upcoming 1.2 release is not
|
|
|
|
|
anticipated to include the old symbols.
|
|
|
|
|
|
|
|
|
|
Finally, it should be pointed out that the old symbols never existed
|
|
|
|
|
in the supported API of any stable release of cairo. (In the stable
|
|
|
|
|
1.0 releases the PDF, PS, and SVG backends were advertised as
|
|
|
|
|
experimental and unstable.)
|
|
|
|
|
|
|
|
|
|
And, as always, cairo continues to maintain source and binary
|
|
|
|
|
compatibility between major releases. So applications compiled against
|
|
|
|
|
supported backends in a stable release of cairo (1.0.4 say) will
|
|
|
|
|
continue to compile and run without modification against new major
|
|
|
|
|
releases (1.2.0 say) without modification.
|
|
|
|
|
|
|
|
|
|
API additions
|
|
|
|
|
-------------
|
|
|
|
|
The following new functions have been added to cairo's API:
|
|
|
|
|
|
|
|
|
|
cairo_surface_get_content
|
|
|
|
|
cairo_debug_reset_static_data
|
|
|
|
|
cairo_image_surface_get_data
|
|
|
|
|
cairo_image_surface_get_format
|
|
|
|
|
cairo_image_surface_get_stride
|
|
|
|
|
cairo_win32_font_face_create_for_hfont
|
|
|
|
|
|
|
|
|
|
New, backend-specific pkg-config files
|
|
|
|
|
--------------------------------------
|
|
|
|
|
In addition to the original cairo.pc file, cairo will also now install
|
|
|
|
|
a pkg-config files for each configured backend, (for example
|
|
|
|
|
cairo-pdf.pc, cairo-svg.pc, cairo-xlib.pc, cairo-win32.pc, etc.) this
|
|
|
|
|
also includes optional font backends (such as cairo-ft.pc) and the
|
|
|
|
|
optional png functionality (cairo-png.pc).
|
|
|
|
|
|
|
|
|
|
These new pkg-config files should be very convenient for allowing
|
|
|
|
|
cairo-using code to easily check for the existing of optional
|
|
|
|
|
functionality in cairo without having to write complex rules to grub
|
|
|
|
|
through cairo header files or the compiled library looking for
|
|
|
|
|
symbols.
|
|
|
|
|
|
|
|
|
|
Printing backend (PS, PDF, and SVG)
|
|
|
|
|
-----------------------------------
|
|
|
|
|
Improving the quality of the "printing" backends has been a priority
|
|
|
|
|
of the development between cairo 1.1.6 and cairo 1.1.8.
|
|
|
|
|
|
|
|
|
|
The big improvement here is in the area of text output. Previously, at
|
|
|
|
|
best, text was output as paths without taking advantage of any font
|
|
|
|
|
support available in the output file format.
|
|
|
|
|
|
|
|
|
|
Now, at the minimum text paths will be shared by using type3 fonts
|
|
|
|
|
(for PS and PDF---and similarly, defs for SVG). Also, if possible,
|
|
|
|
|
type3 and truetype fonts will be embedded in PostScript and PDF
|
|
|
|
|
output. There are still some known bugs with this, (for example,
|
|
|
|
|
selecting text in a cairo-generated PDF file with an embedded truetype
|
|
|
|
|
font does not work). So there will be some more changes in this area
|
|
|
|
|
before cairo 1.2, but do try test this feature out as it exists so
|
|
|
|
|
far.
|
|
|
|
|
|
|
|
|
|
Many thanks to Kristian Høgsberg for the truetype and type1 font
|
|
|
|
|
embedding.
|
|
|
|
|
|
|
|
|
|
win32 backend
|
|
|
|
|
-------------
|
|
|
|
|
Performance improvements by preferring GDI over pixman rendering when possible.
|
|
|
|
|
Fixes for text rendering.
|
|
|
|
|
|
|
|
|
|
xlib backend
|
|
|
|
|
------------
|
|
|
|
|
Fix potentially big performance bug by making xlib's create_similar
|
|
|
|
|
try harder to create a pixmap of a depth matching that of the screen.
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
Among various other fixes, the following bugs listed in bugzilla have
|
|
|
|
|
been fixed:
|
|
|
|
|
|
|
|
|
|
Bug 2488: Patch to fix pixman samping location bug (#2488).
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=2488
|
|
|
|
|
|
|
|
|
|
Bug 4196: undef MIN an MAX before defining to avoid duplicate definition
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=4196
|
|
|
|
|
|
|
|
|
|
Bug 4723: configure.in: Fix m4 quoting when examining pkg-config version
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=4723
|
|
|
|
|
|
|
|
|
|
Bug 4882: Flag Sun's X server has having buggy_repeat.
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=4882
|
|
|
|
|
|
|
|
|
|
Bug 5306: test/pdf2png: Add missing include of stdio.h
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=5306
|
|
|
|
|
|
|
|
|
|
Bug 7075: Fix make clean to remove cairo.def
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=7075
|
|
|
|
|
|
|
|
|
|
(Many thanks to Behdad Esfahbod for helping us track down and fix many
|
|
|
|
|
of these.)
|
|
|
|
|
|
2006-05-04 23:39:12 -07:00
|
|
|
Snapshot 1.1.6 (2006-05-04 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
This is the third in a series of snapshots working toward the imminent
|
|
|
|
|
1.2 release of cairo. For a list of items still needing work on the
|
|
|
|
|
cairo 1.2 roadmap, please see:
|
|
|
|
|
|
|
|
|
|
http://cairographics.org/ROADMAP
|
|
|
|
|
|
|
|
|
|
As can be seen in that list, there are no longer any API additions
|
|
|
|
|
left on the roadmap. Instead, there is a feature (PDF type 3 fonts) a
|
|
|
|
|
performance optimization (X server gradients) and a list of bug
|
|
|
|
|
fixes. This gives us a fair amount of freedom to cut the 1.2 release
|
|
|
|
|
at almost any point by deciding to defer remaining bug fixes to
|
|
|
|
|
subsequent maintenance releases such as 1.2.2 and 1.2.4.
|
|
|
|
|
|
|
|
|
|
Before we will do that, we must first be wiling to commit to all the
|
|
|
|
|
new API additions. As a heads-up, there are a couple of potential API
|
|
|
|
|
changes being considered. (Note that these are changes to new API
|
|
|
|
|
introduced during 1.1 so these will not introduce API
|
|
|
|
|
incompatibilities compared to the stable 1.0 series). The changes
|
|
|
|
|
being considered are:
|
|
|
|
|
|
|
|
|
|
cairo_get_group_target: may acquire x and y offset return
|
|
|
|
|
parameters. May also be eliminated in favor of
|
|
|
|
|
cairo_get_target assuming its role
|
|
|
|
|
|
|
|
|
|
cairo_pdf_surface_set_dpi:
|
|
|
|
|
cairo_ps_surface_set_dpi:
|
|
|
|
|
cairo_svg_surface_set_dpi: These functions may be removed in favor
|
|
|
|
|
of a new cairo_surface_set_fallback_resolution
|
|
|
|
|
|
|
|
|
|
Additionally there is the possibility of a slight change in the
|
|
|
|
|
semantics of cairo_set_line_width. We believe the current behavior of the sequence:
|
|
|
|
|
|
|
|
|
|
cairo_set_line_width; ... change CTM ...; cairo_stroke;
|
|
|
|
|
|
|
|
|
|
is buggy. It is currently behaving the same as:
|
|
|
|
|
|
|
|
|
|
... change CTM ...; cairo_set_line_width; cairo_stroke;
|
|
|
|
|
|
|
|
|
|
We are considering fixing this bug before 1.2 with the hope that
|
|
|
|
|
nobody is already relying on the buggy behavior described here. Do
|
|
|
|
|
shout if you suspect you might be in that position.
|
|
|
|
|
|
|
|
|
|
The items included in this snapshot (since the 1.1.4 snapshot) are
|
|
|
|
|
described below.
|
|
|
|
|
|
|
|
|
|
API additions
|
|
|
|
|
-------------
|
|
|
|
|
The long-awaited group-rendering support is now available with the
|
|
|
|
|
following function calls:
|
|
|
|
|
|
|
|
|
|
cairo_push_group
|
|
|
|
|
cairo_push_group_with_content
|
|
|
|
|
cairo_pop_group
|
|
|
|
|
cairo_pop_group_to_source
|
|
|
|
|
cairo_get_group_target
|
|
|
|
|
|
|
|
|
|
This API provides a much more convenient mechanism for doing rendering
|
|
|
|
|
to an intermediate surface without the need to manually create a
|
|
|
|
|
temporary cairo_surface_t and a temporary cairo_t and clean them up
|
|
|
|
|
afterwards.
|
|
|
|
|
|
|
|
|
|
Add the following missing get function to complement
|
|
|
|
|
cairo_surface_set_device_offset:
|
|
|
|
|
|
|
|
|
|
cairo_surface_get_device_offset
|
|
|
|
|
|
|
|
|
|
PDF backend (API addition)
|
|
|
|
|
--------------------------
|
|
|
|
|
The PDF backend now provides for per-page size changes, (similar to
|
|
|
|
|
what the PostScript backend got in the 1.1.4 snapshot). The new API
|
|
|
|
|
is:
|
|
|
|
|
|
|
|
|
|
cairo_pdf_surface_set_size
|
|
|
|
|
|
|
|
|
|
Xlib backend (API additions)
|
|
|
|
|
----------------------------
|
|
|
|
|
The following functions have been added to allow the extraction of
|
|
|
|
|
Xlib surface:
|
|
|
|
|
|
|
|
|
|
cairo_xlib_surface_get_display
|
|
|
|
|
cairo_xlib_surface_get_drawable
|
|
|
|
|
cairo_xlib_surface_get_screen
|
|
|
|
|
cairo_xlib_surface_get_visual
|
|
|
|
|
cairo_xlib_surface_get_depth
|
|
|
|
|
|
|
|
|
|
XCB backend (experimental)
|
|
|
|
|
--------------------------
|
|
|
|
|
Update backend so that it now compiles with the recent XCB 0.9 release.
|
|
|
|
|
|
|
|
|
|
Bug fixes and memory leak cleanup
|
|
|
|
|
---------------------------------
|
|
|
|
|
Various little things, nothing too significant though.
|
|
|
|
|
|
2006-05-03 01:31:51 -07:00
|
|
|
Snapshot 1.1.4 (2006-05-03 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
This is the second in a series of snapshots working toward the
|
|
|
|
|
upcoming 1.2 release of cairo. For a list of items still needing work
|
|
|
|
|
on the cairo 1.2 roadmap, please see:
|
|
|
|
|
|
|
|
|
|
http://cairographics.org/ROADMAP
|
|
|
|
|
|
|
|
|
|
The items included in this snapshot (since the 1.1.2 snapshot) are
|
|
|
|
|
described below.
|
|
|
|
|
|
|
|
|
|
PostScript backend: new printing-oriented API
|
|
|
|
|
---------------------------------------------
|
|
|
|
|
We anticipate that with cairo 1.2, toolkits will begin to use cairo
|
|
|
|
|
for printing on systems that use PostScript as the spool format. To
|
|
|
|
|
support this use case, we have added 4 new function calls that are
|
|
|
|
|
specific to the PostScript backend:
|
|
|
|
|
|
|
|
|
|
cairo_ps_surface_set_size
|
|
|
|
|
cairo_ps_surface_dsc_comment
|
|
|
|
|
cairo_ps_surface_dsc_begin_setup
|
|
|
|
|
cairo_ps_surface_dsc_begin_page_setup
|
|
|
|
|
|
|
|
|
|
These functions allow variation of the page size/orientation from one
|
|
|
|
|
page to the next in the PostScript output. They also allow the toolkit
|
|
|
|
|
to provide per-document and per-page printer control options in a
|
|
|
|
|
device-independent way, (for example, by using PPD options and
|
|
|
|
|
emitting them as DSC comments into the PostScript output). This should
|
|
|
|
|
allow toolkits to provide very fine-grained control of many options
|
|
|
|
|
available in printers, (media size, media type, tray selection, etc.).
|
|
|
|
|
|
|
|
|
|
SVG backend: builds by default, version control
|
|
|
|
|
-----------------------------------------------
|
|
|
|
|
The SVG backend continues to see major improvements. It is expected
|
|
|
|
|
that the SVG backend will be a supported backend in the 1.2
|
|
|
|
|
release. This backend will now be built by default if its dependencies
|
|
|
|
|
(freetype and libxml2) are met.
|
|
|
|
|
|
|
|
|
|
Additionally, the SVG backend now has flexibility with regard to what
|
|
|
|
|
version of SVG it targets. It will target SVG 1.1 by default, which
|
|
|
|
|
will require image fallbacks for some of the "fancier" cairo
|
|
|
|
|
compositing operators. Or with the following new function calls:
|
|
|
|
|
|
|
|
|
|
cairo_svg_surface_restrict_to_version
|
|
|
|
|
cairo_svg_get_versions
|
|
|
|
|
cairo_svg_version_to_string
|
|
|
|
|
|
|
|
|
|
it can be made to target SVG 1.2 in which there is native support for
|
|
|
|
|
these compositing operators.
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
At least the following bugs have been fixed since the 1.1.2 snapshot:
|
|
|
|
|
|
|
|
|
|
crash at XRenderAddGlyphs
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=4705
|
|
|
|
|
|
|
|
|
|
Can't build cairo-1.1.2 on opensolaris due to " void function cannot return value"
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=6792
|
|
|
|
|
|
|
|
|
|
Missing out-of-memory check at gfx/cairo/cairo/src/cairo-atsui-font.c:185
|
|
|
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=336129
|
|
|
|
|
|
|
|
|
|
A couple of memory leaks.
|
|
|
|
|
|
2006-04-25 08:44:45 -07:00
|
|
|
Snapshot 1.1.2 (2006-04-25 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
This is the first in a series of snapshots working toward the upcoming
|
2006-05-04 23:39:12 -07:00
|
|
|
1.2 release of cairo. (Subsequent snapshot will use successive even
|
2006-04-25 08:44:45 -07:00
|
|
|
numbers for the third digit, 1.1.4, 1.1.6, etc.) This snapshot is
|
|
|
|
|
backwards-compatible with the 1.0 series---it makes a few API
|
|
|
|
|
additions but does not remove any API.
|
|
|
|
|
|
|
|
|
|
PostScript and PDF backends are no longer "experimental"
|
|
|
|
|
--------------------------------------------------------
|
|
|
|
|
The major theme of the 1.2 release is improved PostScript and PDF
|
|
|
|
|
backends for cairo. Unlike the 1.0 series, in the 1.2 series these
|
|
|
|
|
backends will not be marked as experimental and will be enabled by
|
|
|
|
|
default. We encourage people to test this snapshot and the PS/PDF
|
|
|
|
|
backends in particular as much as possible.
|
|
|
|
|
|
|
|
|
|
The PostScript and PDF output is not yet ideal.
|
|
|
|
|
|
|
|
|
|
* One major problem with the PostScript output is that image
|
|
|
|
|
fallbacks are used more often than strictly necessary, and the
|
|
|
|
|
image fallbacks are at a lower resolution than desired, (the
|
|
|
|
|
cairo_ps_surface_set_dpi call is ignored).
|
|
|
|
|
|
|
|
|
|
* The major drawback of the current PDF backend implementation is
|
|
|
|
|
its text support. Every glyph is represented by a filled path in
|
|
|
|
|
the PDF file. The causes file sizes to be much larger and
|
|
|
|
|
rendering to be much slower than desired.
|
|
|
|
|
|
|
|
|
|
It is anticipated that both of these shortcomings will see some
|
|
|
|
|
improvements before the final 1.2 release.
|
|
|
|
|
|
|
|
|
|
In spite of those shortcomings, we hope that the PS and PDF backends
|
|
|
|
|
will yield faithful results for pretty much any cairo operations you
|
|
|
|
|
can throw at them. Please let us know if you are getting obviously
|
|
|
|
|
"different" results from the PS/PDF backends than from the image or
|
|
|
|
|
xlib backends.
|
|
|
|
|
|
|
|
|
|
Other new experimental backends
|
|
|
|
|
-------------------------------
|
|
|
|
|
This snapshot includes three new backends that did not exist in the
|
|
|
|
|
1.0 series:
|
|
|
|
|
|
|
|
|
|
* beos backend
|
|
|
|
|
|
|
|
|
|
* directfb backend
|
|
|
|
|
|
|
|
|
|
* svg backend
|
|
|
|
|
|
|
|
|
|
These are all currently marked "experimental" and are disabled by
|
|
|
|
|
default. But the SVG backend in particular has seen a lot of recent
|
|
|
|
|
development and is very close to passing the entire cairo test
|
|
|
|
|
suite. It is possible that this backend will become a fully supported
|
|
|
|
|
backend by the time of the cairo 1.2 release.
|
|
|
|
|
|
|
|
|
|
Public API additions
|
|
|
|
|
--------------------
|
|
|
|
|
There have been a few new API functions added to cairo, including:
|
|
|
|
|
|
|
|
|
|
New get_type functions for querying sub-types of object:
|
|
|
|
|
|
|
|
|
|
cairo_surface_get_type
|
|
|
|
|
cairo_pattern_get_type
|
|
|
|
|
cairo_font_face_get_type
|
|
|
|
|
cairo_scaled_font_get_type
|
|
|
|
|
|
|
|
|
|
More convenience in working with cairo_scaled_font_t with new getter
|
|
|
|
|
functions:
|
|
|
|
|
|
|
|
|
|
cairo_scaled_font_get_font_face
|
|
|
|
|
cairo_scaled_font_get_font_matrix
|
|
|
|
|
cairo_scaled_font_get_ctm
|
|
|
|
|
cairo_scaled_font_get_font_options
|
|
|
|
|
|
|
|
|
|
As well as a convenience function for setting a scaled font into a
|
|
|
|
|
cairo context:
|
|
|
|
|
|
|
|
|
|
cairo_set_scaled_font
|
|
|
|
|
|
|
|
|
|
and a function to allow text extents to be queried directly from a
|
|
|
|
|
scaled font, (without requiring a cairo_surface_t or a cairo_t):
|
|
|
|
|
|
|
|
|
|
cairo_scaled_font_text_extents
|
|
|
|
|
|
|
|
|
|
These new scaled font functions were motivated by the needs of the
|
|
|
|
|
pango library.
|
|
|
|
|
|
|
|
|
|
Finally, a new path-construction function was added which clears the
|
|
|
|
|
current point in preparation for a new sub path. This makes cairo_arc
|
|
|
|
|
easier to use in some situations:
|
|
|
|
|
|
|
|
|
|
cairo_new_sub_path
|
|
|
|
|
|
|
|
|
|
Before the 1.2 release is final we do still plan a few more API
|
|
|
|
|
additions specifically motivated by the needs of Mozilla/Firefox.
|
|
|
|
|
|
|
|
|
|
Optimizations and bug fixes
|
|
|
|
|
---------------------------
|
|
|
|
|
Shortly after the 1.0 maintenance series branched off the mainline
|
|
|
|
|
there was a major rework of the cairo font internals. This should
|
|
|
|
|
provide some good performance benefits, but it's also another area
|
|
|
|
|
people should look at closely for potential regressions.
|
|
|
|
|
|
|
|
|
|
There has not yet been any widespread, systematic optimization of
|
|
|
|
|
cairo, but various performance improvements have been made, (and some
|
|
|
|
|
of them are fairly significant). So if some things seem faster than
|
|
|
|
|
1.0 then things are good. If there are any performance regressions
|
|
|
|
|
compared to 1.0 then there is a real problem and we would like to hear
|
|
|
|
|
about that.
|
|
|
|
|
|
|
|
|
|
There has been a huge number of bug fixes---too many to mention in
|
|
|
|
|
detail. Again, things should be better, and never worse compared to
|
|
|
|
|
1.0. Please let us know if your testing shows otherwise.
|
|
|
|
|
|
2005-10-03 17:49:25 +00:00
|
|
|
Release 1.0.2 (2005-10-03 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
=========================================================
|
|
|
|
|
For each bug number XXXX below, see:
|
|
|
|
|
|
|
|
|
|
https://bugs.freedesktop.org/show_bug.cgi?id=XXXX
|
|
|
|
|
|
|
|
|
|
for more details.
|
|
|
|
|
|
|
|
|
|
General bug fixes
|
|
|
|
|
-----------------
|
|
|
|
|
* 4408 - Add support for dashing of stroked curves
|
|
|
|
|
(Carl Worth)
|
|
|
|
|
|
|
|
|
|
* 4409 - Fix dashing so that each dash is capped on both ends
|
|
|
|
|
(Carl Worth)
|
|
|
|
|
|
|
|
|
|
* 4414 - Prevent SIGILL failures (proper use of -mmmx and -msse flags)
|
|
|
|
|
(Sebastien Bacher, Billy Biggs)
|
|
|
|
|
|
|
|
|
|
* 4299 - Fix crashes with text display in multi-threaded program
|
|
|
|
|
(Alexey Shabalin, Carl Worth)
|
|
|
|
|
|
|
|
|
|
* 4401 - Do not use sincos function since it is buggy on some platforms)
|
|
|
|
|
(Tim Mooney, Carl Worth)
|
|
|
|
|
|
|
|
|
|
* 4245 - Fix several bugs in the test suite exposed by amd64 systems
|
|
|
|
|
(Seemant Kulleen, Carl Worth)
|
|
|
|
|
|
|
|
|
|
* 4321 - Add missing byteswapping on GetImage/PutImage
|
|
|
|
|
(Sjoerd Simons, Owen Taylor)
|
|
|
|
|
|
|
|
|
|
* 4220 - Make the check for rectangular trapezoids simpler and more accurate
|
|
|
|
|
(Richard Stellingwerff, Owen Taylor)
|
|
|
|
|
|
|
|
|
|
* 4260 - Add missing channel-order swapping for antialised fonts
|
|
|
|
|
(Barbie LeVile, Owen Taylor)
|
|
|
|
|
|
|
|
|
|
* 4283 - Fix compilation failure with aggressive inlining (gcc -O3)
|
|
|
|
|
(Marco Manfredini, Owen Taylor)
|
|
|
|
|
|
|
|
|
|
* 4208 - Fix some warnings from sparse
|
|
|
|
|
(Kjartan Maraas, Billy Biggs)
|
|
|
|
|
|
|
|
|
|
* 4269 - Fix to not crash when compiled with -fomit-frame-pointer
|
|
|
|
|
(Ronald Wahl, Owen Taylor)
|
|
|
|
|
|
|
|
|
|
* 4263 - Improve performance for vertical gradients
|
|
|
|
|
(Richard Stellingwerff, Owen Taylor)
|
|
|
|
|
|
|
|
|
|
* 4231
|
|
|
|
|
* 4298 - Accomodate gentoo and Mandriva versions in X server vendor string check
|
|
|
|
|
(Billy Biggs, Frederic Crozat, Owen Taylor)
|
|
|
|
|
|
|
|
|
|
win32-specific fixes
|
|
|
|
|
--------------------
|
|
|
|
|
* 4599 - Fix "missing wedges" on some stroked paths (win32)
|
|
|
|
|
(Tim Rowley, Jonathan Watt, Bertram Felgenhauer, Carl Worth, Keith Packard)
|
|
|
|
|
|
|
|
|
|
* 4612 - Fix disappearing text if first character out of surface (win32)
|
|
|
|
|
(Tim Rowley)
|
|
|
|
|
|
|
|
|
|
* 4602 - Fix shutdown of cairo from failing intermediate, size-0 bitmaps (win32)
|
|
|
|
|
Aka. the "white rectangles" bug from mozilla-svg testing
|
|
|
|
|
(Tim Rowley)
|
|
|
|
|
|
|
|
|
|
* Various portability improvements for win32
|
|
|
|
|
(Hans Breuer, Owen Taylor, Carl Worth)
|
|
|
|
|
|
|
|
|
|
* 4593 - Fix font sizes to match user expectations (win32)
|
|
|
|
|
(Tor Lillqvist, Owen Taylor)
|
|
|
|
|
|
|
|
|
|
* 3927 - Fix to report metrics of size 0 for glyph-not-available (win32)
|
|
|
|
|
(Hans Breuer, Owen Taylor, Tor Lillqvist)
|
|
|
|
|
|
|
|
|
|
* Add locking primitives for win32
|
|
|
|
|
(Hans Breuer)
|
|
|
|
|
|
|
|
|
|
xlib-specific fixes
|
|
|
|
|
-------------------
|
|
|
|
|
* Fix crash from size-0 pixmap due to empty clip region (xlib)
|
|
|
|
|
(Radek Doulík, Carl Worth)
|
|
|
|
|
|
2005-08-24 05:21:50 +00:00
|
|
|
Release 1.0.0 (2005-08-24 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
=========================================================
|
|
|
|
|
Experimental backends
|
|
|
|
|
---------------------
|
2005-08-24 09:26:28 +00:00
|
|
|
* The Glitz, PS, PDF, Quartz, and XCB backends have been declared
|
2005-08-24 05:21:50 +00:00
|
|
|
experimental, and are not part of the API guarantees that accompany
|
|
|
|
|
this release. They are not built by default, even when the required
|
|
|
|
|
libraries are available, and must be enabled explicitly with
|
|
|
|
|
--enable-ps, --enable-pdf, --enable-quartz or --enable-xcb.
|
|
|
|
|
|
|
|
|
|
It is very painful for us to be pushing out a major release without
|
|
|
|
|
these backends enabled. There has been a tremendous amount of work
|
|
|
|
|
put into each one and all are quite functional to some
|
|
|
|
|
extent. However, each also has some limitations. And none of these
|
|
|
|
|
backends have been tested to the level of completeness and
|
|
|
|
|
correctness that we expect from cairo backends.
|
|
|
|
|
|
|
|
|
|
We do encourage people to experiment with these backends and report
|
2005-08-24 09:26:28 +00:00
|
|
|
success, failure, or means of improving them.
|
2005-08-24 05:21:50 +00:00
|
|
|
|
|
|
|
|
Operator behavior
|
|
|
|
|
-----------------
|
|
|
|
|
* Prior to 0.9.0 the SOURCE, CLEAR and a number of other operators
|
|
|
|
|
behaved in an inconsistent and buggy fashion and could affect areas
|
|
|
|
|
outside the clip mask. In 0.9.0, these six "unbounded" operators
|
|
|
|
|
were fixed to consistently clear areas outside the shape but within
|
|
|
|
|
the clip mask. This is useful behavior for an operator such as IN,
|
|
|
|
|
but not what was expected for SOURCE and CLEAR. So, in this release
|
|
|
|
|
the behavior of SOURCE and CLEAR has been changed again. They now
|
|
|
|
|
affect areas only within both the source and shape. We can write
|
|
|
|
|
the new operators as:
|
|
|
|
|
|
|
|
|
|
SOURCE: dest' = (mask IN clip) ? source : dest
|
|
|
|
|
CLEAR: dest' = (mask IN clip) ? 0 : dest
|
|
|
|
|
|
|
|
|
|
Behavior and API changes
|
|
|
|
|
------------------------
|
|
|
|
|
* Setting the filter on a gradient pattern would change the
|
|
|
|
|
interpolation between color stops away from the normal linear
|
|
|
|
|
interpolation. This dubious behavior has been removed.
|
|
|
|
|
|
|
|
|
|
* The CAIRO_CONTENT_VALID() and CAIRO_FORMAT_VALID() macros --
|
|
|
|
|
implementation details that leaked into cairo.h -- have been moved
|
|
|
|
|
into an internal header.
|
|
|
|
|
|
|
|
|
|
* The cairo_show_text function now advances the current point
|
|
|
|
|
according to the total advance values of the string.
|
|
|
|
|
|
2005-08-24 09:26:28 +00:00
|
|
|
API additions
|
|
|
|
|
-------------
|
|
|
|
|
* cairo_set_dash can now detect error and can set
|
|
|
|
|
CAIRO_STATUS_INVALID_DASH.
|
|
|
|
|
|
2005-08-24 05:21:50 +00:00
|
|
|
Features
|
|
|
|
|
--------
|
|
|
|
|
* When compiled against recent versions of fontconfig and FreeType,
|
|
|
|
|
artificial bold fonts can now be turned on from fonts.conf using
|
|
|
|
|
the FC_EMBOLDEN fontconfig key.
|
|
|
|
|
|
|
|
|
|
Optimization
|
|
|
|
|
------------
|
|
|
|
|
* The compositing code from the 'xserver' code tree has now been
|
|
|
|
|
completely merged into libpixman. This includes MMX optimization of
|
|
|
|
|
common operations.
|
|
|
|
|
|
|
|
|
|
* The image transformation code in libpixman has been improved and
|
|
|
|
|
now performs significantly faster.
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
* Several crashes related to corruption in the font caches have been
|
|
|
|
|
fixed.
|
|
|
|
|
|
|
|
|
|
* All test cases now match pixel-for-pixel on x86 and PPC; this
|
|
|
|
|
required fixing bugs in the compositing, stroking, and pattern
|
|
|
|
|
rendering code.
|
|
|
|
|
|
|
|
|
|
* Negative dash offsets have been fixed to work correctly.
|
|
|
|
|
|
|
|
|
|
* The stroking of paths with mutiple subpaths has now been fixed to
|
|
|
|
|
apply caps to all subpaths rather than just the last one.
|
|
|
|
|
|
|
|
|
|
* Many build fixes for better portability on various systems.
|
|
|
|
|
|
|
|
|
|
* Lots of other bug fixes, but we're too tired to describe them in
|
|
|
|
|
more detail here.
|
|
|
|
|
|
2005-08-13 05:00:20 +00:00
|
|
|
Release 0.9.2 (2005-08-13 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
=========================================================
|
|
|
|
|
Release numbering
|
|
|
|
|
-----------------
|
|
|
|
|
* You will notice that this release jumped from 0.9.0 to 0.9.2. We've
|
|
|
|
|
decided to use an odd micro version number (eg. 0.9.1) to indicate
|
|
|
|
|
in-progress development between releases. As soon as 0.9.2 is
|
|
|
|
|
tagged, the version will be incremented in CVS to 0.9.3 where it
|
|
|
|
|
will stay until just before 0.9.4 is built, uploaded, and tagged.
|
|
|
|
|
|
|
|
|
|
So, even-micro == a released version, odd-micro == something in-between.
|
|
|
|
|
|
|
|
|
|
Libpixman dependency dropped
|
|
|
|
|
----------------------------
|
2005-08-13 05:46:40 +00:00
|
|
|
* As of this release, the dependency on an external libpixman has
|
2005-08-13 05:00:20 +00:00
|
|
|
been dropped. Instead, the code from libpixman needed for cairo has
|
|
|
|
|
been incorporated into the cairo source tree. The motivation for
|
|
|
|
|
this change is that while cairo's API is stable and ready to be
|
|
|
|
|
maintained after the 1.0 release, libpixman's API is not, so we do
|
|
|
|
|
not want to expose it at this time.
|
|
|
|
|
|
|
|
|
|
Also, the incorporation of libpixman into cairo also renames all
|
|
|
|
|
previously-public libpixman symbols in order to avoid any conflict
|
|
|
|
|
with a future release of libpixman
|
|
|
|
|
|
|
|
|
|
API additions
|
|
|
|
|
-------------
|
|
|
|
|
* Macros and functions have been added so that the version of cairo
|
|
|
|
|
can be queried at either compile-time or at run-time. The version
|
|
|
|
|
is made available as both a human-readable string and as a single
|
|
|
|
|
integer:
|
|
|
|
|
|
|
|
|
|
CAIRO_VERSION_STRING eg. "0.9.2"
|
|
|
|
|
CAIRO_VERSION eg. 000902
|
|
|
|
|
|
|
|
|
|
const char*
|
|
|
|
|
cairo_version_string (void); /* eg. "0.9.2" */
|
|
|
|
|
|
|
|
|
|
int
|
|
|
|
|
cairo_version (void); /* eg. 000902 */
|
|
|
|
|
|
|
|
|
|
A macro is provided to convert a three-part component version into
|
|
|
|
|
the encoded single-integer form:
|
|
|
|
|
|
|
|
|
|
CAIRO_VERSION_ENCODE(X,Y,Z)
|
|
|
|
|
|
|
|
|
|
For example, the CAIRO_VERSION value of 000902 is obtained as
|
|
|
|
|
CAIRO_VERSION_ENCODE(0,9,2). The intent is to make version
|
|
|
|
|
comparisons easy, either at compile-time:
|
|
|
|
|
|
|
|
|
|
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(0,9,2)
|
|
|
|
|
...
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
Or at run-time:
|
|
|
|
|
|
|
|
|
|
if (cairo_version() >= CAIRO_VERSION_ENCODE(0,9,2)) { /* ... */ }
|
|
|
|
|
|
|
|
|
|
Thread safety
|
|
|
|
|
-------------
|
|
|
|
|
* This release adds pthread-based locking (when available) to make
|
|
|
|
|
the caches used by cairo safe for threaded programs. Some may
|
|
|
|
|
remember a failed experiment with this locking between the 0.5.1
|
|
|
|
|
and 0.5.2 snapshots, (where even single-threaded programs that
|
|
|
|
|
linked with -lpthread would deadlock). We believe that that problem
|
|
|
|
|
has been fixed, so we are looking forward to testing and reports
|
|
|
|
|
from users with threaded applications.
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
* The XCB and Quartz backends failed to compiled in the 0.9.0 release
|
|
|
|
|
due to minor syntax errors. These have now been fixed.
|
|
|
|
|
|
|
|
|
|
* Various crashes in glitz and pixman due to size 0 glyphs have been
|
|
|
|
|
fixed.
|
|
|
|
|
|
2005-08-08 21:06:44 +00:00
|
|
|
Release 0.9.0 (2005-08-08 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
=========================================================
|
2005-08-13 04:17:36 +00:00
|
|
|
Soname change
|
2005-08-08 21:06:44 +00:00
|
|
|
-------------
|
2005-08-13 04:17:36 +00:00
|
|
|
* In all prior snapshots, the libtool library versioning was set to
|
|
|
|
|
1:0:0. As this release is intended to mark the beginning of
|
|
|
|
|
backwards-compatible releases, the versioning has been incremented
|
|
|
|
|
to 2:0:0. You will notice that the numeric extension on the
|
|
|
|
|
installed library filename will change similarly.
|
|
|
|
|
|
|
|
|
|
This change will also require all cairo-using applications to be
|
|
|
|
|
recompiled. We recognize that this may cause some frustration since
|
|
|
|
|
this release is backwards-compatible with 0.6.0 and in that sense
|
|
|
|
|
"shouldn't" require re-compilation. However, since all historical
|
|
|
|
|
snapshots have used the same 1:0:0 version in spite of incompatible
|
|
|
|
|
API changes between them, it was essential that the upcoming 1.0
|
|
|
|
|
release series have distinct library versioning.
|
2005-08-08 21:06:44 +00:00
|
|
|
|
2005-08-13 04:17:36 +00:00
|
|
|
All future releases will use the library versioning to properly
|
2005-08-13 05:00:20 +00:00
|
|
|
indicate compatibility between releases. So, any application
|
2005-08-13 04:17:36 +00:00
|
|
|
re-compiled now to work with the 0.9.0 will not need to be
|
|
|
|
|
recompiled when a compatible 1.0 release of cairo is made in the
|
|
|
|
|
future.
|
|
|
|
|
|
|
|
|
|
API additions
|
|
|
|
|
-------------
|
2005-08-10 20:25:57 +00:00
|
|
|
* Add new function calls to set/get the current antialiasing mode in
|
|
|
|
|
the graphics state:
|
2005-08-08 21:06:44 +00:00
|
|
|
|
|
|
|
|
cairo_set_antialias
|
2005-08-10 20:25:57 +00:00
|
|
|
cairo_get_antialias
|
2005-08-08 21:06:44 +00:00
|
|
|
|
|
|
|
|
This call accepts the same modes recently added for font options
|
|
|
|
|
(NONE or GRAY) but affects the rendering of geometry other than
|
|
|
|
|
text. The intent of this call is to enable more precise control of
|
|
|
|
|
which pixels are affected by each operation, for example to allow
|
|
|
|
|
for full-scene antialiasing for seam-free rendering. It is not
|
|
|
|
|
expected that non-antialiased rendering will perform better than
|
|
|
|
|
anti-aliased rendering.
|
|
|
|
|
|
|
|
|
|
* Three new functions were added to provide support for mixed cairo-
|
|
|
|
|
and non-cairo drawing to the same surface:
|
|
|
|
|
|
|
|
|
|
cairo_surface_mark_dirty
|
|
|
|
|
cairo_surface_mark_dirty_rectangle
|
2005-08-10 20:25:57 +00:00
|
|
|
cairo_surface_flush
|
2005-08-08 21:06:44 +00:00
|
|
|
|
|
|
|
|
* The return type of the several "reference" functions was change,
|
|
|
|
|
(API compatibly), from void to the same type as the argument. The
|
|
|
|
|
affected functions are:
|
|
|
|
|
|
|
|
|
|
cairo_font_face_reference
|
|
|
|
|
cairo_scaled_font_reference
|
|
|
|
|
cairo_pattern_reference
|
|
|
|
|
cairo_surface_reference
|
|
|
|
|
cairo_reference
|
|
|
|
|
|
|
|
|
|
This allows a convenient way to assign and reference in a single
|
|
|
|
|
statement.
|
|
|
|
|
|
2005-08-13 04:17:36 +00:00
|
|
|
Semantic changes
|
|
|
|
|
----------------
|
|
|
|
|
* The behavior of cairo_set_source with a pattern with a non-identity
|
|
|
|
|
matrix was previously not well-defined. The new behavior is as
|
|
|
|
|
follows:
|
|
|
|
|
|
|
|
|
|
The pattern's transformation matrix will be locked to the
|
|
|
|
|
user space in effect at the time of cairo_set_source(). This means
|
|
|
|
|
that further modifications of the CTM will not affect the source
|
|
|
|
|
pattern.
|
|
|
|
|
|
2005-08-08 21:06:44 +00:00
|
|
|
cairo-win32
|
|
|
|
|
-----------
|
|
|
|
|
* Some portability improvements, (eg. workaround for missing stdint.h).
|
|
|
|
|
|
|
|
|
|
cairo-ft
|
|
|
|
|
--------
|
|
|
|
|
* Updated to allow compilation with older versions of freetype.
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
* Fix the unbounded operators to actually produce a correct result,
|
2005-08-13 05:00:20 +00:00
|
|
|
(previously the results were artificially restricted to the
|
2005-08-08 21:06:44 +00:00
|
|
|
bounding box of whatever shape was being drawn rather than
|
|
|
|
|
extending out infinitely). The fixed operators are:
|
|
|
|
|
|
|
|
|
|
CAIRO_OPERATOR_CLEAR
|
|
|
|
|
CAIRO_OPERATOR_SOURCE
|
|
|
|
|
CAIRO_OPERATOR_OUT
|
|
|
|
|
CAIRO_OPERATOR_IN
|
|
|
|
|
CAIRO_OPERATOR_DEST_IN
|
|
|
|
|
CAIRO_OPERATOR_DEST_ATOP
|
|
|
|
|
|
|
|
|
|
* Fix cairo_mask and cairo_mask_surface to transform the mask by the
|
|
|
|
|
current transformation matrix (CTM).
|
|
|
|
|
|
|
|
|
|
* Fix cairo_set_source to lock the CTM used to transform the pattern.
|
|
|
|
|
|
|
|
|
|
* Workaround for X server Render bug involving repeating patterns
|
|
|
|
|
with a general transformation matrix.
|
|
|
|
|
|
|
|
|
|
* cairo_get_font_face fixed to return a "nil" font face object rather
|
|
|
|
|
than NULL on error.
|
|
|
|
|
|
|
|
|
|
* cairo_set_font_face fixed to not crash if given a NULL font face,
|
2005-08-13 05:00:20 +00:00
|
|
|
(which is the documented interface for restoring the default font
|
2005-08-08 21:06:44 +00:00
|
|
|
face).
|
|
|
|
|
|
|
|
|
|
* Fix xlib glyphset caching to not try to free a NULL glyph.
|
|
|
|
|
|
2005-07-28 10:51:37 +00:00
|
|
|
Snapshot 0.6.0 (2005-07-28 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
API changes
|
|
|
|
|
-----------
|
2005-07-28 11:51:38 +00:00
|
|
|
* The prototypes of the following functions have changed:
|
2005-07-28 10:51:37 +00:00
|
|
|
|
2005-07-28 11:51:38 +00:00
|
|
|
cairo_xlib_surface_create_with_xrender_format
|
|
|
|
|
cairo_xlib_surface_create_for_bitmap
|
|
|
|
|
|
|
|
|
|
A Screen* parameter has been added to each. This allows the cairo
|
|
|
|
|
xlib backend to work correctly with multi-head X servers.
|
|
|
|
|
|
|
|
|
|
* The following function has been modified:
|
|
|
|
|
|
|
|
|
|
cairo_scaled_font_create
|
|
|
|
|
|
|
|
|
|
to accept a cairo_font_options_t*. See below fore more details.
|
|
|
|
|
|
|
|
|
|
* All opaque, reference-counted cairo objects have now been moved to a
|
|
|
|
|
standard error-handling scheme. The new objects to receive this
|
|
|
|
|
treatment are cairo_font_face_t, cairo_scaled_font_t, and
|
|
|
|
|
cairo_surface_t. (Previous snapshots already provided this scheme
|
|
|
|
|
for cairo_t, cairo_path_t, and cairo_pattern_t.)
|
|
|
|
|
|
|
|
|
|
This changes two functions to have a return type of void rather than
|
|
|
|
|
cairo_status_t:
|
|
|
|
|
|
|
|
|
|
cairo_scaled_font_extent
|
|
|
|
|
cairo_surface_finish
|
|
|
|
|
|
|
|
|
|
And significantly, none of the create functions for any of the
|
|
|
|
|
objects listed above will return NULL. The pointer returned from any
|
|
|
|
|
function will now always be a valid pointer and should always be
|
|
|
|
|
passed to the corresponding destroy function when finished
|
|
|
|
|
|
|
|
|
|
The simplest strategy for porting code is to switch from:
|
|
|
|
|
|
|
|
|
|
object = cairo_<object>_create ();
|
|
|
|
|
if (object == NULL)
|
|
|
|
|
goto BAILOUT;
|
|
|
|
|
|
|
|
|
|
/* act on object */
|
|
|
|
|
|
|
|
|
|
cairo_<object>_destroy (object);
|
|
|
|
|
|
|
|
|
|
to:
|
|
|
|
|
|
|
|
|
|
object = cairo_<object>_create ();
|
|
|
|
|
if (cairo_<object>_status (object))
|
|
|
|
|
goto BAILOUT;
|
|
|
|
|
|
|
|
|
|
/* act on object */
|
|
|
|
|
|
|
|
|
|
cairo_<object>_destroy (object);
|
|
|
|
|
|
|
|
|
|
But significantly, it is not required to check for an error status
|
|
|
|
|
before the "act on object" portions of the code above. All
|
|
|
|
|
operations on an object with an error status are, by definition,
|
|
|
|
|
no-ops without side effect. So new code might be written in an
|
|
|
|
|
easier-to-read style of:
|
|
|
|
|
|
|
|
|
|
object = cairo_<object>_create ();
|
|
|
|
|
|
|
|
|
|
/* act on object */
|
|
|
|
|
|
|
|
|
|
cairo_<object>_destroy (object);
|
|
|
|
|
|
|
|
|
|
with cairo_<object>_status checks placed only at strategic
|
|
|
|
|
locations. For example, passing an error object to another object,
|
|
|
|
|
(eg. cairo_set_source with an in-error pattern), will propagate the
|
|
|
|
|
error to the subsequent object (eg. the cairo_t). This means that
|
|
|
|
|
error checking can often be deferred even beyond the destruction of
|
|
|
|
|
a temporary object.
|
|
|
|
|
|
|
|
|
|
API additions
|
|
|
|
|
-------------
|
|
|
|
|
* New functions for checking the status of objects that have been
|
|
|
|
|
switched to the common error-handling scheme:
|
|
|
|
|
|
|
|
|
|
cairo_font_face_status
|
|
|
|
|
cairo_scaled_font_status
|
|
|
|
|
cairo_surface_status
|
|
|
|
|
|
|
|
|
|
* The _cairo_error function which was added in 0.5.1 has now been made
|
|
|
|
|
much more useful. In 0.5.1 only errors on cairo_t objects passed
|
|
|
|
|
through _cairo_error. Now, an error on any object should pass
|
|
|
|
|
through _cairo_error making it much more reliable as a debugging
|
|
|
|
|
mechanism for finding when an error first occurs.
|
|
|
|
|
|
|
|
|
|
* Added new font options support with a myriad of functions:
|
|
|
|
|
|
|
|
|
|
cairo_font_options_create
|
|
|
|
|
cairo_font_options_copy
|
|
|
|
|
cairo_font_options_destroy
|
|
|
|
|
|
|
|
|
|
cairo_font_options_status
|
|
|
|
|
|
|
|
|
|
cairo_font_options_merge
|
|
|
|
|
cairo_font_options_equal
|
|
|
|
|
cairo_font_options_hash
|
|
|
|
|
|
|
|
|
|
cairo_font_options_set_antialias
|
|
|
|
|
cairo_font_options_get_antialias
|
|
|
|
|
cairo_font_options_set_subpixel_order
|
|
|
|
|
cairo_font_options_get_subpixel_order
|
|
|
|
|
cairo_font_options_set_hint_style
|
|
|
|
|
cairo_font_options_get_hint_style
|
|
|
|
|
cairo_font_options_set_hint_metrics
|
|
|
|
|
cairo_font_options_get_hint_metrics
|
|
|
|
|
|
|
|
|
|
cairo_surface_get_font_options
|
|
|
|
|
|
|
|
|
|
cairo_ft_font_options_substitute
|
|
|
|
|
|
|
|
|
|
cairo_set_font_options
|
|
|
|
|
cairo_get_font_options
|
|
|
|
|
|
|
|
|
|
This new font options support allows the application to have much
|
|
|
|
|
more fine-grained control over how fonts are rendered.
|
|
|
|
|
Significantly, it also allows surface backends to have some
|
|
|
|
|
influence over the process. For example, the xlib backend now
|
|
|
|
|
queries existing Xft properties to set font option defaults.
|
|
|
|
|
|
|
|
|
|
* New function:
|
|
|
|
|
|
|
|
|
|
cairo_xlib_surface_set_drawable
|
|
|
|
|
|
2005-08-13 05:00:20 +00:00
|
|
|
which allows the target drawable for an xlib cairo_surface_t to be
|
2005-07-28 11:51:38 +00:00
|
|
|
changed to another with the same format, screen, and display. This
|
|
|
|
|
is necessary in certain double-buffering techniques.
|
|
|
|
|
|
|
|
|
|
New features
|
|
|
|
|
------------
|
|
|
|
|
* Sub-pixel text antialiasing is now supported.
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
* Fixed assertion failure in cairo_surface_create_similar when
|
|
|
|
|
application commits an error by passing a cairo_format_t rather than
|
|
|
|
|
a cairo_content_t.
|
|
|
|
|
|
|
|
|
|
* Avoid division by zero in various places (cairo-ft).
|
|
|
|
|
|
|
|
|
|
* Fix infinite loop when using non-default visuals (cairo-xlib).
|
|
|
|
|
|
|
|
|
|
* Eliminate segfault in cairo_image_surface_create_from_png_stream.
|
|
|
|
|
|
|
|
|
|
* Prevent errant sign-extension of masks on 64-bit architectures
|
|
|
|
|
(cairo-xlib and cairo-xcb).
|
|
|
|
|
|
|
|
|
|
* Other miscellaneous fixes.
|
2005-07-28 10:51:37 +00:00
|
|
|
|
2005-07-18 08:31:24 +00:00
|
|
|
Snapshot 0.5.2 (2005-07-18 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
API changes
|
|
|
|
|
-----------
|
|
|
|
|
* New functions for creating patterns of a single color:
|
|
|
|
|
|
|
|
|
|
cairo_pattern_create_rgb
|
|
|
|
|
cairo_pattern_create_rgba
|
|
|
|
|
|
|
|
|
|
* Change cairo_surface_create_similar to accept a new type of
|
|
|
|
|
cairo_content_t rather than cairo_format_t:
|
|
|
|
|
|
|
|
|
|
typedef enum _cairo_content {
|
|
|
|
|
CAIRO_CONTENT_COLOR = 0x1000,
|
|
|
|
|
CAIRO_CONTENT_ALPHA = 0x2000,
|
|
|
|
|
CAIRO_CONTENT_COLOR_ALPHA = 0x3000
|
|
|
|
|
} cairo_content_t;
|
|
|
|
|
|
|
|
|
|
* Add new CAIRO_FORMAT_VALID and CAIRO_CONTENT_VALID macros.
|
|
|
|
|
|
|
|
|
|
* Remove unused status value:
|
|
|
|
|
|
|
|
|
|
CAIRO_STATUS_NO_TARGET_SURFACE
|
|
|
|
|
|
|
|
|
|
* Add new status values:
|
|
|
|
|
|
|
|
|
|
CAIRO_STATUS_INVALID_STATUS
|
|
|
|
|
|
|
|
|
|
* Require libpixman >= 0.1.5 (for necessary bug fixes)
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
* Fix cairo_surface_write_to_png for RGB24 images.
|
|
|
|
|
|
|
|
|
|
* Fix broken metrics and rendering for bitmap fonts. Add mostly
|
|
|
|
|
useless bitmap glyph transformation.
|
|
|
|
|
|
|
|
|
|
* Fix glyph caches to not eject entries that might be immediately
|
|
|
|
|
needed, (fixing intermittent crashes when rendering text).
|
|
|
|
|
|
2005-08-13 05:00:20 +00:00
|
|
|
* Fix all memory leaks found by running "make check-valgrind".
|
2005-07-18 08:31:24 +00:00
|
|
|
|
|
|
|
|
ATSUI backend changes
|
|
|
|
|
---------------------
|
|
|
|
|
* Allow building against < 10.3 SDK.
|
|
|
|
|
|
|
|
|
|
* Prevent crash on empty strings.
|
|
|
|
|
|
|
|
|
|
Glitz backend changes
|
|
|
|
|
---------------------
|
|
|
|
|
* Require glitz >= 0.4.4.
|
|
|
|
|
|
|
|
|
|
* Use frame buffer objects instead of pbuffers for accelerated
|
|
|
|
|
offscreen drawing.
|
|
|
|
|
|
|
|
|
|
* Minor improvement to gradient pattern creation.
|
|
|
|
|
|
|
|
|
|
PostScript backend fixes
|
|
|
|
|
------------------------
|
|
|
|
|
* Rewrite of the PS backend to generate more interesting output that
|
|
|
|
|
the old big-image implementation.
|
|
|
|
|
|
|
|
|
|
Win32 backend fixes
|
|
|
|
|
-------------------
|
|
|
|
|
* Implement glyph path support.
|
|
|
|
|
|
|
|
|
|
* Fix swap of blue and green values in the fill_rectangles path.
|
|
|
|
|
|
|
|
|
|
Xlib backend fixes
|
|
|
|
|
------------------
|
|
|
|
|
* Add optimization to use XCopyArea rather than XRenderComposite when
|
|
|
|
|
transforming only with an integer translation, and using SOURCE
|
|
|
|
|
operator or OVER with a source pattern without alpha.
|
|
|
|
|
|
2005-06-20 16:35:40 +00:00
|
|
|
Snapshot 0.5.1 (2005-06-20 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
API changes
|
|
|
|
|
-----------
|
|
|
|
|
* Removed cairo_status_string(cairo_t*) and add
|
|
|
|
|
cairo_status_to_string(cairo_status_t) in its place. Code using
|
|
|
|
|
cairo_status_string can be ported forward as follows:
|
|
|
|
|
|
|
|
|
|
cairo_status (cr);
|
|
|
|
|
->
|
|
|
|
|
cairo_status_to_string (cairo_status (cr));
|
|
|
|
|
|
|
|
|
|
* Removed the BAD_NESTING restriction which means that two different
|
|
|
|
|
cairo_t objects can now interleave drawing to the same
|
|
|
|
|
cairo_surface_t without causing an error.
|
|
|
|
|
|
|
|
|
|
* The following functions which previously had a return type of
|
|
|
|
|
cairo_status_t now have a return type of void:
|
|
|
|
|
|
|
|
|
|
cairo_pattern_add_color_stop_rgba
|
|
|
|
|
cairo_pattern_set_matrix
|
|
|
|
|
cairo_pattern_get_matrix
|
|
|
|
|
cairo_pattern_set_extend
|
|
|
|
|
cairo_pattern_set_filter
|
|
|
|
|
|
|
|
|
|
See discussion of cairo_pattern_status below for more details.
|
|
|
|
|
|
|
|
|
|
API additions
|
|
|
|
|
-------------
|
|
|
|
|
* Improved error handling:
|
|
|
|
|
|
|
|
|
|
cairo_status_t
|
|
|
|
|
cairo_pattern_status (cairo_pattern_t *pattern);
|
|
|
|
|
|
|
|
|
|
This snapshot expands the status-based error handling scheme from
|
|
|
|
|
cairo_t to cairo_path_t and cairo_pattern_t. It also expands the
|
|
|
|
|
scheme so that object-creating functions, (cairo_create,
|
|
|
|
|
cairo_pattern_create_*, cairo_copy_path_*), are now guaranteed to
|
|
|
|
|
not return NULL. Instead, in the case of out-of-memory these
|
|
|
|
|
functions will return a static object with
|
|
|
|
|
status==CAIRO_STATUS_NO_MEMORY. The status can be checked with the
|
|
|
|
|
functions cairo_status and cairo_pattern_status, or by direct
|
|
|
|
|
inspection of the new status field in cairo_path_t.
|
|
|
|
|
|
|
|
|
|
Please note that some objects, including cairo_surface_t and all of
|
|
|
|
|
the font-related objects have not been converted to this
|
|
|
|
|
error-handling scheme.
|
|
|
|
|
|
|
|
|
|
* In addition to the above changes, a new private function has been added:
|
|
|
|
|
|
|
|
|
|
_cairo_error
|
|
|
|
|
|
|
|
|
|
This function can be used to set a breakpoint in a debugger to make
|
|
|
|
|
it easier to find programming error in cairo-using code. (Currently,
|
|
|
|
|
_cairo_error is called when any error is detected within a cairo_t
|
|
|
|
|
context, but is not called for non-cairo_t errors such as for
|
|
|
|
|
cairo_path_t and cairo_pattern_t).
|
|
|
|
|
|
|
|
|
|
* Fixed cairo_path_data_t so that its enum is visible to C++ code, (as
|
|
|
|
|
cairo_path_data_type_t).
|
|
|
|
|
|
|
|
|
|
Performance improvements
|
|
|
|
|
------------------------
|
|
|
|
|
* Made a minor performance improvement for clipping, (restrict clip
|
|
|
|
|
surface to the new intersected bounds).
|
|
|
|
|
|
|
|
|
|
* Optimize rendering of a solid source pattern with a pixel-aligned
|
|
|
|
|
rectangular path to use backend clipping rather than rasterization
|
|
|
|
|
and backend compositing.
|
|
|
|
|
|
|
|
|
|
* Optimize cairo_paint_with_alpha to defer to cairo_paint when alpha
|
|
|
|
|
is 1.0.
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
* Fixed memory leak in cairo_copy_path.
|
|
|
|
|
|
|
|
|
|
* A build fix for non-srcdir builds.
|
|
|
|
|
|
|
|
|
|
PDF backend fixes
|
|
|
|
|
-----------------
|
|
|
|
|
* New support for path-based clipping.
|
|
|
|
|
|
|
|
|
|
* Fix for text rotated to angles other than multiples of π/2.
|
|
|
|
|
|
|
|
|
|
Win32 backend fixes
|
|
|
|
|
-------------------
|
|
|
|
|
* Fix for text extents.
|
|
|
|
|
|
|
|
|
|
Xlib backend
|
|
|
|
|
------------
|
|
|
|
|
* Implemented a complex workaround for X server bug[*] related to
|
|
|
|
|
Render-based compositing with untransformed, repeating source
|
|
|
|
|
pictures. The workaround uses core Xlib when possible for
|
|
|
|
|
performance, (ie. with CAIRO_OPERATOR_SOURCE or CAIRO_OPERATOR_OVER
|
|
|
|
|
with an opaque source surface), and falls back to the pixman
|
|
|
|
|
image-based compositing otherwise.
|
|
|
|
|
|
|
|
|
|
[*] https://bugs.freedesktop.org/show_bug.cgi?id=3566
|
|
|
|
|
|
|
|
|
|
* Various bug fixes, particularly in the fallback paths.
|
|
|
|
|
|
2005-05-17 18:39:56 +00:00
|
|
|
Snapshot 0.5.0 (2005-05-17 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
This is a pretty big, and fairly significant snapshot. It represents
|
|
|
|
|
between 2 and 3 months of solid work from a lot of people on improving
|
|
|
|
|
the API as much as possible. I'd like to express my appreciation and
|
|
|
|
|
congratulations to everyone who has worked on the big API Shakeup,
|
|
|
|
|
(whether in email battles over names, or fixing my silly bugs).
|
|
|
|
|
|
|
|
|
|
This snapshot will require some effort on the part of users, since
|
|
|
|
|
there are a _lot_ of API changes (ie. no cairo program ever written is
|
|
|
|
|
safe --- they're all broken now in at least one way). But, in spite of
|
|
|
|
|
that, we do encourage everyone to move their code to this snapshot as
|
|
|
|
|
soon as possible. And we're doing everything we can think of to make
|
|
|
|
|
the transition as smooth as possible.
|
|
|
|
|
|
|
|
|
|
The idea behind 0.5 is that we've tried to make every good API change
|
|
|
|
|
we could want now, and get them all done with. That is, between now
|
|
|
|
|
and the 1.0 release of cairo, we expect very few new API changes,
|
|
|
|
|
(though some will certainly sneak in). We will have some significant
|
|
|
|
|
additions, but the pain of moving code from cairo 0.4 to cairo 0.5
|
|
|
|
|
should be a one time experience, and things should be much smoother as
|
|
|
|
|
we continue to move toward cairo 1.0.
|
|
|
|
|
|
|
|
|
|
And with so many changes coming out for the first time in this 0.5
|
|
|
|
|
release, we really do need a lot of people trying this out to make
|
|
|
|
|
sure the ideas are solid before we freeze the API in preparation for
|
|
|
|
|
the 1.0 release.
|
|
|
|
|
|
|
|
|
|
OK, enough introduction. Here is a (not-quite-complete) description of
|
|
|
|
|
the API removals, changes and additions in this snapshot, (compared to
|
|
|
|
|
0.4.0)
|
|
|
|
|
|
|
|
|
|
API removals
|
|
|
|
|
============
|
|
|
|
|
The following public functions have been removed:
|
|
|
|
|
|
|
|
|
|
- cairo_set_target_*
|
|
|
|
|
|
|
|
|
|
This is a big change. See the description of cairo_create in
|
|
|
|
|
the API changes section for how to deal with this.
|
|
|
|
|
|
|
|
|
|
- cairo_set_alpha
|
|
|
|
|
|
|
|
|
|
Alpha blending hasn't gone away; there's just a much more
|
|
|
|
|
unified rendering model now. Almost all uses of
|
|
|
|
|
cairo_set_alpha will be trivially replaced with
|
|
|
|
|
cairo_set_source_rgba and a few others will be replaced just
|
|
|
|
|
as easily with cairo_paint_with_alpha.
|
|
|
|
|
|
|
|
|
|
- cairo_show_surface
|
|
|
|
|
|
|
|
|
|
Another useful function that we realized was muddling up the
|
|
|
|
|
rendering model. The replacement is quite easy:
|
|
|
|
|
cairo_set_source_surface and cairo_paint.
|
|
|
|
|
|
|
|
|
|
- cairo_matrix_create
|
|
|
|
|
- cairo_matrix_destroy
|
|
|
|
|
- cairo_matrix_copy
|
|
|
|
|
- cairo_matrix_get_affine
|
|
|
|
|
|
|
|
|
|
These functions supported an opaque cairo_matrix_t. We now
|
|
|
|
|
have an exposed cairo_matrix_t structure, so these can be
|
|
|
|
|
dropped.
|
|
|
|
|
|
|
|
|
|
- cairo_surface_set_repeat
|
|
|
|
|
- cairo_surface_set_matrix
|
|
|
|
|
- cairo_surface_set_filter
|
|
|
|
|
|
|
|
|
|
These properties don't belong on surfaces. If you were using
|
|
|
|
|
them, you'll just want to instead use
|
|
|
|
|
cairo_pattern_create_for_surface and then set these properties
|
|
|
|
|
on the pattern.
|
|
|
|
|
|
|
|
|
|
- cairo_copy
|
|
|
|
|
|
|
|
|
|
This was a confusing function and hopefully nobody will miss
|
|
|
|
|
it. But if you really don't find cairo_save/restore adequate,
|
|
|
|
|
let us know and we have another idea for a potential
|
|
|
|
|
replacement.
|
|
|
|
|
|
|
|
|
|
And while we're on the subject of removals, we carefully tightened up
|
|
|
|
|
the cairo header files so they no longer gratuitously include header
|
|
|
|
|
files that are not strictly necessary, (stdio.h, stdint.h, pixman.h,
|
|
|
|
|
Xrender.h, etc. and their dependencies). This may lead to some
|
|
|
|
|
surprising errors, so keep your eyes open for that.
|
|
|
|
|
|
|
|
|
|
API changes
|
|
|
|
|
===========
|
|
|
|
|
Here are some of the API changes that have occurred:
|
|
|
|
|
|
|
|
|
|
~ cairo_create(void) -> cairo_create(cairo_surface_t *)
|
|
|
|
|
|
|
|
|
|
This is the big change that breaks every program. The ability
|
|
|
|
|
to re-target a cairo_t was not particularly useful, but it did
|
|
|
|
|
introduce a lot of muddy semantic questions. To eliminate
|
|
|
|
|
that, cairo_create now requires its target surface to be
|
|
|
|
|
passed in at creation time. This isn't too hard to cope with
|
|
|
|
|
as the typical first operation after cairo_create was often
|
|
|
|
|
cairo_set_target_foo. So the order of those two swap and the
|
|
|
|
|
application instead has cairo_foo_surface_create, then
|
|
|
|
|
cairo_create.
|
|
|
|
|
|
|
|
|
|
~ cairo_current_* -> cairo_get_*
|
|
|
|
|
|
|
|
|
|
We had a strange mixture of cairo_get and cairo_current
|
|
|
|
|
functions. They've all been standardized on cairo_get, (though
|
|
|
|
|
note one is cairo_get_current_point).
|
|
|
|
|
|
|
|
|
|
~ CAIRO_OPERATOR_SRC -> CAIRO_OPERATOR_SOURCE
|
|
|
|
|
~ CAIRO_OPERATOR_OVER_REVERSE -> CAIRO_OPERATOR_DEST_OVER
|
|
|
|
|
|
|
|
|
|
Many of the cairo_operator_t symbolic values were renamed to
|
|
|
|
|
reduce the amount of abbreviation. The confusing "OP_REVERSE"
|
|
|
|
|
naming was also changed to use "DEST_OP" instead which is
|
|
|
|
|
easier to read and has wider acceptance in other
|
|
|
|
|
libraries/languages.
|
|
|
|
|
|
|
|
|
|
~ cairo_set_pattern -> cairo_set_source
|
|
|
|
|
~ cairo_set_rgb_color -> cairo_set_source_rgb
|
|
|
|
|
|
|
|
|
|
All of the various functions that changed the source
|
|
|
|
|
color/pattern were unified to use cairo_set_source names to
|
|
|
|
|
make the relation more clear.
|
|
|
|
|
|
|
|
|
|
~ cairo_transform_point -> cairo_user_to_device
|
|
|
|
|
~ cairo_transform_distance -> cairo_user_to_device_distance
|
|
|
|
|
~ cairo_inverse_transform_point -> cairo_device_to_user
|
|
|
|
|
~ cairo_inverse_transform_distance -> cairo_device_to_user_distance
|
|
|
|
|
|
|
|
|
|
These names just seemed a lot more clear.
|
|
|
|
|
|
|
|
|
|
~ cairo_init_clip -> cairo_reset_clip
|
|
|
|
|
~ cairo_concat_matrix -> cairo_transform
|
|
|
|
|
|
|
|
|
|
More abbreviation elimination
|
|
|
|
|
|
|
|
|
|
~ cairo_current_path -> cairo_copy_path
|
|
|
|
|
~ cairo_current_path_flat -> cairo_copy_path_flat
|
|
|
|
|
|
|
|
|
|
The former mechanism for examining the current path was a
|
|
|
|
|
function that required 3 or 4 callbacks. This was more
|
|
|
|
|
complexity than warranted in most situations. The new
|
|
|
|
|
cairo_copy_path function copies the current path into an
|
|
|
|
|
exposed data structure, and the documentation provides a
|
|
|
|
|
convenient idiom for navigating the path data.
|
|
|
|
|
|
|
|
|
|
API additions
|
|
|
|
|
-------------
|
|
|
|
|
+ cairo_paint
|
|
|
|
|
|
|
|
|
|
A generalized version of the painting operators cairo_stroke
|
|
|
|
|
and cairo_fill. The cairo_paint call applies the source paint
|
|
|
|
|
everywhere within the current clip region. Very useful for
|
|
|
|
|
clearing a surface to a solid color, or painting an image,
|
|
|
|
|
(see cairo_set_source_surface).
|
|
|
|
|
|
|
|
|
|
+ cairo_paint_with_alpha
|
|
|
|
|
|
|
|
|
|
Like cairo_paint but applying some alpha to the source,
|
|
|
|
|
(making the source paint translucent, eg. to blend an image on
|
|
|
|
|
top of another).
|
|
|
|
|
|
|
|
|
|
+ cairo_mask
|
|
|
|
|
|
|
|
|
|
A more generalized version of cairo_paint_with_alpha which
|
|
|
|
|
allows a pattern to specify the amount of translucence at each
|
|
|
|
|
point rather than using a constant value everywhere.
|
|
|
|
|
|
|
|
|
|
+ cairo_mask_surface
|
|
|
|
|
|
|
|
|
|
A convenience function on cairo_mask for when the mask pattern
|
|
|
|
|
is already contained within a surface.
|
|
|
|
|
|
|
|
|
|
+ cairo_surface_set_user_data
|
|
|
|
|
+ cairo_surface_get_user_data
|
|
|
|
|
+ cairo_font_face_set_user_data
|
|
|
|
|
+ cairo_font_face_get_user_data
|
|
|
|
|
|
|
|
|
|
Associate arbitrary data with a surface or font face for later
|
|
|
|
|
retrieval. Get notified when a surface or font face object is
|
|
|
|
|
destroyed.
|
|
|
|
|
|
|
|
|
|
+ cairo_surface_finish
|
|
|
|
|
|
|
|
|
|
Allows the user to instruct cairo to finish all of its
|
|
|
|
|
operations for a given surface. This provides a safe point for
|
|
|
|
|
doing things such as flushing and closing files that the
|
|
|
|
|
surface may have had open for writing.
|
|
|
|
|
|
|
|
|
|
+ cairo_fill_preserve
|
|
|
|
|
+ cairo_stroke_preserve
|
|
|
|
|
+ cairo_clip_preserve
|
|
|
|
|
|
|
|
|
|
One interesting change in cairo is that the path is no longer
|
|
|
|
|
part of the graphics state managed by
|
|
|
|
|
cairo_save/restore. This allows functions to construct paths
|
|
|
|
|
without interfering with the graphics state. But it prevents
|
|
|
|
|
the traditional idiom for fill-and-stroke:
|
|
|
|
|
|
|
|
|
|
cairo_save; cairo_fill; cairo_restore; cairo_stroke
|
|
|
|
|
|
|
|
|
|
Instead we know have alternate versions cairo cairo_fill,
|
|
|
|
|
cairo_stroke, and cairo_clip that preserve the current path
|
|
|
|
|
rather than consuming it. So the idiom now becomes simply:
|
|
|
|
|
|
|
|
|
|
cairo_fill_preserve; cairo_stroke
|
|
|
|
|
|
|
|
|
|
+ cairo_surface_write_to_png
|
|
|
|
|
+ cairo_surface_write_to_png_stream
|
|
|
|
|
|
|
|
|
|
In place of a single PNG backend, now a surface created
|
|
|
|
|
through any backend (except PDF currently) can be written out
|
|
|
|
|
to a PNG image.
|
|
|
|
|
|
|
|
|
|
+ cairo_image_surface_create_from_png
|
|
|
|
|
+ cairo_image_surface_create_from_png_stream
|
|
|
|
|
|
|
|
|
|
And its just as easy to load a PNG image into a surface as well.
|
|
|
|
|
|
|
|
|
|
+ cairo_append_path
|
|
|
|
|
|
|
|
|
|
With the new, exposed path data structure, it's now possible
|
|
|
|
|
to append bulk path data to the current path, (rather than
|
|
|
|
|
issuing a long sequence of cairo_move_to/line_to/curve_to
|
|
|
|
|
function calls).
|
|
|
|
|
|
|
|
|
|
Xlib and XCB backends
|
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
|
|
Any cairo_format_t and Colormap arguments have been dropped from
|
|
|
|
|
cairo_xlib_surface_create. There are also two new
|
|
|
|
|
cairo_xlib|xcb_surface_create functions:
|
|
|
|
|
|
|
|
|
|
cairo_xlib|xcb_surface_create_for_bitmap
|
|
|
|
|
(Particular for creating A1 surfaces)
|
|
|
|
|
cairo_xlib|xcb_surface_create_with_xrender_format
|
|
|
|
|
(For any other surface types, not described by a Visual*)
|
|
|
|
|
|
|
|
|
|
All of these surface create functions now accept width and height. In
|
|
|
|
|
addition, there are new cairo_xlib|xcb_surface_set_size functions
|
|
|
|
|
which must be called each time a window that is underlying a surface
|
|
|
|
|
changes size.
|
|
|
|
|
|
|
|
|
|
Print backends (PS and PDF)
|
|
|
|
|
---------------------------
|
|
|
|
|
The old FILE* based interfaces have been eliminated. In their place we
|
|
|
|
|
have two different functions. One accepts a simple const char
|
|
|
|
|
*filename. The other is a more general function which accepts a
|
|
|
|
|
callback write function and a void* closure. This should allow the
|
|
|
|
|
flexibility needed to hook up with various stream object in many
|
|
|
|
|
languages.
|
|
|
|
|
|
|
|
|
|
In addition, when specifying the surface size during construction, the
|
|
|
|
|
units are now device-space units (ie. points) rather than inches. This
|
|
|
|
|
provides consistency with all the other surface types and also makes
|
|
|
|
|
it much easier to reason about the size of the surface when drawing to
|
|
|
|
|
it with the default identity matrix.
|
|
|
|
|
|
|
|
|
|
Finally, the DPI parameters, which are only needed to control the
|
|
|
|
|
quality of fallbacks, have been made optional. Nothing is required
|
|
|
|
|
during surface_create (300 DPI is assumed) and
|
|
|
|
|
cairo_ps|pdf_surface_set_dpi can be used to set alternate values if
|
|
|
|
|
needed.
|
|
|
|
|
|
|
|
|
|
Font system
|
|
|
|
|
-----------
|
|
|
|
|
Owen very graciously listened to feedback after the big font rework he
|
|
|
|
|
had done for 0.4, and came up with way to improve it even more. In 0.4
|
|
|
|
|
there was a cairo_font_t that was always pre-scaled. Now, there is an
|
|
|
|
|
unscaled cairo_font_face_t which is easier to construct, (eg. no
|
|
|
|
|
scaling matrix required) and work with, (it can be scaled and
|
|
|
|
|
transformed after being set on the graphics state). And the font size
|
|
|
|
|
manipulation functions are much easier. You can set an explicit size
|
|
|
|
|
and read/modify/write the font matrix with:
|
|
|
|
|
|
|
|
|
|
cairo_set_font_size
|
|
|
|
|
cairo_get_font_matrix
|
|
|
|
|
cairo_set_font_matrix
|
|
|
|
|
|
|
|
|
|
(Previously you could only multiply in a scale factor or a matrix.) A
|
|
|
|
|
pleasant side effect is that we can (and do) now have a default font
|
|
|
|
|
size that is reasonable, as opposed to the old default height of one
|
|
|
|
|
device-space unit which was useless until scaled.
|
|
|
|
|
|
|
|
|
|
Of course, the old pre-scaled font had allowed some performance
|
|
|
|
|
benefits when getting many metrics for a font. Those benefits are
|
|
|
|
|
still made available through the new cairo_scaled_font_t. And a
|
|
|
|
|
cairo_font_face_t can be "promoted" to a cairo_scaled_font_t by
|
|
|
|
|
suppling a font_matrix and the desired CTM.
|
|
|
|
|
|
|
|
|
|
Quartz backend
|
|
|
|
|
--------------
|
|
|
|
|
Tim Rowley put in the work to bring the Quartz backend back after it
|
|
|
|
|
had been disabled in the 0.4.0 snapshot. He was not able to bring back
|
|
|
|
|
the function that allows one to create a cairo_font_t from an ATSUI
|
|
|
|
|
style:
|
|
|
|
|
|
|
|
|
|
cairo_font_t *
|
|
|
|
|
cairo_atsui_font_create (ATSUStyle style);
|
|
|
|
|
|
|
|
|
|
because he didn't have a test case for it. If you care about this
|
|
|
|
|
function, please provide a fairly minimal test and we'll try to bring
|
|
|
|
|
it back in an upcoming snapshot.
|
|
|
|
|
|
2005-03-08 17:36:24 +00:00
|
|
|
Snapshot 0.4.0 (2005-03-08 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
New documentation
|
|
|
|
|
-----------------
|
|
|
|
|
Owen Taylor has converted cairo's documentation system to gtk-doc and
|
|
|
|
|
has begun some long-needed work on the documentation, which can now be
|
|
|
|
|
viewed online here:
|
|
|
|
|
|
|
|
|
|
http://cairographics.org/manual/
|
|
|
|
|
|
|
|
|
|
New backend: win32
|
|
|
|
|
------------------
|
|
|
|
|
This is the first snapshot to include a functional win32 backend,
|
|
|
|
|
(thanks to Owen Taylor). The interface is as follows:
|
|
|
|
|
|
|
|
|
|
#include <cairo-win32.h>
|
|
|
|
|
|
2007-03-06 01:09:02 -08:00
|
|
|
void
|
2005-03-08 17:36:24 +00:00
|
|
|
cairo_set_target_win32 (cairo_t *cr,
|
|
|
|
|
HDC hdc);
|
|
|
|
|
|
|
|
|
|
cairo_surface_t *
|
|
|
|
|
cairo_win32_surface_create (HDC hdc);
|
|
|
|
|
|
|
|
|
|
cairo_font_t *
|
|
|
|
|
cairo_win32_font_create_for_logfontw (LOGFONTW *logfont,
|
|
|
|
|
cairo_matrix_t *scale);
|
|
|
|
|
|
|
|
|
|
cairo_status_t
|
|
|
|
|
cairo_win32_font_select_font (cairo_font_t *font,
|
|
|
|
|
HDC hdc);
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
cairo_win32_font_done_font (cairo_font_t *font);
|
|
|
|
|
|
|
|
|
|
double
|
|
|
|
|
cairo_win32_font_get_scale_factor (cairo_font_t *font);
|
2005-03-08 19:25:39 +00:00
|
|
|
|
|
|
|
|
And see also the documentation at:
|
|
|
|
|
|
|
|
|
|
http://cairographics.org/manual/cairo-Microsoft-Windows-Backend.html
|
2005-03-08 17:36:24 +00:00
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
2005-01-21 12:48:11 +00:00
|
|
|
Snapshot 0.3.0 (2005-01-21 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
==========================================================
|
|
|
|
|
Major API changes
|
|
|
|
|
-----------------
|
|
|
|
|
1) The public header files will no longer be directly installed into
|
|
|
|
|
the system include directory. They will now be installed in a
|
|
|
|
|
subdirectory named "cairo", (eg. in /usr/include/cairo rather than
|
|
|
|
|
in /usr/include).
|
|
|
|
|
|
|
|
|
|
As always, the easiest way for applications to discover the
|
|
|
|
|
location of the header file is to let pkg-config generate the
|
|
|
|
|
necessary -I CFLAGS and -L/-l LDFLAGS. For example:
|
|
|
|
|
|
|
|
|
|
cc `pkg-config --cflags --libs cairo` -o foo foo.c
|
|
|
|
|
|
|
|
|
|
IMPORTANT: Users with old versions of cairo installed will need to
|
|
|
|
|
manually remove cairo.h and cairo-features.h from the
|
|
|
|
|
system include directories in order to prevent the old
|
|
|
|
|
headers from being used in preference to the new ones.
|
|
|
|
|
|
|
|
|
|
2) The backend-specific portions of the old monolithic cairo.h have
|
|
|
|
|
been split out into individual public header files. The new files
|
|
|
|
|
are:
|
|
|
|
|
|
|
|
|
|
cairo-atsui.h
|
|
|
|
|
cairo-ft.h
|
|
|
|
|
cairo-glitz.h
|
|
|
|
|
cairo-pdf.h
|
|
|
|
|
cairo-png.h
|
|
|
|
|
cairo-ps.h
|
|
|
|
|
cairo-quartz.h
|
|
|
|
|
cairo-xcb.h
|
|
|
|
|
cairo-xlib.h
|
|
|
|
|
|
|
|
|
|
Applications will need to be modified to explicitly include the new
|
|
|
|
|
header files where appropriate.
|
|
|
|
|
|
|
|
|
|
3) There are two new graphics backends in this snapshot, a PDF
|
|
|
|
|
backend, and a Quartz backend. There is also one new font backend,
|
|
|
|
|
ATSUI.
|
|
|
|
|
|
|
|
|
|
PDF backend
|
|
|
|
|
-----------
|
|
|
|
|
Kristian Høgsberg has contributed a new backend to allow cairo-based
|
|
|
|
|
applications to generate PDF output. The interface for creating a PDF
|
|
|
|
|
surface is similar to that of the PS backend, as can be seen in
|
|
|
|
|
cairo-pdf.h:
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
cairo_set_target_pdf (cairo_t *cr,
|
|
|
|
|
FILE *file,
|
|
|
|
|
double width_inches,
|
|
|
|
|
double height_inches,
|
|
|
|
|
double x_pixels_per_inch,
|
|
|
|
|
double y_pixels_per_inch);
|
|
|
|
|
|
|
|
|
|
cairo_surface_t *
|
|
|
|
|
cairo_pdf_surface_create (FILE *file,
|
|
|
|
|
double width_inches,
|
|
|
|
|
double height_inches,
|
|
|
|
|
double x_pixels_per_inch,
|
|
|
|
|
double y_pixels_per_inch);
|
|
|
|
|
|
|
|
|
|
Once a PDF surface has been created, applications can draw to it as
|
|
|
|
|
any other cairo surface.
|
|
|
|
|
|
|
|
|
|
This code is still a bit rough around the edges, and does not yet
|
|
|
|
|
support clipping, surface patterns, or transparent gradients. Text
|
|
|
|
|
only works with TrueType fonts at this point and only black text is
|
|
|
|
|
supported. Also, the size of the generated PDF files is currently
|
|
|
|
|
quite big.
|
|
|
|
|
|
|
|
|
|
Kristian is still actively developing this backend, so watch this
|
|
|
|
|
space for future progress.
|
|
|
|
|
|
|
|
|
|
Quartz backend
|
|
|
|
|
--------------
|
|
|
|
|
Calum Robinson has contributed a new backend to allow cairo
|
|
|
|
|
applications to target native Mac OS X windows through the Quartz
|
|
|
|
|
API. Geoff Norton integrated this backend into the current
|
|
|
|
|
configure-based build system, while Calum also provided Xcode build
|
|
|
|
|
support in the separate "macosx" module available in CVS.
|
|
|
|
|
|
|
|
|
|
The new interface, available in cairo-quartz.h, is as follows:
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
cairo_set_target_quartz_context (cairo_t *cr,
|
|
|
|
|
CGContextRef context,
|
|
|
|
|
int width,
|
|
|
|
|
int height);
|
|
|
|
|
|
|
|
|
|
cairo_surface_t *
|
|
|
|
|
cairo_quartz_surface_create (CGContextRef context,
|
|
|
|
|
int width,
|
|
|
|
|
int height);
|
|
|
|
|
|
|
|
|
|
There is an example program available in CVS in cairo-demo/quartz. It
|
|
|
|
|
is a port of Keith Packard's fdclock program originally written for
|
|
|
|
|
the xlib backend. A screenshot of this program running on Mac OS X is
|
|
|
|
|
available here:
|
|
|
|
|
|
|
|
|
|
http://cairographics.org/~cworth/images/fdclock-quartz.png
|
|
|
|
|
|
|
|
|
|
ATSUI font backend
|
|
|
|
|
------------------
|
|
|
|
|
This new font backend complements the Quartz backend by allowing
|
|
|
|
|
applications to use native font selection on Mac OS X. The interface
|
|
|
|
|
is a single new function:
|
|
|
|
|
|
|
|
|
|
cairo_font_t *
|
|
|
|
|
cairo_atsui_font_create (ATSUStyle style);
|
|
|
|
|
|
|
|
|
|
Minor API changes
|
|
|
|
|
-----------------
|
|
|
|
|
Prototype for non-existent function "cairo_ft_font_destroy" removed.
|
|
|
|
|
|
|
|
|
|
Now depends on libpixman 0.1.2 or newer, (0.1.3 is being released
|
|
|
|
|
concurrently and has some useful performance improvements).
|
|
|
|
|
|
|
|
|
|
Default paint color is now opaque black, (was opaque white). Default
|
|
|
|
|
background color is transparent (as before).
|
|
|
|
|
|
|
|
|
|
Renamed "struct cairo" to "struct _cairo" to free up the word "cairo"
|
|
|
|
|
from the C++ identifier name space.
|
|
|
|
|
|
|
|
|
|
Functions returning multiple return values through provided pointers,
|
|
|
|
|
(cairo_matrix_get_affine, cairo_current_point, and
|
|
|
|
|
cairo_current_color_rgb), will now accept NULL for values the user
|
|
|
|
|
wants to ignore.
|
|
|
|
|
|
|
|
|
|
CAIRO_HAS_FREETYPE_FONT has now been renamed to CAIRO_HAS_FT_FONT.
|
|
|
|
|
|
|
|
|
|
Performance improvements
|
|
|
|
|
------------------------
|
|
|
|
|
Alexander Larsson provided some fantastic performance improvements
|
|
|
|
|
yielding a 10000% performance improvement in his application, (when
|
|
|
|
|
also including his performance work in libpixman-0.1.3). These include
|
|
|
|
|
|
|
|
|
|
* Fixed handling of cache misses.
|
|
|
|
|
|
|
|
|
|
* Creating intermediate clip surfaces at the minimal size required.
|
|
|
|
|
|
|
|
|
|
* Eliminating roundtrips when creating intermediate Xlib surfaces.
|
|
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
|
--------------
|
|
|
|
|
Major re-work of font metrics system by Keith Packard. Font metrics
|
|
|
|
|
should now be much more reliable.
|
|
|
|
|
|
|
|
|
|
Glitz backend
|
|
|
|
|
-------------
|
|
|
|
|
Updated for glitz-0.3.0.
|
|
|
|
|
Bug fixes in reference counting.
|
|
|
|
|
|
|
|
|
|
Test suite
|
|
|
|
|
----------
|
|
|
|
|
New tests for cache crashing, rotating text, improper filling of
|
|
|
|
|
complex polygons, and leaky rasterization.
|
|
|
|
|
|
|
|
|
|
Bug fixes
|
|
|
|
|
---------
|
|
|
|
|
Fixed assertion failure when selecting the same font multiple times in
|
|
|
|
|
sequence.
|
|
|
|
|
|
|
|
|
|
Fixed reference counting so cache_destroy functions work.
|
|
|
|
|
|
|
|
|
|
Remove unintended copyright statement from files generated with
|
|
|
|
|
PostScript backend.
|
|
|
|
|
|
|
|
|
|
Fixed to eliminate new warnings from gcc 3.4 and gcc 4.
|
|
|
|
|
|
2004-10-27 13:13:39 +00:00
|
|
|
Snapshot 0.2.0 (2004-10-27 Carl Worth <cworth@cworth.org>)
|
|
|
|
|
===========================================================
|
|
|
|
|
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.
|
|
|
|
|
|
2004-10-27 13:19:39 +00:00
|
|
|
Revert some tessellation regression bugs
|
|
|
|
|
----------------------------------------
|
|
|
|
|
People that have been seeing some tessellation bugs, (eg. leaked
|
|
|
|
|
fills), in the CVS version of cairo may have better luck with this
|
|
|
|
|
release. A change since the last snapshot was identified to trigger
|
|
|
|
|
some of these bugs and was reverted before making the snapshot. The
|
|
|
|
|
behavior should be the same as the previous (0.1.23) snapshot.
|
|
|
|
|
|
2004-10-27 13:13:39 +00:00
|
|
|
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.
|
2004-05-24 02:28:05 +00:00
|
|
|
|
2004-05-11 08:19:47 +00:00
|
|
|
Snapshot 0.1.23 (2004-05-11 Carl Worth <cworth@isi.edu>)
|
|
|
|
|
========================================================
|
|
|
|
|
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.
|
|
|
|
|
|
2004-04-16 08:56:45 +00:00
|
|
|
Snapshot 0.1.22 (2004-04-16 Carl Worth <cworth@isi.edu>)
|
|
|
|
|
========================================================
|
|
|
|
|
Cairo was updated to track the changes in libpixman, and now depends
|
|
|
|
|
on libpixman version 0.1.1.
|
|
|
|
|
|
2004-04-09 14:30:38 +00:00
|
|
|
Snapshot 0.1.21 (2004-04-09 David Reveman <c99drn@cs.umu.se>)
|
|
|
|
|
=============================================================
|
|
|
|
|
New OpenGL backend
|
|
|
|
|
------------------
|
|
|
|
|
The OpenGL backend provides hardware accelerated output for
|
|
|
|
|
X11 and OS X. The significant new functions are:
|
|
|
|
|
|
|
|
|
|
cairo_set_target_gl
|
|
|
|
|
cairo_gl_surface_create
|
|
|
|
|
|
|
|
|
|
Automatic detection of available backends
|
|
|
|
|
-----------------------------------------
|
|
|
|
|
The configure script now automatically detect what backends are
|
|
|
|
|
available, (use ./configure --disable-`backend' to prevent
|
|
|
|
|
compilation of specific backends).
|
|
|
|
|
|
2004-04-06 20:13:11 +00:00
|
|
|
Snapshot 0.1.20 (2004-04-06 Carl Worth <cworth@isi.edu>)
|
|
|
|
|
========================================================
|
|
|
|
|
New pattern API
|
|
|
|
|
---------------
|
|
|
|
|
David Reveman has contributed a new pattern API which enable linear
|
|
|
|
|
and radial gradient patterns in addition to the original surface-based
|
|
|
|
|
patterns. The significant new top-level functions are:
|
|
|
|
|
|
|
|
|
|
cairo_pattern_create_linear
|
|
|
|
|
cairo_pattern_create_radial
|
|
|
|
|
cairo_pattern_create_for_surface
|
|
|
|
|
cairo_pattern_add_color_stop
|
|
|
|
|
cairo_set_pattern
|
|
|
|
|
|
|
|
|
|
Any code using the old cairo_set_pattern, (which accepted a
|
|
|
|
|
cairo_surface_t rather than a cairo_pattern_t), will need to be
|
|
|
|
|
updated.
|
|
|
|
|
|
|
|
|
|
Update to XCB backend
|
|
|
|
|
---------------------
|
|
|
|
|
The XCB backend is now enabled by default, (use ./configure
|
|
|
|
|
--disable-xcb to turn it off).
|
|
|
|
|
|
|
|
|
|
Faster clipping
|
|
|
|
|
---------------
|
|
|
|
|
Graydon Hoare has added optimizations that make cairo_clip much faster
|
|
|
|
|
when the path is a pixel-aligned, rectangular region.
|
|
|
|
|
|
|
|
|
|
Bug fixes.
|
|
|
|
|
|
|
|
|
|
Snapshot 0.1.19 (2004-02-24 Carl Worth <cworth@isi.edu>)
|
|
|
|
|
========================================================
|
|
|
|
|
New PNG backend
|
|
|
|
|
---------------
|
|
|
|
|
Olivier Andrieu contributed a new PNG backend. It builds on the
|
|
|
|
|
existing image backend to make it easy to render "directly" to a
|
|
|
|
|
.png file. The user never needs to deal with the actual image
|
|
|
|
|
buffer. The significant new functions are:
|
|
|
|
|
|
|
|
|
|
cairo_set_target_png
|
|
|
|
|
cairo_png_surface_create
|
|
|
|
|
|
|
|
|
|
The PNG backend is not enabled by default so that by default there is
|
|
|
|
|
not a new dependency on libpng. Use ./configure --enable-png to enable
|
|
|
|
|
this backend.
|
|
|
|
|
|
|
|
|
|
Snapshot 0.1.18 (2004-02-17 Carl Worth <cworth@isi.edu>)
|
|
|
|
|
========================================================
|
|
|
|
|
Path query functionality
|
|
|
|
|
------------------------
|
|
|
|
|
It's now possible to query the current path. The two new functions
|
|
|
|
|
are:
|
|
|
|
|
|
|
|
|
|
cairo_current_path
|
|
|
|
|
cairo_current_path_flat
|
|
|
|
|
|
|
|
|
|
Each function accepts a number of callback functions that will be
|
|
|
|
|
called for each element in the path (move_to, line_to, curve_to,
|
|
|
|
|
close_path). The cairo_current_path_flat function does not accept a
|
|
|
|
|
curve_to callback. Instead, all curved portions of the path will be
|
|
|
|
|
converted to line segments, (within the current tolerance value). This
|
|
|
|
|
can be handy for doing things like text-on-path without having to
|
2005-08-13 05:00:20 +00:00
|
|
|
manually interpolate Bézier splines.
|
2004-04-06 20:13:11 +00:00
|
|
|
|
|
|
|
|
New XCB backend
|
|
|
|
|
---------------
|
|
|
|
|
Jamey Sharp has contributed a second X backend that uses the new, lean
|
|
|
|
|
XCB library rather than Xlib. It cannot currently be compiled at the
|
|
|
|
|
same time as the Xlib backend. See ./configure --enable-xcb.
|
|
|
|
|
|
|
|
|
|
Build fixes for cygwin.
|
|
|
|
|
|
|
|
|
|
Bug fixes.
|
|
|
|
|
|
|
|
|
|
Snapshot 0.1.17 (2003-12-16 Carl Worth <cworth@isi.edu>)
|
|
|
|
|
========================================================
|
2003-12-16 08:27:17 +00:00
|
|
|
|
|
|
|
|
Better text support
|
|
|
|
|
-------------------
|
2003-12-16 08:06:49 +00:00
|
|
|
This snapshot provides much better text support by implementing the
|
|
|
|
|
following four functions:
|
|
|
|
|
|
2003-12-16 08:27:17 +00:00
|
|
|
cairo_text_extents
|
|
|
|
|
cairo_glyph_extents
|
|
|
|
|
cairo_text_path
|
|
|
|
|
cairo_glyph_path
|
2003-12-16 08:06:49 +00:00
|
|
|
|
|
|
|
|
The text/glyph_extents functions can be used to determine the bounding
|
|
|
|
|
box (and advance) for text as if drawn by show_text/glyphs.
|
|
|
|
|
|
|
|
|
|
The text/glyph_path objects functions place text shapes on the current
|
|
|
|
|
path, where they can be subsequently manipulated. For example,
|
|
|
|
|
following these functions with cairo_stroke allows outline text to be
|
|
|
|
|
drawn. Calling cairo_clip allows clipping to a text-shaped region.
|
|
|
|
|
|
2003-12-16 08:27:17 +00:00
|
|
|
Combined dependencies
|
|
|
|
|
---------------------
|
2003-12-16 08:29:01 +00:00
|
|
|
The cairo core now depends only on the libpixman library. This single
|
2003-12-16 08:27:17 +00:00
|
|
|
library replaces the three previous libraries libic, libpixregion, and
|
|
|
|
|
slim. Thanks to Dave Beckett <dave.beckett@bristol.ac.uk> for all of
|
|
|
|
|
the heavy lifting with this renaming effort.
|
|
|
|
|
|
|
|
|
|
Conditional compilation of backends
|
|
|
|
|
-----------------------------------
|
2004-10-27 13:13:39 +00:00
|
|
|
Cairo now allows optional backends to be disabled at compile time. The
|
2003-12-16 08:27:17 +00:00
|
|
|
following options may now be passed to the configure script:
|
|
|
|
|
|
|
|
|
|
--disable-xlib
|
|
|
|
|
--disable-ps
|
|
|
|
|
|
|
|
|
|
Note that the first option is a change from the old --without-x option
|
|
|
|
|
which will no longer have any effect.
|
|
|
|
|
|
|
|
|
|
OS X supported - several byte-order issues resolved
|
|
|
|
|
---------------------------------------------------
|
|
|
|
|
Cairo has now been successfully compiled under OS X. Testing revealed
|
|
|
|
|
that there were some byte-order problems in the PostScript backend and
|
|
|
|
|
the PNG generation in the demos. These have now been resolved.
|
2004-02-24 10:45:26 +00:00
|
|
|
|
|
|
|
|
2003-10
|
|
|
|
|
=======
|
|
|
|
|
Graydon Hoare <graydon@redhat.com> implemented the first real text
|
|
|
|
|
support using Freetype/fontconfig, (previous versions of cairo used
|
|
|
|
|
Xft and could only draw text when using an X backend).
|
|
|
|
|
|
|
|
|
|
2003-09
|
|
|
|
|
=======
|
|
|
|
|
Graydon Hoare <graydon@redhat.com> added the first real support for
|
|
|
|
|
running cairo with a non-render-aware X server.
|
|
|
|
|
|
|
|
|
|
Jamey Sharp <jamey@minilop.net> virtualized the backend font and
|
|
|
|
|
surface interfaces in September, 2003.
|
|
|
|
|
|
|
|
|
|
2003-06
|
|
|
|
|
=======
|
|
|
|
|
Xr is renamed cairo to avoid confusion since it no longer had a strict
|
|
|
|
|
dependence on X.
|
|
|
|
|
|
|
|
|
|
2003-05
|
|
|
|
|
=======
|
|
|
|
|
A new image surface backend is added to Xr. Keith Packard
|
|
|
|
|
<keithp@keithp.com> wrote the image compositing code in libic that is
|
|
|
|
|
used for the image_surface backend. This code was originally written
|
|
|
|
|
as the software fallback for the render extension within the X
|
|
|
|
|
server.
|
|
|
|
|
|
|
|
|
|
2002-06
|
|
|
|
|
=======
|
|
|
|
|
Carl Worth <cworth@isi.edu> wrote the first lines of Xr, after Keith
|
|
|
|
|
Packard <keithp@keithp.com> proposed the plan for a stateful drawing
|
|
|
|
|
library in C providing a PostScript-like rendering model.
|