1 Release 1.18.2 (2024-09-01 Emmanuele Bassi <ebassi@gnome.org>)
2 ==============================================================
6 The malloc-stats code has been removed from the tests directory [#640]; the
7 canonical location for it is: https://github.com/behdad/malloc-stats
9 Cairo now requires a version of pixman equal to, or newer than, 0.40. [!522]
11 There have been multiple build fixes for newer versions of GCC [!525, !542];
12 for MSVC [#808]; for Solaris [!540]; and on macOS 10.7 [#810].
14 PNG errors caused by loading malformed data are correctly propagated to
15 callers, so they can handle the case. [!524]
17 Both stroke and fill colors are now set when showing glyphs on a PDF
20 All the font options are copied when creating a fallback font object. [#819]
22 When drawing text on macOS, Cairo now tries harder to select the appropriate
25 Cairo now prefers the COLRv1 table inside a font, if one is available. [!537]
27 Cairo requires a C11 toolchain when building. [!479]
29 Release 1.18.0 (2023-09-20 Emmanuele Bassi <ebassi@gnome.org>)
30 ==============================================================
32 The first stable cairo release in five years should be cause for celebration.
34 All the API added in the 1.17 development cycle is now considered stable, and
37 Many thanks to all the contributors for this release.
39 The cairo-sphinx tool has been removed; we could not find any instruction on
40 how to use it, and no user answered our call for help. If you were using
41 cairo-sphinx, please reach out to the cairo maintainers.
43 Cairo now implements Type 3 color fonts for PDF. Thanks to Adrian Johnson for
44 his work on this feature.
46 Khaled Hosny contributed multiple documentation fixes, to ensure that the
47 cairo API reference is up to date. Khaled also fixed multiple compiler
48 warnings generated when building cairo.
50 The XML surface has been removed; it was disabled by default when building
51 cairo, and we could not find any downstream distributor that would enable
54 The Tee surface is now automatically enabled. Downstream distributors of
55 cairo have been enabling for years it in order to build Firefox.
57 Fujii Hironori and Adrian Johnson fixed multiple issues with the DWrite
60 John Ralls improved the Quartz surface; mainly, Quartz surfaces now use
61 the main display ColorSpace, speeding up rendering operations.
63 Cairo now hides all private symbols by default on every platform; the old
64 "slim" symbols hack to alias internally used symbols has been dropped, in
65 favor of using `-Bsymbolic-functions` with toolchains that support it.
67 Uli Schlachter fixed multiple memory leaks in the code base and test suite,
68 and helped with many reviews and general maintenance.
70 Marc Jeanmougin added new API to expose the Pixman dithering filter to cairo
71 patterns; this is currently implemented only for image surfaces.
73 Release 1.17.8 (2023-01-30 Emmanuele Bassi <ebassi@gnome.org>)
74 ==============================================================
76 A new cairo snapshot! And it only took less than one year, this time!
78 Many thanks to everyone who contributed to cairo, and especially
79 to (in no particular order):
93 In a continuing effort to reduce the amount of legacy code, and increase
94 the long-term maintainability of cairo, the following backends have been
99 Additionally, cairo's Autotools build system has been removed; from now on,
100 cairo will only support the Meson build system. While the end result should
101 be identical, further testing is appreciated.
103 In this snapshot, cairo gained support for rendering COLRv1 fonts, and
104 rendering SVG and COLRv1 fonts with custom palettes.
106 Support for macOS and Windows has been improved, with lots of build and bug
109 Lots of safety issues have been fixed, with array bounds checking and
110 plugging memory leaks, as well as fixes for bugs identified via fuzzying.
112 This is going to be the last snapshot of the 1.17 development cycle; we only
113 expect minor bug fixing and improvements until the 1.18.0 release.
115 Release 1.17.6 (2022-03-18 Emmanuele Bassi <ebassi@gnome.org>)
116 ==============================================================
118 I spy with my little eye… a cairo snapshot!
120 First of all, many, many thanks to everyone who contributed to cairo
121 during this development cycle. A special thank you goes to:
126 for their tireless efforts in ensuring that the lights are still on
127 in the cairo project.
129 This snapshot sees the removal of the following backends and platform
140 Thanks to all past contributors for their work on them. If you were using
141 any of these backends then you will need to stick to cairo 1.16.
143 To offset the removal of the backends above, Adrian Johnson landed the
144 DWrite font rendering backend on Windows.
146 There have been multiple improvements in the Quartz backend, courtesy of
149 Tim-Philipp Müller has kept the Meson build in top shape.
151 This snapshot is going to be the **last** release of cairo with the
152 Autotools build system. The Meson build has seen many improvements and
153 it is considerably easier to maintain and faster to build.
155 Release 1.17.4 (2020-11-27 Bryce Harrington <bryce@bryceharrington.org>)
156 ========================================================================
158 Thank you to the many people who have contributed the large number of
159 bug fixes and refinements since 1.17.2.
161 A particularly noteworthy improvement in this release is the addition of
162 the meson build system as an alternative to autotools. Autotools is
163 still used for producing the releases, so will be the default in the
164 tarball and presumably will still be preferred by distro packagers of
165 Cairo. It should be possible to build the release tarball using meson,
166 but as this is new functionality consider it still a work in progress.
167 The meson configuration has striven to track the autotools
168 implementation but be aware there may still be some differences between
171 Continuous Integration configurations have been added that enable
172 testing on a variety of platforms including Fedora, Windows MSVC, etc.
173 This work has helped in identifying updates and fixes including
174 adjusting to changes in API calls in dependencies like rsvg and
175 fontconfig, and to fix platform-specific build issues.
177 The cogl Cairo backend underwent significant development this cycle.
178 Cogl provides GPU accelerated drawing support. The development work
179 includes implementation of core functionality, performance
180 optimizations, and stabilization.
182 Subpixel positioning support allows improved glyph outlines with the
183 FreeType font backend.
185 For a complete log of changes, please see
187 https://cairographics.org/releases/ChangeLog.1.17.4
189 [On a personal note, this will be my last release for Cairo. My Cairo
190 time availability has been non-existent (particularly this crazy past
191 year). The release process is well documented and hopefully will help
192 whomever picks up the baton from here.]
195 Release 1.17.2 (2019-01-31 Bryce Harrington <bryce@bryceharrington.org>)
196 ========================================================================
197 This snapshot provides the new support for writing floating point
198 formats as 16 bpc PNGs, with support for RGBA128F and RGB96F formats.
199 This new feature increases Cairo's pixman version requirement to 0.36.0.
201 Beyond this are a range of bugfixes and some work on establishing CI for
204 For a complete log of changes, please see
206 https://cairographics.org/releases/ChangeLog.1.17.2
217 Release 1.16.0 (2018-10-19 Bryce Harrington <bryce@bryceharrington.org>)
218 ========================================================================
219 This new stable release incorporates a number of improvements made in
220 the four years since 1.14.0.
222 Of particular note is a wealth of work by Adrian Johnson to enhance PDF
223 functionality, including restoring support for MacOSX 10.4, metadata,
224 hyperlinks, and more.
226 Much attention also went into fonts, including new colored emoji glyph
227 support, variable fonts, and fixes for various font idiosyncrasies.
229 Other noteworthy changes include GLESv3 support for the cairo_gl
230 backend, tracking of SVG units in generated SVG documents, and cleanups
231 for numerous test failures and related issues in the PDF and Postscript
234 For a complete log of changes, please see
236 https://cairographics.org/releases/ChangeLog.1.16.0
238 Features and Enhancements
239 -------------------------
240 * Add support for OpenGL ES 3.0 to the gl backend.
241 * The PDF backend has gained support for a range of widely used
242 features, including thumbnails, page labels, metadata, document
243 outlines, structured text, hyperlinks, and tags. Tags permit adding
244 logical info such as headings, tables, figures, etc. that facilitates
245 indexing, accessibility, text reflow, searching, and extraction of the
246 tagged items to other software. For details on this new PDF
248 https://lists.cairographics.org/archives/cairo/2016-June/027427.html
249 * Variable font support. Variable fonts are single font files with
250 various typography characteristics, such as weight or slant, that users
251 of the font can adjust between two points. Effectively this enables a
252 single font to behave as multiple fonts.
253 * Restore MacOSX 10.4 support. Cairo had dropped 10.4 support when
254 moving to the CoreText API. Now we automatically detect which API to
255 use via dynamic linking, so can resume supporting this older version
257 * Support colored emoji glyphs, stored as PNG images in OpenType fonts.
258 * Skia backend is removed
259 * Use Reusable streams for forms in Level 3 Postscript.
260 * Add CAIRO_MIME_TYPE_EPS mime type for embedding EPS files.
261 * Add CCITT_FAX mime type for PDF and PS surfaces
262 * svg: add a new function to specify the SVG document unit
264 * Use UTF-8 filenames on Windows
269 Several new APIs were added. No existing APIs were altered.
271 New PDF functionality:
273 * cairo_pdf_surface_add_outline
274 * cairo_pdf_surface_set_metadata
275 * cairo_pdf_surface_set_page_label
276 * cairo_pdf_surface_set_thumbnail_size
279 * CAIRO_STATUS_TAG_ERROR
281 New error status items for problems relating to PDF tagging:
283 * CAIRO_STATUS_WIN32_GDI_ERROR
284 * CAIRO_STATUS_FREETYPE_ERROR
285 * CAIRO_STATUS_PNG_ERROR
287 New error status items for handling of GDI, libfreetype, and libpng
288 errors, respectively.
291 Setting up Win32 surfaces for HDC with alpha channels:
293 * cairo_win32_surface_create_with_format
295 New API for added PDF functionality (see above), and new error
296 status item for problems relating to PDF tagging.
300 * cairo_font_options_get_variations
301 * cairo_font_options_set_variations
303 Tracking units in SVG documents:
305 * cairo_svg_surface_set_document_unit
306 * cairo_svg_surface_get_document_unit
315 Performance Optimizations
316 -------------------------
322 * Fix thin lines that don't show up when printing in Inkscape due to
323 overly aggressive culling.
325 * Fix playback of recording surfaces into PDF surfaces, where objects
326 with negative coordinates were not getting drawn. To address this,
327 the coordinate systems for PDF and PS have been changed to match
328 cairo's coordinate system. This allows recording surfaces to be
329 emitted in cairo coordinates, and results in the same origin being
330 used for all operations when using the recording surface XObject.
331 Test cases for PDF and PS have also been updated accordingly.
333 * Fix "invalidfont" error on some printers when printing PDFs with
334 embedded fonts that have glyphs (such as spaces) with
335 num_contours == 0. (Bug #79897)
336 * Fix missing glyphs such as thin dashes, which get scaled to 0 in
337 userspace and thus have their drawing operations culled. (Bug #94615)
338 * Fix other oddities caused by variously idiosyncratic fonts.
339 * Fix a data race in freed_pool discovered by Firefox's cairo usage.
340 The patch adads atomic int load and store functions, with relaxed
341 memory ordering. (Bug #90318)
342 * Handle SOURCE and CLEAR operators when painting color glyphs.
344 * Fix falling back to system font with PDFs using certain embedded
345 fonts, due to truncated font names.
347 * Prevent curved strokes in small ctms from being culled from vector
350 * Fix assertion hit with PDFs using Type 4 fonts rendered with user
351 fonts, due to error when destroying glyph page.
353 * Prevent invalid ptr access for > 4GB images.
355 * pdf: Fix internal links pointing to other pages, by pre-calculating
356 page heights so that link positions can be calculated more accurately.
357 * Fix error reporting in the xcb backend if fallback fails. Instead of
358 returning NULL when the X11 server can't do some operation, return a
359 surface in an error state.
360 * Clarify documentation regarding device scale inheritance and the units
361 used in cairo_surface_create_similar_image.
363 * Call XSync in the xlib backend before setting the error handler to
364 ignore errors for certain requests, to make sure all pending errors
366 * Fix regression with text containing space character on Win32.
367 (Bug: https://gitlab.freedesktop.org/cairo/cairo/issues/339)
369 For a more comprehensive listing of fixed bugs, see the release notes for the
370 individual 1.15.x releases.
373 Release 1.15.14 (2018-09-19 Bryce Harrington <bryce@bryceharrington.org>)
374 ============================================================================
375 We're nearly ready to finalize the 1.16.0 release, so this snapshot
376 can be considered a beta for 1.16.
378 The most notable change this release is a performance optimization for
379 windows, discussed below. Other than that, much of the development
380 focus was on final polish and stability as we prepare for 1.16.
382 Some attention went into getting the testsuite passing at least for the
383 image backend. The Cairo testsuite depends on external software like
384 Pixman, and changes in the rendering behavior of these dependencies
385 change test behavior, leading to false positives.
387 Results from the Coverity static testing tool were also reviewed. Most
388 of the issues flagged were false positives, but there were several
389 legitimate problems found and fixed.
391 For a complete log of changes, please see
393 https://cairographics.org/releases/ChangeLog.1.15.14
395 Features and Enhancements
396 -------------------------
397 * Add more FreeeType font color conversions to support COLR/CPAL
398 * Update test reference images against current pixman
408 Performance Optimizations
409 -------------------------
410 Vasily Galkin introduced a Win32 performance optimization for
411 CAIRO_OPERATOR_SOURCE when copying data from a backbuffer to an argb32
412 surface corresponding to a Win32 DC. With this, argb32 drawing should
413 perform as fast as typical dibsection-buffered GDI drawing. See the
414 Cairo mailing list for April 2018 for data and discussion of the
415 performance improvements.
420 * Fix crash when rendering Microsoft's Segoe UI Emoji Regular font.
421 * Fix build breakage with glesv3 enabled due to non-existant glesv3.pc.
422 * Fix memory leaks found by Coverity
423 * Fix incorrect null ptr handling found by Coverity
424 * Fix test compilation when font-config is disabled
425 * Use _cairo_malloc instead of malloc (Bug #101547) (CVE-2017-9814)
426 * Fix assertion failure in the freetype backend (Bug #105746)
429 Release 1.15.12 (2018-04-04 Bryce Harrington <bryce@osg.samsung.com>)
430 ========================================================================
431 The main focus for this release is the addition of Variable Font
432 support. Variable fonts are single font files with various typography
433 characteristics, such as weight or slant, that users of the font can
434 adjust between two points. Effectively this enables a single font to
435 behave as multiple fonts.
437 The Skia backend is disabled in this release, due to severe bitrot, and
438 will be removed in future releases. Contact the cairo team if you have
439 a need of this backend.
441 For a complete log of changes, please see
443 https://cairographics.org/releases/ChangeLog.1.15.12
445 Features and Enhancements
446 -------------------------
447 * Variable font support
448 * Skia backend is disabled
452 * cairo_font_options_get_variations() and
453 cairo_font_options_set_variations() are added.
459 Performance Optimizations
460 -------------------------
465 * Fix errors in csi-trace --help and --version options
466 * Fix a 'memory leak' in the image compositor, with
467 pixman_glyph_cache_t.
468 * Fix access of uninitialized memory found by valgrind
470 * Fix improper initialization of memory in
471 _cairo_ft_font_face_create_for_pattern()
473 * Fix multi-monitor virtual desktop with negative coords on Win32
475 * Fix issues occurring with older FreeType versions.
478 Release 1.15.10 (2017-12-07 Bryce Harrington <bryce@osg.samsung.com>)
479 ========================================================================
480 This release adds GLESv3 support to the cairo_gl backend, adds
481 tracking of SVG units in generated svg documents, and cleans up numerous
482 test failures and related issues in the PDF and Postscript backends.
484 For a complete log of changes, please see
486 https://cairographics.org/releases/ChangeLog.1.15.10
488 Features and Enhancements
489 -------------------------
490 * Add support for OpenGL ES 3.0 to the gl backend.
491 * Use Reusable streams for forms in Level 3 Postscript.
492 * Add CAIRO_MIME_TYPE_EPS mime type for embedding EPS files.
493 * Add CCITT_FAX mime type for PDF and PS surfaces
494 * svg: add a new function to specify the SVG document unit
496 * Use UTF-8 filenames on Windows
500 * cairo_svg_surface_set_document_unit() and
501 cairo_svg_surface_get_document_unit()
507 Performance Optimizations
508 -------------------------
513 * Fix regression in gles version detection
514 * Fix undefined-behavior with integer math.
515 * Handle SOURCE and CLEAR operators when painting color glyphs.
517 * Convert images to rgba or a8 formats when uploading with GLESv2
518 * Use _WIN32 instead of windows.h to check for windows build.
519 * Fix sigabrt printing documents with fonts lacking the mandatory .nodef
522 * Prevent curved strokes in small ctms from being culled from vector
525 * Fix painting an unbounded recording surface with the SVG backend.
526 * Fix falling back to system font with PDFs using certain embedded
527 fonts, due to truncated font names.
529 * Fix handling of truetype fonts with excessively long font names
531 * Fix race conditions with cairo_mask_compositor_t
533 * Fix build error with util/font-view
534 * Fix assertion hit with PDFs using Type 4 fonts rendered with user
535 fonts, due to error when destroying glyph page.
537 * Set default creation date for PDFs
538 * Prevent invalid ptr access for > 4GB images.
540 * Prevent self-copy infinite loop in Postscript surface.
541 * Fix padded image crash in Postscript surface.
542 * Fix annotation bugs in PDFs and related memory leaks
543 * Fix test failures and other assorted issues in ps and pdf code.
544 * Fix code generation when using GCC legacy atomic operations
546 * Fix various compilation warnings and errors.
547 * Fix various distcheck errors with private symbols, doxygen formatting,
550 Release 1.15.8 (2017-08-29 Bryce Harrington <bryce@osg.samsung.com>)
551 ========================================================================
552 This small snapshot provides new colored emoji glyph support, and a
553 handful of minor fixes.
555 For a complete log of changes, please see
557 https://cairographics.org/releases/ChangeLog.1.15.8
559 Features and Enhancements
560 -------------------------
561 * Support colored emoji glyphs, stored as PNG images in OpenType fonts.
572 Performance Optimizations
573 -------------------------
579 * pdf: Fix internal links pointing to other pages, by pre-calculating
580 page heights so that link positions can be calculated more accurately.
582 * image: Fix crash on negative lengths
584 * win32: Fix initialization of mutexes for static builds
586 * pdf: Don't emit /PageLabel dict when no labels defined
588 * font: Fix color font loading on big-endian systems
590 * font: Fix color font support infinite-loop with empty glyphs
592 * Fix off by one check in cairo-image-info.c
596 Release 1.15.6 (2017-06-13 Bryce Harrington <bryce@osg.samsung.com>)
597 ========================================================================
598 This new snapshot incorporates changes over the past half-year since the
599 1.15.4 snapshot, including all the fixes from the 1.14 release series.
601 The PDF code continues to be enhanced, and we're restored MacOSX 10.4
602 support. Font-related fixes and improved error handling for X round out
605 For a complete log of changes, please see
607 https://cairographics.org/releases/ChangeLog.1.15.6
610 Features and Enhancements
611 -------------------------
612 * Detect if variable fonts have synthesized bold/italic or non-default
613 variants, and use a fallback font where needed.
615 * Restore MacOSX 10.4 support. Cairo had dropped 10.4 support when
616 moving to the CoreText API. Now we automatically detect which API to
617 use via dynamic linking, so can resume supporting this older version
629 Performance Optimizations
630 -------------------------
635 * Fix error reporting in the xcb backend if fallback fails. Instead of
636 returning NULL when the X11 server can't do some operation, return a
637 surface in an error state.
639 * Call XSync in the xlib backend before setting the error handler to
640 ignore errors for certain requests, to make sure all pending errors
643 * Fix text-glyph-range for quartz-font. Use 0xFFFF instead of 0 for
644 invalid index tracking.
646 * Fix handling of Supplementary Multilingual Plane (SMP) Unicode
647 characters in quartz-font.
649 * Fix various issues in the drm backend including updating API usage and
650 general code cleanup.
652 * Clarify documentation regarding device scale inheritance and the units
653 used in cairo_surface_create_similar_image.
657 Release 1.15.4 (2016-12-9 Bryce Harrington <bryce@osg.samsung.com>)
658 =======================================================================
659 This new snapshot incorporates changes over the past year since the
660 1.15.2 snapshot, including all the fixes from the 1.14 release series.
662 Of particular note in this snapshot is a wealth of work by Adrian
663 Johnson to enhance PDF support, as well as numerous bug fixes provided
664 by him and other contributors.
666 For a complete log of changes since the last release, please see:
668 https://cairographics.org/releases/ChangeLog.1.15.4
672 * The PDF backend has gained support for a range of widely used
673 features, including thumbnails, page labels, metadata, document
674 outlines, structured text, hyperlinks, and tags. Tags permit adding
675 logical info such as headings, tables, figures, etc. that facilitates
676 indexing, accessibility, text reflow, searching, and extraction of the
677 tagged items to other software. For details on this new PDF
680 https://lists.cairographics.org/archives/cairo/2016-June/027427.html
686 cairo_win32_surface_create_with_format
688 Added a cairo API to set up Win32 surfaces for HDC with alpha channels.
690 cairo_pdf_surface_add_outline
691 cairo_pdf_surface_set_metadata
692 cairo_pdf_surface_set_page_label
693 cairo_pdf_surface_set_thumbnail_size
696 CAIRO_STATUS_TAG_ERROR
698 New API for added PDF functionality (see above), and new error
699 status item for problems relating to PDF tagging.
701 CAIRO_STATUS_WIN32_GDI_ERROR
702 CAIRO_STATUS_FREETYPE_ERROR
703 CAIRO_STATUS_PNG_ERROR
705 New error status items for handling of GDI, libfreetype, and libpng
706 errors, respectively.
712 Performance Optimizations
713 -------------------------
718 * Bug fixes from 1.15.2 (see the 1.15.2 NEWS for details)
720 * Fix playback of recording surfaces into PDF surfaces, where objects
721 with negative coordinates were not getting drawn. To address this,
722 the coordinate systems for PDF and PS have been changed to match
723 cairo's coordinate system. This allows recording surfaces to be
724 emitted in cairo coordinates, and results in the same origin being
725 used for all operations when using the recording surface XObject.
726 Test cases for PDF and PS have also been updated accordingly.
729 * Fix "invalidfont" error on some printers when printing PDFs with
730 embedded fonts that have glyphs (such as spaces) with
731 num_contours == 0. (Bug #79897)
733 * Fix missing glyphs such as thin dashes, which get scaled to 0 in
734 userspace and thus have their drawing operations culled. (Bug #94615)
736 * Fix other oddities caused by variously idiosyncratic fonts.
738 * Fix deadlock when destruction of a scaled font indirectly triggers
739 destruction of a second scaled font, causing the global cache to be
740 locked twice. (Bug #93891)
742 * Fix X errors reported to applications when shmdt() is called before
743 the Attach request is processed, due to missing xcb and xlib calls.
745 * Fix random failure in record-paint-alpha-clip-mast test case, caused
746 by an incorrect assumption that a deferred clear can be skipped.
749 * Fix crash when dealing with an XShmGetImage() failure, caused by a
750 double free in _get_image_surface(). (Bug #91967)
752 * Fix invalid execution of ASCII85 data by the PS interpreter that the
753 image operator didn't use, by flushing the extraneous data after
754 drawing the image. (Bug #84811)
756 * Fix decoding of Adobe Photoshop's inverted CMYK JPEG files in PDF
759 * Fix unbounded surface assertion in win32-print code.
761 * Fix a data race in freed_pool discovered by Firefox's cairo usage.
762 The patch adads atomic int load and store functions, with relaxed
763 memory ordering. (Bug #90318)
765 * Cleanup debugging text sent to stdout instead of log. (Bug #95227)
767 * Fix build issue when using non-GNU strings utility. (Bug #88639)
769 * Fix build of cairo modules as regular modules, not as versioned shared
770 libraries. (Bug #29319)
772 * Fix build on win32 using gcc 5.4.
774 * Fix build of script backend to require zlib.
776 * Update test suite reference images using Debian Jessie 64-bit and
777 poppler current as of June, 2016.
779 * Various improvements to documentation and tests, compiler warning
780 fixes, and an assortment of code refactoring and cleanup.
783 Release 1.15.2 (2015-12-10 Bryce Harrington <bryce@osg.samsung.com>)
784 ========================================================================
785 This release is largely a rollup to include a variety of fixes that
786 didn't make the cut for the stable 1.14.2 and 1.14.4 releases, as well
787 as all the fixes from those releases. Notably this includes a highly
788 requested new API for Win32 surfaces.
790 For a complete log of changes since the last release, please see:
792 https://cairographics.org/releases/ChangeLog.1.15.2
801 cairo_win32_surface_create_with_format
803 Added a cairo API to set up Win32 surfaces for HDC with alpha channels.
809 Performance Optimizations
810 -------------------------
815 * All the bug fixes from 1.14.2, 1.14.4, and 1.14.6
817 * Fix xcb/xlib compilation and calls. Make image boxes behave when SHM
820 * Fix various issues with printing and transparent images on Win32.
822 * Fix thin lines that don't show up when printing in Inkscape due to
823 overly aggressive culling.
826 * Fix broken printing via pdf when glyph 0 is used for rendering,
827 resulting in missing spaces and letters.
830 * Fix crash for certain glyphs in opentype fonts.
833 * Fix incorrect rendering of SVG paths with more than one subpath. If
834 more than one trap is passed in then it's guaranteed that the returned
835 traps will have their left edge to the left of their right edge, but
836 if only one trap is passed in then the function always returns without
840 * Improve rendering with Quartz to better match pixman's blending and
844 Release 1.14.6 (2015-12-09 Bryce Harrington <bryce@osg.samsung.com>)
845 ========================================================================
846 Simple bugfix release to fix one Windows issue.
848 For a complete log of changes since 1.14.4, please see:
850 https://cairographics.org/releases/ChangeLog.1.14.6
864 Performance Optimizations
865 -------------------------
870 * Fix failure on Windows due to reference of the function
871 cairo_win32_surface_create_with_format(), which isn't included in the
872 1.14.4 release. (Bug #92771)
875 Release 1.14.4 (2015-10-28 Bryce Harrington <bryce@osg.samsung.com>)
876 ========================================================================
877 Just in time for Halloween we see another bug-fix release for Cairo.
878 This brings a few dozen straightforward bug fixes with no API changes.
880 In addition, this includes a typical assortment of fixes to tests,
881 cleanup of warnings and memory leaks, correction of misspellings,
882 updates to documentation, etc.
884 For a complete log of changes since 1.14.2, please see:
886 https://cairographics.org/releases/ChangeLog.cairo-1.14.4
900 Performance Optimizations
901 -------------------------
906 * Avoid appending empty slots to user data arrays. Fixes a memory
907 consumption regression since commit 9341c254a.
909 * Return a better error (file-not-found) when setting up pango on
910 devices where the font files don't have read permissions.
912 * Fix regression in the font size of canvas text in Inkscape when
913 compiled with the Quartz backend. (Bug #84324)
915 * Fix _cairo_gl_shader_bind_matrix() to maintain compatibility with
916 OpenGL ES 2.0. Manually transpose the matrix.
918 * Fix incorrect font descriptor conversion when the font matrix yy is
919 negative. (Bug #90538)
921 * Fix crash when using a complex path for clip and stroke due to
922 discarding the intersection exactly at the top edge.
925 * Fix cairo_get_locale_decimal_point() on Android
927 * Fix compilation problem on AIX due to conflicting usage of symbol
928 'jmpbuf'. (Bug #89339)
930 * Fix broken rendering with XCB due to snapshotting of uploaded part of
931 surfaces. (Bug #67505)
933 * Fix loss of alpha when copying a mask for a cairo recording surface,
934 resulting in a double copy. (Bugs #73038, #73901)
936 * Fix incorrect recording of certain paths with script surfaces.
939 * Fix typo in definition of MAYBE_WARN in configure script.
942 * Fix use of filename variable after it's been freed.
945 * Fix out of bounds access when printing pattern.
948 * Fix incorrect size calculation in glyph cache unlocking for Cairo GL
952 * Fix memory leak in _cairo_gl_pattern_texture_setup()
955 * Fix transparent images in win32-print.
958 * Fix _put_shm_image_boxes and _put_image_boxes when no SHM available
962 Release 1.14.2 (2015-03-09 Bryce Harrington <bryce@osg.samsung.com>)
963 ====================================================================
964 This release provides collected bug fixes, along with one feature
965 enhancement for the xcb backend, and a small performance improvement for
968 The running theme of the bug fixes is platform-specific issues, both
969 build and run-time. Platforms with fixes include Sparc, AIX, Windows
970 (mingw), and Windows (MSVC8). Memory leaks, valgrind issues, and PDF
971 issues round out our list.
973 It's come to light that changes in cairo 1.14 resulted in breakage on
974 MacOS X 10.4. We've not yet determined whether to fix up the support,
975 or excise the 10.4-specific code and support only OS X 10.5 or newer.
976 Meantime, we'll only advertise cairo as working on OS X 10.5.
980 * Improve xcb's handling of per-screen subpixel ordering. If no
981 Xft.rgba property is specified, default to the screen's subpixel
992 Performance Optimizations
993 -------------------------
994 * Improve performance of cpu_to_be32 and be32_to_cpu, making truetype
995 subsetting of large fonts run about 15% faster.
999 * Fix unaligned access on sparc with the compact font format (CFF).
1000 Unlike truetype, all data in CFF is not aligned.
1001 (Debian bug #712836)
1002 * Fix unaligned access on sparc with tor-scan-converter's memory pool.
1003 * Fix crash when loading a PDF with a transformed image.
1005 * Fix regression on mingw for bigendian test due to removal of file
1006 extension for executables.
1008 * Fix handling of backslash in PDF interpreter
1010 * Fix crash in xlib and xcb renderers when swapping a 0-sized glyph
1011 * Fix bug with RTL text in PDF operators
1013 * Fix compilation 'cairo-path-stroke-traps.c' with MSVC8
1015 * Fix crash in _fill_xrgb32_lerp_opaque_spans when a span length is
1017 * Fix valgrind error by releasing pattern created by
1018 cairo_pattern_create_rgb().
1019 * Fix valgrind errors when running cairo-test-suite.
1020 * Fix memory leak in recording surface replays
1022 * Fix destruction of fonts in api-special-cases test.
1024 * Fix duplicated surface push on similar-image, preventing trivial GTK3
1025 program traces from being replayable, with an error message about
1026 invalid values for the size of the input.
1028 * Fix crash when win32 surface's image size does not cover the entire
1031 * Fix crash due to obsolete CGFontGetGlyphPath call
1033 * Fix several build issues on AIX
1034 (fdo bugs #89338, #89340, #89356, #89354)
1035 * Fix various documentation warnings and errors
1038 Release 1.14.0 (2014-10-13 Bryce Harrington <bryce@osg.samsung.com>)
1039 ====================================================================
1040 Hard to believe it's been over a year since our last release, but it's
1041 not for lack of activity. This release includes contributions of a wide
1042 assortment of bug fixes, build system improvements, warnings cleanups,
1043 codebase refactoring, test suite repairs, and static analysis work.
1045 This release is lighter on features (compared with 1.12.10) but includes
1046 a highly demanded rehaul of our image downscaling functionality, which
1047 solves a serious problem experienced by Inkscape users when shrinking
1048 embedded bitmaps in SVG files. The new scaling algorithms are used by
1049 the image backend and by other backends as needed for fallbacks.
1055 Filtering improvements for the image backend, in particular
1056 down-scaling of images produces filtered images that depend on all the
1057 pixels of the source. When using the image backend you get the
1060 CAIRO_FILTER_GOOD: uses a box filter for scales less than .75 in
1061 either direction. For scales larger than this, the same filter as
1062 CAIRO_FILTER_BILINEAR is used.
1064 CAIRO_FILTER_BEST: uses a Catmull-Rom filter always. When upscaling
1065 more than 2x this will produce anti-aliased square pixels, similar
1068 CAIRO_FILTER_GAUSSIAN: uses PIXMAN_FILTER_BEST, which in current
1069 pixman is the same as BILINEAR. (This is subject to change in the
1072 xlib and xcb also use the image fallback for GOOD/BEST filters, but
1073 note that other backends do not implement these filtering fixes yet,
1074 however other actions may cause them to use an image fallback which
1075 will cause these filters to be used.
1077 Improve handling of device transformation and scaling, allowing Cairo
1078 to now support scaling at a device level, permitting easier, more
1079 transparent HiDPI support.
1081 Support JBIG2 mime data in PDF. This allows embedding of more
1082 compressed JPEG formats within PDF, rather than including the full
1083 uncompressed image. Also, reduce the number of transparency groups
1084 used by PDF to keep the file size small and viewing/printing of the
1087 Expand the embedding section to include stencil mask support.
1089 Reorder font declarations to be in natural order.
1091 Update the Skia backend to build against current Skia (as of June
1094 Drop Link-Time Optimization (LTO) support from build system. This
1095 seems to have caused much trouble for unclear benefit, and most
1096 distros are reverting or disabling it anyway.
1098 Optimize VBO size on GL to 1M and to 16k for EGL. This improves
1099 (theoretical) performance for desktop GLX use cases while avoiding
1100 hitting VBO memory size limitations on embedded devices.
1105 cairo_surface_set_device_scale, cairo_surface_get_device_scale:
1107 Sets a scale that is multiplied to the device coordinates
1108 determined by the CTM when drawing to @surface. One common use for
1109 this is to render to very high resolution display devices at a scale
1110 factor, so that code that assumes 1 pixel will be a certain size
1113 cairo_egl_device_get_display, cairo_egl_device_get_context:
1115 Support get/set of EGLContext and EGLDisplay for egl-based cairo
1116 devices, similar to GLX.
1121 Cairo now requires glib 2.14 for its gobject helper functions,
1122 and pixman 0.30 for downscaling.
1128 Don't embed CMYK Jpeg images in svg.
1130 Fix tests to place output in proper location.
1132 Fix determination of alpha for all surfaces when recording.
1134 Extend oversize check to cairo_gl_surface_create_for_texture, so an
1135 error surface is returned if the texture is too large to render to.
1137 Fix embedding of mime data in PDF and PS files.
1139 Remove useless error handling in *_reply() functions in XCB.
1141 Fix a double-free exposed by multithreaded apps creating and
1142 destroying the same font concurrently.
1143 https://bugs.freedesktop.org/show_bug.cgi?id=69470
1145 Fix corrupt stacks produced by bugs in operand emission for trace.
1147 Fix out of bounds array access in format cache for xlib
1149 Don't rename glyphs used by seac operator. This can cause certain
1150 combined characters to use their decorations (e.g. umlauts on ö) to be
1151 lost during printing of PDFs using evince.
1152 https://bugs.freedesktop.org/show_bug.cgi?id=70364
1154 Fix crash on calling cairo_create with a finished surface
1156 Fix SSIZE_T definition problem when making with MSYS on Windows7
1158 Fix one off issue in gl context cleanup
1160 Fix usage of CAIRO_STACK_ARRAY_LENGTH
1162 Fix rectangle stroke with non rectilinear pen
1164 Fix imagemask with pattern source failure on some printers. This bug
1165 could cause files converted using pdftops to fail for example on Ricoh
1166 printers, or opening in Adobe Distiller on Windows.
1167 https://bugs.freedesktop.org/show_bug.cgi?id=69485
1169 Fix whitespace in font names
1171 Fix page size in generated PDFs. When printing using pdftocairo on
1172 larger page sizes, such as 11x17, the image would be cropped to letter
1174 https://bugs.freedesktop.org/show_bug.cgi?id=73452
1176 Fix path-currentpoint test by preserving current-point in
1177 copy_path()/append_path() sequence
1179 Fix generation of HTML in code docs for
1180 cairo-format-stride-for-width. Raw HTML code was being passed
1181 to the browser, instead of displaying normally.
1182 https://bugs.freedesktop.org/show_bug.cgi?id=63257
1184 Fix spelling of "tessellator" throughout code. We're using the
1185 American rather than British spelling of this word.
1186 https://bugs.freedesktop.org/show_bug.cgi?id=50411
1188 Fix crash in pixman_image_composite32
1190 Fix crash when trying to modify a (const) all-clipped cairo_clip_t
1191 https://bugs.freedesktop.org/show_bug.cgi?id=75819
1193 Add check_composite method to all compositors, to fix crashes in the
1196 Fix crash in Firefox when scrolling on certain pages.
1198 Fix memory leaks found by static analysis.
1200 Fix build of any2ppm if fork is not available.
1202 Fix broken build for Qt backend, due to missing libstdc++.
1204 Fix typo in two cairo_uint128 functions. Fixes potential build issues
1205 on systems without a uint128 type.
1207 Fix build when --enable-pdf=no
1209 Fix cache_frozen assertions for Win32 print.
1211 Correctly check for xcb image surface for inplace upload
1213 Fix webkit-based web browser crashes due to empty boxes by skipping
1214 over them when tesselating.
1216 Make pixman, libpng, and zlib paths commandline configurable for win32
1219 Fix image scale on Win32 when GDI scale is not identity.
1221 Fix float endian configure test when using clang -O4
1223 Fix compilation with Android bionic libc
1225 Don't try to build util/sphinx on Windows
1227 Fix loss of precision when emitting joins. This was caused by
1228 discrepancies in line gradients when passing trapezoids around.
1230 Fix loss of precision and associated rendering issues in
1231 cairo-tor-scan-converter from projection onto sample grid.
1233 Fix pixman oversampling of neighbouring edges within a cell by
1234 eliminating self-intersections for the pixman traps compositor.
1236 Fix multi-line string splitting in PDFs
1238 Various cleanups and fixes to warnings, documentation, tests, and
1239 build system. Improve error handling and return value checks.
1240 Cleanup XFAIL tests and reference images. Cover recently added
1244 Release 1.12.16 (2013-08-21 Chris Wilson <chris@chris-wilson.co.uk>)
1245 ===================================================================
1246 Thanks to everybody who reported a bug and helped us develop a fix,
1247 we have amassed quite a few bug fixes. There are still more outstanding
1248 bugs that seek attention and a little bit of TLC, but this release has
1249 been delayed long enough...
1254 Set the correct orientation for simple boxes with a negative scale
1257 Fix the creation of the shading dictionary in PDF.
1259 Fix a crash in PDF when incorporating an image with CAIRO_EXTEND_PAD.
1260 https://bugs.freedesktop.org/show_bug.cgi?id=61451
1262 Avoid upscaling bitmap fonts if possible.
1264 Fix an assertion failure within the mempool allocator for shared memory.
1266 Fix allocation size for CFF subsets.
1268 Export cairo_matrix_t for GObject bindings.
1270 Fix a double free in the Quartz backend.
1271 https://bugs.freedesktop.org/show_bug.cgi?id=62885
1273 Fix origin of GDI StretchBlits for the Windows backend
1274 https://bugs.freedesktop.org/show_bug.cgi?id=61876
1276 Fix error propagation for requests to create a similar surface with
1278 https://bugs.freedesktop.org/show_bug.cgi?id=63196
1280 Fix complex clipping of trapezoids with regions
1281 https://bugzilla.gnome.org/show_bug.cgi?id=697357
1283 Stop leaking the image data when loading PNGs
1285 Fix unbounded operations with a clip mask through the span compositor
1286 https://bugs.freedesktop.org/show_bug.cgi?id=61592
1288 Add missing checks before rendering to a finished surface - so we return
1289 an error rather than hit an assert.
1290 https://bugs.freedesktop.org/show_bug.cgi?id=68014
1292 Prevent an assertion failure when creating similar GL surfaces larger
1293 than supported by hardware.
1295 Prevent a double free of a similar image under Windows.
1296 https://bugs.freedesktop.org/show_bug.cgi?id=63787
1299 Release 1.12.14 (2013-02-10 Chris Wilson <chris@chris-wilson.co.uk>)
1300 ===================================================================
1301 In the last week we had a few more bugs reported and promptly resolved.
1302 As these are a combination of regressions and stability issues, it is
1303 time for a prompt update and release. Many thanks to everyone for
1304 testing and reporting issues, and helping to make Cairo better.
1309 Prevent user callbacks accessing user-data during destroy to prevent
1310 use-after-free bugs.
1311 https://bugzilla.mozilla.org/show_bug.cgi?id=722975
1313 Use standard names for glyphs in subset fonts (PDF).
1314 https://bugs.freedesktop.org/show_bug.cgi?id=60248
1316 Fix detection of Win98. The logic for detecting Win98 (and its broken
1317 AlphaBlend()) was inverted, disabling AlphaBlend() for everyone.
1319 Prevent numeric overflow from extrapolating polygon edges to the clip
1320 boundary and causing severe render artifacts.
1321 https://bugs.freedesktop.org/show_bug.cgi?id=60489
1323 Fix computation of glyph string coordinates when breaking up runs
1326 Fix an assertion in the win32 backend for failing to clear its
1328 https://bugs.freedesktop.org/show_bug.cgi?id=60519
1331 Release 1.12.12 (2013-01-31 Chris Wilson <chris@chris-wilson.co.uk>)
1332 ===================================================================
1333 The goal of this release is to fix the synchronisation problems that
1334 were exhibited in the SHM transport for cairo-xlib. This cropped up
1335 any place that tried to rapidly push fresh pixel data to the X server
1336 through an ordinary image surface, such as gimp-2.9 and evince.
1341 Avoid replacing the entire image when uploading subimages
1342 https://bugs.freedesktop.org/show_bug.cgi?id=59635
1344 Force synchronisation for scratch SHM image buffers, so that we do
1345 not overwrite data as it is being read by X.
1346 https://bugs.freedesktop.org/show_bug.cgi?id=59635 (also)
1348 Fix typos in detecting multisampling for the GL (MSAA) backend.
1350 Fix a memory leak in the GL (MSAA) backend.
1352 Fix a reference counting bug when mapping a GL surface to an image.
1355 Release 1.12.10 (2013-01-16 Chris Wilson <chris@chris-wilson.co.uk>)
1356 ===================================================================
1357 A heap of bug fixes everywhere, and the gradual completion of the MSAA
1358 backend for cairo-gl. Perhaps the most noteworthy set of the bugfixes
1359 was the crusage lead by Behdad Eshfabod to make font handling by
1360 pango/cairo/fontconfig fully threadsafe. This testing revealed a couple
1361 of races that needed fixing in Cairo's scaled-font and glyph cache.
1366 Append coincident elements to the recording's surface bbtree so that
1367 the list is not corrupted and the overlapping elements lost.
1369 Fix cairo-trace to correctly record map-to-image/unmap-image and then
1372 Ignore MappingNotifies when running the XCB testsuite as they are sent
1373 to all clients when the keyboard changes. The testsuite would detect
1374 the unexpected event and complain.
1376 Handle very large images in the XCB backend.
1378 Fix a memory leak in the xlib/shm layer, and prevent use of the SHM
1379 surfaces after the display is closed.
1380 https://bugs.freedesktop.org/show_bug.cgi?id=58253
1382 Handle resizing of bitmap fonts, in preparation for a fix to
1383 fontconfig to correctly pass on the user request for scaling.
1385 Always include subroutine 4 (hint replacement idion) when subsetting
1386 type 1 fonts in order to prevent a crash in cgpdftops on Mac OS/X
1388 Fix a couple of typos in the cairo-gobject.h header files for
1391 Prevent a mutex deadlock when freeing a scaled-glyph containing a
1392 recording-surface that itself references another scaled-glyph.
1393 https://bugs.freedesktop.org/show_bug.cgi?id=54950
1395 Make scaled-font cache actually thread-safe and prevent
1398 Restore support for older versions of XRender. A couple of typos and a
1399 few forgotten chunks prevented the xlib compositor from running
1400 correctly with XRender < 0.10. Note that there are still a few
1401 regressions remaining.
1404 Release 1.12.8 (2012-11-24 Chris Wilson <chris@chris-wilson.co.uk>)
1405 ===================================================================
1406 Another couple of weeks and a few more bugs have been found and fixed,
1407 it is time to push the next point release. Many thanks to everyone who
1408 reported their issues and helped us track down the bugs and helped
1414 Expand the sanity checking for broken combinations of XSendEvent and
1417 Notice that "The X.Org Foundation" sometimes also identifies itself
1418 as "The Xorg Foundation".
1420 Handle various ages of libXext and its Shm headers.
1422 Fix the invalid clipping of the source drawable when using SHM
1423 transport to upload images.
1424 https://bugs.freedesktop.org/show_bug.cgi?id=56547
1426 Handle all Type1 postscript operators for better font compatibility.
1427 https://bugs.freedesktop.org/show_bug.cgi?id=56265
1429 Fix a couple of memory leaks in Type1 font subsetting
1430 https://bugs.freedesktop.org/show_bug.cgi?id=56566
1432 Tighten the evaluation of the start/stop pen vertices, and catch a few
1433 instances where we would use a fan instead of a bevel.
1434 https://bugs.freedesktop.org/show_bug.cgi?id=56432
1436 Fix assumption that geometric clipping always succeeds with the
1438 https://bugs.freedesktop.org/show_bug.cgi?id=56574
1440 Fix call to spline intersection when evaluating whether a stoke is
1443 Remember to copy inferior sources when using SHM to readback the
1444 surface for use as a source.
1446 Release 1.12.6 (2012-10-22 Chris Wilson <chris@chris-wilson.co.uk>)
1447 ===================================================================
1448 Thanks to everyone who download cairo-1.12.4 and gave us their feedback.
1449 It truly was invaluable and has helped us to fix many portability issues
1450 that crept in with some of the new features. This release aims to fix
1451 those stability issues and run on a wider range of systems.
1456 Fix the recording surface to actually snapshot the source and so fix
1459 Calling XSendEvent with an XShmCompletionEvent is incompatabile with
1462 Reorder CloseDisplay chain so that XShm is not reinstantiated after
1463 shutdown, causing a potential crash if the Display was immediately
1464 recreated using the same memory address.
1466 Make sure that the Xserver has attached to the SHM segment before
1467 deleting it from the global namespace on systems that do not support
1470 Type1 subsetting support for PDF (and PS) was once again improved to
1471 work with a larger number of PDF readers.
1473 GLESv2 build fixes and improved support for embedded GPUs.
1475 Tweak the invisible pen detection for applications that are currently
1476 using too large values for geometric tolerance.
1478 A build fix for older freetype libraries.
1481 Release 1.12.4 (2012-10-05 Chris Wilson <chris@chris-wilson.co.uk>)
1482 ===================================================================
1483 More bugs, and more importantly, more fixes. On the cairo-gl side, we
1484 have refinements to the MSAA compositor which enables hardware
1485 acceleration of comparatively low-quality antialiasing - which is useful
1486 in animations and on very high density screens. For cairo-xlib, we have
1487 finally enabled SHM transport for image transfers to and from the X
1488 server. A long standing required feature, SHM transport offers a notable
1489 reduction in rendering latency by reducing the number of copies
1490 required to upload image data - given hardware and driver support,
1491 cairo-xlib can now perform zero copy uploads onto the GPU. And as usual
1492 Adrian Johnson has been very busy fixing many different corner cases in
1493 cairo-pdf, improving opacity groups and font subsetting. Last, but not
1494 least, for cairo-image Søren Sandmann Pedersen added support for
1495 rendering glyphs to pixman and using that from within cairo. The new
1496 glyph rendering facility reduces the overhead for setting up the
1497 compositing operation, improving glyph thoughput for the image backend
1498 by a factor of about 4. And before he did so, he also fixed up a few
1499 bugs in the existing glyph rendering code. So many thanks to Andrea
1500 Canciani, Adrian Johnson, Chuanbo Weng, Dongyeon Kim, Henry Song, Martin
1501 Robinson, Søren Sandmann Pedersen and Uli Schlachter for their
1502 contributions, finding and fixing bugs.
1507 Interior boxes were being dropped when amalgamating regions during
1509 https://bugs.freedesktop.org/show_bug.cgi?id=49446
1511 Allow building without gtk-doc installed
1513 Invalid edge generation whilst reducing complex polygons.
1514 https://bugs.freedesktop.org/show_bug.cgi?id=50852
1516 Stroking around tight cusps
1518 Use locale correct formats for reading font subsetting and valid
1520 https://bugs.freedesktop.org/show_bug.cgi?id=51443
1522 Ensure that the type1 subset includes all the glyph encodings
1523 https://bugs.freedesktop.org/show_bug.cgi?id=53040
1525 Upload the whole source for a repeating pattern.
1526 https://bugs.freedesktop.org/show_bug.cgi?id=51910
1528 Fix damage tracking to handle continuation chunks correctly and so
1529 prevent crashes on win32.
1530 https://bugs.freedesktop.org/show_bug.cgi?id=53384
1532 Avoid emitting miter joins for degenerate line segments
1533 https://bugzilla.mozilla.org/show_bug.cgi?id=407107
1535 Convert the relative path semgents into the backend coordinates
1536 and then back again to user coordinates (cairo_copy_path,
1538 https://bugs.freedesktop.org/show_bug.cgi?id=54732
1540 Fix extents computations for a degenerate path consisting only of a
1542 https://bugs.freedesktop.org/show_bug.cgi?id=54549
1544 Prevent crashing on a degenerate project edge after polygon
1546 https://bugs.freedesktop.org/show_bug.cgi?id=54822
1550 Release 1.12.2 (2012-04-29 Chris Wilson <chris@chris-wilson.co.uk>)
1551 ===================================================================
1552 After such a long gestation period for the release of Cairo 1.12, we
1553 inevitably accumulated a few bugs that were flushed out by broadening the
1554 test base. Thanks to everybody who tried the release, apologies to any one
1555 unfortunate enough to encounter a bug and many thanks for reporting it. As
1556 a result Adrian Johnson, Alexandros Frantzis, Andrea Canciani, Kalev
1557 Lember, Maarten Bosman, Marcus Meissner, Nis Martensen and Uli Schlachter
1558 have squashed many more bugs and improved the documentation. I would
1559 strongly recommend everyone to upgrade to cairo-1.12.2.
1565 Allow applications to create 0x0 xlib surfaces, such as used by LibreOffice.
1566 https://bugs.freedesktop.org/show_bug.cgi?id=49118
1568 Trim composite extents for SOURCE/CLEAR operators to the mask.
1570 Use fallback fonts in PDF for unhandled computed glyph widths
1571 https://bugs.freedesktop.org/show_bug.cgi?id=48349
1573 Handle snapshots of recording surfaces for analysing pattern extents.
1574 Fixes a regression of reporting the PDF bounding box as being the page size.
1576 Fix allocation size for PDF pattern ids.
1577 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=49089
1579 Fix emission of rectilinear dashed segments, with and without scaling, and
1580 application of degenerate line joins.
1582 Clamp unbounded fixup polygons to the clip extents.
1584 Prevent infinite loop due to rounding errors whilst incrementing along dashes.
1586 Prevent overflow for inline a8 span filling.
1588 Miscellaneous build fixes for Cygwin on Windows and Solaris.
1590 Release 1.12.0 (2012-03-23 Chris Wilson <chris@chris-wilson.co.uk>)
1591 ===================================================================
1592 It's taken over 18 months, but the wait is finally over. A new cairo release!
1593 We are pleased to announce a new stable release of Cairo that brings many
1594 new features and performance improvements, all whilst maintaining
1595 compatibility with cairo-1.0 and all releases since. We recommend anyone
1596 using a previous release of Cairo to upgrade to 1.12.0.
1598 The major feature of this release is the introduction of a new procedural
1599 pattern; the mesh gradient. This, albeit complex, gradient is constructed
1600 from a set of cubic Bezier patches and is a superset of all other gradient
1601 surfaces which allows for the construction of incredibily detailed patterns.
1602 In PDF parlance, the mesh gradient corresponds with type 7 patterns. Many
1603 thanks to Andrea Canciani for bringing this to Cairo, and for his work on
1604 making gradient handling robust.
1606 Not content with just adding another procedural pattern, Cairo 1.12 also
1607 adds new API to create a callback pattern,
1608 cairo_pattern_create_raster_source, that allows the application to
1609 provide the pixel data for the region of interest at the time of
1610 rendering. This can be used for instance, by an application to decode
1611 compressed images on demand and to keep a cache of those decompressed
1612 images, independently of Cairo. When combined with the recording
1613 surface, it should form a useful basis for a deferred renderer.
1615 With the release of cairo-1.12, we also introduce a new supported
1616 backend for interoperating with X using XCB. Uli Schlachter, also
1617 maintainer of awesome and contributor to libxcb, has volunteered to
1618 maintain cairo-xcb for us. Thanks Uli!
1620 For cairo-1.12, we have also added some common API to address any
1621 surface as an image and so allow direct modification of the raster data.
1622 Previously, only the Quartz and Win32 backends supported a very narrow
1623 interface to allow for efficient pixel upload. Now with
1624 cairo_surface_create_similar_image, cairo_surface_map_to_image, and
1625 cairo_surface_unmap_image, Cairo exports a consistent method for
1626 treating those surfaces as an image and so allow modification inplace.
1627 These are the same routines used internally, and should support
1628 efficient transfer or direct mapping of the target surfaces as
1631 Another focus over the past year has been to address many performance
1632 issues, without sacrificing the composition model. To accomplish the
1633 goal, once again the rasterisation pipeline was overhauled and made
1634 explicit, giving the backends the freedom to implement their own
1635 specific pipeline whilst also providing a library of common routines
1636 from which to build the pipeline. For instance, this allows the image
1637 backend and the gl backend to composite scan line primitives inplace,
1638 and to then implement custom fallbacks to catch the corner cases that do
1639 not map onto their fastest paths. Similarly, this allows for the Xlib
1640 backend to implement trapezoidation without compromising the other
1641 backends, yet still allow for the pipeline to be used elsewhere for
1642 testing and fallbacks. Clipping was once again overhauled, so that the
1643 common cases for the raster pipelines could be captured and processed
1644 with fast paths with the emphasis on performing geometric clipping to
1645 reduce the frequency of using multi-pass clipmasks. Stroking was made
1646 faster, both by providing specialised fast-paths for simple, yet frequent,
1647 cases (such as stroking around a rectangle) and by reducing the number
1648 of edges generated by the general stroker.
1650 As part of the focus on performance, Cairo 1.12 introduces some
1651 antialias hints (NONE, FAST, GOOD, BEST) that are interpolated by the
1652 rasterisers to fine tune their performance versus quality. Cairo 1.12
1653 also introduces a new observation architecture,
1654 cairo_surface_observer_t, which can be used to analyse the amount of
1655 time consumed by drawing commands and help identify inefficiencies in
1656 both Cairo and the application.
1658 Last, but by no means least, the OpenGL backend has seen significant
1659 work including the port to GLESv2 and the exploitation of advanced
1660 hardware features. Interesting times.
1662 As always, I would like to thank everyone who contributed to Cairo,
1663 not only through writing code, but also submitting documentation, bug
1664 reports, suggestions and generally having fun with Cairo! In particular
1665 though this release could not have happened without the efforts of
1666 Adrian Johnson, Alexandros Frantiz, Andrea Canicani, Martin Robinson,
1667 Nis Martensen, and Uli Schlachter. Thanks.
1670 Snapshot 1.11.4 (2012-13-12)
1671 ============================
1672 The cairo community is pleased to finally announce the long aniticpated
1673 release candidate for 1.12, 1.11.4, of the cairo graphics library. This
1674 is the first major update to cairo in over a year and brings a large
1675 number of new features; undoubtably a few bugs as well.
1677 While many people have contributed and have helped to test the release,
1678 providing feedback on 1.10 and suggesting improvements, this release
1679 is the result of a few persevering souls who deserve recognition for their
1680 outstanding contributions: Andrea Canciani (all round bug fixing,
1681 performance tuning and master of the gradients), Adrian Johnson (PDF
1682 supremo) and Uli Schlachter (who stepped forward as maintainer for the
1685 Major additions since 1.11.2:
1687 * cairo_surface_map_to_image API for pixel level access to any surface
1689 * New antialias hints to control the trade-off between speed and quality
1691 * A callback pattern, cairo_pattern_create_raster_source, for lazy
1692 decoding of image data.
1694 * cairo_surface_observer_t, a new type of surface to gather performance
1697 * XCB as a supported backend
1699 * A rewritten compositor pipeline for performance improvements for, but not
1700 limited to, the xlib and image backends.
1701 From ION and PineView through to SandyBridge, every machine I have shows
1702 across the board performance improvement on the cairo-traces:
1704 i5-2520m gnome-system-monitor: 5.97x speedup
1705 pnv gnome-system-monitor: 4.86x speedup
1706 i5-2520m firefox-asteroids: 4.66x speedup
1707 pnv firefox-asteroids: 4.43x speedup
1708 image firefox-canvas: 3.82x speedup
1709 i5-2520m firefox-canvas-alpha: 3.49x speedup
1710 image firefox-asteroids: 2.87x speedup
1711 pnv firefox-talos-svg: 2.83x speedup
1712 ion grads-heat-map: 2.75x speedup
1713 pnv firefox-canvas-alpha: 2.66x speedup
1714 image gnome-system-monitor: 2.66x speedup
1715 image swfdec-giant-steps: 2.46x speedup
1716 image firefox-canvas-alpha: 2.14x speedup
1717 i5-2520m firefox-talos-svg: 2.03x speedup
1718 image grads-heat-map: 2.02x speedup
1719 ion gnome-system-monitor: 2.00x speedup
1720 pnv firefox-particles: 1.99x speedup
1721 i5-2520m grads-heat-map: 1.96x speedup
1722 pnv firefox-canvas: 1.92x speedup
1723 ion firefox-particles: 1.80x speedup
1724 image poppler-reseau: 1.77x speedup
1725 pnv xfce4-terminal-a1: 1.72x speedup
1726 image firefox-talos-svg: 1.65x speedup
1727 pnv grads-heat-map: 1.63x speedup
1728 i5-2520m firefox-canvas: 1.63x speedup
1729 pnv swfdec-youtube: 1.62x speedup
1730 image ocitysmap: 1.59x speedup
1731 i5-2520m firefox-fishbowl: 1.56x speedup
1732 i5-2520m poppler-reseau: 1.50x speedup
1733 i5-2520m evolution: 1.50x speedup
1734 i5-2520m midori-zoomed: 1.43x speedup
1735 pnv firefox-planet-gnome: 1.42x speedup
1736 i5-2520m firefox-talos-gfx: 1.41x speedup
1737 i5-2520m gvim: 1.41x speedup
1738 pnv ocitysmap: 1.37x speedup
1739 image poppler: 1.31x speedup
1740 ion firefox-canvas-alpha: 1.35x speedup
1741 ion firefox-talos-svg: 1.34x speedup
1742 i5-2520m ocitysmap: 1.32x speedup
1743 pnv poppler-reseau: 1.31x speedup
1744 i5-2520m firefox-planet-gnome: 1.31x speedup
1745 pnv firefox-fishbowl: 1.30x speedup
1746 pnv evolution: 1.28x speedup
1747 image gvim: 1.27x speedup
1748 i5-2520m swfdec-youtube: 1.25x speedup
1749 pnv gnome-terminal-vim: 1.27x speedup
1750 pnv gvim: 1.25x speedup
1751 image firefox-planet-gnome: 1.25x speedup
1752 image swfdec-youtube: 1.25x speedup
1755 And a plethora of minor improvements everywhere!
1758 Snapshot 1.11.2 (2011-01-23)
1759 ===========================
1761 In this first snapshot along the way to cairo-1.12.0, we are very excited
1762 to announce the introduction of Bezier surface gradients, known as type
1763 6/7 gradients in PS/PDF parlance. This is the culmination of much work by
1764 the dynamic duo: Adrian Johnson and Andrea Canciani. Thanks guys!
1766 Also, I want to warmly welcome Uli Schlachter who recently joined the
1767 Cairo community on a mission. That mission is to make cairo-xcb a
1768 supported backend for 1.12. And for this snapshot he has made great
1769 strides in fixing all the bugs I had left behind. Thanks Uli!
1771 And we have also seen a new contributor, Alexandros Frantzis, who has
1772 begun bringing up cairo-gl for GLESv2 devices. Thanks Alex!
1774 And lastly, I must also thank Adrian and Andrea for the vast numbers of
1775 bugs that they have tackled between them, fixing all those little corner
1776 cases that lie hidden until too late.
1780 The ability to construct piece-wise Bezier surface gradients:
1782 cairo_pattern_create_mesh
1784 constructs a pattern of type CAIRO_PATTERN_TYPE_MESH using
1786 cairo_pattern_mesh_begin_patch
1787 cairo_pattern_mesh_end_patch
1788 cairo_pattern_mesh_curve_to
1789 cairo_pattern_mesh_line_to
1790 cairo_pattern_mesh_move_to
1791 cairo_pattern_mesh_set_control_point
1792 cairo_pattern_mesh_set_corner_color_rgb
1793 cairo_pattern_mesh_set_corner_color_rgba
1794 cairo_pattern_mesh_get_patch_count
1795 cairo_pattern_mesh_get_path
1796 cairo_pattern_mesh_get_corner_color_rgba
1797 cairo_pattern_mesh_get_control_point
1799 The introduction of a unique ID accessible via the mime data type:
1800 CAIRO_MIME_TYPE_UNIQUE_ID
1806 Release 1.10.2 (2010-12-25 Chris Wilson <chris@chris-wilson.co.uk>)
1807 ===================================================================
1808 The cairo community is pleased to announce the 1.10.2 release of the
1809 cairo graphics library. This is the first update to cairo's stable 1.10
1810 series and contains a large number of bug fixes.
1812 While many people have contributed and have help to test the release,
1813 2 people deserve special recognition for their efforts in tracking down
1814 and fixing bugs, Andrea Canciani and Adrian Johnson. Thanks to their
1815 tremendous efforts, and of all cairo contributors, it is much
1818 We recommend everyone upgrade to cairo 1.10.2 and hope that everyone
1819 will continue to have lots of fun with cairo!
1826 Fix embedding of grayscale jpegs in PS.
1827 https://bugs.freedesktop.org/show_bug.cgi?id=31632
1829 Fix the reported path of extents containing a curve.
1831 Fix the compositing of unaligned boxes.
1833 Reset the clipper in PDF upon finish.
1835 Fix degenerates arcs to become a degenerate line.
1837 Build support for autoconf 2.67
1839 Fix painting of transformed patterns in PS
1841 Fix the EPS bounding box for PS
1842 https://bugs.freedesktop.org/show_bug.cgi?id=24688
1844 Fix the missing content for EPS
1845 https://bugs.freedesktop.org/show_bug.cgi?id=24688
1847 Fix regression upon changing page size in PS/PDF
1848 https://bugs.freedesktop.org/show_bug.cgi?id=24691
1850 Only use ActualText with PDF-1.5 documents
1852 Fix the bbox for type1 fallbacks.
1854 Reset the color after ending the context in PDF
1855 https://bugs.freedesktop.org/show_bug.cgi?id=31140
1857 Fix the advance of subsetted type1 fonts
1858 https://bugs.freedesktop.org/show_bug.cgi?id=31062
1860 Fix handling of EXTEND_NONE gradients for PDF
1862 Restrict in-place optimisation for a8 image masks with SOURCE
1865 Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
1866 ===================================================================
1867 The cairo community is astounded (and flabbergast) to finally announce
1868 the 1.10.0 release of the cairo graphics library. This is a major update
1869 to cairo, with new features and enhanced functionality which maintains
1870 compatibility for applications written using any previous major cairo
1871 release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
1872 a previous version of cairo upgrade to cairo 1.10.0.
1874 One of the more interesting departures for cairo for this release is the
1875 inclusion of a tracing utility, cairo-trace. cairo-trace generates a
1876 human-readable, replayable, compact representation of the sequences of
1877 drawing commands made by an application. This can be used to inspecting
1878 applications to understand issues and as a means for profiling
1879 real-world usage of cairo.
1881 The traces generated by cairo-trace have been collected in
1883 git://git.cairographics.org/git/cairo-traces
1885 and have driven the performance tuning of cairo over the last couple of
1886 years. In particular, the image backend is much faster with a new
1887 polygon rasterisation and a complete overhaul of the tessellator. Not
1888 only is this faster, but also eliminates visual artifacts from
1889 self-intersecting strokes. Not only has cairo-trace been driving
1890 performance improvements within cairo, but as a repeatable means of
1891 driving complex graphics it has been used to tune OpenGL, DDX, and
1894 Cairo's API has been extended to better support printing, notably
1895 through the ability to include a single compressed representation of an
1896 image for patterns used throughout a document, leading to dramatic file
1897 size reductions. Also the meta-surface used to record the vector
1898 commands compromising a drawing sequence is now exposed as a
1899 CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
1900 larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
1901 subsurface would be as a source glyph in a texture atlas, or as a
1902 restricted subwindow within a canvas.
1904 Cairo's API has also resurrected the RGB16 format from the past as
1905 the prevalence of 16-bit framebuffers has not diminished and is a
1906 fore-taste of the extended format support we anticipate in the future.
1907 Increasing cairo's utility, we introduce the cairo_region_t for handling
1908 sets of pixel aligned rectangles commonly used in graphics applications.
1909 This is a merger of the GdkRegion and the pixman_region_t, hopefully
1910 providing the utility of the former with the speed of the latter.
1912 Furthermore cairo has been reworked to interoperate more closely with
1913 various acceleration architectures, gaining the ability to share
1914 those hardware resources through the new cairo_device_t. For instance,
1915 with the new OpenGL backend that supersedes the Glitz backend, hardware
1916 and rendering operations can be shared between a classic OpenGL
1917 application mixing libVA for the hardware assisted video decode with
1918 cairo for high quality overlays all within the same OpenGL canvas.
1920 Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
1921 Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
1922 Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
1923 Sandmann Pedersen and many others that have contributed over the last
1924 couple of years to cairo. Thank you all!
1926 Snapshot 1.9.14 (2010-07-26)
1927 ============================
1929 A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
1930 we are being to see the results of the stabilisation effort. Clipping bugs
1931 seems to have been the order of the last couple of weeks, with a couple
1932 reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
1933 finding those regressions. At this point all that seems to remain to do is
1934 to fix the outstanding regressions in the PDF backend...
1939 Clip doesn't work for text on the image backend
1940 https://bugs.freedesktop.org/show_bug.cgi?id=29008
1942 Add explicit dependency for cxx
1943 https://bugs.freedesktop.org/show_bug.cgi?id=29114
1945 Fix regressions in reporting clip extents
1946 https://bugs.freedesktop.org/show_bug.cgi?id=29120
1947 https://bugs.freedesktop.org/show_bug.cgi?id=29121
1948 https://bugs.freedesktop.org/show_bug.cgi?id=29122
1949 https://bugs.freedesktop.org/show_bug.cgi?id=29124
1950 https://bugs.freedesktop.org/show_bug.cgi?id=29125
1953 Snapshot 1.9.12 (2010-07-12)
1954 ============================
1956 A couple of weeks spent fixing those annoying bugs and cleaning up the build
1957 system; the list of outstanding tasks to complete for the stable release is
1958 finally shrinking. The chief bug fixer has been Benjamin Otte who not only
1959 made sure that the public API is consistent and being tested for its
1960 consistency, but also ensured that the documentation was up-to-date and
1961 spent time clarifying cases where even the Cairo developers have come
1962 unstuck in the past. Many thanks, Benjamin. However, he was not alone,
1963 as Andrea Canciani continued his fine work in isolating broken corner cases
1964 and proceeding to fix them, and tidying up the quartz backend. And last, but
1965 definitely not least, M Joonas Pihlaja tried building Cairo across a
1966 perverse range of systems and fixed up all the loose bits of code that came
1967 unravelled. Thanks everybody!
1972 cairo_surface_set_mime_data, cairo_surface_get_mime_data:
1974 The length parameter is now an unsigned long (as opposed to an unsigned
1975 int). The parameter is intended to be an equivalent to a size_t without
1976 requiring POSIX types and be large enough to store the size of the
1977 largest possible allocation.
1979 cairo_gl_surface_create_for_texture:
1981 This a new surface constructor for cairo-gl that explicitly enables
1982 render-to-texture for foreign, i.e. application, textures.
1984 cairo_region_xor, cairo_region_xor_rectangle
1986 A couple of utility routines add to the region handling interface for
1987 the purpose of replacing existing GdkRegion functionality.
1992 https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
1994 Inkscape was caught in the act of attempting to modify a finished surface.
1995 Unfortunately, we had the ordering of our guards and assertions wrong and
1996 so an ordinary application error was triggering an assert in Cairo. This
1997 lead Benjamin to add a test case to ensure that the entire public API
1998 could handle erroneous input and then proceeded to fix a whole slew of
2002 https://bugs.freedesktop.org/show_bug.cgi?id=28888
2004 A regression introduced by the special casing of uploading images to an
2005 xlib surface in-place which was ignoring the translation applied to the
2009 Snapshot 1.9.10 (2010-06-26)
2010 ============================
2012 The first "quick" snapshot in the run up to the stable release. The
2013 last snapshot was picked up by the bleeding edge distributions and so the
2014 bug reports have to started to roll in. The most frequent of these are the
2015 introduction of rendering errors by applications that modify a surface
2016 without subsequently calling cairo_surface_mark_dirty(). Make sure the
2017 application developers are aware of increased reliance on strict use of the
2018 Cairo API before 1.10 is released!
2020 The usual slew of bugs reported and we would like to thank Zoxc for
2021 contributing the WGL interface for cairo-gl, and finding more build
2022 failures on win32. And it just wouldn't be a 1.9 snapshot unless
2023 Benjamin Otte improved the error handling within cairo-gl, as well as
2024 isolating and fixing some more errors in the test suite. The biggest bug of
2025 the snapshot turned out to be a major sign extension issue that had lain
2026 hidden for many years and was suddenly exposed by incorrectly rounding
2027 rectangles when performing non-antialiased rendering. Also to the relief
2028 of many we have included the downstream patch to honour the user's LCD
2029 filtering preferences for subpixel rendering of fonts. The interface
2030 remains private for the time being, whilst the proposed public API is
2037 Snapshot 1.9.8 (2010-06-12)
2038 ===========================
2040 One major API changes since the last snapshot, and a whole slew of bugs
2041 fixed and inconsistencies eliminated. Far too many bugs fixed to
2042 individually identify. We need to thank Benjamin Otte for his fantastic
2043 work on the cairo-gl backend making it faster and more robust, Andrea
2044 Canciani for finding so many bugs and developing test cases for them, as
2045 well fixing them. And last but not least we must all thank Adrian Johnson for
2046 continuing to eliminate bugs and improving the PostScript and PDF backends.
2048 This snapshot represents almost 4 months of bug fixing, bringing Cairo to
2049 a point where we consider it almost ready to be a candidate for release.
2050 There are a few known bugs left to be fixed, being tracked in
2051 https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
2052 whirl and report any regressions. The plan is to release a new snapshot
2053 every other week leading to a 1.10 release with a target date of
2058 CAIRO_FORMAT_RGB16_565
2060 16 bit devices still remain popular, and so with great demand,
2061 CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
2062 and use 16 bit images as sources and render targets.
2064 cairo_surface_create_for_rectangle()
2066 It is common practice to cut an image up into many smaller pieces and use
2067 each of those as a source - a technique called texture atlasing.
2068 cairo_surface_create_for_rectangle() extends Cairo to directly support use
2069 of these subregions of another cairo_surface_t both as a source and as a
2072 cairo_region_create()
2073 cairo_region_create_rectangle()
2074 cairo_region_create_rectangles()
2076 cairo_region_reference()
2077 cairo_region_destroy()
2078 cairo_region_equal()
2079 cairo_region_status()
2080 cairo_region_get_extents()
2081 cairo_region_num_rectangles()
2082 cairo_region_get_rectangle()
2083 cairo_region_is_empty()
2084 cairo_region_contains_rectangle()
2085 cairo_region_contains_point()
2086 cairo_region_translate()
2087 cairo_region_subtract()
2088 cairo_region_subtract_rectangle()
2089 cairo_region_intersect()
2090 cairo_region_intersect_rectangle()
2091 cairo_region_union()
2092 cairo_region_union_rectangle()
2094 The Cairo region API was actually added a couple of snapshots ago, but we
2095 forgot to mention it at the time. A simple API for the handling of
2096 rectangular pixel-aligned regions by Soeren Sandmann.
2099 Backend-specific improvements
2100 -----------------------------
2103 Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
2104 backend, reducing a lot of code duplication and enabled him to begin working
2105 on improving performance by reducing state changes and associated overhead.
2109 Access to the underlying connection to the Display is now thread-safe
2110 enabling cairo-xlib to be used in a multi-threaded application without fear
2111 of random corruption. Thanks Benjamin Otte!
2113 cairo-xlib will now attempt to use PolyModeImprecise when compositing
2114 trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
2115 should allow hardware drivers more scope for accelerating the operation at
2116 the cost of potentially incurring minute rendering errors. The mode can be
2117 forced back to PolyModePrecise by setting the antialias parameter to
2118 CAIRO_ANTIALIAS_SUBPIXEL.
2122 A notable improvement was contributed by Alexander Shulgin to enable SVG to
2123 reference external image through the use an extended MIME data type.
2125 Snapshot 1.9.6 (2010-02-19)
2126 ===========================
2131 The device is a generic method for accessing the underlying interface
2132 with the native graphics subsystem, typically the X connection or
2133 perhaps the GL context. By exposing a cairo_device_t on a surface and
2134 its various methods we enable finer control over interoperability with
2135 external interactions of the device by applications. The use case in
2136 mind is, for example, a multi-threaded gstreamer which needs to serialise
2137 its own direct access to the device along with Cairo's across many
2140 Secondly, the cairo_device_t is a unifying API for the mismash of
2141 backend specific methods for controlling creation of surfaces with
2142 explicit devices and a convenient hook for debugging and introspection.
2144 The principal components of the API are the memory management of:
2146 cairo_device_reference(),
2147 cairo_device_finish() and
2148 cairo_device_destroy();
2150 along with a pair of routines for serialising interaction:
2152 cairo_device_acquire() and
2153 cairo_device_release()
2155 and a method to flush any outstanding accesses:
2157 cairo_device_flush().
2159 The device for a particular surface may be retrieved using:
2161 cairo_surface_get_device().
2163 The device returned is owned by the surface.
2165 API changes (to API new in the cairo 1.9.x series)
2166 --------------------------------------------------
2167 cairo_recording_surface_create()
2168 cairo_recording_surface_ink_extents()
2170 These are the replacement names for the functions previously named
2171 cairo_meta_surface_create and cairo_meta_surface_ink_extents.
2173 cairo_surface_set_mime_data
2175 This interface is now changed such that the MIME data will be
2176 detached if the surface is modified at all. This guarantees that
2177 the MIME data will not become out of synch due to surface
2178 modifications, and also means that for the MIME data to be useful,
2179 it must be set after all modifications to the surface are
2182 API removal (of experiment API)
2183 -------------------------------
2184 The cairo-glitz backend is removed entirely, (in favor of the new
2185 cairo-gl backend). See below for more on cairo-gl.
2190 Many improvements for drawing of dashed strokes
2192 Fix incorrect handling of negative offset
2193 Faster computation of first dash (avoids near-infinite looping)
2194 Approximate extremely fine dash patterns with appropriate alpha value
2196 Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
2198 Backend-specific improvements
2199 -----------------------------
2202 This is a new, direct-rendering backend that supports Intel graphics
2203 chipsets in the i915 and i965 families. It's still experimental and
2204 will likely remain that way for a while. It's already got extremely
2205 good performance on the hardware it supports, so if nothing else
2206 provides a working proof and performance target for the cairo-gl
2207 work for Intel graphics.
2211 Start using GLSL to accelerate many operations. Many thanks to Eric
2212 Anholt and T. Zachary Laine for this work. For the first time, we
2213 have what looks like what will be a very compelling OpenGL-based
2214 backend for cairo (in terms of both quality and performance).
2216 See this writeup from Eric for more details on recent progress of
2217 cairo-gl (which he presented at FOSDEM 2010):
2219 http://anholt.livejournal.com/42146.html
2223 The image backend is made dramatically faster (3-5 times faster for
2224 benchmarks consisting primarily of glyph rendering).
2228 Many fixes from Robert O'Callahan and Andrea Canciani including:
2230 Fixed gradient pattern painting
2231 Improved A8 image handling
2232 Fixes for "unbounded" and other compositing operators
2236 Improvements to embedding of JPEG and JPEG2000 data.
2240 Fix printing of rotated user fonts.
2242 Snapshot 1.9.4 (2009-10-15)
2243 ===========================
2246 cairo_meta_surface_create()
2247 cairo_meta_surface_ink_extents()
2249 Finally exporting the internal meta-surface so that applications
2250 have a method to record and replay a sequence of drawing commands.
2254 Determines whether a given point is inside the current clip.
2255 ??? Should this be called cairo_in_paint() instead? in-clip is the test
2256 that is performed, but in-paint would be similar to in-fill and in-stroke.
2262 A companion to cairo-perf-trace, this utility replays a trace against
2263 multiple targets in parallel and looks for differences in the output,
2264 and then records any drawing commands that cause a failure.
2266 Further minimisation of the fail trace using "delta debugging".
2267 More control over test/reference targets.
2269 Backend improvements:
2273 Server-side gradients. The theory is that we can offload computation
2274 of gradients to the GPU and avoid pushing large images over the
2275 connection. Even if the driver has to fallback and use pixman to render
2276 a temporary source, it should be able to do so in a more efficient manner
2277 than Cairo itself. However, cairo-perf suggests otherwise:
2279 On tiny, Celeron/i915:
2281 before: firefox-20090601 211.585
2282 after: firefox-20090601 270.939
2284 and on tiger, CoreDuo/nvidia:
2286 before: firefox-20090601 70.143
2287 after: firefox-20090601 87.326
2289 In particular, looking at tiny:
2291 xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
2293 xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
2297 New experimental backends:
2301 OpenVG - The initial work was done by Øyvind Kolås, and made ready for
2302 inclusion by Pierre Tardy.
2304 OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
2305 directed rendering using OpenGL at a high-level into Cairo. In
2306 contrast to the previous attempt using Glitz which tried to
2307 implement the RENDER protocol on top of OpenGL, using the
2308 high-level interface should permit greater flexibility and
2309 more offloading onto the GPU.
2310 The initial work on the backend was performed by Eric Anholt.
2312 Long standing bugs fixed:
2314 Self-intersecting strokes.
2316 A long standing bug where the coverage from overlapping semi-opaque
2317 strokes (including neighbouring edges) was simply summed in lieu of
2318 a costly global calculation has been fixed (by performing the costly
2319 global calculation!) In order to mitigate the extra cost, the
2320 tessellator has been overhauled and tune, which handles the fallback
2321 for when we are unable to use the new span rasteriser on the stroke
2322 (e.g. when using the current RENDER protocol). The large number of
2323 pixel artifacts that implementing self-intersection elimination
2324 removes is ample justification for the potential performance
2325 regression. If you unfortunately do suffer a substantial performance
2326 regression in your application, please consider obtaining a
2327 cairo-trace and submitting it to us for analysis and inclusion into
2328 our performance suite.
2332 To the AuroraUX team for providing access to one of their OpenSolaris
2333 machines for cairo and pixman development. http://www.auroraux.org/
2335 Snapshot 1.9.2 (2009-06-12)
2336 ===========================
2339 cairo_surface_set_mime_data()
2340 cairo_surface_get_mime_data()
2342 Should this take unsigned int, unsigned long or size_t for the length
2343 parameter? (Some datasets may be >4GiB in size.)
2345 Associate an alternate, compressed, representation for a surface.
2347 "image/jp2" (JPEG2000) is understood by PDF >= 1.5
2348 "image/jpeg" is understood by PDF,PS,SVG,win32-printing.
2349 "image/png" is understood by SVG.
2352 cairo_pdf_surface_restrict_to_version()
2353 cairo_pdf_get_versions()
2354 cairo_pdf_version_to_string()
2356 Similar to restrict to version and level found in SVG and PS,
2357 these limit the features used in the output to comply with the PDF
2358 specification for that version.
2360 CAIRO_STATUS_INVALID_SIZE
2361 Indicates that the request surface size is not supported by the
2362 backend. This generally indicates that the request is too large.
2364 CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
2365 Indicates that a required callback for a user-font was not implemented.
2367 CAIRO_STATUS_LAST_STATUS
2368 This is a special value to indicate the number of status values enumerated
2369 at compile time. (This may differ to the number known at run-time.)
2371 The built-in twin font is now called "@cairo:" and supports a limited set
2372 of options like "@cairo:mono". Where are these specified?
2374 cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
2376 New experimental backends:
2382 cairo-trace and cairo-perf-trace
2384 cairo-trace generates a human-readable, replayable, compact(-ish!)
2385 representation of the sequences of drawing commands made by an
2388 Under the util/cairo-script directory is a library to replay traces.
2390 perf/cairo-perf-trace replays traces against multiple backends
2391 and makes useful benchmark reports. This is integrated with
2392 'make perf'. You may collect your own traces or take advantage
2393 of traces collected by the community:
2395 git://git.cairographics.org/git/cairo-traces
2397 (Put this into perf/cairo-traces to run these as part of "make perf".)
2399 There is additional WIP in building a debugging tool for cairo applications
2400 based on CairoScript (currently very preliminary, mostly serves to show
2401 that GtkSourceView is too slow) :
2403 people.freedesktop.org:~ickle/sphinx
2405 Test suite overhaul:
2407 The test suite is undergoing an overhaul, primarily to improve its speed
2408 and utility. (Expect more changes in the near future to improve XFAIL
2412 polygon rasterisation! Joonas implemented the Tor polygon scan converter,
2413 on typical geometry is about 30% faster for the image backend.
2415 Bovine Polaroids! For those not in on the joke, this is the long
2416 awaited "copy-on-write snapshot" or "COW snapshot" support. The
2417 user-visible feature is that including the same image multiple times
2418 into a PDF file should result in only a single instance of that
2419 image in the final output. This is unlike previous versions of cairo
2420 which would generate very large PDF files with multiple copies of
2421 the same image. Adrian says that the PDF is not quite working as
2422 well as it should yet, so we hope for further improvements before
2429 Better handling of large scale-factors on image patterns.
2431 Emit /Interpolate for PS,PDF images.
2433 Global glyph cache - cap on the total number of inactive glyphs,
2434 should prove fairer for fonts with larger glyph sets.
2436 Compilation without fontconfig
2438 Improved handling of low-bitdepth sources (e.g. copying the contents
2439 of 16-bit xserver windows)
2443 cairo_traps_extract_region >10x slower. Fix pending.
2447 Region tracking API (ssp) for damage tracking, hit testing etc
2450 An expiremental OpenGL backend?
2452 Tweaks to tessellator, allocations of patterns, delayed
2453 initialisation of the xlib backend (reduce the cairo overhead of
2454 render_bench by ~80%).
2457 Release 1.8.8 (2009-06-16 Chris Wilson <chris@chris-wilson.co.uk>)
2458 ==================================================================
2459 The cairo community is pleased to announce the 1.8.8 release of the
2460 cairo graphics library. This is the fourth update to cairo's stable
2461 1.8 series and contains a small number of bug fixes (in particular a
2462 few corrections to the documentation and a few fixes in the FreeType font
2463 backend). This is being released just over six months after cairo 1.8.6.
2465 We recommend that everyone using cairo upgrade to 1.8.8.
2471 There were reports of incompatibilities with the autotools bundled in with
2472 the 1.8.6 tarball. This release has been built with automake-1.10.2 and
2475 The configure check for FreeType has been improved:
2477 typo in check for version of freetype in configure script
2478 https://bugs.freedesktop.org/show_bug.cgi?id=19283
2480 Compilation on 64-bit MacOS/X fixes:
2482 Cannot build cairo_quartz_font_face_create_for_atsu_font_id on 64-bit Mac OS X
2483 https://bugs.freedesktop.org/show_bug.cgi?id=15702
2487 Uninitialised status return within _cairo_clip_intersect_mask(). This caused
2488 random crashes and general mayhem as an error could be generated causing all
2489 rendering to the context to stop.
2491 Avoid transforming nearly-degenerate matrices into degenerate matrices:
2493 Painting stops in this case, using -moz-transform: scale, rotate and video
2494 https://bugzilla.mozilla.org/show_bug.cgi?id=467423
2496 A few FreeType font handling bugs were fixed:
2498 Rendering with PANGO_GRAVITY_EAST leads to different results with image and pdf
2499 https://bugs.freedesktop.org/show_bug.cgi?id=21985
2501 Don't call FT_Done_Face() on faces we did not create
2503 zombie ft_font_face / ft_unscaled_font mutual referencing problems
2504 https://bugs.freedesktop.org/show_bug.cgi?id=21706
2506 Ensure win32 font backend sets the return value to -1 (indicating the absent
2507 glyph) if the font index lookup for the unicode character fails. And
2508 similarly fix a bug where a fatal error was raised for an invalid glyph.
2510 cairo_scaled_font_glyph_extents breaks with invalid glyph id
2511 https://bugs.freedesktop.org/show_bug.cgi?id=20255
2513 Various improvements to the documentation, reported by Truc Troung:
2515 https://bugs.freedesktop.org/show_bug.cgi?id=20095
2516 https://bugs.freedesktop.org/show_bug.cgi?id=20154
2517 https://bugs.freedesktop.org/show_bug.cgi?id=20180
2518 https://bugs.freedesktop.org/show_bug.cgi?id=20183
2519 https://bugs.freedesktop.org/show_bug.cgi?id=20182
2520 https://bugs.freedesktop.org/show_bug.cgi?id=20441
2523 Release 1.8.6 (2008-12-13 Chris Wilson <chris@chris-wilson.co.uk>)
2524 ==================================================================
2525 The cairo community is pleased to announce the 1.8.6 release of the
2526 cairo graphics library. This is the third update to cairo's stable
2527 1.8 series and contains a small number of bug fixes (in particular a
2528 few fixes for failures of cairo 1.8.4 on Quartz and PDF, and build fixes for
2529 a couple of backends). This is being released just under a month after
2532 We recommend that everyone using cairo upgrade to 1.8.6.
2538 Fix build of DirectFB backend with debugging enabled:
2540 Bug in _cairo_directfb_surface_release_source_image function
2541 https://bugs.freedesktop.org/show_bug.cgi?id=18322
2547 Workaround a mis-compilation of cairo_matrix_invert() that generated invalid
2548 matrices and triggered assertion failures later. The issue was reported by
2551 Invalid computation of the modulus:
2553 https://bugzilla.mozilla.org/show_bug.cgi?id=466258
2555 Invalid referencing of patterns in the Quartz backend:
2557 Failed assertion `CAIRO_REFERENCE_COUNT_HAS_REFERENCE
2558 (&pattern->ref_count)' when using cairo quartz backend
2559 https://bugs.freedesktop.org/show_bug.cgi?id=18632
2561 Invalid references to glyphs after early culling, causing segmentation faults
2564 https://lists.cairographics.org/archives/cairo/2008-December/015976.html
2566 Check for XRender in the XCB backend, or else we may attempt an invalid memory
2569 XCB backend fails with missing render.
2570 https://bugs.freedesktop.org/show_bug.cgi?id=18588
2572 Release 1.8.4 (2008-11-14 Carl Worth <cworth@cworth.org>)
2573 =========================================================
2574 The cairo community is pleased to announce the 1.8.4 release of the
2575 cairo graphics library. This is the second update to cairo's stable
2576 1.8 series and contains a small number of bug fixes, (in particular a
2577 few fixes for build failures of cairo 1.8.2 on various systems). This
2578 is being released just over two weeks after cairo 1.8.2.
2580 We recommend that everyone using cairo upgrade to 1.8.4.
2586 Fix build with older XRender that doesn't define RepeatNone:
2588 Build of xlib backend fails against old XRender (RepeatNone undeclared)
2589 https://bugs.freedesktop.org/show_bug.cgi?id=18385
2591 Fix build with bash version <= 3.0:
2593 doltlibtool broken on linux with bash 3.00.0
2594 https://bugs.freedesktop.org/show_bug.cgi?id=18363
2598 Avoid triggering a bug in X.org server 6.9 resulting in a hung machine
2601 https://bugs.freedesktop.org/show_bug.cgi?id=15628#c2
2603 Fix display of user fonts as exercised by proposed support for type3
2604 fonts in poppler (unsigned promotion fixes):
2606 Use cairo user-font for Type 3 fonts
2607 https://lists.freedesktop.org/archives/poppler/2008-October/004181.html
2609 Avoid miscomputing size of fallback images required when rendering
2610 with CLEAR, IN, or SOURCE operator to vector surfaces, (PS, PDF, SVG,
2613 Be more tolerant of broken fonts when subsetting type1 fonts:
2615 Error handling in cairo_type1_font_subset_get_glyph_names_and_widths
2616 https://lists.cairographics.org/archives/cairo/2008-October/015569.html
2618 Fix cairo_fill_extents, cairo_stroke_extents, cairo_path_extents, to
2619 correctly allow NULL parameters as documented.
2621 Fix potential crash on emitting a type3 glyph after having drawn text
2622 paths from the same font, (for example with cairo_text_path).
2624 Release 1.8.2 (2008-10-29 Carl Worth <cworth@cworth.org>)
2625 =========================================================
2626 The cairo community is pleased to announce the 1.8.2 release of the
2627 cairo graphics library. This is the first update to cairo's stable 1.8
2628 series and contains a large number of bug fixes. It is being released
2629 just over one month since cairo 1.8.0.
2631 This release consists primarily of bug fixes, but there is one notable
2632 new feature, (the ability to build cairo without an external font
2633 backend), and there are a few optimizations as well. See below for
2634 details on these changes and the most important bug fixes.
2636 While many people have contributed to this release, Chris Wilson
2637 deserves particular mention. He has contributed well over twice as
2638 many changes to cairo since 1.8.0 than everyone else combined. We
2639 greatly appreciate the tremendous efforts of Chris and all cairo
2642 We recommend everyone upgrade to cairo 1.8.2 and hope that everyone
2643 will have lots of fun with cairo!
2649 It is now possible to build cairo without any font backend, (such as
2650 freetype, win32 or quartz). This is most useful when the application
2651 provides custom font rendering through the user-font API. But in the
2652 case where no external font backend is available, and no user-font is
2653 provided, cairo will render with a failsafe font, (a stroked font
2654 covering visible ASCII character). (Behdad Esfahbod)
2658 Dramatically speed up compilation with dolt (removes much of the
2659 libtool overhead) (Behdad Esfahbod with thanks to Josh Triplett).
2661 Several minor optimizations to tessellator (special-cased comparisons,
2662 faster insert for skiplist, etc.) (Chris Wilson).
2664 Optimize away fractional translation component when doing
2665 EXTEND_NEAREST filtering, (for better performance).
2669 Allow cloning sub-regions of similar surfaces to fix this bug
2672 Crafted gif file will crash firefox
2673 [XError: 'BadAlloc (insufficient resources for operation)']
2674 https://bugzilla.mozilla.org/show_bug.cgi?id=424333
2676 Fix some matrix confusion to fix this regression (Chris Wilson):
2678 Translucent star exports in a wrong way to PDF
2679 https://bugs.launchpad.net/inkscape/+bug/234546
2681 Fix some long-standing bugs with respect to properly computing the
2682 extents of transformed, filtered surfaces (Owen Taylor, Carl Worth,
2685 Bad clipping with EXTEND_NONE
2686 https://bugs.freedesktop.org/show_bug.cgi?id=15349
2688 Improve filtering handling in cairo-pattern.c
2689 https://bugs.freedesktop.org/show_bug.cgi?id=15367
2691 Many thanks to Chris Wilson for digging out and cleaning up
2694 Fix compilation on Solaris 10 (Chris Wilson):
2696 Cairo requires -DREENTRANT (along with -D_POSIX_THREAD_SEMANTICS)
2697 to compile on Solaris 10 with pthreads
2698 https://bugs.freedesktop.org/show_bug.cgi?id=18010
2700 Fix very old bug causing dashes to be rendered at the wrong length in
2701 fallback images (Adrian Johnson)
2703 Dashed strokes too long in fallback images
2704 https://bugs.freedesktop.org/show_bug.cgi?id=9189
2706 Fix broken dashing when a dashed path starts outside the clip region
2709 Avoid range overflow when computing large patterns (Benjamin Otte and
2712 Avoid crashing due to an invalid font with an incorrect entry in its
2713 CMAP table (Adrian Johnson).
2715 Fix bugs in computing maximum size of text requests that can be sent
2716 with the Render extension, (avoiding potential crashes when rendering
2717 large amounts of text) (Behdad Esfahbod and Chris Wilson).
2719 Fix rendering of operators unbounded by the mask (Chris Wilson).
2721 Fix compilation on systems without compiler support for a native
2722 64-bit type (Chris Wilson).
2724 Fix several cases of missing error-status propagation. (Chris Wilson,
2725 doing the work he seems to never tire of).
2727 Fix several locking issues found with the lockdep valgrind skin (Chris
2730 Backend-specific bug fixes
2731 --------------------------
2732 xlib: Avoid crash due to attempting XRender calls on pixmaps with
2733 formats not supported by the Render extension (Chris Wilson):
2735 XRender crashes due to NULL pointer from Cairo on SGI O2
2736 https://bugs.freedesktop.org/show_bug.cgi?id=11734
2738 xlib: Add support for XImages with depth of 4, 20, 24, or 28 bits
2741 cairo doesn't support 24 bits per pixel mode on X11
2742 https://bugs.freedesktop.org/show_bug.cgi?id=9102
2744 xlib: Avoid mistakenly considering two surfaces as similar just
2745 because their depths match (while their Render formats do not) (Karl
2748 ps: Fix slight mis-scaling of bitmapped fonts (Adrian Johnson)
2750 svg: Correctly emit comp-op for paint, mask, and show_glyphs
2751 operations (Emmanuel Pacaud).
2753 svg: Use finer-grained fallbacks for SVG 1.2 (as PS and PDF backends
2754 have been doing since 1.6.0) (Chris Wilson).
2756 win32: Fallback to DIB if DDB create fails for
2757 cairo_surface_create_similar (Vladimir Vukicevic).
2759 win32: Fix compatibility with Windows Mobile (Vladimir Vukicevic).
2761 win32: Fix static builds to not do __declspec(dllimport) on public
2762 functions. This requires the user to set a CAIRO_WIN32_STATIC_BUILD
2763 environment variable when compiling (Behdad Esfahbod).
2765 Release 1.8.0 (2008-09-25 Carl Worth <cworth@cworth.org>)
2766 =========================================================
2767 The cairo community is happy (and relieved) to announce the 1.8.0
2768 release of the cairo graphics library. This is a major update to
2769 cairo, with new features and enhanced functionality which maintains
2770 compatibility for applications written using any previous major cairo
2771 release, (1.6, 1.4, 1.2, or 1.0). We recommend that anybody using a
2772 previous version of cairo upgrade to cairo 1.8.0.
2774 The dominant theme of this release is improvements to cairo's ability
2775 to handle text. The highlights include a new "user fonts" feature as
2776 well as a new cairo_show_text_glyphs API which allows glyphs to be
2777 embedded in PDF output along with their original text, (for searching,
2778 selection, and copy-and-paste). Another major feature is a revamp of
2779 cairo's build system making it much easier to build cairo on various
2782 See below for more details.
2786 This new API allows the user of cairo API to provide drawings for
2787 glyphs in a font. A common use for this is implementing fonts in
2788 non-standard formats, like SVG fonts and Flash fonts. This API can
2789 also be used by applications to provide custom glyph shapes for fonts
2790 while still getting access to cairo's glyph caches. See
2791 test/user-font.c and test/user-font-proxy.c for usage examples. This
2792 is based on early work by Kristian Høgsberg. Thanks Kristian!
2794 This new API consists of the following functions (and corresponding
2797 cairo_user_font_face_create
2799 cairo_user_font_face_set_init_func
2800 cairo_user_font_face_set_render_glyph_func
2801 cairo_user_font_face_set_text_to_glyphs_func
2802 cairo_user_font_face_set_unicode_to_glyph_func
2804 An additional, new API is
2806 cairo_scaled_font_text_to_glyphs
2808 We were previously reluctant to provide this function as
2809 text-to-glyphs support in cairo was limited to "toy" font
2810 functionality, not really interesting for real-world text
2811 processing. However, with user fonts landing, this API is needed to
2812 expose full access to how user fonts convert text to glyphs. This is
2813 expected to be used by text toolkits like Pango, as well as "proxy"
2814 user-font implementations.
2816 cairo_show_text_glyphs
2817 ----------------------
2818 This new API allows the caller of cairo to provide text data
2819 corresponding to glyphs being drawn. The PDF backend implements this
2820 new API so that complex text can be copied out of cairo's PDF output
2821 correctly and reliably, (assuming the user of cairo calls
2822 cairo_show_text_glyphs). The cairo_show_text_glyphs API is definitely
2823 the most daunting API to debut in cairo. It is anticipated that pango
2824 (and similar high-level text libraries) will be the primary users of
2825 this API. In fact, pango 1.22 already uses cairo_show_text_glyphs.
2826 Behdad was the architect and implementor of this effort. Thanks,
2829 The cairo_show_text_glyphs API includes the following new functions:
2831 cairo_show_text_glyphs
2833 cairo_glyph_allocate
2836 cairo_text_cluster_allocate
2837 cairo_text_cluster_free
2839 cairo_surface_has_show_text_glyphs
2843 The primary goal of the revamp is to make the build system less
2844 fragile, (particularly for non-Linux platforms). For example, now
2845 people building on win32 will no longer need to maintain a
2846 platform-specific list of files to be built. See the new README.win32
2847 for details. Also, the .so file will now be installed with a different
2848 naming scheme, (for example, 1.7.6 will install with a .10800
2849 suffix). Many thanks to Behdad and his small army of helpers!
2851 Assorted API additions
2852 ----------------------
2853 For API completeness, several missing "getter" functions were added:
2855 cairo_scaled_font_get_scale_matrix
2857 cairo_surface_get_fallback_resolution
2859 cairo_toy_font_face_create
2860 cairo_toy_font_face_get_family
2861 cairo_toy_font_face_get_slant
2862 cairo_toy_font_face_get_weight
2864 The new cairo_toy_font_face functions provide access to functionality
2865 and settings provided by cairo_select_font_face(). Thanks Behdad!
2867 cairo-ps/cairo-pdf: More efficient output
2868 -----------------------------------------
2869 Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF
2870 backends, as well making them generate much more compact output by
2871 avoiding things like re-emitting the color or linestyle on every
2872 drawing operation. Thanks Adrian!
2874 cairo-xlib: dithering
2875 ---------------------
2876 Dithering: Cairo now does simple dithering when rendering to legacy X
2877 servers. This is most visible with 8-bit visuals. Thanks Behdad!
2879 cairo-xlib: Avoid rendering glyphs out of surface bounds
2880 --------------------------------------------------------
2881 This seemingly harmless optimization exposed a bug in OpenOffice.org 3
2882 versions where OO.o was passing bogus surface extents to cairo,
2883 resulting in no text rendered in OO.o. Please contact your
2884 distribution's OO.o maintainers if you see this bug and point them to
2887 https://bugs.freedesktop.org/show_bug.cgi?id=16209
2889 cairo-xlib: Improved performance with X server without Render
2890 -------------------------------------------------------------
2891 Cairo now performs better on remote X servers that lack the Render
2892 extension by being smarter about using X core protocol facilities
2893 instead of falling back to doing all rendering on the client side.
2895 cairo-ft: respecting FC_FT_FACE
2896 -------------------------------
2897 Previously it was impossible to instruct cairo to do emboldening on a
2898 font face object created from an FT_Face. Cairo now respects and uses
2899 the FC_FT_FACE fontconfig pattern element, so emboldening can be
2900 achieved by using cairo_ft_font_face_create_for_pattern() and a
2901 carefully crafted pattern using FC_FT_FACE and FC_EMBOLDEN. Thanks
2904 cairo-directfb: backend improvements
2905 ------------------------------------
2906 The directfb backend, though still unsupported, has seen a good deal
2907 of improvements. Thanks Vlad!
2909 Bug fixing and optimizations
2910 ----------------------------
2911 xlib: Faster bookkeeping (Karl Tomlinson)
2912 https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5
2914 PS: Fix gradients with non-constant alpha (Chris Wilson)
2916 Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod)
2917 https://bugs.freedesktop.org/show_bug.cgi?id=16819
2919 Countless other bugs have been fixed and optimizations made, many of
2920 them thanks to Chris Wilson. Thanks Chris and others!
2922 Note also that the code that had been in cairo 1.7.x calling into
2923 freetype's optional lcd_filter function was removed from cairo before
2924 the 1.8.0 release. We do expect this code to come back in some form in
2927 Snapshot 1.7.6 (2008-09-17 Carl Worth <cworth@cworth.org>)
2928 ==========================================================
2929 The cairo community is happy to announce the 1.7.6 snapshot of the
2930 cairo graphics library. This is a "release candidate" for the upcoming
2931 1.8.0 release, so we will greatly appreciate any reports of problems
2932 in this release, and no major changes are currently planned before
2935 Notable changes in 1.7.6
2936 ------------------------
2937 The largest number of changes since 1.7.4 did not change the
2938 implementation of cairo itself, but instead revamped cairo's build
2939 system. The primary goal of the revamp is to make the build system
2940 less fragile, (particularly for non-Linux platforms). For example, now
2941 people building on win32 will no longer need to maintain a
2942 platform-specific list of files to be built. Also, the .so file will
2943 now be installed with a different naming scheme, (for example, 1.7.6
2944 will install with a .10706 suffix). Much thanks, Behdad!
2946 And, as usual, Chris Wilson has made another large round of robustness
2947 improvements, (eliminating dead code, fixing propagation of error
2948 status values, test suite improvements, etc. etc.). Thanks as always,
2951 API changes since 1.7.4
2952 -----------------------
2953 There have been a few changes of API that was new during the 1.7
2956 * Remove cairo_font_options_set_lcd_filter
2957 and cairo_font_options_get_lcd_filter
2959 Motivation: At the Cairo Summit, this API was determined to be too
2960 specific to the freetype font backend to be in the general
2961 API. A similar API with a cairo_ft prefix might be introduced
2962 in the future. Note that cairo will still respect the
2963 corresponding fontconfig settings for these options.
2965 * Replace cairo_has_show_glyphs
2966 with cairo_surface_has_show_glyphs
2968 Motivation: This really is a surface-specific interface, and the
2969 convenience function on the cairo_t is not obviously
2970 necessary. An application can easily call:
2972 cairo_surface_has_show_glyphs (cairo_get_target (cr));
2976 * Add cairo_text_cluster_flags_t
2977 to cairo_show_text_glyphs
2978 cairo_scaled_font_text_to_glyphs
2979 cairo_user_scaled_font_text_to_glyphs_func_t
2981 Motivation: This flag, (and specifically the
2982 CAIRO_TEXT_CLUSTER_FLAG_BACKWARD value), replaces the
2983 cairo_bool_t backward argument in each of the above
2984 interfaces. This leads to more readable user code, and also
2985 allows future extensibility.
2987 As always, there are no changes to any API from any major cairo
2988 release, (1.0.x, 1.2.x, 1.4.x, 1.6.x). Cairo maintains the same
2989 compatibility promise it always has.
2991 Bug fixes since 1.7.4
2992 ---------------------
2993 xlib: Faster bookkeeping (Karl Tomlinson)
2994 https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5
2996 PS: Fix gradients with non-constant alpha (Chris Wilson)
2998 Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod)
2999 https://bugs.freedesktop.org/show_bug.cgi?id=16819
3001 Several other minor fixes.
3003 Snapshot 1.7.4 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>)
3004 ===============================================================
3005 The cairo community is embarrassed to announce availability of the 1.7.4
3006 snapshot of the cairo graphics library. This is a followup release to the
3007 1.7.2 snapshot to ship a tarball that can actually be built. The only
3008 change since 1.7.4 is including the missing header file
3009 cairo-user-font-private.h in the distribution.
3011 Snapshot 1.7.2 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>)
3012 ===============================================================
3013 The cairo community is finally ready to announce availability of the 1.7.2
3014 snapshot of the cairo graphics library. This is embarrassingly the first
3015 snapshot in the 1.7 unstable series of cairo, leading to the eventual release
3016 of cairo 1.8, currently planned for late September.
3018 This snapshot comes four months after the 1.6.4 release. We have done a
3019 really bad job on getting development snapshots out this cycle, but
3020 hopefully all the API changes for 1.8 are now finished and the remaining
3021 weeks will be spent on bug-fixing. There is more than 400 commits worth
3022 of changes in this snapshot, and those can use some testing. Read on!
3024 Text, text, and more text!
3025 --------------------------
3026 The dominant theme of this release, and 1.8 in general, is improvements
3027 around cairo text API. Here is a high-level list of changes with text
3032 This is new API allowing the user of cairo API to provide drawings for glyphs
3033 in a font. This is most useful in implementing fonts in non-standard formats,
3034 like SVG fonts and Flash fonts, but can also be used by games and other
3035 applications to draw "funky" fonts. See test/user-font.c and
3036 test/user-font-proxy.c for usage examples. This is based on early work by
3037 Kristian Høgsberg. Thanks Kristian!
3041 This new API allows the caller of cairo to mark text glyphs with their
3042 original text. The PDF backend implements this new API and latest Pango
3043 master uses it. The result is (when bugs are fixed) that complex text can be
3044 copied out of pangocairo's PDF output correctly and reliably. There are bugs
3045 to fix though. A few poppler bugs, and some more in cairo and pango.
3047 To test show_text_glyph, just grab pango master and this cairo snapshot and
3048 print text in gedit. Open in acroread or evince, select all, copy, paste
3049 in gedit and compare. The Arabic text with diacritic marks is particularly
3050 showing bad. Try with pango/pango-view/HELLO.txt if you are brave
3051 enough. The Indic text is showing improvements, but is still coming out
3054 LCD subpixel filtering using FreeType
3055 -------------------------------------
3056 FreeType 2.3.5 added support for various LCD subpixel filtering, and
3057 fontconfig 2.6.0 added support for configuring LCD filter on a font by font
3058 basis. Cairo now relies on FreeType and fontconfig for subpixel filtering.
3059 This work is based on David Turner's original patch to cairo, maintained
3060 and tested by Sylvain Pasche and others. Thanks all!
3062 Toy font face constructor and getter
3063 ------------------------------------
3064 Mostly for API completion, but also useful for higher level (like Pango) to
3065 hook into what the user has set using cairo_select_font_face(), making that
3066 toy API a bit more useful.
3068 FreeType: respecting FC_FT_FACE
3069 -------------------------------
3070 Previously it was impossible to instruct cairo to do emboldening on a font
3071 face object created from an FT_Face. Cairo now respects and uses the
3072 FC_FT_FACE fontconfig pattern element, so emboldening can be achieved by
3073 using cairo_ft_font_face_create_for_pattern() and a carefully crafted pattern
3074 using FC_FT_FACE and FC_EMBOLDEN.
3077 PS/PDF: More efficient output
3078 -----------------------------
3079 Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF
3080 backends, as well making them generate much more compact output by avoiding
3081 things like re-emitting the color or linestyle on every drawing operation.
3087 Cairo now does simple dithering when rendering to legacy X servers. This is
3088 mostly visible with 8-bit visuals.
3090 Xlib: Avoid rendering glyphs out of surface bounds
3091 --------------------------------------------------
3092 This seemingly harmless change manifested a bug with OpenOffice.org 3 versions
3093 where OO.o was passing bogus surface extents to cairo, resulting in no text
3094 rendered in OO.o. Please contact your distro's OO.o maintainers if you see
3095 this bug and point them to the following URL:
3097 https://bugs.freedesktop.org/show_bug.cgi?id=16209
3099 Xlib: Improved performance with Xrender-less X servers
3100 ------------------------------------------------------
3101 Cairo now performs better on remote, Xrender-less X servers by being smarter
3102 about using X core protocol facilities instead of falling back to doing all
3103 rendering on the client side.
3106 Directfb: backend improvements
3107 ------------------------------
3108 The directfb backend, though still unsupported, has seen a good deal of
3109 improvements. Thanks Vlad!
3112 Bug fixing and optimizations
3113 ----------------------------
3114 Countless bugs have been fixed and optimizations made, many of them thanks to
3115 Chris Wilson. Thanks Chris!
3121 cairo_show_text_glyphs
3123 This is a new text rendering API. Being a more advanced version of
3124 cairo_show_glyphs(), it is aimed for use by higher-level text toolkits like
3125 Pango, and enables better text extraction from output generated by backends
3126 like PDF and SVG. The PDF backend already implements it, and the upcoming
3127 Pango release will use it.
3129 To make that API work, a bunch of other additions were made:
3131 cairo_glyph_allocate
3133 cairo_text_cluster_t
3134 cairo_text_cluster_allocate
3135 cairo_text_cluster_free
3136 cairo_surface_has_show_text_glyphs
3139 cairo_user_font_face_create
3141 This is the "user" font face constructor, accompanied by a variety of method
3142 signatures, getters, and setters for a callback-based font backend:
3144 CAIRO_FONT_TYPE_USER
3145 cairo_user_scaled_font_init_func_t
3146 cairo_user_scaled_font_render_glyph_func_t
3147 cairo_user_scaled_font_text_to_glyphs_func_t
3148 cairo_user_scaled_font_unicode_to_glyph_func_t
3149 cairo_user_font_face_set_init_func
3150 cairo_user_font_face_set_render_glyph_func
3151 cairo_user_font_face_set_text_to_glyphs_func
3152 cairo_user_font_face_set_unicode_to_glyph_func
3153 cairo_user_font_face_get_init_func
3154 cairo_user_font_face_get_render_glyph_func
3155 cairo_user_font_face_get_text_to_glyphs_func
3156 cairo_user_font_face_get_unicode_to_glyph_func
3159 cairo_scaled_font_text_to_glyphs
3161 We were previously reluctant to provide this function as text-to-glyphs
3162 support in cairo was limited to "toy" font functionality, not really
3163 interesting for real-world text processing. However, with user-fonts
3164 landing, this API is needed to expose full access to how user-fonts
3165 convert text to glyphs. This is expected to be used by text toolkits like
3166 Pango, as well as "proxy" user-font implementations.
3170 cairo_font_options_set_lcd_filter
3171 cairo_font_options_get_lcd_filter
3173 These add the possibility to choose between various available LCD subpixel
3174 filters. The available filter values are modelled after what FreeType
3178 cairo_toy_font_face_create
3179 cairo_toy_font_face_get_family
3180 cairo_toy_font_face_get_slant
3181 cairo_toy_font_face_get_weight
3183 These provide access to functionality and settings provided by
3184 cairo_select_font_face().
3187 cairo_scaled_font_get_scale_matrix
3188 cairo_surface_get_fallback_resolution
3190 For API completeness.
3193 Various new values for cairo_status_t enum
3198 - Type3 fonts generated by cairo's PDF backend may show up in poppler/Evince
3199 in a different color than expected. This is fixed in poppler master branch.
3200 This mostly affects cairo user fonts. The test case test/user-font.c
3203 - User fonts using other fonts in their rendering are currently embedded in
3204 PDF as fallback bitmap glyphs. This will be (hopefully) fixed before 1.8.
3205 The test case test/user-font-proxy.c demonstrates this.
3208 Release 1.6.4 (2008-04-11 Carl Worth <cworth@cworth.org>)
3209 =========================================================
3210 The cairo community is wildly embarrassed to announce the 1.6.4
3211 release of the cairo graphics library. This release reverts the xlib
3212 locking change introduced in 1.6.4, (and the application crashes that
3213 it caused). The community would be glad to sack its current release
3214 manager and is accepting applications for someone who could do the job
3215 with more discipline.
3217 Revert 'add missing locking in cairo-xlib'
3218 ------------------------------------------
3219 This change was introduced in cairo 1.6.2, but also introduced a bug
3220 which causes many cairo-xlib applications to crash, (with a
3221 segmentation fault inside of XSetClipMask). Instead of attempting
3222 another fix for the broken fix, the change in 1.6.2 has been
3223 reverted. The original bug which the change was addressing has been
3224 present since at least cairo 1.4, so it is not expected that leaving
3225 this bug unfixed will cause any new problems for applications moving
3226 from cairo 1.4 to cairo 1.6.
3228 At this point, the code of cairo 1.6.4 differs from cairo 1.6.0 only
3229 in the fix for the PostScript-printer crashes.
3231 Tweak build to avoid linking with g++
3232 -------------------------------------
3233 Cairo 1.6.4 avoids a quirk in automake that was causing the cairo
3234 library to be linked with g++ and linked against libstdc++ even when
3235 only C source files were compiled for the library.
3237 Release 1.6.2 (2008-04-11 Carl Worth <cworth@cworth.org>)
3238 =========================================================
3239 The cairo community is pleased (but somewhat sheepish) to announce the
3240 1.6.2 release of the cairo graphics library. This is an update to
3241 yesterday's 1.6.0 release with an important fix to prevent cairo's
3242 PostScript output from crashing some printers. This release also
3243 includes a locking fix for cairo's xlib backend to improve thread
3244 safety. There are no changes beyond these two fixes.
3246 Fix for PostScript printer crash
3247 --------------------------------
3248 Adrian Johnson discovered that cairo 1.6.0 was being a bit hard on
3249 PostScript printers, by changing the font matrix very frequently. This
3250 causes some PostScript interpreters to allocate new font objects every
3251 few glyphs, eventually exhausting available resources. The fix
3252 involves leaving translational components of the font matrix as zero,
3253 so that the PostScript interpreter sees an identical font matrix
3254 repeatedly, and can more easily share internal font object resources.
3256 This fix has been tested to resolve the bugs posted here, (for both
3257 Xerox and Dell printers):
3259 Printing some PDFs from evince is crashing our Xerox printer
3260 https://bugs.freedesktop.org/show_bug.cgi?id=15348
3262 Cairo-generated postscript blocks Dell 5100cn
3263 https://bugs.freedesktop.org/show_bug.cgi?id=15445
3265 Add missing locking in cairo-xlib
3266 ---------------------------------
3267 Chris Wilson noticed that cairo 1.6.0 was manipulating an internal
3268 cache of GC object within cairo's Xlib backend without proper
3269 locking. The missing locking could cause failures for multi-threaded
3270 applications. He fixed this in 1.6.2 by adding the missing locks.
3272 Release 1.6.0 (2008-04-10 Carl Worth <cworth@cworth.org>)
3273 =========================================================
3274 The cairo community is quite pleased to announce the 1.6.0 release of
3275 the cairo graphics library. This is a major update to cairo, with new
3276 features and enhanced functionality which maintains compatibility for
3277 applications written using cairo 1.4, 1.2, or 1.0. We recommend that
3278 anybody using a previous version of cairo upgrade to cairo 1.6.0.
3280 The most significant new features in this release are dramatically
3281 improved PDF and PostScript[*] output, support for arbitrary X server
3282 visuals (including PseudoColor), a new Quartz backend, and and a new
3283 "win32 printing" backend. See below for more details on these and
3286 New dependency on external pixman library (Thanks, Søren!)
3287 ----------------------------------------------------------
3288 As of cairo 1.6, cairo now depends on the pixman library, for which
3289 the latest release can be obtained alongside cairo:
3291 https://cairographics.org/releases/pixman-0.10.0.tar.gz
3293 This library provides all software rendering for cairo, (the
3294 implementation of the image backend as well as any image fallbacks
3295 required for other backends). This is the same code that was
3296 previously included as part of cairo itself, but is now an external
3297 library so that it can be shared by both cairo and by the X server,
3298 (which is where the code originated).
3300 Improved PDF, PostScript, and SVG output (Thanks, Adrian!)
3301 ----------------------------------------------------------
3302 Users of the cairo-pdf, cairo-ps, and cairo-svg should see a dramatic
3303 improvement from cairo 1.2/1.4 to 1.6. With this release there are now
3304 almost no operations that will result in unnecessary rasterization in
3305 the PDF and PostScript. Rasterized "image fallbacks" are restricted
3306 only to minimal portions of the document where something is being
3307 drawn with cairo that is beyond the native capabilities of the
3308 document, (this is rare for PDF or SVG, but occurs when blending
3309 translucent objects for PostScript).
3311 This means that the final output will be of higher quality, and will
3312 also be much smaller, and therefore will print more quickly. The
3313 machinery for doing analysis and minimal fallbacks also benefits the
3314 win32-printing surface described below.
3316 In addition to doing less rasterization, the PostScript and PDF output
3317 also has several other improvements to make the output more efficient
3318 and more compatible with specifications.
3320 [*] Note: Just before this release, a bug has been reported that the
3321 PostScript output from cairo can crash some printers, (so far the
3322 following models have been reported as problematic Xerox Workcentre
3323 7228 or 7328 and Dell 5100cn). We will implement a workaround as soon
3324 as we can learn exactly what in cairo's output these printers object
3325 to, (and we could use help from users that have access to misbehaving
3326 printers). This bug is being tracked here:
3328 Printing some PDFs from evince is crashing our Xerox printer
3329 https://bugs.freedesktop.org/show_bug.cgi?id=15348
3331 New support for arbitrary X server visuals (Thanks, Keith and Behdad!)
3332 ----------------------------------------------------------------------
3333 As of cairo 1.6, cairo should now work with an arbitrary TrueColor or
3334 8-bit PseudoColor X server visual. Previous versions of cairo did not
3335 support these X servers and refused to draw anything. We're pleased to
3336 announce that this limitation has been lifted and people stuck with
3337 ancient display systems need no longer be stuck with ancient software
3338 just because of cairo.
3340 New, supported Quartz backend for Mac OS X (Thanks, Brian and Vladimir!)
3341 ------------------------------------------------------------------------
3342 As of cairo 1.6, the cairo-quartz backend is now marked as "supported"
3343 rather than "experimental" as in previous cairo releases. Its API now
3344 has guarantees of API stability into future cairo releases, and its
3345 output quality is comparable to other backends. There have been
3346 significant improvements to cairo-quartz since 1.4. It now uses many
3347 fewer image fallbacks, (meaning better performance), and has greatly
3348 improved text rendering.
3350 New, "win32 printing" backend (Thanks, Adrian and Vladimir!)
3351 ------------------------------------------------------------
3352 A new win32-printing surface has been added with an interface very
3353 similar to the original win32 surface, (both accept an HDC
3354 parameter). But this new surface should only be called with a printing
3355 DC, and will result in all drawing commands being stored into a
3356 meta-surface and emitted after each page is complete. This allows
3357 cairo to analyze the contents, (as it does with PDF, PostScript, and
3358 SVG backends), and to do minimal image-based fallbacks as
3359 necessary. The analysis keeps things as efficient as possible, while
3360 the presence of fallbacks, (when necessary), ensure the consistent,
3361 high-quality output expected from cairo.
3363 Robustness fixes (Thanks, Chris!)
3364 ---------------------------------
3365 There has been a tremendous number of improvements to cairo's
3366 robustness. Areas that have been improved include:
3368 * Proper reporting of errors
3370 * Responding correctly to invalid input
3372 * Avoiding integer overflows
3374 * Avoiding memory leaks on error-recovery paths
3376 * Making reference counting thread safe
3378 * Exhaustive testing of memory allocation points
3380 Other fixes (Thanks, everybody!)
3381 --------------------------------
3382 Cairo's internal fixed-point representation has been changed from
3383 16.16 to 24.8. This has a direct impact on applications as it allows
3384 much larger objects to be drawn before internal limits in cairo make
3385 the drawing not work.
3387 The CAIRO_EXTEND_PAD mode is now fully supported by surface
3388 patterns. This mode allows applications to use cairo_rectangle and
3389 cairo_fill to draw scaled images with high-quality bilinear filtering
3390 for the internal of the image, but without any objectionably blurry
3391 edges, (as would happen with the default EXTEND_NONE and cairo_paint).
3393 Rendering with CAIRO_ANTIALIAS_NONE has been fixed to be more
3394 predictable, (previously image rendering and geometry rendering would
3395 be slightly misaligned with respect to each other).
3397 The reference manual at https://cairographics.org/manual now documents
3398 100% of the functions and types in cairo's public API.
3402 Several small features have been added to cairo with new API functions:
3404 cairo_format_stride_for_width
3406 Must be called to compute a properly aligned stride value before
3407 calling cairo_image_surface_create_for_data.
3409 cairo_has_current_point
3411 Allows querying if there is a current point defined for the
3416 Allows querying for path extents, (independent of any fill or
3419 cairo_surface_copy_page
3420 cairo_surface_show_page
3422 Allow beginning a new document page without requiring a cairo_t
3425 cairo_ps_surface_restrict_to_level
3427 cairo_ps_level_to_string
3428 cairo_ps_surface_set_eps
3430 Allow controlling the Post PostScript level, (2 or 3), to
3431 target, as well as to generate Encapsulated PostScript (EPS).
3433 cairo_quartz_font_face_create_for_cgfont
3435 Create a quartz-specific cairo_font_face_t from a CGFontRef.
3437 cairo_win32_font_face_create_for_logfontw_hfont
3439 Create a win32-specific cairo_font_face from a LOGFONTW and an
3444 I've accounted for 32 distinct people with attributed code added to
3445 cairo between 1.4.14 and 1.6.0, (their names are below). That's an
3446 impressive number, but there are certainly dozens more that
3447 contributed with testing, suggestions, clarifying questions, and
3448 encouragement. I'm grateful for the friendships that have developed as
3449 we have worked on cairo together. Thanks to everyone for making this
3452 Adrian Johnson, Alp Toker, Antoine Azar, Behdad Esfahbod,
3453 Benjamin Otte, Bernardo Innocenti, Bertram Felgenhauer,
3454 Boying Lu, Brian Ewins, Carl Worth, Chris Heath, Chris Wilson,
3455 Claudio Ciccani, Emmanuel Pacaud, Jeff Muizelaar, Jeremy Huddleston,
3456 Jim Meyering, Jinghua Luo, Jody Goldberg, Jonathan Gramain,
3457 Keith Packard, Ken Herron, Kouhei Sutou, Kristian Høgsberg,
3458 Larry Ewing, Martin Ejdestig, Nis Martensen, Peter Weilbacher,
3459 Richard Hult, Shailendra Jain, Søren Sandmann Pedersen,
3462 Snapshot 1.5.20 (2008-04-04 Carl Worth <cworth@cworth.org>)
3463 ===========================================================
3464 This is the tenth snapshot in cairo's unstable 1.5 series. It comes
3465 just two days (and only one working day) after the 1.5.18
3466 snapshot. The quick snapshot is due to two embarrassing bugs (both
3467 affecting cairo-xlib) that had been introduced in the 1.5.18
3468 snapshot. The fixes for these are described below along with a few
3469 other fixes, (which hopefully aren't introducing new bugs this time).
3473 Revert fix from 1.5.18 to allow pattern expansion based on the filter
3474 mode. This fix seemed so boring, (the use case it addresses is almost
3475 never used in practice), that it didn't even get mentioned in the
3476 1.5.18 release notes. However, the "fix" happened to break rendering
3477 that is always used resulting in corrupt image rendering in mozilla,
3478 evolution, and probably everything else that uses cairo.
3480 Fix to avoid BadMatch errors in cairo_surface_create_similar. These
3481 were introduced, (inadvertently, of course), as part of the fix in
3482 1.5.18 for creating similar surfaces without the Render
3483 extension. Again, thanks to mozilla, (and Vladimir Vukicevic in
3484 particular), for noticing our mistake.
3488 Correctly handle an in-error surface in
3489 cairo_surface_write_to_png. Previously this function would cause an
3490 assertion failure if you gave it a finished surface. Now it cleanly
3491 returns a CAIRO_STATUS_SURFACE_FINISHED result instead.
3493 Avoid potentially infinite wandering through memory inside
3494 _cairo_hull_prev_valid. Thanks to Jonathan Watt for noticing this
3497 https://bugzilla.mozilla.org/show_bug.cgi?id=306649#c21
3501 Fix generation of "soft" masks made by drawing to a similar surface
3502 and then calling cairo_mask_surface() with it.
3506 Fix for code that uses cairo_mask() on an intermediate surface which
3507 is later passed to cairo_mask_surface().
3509 Snapshot 1.5.18 (2008-04-05 Carl Worth <cworth@cworth.org>)
3510 ===========================================================
3511 This is the ninth snapshot in cairo's unstable 1.5 series. It comes
3512 just 4 days after the 1.5.16 snapshot. We had hoped to not need
3513 another snapshot before the final 1.6.0 release, but several critical
3514 bugs were found and fixed in the last few days, so we thought it
3515 important to let people test the fixes with this snapshot. See below
3520 The README now lists necessary dependencies.
3522 Various graphics state defaults are now documented, (source pattern is
3523 opaque black, line width is 2.0, line join is miter, line cap is butt,
3524 miter limit is 10.0, etc.).
3528 Several cleanups have been made along many error-path returns,
3529 (carefully propagating up the original error status values, cleaning
3530 up memory leaks during error recovery, etc.). This is yet another in
3531 Chris "ickle" Wilson's long series of error-handling cleanups during
3534 Avoid undesired clipping when drawing scaled surface patterns with
3539 Fix emission of 1-bit alpha masks in PDF output.
3541 Fix a bug that would cause glyphs to be misplaced along the Y axis:
3543 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%23474136
3545 Originally, an issue about a crash, but later leading to the
3546 misplaced glyphs issue being discovered.
3550 Fix misplaced glyphs in cairo's PostScript output.
3552 This issue occurs when consecutive glyphs are placed far
3553 apart. This case is exercised by the new ft-show-glyphs-table test
3554 case, which was originally inspired by the Debian bug #23474136
3557 Fix more misplaced glyphs in cairo's PostScript output:
3559 The issue here showed up under very particular circumstance, (when
3560 converting a PDF file with a CFF font with CID Identity-H encoding
3561 and using glyph 0, (defined by the CFF specification as .notdef)
3562 as a space instead). More concretely, this problem appeared when
3563 converting the UbuntuDesktop.pdf file mentioned in this bug
3566 https://bugs.freedesktop.org/show_bug.cgi?id=15348#c3
3568 As usual with arcane font-encoding-specific bugs like this, many
3569 thanks to Adrian Johnson for his magical ability to dive into
3570 specifications and emerge almost instantaneously with fixes. And
3571 thanks to Sebastien Bacher for bringing the bug to our attention.
3575 Fix serious failure on X servers without the Render extension.
3577 Since the 1.5.14 snapshot (with support for PseudoColor visuals),
3578 any application attempting to create a "similar" xlib surface would
3579 fail on an X server without the Render extension. Thanks to
3580 Frederic Crozat for pointing out that cairo's test suite was
3581 entirely failing when run against Xvfb.
3583 Avoid crashing cairo-xlib applications for too-large glyphs
3585 Naively sending glyphs of any size to the X server will eventually
3586 violate the X limit on maximum request sizes. We now properly
3587 detect when a glyph would be too large and use existing fallbacks
3588 to render the glyph rather than trying to send it to the X server.
3590 Enable the buggy_repeat workaround for Xorg servers < 1.4
3592 We have determined that Xorg 1.3.0 (as packaged in Fedora 8 at
3593 least) has a bug that can result in an X server crash when cairo
3594 uses certain X Render repeat operations, (as exercised by cairo's
3595 extend-reflect test). We avoid this crash by using fallbacks
3596 whenever a repeating surface is needed for any Xorg server with a
3597 version less than 1.4. This is slower, but should prevent the
3600 (Meanwhile, there appears to be a separate bug where some X
3601 servers or specific X-server drivers will use random pixmap data
3602 when asked to draw a repeating surface. The buggy_repeat
3603 workaround would also avoid those problems, but we have not yet
3604 characterized whether the new "version < 1.4" is a good
3605 characterization of those problems or not.)
3609 Implement cairo_font_extents for this backend.
3611 The cairo-quartz-font implementation added in the 1.5.14 snapshot was
3612 entirely missing support for the cairo_font_extents function. Thanks to
3613 Richard Hult for pointing out this obvious shortcoming, (and obvious
3614 lack of coverage in our test suite):
3616 CGFont backend returns 0 font extents
3617 https://bugs.freedesktop.org/show_bug.cgi?id=15319
3619 Snapshot 1.5.16 (2008-04-01 Carl Worth <cworth@cworth.org>)
3620 ===========================================================
3621 This is the eighth snapshot in cairo's unstable 1.5 series. It comes
3622 less than two weeks after the 1.5.14 snapshot and it really is a
3623 legitimate snapshot, (in spite of sharing this date with that of many
3624 bogus announcements). The major change in this snapshot is that the
3625 cairo-quartz backend is now officially "supported", including new API
3626 to construct a font face from a CGFontRef . Also several bug fixes
3627 have been fixed in many backends. See below for details.
3631 Cairo now depends on pixman 0.10.0 which was recently released. The
3632 latest pixman release can always be found alongside cairo releases at:
3634 https://cairographics.org/releases
3636 Increase the precision of color stops for gradients. This fixes a
3637 regression in gradient rendering that had been present since the
3640 paginated (all of ps, pdf, svg, and win32-printing)
3641 ---------------------------------------------------
3642 Fix assertion failure when some drawing elements are outside the page
3643 boundaries, (this bug was noticed when using Inkscape to print a
3644 drawing with landscape orientation to a portrait-oriented piece of
3649 Fix of bug causing incorrect glyph positioning.
3651 Fix handling of CAIRO_OPERATOR_SOURCE.
3655 More reduction of unnecessary digits of precision in PDF output.
3657 Fix handling of CAIRO_OPERATOR_SOURCE.
3661 Fix bug in usage of libpng that was preventing cairo_mask from working
3662 with the svg backend.
3664 Fix transformation of source pattern for cairo_stroke().
3666 cairo-win32-printing
3667 --------------------
3668 Fix fallback resolution, (thanks again to inkscape users/developers
3669 for helping us find this one).
3673 Mark the cairo-quartz backend as "supported" rather than
3674 "experimental". This means the following:
3676 * The backend will now be built by default (if possible).
3678 * We are committing that the backend-specific API (as published in
3679 cairo-quartz.h) are stable and will be supported in all future
3682 * We are committing that the output quality of this backend
3683 compares favorably with other cairo backends, (and that quality
3684 is ensured by good results from the cairo test suite).
3686 * We recommend that distributions build and distribute this
3687 backend when possible.
3689 Note that the cairo_quartz_image API (in cairo-quartz-image.h) is
3690 still experimental, will not build by default, (pass
3691 --enable-quartz-image to configure to build it), and may see API
3692 changes before it is marked as "supported" in a future release.
3694 Put the CAIRO_FONT_TYPE_ATSUI name back into
3695 cairo-deprecated.h. Without this, the cairo 1.5.14 snapshot broke all
3696 builds for applications using the C++ cairomm bindings (and perhaps
3697 others) which have the CAIRO_FONT_TYPE_ATSUI name in their header
3698 files. This breakage happened even for applications not using
3699 cairo-quartz at all.
3701 Note: Even though the CAIRO_FONT_TYPE_ATSUI name is provided to
3702 avoid this build breakage, we still recommend that bindings and
3703 applications move to the new, and more accurate,
3704 CAIRO_FONT_TYPE_QUARTZ name.
3706 Replace the implementation of cairo-quartz-font to use CFFont instead
3707 of ATSUI. The CGFont API is a better fit than ATSUI, and this new
3708 implementation is also more correct than the old one as well.
3710 This also adds the following new API call:
3712 cairo_public cairo_font_face_t *
3713 cairo_quartz_font_face_create_for_cgfont (CGFontRef font);
3715 The previous cairo_quartz_font_face_create_for_atsu_font_id function
3716 continues to exist and is part of the supported API going
3717 forward. (However, the old name of that same function, which was
3718 cairo_atsui_font_face_create_for_atsu_font_id is officially
3719 deprecated. Any source code using the old name should be updated to
3722 Fix transformation of source pattern for cairo_stroke().
3726 Avoid crash in create_similar is cairo_win32_surface_create fails.
3728 Snapshot 1.5.14 (2008-03-20 Carl Worth <cworth@cworth.org>)
3729 ===========================================================
3730 This is the seventh snapshot in cairo's unstable 1.5 series. It comes
3731 3 weeks after the 1.5.12 snapshot. This snapshot includes support for
3732 arbitrary X server visuals, (including PseudoColor), which was the
3733 final remaining cairo-specific item on the cairo 1.6 roadmap. It also
3734 includes a huge number of improvements to the cairo-quartz backend. So
3735 this is effectively a cairo 1.6 release candidate. We expect very few
3736 changes from now until 1.6 and only for specific bug fixes.
3740 Rename ATSUI font backend to Quartz font backend. This affects the
3743 --enable-atsui -> --enable-quartz-font
3744 CAIRO_HAS_ATSUI_FONT -> CAIRO_HAS_QUARTZ_FONT
3745 CAIRO_FONT_TYPE_ATSUI -> CAIRO_FONT_TYPE_QUARTZ
3747 cairo_atsui_font_face_create_for_atsu_font_id ->
3748 cairo_quartz_font_font_create_for_atsu_font_id
3750 This API change is justified by the cairo-quartz backend still be
3751 marked as "experimental" rather than "supported", (though this is one
3752 step toward making the change to "supported" before 1.6). Cairo will
3753 still provide ABI compatibility with the old symbol name, however.
3755 paginated (all of ps, pdf, svg, and win32-printing)
3756 ---------------------------------------------------
3757 Optimize by not analyzing an image surface for transparency more than
3758 once, (previously all images were analyzed twice).
3760 cairo-ps and cairo-pdf
3761 ----------------------
3762 Avoiding emitting a matrix into the stroke output when unnecessary,
3763 (making output size more efficient).
3765 Reduce rounding error of path shapes by factoring large scale factors
3766 out of the path matrix, (ensuring that a fixed-number of printed
3767 digits for path coordinates contains as much information as possible).
3769 Reduce excess digits for text position coordinates. This makes the
3770 output file size much smaller without making the result any less
3775 Eliminate bug causing extraneous text repetition on Linux PostScript
3776 output in some cases.
3778 See: Mozilla Bug 419917 – Printed page contents are reflected
3779 inside bordered tables (Linux-only)
3781 https://bugzilla.mozilla.org/show_bug.cgi?id=419917
3783 Optimize output when EXTEND_PAD is used.
3787 Fix to not use fill-stroke operator with transparent fill, (else PDF
3788 output doesn't match the cairo-defined correct result). See:
3790 https://bugs.launchpad.net/inkscape/+bug/202096
3794 Fix stroke of path with a non-solid-color source pattern:
3796 https://bugs.freedesktop.org/show_bug.cgi?id=14556
3800 Fix text rendering with gradient or image source pattern.
3802 Handling antialiasing correctly for cairo_stroke(), cairo_clip(), and
3803 cairo_show_text()/cairo_show_glyphs().
3805 Correctly handle gradients with non-identity transformations:
3807 Fixes https://bugs.freedesktop.org/show_bug.cgi?id=14248
3809 Add native implementation of REPEAT and REFLECT extend modes for
3812 Fix implementation for the "unbounded" operators, (CAIRO_OPERATOR_OUT,
3813 _IN, _DEST_IN, and _DEST_ATOP).
3815 Correctly handle endiannees in multi-architecture compiles on Mac OS
3818 Avoid behavior which would cause Core Graphics to print warnings to
3819 the console in some cases.
3823 Fix handling of miter limit.
3825 cairo-win32-printing
3826 --------------------
3827 Fix to not use a 1bpp temporary surface in some cases while printing,
3828 (so grayscale data is preserved rather than just becoming black and
3833 Add support for rendering to arbitrary TrueColor X server
3834 visuals. This fixes at least the following bugs:
3836 cairo doesn't support 8-bit truecolor visuals
3837 https://bugs.freedesktop.org/show_bug.cgi?id=7735
3839 cairo doesn't support 655 xlib format
3840 https://bugs.freedesktop.org/show_bug.cgi?id=9719
3842 Add support for rendering to 8-bit PseudoColor X server visuals. This
3843 fixes the following bug:
3845 Cairo doesn't support 8-bit pseudocolor visuals
3846 https://bugs.freedesktop.org/show_bug.cgi?id=4945
3848 Snapshot 1.5.12 (2008-02-28 Carl Worth <cworth@cworth.org>)
3849 ===========================================================
3850 This is the sixth snapshot in cairo's unstable 1.5 series. It comes 1
3851 week after the 1.5.10 snapshot. This snapshot includes the
3852 long-awaited change from 16.16 to 24.8 fixed-point values, (see below
3853 for why you should care). It also includes several backend-specific
3856 24.8 fixed-point format
3857 -----------------------
3858 Cairo has always converted path coordinates to a fixed-point
3859 representation very early in its processing. Historically, this has
3860 been a 32-bit representation with 16 bits of integer for the
3861 device-pixel grid and 16 bits of sub-pixel positioning. The choice of
3862 16 bits for the integer coordinate space was based on the 16-bit limit
3863 for X Window drawables.
3865 This 16-bit limit has proven problematic for many applications. It's
3866 an especially vexing problem when targeting non-X backends that don't
3867 have any 16-bit restriction. But even when targeting cairo-xlib, it's
3868 often desirable to draw a large shape, (say a background rectangle),
3869 that extends beyond the surface bounds and expect it to fill the
3870 surface completely, (rather than overflowing and triggering random
3873 Meanwhile, nobody has ever really needed 16 bits of sub-pixel
3876 With this snapshot, the fixed-point system is still in place and is
3877 still using a 32-bit representation, (future versions of cairo might
3878 move entirely to floating-point when targeting PDF output for
3879 example). But the representation now provides 24 bits of pixel
3880 addressing and only 8 bits of sub-pixel positioning. This should give
3881 a much less stifling space to many applications.
3883 However, the underlying pixman library still has 16-bit limitations in
3884 many places, (it has its roots in the X server as well). Until those
3885 are also fixed, applications targeting cairo image surfaces, or
3886 hitting software fallbacks when targeting other surfaces will still
3887 encounter problems with device-space values needing more than 16
3892 Add a few tests to the test suite to increase coverage.
3894 Cleanup a few error-handling paths, (propagate error correctly).
3898 Fix handling of font sizes smaller than 1 device pixel.
3902 Fix to properly save/restore clip when analyzing meta-surface
3903 patterns, (fixing a couple of test-suite failures).
3905 Implement native support for CAIRO_OPERATOR_SOURCE when the source
3908 Emit rectangles as PDF rectangles ("re" operator) rather than as
3913 Fix to work properly with the 16.16->24.8 change.
3917 Fix CAIRO_EXTEND_REFLECT by using an image fallback, (there's no
3918 direct SVG support for reflected patterns).
3920 Fix the use of alpha-only masks, (such as CAIRO_FORMAT_A8).
3924 Add new API for efficiently using image data as a source:
3927 cairo_quartz_image_surface_create (cairo_surface_t *image_surface);
3930 cairo_quartz_image_surface_get_image (cairo_surface_t *surface);
3932 For full documentation, see:
3934 https://cairographics.org/manual/cairo-Quartz-Surfaces.html#cairo-quartz-image-surface-create
3936 Several fixes for cairo_mask().
3940 Change default from from Monaco to Helvetica to be more consistent
3941 with other font backends.
3943 Snapshot 1.5.10 (2008-02-20 Carl Worth <cworth@cworth.org>)
3944 ===========================================================
3945 This is the fifth snapshot in cairo's unstable 1.5 series. It comes 3
3946 weeks after the 1.5.8 snapshot. This snapshot adds one new API
3947 function, (cairo_has_current_point), and the usual mix of
3948 improvements, (more efficient PostScript/PDF output, optimized
3949 stroking), and fixes (more robust error-handling, etc.). See below for
3954 Add a new function to query if there is a current point:
3957 cairo_has_current_point (cairo_t *cr);
3959 There is no current point immediately after cairo_create(), nor after
3960 cairo_new_path() or cairo_new_sub_path(). There is a current point
3961 after any of the path-creation functions, (cairo_move_to,
3962 cairo_line_to, cairo_curve_to, etc.).
3964 With this new function, we also revert the change of the return type
3965 of cairo_get_current_point from cairo 1.5.8, (it's now a void function
3970 Optimize stroking code to avoid repeated calculation of redundant
3971 values, (particularly significant for very large, offscreen paths).
3975 Patch a few more potential buffer overruns, (due to integer
3978 Many fixes and improvements to cairo's error-handling, (ensure that
3979 correct error values are returned, clean up memory leaks on
3980 error-handling paths, etc.).
3982 Fix a potential infinite loop when stroking a spline with a pen that
3983 has been transformed to a line segment.
3985 Remove treating NULL as a synonym for a valid cairo_font_options_t*
3986 with default values, (a change that had been introduced as of cairo
3989 Remove the altered handling of tolerance and fallback-resolution that
3990 had been introduced as of cairo 1.5.4.
3994 Pass the original Drawable, (as opposed to the root window), to
3995 XCreatePixmap when creating a similar surface. This gives the X server
3996 more information so that it can be clever and efficient.
4000 Fix the rendering of repeating and reflecting patterns.
4002 Ensure miter limit is always >= 1, (smaller limits are not meaningful,
4003 but they can cause some PDF viewers to fail to display pages).
4005 Generate more efficient output when the same path is used for both
4010 Start sharing much of the cairo-pdf code rather than implementing very
4011 similar code in cairo-ps.
4013 Implement native support for repeating and reflecting linear
4016 Implement reflected surface patterns.
4018 Ensure miter limit is always >= 1, (smaller limits are not meaningful,
4019 but they can cause some PostScript viewers to crash).
4021 Generate PostScript that will perform more efficiently and use less
4022 memory on printers, (use currentfile instead of a giant string array
4023 for image data, and avoid using PostScript patterns for paint() and
4024 fill() when possible).
4028 Avoid unnecessary rasterization when copying a "similar" surface to
4029 another svg surface, (allow the SOURCE operator to be implemented with
4030 all-vector operations if there are no underlying objects).
4034 Eliminate infinite loop when attempting to render an empty string.
4036 Snapshot 1.5.8 (2008-01-30 Carl Worth <cworth@cworth.org>)
4037 ==========================================================
4038 This is the fourth snapshot in cairo's unstable 1.5 series. It comes 2
4039 weeks after the 1.5.6 snapshot. It adds a few new API functions. Most
4040 notably all callers of cairo_image_surface_create_for_data should now
4041 be calling cairo_format_stride_for_width to compute a legal stride
4042 value. See below for more details.
4044 New API in cairo 1.5.8
4045 ----------------------
4046 We've added a new function that should be called to compute a legal
4047 stride value before allocating data to be used with
4048 cairo_image_surface_create_for_data:
4051 cairo_format_stride_for_width (cairo_format_t format,
4054 We've also added a new cairo_path_extents function that can be used to
4055 compute a bounding box for geometry such as a single line segment,
4056 (contrast with cairo_path_extents and cairo_stroke_extents):
4059 cairo_path_extents (cairo_t *cr,
4060 double *x1, double *y1,
4061 double *x2, double *y2);
4063 And finally, we've added a function to allow for querying the
4064 XRenderPictFormat of a cairo-xlib surface:
4067 cairo_xlib_surface_get_xrender_format (cairo_surface_t *surface);
4071 Fix return types of cairo_surface_show_page and
4072 cairo_surface_copy_page. This is an API change to functions that are
4073 new in the 1.5 series, so not an API break compared to any stable
4074 cairo release, (1.0.x, 1.2.x, 1.4.x).
4076 Change the return type of cairo_get_current_point() from void to
4077 cairo_status_t. This allows the caller to receive a
4078 CAIRO_STATUS_NO_CURRENT_POINT value to distinguish the a current point
4079 at the origin from no current point existing.
4081 Performance improvement
4082 -----------------------
4083 Improve performance of clipping by using an optimized code path
4084 internally, (with the ADD operator instead of IN).
4088 Fix various cairo_*_extents functions to initialize the return-value
4089 variables even in the case of a cairo_t in error.
4091 Treat NULL as a legitimate value for cairo_font_options_t*. [NOTE:
4092 On discussion afterwards, we decided against this change so it has
4093 been removed as of cairo 1.5.10.]
4095 Fix rendering with CAIRO_ANTIALIAS_NONE to be more predictable, (that
4096 is, to avoid seams appearing when geometry and imagery share an
4097 identical edge). Portions of this fix are in the pixman library and
4098 will appear in a future release of that library.
4100 Avoid triggering an error for a font size of 0.
4102 Miscellaneous changes
4103 ---------------------
4104 Require pixman >= 0.9.6.
4106 There has been a tremendous amount improvement to cairo's
4107 documentation. We're delighted that 100% of the public API has at
4108 least some documentation in the API reference manual. Many thanks to
4109 Behdad Esfahbod and Nis Martensen for leading this effort.
4111 cairo-pdf and cairo-ps
4112 ----------------------
4113 Eliminate failure when a Type 1 font is embedded with an explicit
4118 Implement a more correct and more efficient approach for patterns with
4119 an extend mode of CAIRO_EXTEND_REFLECT.
4123 Fix image masks to properly pack and pad mask bits.
4127 Take care to only use DrawTiledImage for integer-aligned images, (and
4128 use slower paths to get the correct result in other cases).
4132 Fix for older versions of mingw.
4134 Improve the handling of the clipping with the win32 and win32-printing
4137 Fix rendering of non black/white text.
4139 Snapshot 1.5.6 (2008-01-15 Carl Worth <cworth@cworth.org>)
4140 ==========================================================
4141 This is the third snapshot in cairo's unstable 1.5 series. It comes
4142 about 6 weeks after the 1.5.4 snapshot. The only API addition compared
4143 to 1.5.4 is very minor, (a new value CAIRO_STATUS_TEMP_FILE_ERROR).
4144 The remainder of the changes are the usual accumulation of bug fixes
4145 and improvements. See below for details.
4149 Fix handling of fonts that contain a mixture of outline and bitmapped
4150 glyphs. There was a change in this handling in 1.5.4 that improved
4151 some cases and also regressed other cases. Now, all cases should be
4154 Fix alignment issues that were causing SIGBUS failures on SPARC.
4156 Fix a regression (which first appeared in 1.5.2) where stroking under
4157 a large scale would sometimes incorrectly replace a miter join with a
4158 bevel join. (Thanks to Keith Packard.)
4160 Fix reporting of zero-sized extents to be {0,0} rather than
4161 {INT_MAX,INT_MIN}. This avoids several integer overflow and
4162 allocations of massive regions in some cases.
4164 Fix failures of gradients with no stops, (quartz, ps, and pdf).
4166 Fix handling of Type 1 fonts on Windows platforms.
4168 Fix handling of Type 1 fonts with no specific family name in the font
4169 itself, (generate a CairoFont-x-y name).
4171 Handle NULL string values in cairo_show_text, cairo_show_glyphs, and
4174 Many robustness improvements along error-handling paths, (thanks as
4175 always, to Chris "ickle" Wilson).
4177 Various other minor fixes.
4179 Paginated backends (PDF/PostScript/win32-printing)
4180 --------------------------------------------------
4181 Avoid unnecessary rasterization when using a paginated surface as a
4182 source, (such as drawing from one pdf surface to another).
4184 Fix replaying of paginated surface with more than one level of push/pop
4189 Fix xlib backend to not consider recent X server release as having a
4190 buggy repeat implementation in the Render extension.
4194 Fix PDF output to avoid triggering very slow rendering in PDF viewers,
4195 (avoid starting and stopping the content stream for each pattern
4198 Support CAIRO_OPERATOR_SOURCE in cases where there is nothing below
4199 the object being drawn.
4201 Fix to avoid seams appearing between multiple fallback regions.
4203 cairo-ps (PostScript)
4204 ---------------------
4205 Use correct bounding box in Type 3 fonts.
4207 Fix several bugs in cairo's PostScript output. These include making
4208 the PostScript output more compatible with recent versions of
4209 ghostscript that are more strict about Type 3 fonts, for
4212 Fix for win32 to not attempt to create temporary files in the root
4213 directory, (where the user may not have write permission).
4215 Avoid generating Level 3 PostScript if Level 2 is sufficient. Also,
4216 add code in output documents to alert the user if Level 3 PostScript
4217 is handed to a device that cannot handle PostScript beyond Level
4222 Various performance optimizations.
4224 Fixed support for small surfaces (less than 8x8).
4226 Provide support for environment variables CAIRO_DIRECTFB_NO_ACCEL to
4227 disable acceleration and CAIRO_DIRECTFB_ARGB_FONT to enable ARGB fonts
4232 Allow OS/2 APIs instead of C library allocation functions.
4234 Snapshot 1.5.4 (2007-12-05 Carl Worth <cworth@cworth.org>)
4235 ==========================================================
4236 This is the second snapshot in cairo's unstable 1.5 series. It comes
4237 just over 1 month after the 1.5.2 snapshot. There are no API changes
4238 or additions in 1.5.4 compared to 1.5.2, but there are several bug
4239 fixes, and some optimizations. Most of these apply to particular
4240 backends. See below for details.
4242 General improvements
4243 --------------------
4244 Use less memory for spline approximation calculations.
4246 Change how the tolerance value is interpreted with regard to
4247 fallback-resolution. [Note: On further discussion, we decided against
4248 this change for now. It is removed as of cairo 1.5.10.]
4250 Fix precision of floating-point values in vector-output backends to
4251 avoid rounding errors with very small numbers.
4255 Fix bug in glyph rendering with xlib, (due to everything being clipped
4256 out). This was a regression in the 1.5.2 snapshot that was visible in
4257 the GIMP, for example. See:
4259 cairo 1.5.2 causes font problems in GIMP 2.4 status bar and evolution 2.12.1
4260 https://bugs.freedesktop.org/show_bug.cgi?id=13084
4262 PostScript improvements
4263 -----------------------
4264 Fix bug leading to invalid PostScript files when rendering
4265 text, (need "0 0 xyshow" instead of "0 xyshow").
4267 Fix many issues with Type 3 fonts, including making the resulting text
4272 Fix font metrics height value for ATSUI, (helps webkit on GTK+ OS X
4277 Fix EXTEND_NONE mode for patterns.
4279 Fix cairo_quartz_surface_create to properly clear the new surface
4280 in cairo_quartz_surface_create.
4282 Fix to correctly handle 0x0 sized surfaces.
4284 Optimize drawing of EXTEND_REPEAT patterns for OS X 10.5.
4286 Snapshot 1.5.2 (2007-10-30 Carl Worth <cworth@cworth.org>)
4287 ==========================================================
4288 This is the first snapshot in cairo's unstable 1.5 series. It comes 4
4289 months after the 1.4.10 release. This snapshot includes significant
4290 improvements to PDF and PostScript output, which is one of the things
4291 in which we're most interested in getting feedback. There are a couple
4292 of minor API additions, and several optimizations, (primarily in the
4293 "print/vector" backends). And there are dozens of bug fixes and
4294 robustness improvements.
4296 New dependency on external pixman library
4297 -----------------------------------------
4298 A significant change in this snapshot compared to all previous cairo
4299 releases is that cairo now depends on an external "pixman" library for
4300 its software rendering. Previously this same code was compiled
4301 internally as part of cairo, but now the code is separate so that both
4302 cairo and the X server can now share common code, (thanks very much to
4303 Søren Sandmann for his work on separating pixman and maintaining it).
4305 So users will need to acquire and build pixman before being able to
4306 build cairo. The current release is 0.9.6 and can be obtained from
4309 https://cairographics.org/releases/pixman-0.9.6.tar.gz
4311 which can be verified with:
4313 https://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1
4314 66f01a682c64403a3d7a855ba5aa609ed93bcb9e pixman-0.9.6.tar.gz
4316 https://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1.asc
4317 (signed by Carl Worth)
4319 Major PDF/PostScript improvements
4320 ---------------------------------
4321 Adrian Johnson has done some long-awaited work to make cairo's PDF and
4322 PostScript output more interesting than ever before. First, many
4323 operations that previously triggered image fallbacks will now be
4324 rendered as native vectors. These operations include:
4326 PDF: cairo_push_group, cairo_surface_create_similar,
4327 cairo_mask, A8/A1 surface sources, repeating/reflecting linear
4330 PostScript: cairo_push_group, cairo_surface_create_similar,
4331 gradients, bilevel alpha masks, (for example, all values either 0 or
4332 255 for an A8 mask).
4334 Not only that, but when an image fallback is required, it will now be
4335 limited to only the necessary region. For example, a tiny translucent
4336 image overlaying a small portion of text would previously caused an
4337 entire PostScript page to be rendered as a giant image. Now, the
4338 majority of that page will be nice text, and there will only be a tiny
4339 image in the output.
4341 Additionally, the PostScript output now carefully encodes text so that
4342 if it is subsequently converted to PDF, the text will be
4345 This is very exciting progress, and we're hoping to hear from users
4346 during the 1.5 series about how things have improved, (for example,
4347 inkscape users doing cairo-based PDF export: please let us know how
4348 things look). And feel free to pass your thanks along to Adrian for his excellent work.
4350 NOTE: This much improved PDF output makes more sophisticated use of
4351 functionality in the PDF specification. This means that cairo's output
4352 will sometimes expose bugs in some free software PDF viewers, (evince,
4353 poppler, and xpdf, for example), that are not yet ready for such PDF
4354 files. We're working with the poppler maintainers to get these bugs
4355 fixed as quickly as possible. In the meantime, please double-check
4356 with other PDF viewers if cairo-generated PDF files are not being
4357 rendered correctly. It may be due to a bug in the viewer rather than
4358 in the PDF file that cairo has created.
4360 Robustness improvements
4361 -----------------------
4362 Chris Wilson has made the largest contribution by far to cairo 1.5.2,
4363 (in number of commits). His more than 150 commits include a huge
4364 number of fixes to increase cairo's robustness. These fixes make cairo
4365 more robust against invalid and degenerate input, (NaN, empty path,
4366 etc.), against size-0 malloc calls, against memory leaks on
4367 error-recovery paths, and against other failures during error
4368 handling. He also implemented atomic operations to cairo, and used
4369 them to fix cairo's previously non-thread-safe reference counting,
4370 again improving robustness.
4372 Chris has put a tremendous amount of time and effort into writing
4373 analysis tools for this work, and in running those tools and fixing
4374 the problems they report. We're very grateful for this work, and hope
4375 that all cairo users appreciate the more robust implementation that
4378 This work is largely thankless, so it might make sense to notice
4379 sometime that cairo has been running quite smoothly for you, and when
4380 you do, send a quick "thank you" off to Chris Wilson, since it
4381 is all definitely running smoother thanks to his work.
4385 There are no major additions to cairo's core API. The only new,
4386 generic functions are:
4389 cairo_surface_copy_page (cairo_surface_t *surface);
4392 cairo_surface_show_page (cairo_surface_t *surface);
4394 which can now be used much more conveniently than the existing
4395 cairo_copy_page and cairo_show_page functions in some
4396 situations. These functions act identically, but require only a
4397 cairo_surface_t* and not a cairo_t*.
4399 All other API additions are specific to particular backends.
4401 New cairo-win32 API (new font face function and "win32 printing" surface)
4402 -------------------------------------------------------------------------
4403 There is a new function for creating a win32 font face for both a
4404 logfontw and an hfont together. This complements the existing
4405 functions for creating a font face from one or the other:
4408 cairo_win32_font_face_create_for_logfontw_hfont (LOGFONTW *logfont,
4411 There is also a new "win32 printing" surface:
4414 cairo_win32_printing_surface_create (HDC hdc);
4416 This interface looks identical to the original
4417 cairo_win32_surface_create, (both accept and HDC), but the behavior of
4418 this new surface is very different. It should only be called with a
4419 printing DC, and will result in all drawing commands being stored into
4420 a meta-surface and emitted after each page is complete, with analysis
4421 to do as minimal image-based fallbacks as necessary. The behavior and
4422 implementation shares much with the PDF and PostScript backends.
4424 New cairo-ps API (EPS and PostScript level control)
4425 ---------------------------------------------------
4426 An often requested feature has been the ability to generate
4427 Encapsulated PostScript (EPS) with cairo. We have that now with the
4428 following very simple API. Just do cairo_ps_surface_create as usual
4429 then call this function with a true value:
4432 cairo_ps_surface_set_eps (cairo_surface_t *surface,
4435 [NOTE: As always with snapshots, it's possible---though not very
4436 likely---that the API could still be modified before a final
4437 release. For example, this is the first public cairo function that
4438 accepts a Boolean parameter. I'm generally opposed to Boolean
4439 parameters, but this is probably the one case where I'm willing to
4440 accept one, (namely a "set" function that accepts a single Boolean).]
4442 Also, it is now possible to control what PostScript level to target,
4443 (either level 2 or level 3), with the following new API:
4445 typedef enum _cairo_ps_level {
4451 cairo_ps_surface_restrict_to_level (cairo_surface_t *surface,
4452 cairo_ps_level_t level);
4455 cairo_ps_get_levels (cairo_ps_level_t const **levels,
4459 cairo_ps_level_to_string (cairo_ps_level_t level);
4461 Improvement for cairo-quartz
4462 ----------------------------
4463 Brian Ewins had contributed several improvements to cairo-quartz. These
4464 include an implementation of EXTEND_NONE for linear and radial
4465 gradients, (so this extend mode will no longer trigger image fallbacks
4466 for these gradients), as well as native surface-mask clipping, (only
4467 on OS X 10.4+ where the CGContextClipToMask function is available).
4469 He also fixed a semantic mismatch between cairo and quartz for dashing
4470 with an odd number of entries in the dash array.
4472 We're grateful for Brian since not many quartz-specific improvements
4473 to cairo would be happening without him.
4477 Optimize SVG output for when the same path is both filled and stroked,
4478 and avoid unnecessary identity matrix in SVG output. (Emmanuel Pacaud).
4480 Optimize PS output to take less space (Ken Herron).
4482 Make PS output more compliant with DSC recommendations (avoid initclip
4483 and copy_page) (Adrian Johnson).
4485 Make PDF output more compact (Adrian Johnson).
4487 Release glyph surfaces after uploading them to the X server, (should
4488 save some memory for many xlib-using cairo application). (Behdad
4491 Optimize cairo-win32 to use fewer GDI objects (Vladimir Vukicevic).
4493 win32-printing: Avoid falling back to images when alpha == 255
4494 everywhere. (Adrian Johnson).
4496 win32-printing: Avoid falling back for cairo_push_group and
4497 cairo_surface_create_similar. (Adrian Johnson)
4501 Avoid potential integer overflows when allocating large buffers
4502 (Vladimir Vukicevic).
4504 Preparations to allow the 16.16 fixed-point format to change to
4505 24.8 (Vladimir Vukicevic).
4507 Fix bugs for unsupported X server visuals (rgb565, rgb555, bgr888, and
4508 abgr8888). (Carl Worth and Vladimir Vukicevic)
4510 Fix bugs in PDF gradients (Adrian Johnson).
4512 Fix cairo-xlib to build without requiring Xrender header
4513 files (Behdad Esfahbod).
4515 Make cairo more resilient in the case of glyphs not being available in
4516 the current font. (Behdad Esfahbod)
4518 Prevent crashes when both atsui and ft font backends are compiled in
4521 Make font subsetting code more robust against fonts that don't include
4522 optional tables (Adrian Johnson).
4524 Fix CFF subsetting bug, (which manifested by generating PDF files that
4525 Apple's Preview viewer could not read) (Adrian Johnson).
4527 Fixed error handling for quartz and ATSUI backends (Brian Ewins).
4529 Avoid rounding problems by pre-transforming to avoid integer-only
4530 restrictions on transformation in GDI (Adrian Johnson).
4532 Fixed an obscure bug (#7245) computing extents for some stroked
4535 Fix crashes due to extreme transformation of the pen, (seems to show
4536 up in many .swf files for some reason) (Carl Worth).
4538 Release 1.4.10 (2007-06-27 Carl Worth <cworth@cworth.org>)
4539 ==========================================================
4540 This is the fifth update in cairo's stable 1.4 series. It comes
4541 roughly three weeks after the 1.4.8 release. The most significant
4542 change in this release is a fix to avoid an X error in certain cases,
4543 (that were causing OpenOffice.org to crash in Fedora). There is also a
4544 semantic change to include child window contents when using an xlib
4545 surface as a source, an optimization when drawing many rectangles, and
4546 several minor fixes.
4548 Eliminate X errors that were killing OO.o (Chris Wilson)
4549 --------------------------------------------------------
4550 Cairo is fixed to avoid the X errors propagated when cleaning up
4551 Render Pictures after the application had already destroyed the
4552 Drawable they reference. (It would be nice if the X server wouldn't
4553 complain that some cleanup work is already done, but there you have
4554 it.) This fixes the bug causing OpenOffice.org to crash as described
4557 XError on right click menus in OOo.
4558 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=243811
4560 Use IncludeInferiors when using xlib surface as a source (Ryan Lortie)
4561 ----------------------------------------------------------------------
4562 When an xlib surface is used as the source of a draw operation the
4563 contents of child windows are now included in the source data. The
4564 semantics of drawing to xlib surfaces are unchanged (ie: draws are
4565 still clipped by child windows overlapping the destination window).
4567 Optimize drawing of many rectangles (Vladimir Vukicevic)
4568 --------------------------------------------------------
4569 Avoid O(N*N) loop when filling many axis-aligned rectangles, (either
4570 many rectangles as separate sub-paths or due to dashing).
4574 Fix cairo-perf on Solaris by linking to librt. (Behdad Esfahbod)
4576 Fix make check for systems that require executable files to have a
4577 particular extension. (Behdad Esfahbod)
4579 Eliminate some warnings in cairo-quartz. (Brian Ewins)
4581 Fix build-breaking typo for cairo-directfb. (Chris Wilson)
4583 Release 1.4.8 (2007-06-07 Carl Worth <cworth@cworth.org>)
4584 =========================================================
4585 This is the fourth update in cairo's stable 1.4 series. It comes just
4586 over five weeks after the 1.4.6 release. This release includes a
4587 thread-safe surface-cache for solid patterns which significantly
4588 improves text rendering with the xlib backend. Also, dozens of error
4589 paths in cairo have been fixed thanks to extensive fault-injection
4590 testing by Chris Wilson.
4592 Surface cache for solid patterns
4593 --------------------------------
4594 Originally written by Jorn Baayen, the introduction of a small cache
4595 for surfaces created for solid patterns improves performance
4596 dramatically. For example, this reduces the volume of X requests
4597 during text rendering to the same level as Xft.
4599 This cache first made its appearance in a 1.3.x snapshot, but was
4600 removed before appearing in any previous major release due to
4601 complications with multi-threaded programs. For example, programs like
4602 evince that would carefully restrict usage of cairo-xlib to a single
4603 thread were unpleasantly surprised to find that using cairo-image in a
4604 separate thread could trigger X requests.
4606 Behdad Esfahbod designed a fix which was implemented by Chris
4607 Wilson. Now, the necessary X requests are queued up until the next
4608 time the application directly operates on an xlib surface.
4610 Improved error handling paths
4611 ------------------------------
4612 Chris Wilson continued the excellent work he started in cairo 1.4.4 to
4613 make cairo much more robust against out-of-memory and other errors. He
4614 applied his memory allocation fault injection cairo's main test suite,
4615 (previously he had applied it to cairo's performance suite).
4617 Chris's testing found dozens of bugs which he fixed. Many of these
4618 bugs had perhaps never been hit by any users. But at least one was
4619 hit by the gnome-about program which resulted in dozens of duplicated
4620 bug reports against that program:
4622 https://bugzilla.gnome.org/show_bug.cgi?id=431990
4624 We were very pleasantly surprised to see this bug get fixed as a
4625 side-effect of Chris's work. Well done, Chris!
4629 Cleanup of mutex declarations (Behdad Esfahbod)
4631 Remove unnecessary clip region from SVG output (Emmanuel Pacaud)
4633 Remove Xsun from the buggy_repeat blacklist (Elaine Xiong)
4635 ATSUI: Fix glyph measurement: faster and more correct (Brian Ewins)
4637 Quartz: fixed 'extend' behaviour for patterns, improved pattern performance,
4638 and a few smaller correctness fixes. (Brian Ewins, Vladimir Vukicevic)
4640 Release 1.4.6 (2007-05-01 Carl Worth <cworth@cworth.org>)
4641 =========================================================
4642 This is the third update in cairo's stable 1.4 series. It comes a
4643 little less than three weeks since the 1.4.4 release. This release
4644 fixes the broken mutex initialization that made cairo 1.4.4 unusable
4645 on win32, OS/2, and BeOS systems. This release also adds significant
4646 improvements to cairo's PDF backend, (native gradients!), and a couple
4647 of performance optimizations, (one of which is very significant for
4648 users of the xlib backend). See below for more details.
4650 Repaired mutex initialization
4651 -----------------------------
4652 We apologize that cairo 1.4.4 did little more than crash on many
4653 platforms which are less-frequently used by the most regular cairo
4654 maintainers, (win32, OS/2, and BeOS). The mutex initialization
4655 problems that caused those crashes should be fixed now. And to avoid
4656 similar problems in the future, we've now started posting pre-release
4657 snapshots to get better testing, (subscribe to cairo@cairographics.org
4658 if you're interested in getting notified of those and testing them).
4662 Thanks to Adrian Johnson, (cairo PDF hacker extraordinaire), we have
4663 several improvements to cairo's PDF backend to announce:
4667 As of cairo 1.4.6, cairo will now generate native PDF gradients in
4668 many cases, (previously, the presence of a gradient on any page
4669 would force rasterized output for that page). Currently, only
4670 gradients with extend types of PAD (the default) or NONE will
4671 generate native PDF gradients---others will still trigger
4672 rasterization, (but look for support for other extend modes in a
4673 future release). Many thanks to Miklós Erdélyi as well, who did the
4674 initial work for this support.
4676 Better compatibility with PDF viewers:
4678 The PDF output from cairo should now be displayed correctly by a
4679 wider range of PDF viewers. Adrian tested cairo's PDF output against
4680 many PDF viewers, identified a common bug in many of those viewers
4681 (ignoring the CTM matrix in some cases), and modified cairo's output
4682 to avoid triggering that bugs (pre-transforming coordinates and
4683 using an identity matrix).
4685 Better OpenType/CFF subsetting:
4687 Cairo will now embed CFF and TrueType fonts as CID fonts.
4689 Performance optimizations
4690 -------------------------
4691 Faster cairo_paint_with_alpha:
4693 The cairo_paint_with_alpha call is used to apply a uniform alpha
4694 mask to a pattern. For example, it can be used to gradually fade an
4695 image out or in. Jeff Muizelaar fixed some missing/broken
4696 optimizations within the implementation of this function resulting
4697 in cairo_paint_with_alpha being up to 4 times faster when using
4698 cairo's image backend.
4700 Optimize rendering of "off-screen" geometry:
4702 Something that applications often do is to ask cairo to render
4703 things that are either partially or wholly outside the current clip
4704 region. Since 1.4.0 the image backend has been fixed to not waste
4705 too much time in this case. But other backends have still been
4708 In particular, the xlib backend has often performed quite badly in
4709 this situation. This is due to a bug in the implementation of
4710 trapezoid rasterization in many X servers.
4712 Now, in cairo 1.4.6 there is a higher-level fix for this
4713 situation. Cairo now eliminates or clips trapezoids that are wholly
4714 or partially outside the clip region before handing the trapezoids
4715 to the backend. This means that the X server's performance bug is
4716 avoided in almost all cases.
4718 The net result is that doing an extreme zoom-in of vector-based
4719 objects drawn with cairo might have previously brought the X server
4720 to its knees as it allocated buffers large enough to fit all of the
4721 geometry, (whether visible or not). But now the memory usage should
4722 be bounded and performance should be dramatically better.
4726 Behdad contributed an impressively long series of changes that
4727 organizes cairo's internals in several ways that will be very
4728 beneficial to cairo developers. Thanks, Behdad!
4730 Behdad has also provided a utility for generating malloc statistics,
4731 (which was used during the great malloc purges of 1.4.2 and
4732 1.4.4). This utility isn't specific to cairo so may be of benefit to
4733 others. It is found in cairo/util/malloc-stats.c and here are Behdad's
4738 make malloc-stats.so
4740 inside util/, and to use, run:
4742 LD_PRELOAD=malloc-stats.so some-program
4744 For binaries managed by libtool, eg, cairo-perf, do:
4746 ../libtool --mode=execute /bin/true ./cairo-perf
4747 LD_PRELOAD="../util/malloc-stats.so" .libs/lt-cairo-perf
4749 Finally, the cairo-perf-diff-files utility was enhanced to allow for
4750 generating performance reports from several runs of the same backend
4751 while some system variables were changed. For example, this is now
4752 being used to allow cairo-perf to measure the performance of various
4753 different acceleration architectures and configuration options of the
4756 Release 1.4.4 (2007-04-13 Carl Worth <cworth@cworth.org>)
4757 =========================================================
4758 This is the second update release in cairo's stable 1.4 series. It
4759 comes just less than a month after 1.4.2. The changes since 1.4.2
4760 consist primarily of bug fixes, but also include at least one
4761 optimization. See below for details.
4763 Of all the work that went into the 1.4.4 release
4765 There have been lots of individuals doing lots of great work on cairo,
4766 but two efforts during the 1.4.4 series deserve particular mention:
4768 Internal cleanup of error handling, (Chris Wilson)
4769 --------------------------------------------------
4770 Chris contributed a tremendous series of patches (74 patches!) to
4771 improve cairo's handling of out-of-memory and other errors. He began
4772 by adding gcc's warn_unused_attribute to as many functions as
4773 possible, and then launched into the ambitious efforts of adding
4774 correct code to quiet the dozens of resulting warnings.
4776 Chris also wrote a custom valgrind skin to systematically inject
4777 malloc failures into cairo, and did all the work necessary to verify
4778 that cairo's performance test suite runs to completion without
4781 The end result is a much more robust implementation. Previously, many
4782 error conditions would have gone unnoticed and would have led to
4783 assertion failures, segmentation faults, or other harder-to-diagnose
4784 problems. Now, more than ever, cairo should cleanly let the user know
4785 of problems through cairo_status and other similar status
4786 functions. Well done, Chris!
4788 More malloc reduction, (Mathias Hasselmann)
4789 -------------------------------------------
4790 After 1.4.0, Behdad launched an effort to chase down excessive calls
4791 to malloc within the implementation of cairo. He fixed a lot of
4792 malloc-happy objects for 1.4.2, but one of the worst offenders,
4793 (pixman regions), was left around. Mathias contributed an excellent
4794 series of 15 patches to finish off this effort.
4796 The end result is a cairo that calls malloc much less often than it
4797 did before. Compared to 1.4.2, 55% of the calls to malloc have been
4798 eliminate, (and 60% have been eliminated compared to 1.4.0). Well
4801 Other improvements since 1.4.2
4802 ------------------------------
4803 • Centralize mutex declarations (will reduce future build breaks),
4804 (Mathias Hasselmann)
4806 • Reduce malloc by caching recently freed pattern objects (Chris
4809 • Fix some broken composite operations (David Reveman)
4810 https://bugs.freedesktop.org/show_bug.cgi?id=5777
4812 Backend-specific fixes
4813 ----------------------
4815 • Use TJ operator for more compact representation of glyphs (Adrian
4818 • Fix glyph positioning bug when glyphs are not horizontal
4819 https://lists.freedesktop.org/archives/cairo/2007-April/010337.html
4822 • Fix crash when rendering with bitmap fonts (Carl Worth)
4823 https://bugzilla.mozilla.org/show_bug.cgi?id=376498
4826 • Turn metrics-hinting on by default (Behdad Esfahbod)
4828 • Fix edge-effect problem with transformed images drawn to xlib
4830 https://bugs.freedesktop.org/show_bug.cgi?id=10508
4832 • Avoid dereferencing a NULL screen. (Chris Wilson)
4833 https://bugs.freedesktop.org/show_bug.cgi?id=10517
4836 • Fix scaling of glyph surfaces
4838 https://bugs.freedesktop.org/show_bug.cgi?id=9568
4840 • Fix compilation failure when both xlib and quartz enabled
4843 • Fix rounding bug leading to incorrectly positioned glyphs
4845 https://bugs.freedesktop.org/show_bug.cgi?id=10531
4847 Release 1.4.2 (2007-03-19 Carl Worth <cworth@cworth.org>)
4848 =========================================================
4849 This is the first update release in cairo's stable 1.4 series. It
4850 comes just less than 2 weeks after 1.4.0. We hadn't anticipated an
4851 update this early, but we've managed to collect some important fixes
4852 that we wanted to get out to cairo users as soon as possible, (6 fixes
4853 for crashes, 1 case where graphical elements would not be drawn at
4854 all, a handful of backend-specific bugs, and several important build
4857 There's almost nothing but bug fixes in this release, (see below one
4858 optimization that Behdad did sneak in), so we recommend that everyone
4859 upgrade to this release when possible.
4861 Thanks to the many people that worked to fix these bugs, and those
4862 that did the work to report them and to test the fixes, (wherever
4863 possible both names are credited below).
4867 • Fix a crash due to a LOCK vs. UNLOCK typo (M. Drochner fixing Carl
4868 Worth's embarrassing typo).
4870 https://bugs.freedesktop.org/show_bug.cgi?id=10235
4872 • Fix potential buffer overflow, which on some systems with a checking
4873 variant of snprintf would lead to a crash (Adrian Johnson, Stanislav
4876 https://bugs.freedesktop.org/show_bug.cgi?id=10267
4877 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=232576
4879 • Fix a crash in cairo_stroke_extents or cairo_in_stroke when line
4880 width is 0.0. (Carl Worth and Sebastien Bacher)
4882 https://bugs.freedesktop.org/show_bug.cgi?id=10231
4884 • Fix a crash on certain combinations of X server/video drivers (Carl
4885 Worth and Tomas Carnecky).
4887 https://bugs.freedesktop.org/show_bug.cgi?id=10250
4889 • Fix a crash due to mishandling of invalid user input (Carl Worth and
4890 Alexander Darovsky).
4892 https://bugs.freedesktop.org/show_bug.cgi?id=9844
4894 • xlib: Cleanup server-side glyph caches on XCloseDisplay. This
4895 eliminated a crash detected by the perf suite, (and that
4896 applications could have run into as well). (Chris Wilson)
4900 • Fix for some geometry which simply disappeared under some
4901 transformations---a stroked line with an extreme skew in X, for
4902 example (Carl Worth and Jonathan Watt).
4904 https://bugzilla.mozilla.org/show_bug.cgi?id=373632
4906 • SVG: Fix radial gradients for CAIRO_EXTEND_REFLECT and when r0 > r1
4909 • PDF: Set page group color space to DeviceRGB.
4911 This fixes incorrect (muddy) transparent colors when rendering cairo
4912 PDF output in some viewers. (Adrian Johnson, Adam Goode, and
4915 https://lists.freedesktop.org/archives/cairo/2006-November/008551.html
4917 • win32: Return correct metrics when hinting is off, and fix font
4918 descent computation (Behdad Esfahbod).
4920 • quartz: Fix glyph interfaces to correctly return user-space rather
4921 than device-space coordinates (Brian Ewins).
4923 https://bugs.freedesktop.org/show_bug.cgi?id=9568
4925 • xcb: Fix parameter-order confusion with xcb_create_pixmap, which now
4926 makes all tests that pass with xlib now pass with xcb (Carl Worth,
4929 • Fix some memory leaks in the perf suite (Chris Wilson).
4931 • Fix perf suite to consider changes in pixman/src (Mathias
4936 • Don't include pre-generated cairo-features.h file. This was causing
4937 build failures when building with the directfb backend enabled
4940 https://bugs.freedesktop.org/show_bug.cgi?id=10189
4942 • Eliminate use of maintainer mode from cairo's automake/configure
4943 script. This means that updates to files such as Makefile.am will
4944 take effect, (by rerunning automake and friends as necessary) when
4945 invoking make rather than being silently ignored. (Behdad Esfahbod)
4947 • Don't compile cairo-deflate-stream.c, which depends on zlib, unless
4948 building the pdf backend which requires it. (Carl Worth, Tor
4951 https://bugs.freedesktop.org/show_bug.cgi?id=10202
4953 • Don't make the ps backend link against zlib anymore, since it
4954 doesn't require it (Carl Worth).
4956 • Use "find !" rather than "find -not" for better portability (Thomas
4959 https://bugs.freedesktop.org/show_bug.cgi?id=10226
4961 • Don't use unsupported visibility attribute "hidden" on Solaris
4962 (Gilles Dauphin, Thomas Klausner).
4964 https://bugs.freedesktop.org/show_bug.cgi?id=10227
4968 • It was Behdad that suggested we focus strictly on bug fixes now that
4969 we shipped so many performance improvements in 1.4.0, but it was
4970 also Behdad that got distracted by the chance to remove a lot of
4971 mallocs from cairo. Paths, gstates, trapezoids, splines, polygons,
4972 and gradient color stops will now use small, stack-allocated buffers
4973 in the most common cases rather than calling malloc as
4974 often. (Behdad Esfahbod). And look for more from Mathias Hasselmann
4977 Release 1.4.0 (2007-03-06 Carl Worth <cworth@cworth.org>)
4978 =========================================================
4979 The many people[*] who have been working hard on cairo are very
4980 pleased to announce the long-awaited release of cairo 1.4. This
4981 release comes 4 months after the last stable update release (1.2.6)
4982 and 9 months since the initial release of 1.2.0.
4984 The release notes below are intended to capture the highlights of the
4985 changes that have occurred from the 1.2 series to the new 1.4.0
4988 Performance improvements
4989 ------------------------
4990 Within the cairo project, the last 6 months or so has seen an intense
4991 effort focusing on the performance of cairo itself. That effort has
4992 paid off considerably, as can be seen in the following highlights of
4993 some of the performance differences from cairo 1.2.6 to cairo 1.4.0.
4995 (Note: The performance results reported here were measured on an x86
4996 laptop. Many of the improvements in 1.4---particular those involving
4997 text rendering---are even more dramatic on embedded platforms without
4998 hardware floating-point units. Such devices played an important part
4999 of many of the optimizations that found their way into cairo over the
5002 • Dramatic improvement when drawing objects that are mostly off-screen
5003 with the image backend (with the xlib backend this case is still
5004 slow due to an X server bug):
5006 image-rgba long-lines-uncropped-100 479.64 -> 4.98: 96.24x speedup
5007 ███████████████████████████████████████████████▋
5009 • Dramatic improvement when copying a small fraction of an image
5010 surface to an xlib surface:
5012 xlib-rgba subimage_copy-512 3.93 -> 0.07: 54.52x speedup
5013 ██████████████████████████▊
5015 • Dramatic improvement to tessellation speed for complex objects:
5017 image-rgb tessellate-256-100 874.16 -> 34.79: 25.13x speedup
5019 xlib-rgba zrusin_another_fill-415 148.40 -> 13.85: 10.72x speedup
5021 xlib-rgb world_map-800 680.20 -> 345.54: 1.97x speedup
5024 • Dramatic improvement to the speed of stroking rectilinear shapes,
5025 (such as the outline of a rectangle or "box"):
5027 image-rgb box-outline-stroke-100 0.18 -> 0.01: 24.22x speedup
5029 xlib-rgb box-outline-stroke-100 0.46 -> 0.06: 8.05x speedup
5033 • Dramatic improvements to text rendering speeds:
5035 xlib-rgba text_image_rgba_over-256 63.12 -> 9.61: 6.57x speedup
5038 • 3x improvements to floating-point to fixed-point conversion speeds:
5040 image-rgba pattern_create_radial-16 9.29 -> 3.44: 2.70x speedup
5043 • 2x improvements to linear gradient computation:
5045 image-rgb paint_linear_rgb_source-512 26.22 -> 11.61: 2.26x speedup
5048 • 2x improvement to a case common in PDF rendering:
5050 image-rgb unaligned_clip-100 0.10 -> 0.06: 1.81x speedup
5053 • 1.3x improvement to rectangle filling speed (note: this improvement
5054 is new since 1.3.16---previously this test case was a 1.3x slowdown
5057 image-rgba rectangles-512 6.19 -> 4.37: 1.42x speedup
5059 xlib-rgba rectangles-512 7.48 -> 5.58: 1.34x speedup
5062 NOTE: In spite of our best efforts, there are some measurable
5063 performance regressions in 1.4 compared to 1.2. It appears that the
5064 primary problem is the increased overhead of the new tessellator when
5065 drawing many, very simple shapes. The following test cases capture
5066 some of that slowdown:
5068 image-rgba mosaic_tessellate_lines-800 11.03 -> 14.29: 1.30x slowdown
5070 image-rgba box-outline-fill-100 0.01 -> 0.01: 1.26x slowdown
5072 image-rgba fill_solid_rgb_over-64 0.20 -> 0.22: 1.12x slowdown
5074 image-rgba fill_image_rgba_over-64 0.23 -> 0.25: 1.10x slowdown
5076 xlib-rgb paint_image_rgba_source-256 3.24 -> 3.47: 1.07x slowdown
5078 We did put some special effort into eliminating this slowdown for the
5079 very common case of drawing axis-aligned rectangles with an identity
5080 matrix (see the box-outline-stroke and rectangles speedup numbers
5081 above). Eliminating the rest of this slowdown will be a worthwhile
5082 project going forward.
5084 Also note that the "box-outline-fill" case is a slowdown while
5085 "box-outline-stroke" is a (huge) speedup. These two test cases
5086 resulted from the fact that some GTK+ theme authors were filling
5087 between two rectangles to avoid slow performance from the more natural
5088 means of achieving the same shape by stroking a single rectangle. With
5089 1.4 that workaround should definitely be eliminated as it will now
5090 cause things to perform more slowly.
5092 Greatly improved PDF output
5093 ---------------------------
5094 We are very happy to be able to announce that cairo-generated PDF
5095 output will now have text that can be selected, cut-and-pasted, and
5096 searched with most capable PDF viewer applications. This is something
5097 that was not ever possible with cairo 1.2.
5099 Also, the PDF output now has much more compact encoding of text than
5100 before. Cairo is now much more careful to not embed multiple copies of
5101 the same font at different sizes. It also compresses text and font
5102 streams within the PDF output.
5106 There are several new functions available in 1.4 that were not
5107 available in 1.2. Curiously, almost all of the new functions simply
5108 allow the user to query state that has been set in cairo (many new
5109 "get" functions) rather than providing any fundamentally new
5110 operations. The new functionality is:
5112 • Getting information about the current clip region
5115 cairo_copy_clip_rectangle_list
5116 cairo_rectangle_list_destroy
5118 • Getting information about the current dash setting
5120 cairo_get_dash_count
5123 • Getting information from a pattern
5125 cairo_pattern_get_rgba
5126 cairo_pattern_get_surface
5127 cairo_pattern_get_color_stop_rgba
5128 cairo_pattern_get_color_stop_count
5129 cairo_pattern_get_linear_points
5130 cairo_pattern_get_radial_circles
5132 • Getting the current scaled font
5134 cairo_get_scaled_font
5136 • Getting reference counts
5138 cairo_get_reference_count
5139 cairo_surface_get_reference_count
5140 cairo_pattern_get_reference_count
5141 cairo_font_face_get_reference_count
5142 cairo_scaled_font_get_reference_count
5144 • Setting/getting user data on objects
5148 cairo_pattern_set_user_data
5149 cairo_pattern_get_user_data
5150 cairo_scaled_font_set_user_data
5151 cairo_scaled_font_get_user_data
5153 • New cairo-win32 functions:
5155 cairo_win32_surface_create_with_ddb
5156 cairo_win32_surface_get_image
5157 cairo_win32_scaled_font_get_logical_to_device
5158 cairo_win32_scaled_font_get_device_to_logical
5162 The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never
5163 worked as a format value for cairo_image_surface_create, and it wasn't
5164 necessary for supporting 16-bit 565 X server visuals.
5166 A sampling of bug fixes in cairo 1.4
5167 ------------------------------------
5168 • Fixed radial gradients
5169 • Fixed dashing (degenerate and "leaky" cases)
5170 • Fixed transformed images in PDF/PS output (eliminate bogus repeating)
5171 • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD
5172 • cairo_show_page no longer needed for single-page output
5173 • SVG: Fix bug preventing text from appearing in many viewers
5174 • cairo-ft: Return correct metrics when hinting is off
5175 • Eliminate crash in cairo_create_similar if nil surface is returned
5176 • Eliminate crash after INVALID_RESTORE error
5177 • Fix many bugs related to multi-threaded use and locking
5178 • Fix for glyph spacing 32 times larger than desired (cairo-win32)
5179 • Fixed several problems in cairo-atsui (assertion failures)
5180 • Fix PDF output to avoid problems when printing from Acrobat Reader
5181 • Fix segfault on Mac OS X (measuring a zero-length string)
5182 • Fix text extents to not include the size of non-inked characters
5183 • Fix for glyph cache race condition in glitz backend (Jinghua Luo)
5184 • Fix make check to work on OPD platforms (IA64 or PPC64)
5185 • Fix compilation problems of cairo "wideint" code on some platforms
5186 • Many, many others...
5188 Experimental backends (quartz, XCB, OS/2, BeOS, directfb)
5189 ---------------------------------------------------------
5190 None of cairo's experimental backends are graduating to "supported"
5191 status with 1.4.0, but two of them in particular (quartz and xcb), are
5194 The quartz baceknd has been entirely rewritten and is now much more
5195 efficient. The XCB backend has been updated to track the latest XCB
5196 API (which recently had a 1.0 release).
5198 We hope to see these backends become supported in a future release,
5199 (once they are passing all the tests in cairo's test suite).
5201 The experimental OS/2 backend is new in cairo 1.4 compared to cairo
5204 Documentation improvements
5205 --------------------------
5206 We have added documentation for several functions and types that
5207 were previously undocumented, and improved documentation on other
5208 ones. As of this release, there remain only two undocumented
5209 symbols: cairo_filter_t and cairo_operator_t.
5211 [*]Thanks to everyone
5212 ---------------------
5213 I've accounted for 41 distinct people with attributed code added to
5214 cairo between 1.2.6 and 1.4.0, (their names are below). That's an
5215 impressive number, but there are certainly dozens more that
5216 contributed with testing, suggestions, clarifying questions, and
5217 encouragement. I'm grateful for the friendships that have developed as
5218 we have worked on cairo together. Thanks to everyone for making this
5221 Adrian Johnson, Alfred Peng, Alp Toker, Behdad Esfahbod,
5222 Benjamin Otte, Brian Ewins, Carl Worth, Christian Biesinger,
5223 Christopher (Monty) Montgomery, Daniel Amelang, Dan Williams,
5224 Dave Yeo, David Turner, Emmanuel Pacaud, Eugeniy Meshcheryakov,
5225 Frederic Crozat, Hans Breuer, Ian Osgood, Jamey Sharp, Jeff Muizelaar,
5226 Jeff Smith, Jinghua Luo, Jonathan Watt, Joonas Pihlaja, Jorn Baayen,
5227 Kalle Vahlman, Kjartan Maraas, Kristian Høgsberg, M Joonas Pihlaja,
5228 Mathias Hasselmann, Mathieu Lacage, Michael Emmel, Nicholas Miell,
5229 Pavel Roskin, Peter Weilbacher, Robert O'Callahan,
5230 Soren Sandmann Pedersen, Stuart Parmenter, T Rowley,
5233 Snapshot 1.3.16 (2007-03-02 Carl Worth <cworth@cworth.org>)
5234 ===========================================================
5237 A few new public functions have been added to the cairo API since the
5238 1.3.14 snapshot. These include a function to query the current scaled
5241 cairo_get_scaled_font
5243 New functions to query the reference count of all cairo objects:
5245 cairo_get_reference_count
5247 cairo_surface_get_reference_count
5248 cairo_pattern_get_reference_count
5250 cairo_font_face_get_reference_count
5251 cairo_scaled_font_get_reference_count
5253 And new functions to allow the use of user_data with any cairo object,
5254 (previously these were only available on cairo_surface_t and
5255 cairo_font_face_t objects):
5260 cairo_pattern_set_user_data
5261 cairo_pattern_get_user_data
5263 cairo_scaled_font_set_user_data
5264 cairo_scaled_font_get_user_data
5266 Usability improvement for PDF/PS/SVG generation
5267 -----------------------------------------------
5268 In previous versions of cairo, generating single-page output with the
5269 cairo-pdf, cairo-ps, or cairo-svg backends required a final call to
5270 cairo_show_page. This was often quite confusing as people would port
5271 functional code from a non-paginated backend and be totally mystified
5272 as to why the output was blank until they learned to add this call.
5274 Now that call to cairo_show_page is optional, (it will be generated
5275 implicitly if the user does not call it). So cairo_show_page is only
5276 needed to explicitly separate multiple pages.
5278 Greatly improved PDF output
5279 ---------------------------
5280 We are very happy to be able to announce that cairo-generated PDF
5281 output will now have text that can be selected, cut-and-paste, and
5282 searched with most capable PDF viewer applications. This is something
5283 that was not ever possible with cairo 1.2.
5285 Also, the PDF output now has much more compact encoding of text than
5286 before. Cairo is now much more careful to not embed multiple copies of
5287 the same font at different sizes. It also compresses text and font
5288 streams within the PDF output.
5292 • Fixed radial gradients
5294 The rendering of radial gradients has been greatly improved. In
5295 the cairo 1.2 series, there was a serious regression affecting
5296 radial gradients---results would be very incorrect unless one of
5297 the gradient circles had a radius of 0.0 and a center point within
5298 the other circle. These bugs have now been fixed.
5302 Several fixes have been made to the implementation of dashed
5303 stroking. Previously, some dashed, stroked rectangles would
5304 mis-render and fill half of the rectangle with a large triangular
5305 shape. This bug has now been fixed.
5307 • Fixed transformed images in PDF/PS output
5309 In previous versions of cairo, painting with an image-based source
5310 surface pattern to the PDF or PS backends would cause many kinds
5311 of incorrect results. One of the most common problems was that an
5312 image would be repeated many times even when the user had
5313 explicitly requested no repetition with CAIRO_EXTEND_NONE. These
5314 bugs have now been fixed.
5316 • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD
5318 In the 1.2 version of cairo any use of CAIRO_EXTEND_REFLECT or
5319 CAIRO_EXTEND_PAD with a surface-based pattern resulted in an
5320 error, (cairo would stop rendering). This bug has now been
5323 Now, CAIRO_EXTEND_REFLECT should work properly with surface
5326 CAIRO_EXTEND_PAD is still not working correctly, but it will now
5327 simply behave as CAIRO_EXTEND_NONE rather than triggering the
5330 New rewrite of quartz backend (still experimental)
5331 --------------------------------------------------
5332 Cairo's quartz backend has been entirely rewritten and is now much
5333 more efficient. This backend is still marked as experimental, not
5334 supported, but it is now much closer to becoming an officially
5335 supported backend. (For people that used the experimental nquartz
5336 backend in previous snapshots, that implementation has now been
5337 renamed from "nquartz" to "quartz" and has replaced the old quartz
5340 Documentation improvements
5341 --------------------------
5342 We have added documentation for several functions and types that
5343 were previously undocumented, and improved documentation on other
5344 ones. As of this release, there remain only two undocumented
5345 symbols: cairo_filter_t and cairo_operator_t.
5349 • cairo-svg: Fix bug that was preventing text from appearing in many
5352 • cairo-ft: Return correct metrics when hinting is off
5354 • Cairo 1.3.14 deadlocks in cairo_scaled_font_glyph_extents or
5355 _cairo_ft_unscaled_font_lock_face
5357 https://bugs.freedesktop.org/show_bug.cgi?id=10035
5359 • cairo crashes in cairo_create_similar if nil surface returned by
5360 other->backend->create_similar
5362 https://bugs.freedesktop.org/show_bug.cgi?id=9844
5364 • evolution crash in _cairo_gstate_backend_to_user()
5365 https://bugs.freedesktop.org/show_bug.cgi?id=9906
5367 • Fix memory leak in rectilinear stroking code
5369 Things not in this release
5370 --------------------------
5371 • Solid-surface-pattern cache: This patch had been applied during
5372 the 1.3.x series, but it was reverted due to some inter-thread
5373 problems it caused. The patch is interesting since it made a big
5374 benefit for text rendering performance---so we'll work to bring a
5375 corrected version of this patch back as soon as possible.
5377 Snapshot 1.3.14 (2006-02-13 Carl Worth <cworth@cworth.org>)
5378 ===========================================================
5379 This is the seventh development snapshot in the 1.3 series, (and there
5380 likely won't be many more before the 1.4.0 release). It comes just
5381 over 3 weeks after the 1.3.12 snapshot.
5383 Since we're so close to the 1.4.0 release, there are not a lot of new
5384 features nor even a lot of new performance improvements in this
5385 snapshot. Instead, there are a great number of bug fixes. Some are
5386 long-standing bugs that we're glad to say goodbye to, and several are
5387 fixes for regressions that were introduced as part of the optimization
5388 efforts during the 1.3.x series.
5390 PDF text selection fixed
5391 ------------------------
5392 The inability to correctly select text in cairo-generated PDF has been
5393 a defect ever since the initial support for the PDF backend in the
5394 cairo 1.2.0 release. With the 1.3.14 snapshot, in most situations, and
5395 with most PDF viewer applications, the PDF generated by cairo will
5396 allow text to be correctly selected for copy-and-paste, (as well as
5399 We're very excited about this new functionality, (and very grateful to
5400 Adrian Johnson, Behdad Esfahbod, and others that have put a lot of
5401 work into this lately). Please test this new ability and give feedback
5402 on the cairo@cairographics.org list.
5404 Many thread-safety issues fixed
5405 -------------------------------
5406 We've discovered that no release of cairo has ever provided safe text
5407 rendering from a multi-threaded application. With the 1.3.14 snapshot
5408 a huge number of the bugs in this area have been fixed, and multiple
5409 application dvelopers have now reported success at writing
5410 multi-threaded applications with cairo.
5414 Fixed a bug that was causing glyph spacing to be 32 times larger than
5415 desired when using cairo-win32.
5417 Fixed a regression in the rendering of linear gradients that had been
5418 present since the 1.3.8 snapshot.
5420 Fixed several problems in cairo-atsui that were leading to assertion
5421 failures when rendering text.
5423 Fix corrupted results when rendering a transformed source image
5424 surface to an xlib surface. This was a regression that had been
5425 present since the 1.3.2 snapshot.
5427 Fixed PDF output to prevent problems printing from some versions of
5428 Acrobat Reader, (a single glyph was being substituted for every
5431 And many other fixes as well, (see the logs for details).
5433 Snapshot 1.3.12 (2007-01-20 Carl Worth <cworth@cworth.org>)
5434 ===========================================================
5435 The relentless march toward the cairo 1.4 release continues, (even if
5436 slightly late out of the starting blocks in 2007). This is the sixth
5437 development snapshot in the 1.3 series. It comes 4 weeks after the
5442 As usual, this snapshot has some fun performance improvements to show
5445 image-rgba long-lines-uncropped-100 470.08 -> 4.95: 94.91x speedup
5446 ███████████████████████████████████████████████
5447 image-rgb long-lines-uncropped-100 461.60 -> 4.96: 93.02x speedup
5448 ██████████████████████████████████████████████
5450 This 100x improvement, (and yes, that's 100x, not 100%), in the image
5451 backend occurs when drawing large shapes where only a fraction of the
5452 shape actually appears in the final result, (the rest being outside
5453 the bounds of the destination surface). Many applications should see
5454 speedups here, and the actual amount of speedup depends on the ratio
5455 of non-visible to visible portions of geometry.
5457 [Note: There remains a similar performance bug when drawing mostly
5458 non-visible objects with the xlib backend. This is due to a similar
5459 bug in the X server itself, but we hope a future cairo snapshot will
5460 workaround that bug to get a similar speedup with the xlib backend.]
5462 image-rgba unaligned_clip-100 0.09 -> 0.06: 1.67x speedup
5464 image-rgb unaligned_clip-100 0.09 -> 0.06: 1.66x speedup
5467 This speedup is due to further MMX optimization by Soeren Sandmann for
5468 a case commonly hit when rendering PDF files, (and thanks to Jeff
5469 Muizelaar for writing code to extract the test case for us).
5471 There's another MMX optimization in this snapshot (without a fancy
5472 speedup chart) by Dan Williams which improves compositing performance
5473 specifically for the OLPC machine.
5475 Thanks to Adrian Johnson, cairo's PDF output is now much more
5476 efficient in the way it encodes text output. By reducing redundant
5477 information and adding compression to text output streams, Adrian
5478 achieved a ~25x improvement in the efficiency of encoding text in PDF
5479 files, (was ~45 bytes per glyph and is now ~1.6 bytes per glyph).
5483 In addition to those performance improvements, this snapshot includes
5486 * A huge number of bug fixes for cairo-atsui text rendering, (for mac
5487 OS X). These bugs affect font selection, glyph positioning, glyph
5488 rendering, etc. One noteworthy bug fixes is that
5489 cairo_select_font_face will no longer arbitrarily select bold nor
5490 italic when not requested, (at least not when using a standard CSS2
5491 font family name such as "serif", "sans-serif", "monospace", etc.).
5492 All these fixes are thanks to Brian Ewins who continues to do a
5493 great job as the new cairo-atsui maintainer.
5495 * Fix PDF output so that images that are scaled down no longer
5496 mysteriously repeat (Carl Worth).
5498 * Fix segfault on Mac OS X dues to attempt to measure extents of a
5499 zero-length string (Behdad Esfahbod).
5501 * Fix text extents to not include the size of initial/trailing
5502 non-inked characters (Behdad Esfahbod).
5506 Three functions have had API changes to improve consistency. Note that
5507 the API functions being changed here are all functions that were
5508 introduced as new functions during these 1.3.x snapshots. As always,
5509 there will not be any API changes to functions included in a major
5510 release (1.2.x, 1.4.x, etc.) of cairo.
5512 The changes are as follows:
5514 * Rename of cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list.
5516 * Change cairo_get_dash_count to return an int rather than accepting a
5517 pointer to an int for the return value.
5519 * Change cairo_get_dash to have a void return type rather than
5520 returning cairo_status_t.
5522 It's possible there will be one more round of changes to these
5523 functions, (and perhaps cairo_get_color_stop as well), as we seek to
5524 establish a unifying convention for returning lists of values.
5526 Snapshot 1.3.10 (2006-12-23 Carl Worth <cworth@cworth.org>)
5527 ===========================================================
5528 Santa Claus is coming just a little bit early this year, and he's
5529 bringing a shiny new cairo snapshot for all the good little boys and
5532 This is the fifth development snapshot in the 1.3 series. It comes 9
5533 days after the 1.3.8 snapshot, and still well within our goal of
5534 having a new snapshot every week, (though don't expect one next
5535 week---we'll all be too stuffed with sugar plums).
5537 Speaking of sugar plums, there's a sweet treat waiting in this cairo
5538 snapshot---greatly improved performance for stroking rectilinear
5539 shapes, like the ever common rectangle:
5541 image-rgb box-outline-stroke-100 0.18 -> 0.01: 25.58x speedup
5542 ████████████████████████▋
5543 image-rgba box-outline-stroke-100 0.18 -> 0.01: 25.57x speedup
5544 ████████████████████████▋
5545 xlib-rgb box-outline-stroke-100 0.49 -> 0.06: 8.67x speedup
5547 xlib-rgba box-outline-stroke-100 0.22 -> 0.04: 5.39x speedup
5550 In past releases of cairo, some people had noticed that using
5551 cairo_stroke to draw rectilinear shapes could be awfully slow. Many
5552 people had worked around this by using cairo_fill with a more complex
5553 path and gotten a 5-15x performance benefit from that.
5555 If you're one of those people, please rip that workaround out, as now
5556 the more natural use of cairo_stroke should be 1.2-2x faster than the
5557 unnatural use of cairo_fill.
5559 And if you hadn't ever implemented that workaround, then you just
5560 might get to see your stroked rectangles now get drawn 5-25x faster.
5562 Beyond that performance fix, there are a handful of bug fixes in this
5565 * Fix for glyph cache race condition in glitz backend (Jinghua Luo)
5567 * Many fixes for ATSUI text rendering (Brian Ewins)
5569 * Un-break recent optimization-triggered regression in rendering text
5570 with a translation in the font matrix (Behdad Esfahbod)
5572 * Fix make check to work on OPD platforms (IA64 or PPC64)
5575 * Fix a couple of character spacing issues on Windows
5578 Have fun with that, everybody, and we'll be back for more in the new
5579 year, (with a plan to add the last of our performance improvements in
5580 this round, fix a few bad, lingering bugs, and then finish off a nice,
5581 stable 1.4 release before the end of January).
5585 Snapshot 1.3.8 (2006-12-14 Carl Worth <cworth@cworth.org>)
5586 ==========================================================
5587 This is the fourth development snapshot in the 1.3 series. It comes
5588 just slightly more than one week after the 1.3.6 snapshot.
5590 After the bug fixes in 1.3.6, we're back to our original program of
5591 weekly snapshots, each one faster than the one from the week
5592 before. Cairo 1.3.8 brings a 2x improvement in the speed of rendering
5593 linear gradients (thanks to David Turner), and a significant reduction
5594 in X traffic when rendering text (thanks to Xan Lopez and Behdad
5595 Esfahbod), making cairo behave very much like Xft does.
5597 A few other things in the 1.3.8 snapshot worth noting include a more
5598 forgiving image comparator in the test suite, (using the "perceptual
5599 diff" metric and GPL implementation by Hector Yee[*]), a bug fix for
5600 broken linking on x86_64 (thanks to M Joonas Pihlaja) and an even
5601 better implementation of _cairo_lround, (not faster, but supporting a
5602 more complete input range), from Daniel Amelang.
5604 [*] http://pdiff.sourceforge.net/
5606 Snapshot 1.3.6 (2006-12-06 Carl Worth <cworth@cworth.org>)
5607 ==========================================================
5608 This is the third development snapshot in the 1.3 series. It comes two
5609 weeks after the 1.3.4 snapshot.
5611 We don't have fancy performance charts this week as the primary
5612 changes in this snapshot are bug fixes. The performance work continues
5613 and the next snapshot (planned for one week from today) should include
5614 several improvements. The bug fixes in this snapshot include:
5616 * Fix undesirable rounding in glyph positioning (Dan Amelang)
5618 This bug was noticed by several users, most commonly by seeing
5619 improper text spacing or scrambled glyphs as drawn by nautilus. For
5622 Update to cairo-1.3.4 worsen font rendering
5623 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=217819
5625 * Fix reduced range of valid input coordinates to tessellator
5628 This bug was causing lots of assertion failures in mozilla as
5631 CAIRO_BO_GUARD_BITS and coordinate space?
5632 https://lists.freedesktop.org/archives/cairo/2006-December/008743.html
5634 * Fix several regressions in new tessellator (M Joonas Pihlaja)
5636 Joonas just had a good eye for detail here. I don't think any
5637 external cairo users had noticed any of these bugs yet.
5639 * Fix compilation problems of cairo "wideint" code on some platforms
5642 * Fix failed configure due to broken grep (Dan Amelang)
5644 This bug was reported here:
5646 AX_C_FLOAT_WORDS_BIGENDIAN doesn't work because grep doesn't
5647 work with binary file
5648 https://bugs.freedesktop.org/show_bug.cgi?id=9124
5650 * Remove the pkg-config minimum version requirement (Behdad Esfahbod)
5652 Some systems ship with pkg-config 0.15 and there was really no good
5653 reason for cairo to insist on having version 0.19 before it would
5656 There is also one new (but inert) feature in this snapshot. There's a
5657 new option that can be passed to cairo's configure script:
5659 --disable-some-floating-point
5661 Disable certain code paths that rely heavily on double precision
5662 floating-point calculation. This option can improve
5663 performance on systems without a double precision floating-point
5664 unit, but might degrade performance on those that do.
5666 As of this snapshot, this option does not make any change to cairo,
5667 but it is possible that future versions of cairo will respect this
5668 option and change the implementation of various functions as
5671 Snapshot 1.3.4 (2006-11-22 Carl Worth <cworth@cworth.org>)
5672 ==========================================================
5673 This is the second development snapshot in the 1.3 series. It comes
5674 one week after the 1.3.2 snapshot.
5676 This snapshot has a couple of significant performance improvements,
5677 and also adds new support for producing multi-page SVG output, (when
5678 targeting SVG 1.2)---thanks to Emmanuel Pacaud. The details of the
5679 performance improvements are as follows:
5681 1. The long-awaited "new tessellator".
5683 The credit for this being an improvement goes to Joonas Pihlaja. He
5684 took my really slow code and really put it through its paces to get
5685 the dramatic performance improvement seen below (up to 38x faster
5686 on realistic cases, and more than 10x faster for the zrusin_another
5689 His own writeup of the work he did is quite thorough, but more than
5690 can be quoted here. Please see his post for the interesting details:
5692 https://lists.freedesktop.org/archives/cairo/2006-November/008483.html
5694 (Though note that this snapshot also includes some additional,
5695 significant improvements that were only sketched out in that
5696 email---see "Generating fewer trapezoids").
5698 2. More floating-point improvements
5700 Daniel Amelang continues to work the magic he began in the 1.3.2
5701 snapshot. This time he short-circuits floating-point
5702 transformations by identity matrices and applies the earlier
5703 floating-to-fixed-point technique to the problem of rounding.
5705 The improvements here will primarily benefit text performance, and
5706 will benefit platforms without hardware floating-point more than
5707 those that have it, (some text tests show 20% improvement on an x86
5708 machine and closer to 80% improvement on arm).
5710 The performance chart comparing 1.3.2 to 1.3.4 really speaks for
5711 itself, (this is on an x86 laptop). This is quite a lot of progress
5714 xlib-rgb stroke_similar_rgba_over-256 74.99 1.45% -> 2.03 68.38%: 36.86x speedup
5715 ███████████████████████████████████▉
5716 xlib-rgb stroke_similar_rgba_source-256 78.23 1.43% -> 3.30 67.05%: 23.71x speedup
5717 ██████████████████████▊
5718 xlib-rgba tessellate-256-100 820.42 0.15% -> 35.06 2.84%: 23.40x speedup
5719 ██████████████████████▍
5720 image-rgba tessellate-256-100 819.55 0.32% -> 35.04 3.56%: 23.39x speedup
5721 ██████████████████████▍
5722 xlib-rgb stroke_image_rgba_over-256 78.10 1.43% -> 4.33 65.56%: 18.04x speedup
5724 xlib-rgb stroke_image_rgba_source-256 80.11 1.63% -> 5.75 63.99%: 13.94x speedup
5726 xlib-rgba zrusin_another_tessellate-415 89.22 0.35% -> 8.38 5.23%: 10.65x speedup
5728 image-rgba zrusin_another_tessellate-415 87.38 0.89% -> 8.37 5.22%: 10.44x speedup
5730 image-rgba zrusin_another_fill-415 117.67 1.34% -> 12.88 2.77%: 9.14x speedup
5732 xlib-rgba zrusin_another_fill-415 140.52 1.57% -> 15.79 2.88%: 8.90x speedup
5734 image-rgba tessellate-64-100 9.68 3.42% -> 1.42 0.60%: 6.82x speedup
5736 xlib-rgba tessellate-64-100 9.78 4.35% -> 1.45 0.83%: 6.72x speedup
5738 xlib-rgb stroke_linear_rgba_over-256 46.01 2.44% -> 7.74 54.51%: 5.94x speedup
5740 xlib-rgb stroke_linear_rgba_source-256 48.09 2.15% -> 9.14 53.00%: 5.26x speedup
5742 xlib-rgb stroke_radial_rgba_over-256 50.96 2.34% -> 12.46 47.99%: 4.09x speedup
5744 xlib-rgb stroke_radial_rgba_source-256 53.06 1.57% -> 13.96 46.57%: 3.80x speedup
5746 image-rgba paint_similar_rgba_source-256 0.12 1.57% -> 0.08 9.92%: 1.42x speedup
5748 image-rgba paint_image_rgba_source-256 0.12 2.49% -> 0.08 10.70%: 1.41x speedup
5750 image-rgba world_map-800 356.28 0.46% -> 275.72 1.15%: 1.29x speedup
5752 xlib-rgba world_map-800 456.81 0.39% -> 357.95 1.39%: 1.28x speedup
5754 image-rgb tessellate-16-100 0.09 0.57% -> 0.07 3.43%: 1.23x speedup
5756 image-rgba tessellate-16-100 0.09 0.06% -> 0.07 2.46%: 1.23x speedup
5758 image-rgba text_solid_rgb_over-256 5.39 4.01% -> 4.47 0.70%: 1.21x speedup
5760 image-rgba text_solid_rgba_over-256 5.37 0.82% -> 4.45 0.75%: 1.21x speedup
5762 image-rgba text_image_rgb_over-64 0.78 0.10% -> 0.65 0.74%: 1.20x speedup
5764 image-rgba text_image_rgba_over-64 0.78 0.29% -> 0.65 0.68%: 1.19x speedup
5766 image-rgb text_solid_rgb_over-64 0.76 2.45% -> 0.63 0.81%: 1.19x speedup
5768 image-rgba text_solid_rgba_over-64 0.76 0.33% -> 0.64 0.66%: 1.19x speedup
5770 image-rgba text_similar_rgba_over-256 5.99 4.72% -> 5.04 1.09%: 1.19x speedup
5773 We should point out that there is some potential for slowdown in this
5774 snapshot. The following are the worst slowdowns reported by the cairo
5775 performance suite when comparing 1.3.2 to 1.3.4:
5777 image-rgba subimage_copy-256 0.01 0.87% -> 0.01 3.61%: 1.45x slowdown
5779 xlib-rgb paint_solid_rgb_over-256 0.31 10.23% -> 0.38 0.33%: 1.26x slowdown
5781 image-rgba box-outline-fill-100 0.01 0.30% -> 0.01 2.52%: 1.21x slowdown
5783 image-rgba fill_solid_rgb_over-64 0.20 1.22% -> 0.22 1.59%: 1.12x slowdown
5785 image-rgb fill_similar_rgb_over-64 0.21 1.04% -> 0.24 1.06%: 1.11x slowdown
5787 image-rgba fill_image_rgb_over-64 0.21 1.19% -> 0.24 0.72%: 1.11x slowdown
5789 image-rgba fill_similar_rgb_over-64 0.21 0.18% -> 0.24 0.30%: 1.11x slowdown
5791 image-rgb fill_solid_rgba_over-64 0.22 1.66% -> 0.24 1.15%: 1.11x slowdown
5793 image-rgb fill_image_rgb_over-64 0.21 0.14% -> 0.24 0.80%: 1.11x slowdown
5795 image-rgba fill_image_rgba_over-64 0.22 1.34% -> 0.25 0.20%: 1.11x slowdown
5797 image-rgba fill_solid_rgba_over-64 0.22 1.48% -> 0.24 0.95%: 1.11x slowdown
5799 image-rgb fill_similar_rgba_over-64 0.22 1.13% -> 0.25 1.25%: 1.10x slowdown
5802 The 45% slowdown for subimage_copy is an extreme case. It's unlikely
5803 to hit many applications unless they often use cairo_rectangle;
5804 cairo_fill to copy a single pixel at a time. In any case, it shows a
5805 worst-case impact of the overhead of the new tessellator. The other
5806 slowdowns (~ 10%) are probably more realistic, and still very
5809 We will work to ensure that performance regressions like these are not
5810 present from one major release of cairo to the next, (for example,
5813 But we're putting this 1.3.4 snapshot out there now, even with this
5814 potential slowdown so that people can experiment with it. If you've
5815 got complex geometry, we hope you will see some benefit from the new
5816 tessellator. If you've got primarily simple geometry, we hope things
5817 won't slowdown too much, but please let us know what slowdown you see,
5818 if any, so we can calibrate our performance suite against real-world
5821 Thanks, and have fun with cairo!
5823 Snapshot 1.3.2 (2006-11-14 Carl Worth <cworth@cworth.org>)
5824 ==========================================================
5825 This is the first development snapshot since the 1.2 stable series
5826 branched off shortly after the 1.2.4 release in August 2006.
5828 This snapshot includes all the bug fixes from the 1.2.6 release,
5829 (since they originated here on the 1.3 branch first and were
5830 cherry-picked over to 1.2). But more importantly, it contains some new
5831 API in preparation for a future 1.4 release, and most importantly, it
5832 contains several performance improvements.
5834 The bug fixes will not be reviewed here, as most of them are already
5835 described in the 1.2.6 release notes. But details for the new API and
5836 some performance improvements are included here.
5838 As with all snapshots, this is experimental code, and the new API
5839 added here is still experimental and is not guaranteed to appear
5840 unchanged in any future release of cairo.
5844 Several new API additions are available in this release. There is a
5845 common theme among all the additions in that they allow cairo to
5846 advertise information about its state that it was refusing to
5847 volunteer earlier. So this isn't groundbreaking new functionality, but
5848 it is essential for easily achieving several tasks.
5850 The new functions can be divided into three categories:
5852 Getting information about the current clip region
5853 -------------------------------------------------
5855 cairo_copy_clip_rectangles
5856 cairo_rectangle_list_destroy
5858 Getting information about the current dash setting
5859 --------------------------------------------------
5860 cairo_get_dash_count
5863 Getting information from a pattern
5864 ----------------------------------
5865 cairo_pattern_get_rgba
5866 cairo_pattern_get_surface
5867 cairo_pattern_get_color_stop_rgba
5868 cairo_pattern_get_color_stop_count
5869 cairo_pattern_get_linear_points
5870 cairo_pattern_get_radial_circles
5872 In each of these areas, we have new API for providing a list of
5873 uniform values from cairo. The closest thing we had to this before was
5874 cairo_copy_path, (which is rather unique in providing a list of
5877 The copy_clip_rectangles/rectangle_list_destroy functions follow a
5878 style similar to that of cairo_copy_path. Meanwhile, the dash and
5879 pattern color stop functions introduce a new style in which there is a
5880 single call to return the number of elements available (get_dash_count
5881 and get_color_stop_count) and then a function to be called once to get
5882 each element (get_dash and get_color_stop_rgba).
5884 I'm interested in hearing feedback from users of these new API
5885 functions, particularly from people writing language bindings. One
5886 open question is whether the clip "getter" functionality should adopt
5887 a style similar to that of the new dash and color_stop interfaces.
5891 The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never
5892 worked as a format value for cairo_image_surface_create, and it wasn't
5893 necessary for supporting 16-bit 565 X server visuals.
5897 The XCB backend has been updated to track the latest XCB API (which
5898 recently had a 1.0 release).
5902 Vladimir Vukicevic has written a new "native quartz" backend which
5903 will eventually replace the current "image-surface wrapping" quartz
5904 backend. For now, both backends are available, (the old one is
5905 "quartz" and the new one is "nquartz"). But it is anticipated that the
5906 new backend will replace the old one and take on the "quartz" name
5907 before this backend is marked as supported in a release of cairo.
5911 Doodle and Peter Weilbacher have contributed a new, experimental
5912 backend for using cairo on OS/2 systems.
5914 Performance improvements
5915 ------------------------
5916 Here are some highlights from cairo's performance suite showing
5917 improvements from cairo 1.2.6 to cairo 1.3.2. The command used to
5918 generate this data is:
5920 ./cairo-perf-diff 1.2.6 HEAD
5922 available in the perf/ directory of a recent checkout of cairo's
5923 source, (the cairo-perf-diff script does require a git checkout and
5924 will not work from a tar file---though ./cairo-perf can still be used
5925 to generate a single report there and ./cairo-perf-diff-files can be
5926 used to compare two reports).
5928 Results are described below both for an x86 laptop (with an old Radeon
5929 video card, recent X.org build, XAA, free software drivers), as well
5930 as for a Nokia 770. First the x86 results with comments on each, (all
5931 times are reported in milliseconds).
5933 Copying subsets of an image surface to an xlib surface (much faster)
5934 --------------------------------------------------------------------
5935 xlib-rgba subimage_copy-512 10.50 -> : 53.97x speedup
5936 █████████████████████████████████████████████████████
5938 Thanks to Christopher (Monty) Montgomery for this big performance
5939 improvement. Any application which has a large image surface and is
5940 copying small pieces of it at a time to an xlib surface, (imagine an
5941 application that loads a single image containing all the "sprites" for
5942 that application), will benefit from this fix. The larger the ratio of
5943 the image surface to the portion being copied, the larger the benefit.
5945 Floating-point conversion (3x faster)
5946 -------------------------------------
5947 xlib-rgba pattern_create_radial-16 27.75 -> 3.93 : 2.94x speedup
5949 image-rgb pattern_create_radial-16 26.06 -> 3.74 : 2.90x speedup
5952 Thanks to Daniel Amelang, (and others who had contributed the idea
5953 earlier), for this nice improvement in the speed of converting
5954 floating-point values to fixed-point.
5956 Text rendering (1.3 - 2x faster)
5957 ------------------------------
5958 xlib-rgba text_image_rgba_source-256 319.73 -> 62.40 : 2.13x speedup
5960 image-rgb text_solid_rgba_over-64 2.85 -> 0.88 : 1.35x speedup
5963 I don't think we've ever set out to improve text performance
5964 specifically, but we did it a bit anyway. I believe the extra
5965 improvement in the xlib backend is due to Monty's image copying fix
5966 above, and the rest is due to the floating-point conversion speedup.
5968 Thin stroke improvements (1.5x faster)
5969 ---------------------------------------------
5970 image-rgb world_map-800 1641.09 -> 414.77 : 1.65x speedup
5972 xlib-rgba world_map-800 1939.66 -> 529.94 : 1.52x speedup
5975 The most modest stuff to announce in this release is the 50%
5976 improvement I made in the world_map case. This is in improvement that
5977 should help basically anything that is doing strokes with many
5978 straight line segments, (and the thinner the better, since that makes
5979 tessellation dominate rasterization). The fixes here are to use a
5980 custom quadrilateral tessellator rather than the generic tessellator
5981 for straight line segments and the miter joins.
5983 Performance results from the Nokia 770
5984 --------------------------------------
5985 xlib-rgba subimage_copy-512 55.88 -> 2.04 : 27.34x speedup
5986 ██████████████████████████▍
5987 xlib-rgb text_image_rgb_over-256 1487.58 -> 294.43 : 5.05x speedup
5989 image-rgb pattern_create_radial-16 187.13 -> 91.86 : 2.04x speedup
5991 xlib-rgba world_map-800 21261.41 -> 15628.02 : 1.36x speedup
5994 Here we see that the subimage_copy improvement was only about half as
5995 large as the corresponding improvement on my laptop, (27x faster
5996 compared to 54x) and the floating-point conversion fix also was quite
5997 as significant, (2x compared to 3x). Oddly the improvement to text
5998 rendering performance was more than twice as good (5x compared to
5999 2x). I don't know what the reason for that is, but I don't think it's
6000 anything anybody should complain about.
6002 Release 1.2.6 (2006-11-02 Behdad Esfahbod <behdad@behdad.org>)
6003 ==============================================================
6004 This is the third bug fix release in the 1.2 series, coming less than
6005 two months after the 1.2.4 release made on August 18.
6007 The 1.2.4 release turned out to be a pretty solid one, except for a crash
6008 bug when forwarding an X connection where the client and the server have
6009 varying byte orders, eg. from a PPC to an i686. Other than that, various
6010 other small bugs have been fixed.
6012 Various improvements have been made in the testing infrastructure to prevent
6013 false positives, and to make sure the generated cairo shared object behaves as
6014 expected in terms of exported symbols and relocations.
6016 There were a total of 89 changes since 1.2.4. The following list the most
6021 - Avoid unsigned loop control variable to eliminate infinite,
6022 memory-scribbling loop. (#7593)
6023 - Fix cairo_image_surface_create to report INVALID_FORMAT errors.
6024 Previously the detected error was being lost and a nil surface was
6025 returned that erroneously reported CAIRO_STATUS_NO_MEMORY.
6026 - Change _cairo_color_compute_shorts to not rely on any particular
6027 floating-point epsilon value. (#7497)
6028 - Fix infinite-join test case (bug #8379)
6029 - Pass correct surface to create_similar in _cairo_clip_init_deep_copy().
6033 - Fix Type 1 embedding in PDF.
6034 - Correct the value of /LastChar in the PDF Type 1 font dictionary.
6035 - Improve error checking in TrueType subsetting.
6036 - Compute right index when looking up left side bearing. (bug #8180)
6037 - Correct an unsigned to signed conversion problem in truetype subsetting
6039 - Type1 subsetting: Don't put .notdef in Encoding when there are 256 glyphs.
6040 - Add cairo version to PS header / PDF document info dictionary.
6041 - Set CTM before path construction.
6045 - Get correct unhinted outlines on win32. (bug 7603)
6046 - Make cairo as a win32 static library possible.
6047 - Use CAIRO_FORMAT_RGB24 for BITSPIXEL==32 surfaces too.
6051 - Define WINVER if it's not defined. (bug 6456)
6052 - Fix the AMD64 final link by removing SLIM from pixman.
6053 - Misc win32 compilation fixes.
6054 - Add Sun Pro C definition of pixman_private.
6055 - Use pixman_private consistently as prefix not suffix.
6056 - Added three tests check-plt.sh, check-def.sh, and check-header.sh that check
6057 that the shared object, the .def file, and the public headers agree about
6058 the exported symbols.
6059 - Require pkg-config 0.19. (#8686)
6062 Release 1.2.4 (2006-08-18 Carl Worth <cworth@cworth.org>)
6063 =========================================================
6064 This is the second bug fix release in the 1.2 series, coming less than
6065 two weeks after the 1.2.2 release made on August 8.
6067 The big motivation for a quick release was that there were a log of
6068 build system snags that people ran into with the 1.2.2 release. But,
6069 by the time we got those all done, we found that we had a bunch of
6070 fixes for cairo's rendering as well. So there's a lot of goodness in
6071 here for such a short time period.
6075 Fix image surfaces to not be clipped when used as a source (Vladimir Vukicevic)
6076 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=72e25648c4c4bc82ddd938aa4e05887a293f0d8b
6078 Fix a couple of corner cases in dashing degenerate paths (Jeff Muizelaar)
6079 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=fbb1758ba8384650157b2bbbc93d161b0c2a05f0
6081 Fix support for type1 fonts on win32 (Adrian Johnson)
6082 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=da1019c9138695cb838a54f8b871bbfd0e8996d7
6084 Fix assertion failure when rotating bitmap fonts (Carl Worth)
6085 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=0bfa6d4f33b8ddb5dc55bbe419c15df4af856ff9
6087 Fix assertion failure when calling cairo_text_path with bitmap fonts (Carl Worth)
6088 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=9878a033531e6b96b5f27e69e10e90dee7440cd9
6090 Fix mis-handling of cairo_close_path in some situations (Tim Rowley, Carl Worth)
6091 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=53f74e59faf1af78f2f0741ccf1f23aa5dad4efc
6093 Respect font_matrix translation in _cairo_gstate_glyph_path (Behdad Esfahbod)
6094 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=f183b835b111d23e838889178aa8106ec84663b3
6096 Fix vertical metrics adjustment to work with non-identity shapes (Behdad Esfahbod)
6097 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7bc263842a798d657a95e539e1693372448837f
6099 [PS] Set correct ImageMatrix in _cairo_ps_surface_emit_bitmap_glyph_data (Behdad Esfahbod)
6100 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=d47388ad759b0a1a0869655a87d9b5eb6ae2445d
6104 Fix xlib detection to prefer pkg-config to avoid false libXt dependency (Behdad Esfahbod)
6105 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=0e78e7144353703cbd28aae6a67cd9ca261f1d68
6107 Fix typos causing win32 build problem with PS,PDF, and SVG backends (Behdad Esfahbod)
6108 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=aea83b908d020e26732753830bb3056e6702a774
6110 Fix configure cache to not use stale results (Behdad Esfahbod)
6111 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=6d0e3260444a2d5b6fb0cb223ac79f1c0e7b3a6e
6113 Fix to not pass unsupported warning options to the compiler (Jens Granseuer)
6114 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=97524a8fdb899de1ae4a3e920fb7bda6d76c5571
6116 Fix to allow env. variables such as png_REQUIRES to override configure detection (Jens Granseuer)
6117 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=abd16e47d6331bd3811c908e524b4dcb6bd23bf0
6119 Fix test suite to not use an old system cairo when converting svg2png (Behdad Esfahbod)
6120 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=6122cc85c8f71b1ba2df3ab86907768edebe1781
6122 Fix test suite to not require signal.h to be present (Behdad Esfahbod)
6123 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=6f8cf53b1e1ccdbe1ab6a275656b19c6e5120e40
6127 Many useful warnings cleanups from sparse, valgrind, and careful eyes
6128 (Kjartan Maraas, Pavel Roskin)
6130 Release 1.2.2 (2006-08-08 Carl Worth <cworth@cworth.org>)
6131 =========================================================
6132 This is the first bug fix release in the 1.2 series since the original
6133 1.2.0 release made six weeks ago.
6135 There were some very serious bugs in the 1.2.0 release, (see below),
6136 so everybody is encouraged to upgrade from 1.2.0 to 1.2.2. The 1.2.2
6137 release maintains source and binary compatibility with 1.2.0 and does
6138 not make any API additions.
6140 Fix crashes with BGR X servers
6141 ------------------------------
6142 With cairo 1.2.0 many people reported problems with all cairo-using
6143 programs, (including all GTK+ programs with GTK+ >= 2.8) immediately
6144 crashing with a complaint about an unsupported image format. This bug
6145 affected X servers that do not provide the Render extension and that
6146 provide a visual with BGR rather than RGB channel order.
6148 report: https://bugs.freedesktop.org/show_bug.cgi?id=7294
6149 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=9ae66174e774b57f16ad791452ed44efc2770a59
6151 Fix the "disappearing text" bug
6152 -------------------------------
6153 With cairo 1.2.0 many people reported that text would disappear from
6154 applications, sometimes reappearing with mouse motion or
6155 selection. The text would disappear after the first space in a string
6156 of text. This bug was caused by an underlying bug in (very common) X
6157 servers, and only affected text rendered without antialiasing, (either
6158 a bitmap font or a vector font with antialiasing disabled). The bug
6159 was also exacerbated by a KDE migration bug that caused antialiasing
6160 to be disabled more than desired.
6162 report: https://bugs.freedesktop.org/show_bug.cgi?id=7494
6163 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=456cdb3058f3b416109a9600167cd8842300ae14
6165 Xorg: https://bugs.freedesktop.org/show_bug.cgi?id=7681
6166 KDE: http://qa.mandriva.com/show_bug.cgi?id=23990
6168 Fix broken image fallback scaling (aka. "broken printing")
6169 ----------------------------------------------------------
6170 The various "print" backends, (pdf, ps, and svg), sometimes fallback
6171 to using image-based rendering for some operations. In cairo 1.2.0
6172 these image fallbacks were scaled improperly. Applications using cairo
6173 can influence the resolution of the image fallbacks with
6174 cairo_surface_set_fallback_resolution. With the bug, any value other
6175 than 72.0 would lead to incorrect results, (larger values would lead
6176 to increasingly shrunken output).
6178 report: https://bugs.freedesktop.org/show_bug.cgi?id=7533
6179 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=1feb4291cf7813494355459bb547eec604c54ffb
6181 Fix inadvertent semantic change of font matrix translation (Behdad Esfahbod)
6182 ----------------------------------------------------------------------------
6183 The 1.2.0 release introduced an inadvertent change to how the
6184 translation components of a font matrix are interpreted. In the 1.0
6185 series, font matrix translation could be used to offset the glyph
6186 origin, (though glyph metrics were reported incorrectly in
6187 1.0). However in 1.2.0, the translation was applied to the advance
6188 values between each glyph. The 1.2.0 behavior is fairly useless in
6189 practice, and it was not intentional to introduce a semantic
6190 change. With 1.2.2 we return to the 1.0 semantics, with a much better
6191 implementation that provides correct glyph metrics.
6193 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=84840e6bba6e72aa88fad7a0ee929e8955ba9051
6195 Fix create_similar to preserve fallback resolution and font options (Behdad Esfahbod)
6196 -------------------------------------------------------------------------------------
6197 There has been a long-standing issue with cairo_surface_create_similar
6198 such that font options and other settings from the original
6199 destination surface would not be preserved to the intermediate
6200 "similar" surface. This could result in incorrect rendering
6201 (particularly with respect to text hinting/antialiasing) with
6202 fallbacks, for example.
6204 report: https://bugs.freedesktop.org/show_bug.cgi?id=4106
6205 fixes: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=9fcb3c32c1f16fe6ab913e27eb54d18b7d9a06b0
6206 https://gitweb.freedesktop.org/?p=cairo;a=commit;h=bdb4e1edadb78a2118ff70b28163f8bd4317f1ec
6208 xlib: Fix text performance regression from 1.0 to 1.2.0 (Vladimir Vukicevic)
6209 ----------------------------------------------------------------------------
6210 Several people noticed that upgrading from cairo 1.0 to cairo 1.2.0
6211 caused a significant performance regression when using the xlib
6212 backend. This performance regression was particularly noticeable when
6213 doing lots of text rendering and when using a high-latency connection
6214 to the X server, (such as a remote X server over an ssh
6215 connection). The slowdown was identified and fixed in 1.2.2.
6217 report: https://bugs.freedesktop.org/show_bug.cgi?id=7514
6218 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7191885c88068dad57d68ced69a752d1162b12c
6220 PDF: Eliminate dependency on FreeType library dependency (Adrian Johnson)
6221 -------------------------------------------------------------------------
6222 The cairo 1.2 series adds a supported pdf backend to cairo. In cairo
6223 1.2.0 this backend required the freetype library, which was an
6224 undesirable dependency on systems such as win32, (cairo is designed to
6225 always prefer the "native" font system). As of cairo 1.2.2 the
6226 freetype library is not required to use the pdf backend on the win32
6229 report: https://bugs.freedesktop.org/show_bug.cgi?id=7538
6230 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=a0989f427be87c60415963dd6822b3c5c3781691
6232 PDF: Fix broken output on amd64 (Adrian Johnson)
6233 ------------------------------------------------
6234 report: https://bugzilla.gnome.org/show_bug.cgi?id=349826
6235 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=f4b12e497b7ac282b2f6831b8fb68deebc412e60
6237 PS: Fix broken output for truetype fonts > 64k (Adrian Johnson)
6238 ---------------------------------------------------------------
6239 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=067d97eb1793a6b0d0dddfbd0b54117844511a94
6241 PDF: Fix so that dashing doesn't get stuck on (Kent Worsnop)
6242 ------------------------------------------------------------
6243 Kent notices that with the PDF backend in cairo 1.2.0 as soon as a
6244 stroke was performed with dashing, all subsequent strokes would also
6245 be dashed. There was no way to turn dashing off again.
6247 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=778c4730a86296bf0a71080cf7008d7291792256
6249 Fix memory leaks in failure paths in gradient creation (Alfred Peng)
6250 --------------------------------------------------------------------
6251 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=db06681b487873788b51a6766894fc619eb8d8f2
6253 Fix memory leak in _cairo_surface_show_glyphs (Chris Wilson)
6254 ------------------------------------------------------------
6255 report: https://bugs.freedesktop.org/show_bug.cgi?id=7766
6256 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=e2fddcccb43d06486d3680a19cfdd5a54963fcbd
6258 Solaris: Add definition of cairo_private for some Sun compilers (Alfred Peng)
6259 -----------------------------------------------------------------------------
6260 report: https://bugzilla.mozilla.org/show_bug.cgi?id=341874
6261 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=04757a3aa8deeff3265719ebe01b021638990ec6
6263 Solaris: Change version number of Sun's Xorg server with buggy repeat (Brian Cameron)
6264 -------------------------------------------------------------------------------------
6265 report: https://bugs.freedesktop.org/show_bug.cgi?id=7483
6266 fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=e0ad1aa995bcec4246c0b8ab0d5a5a79871ce235
6268 Various memory leak fixes
6269 -------------------------
6270 Fix memory leak in _cairo_surface_show_glyphs (bug 7766)
6271 Fix file handle leak in failure path (bug 7616)
6272 Fix some memory leaks in the test cases.
6273 Fix some memory leaks in font subsetting code used in print backends.
6275 Documentation improvements (Behdad Esfahbod)
6276 --------------------------------------------
6277 Added new documentation for several functions (cairo_show_page,
6278 cairo_copy_page, cairo_in_stroke, cairo_in_fill).
6280 Fixed some syntax errors that were preventing some existing
6281 documentation from being published.
6283 Fixed several minor typographical errors.
6285 Added an index for new symbols in 1.2.
6287 Release 1.2.0 (2006-06-27 Carl Worth <cworth@cworth.org>)
6288 =========================================================
6289 This is the culmination of the work that has gone on within the 1.1
6292 There has been one API addition since the cairo 1.1.10 snapshot:
6294 cairo_xlib_surface_get_width
6295 cairo_xlib_surface_get_height
6297 There's also a new feature without any API change:
6299 Dots can now be drawn by using CAIRO_LINE_CAP_ROUND with
6300 degenerate sub-paths, (cairo_move_to() followed by either
6301 cairo_close_path() or a cairo_line_to() to the same location).
6303 And at least the following bugs have been fixed:
6305 6759 fontconfig option AntiAlias doesn't work in cairo 1.1.2
6306 6955 Some characters aren't displayed when using xlib (cache u...
6307 7268 positive device_offset values don't work as source
6308 * PDF emit_glyph function needs to support bitmapped glyphs
6309 * PS emit_glyph function needs to support bitmapped glyphs
6310 * SVG emit_glyph function needs to support bitmapped glyphs
6311 * PDF: minefield page one is falling back unnecessarily
6312 * PS/PDF: Fix broken placement for vertical glyphs
6313 * PS: Fix to not draw BUTT-capped zero-length dash segments
6314 * Do device offset before float->fixed conversion
6315 https://bugzilla.gnome.org/show_bug.cgi?id=332266
6316 * PS: Fix source surfaces with transformations
6317 * PS: Fix to not draw BUTT-capped degenerate sub-paths
6318 * PS: Don't walk off end of array when printing "~>"
6319 * Fix some memory leaks in the test suite rig
6320 * SVG: Fix memory leak when using cairo_mask
6321 * Fix EXTEND_REFLECT and EXTEND_PAD to not crash (though these are
6322 still not yet fully implemented for surface patterns).
6324 This has been a tremendous effort by everyone, and I'm proud to have
6325 been a part of it. Congratulations to all contributors to cairo!
6327 Snapshot 1.1.10 (2006-06-16 Carl Worth <cworth@cworth.org>)
6328 ===========================================================
6329 This is the fifth in a series of snapshots working toward the 1.2
6332 The primary motivation for this snapshot is to fix a long-standing bug
6333 that had long been silent, but as of the 1.1.8 snapshot started
6334 causing crashes when run against 16-bit depth X servers, (often Xvnc
6335 or Xnest). The fix for this adds a new CAIRO_FORMAT_RGB16_565 to the
6338 This snapshot also includes a rewrite of cairo's SVG backend to
6339 eliminate the dependency on libxml2. With this in place, cairo 1.2
6340 will not depend on any libraries that cairo 1.0 did not.
6342 As usual, there are also a few fixes for minor bugs.
6344 Snapshot 1.1.8 (2006-06-14 Carl Worth <cworth@cworth.org>)
6345 ==========================================================
6346 This is the fourth in a series of snapshots working toward the 1.2
6347 release of cairo. At this point, all major features of the 1.2 release
6348 are in place, leaving just a few bug fixes left.
6350 In particular, there well be no additional API changes between this
6351 1.1.8 snapshot and the 1.2 release.
6353 The announcement for 1.1.6 mentioned several API changes being
6354 considered. Only one of these changes was actually implemented
6355 (set_dpi -> fallback_resolution). This change does introduce one
6356 source-level incompatibility with respect to previous 1.1.x snapshots,
6357 so see below for details.
6359 Here is an abbreviated summary of changes since the 1.1.6 snapshot:
6363 According to the plan mentioned in the 1.1.6 notes, one source-level
6364 incompatible change has been implemented. The following three
6365 functions have been removed from cairo's API:
6367 cairo_pdf_surface_set_dpi
6368 cairo_ps_surface_set_dpi
6369 cairo_svg_surface_set_dpi
6371 and in their place the following function has been added:
6373 cairo_surface_set_fallback_resolution
6375 The signature and semantics of the function remains the same, so it is
6376 a simple matter of changing the name of the function when calling
6377 it. As a transition mechanism, this snapshot will (on many systems)
6378 build to include the old symbols so that code previously compiled will
6379 still run. However, all source code using the old names must be
6380 updated before it will compile. And the upcoming 1.2 release is not
6381 anticipated to include the old symbols.
6383 Finally, it should be pointed out that the old symbols never existed
6384 in the supported API of any stable release of cairo. (In the stable
6385 1.0 releases the PDF, PS, and SVG backends were advertised as
6386 experimental and unstable.)
6388 And, as always, cairo continues to maintain source and binary
6389 compatibility between major releases. So applications compiled against
6390 supported backends in a stable release of cairo (1.0.4 say) will
6391 continue to compile and run without modification against new major
6392 releases (1.2.0 say) without modification.
6396 The following new functions have been added to cairo's API:
6398 cairo_surface_get_content
6399 cairo_debug_reset_static_data
6400 cairo_image_surface_get_data
6401 cairo_image_surface_get_format
6402 cairo_image_surface_get_stride
6403 cairo_win32_font_face_create_for_hfont
6405 New, backend-specific pkg-config files
6406 --------------------------------------
6407 In addition to the original cairo.pc file, cairo will also now install
6408 a pkg-config files for each configured backend, (for example
6409 cairo-pdf.pc, cairo-svg.pc, cairo-xlib.pc, cairo-win32.pc, etc.) this
6410 also includes optional font backends (such as cairo-ft.pc) and the
6411 optional png functionality (cairo-png.pc).
6413 These new pkg-config files should be very convenient for allowing
6414 cairo-using code to easily check for the existing of optional
6415 functionality in cairo without having to write complex rules to grub
6416 through cairo header files or the compiled library looking for
6419 Printing backend (PS, PDF, and SVG)
6420 -----------------------------------
6421 Improving the quality of the "printing" backends has been a priority
6422 of the development between cairo 1.1.6 and cairo 1.1.8.
6424 The big improvement here is in the area of text output. Previously, at
6425 best, text was output as paths without taking advantage of any font
6426 support available in the output file format.
6428 Now, at the minimum text paths will be shared by using type3 fonts
6429 (for PS and PDF---and similarly, defs for SVG). Also, if possible,
6430 type3 and truetype fonts will be embedded in PostScript and PDF
6431 output. There are still some known bugs with this, (for example,
6432 selecting text in a cairo-generated PDF file with an embedded truetype
6433 font does not work). So there will be some more changes in this area
6434 before cairo 1.2, but do try test this feature out as it exists so
6437 Many thanks to Kristian Høgsberg for the truetype and type1 font
6442 Performance improvements by preferring GDI over pixman rendering when possible.
6443 Fixes for text rendering.
6447 Fix potentially big performance bug by making xlib's create_similar
6448 try harder to create a pixmap of a depth matching that of the screen.
6452 Among various other fixes, the following bugs listed in bugzilla have
6455 Bug 2488: Patch to fix pixman samping location bug (#2488).
6456 https://bugs.freedesktop.org/show_bug.cgi?id=2488
6458 Bug 4196: undef MIN an MAX before defining to avoid duplicate definition
6459 https://bugs.freedesktop.org/show_bug.cgi?id=4196
6461 Bug 4723: configure.in: Fix m4 quoting when examining pkg-config version
6462 https://bugs.freedesktop.org/show_bug.cgi?id=4723
6464 Bug 4882: Flag Sun's X server has having buggy_repeat.
6465 https://bugs.freedesktop.org/show_bug.cgi?id=4882
6467 Bug 5306: test/pdf2png: Add missing include of stdio.h
6468 https://bugs.freedesktop.org/show_bug.cgi?id=5306
6470 Bug 7075: Fix make clean to remove cairo.def
6471 https://bugs.freedesktop.org/show_bug.cgi?id=7075
6473 (Many thanks to Behdad Esfahbod for helping us track down and fix many
6476 Snapshot 1.1.6 (2006-05-04 Carl Worth <cworth@cworth.org>)
6477 ==========================================================
6478 This is the third in a series of snapshots working toward the imminent
6479 1.2 release of cairo. For a list of items still needing work on the
6480 cairo 1.2 roadmap, please see:
6482 https://cairographics.org/ROADMAP
6484 As can be seen in that list, there are no longer any API additions
6485 left on the roadmap. Instead, there is a feature (PDF type 3 fonts) a
6486 performance optimization (X server gradients) and a list of bug
6487 fixes. This gives us a fair amount of freedom to cut the 1.2 release
6488 at almost any point by deciding to defer remaining bug fixes to
6489 subsequent maintenance releases such as 1.2.2 and 1.2.4.
6491 Before we will do that, we must first be wiling to commit to all the
6492 new API additions. As a heads-up, there are a couple of potential API
6493 changes being considered. (Note that these are changes to new API
6494 introduced during 1.1 so these will not introduce API
6495 incompatibilities compared to the stable 1.0 series). The changes
6496 being considered are:
6498 cairo_get_group_target: may acquire x and y offset return
6499 parameters. May also be eliminated in favor of
6500 cairo_get_target assuming its role
6502 cairo_pdf_surface_set_dpi:
6503 cairo_ps_surface_set_dpi:
6504 cairo_svg_surface_set_dpi: These functions may be removed in favor
6505 of a new cairo_surface_set_fallback_resolution
6507 Additionally there is the possibility of a slight change in the
6508 semantics of cairo_set_line_width. We believe the current behavior of the sequence:
6510 cairo_set_line_width; ... change CTM ...; cairo_stroke;
6512 is buggy. It is currently behaving the same as:
6514 ... change CTM ...; cairo_set_line_width; cairo_stroke;
6516 We are considering fixing this bug before 1.2 with the hope that
6517 nobody is already relying on the buggy behavior described here. Do
6518 shout if you suspect you might be in that position.
6520 The items included in this snapshot (since the 1.1.4 snapshot) are
6525 The long-awaited group-rendering support is now available with the
6526 following function calls:
6529 cairo_push_group_with_content
6531 cairo_pop_group_to_source
6532 cairo_get_group_target
6534 This API provides a much more convenient mechanism for doing rendering
6535 to an intermediate surface without the need to manually create a
6536 temporary cairo_surface_t and a temporary cairo_t and clean them up
6539 Add the following missing get function to complement
6540 cairo_surface_set_device_offset:
6542 cairo_surface_get_device_offset
6544 PDF backend (API addition)
6545 --------------------------
6546 The PDF backend now provides for per-page size changes, (similar to
6547 what the PostScript backend got in the 1.1.4 snapshot). The new API
6550 cairo_pdf_surface_set_size
6552 Xlib backend (API additions)
6553 ----------------------------
6554 The following functions have been added to allow the extraction of
6557 cairo_xlib_surface_get_display
6558 cairo_xlib_surface_get_drawable
6559 cairo_xlib_surface_get_screen
6560 cairo_xlib_surface_get_visual
6561 cairo_xlib_surface_get_depth
6563 XCB backend (experimental)
6564 --------------------------
6565 Update backend so that it now compiles with the recent XCB 0.9 release.
6567 Bug fixes and memory leak cleanup
6568 ---------------------------------
6569 Various little things, nothing too significant though.
6571 Snapshot 1.1.4 (2006-05-03 Carl Worth <cworth@cworth.org>)
6572 ==========================================================
6573 This is the second in a series of snapshots working toward the
6574 upcoming 1.2 release of cairo. For a list of items still needing work
6575 on the cairo 1.2 roadmap, please see:
6577 https://cairographics.org/ROADMAP
6579 The items included in this snapshot (since the 1.1.2 snapshot) are
6582 PostScript backend: new printing-oriented API
6583 ---------------------------------------------
6584 We anticipate that with cairo 1.2, toolkits will begin to use cairo
6585 for printing on systems that use PostScript as the spool format. To
6586 support this use case, we have added 4 new function calls that are
6587 specific to the PostScript backend:
6589 cairo_ps_surface_set_size
6590 cairo_ps_surface_dsc_comment
6591 cairo_ps_surface_dsc_begin_setup
6592 cairo_ps_surface_dsc_begin_page_setup
6594 These functions allow variation of the page size/orientation from one
6595 page to the next in the PostScript output. They also allow the toolkit
6596 to provide per-document and per-page printer control options in a
6597 device-independent way, (for example, by using PPD options and
6598 emitting them as DSC comments into the PostScript output). This should
6599 allow toolkits to provide very fine-grained control of many options
6600 available in printers, (media size, media type, tray selection, etc.).
6602 SVG backend: builds by default, version control
6603 -----------------------------------------------
6604 The SVG backend continues to see major improvements. It is expected
6605 that the SVG backend will be a supported backend in the 1.2
6606 release. This backend will now be built by default if its dependencies
6607 (freetype and libxml2) are met.
6609 Additionally, the SVG backend now has flexibility with regard to what
6610 version of SVG it targets. It will target SVG 1.1 by default, which
6611 will require image fallbacks for some of the "fancier" cairo
6612 compositing operators. Or with the following new function calls:
6614 cairo_svg_surface_restrict_to_version
6615 cairo_svg_get_versions
6616 cairo_svg_version_to_string
6618 it can be made to target SVG 1.2 in which there is native support for
6619 these compositing operators.
6623 At least the following bugs have been fixed since the 1.1.2 snapshot:
6625 crash at XRenderAddGlyphs
6626 https://bugs.freedesktop.org/show_bug.cgi?id=4705
6628 Can't build cairo-1.1.2 on opensolaris due to " void function cannot return value"
6629 https://bugs.freedesktop.org/show_bug.cgi?id=6792
6631 Missing out-of-memory check at gfx/cairo/cairo/src/cairo-atsui-font.c:185
6632 https://bugzilla.mozilla.org/show_bug.cgi?id=336129
6634 A couple of memory leaks.
6636 Snapshot 1.1.2 (2006-04-25 Carl Worth <cworth@cworth.org>)
6637 ==========================================================
6638 This is the first in a series of snapshots working toward the upcoming
6639 1.2 release of cairo. (Subsequent snapshot will use successive even
6640 numbers for the third digit, 1.1.4, 1.1.6, etc.) This snapshot is
6641 backwards-compatible with the 1.0 series---it makes a few API
6642 additions but does not remove any API.
6644 PostScript and PDF backends are no longer "experimental"
6645 --------------------------------------------------------
6646 The major theme of the 1.2 release is improved PostScript and PDF
6647 backends for cairo. Unlike the 1.0 series, in the 1.2 series these
6648 backends will not be marked as experimental and will be enabled by
6649 default. We encourage people to test this snapshot and the PS/PDF
6650 backends in particular as much as possible.
6652 The PostScript and PDF output is not yet ideal.
6654 * One major problem with the PostScript output is that image
6655 fallbacks are used more often than strictly necessary, and the
6656 image fallbacks are at a lower resolution than desired, (the
6657 cairo_ps_surface_set_dpi call is ignored).
6659 * The major drawback of the current PDF backend implementation is
6660 its text support. Every glyph is represented by a filled path in
6661 the PDF file. The causes file sizes to be much larger and
6662 rendering to be much slower than desired.
6664 It is anticipated that both of these shortcomings will see some
6665 improvements before the final 1.2 release.
6667 In spite of those shortcomings, we hope that the PS and PDF backends
6668 will yield faithful results for pretty much any cairo operations you
6669 can throw at them. Please let us know if you are getting obviously
6670 "different" results from the PS/PDF backends than from the image or
6673 Other new experimental backends
6674 -------------------------------
6675 This snapshot includes three new backends that did not exist in the
6684 These are all currently marked "experimental" and are disabled by
6685 default. But the SVG backend in particular has seen a lot of recent
6686 development and is very close to passing the entire cairo test
6687 suite. It is possible that this backend will become a fully supported
6688 backend by the time of the cairo 1.2 release.
6690 Public API additions
6691 --------------------
6692 There have been a few new API functions added to cairo, including:
6694 New get_type functions for querying sub-types of object:
6696 cairo_surface_get_type
6697 cairo_pattern_get_type
6698 cairo_font_face_get_type
6699 cairo_scaled_font_get_type
6701 More convenience in working with cairo_scaled_font_t with new getter
6704 cairo_scaled_font_get_font_face
6705 cairo_scaled_font_get_font_matrix
6706 cairo_scaled_font_get_ctm
6707 cairo_scaled_font_get_font_options
6709 As well as a convenience function for setting a scaled font into a
6712 cairo_set_scaled_font
6714 and a function to allow text extents to be queried directly from a
6715 scaled font, (without requiring a cairo_surface_t or a cairo_t):
6717 cairo_scaled_font_text_extents
6719 These new scaled font functions were motivated by the needs of the
6722 Finally, a new path-construction function was added which clears the
6723 current point in preparation for a new sub path. This makes cairo_arc
6724 easier to use in some situations:
6728 Before the 1.2 release is final we do still plan a few more API
6729 additions specifically motivated by the needs of Mozilla/Firefox.
6731 Optimizations and bug fixes
6732 ---------------------------
6733 Shortly after the 1.0 maintenance series branched off the mainline
6734 there was a major rework of the cairo font internals. This should
6735 provide some good performance benefits, but it's also another area
6736 people should look at closely for potential regressions.
6738 There has not yet been any widespread, systematic optimization of
6739 cairo, but various performance improvements have been made, (and some
6740 of them are fairly significant). So if some things seem faster than
6741 1.0 then things are good. If there are any performance regressions
6742 compared to 1.0 then there is a real problem and we would like to hear
6745 There has been a huge number of bug fixes---too many to mention in
6746 detail. Again, things should be better, and never worse compared to
6747 1.0. Please let us know if your testing shows otherwise.
6749 Release 1.0.2 (2005-10-03 Carl Worth <cworth@cworth.org>)
6750 =========================================================
6751 For each bug number XXXX below, see:
6753 https://bugs.freedesktop.org/show_bug.cgi?id=XXXX
6759 * 4408 - Add support for dashing of stroked curves
6762 * 4409 - Fix dashing so that each dash is capped on both ends
6765 * 4414 - Prevent SIGILL failures (proper use of -mmmx and -msse flags)
6766 (Sebastien Bacher, Billy Biggs)
6768 * 4299 - Fix crashes with text display in multi-threaded program
6769 (Alexey Shabalin, Carl Worth)
6771 * 4401 - Do not use sincos function since it is buggy on some platforms)
6772 (Tim Mooney, Carl Worth)
6774 * 4245 - Fix several bugs in the test suite exposed by amd64 systems
6775 (Seemant Kulleen, Carl Worth)
6777 * 4321 - Add missing byteswapping on GetImage/PutImage
6778 (Sjoerd Simons, Owen Taylor)
6780 * 4220 - Make the check for rectangular trapezoids simpler and more accurate
6781 (Richard Stellingwerff, Owen Taylor)
6783 * 4260 - Add missing channel-order swapping for antialised fonts
6784 (Barbie LeVile, Owen Taylor)
6786 * 4283 - Fix compilation failure with aggressive inlining (gcc -O3)
6787 (Marco Manfredini, Owen Taylor)
6789 * 4208 - Fix some warnings from sparse
6790 (Kjartan Maraas, Billy Biggs)
6792 * 4269 - Fix to not crash when compiled with -fomit-frame-pointer
6793 (Ronald Wahl, Owen Taylor)
6795 * 4263 - Improve performance for vertical gradients
6796 (Richard Stellingwerff, Owen Taylor)
6799 * 4298 - Accommodate gentoo and Mandriva versions in X server vendor string check
6800 (Billy Biggs, Frederic Crozat, Owen Taylor)
6802 win32-specific fixes
6803 --------------------
6804 * 4599 - Fix "missing wedges" on some stroked paths (win32)
6805 (Tim Rowley, Jonathan Watt, Bertram Felgenhauer, Carl Worth, Keith Packard)
6807 * 4612 - Fix disappearing text if first character out of surface (win32)
6810 * 4602 - Fix shutdown of cairo from failing intermediate, size-0 bitmaps (win32)
6811 Aka. the "white rectangles" bug from mozilla-svg testing
6814 * Various portability improvements for win32
6815 (Hans Breuer, Owen Taylor, Carl Worth)
6817 * 4593 - Fix font sizes to match user expectations (win32)
6818 (Tor Lillqvist, Owen Taylor)
6820 * 3927 - Fix to report metrics of size 0 for glyph-not-available (win32)
6821 (Hans Breuer, Owen Taylor, Tor Lillqvist)
6823 * Add locking primitives for win32
6828 * Fix crash from size-0 pixmap due to empty clip region (xlib)
6829 (Radek Doulík, Carl Worth)
6831 Release 1.0.0 (2005-08-24 Carl Worth <cworth@cworth.org>)
6832 =========================================================
6833 Experimental backends
6834 ---------------------
6835 * The Glitz, PS, PDF, Quartz, and XCB backends have been declared
6836 experimental, and are not part of the API guarantees that accompany
6837 this release. They are not built by default, even when the required
6838 libraries are available, and must be enabled explicitly with
6839 --enable-ps, --enable-pdf, --enable-quartz or --enable-xcb.
6841 It is very painful for us to be pushing out a major release without
6842 these backends enabled. There has been a tremendous amount of work
6843 put into each one and all are quite functional to some
6844 extent. However, each also has some limitations. And none of these
6845 backends have been tested to the level of completeness and
6846 correctness that we expect from cairo backends.
6848 We do encourage people to experiment with these backends and report
6849 success, failure, or means of improving them.
6853 * Prior to 0.9.0 the SOURCE, CLEAR and a number of other operators
6854 behaved in an inconsistent and buggy fashion and could affect areas
6855 outside the clip mask. In 0.9.0, these six "unbounded" operators
6856 were fixed to consistently clear areas outside the shape but within
6857 the clip mask. This is useful behavior for an operator such as IN,
6858 but not what was expected for SOURCE and CLEAR. So, in this release
6859 the behavior of SOURCE and CLEAR has been changed again. They now
6860 affect areas only within both the source and shape. We can write
6861 the new operators as:
6863 SOURCE: dest' = (mask IN clip) ? source : dest
6864 CLEAR: dest' = (mask IN clip) ? 0 : dest
6866 Behavior and API changes
6867 ------------------------
6868 * Setting the filter on a gradient pattern would change the
6869 interpolation between color stops away from the normal linear
6870 interpolation. This dubious behavior has been removed.
6872 * The CAIRO_CONTENT_VALID() and CAIRO_FORMAT_VALID() macros --
6873 implementation details that leaked into cairo.h -- have been moved
6874 into an internal header.
6876 * The cairo_show_text function now advances the current point
6877 according to the total advance values of the string.
6881 * cairo_set_dash can now detect error and can set
6882 CAIRO_STATUS_INVALID_DASH.
6886 * When compiled against recent versions of fontconfig and FreeType,
6887 artificial bold fonts can now be turned on from fonts.conf using
6888 the FC_EMBOLDEN fontconfig key.
6892 * The compositing code from the 'xserver' code tree has now been
6893 completely merged into libpixman. This includes MMX optimization of
6896 * The image transformation code in libpixman has been improved and
6897 now performs significantly faster.
6901 * Several crashes related to corruption in the font caches have been
6904 * All test cases now match pixel-for-pixel on x86 and PPC; this
6905 required fixing bugs in the compositing, stroking, and pattern
6908 * Negative dash offsets have been fixed to work correctly.
6910 * The stroking of paths with multiple subpaths has now been fixed to
6911 apply caps to all subpaths rather than just the last one.
6913 * Many build fixes for better portability on various systems.
6915 * Lots of other bug fixes, but we're too tired to describe them in
6918 Release 0.9.2 (2005-08-13 Carl Worth <cworth@cworth.org>)
6919 =========================================================
6922 * You will notice that this release jumped from 0.9.0 to 0.9.2. We've
6923 decided to use an odd micro version number (eg. 0.9.1) to indicate
6924 in-progress development between releases. As soon as 0.9.2 is
6925 tagged, the version will be incremented in CVS to 0.9.3 where it
6926 will stay until just before 0.9.4 is built, uploaded, and tagged.
6928 So, even-micro == a released version, odd-micro == something in-between.
6930 Libpixman dependency dropped
6931 ----------------------------
6932 * As of this release, the dependency on an external libpixman has
6933 been dropped. Instead, the code from libpixman needed for cairo has
6934 been incorporated into the cairo source tree. The motivation for
6935 this change is that while cairo's API is stable and ready to be
6936 maintained after the 1.0 release, libpixman's API is not, so we do
6937 not want to expose it at this time.
6939 Also, the incorporation of libpixman into cairo also renames all
6940 previously-public libpixman symbols in order to avoid any conflict
6941 with a future release of libpixman
6945 * Macros and functions have been added so that the version of cairo
6946 can be queried at either compile-time or at run-time. The version
6947 is made available as both a human-readable string and as a single
6950 CAIRO_VERSION_STRING eg. "0.9.2"
6951 CAIRO_VERSION eg. 000902
6954 cairo_version_string (void); /* eg. "0.9.2" */
6957 cairo_version (void); /* eg. 000902 */
6959 A macro is provided to convert a three-part component version into
6960 the encoded single-integer form:
6962 CAIRO_VERSION_ENCODE(X,Y,Z)
6964 For example, the CAIRO_VERSION value of 000902 is obtained as
6965 CAIRO_VERSION_ENCODE(0,9,2). The intent is to make version
6966 comparisons easy, either at compile-time:
6968 #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(0,9,2)
6974 if (cairo_version() >= CAIRO_VERSION_ENCODE(0,9,2)) { /* ... */ }
6978 * This release adds pthread-based locking (when available) to make
6979 the caches used by cairo safe for threaded programs. Some may
6980 remember a failed experiment with this locking between the 0.5.1
6981 and 0.5.2 snapshots, (where even single-threaded programs that
6982 linked with -lpthread would deadlock). We believe that that problem
6983 has been fixed, so we are looking forward to testing and reports
6984 from users with threaded applications.
6988 * The XCB and Quartz backends failed to compiled in the 0.9.0 release
6989 due to minor syntax errors. These have now been fixed.
6991 * Various crashes in glitz and pixman due to size 0 glyphs have been
6994 Release 0.9.0 (2005-08-08 Carl Worth <cworth@cworth.org>)
6995 =========================================================
6998 * In all prior snapshots, the libtool library versioning was set to
6999 1:0:0. As this release is intended to mark the beginning of
7000 backwards-compatible releases, the versioning has been incremented
7001 to 2:0:0. You will notice that the numeric extension on the
7002 installed library filename will change similarly.
7004 This change will also require all cairo-using applications to be
7005 recompiled. We recognize that this may cause some frustration since
7006 this release is backwards-compatible with 0.6.0 and in that sense
7007 "shouldn't" require re-compilation. However, since all historical
7008 snapshots have used the same 1:0:0 version in spite of incompatible
7009 API changes between them, it was essential that the upcoming 1.0
7010 release series have distinct library versioning.
7012 All future releases will use the library versioning to properly
7013 indicate compatibility between releases. So, any application
7014 re-compiled now to work with the 0.9.0 will not need to be
7015 recompiled when a compatible 1.0 release of cairo is made in the
7020 * Add new function calls to set/get the current antialiasing mode in
7026 This call accepts the same modes recently added for font options
7027 (NONE or GRAY) but affects the rendering of geometry other than
7028 text. The intent of this call is to enable more precise control of
7029 which pixels are affected by each operation, for example to allow
7030 for full-scene antialiasing for seam-free rendering. It is not
7031 expected that non-antialiased rendering will perform better than
7032 anti-aliased rendering.
7034 * Three new functions were added to provide support for mixed cairo-
7035 and non-cairo drawing to the same surface:
7037 cairo_surface_mark_dirty
7038 cairo_surface_mark_dirty_rectangle
7041 * The return type of the several "reference" functions was change,
7042 (API compatibly), from void to the same type as the argument. The
7043 affected functions are:
7045 cairo_font_face_reference
7046 cairo_scaled_font_reference
7047 cairo_pattern_reference
7048 cairo_surface_reference
7051 This allows a convenient way to assign and reference in a single
7056 * The behavior of cairo_set_source with a pattern with a non-identity
7057 matrix was previously not well-defined. The new behavior is as
7060 The pattern's transformation matrix will be locked to the
7061 user space in effect at the time of cairo_set_source(). This means
7062 that further modifications of the CTM will not affect the source
7067 * Some portability improvements, (eg. workaround for missing stdint.h).
7071 * Updated to allow compilation with older versions of freetype.
7075 * Fix the unbounded operators to actually produce a correct result,
7076 (previously the results were artificially restricted to the
7077 bounding box of whatever shape was being drawn rather than
7078 extending out infinitely). The fixed operators are:
7080 CAIRO_OPERATOR_CLEAR
7081 CAIRO_OPERATOR_SOURCE
7084 CAIRO_OPERATOR_DEST_IN
7085 CAIRO_OPERATOR_DEST_ATOP
7087 * Fix cairo_mask and cairo_mask_surface to transform the mask by the
7088 current transformation matrix (CTM).
7090 * Fix cairo_set_source to lock the CTM used to transform the pattern.
7092 * Workaround for X server Render bug involving repeating patterns
7093 with a general transformation matrix.
7095 * cairo_get_font_face fixed to return a "nil" font face object rather
7098 * cairo_set_font_face fixed to not crash if given a NULL font face,
7099 (which is the documented interface for restoring the default font
7102 * Fix xlib glyphset caching to not try to free a NULL glyph.
7104 Snapshot 0.6.0 (2005-07-28 Carl Worth <cworth@cworth.org>)
7105 ==========================================================
7108 * The prototypes of the following functions have changed:
7110 cairo_xlib_surface_create_with_xrender_format
7111 cairo_xlib_surface_create_for_bitmap
7113 A Screen* parameter has been added to each. This allows the cairo
7114 xlib backend to work correctly with multi-head X servers.
7116 * The following function has been modified:
7118 cairo_scaled_font_create
7120 to accept a cairo_font_options_t*. See below fore more details.
7122 * All opaque, reference-counted cairo objects have now been moved to a
7123 standard error-handling scheme. The new objects to receive this
7124 treatment are cairo_font_face_t, cairo_scaled_font_t, and
7125 cairo_surface_t. (Previous snapshots already provided this scheme
7126 for cairo_t, cairo_path_t, and cairo_pattern_t.)
7128 This changes two functions to have a return type of void rather than
7131 cairo_scaled_font_extent
7132 cairo_surface_finish
7134 And significantly, none of the create functions for any of the
7135 objects listed above will return NULL. The pointer returned from any
7136 function will now always be a valid pointer and should always be
7137 passed to the corresponding destroy function when finished
7139 The simplest strategy for porting code is to switch from:
7141 object = cairo_<object>_create ();
7147 cairo_<object>_destroy (object);
7151 object = cairo_<object>_create ();
7152 if (cairo_<object>_status (object))
7157 cairo_<object>_destroy (object);
7159 But significantly, it is not required to check for an error status
7160 before the "act on object" portions of the code above. All
7161 operations on an object with an error status are, by definition,
7162 no-ops without side effect. So new code might be written in an
7163 easier-to-read style of:
7165 object = cairo_<object>_create ();
7169 cairo_<object>_destroy (object);
7171 with cairo_<object>_status checks placed only at strategic
7172 locations. For example, passing an error object to another object,
7173 (eg. cairo_set_source with an in-error pattern), will propagate the
7174 error to the subsequent object (eg. the cairo_t). This means that
7175 error checking can often be deferred even beyond the destruction of
7180 * New functions for checking the status of objects that have been
7181 switched to the common error-handling scheme:
7183 cairo_font_face_status
7184 cairo_scaled_font_status
7185 cairo_surface_status
7187 * The _cairo_error function which was added in 0.5.1 has now been made
7188 much more useful. In 0.5.1 only errors on cairo_t objects passed
7189 through _cairo_error. Now, an error on any object should pass
7190 through _cairo_error making it much more reliable as a debugging
7191 mechanism for finding when an error first occurs.
7193 * Added new font options support with a myriad of functions:
7195 cairo_font_options_create
7196 cairo_font_options_copy
7197 cairo_font_options_destroy
7199 cairo_font_options_status
7201 cairo_font_options_merge
7202 cairo_font_options_equal
7203 cairo_font_options_hash
7205 cairo_font_options_set_antialias
7206 cairo_font_options_get_antialias
7207 cairo_font_options_set_subpixel_order
7208 cairo_font_options_get_subpixel_order
7209 cairo_font_options_set_hint_style
7210 cairo_font_options_get_hint_style
7211 cairo_font_options_set_hint_metrics
7212 cairo_font_options_get_hint_metrics
7214 cairo_surface_get_font_options
7216 cairo_ft_font_options_substitute
7218 cairo_set_font_options
7219 cairo_get_font_options
7221 This new font options support allows the application to have much
7222 more fine-grained control over how fonts are rendered.
7223 Significantly, it also allows surface backends to have some
7224 influence over the process. For example, the xlib backend now
7225 queries existing Xft properties to set font option defaults.
7229 cairo_xlib_surface_set_drawable
7231 which allows the target drawable for an xlib cairo_surface_t to be
7232 changed to another with the same format, screen, and display. This
7233 is necessary in certain double-buffering techniques.
7237 * Sub-pixel text antialiasing is now supported.
7241 * Fixed assertion failure in cairo_surface_create_similar when
7242 application commits an error by passing a cairo_format_t rather than
7245 * Avoid division by zero in various places (cairo-ft).
7247 * Fix infinite loop when using non-default visuals (cairo-xlib).
7249 * Eliminate segfault in cairo_image_surface_create_from_png_stream.
7251 * Prevent errant sign-extension of masks on 64-bit architectures
7252 (cairo-xlib and cairo-xcb).
7254 * Other miscellaneous fixes.
7256 Snapshot 0.5.2 (2005-07-18 Carl Worth <cworth@cworth.org>)
7257 ==========================================================
7260 * New functions for creating patterns of a single color:
7262 cairo_pattern_create_rgb
7263 cairo_pattern_create_rgba
7265 * Change cairo_surface_create_similar to accept a new type of
7266 cairo_content_t rather than cairo_format_t:
7268 typedef enum _cairo_content {
7269 CAIRO_CONTENT_COLOR = 0x1000,
7270 CAIRO_CONTENT_ALPHA = 0x2000,
7271 CAIRO_CONTENT_COLOR_ALPHA = 0x3000
7274 * Add new CAIRO_FORMAT_VALID and CAIRO_CONTENT_VALID macros.
7276 * Remove unused status value:
7278 CAIRO_STATUS_NO_TARGET_SURFACE
7280 * Add new status values:
7282 CAIRO_STATUS_INVALID_STATUS
7284 * Require libpixman >= 0.1.5 (for necessary bug fixes)
7288 * Fix cairo_surface_write_to_png for RGB24 images.
7290 * Fix broken metrics and rendering for bitmap fonts. Add mostly
7291 useless bitmap glyph transformation.
7293 * Fix glyph caches to not eject entries that might be immediately
7294 needed, (fixing intermittent crashes when rendering text).
7296 * Fix all memory leaks found by running "make check-valgrind".
7298 ATSUI backend changes
7299 ---------------------
7300 * Allow building against < 10.3 SDK.
7302 * Prevent crash on empty strings.
7304 Glitz backend changes
7305 ---------------------
7306 * Require glitz >= 0.4.4.
7308 * Use frame buffer objects instead of pbuffers for accelerated
7311 * Minor improvement to gradient pattern creation.
7313 PostScript backend fixes
7314 ------------------------
7315 * Rewrite of the PS backend to generate more interesting output that
7316 the old big-image implementation.
7320 * Implement glyph path support.
7322 * Fix swap of blue and green values in the fill_rectangles path.
7326 * Add optimization to use XCopyArea rather than XRenderComposite when
7327 transforming only with an integer translation, and using SOURCE
7328 operator or OVER with a source pattern without alpha.
7330 Snapshot 0.5.1 (2005-06-20 Carl Worth <cworth@cworth.org>)
7331 ==========================================================
7334 * Removed cairo_status_string(cairo_t*) and add
7335 cairo_status_to_string(cairo_status_t) in its place. Code using
7336 cairo_status_string can be ported forward as follows:
7340 cairo_status_to_string (cairo_status (cr));
7342 * Removed the BAD_NESTING restriction which means that two different
7343 cairo_t objects can now interleave drawing to the same
7344 cairo_surface_t without causing an error.
7346 * The following functions which previously had a return type of
7347 cairo_status_t now have a return type of void:
7349 cairo_pattern_add_color_stop_rgba
7350 cairo_pattern_set_matrix
7351 cairo_pattern_get_matrix
7352 cairo_pattern_set_extend
7353 cairo_pattern_set_filter
7355 See discussion of cairo_pattern_status below for more details.
7359 * Improved error handling:
7362 cairo_pattern_status (cairo_pattern_t *pattern);
7364 This snapshot expands the status-based error handling scheme from
7365 cairo_t to cairo_path_t and cairo_pattern_t. It also expands the
7366 scheme so that object-creating functions, (cairo_create,
7367 cairo_pattern_create_*, cairo_copy_path_*), are now guaranteed to
7368 not return NULL. Instead, in the case of out-of-memory these
7369 functions will return a static object with
7370 status==CAIRO_STATUS_NO_MEMORY. The status can be checked with the
7371 functions cairo_status and cairo_pattern_status, or by direct
7372 inspection of the new status field in cairo_path_t.
7374 Please note that some objects, including cairo_surface_t and all of
7375 the font-related objects have not been converted to this
7376 error-handling scheme.
7378 * In addition to the above changes, a new private function has been added:
7382 This function can be used to set a breakpoint in a debugger to make
7383 it easier to find programming error in cairo-using code. (Currently,
7384 _cairo_error is called when any error is detected within a cairo_t
7385 context, but is not called for non-cairo_t errors such as for
7386 cairo_path_t and cairo_pattern_t).
7388 * Fixed cairo_path_data_t so that its enum is visible to C++ code, (as
7389 cairo_path_data_type_t).
7391 Performance improvements
7392 ------------------------
7393 * Made a minor performance improvement for clipping, (restrict clip
7394 surface to the new intersected bounds).
7396 * Optimize rendering of a solid source pattern with a pixel-aligned
7397 rectangular path to use backend clipping rather than rasterization
7398 and backend compositing.
7400 * Optimize cairo_paint_with_alpha to defer to cairo_paint when alpha
7405 * Fixed memory leak in cairo_copy_path.
7407 * A build fix for non-srcdir builds.
7411 * New support for path-based clipping.
7413 * Fix for text rotated to angles other than multiples of π/2.
7417 * Fix for text extents.
7421 * Implemented a complex workaround for X server bug[*] related to
7422 Render-based compositing with untransformed, repeating source
7423 pictures. The workaround uses core Xlib when possible for
7424 performance, (ie. with CAIRO_OPERATOR_SOURCE or CAIRO_OPERATOR_OVER
7425 with an opaque source surface), and falls back to the pixman
7426 image-based compositing otherwise.
7428 [*] https://bugs.freedesktop.org/show_bug.cgi?id=3566
7430 * Various bug fixes, particularly in the fallback paths.
7432 Snapshot 0.5.0 (2005-05-17 Carl Worth <cworth@cworth.org>)
7433 ==========================================================
7434 This is a pretty big, and fairly significant snapshot. It represents
7435 between 2 and 3 months of solid work from a lot of people on improving
7436 the API as much as possible. I'd like to express my appreciation and
7437 congratulations to everyone who has worked on the big API Shakeup,
7438 (whether in email battles over names, or fixing my silly bugs).
7440 This snapshot will require some effort on the part of users, since
7441 there are a _lot_ of API changes (ie. no cairo program ever written is
7442 safe --- they're all broken now in at least one way). But, in spite of
7443 that, we do encourage everyone to move their code to this snapshot as
7444 soon as possible. And we're doing everything we can think of to make
7445 the transition as smooth as possible.
7447 The idea behind 0.5 is that we've tried to make every good API change
7448 we could want now, and get them all done with. That is, between now
7449 and the 1.0 release of cairo, we expect very few new API changes,
7450 (though some will certainly sneak in). We will have some significant
7451 additions, but the pain of moving code from cairo 0.4 to cairo 0.5
7452 should be a one time experience, and things should be much smoother as
7453 we continue to move toward cairo 1.0.
7455 And with so many changes coming out for the first time in this 0.5
7456 release, we really do need a lot of people trying this out to make
7457 sure the ideas are solid before we freeze the API in preparation for
7460 OK, enough introduction. Here is a (not-quite-complete) description of
7461 the API removals, changes and additions in this snapshot, (compared to
7466 The following public functions have been removed:
7468 - cairo_set_target_*
7470 This is a big change. See the description of cairo_create in
7471 the API changes section for how to deal with this.
7475 Alpha blending hasn't gone away; there's just a much more
7476 unified rendering model now. Almost all uses of
7477 cairo_set_alpha will be trivially replaced with
7478 cairo_set_source_rgba and a few others will be replaced just
7479 as easily with cairo_paint_with_alpha.
7481 - cairo_show_surface
7483 Another useful function that we realized was muddling up the
7484 rendering model. The replacement is quite easy:
7485 cairo_set_source_surface and cairo_paint.
7487 - cairo_matrix_create
7488 - cairo_matrix_destroy
7490 - cairo_matrix_get_affine
7492 These functions supported an opaque cairo_matrix_t. We now
7493 have an exposed cairo_matrix_t structure, so these can be
7496 - cairo_surface_set_repeat
7497 - cairo_surface_set_matrix
7498 - cairo_surface_set_filter
7500 These properties don't belong on surfaces. If you were using
7501 them, you'll just want to instead use
7502 cairo_pattern_create_for_surface and then set these properties
7507 This was a confusing function and hopefully nobody will miss
7508 it. But if you really don't find cairo_save/restore adequate,
7509 let us know and we have another idea for a potential
7512 And while we're on the subject of removals, we carefully tightened up
7513 the cairo header files so they no longer gratuitously include header
7514 files that are not strictly necessary, (stdio.h, stdint.h, pixman.h,
7515 Xrender.h, etc. and their dependencies). This may lead to some
7516 surprising errors, so keep your eyes open for that.
7520 Here are some of the API changes that have occurred:
7522 ~ cairo_create(void) -> cairo_create(cairo_surface_t *)
7524 This is the big change that breaks every program. The ability
7525 to re-target a cairo_t was not particularly useful, but it did
7526 introduce a lot of muddy semantic questions. To eliminate
7527 that, cairo_create now requires its target surface to be
7528 passed in at creation time. This isn't too hard to cope with
7529 as the typical first operation after cairo_create was often
7530 cairo_set_target_foo. So the order of those two swap and the
7531 application instead has cairo_foo_surface_create, then
7534 ~ cairo_current_* -> cairo_get_*
7536 We had a strange mixture of cairo_get and cairo_current
7537 functions. They've all been standardized on cairo_get, (though
7538 note one is cairo_get_current_point).
7540 ~ CAIRO_OPERATOR_SRC -> CAIRO_OPERATOR_SOURCE
7541 ~ CAIRO_OPERATOR_OVER_REVERSE -> CAIRO_OPERATOR_DEST_OVER
7543 Many of the cairo_operator_t symbolic values were renamed to
7544 reduce the amount of abbreviation. The confusing "OP_REVERSE"
7545 naming was also changed to use "DEST_OP" instead which is
7546 easier to read and has wider acceptance in other
7547 libraries/languages.
7549 ~ cairo_set_pattern -> cairo_set_source
7550 ~ cairo_set_rgb_color -> cairo_set_source_rgb
7552 All of the various functions that changed the source
7553 color/pattern were unified to use cairo_set_source names to
7554 make the relation more clear.
7556 ~ cairo_transform_point -> cairo_user_to_device
7557 ~ cairo_transform_distance -> cairo_user_to_device_distance
7558 ~ cairo_inverse_transform_point -> cairo_device_to_user
7559 ~ cairo_inverse_transform_distance -> cairo_device_to_user_distance
7561 These names just seemed a lot more clear.
7563 ~ cairo_init_clip -> cairo_reset_clip
7564 ~ cairo_concat_matrix -> cairo_transform
7566 More abbreviation elimination
7568 ~ cairo_current_path -> cairo_copy_path
7569 ~ cairo_current_path_flat -> cairo_copy_path_flat
7571 The former mechanism for examining the current path was a
7572 function that required 3 or 4 callbacks. This was more
7573 complexity than warranted in most situations. The new
7574 cairo_copy_path function copies the current path into an
7575 exposed data structure, and the documentation provides a
7576 convenient idiom for navigating the path data.
7582 A generalized version of the painting operators cairo_stroke
7583 and cairo_fill. The cairo_paint call applies the source paint
7584 everywhere within the current clip region. Very useful for
7585 clearing a surface to a solid color, or painting an image,
7586 (see cairo_set_source_surface).
7588 + cairo_paint_with_alpha
7590 Like cairo_paint but applying some alpha to the source,
7591 (making the source paint translucent, eg. to blend an image on
7596 A more generalized version of cairo_paint_with_alpha which
7597 allows a pattern to specify the amount of translucence at each
7598 point rather than using a constant value everywhere.
7600 + cairo_mask_surface
7602 A convenience function on cairo_mask for when the mask pattern
7603 is already contained within a surface.
7605 + cairo_surface_set_user_data
7606 + cairo_surface_get_user_data
7607 + cairo_font_face_set_user_data
7608 + cairo_font_face_get_user_data
7610 Associate arbitrary data with a surface or font face for later
7611 retrieval. Get notified when a surface or font face object is
7614 + cairo_surface_finish
7616 Allows the user to instruct cairo to finish all of its
7617 operations for a given surface. This provides a safe point for
7618 doing things such as flushing and closing files that the
7619 surface may have had open for writing.
7621 + cairo_fill_preserve
7622 + cairo_stroke_preserve
7623 + cairo_clip_preserve
7625 One interesting change in cairo is that the path is no longer
7626 part of the graphics state managed by
7627 cairo_save/restore. This allows functions to construct paths
7628 without interfering with the graphics state. But it prevents
7629 the traditional idiom for fill-and-stroke:
7631 cairo_save; cairo_fill; cairo_restore; cairo_stroke
7633 Instead we know have alternate versions cairo cairo_fill,
7634 cairo_stroke, and cairo_clip that preserve the current path
7635 rather than consuming it. So the idiom now becomes simply:
7637 cairo_fill_preserve; cairo_stroke
7639 + cairo_surface_write_to_png
7640 + cairo_surface_write_to_png_stream
7642 In place of a single PNG backend, now a surface created
7643 through any backend (except PDF currently) can be written out
7646 + cairo_image_surface_create_from_png
7647 + cairo_image_surface_create_from_png_stream
7649 And its just as easy to load a PNG image into a surface as well.
7653 With the new, exposed path data structure, it's now possible
7654 to append bulk path data to the current path, (rather than
7655 issuing a long sequence of cairo_move_to/line_to/curve_to
7658 Xlib and XCB backends
7659 ---------------------
7661 Any cairo_format_t and Colormap arguments have been dropped from
7662 cairo_xlib_surface_create. There are also two new
7663 cairo_xlib|xcb_surface_create functions:
7665 cairo_xlib|xcb_surface_create_for_bitmap
7666 (Particular for creating A1 surfaces)
7667 cairo_xlib|xcb_surface_create_with_xrender_format
7668 (For any other surface types, not described by a Visual*)
7670 All of these surface create functions now accept width and height. In
7671 addition, there are new cairo_xlib|xcb_surface_set_size functions
7672 which must be called each time a window that is underlying a surface
7675 Print backends (PS and PDF)
7676 ---------------------------
7677 The old FILE* based interfaces have been eliminated. In their place we
7678 have two different functions. One accepts a simple const char
7679 *filename. The other is a more general function which accepts a
7680 callback write function and a void* closure. This should allow the
7681 flexibility needed to hook up with various stream object in many
7684 In addition, when specifying the surface size during construction, the
7685 units are now device-space units (ie. points) rather than inches. This
7686 provides consistency with all the other surface types and also makes
7687 it much easier to reason about the size of the surface when drawing to
7688 it with the default identity matrix.
7690 Finally, the DPI parameters, which are only needed to control the
7691 quality of fallbacks, have been made optional. Nothing is required
7692 during surface_create (300 DPI is assumed) and
7693 cairo_ps|pdf_surface_set_dpi can be used to set alternate values if
7698 Owen very graciously listened to feedback after the big font rework he
7699 had done for 0.4, and came up with way to improve it even more. In 0.4
7700 there was a cairo_font_t that was always pre-scaled. Now, there is an
7701 unscaled cairo_font_face_t which is easier to construct, (eg. no
7702 scaling matrix required) and work with, (it can be scaled and
7703 transformed after being set on the graphics state). And the font size
7704 manipulation functions are much easier. You can set an explicit size
7705 and read/modify/write the font matrix with:
7708 cairo_get_font_matrix
7709 cairo_set_font_matrix
7711 (Previously you could only multiply in a scale factor or a matrix.) A
7712 pleasant side effect is that we can (and do) now have a default font
7713 size that is reasonable, as opposed to the old default height of one
7714 device-space unit which was useless until scaled.
7716 Of course, the old pre-scaled font had allowed some performance
7717 benefits when getting many metrics for a font. Those benefits are
7718 still made available through the new cairo_scaled_font_t. And a
7719 cairo_font_face_t can be "promoted" to a cairo_scaled_font_t by
7720 suppling a font_matrix and the desired CTM.
7724 Tim Rowley put in the work to bring the Quartz backend back after it
7725 had been disabled in the 0.4.0 snapshot. He was not able to bring back
7726 the function that allows one to create a cairo_font_t from an ATSUI
7730 cairo_atsui_font_create (ATSUStyle style);
7732 because he didn't have a test case for it. If you care about this
7733 function, please provide a fairly minimal test and we'll try to bring
7734 it back in an upcoming snapshot.
7736 Snapshot 0.4.0 (2005-03-08 Carl Worth <cworth@cworth.org>)
7737 ==========================================================
7740 Owen Taylor has converted cairo's documentation system to gtk-doc and
7741 has begun some long-needed work on the documentation, which can now be
7744 https://cairographics.org/manual/
7748 This is the first snapshot to include a functional win32 backend,
7749 (thanks to Owen Taylor). The interface is as follows:
7751 #include <cairo-win32.h>
7754 cairo_set_target_win32 (cairo_t *cr,
7758 cairo_win32_surface_create (HDC hdc);
7761 cairo_win32_font_create_for_logfontw (LOGFONTW *logfont,
7762 cairo_matrix_t *scale);
7765 cairo_win32_font_select_font (cairo_font_t *font,
7769 cairo_win32_font_done_font (cairo_font_t *font);
7772 cairo_win32_font_get_scale_factor (cairo_font_t *font);
7774 And see also the documentation at:
7776 https://cairographics.org/manual/cairo-Microsoft-Windows-Backend.html
7778 Disabled backend: quartz
7779 ------------------------
7780 Unfortunately, the quartz backend code is currently out of date with
7781 respect to some recent backend interface changes. So, the quartz
7782 backend is disabled in this snapshot.
7784 If the quartz backend is brought up-to-date before the next snapshot,
7785 we would be glad to make a 0.4.1 snapshot that re-enables it, (we do
7786 not expect many more big backend interface changes).
7790 The font system has been revamped, (as Owen Taylor's work with
7791 integrating pango and cairo gave us the first serious usage of the
7794 One fundamental, user-visible change is that the cairo_font_t object
7795 now represents a font that is scaled to a particular device
7796 resolution. Further changes are described below.
7800 Removed cairo_font_set_transform and cairo_font_current_transform.
7802 Added cairo_font_extents and cairo_font_glyph_extents. See
7803 documentation for details:
7805 https://cairographics.org/manual/cairo-cairo-t.html#cairo-font-extents
7809 The cairo_ft_font API changed considerably. Please see the
7810 documentation for details:
7812 https://cairographics.org/manual/cairo-FreeType-Fonts.html
7816 Make the fast-path clipping (pixel-aligned rectangles) faster.
7818 Add optimization for applying a constant alpha to a pattern.
7820 Optimize gradients that are horizontal or vertical in device space.
7822 Xlib: When RENDER is not available, use image surfaces for
7823 intermediate surfaces rather than xlib surfaces.
7825 Backend-specific changes
7826 ------------------------
7829 Major update to glitz backend. The output quality should now be just
7830 as good as the image and xlib backends.
7832 Track changes to glitz 0.4.0.
7836 Various improvements to produce more conformant output.
7840 David Reveman contributed a large re-work of the cairo_pattern_t
7841 implementation, providing cleaner code and more optimization
7844 Backend interface changes
7845 -------------------------
7846 Rework backend interface to accept patterns, not surfaces for source
7849 Remove set_matrix, set_filter, and set_repeat functions.
7851 More sophisticated backend interface for image fallbacks,
7852 ({acquire,release}_{source,dest}_image() and clone_similar).
7856 Only install header files for backends that have been compiled.
7858 Fixed some rounding errors leading to incorrectly placed glyphs.
7860 Many other minor fixes.
7862 Snapshot 0.3.0 (2005-01-21 Carl Worth <cworth@cworth.org>)
7863 ==========================================================
7866 1) The public header files will no longer be directly installed into
7867 the system include directory. They will now be installed in a
7868 subdirectory named "cairo", (eg. in /usr/include/cairo rather than
7871 As always, the easiest way for applications to discover the
7872 location of the header file is to let pkg-config generate the
7873 necessary -I CFLAGS and -L/-l LDFLAGS. For example:
7875 cc `pkg-config --cflags --libs cairo` -o foo foo.c
7877 IMPORTANT: Users with old versions of cairo installed will need to
7878 manually remove cairo.h and cairo-features.h from the
7879 system include directories in order to prevent the old
7880 headers from being used in preference to the new ones.
7882 2) The backend-specific portions of the old monolithic cairo.h have
7883 been split out into individual public header files. The new files
7896 Applications will need to be modified to explicitly include the new
7897 header files where appropriate.
7899 3) There are two new graphics backends in this snapshot, a PDF
7900 backend, and a Quartz backend. There is also one new font backend,
7905 Kristian Høgsberg has contributed a new backend to allow cairo-based
7906 applications to generate PDF output. The interface for creating a PDF
7907 surface is similar to that of the PS backend, as can be seen in
7911 cairo_set_target_pdf (cairo_t *cr,
7913 double width_inches,
7914 double height_inches,
7915 double x_pixels_per_inch,
7916 double y_pixels_per_inch);
7919 cairo_pdf_surface_create (FILE *file,
7920 double width_inches,
7921 double height_inches,
7922 double x_pixels_per_inch,
7923 double y_pixels_per_inch);
7925 Once a PDF surface has been created, applications can draw to it as
7926 any other cairo surface.
7928 This code is still a bit rough around the edges, and does not yet
7929 support clipping, surface patterns, or transparent gradients. Text
7930 only works with TrueType fonts at this point and only black text is
7931 supported. Also, the size of the generated PDF files is currently
7934 Kristian is still actively developing this backend, so watch this
7935 space for future progress.
7939 Calum Robinson has contributed a new backend to allow cairo
7940 applications to target native Mac OS X windows through the Quartz
7941 API. Geoff Norton integrated this backend into the current
7942 configure-based build system, while Calum also provided Xcode build
7943 support in the separate "macosx" module available in CVS.
7945 The new interface, available in cairo-quartz.h, is as follows:
7948 cairo_set_target_quartz_context (cairo_t *cr,
7949 CGContextRef context,
7954 cairo_quartz_surface_create (CGContextRef context,
7958 There is an example program available in CVS in cairo-demo/quartz. It
7959 is a port of Keith Packard's fdclock program originally written for
7960 the xlib backend. A screenshot of this program running on Mac OS X is
7963 https://cairographics.org/~cworth/images/fdclock-quartz.png
7967 This new font backend complements the Quartz backend by allowing
7968 applications to use native font selection on Mac OS X. The interface
7969 is a single new function:
7972 cairo_atsui_font_create (ATSUStyle style);
7976 Prototype for non-existent function "cairo_ft_font_destroy" removed.
7978 Now depends on libpixman 0.1.2 or newer, (0.1.3 is being released
7979 concurrently and has some useful performance improvements).
7981 Default paint color is now opaque black, (was opaque white). Default
7982 background color is transparent (as before).
7984 Renamed "struct cairo" to "struct _cairo" to free up the word "cairo"
7985 from the C++ identifier name space.
7987 Functions returning multiple return values through provided pointers,
7988 (cairo_matrix_get_affine, cairo_current_point, and
7989 cairo_current_color_rgb), will now accept NULL for values the user
7992 CAIRO_HAS_FREETYPE_FONT has now been renamed to CAIRO_HAS_FT_FONT.
7994 Performance improvements
7995 ------------------------
7996 Alexander Larsson provided some fantastic performance improvements
7997 yielding a 10000% performance improvement in his application, (when
7998 also including his performance work in libpixman-0.1.3). These include
8000 * Fixed handling of cache misses.
8002 * Creating intermediate clip surfaces at the minimal size required.
8004 * Eliminating roundtrips when creating intermediate Xlib surfaces.
8008 Major re-work of font metrics system by Keith Packard. Font metrics
8009 should now be much more reliable.
8013 Updated for glitz-0.3.0.
8014 Bug fixes in reference counting.
8018 New tests for cache crashing, rotating text, improper filling of
8019 complex polygons, and leaky rasterization.
8023 Fixed assertion failure when selecting the same font multiple times in
8026 Fixed reference counting so cache_destroy functions work.
8028 Remove unintended copyright statement from files generated with
8031 Fixed to eliminate new warnings from gcc 3.4 and gcc 4.
8033 Snapshot 0.2.0 (2004-10-27 Carl Worth <cworth@cworth.org>)
8034 ===========================================================
8035 New license: LGPL/MPL
8036 ---------------------
8037 The most significant news with this release is that the license of
8038 cairo has changed. It is now dual-licensed under the LGPL and the
8039 MPL. For details see the COPYING file as well as COPYING-LGPL-2.1 and
8042 I express my thanks to everyone involved in the license change process
8043 for their patience and support!
8045 New font and glyph internals
8046 ----------------------------
8047 Graydon Hoare has put a tremendous amount of work into new internals
8048 for handling fonts and glyphs, including caches where appropriate.
8049 This work has no impact on the user-level API, but should result in
8050 great performance improvements for applications using text.
8054 This snapshot of cairo includes a (small) test suite in
8055 cairo/test. The tests can be run with "make check". The test suite was
8056 designed to make it very easy to add new tests, and we hope to see
8057 many contributions here. As you find bugs, please try adding a minimal
8058 test case to the suite, and submit it with the bug report to the
8059 cairo@cairographics.org mailing list. This will make it much easier
8060 for us to track progress in fixing bugs.
8062 New name for glitz backend
8063 --------------------------
8064 The gl backend has now been renamed to the glitz backend. This means
8065 that the following names have changed:
8067 CAIRO_HAS_GL_SURFACE -> CAIRO_HAS_GLITZ_SURFACE
8068 cairo_set_target_gl -> cairo_set_target_glitz
8069 cairo_gl_surface_create -> cairo_glitz_surface_create
8071 This change obviously breaks backwards compatibility for applications
8072 using the old gl backend.
8074 Up-to-date with latest glitz snapshots
8075 --------------------------------------
8076 This snapshot of cairo is now up to date with the latest glitz
8077 snapshot, (currently 0.2.3). We know that the latest cairo and glitz
8078 snapshots have been incompatible for a very long time. We've finally
8079 fixed that now and we're determined to not let that happen again.
8081 Revert some tessellation regression bugs
8082 ----------------------------------------
8083 People that have been seeing some tessellation bugs, (eg. leaked
8084 fills), in the CVS version of cairo may have better luck with this
8085 release. A change since the last snapshot was identified to trigger
8086 some of these bugs and was reverted before making the snapshot. The
8087 behavior should be the same as the previous (0.1.23) snapshot.
8089 Miscellaneous changes
8090 ---------------------
8091 Changed CAIRO_FILTER_DEFAULT to CAIRO_FILTER_BEST to make gradients
8094 Track XCB API change regarding iterators.
8098 Fix calculation of required number of vertices for pen.
8100 Fix to avoid zero-dimensioned pixmaps.
8102 Fix broken sort of pen vertices.
8104 Fix bug when cairo_show_text called with a NULL string.
8108 Fix bug in computing image length with XCB.
8110 Fix infinite loop bug in cairo_arc.
8112 Fix memory management interactions with libpixman.
8114 Snapshot 0.1.23 (2004-05-11 Carl Worth <cworth@isi.edu>)
8115 ========================================================
8118 Fix prototype mismatches so that cairo can be built by gcc 3.4.
8120 Updates to track glitz
8121 ----------------------
8122 Various fixes to support the latest glitz snapshot (0.1.2).
8126 Radial gradients now support both inner and outer circles.
8127 Transformed linear gradients are now properly handled.
8128 Fixes for extend type reflect.
8132 Converted shading routines to use fixed point values and introduced a
8133 shading operator structure for more efficient shading calculations.
8134 Support compositing with mask surface when mask is solid or
8135 multi-texturing is available.
8137 PNG backend cleanups
8138 --------------------
8139 Fix output to properly compensate for pre-multiplied alpha format in cairo.
8140 Add support for A8 and A1 image formats.
8144 Avoid crash or infinite loop on null strings and degeneratively short
8147 New? bugs in cairo_clip
8148 -----------------------
8149 There are some fairly serious bugs in cairo_clip. It is sometimes
8150 causing an incorrect result. And even when it does work, it is
8151 sometimes so slow as to be unusable. Some of these bugs may not be
8152 new, (indeed cairo_clip has only ever had a braindead-slow
8153 implementation), but I think they're worth mentioning here.
8155 Snapshot 0.1.22 (2004-04-16 Carl Worth <cworth@isi.edu>)
8156 ========================================================
8157 Cairo was updated to track the changes in libpixman, and now depends
8158 on libpixman version 0.1.1.
8160 Snapshot 0.1.21 (2004-04-09 David Reveman <c99drn@cs.umu.se>)
8161 =============================================================
8164 The OpenGL backend provides hardware accelerated output for
8165 X11 and OS X. The significant new functions are:
8168 cairo_gl_surface_create
8170 Automatic detection of available backends
8171 -----------------------------------------
8172 The configure script now automatically detect what backends are
8173 available, (use ./configure --disable-`backend' to prevent
8174 compilation of specific backends).
8176 Snapshot 0.1.20 (2004-04-06 Carl Worth <cworth@isi.edu>)
8177 ========================================================
8180 David Reveman has contributed a new pattern API which enable linear
8181 and radial gradient patterns in addition to the original surface-based
8182 patterns. The significant new top-level functions are:
8184 cairo_pattern_create_linear
8185 cairo_pattern_create_radial
8186 cairo_pattern_create_for_surface
8187 cairo_pattern_add_color_stop
8190 Any code using the old cairo_set_pattern, (which accepted a
8191 cairo_surface_t rather than a cairo_pattern_t), will need to be
8194 Update to XCB backend
8195 ---------------------
8196 The XCB backend is now enabled by default, (use ./configure
8197 --disable-xcb to turn it off).
8201 Graydon Hoare has added optimizations that make cairo_clip much faster
8202 when the path is a pixel-aligned, rectangular region.
8206 Snapshot 0.1.19 (2004-02-24 Carl Worth <cworth@isi.edu>)
8207 ========================================================
8210 Olivier Andrieu contributed a new PNG backend. It builds on the
8211 existing image backend to make it easy to render "directly" to a
8212 .png file. The user never needs to deal with the actual image
8213 buffer. The significant new functions are:
8215 cairo_set_target_png
8216 cairo_png_surface_create
8218 The PNG backend is not enabled by default so that by default there is
8219 not a new dependency on libpng. Use ./configure --enable-png to enable
8222 Snapshot 0.1.18 (2004-02-17 Carl Worth <cworth@isi.edu>)
8223 ========================================================
8224 Path query functionality
8225 ------------------------
8226 It's now possible to query the current path. The two new functions
8230 cairo_current_path_flat
8232 Each function accepts a number of callback functions that will be
8233 called for each element in the path (move_to, line_to, curve_to,
8234 close_path). The cairo_current_path_flat function does not accept a
8235 curve_to callback. Instead, all curved portions of the path will be
8236 converted to line segments, (within the current tolerance value). This
8237 can be handy for doing things like text-on-path without having to
8238 manually interpolate Bézier splines.
8242 Jamey Sharp has contributed a second X backend that uses the new, lean
8243 XCB library rather than Xlib. It cannot currently be compiled at the
8244 same time as the Xlib backend. See ./configure --enable-xcb.
8246 Build fixes for cygwin.
8250 Snapshot 0.1.17 (2003-12-16 Carl Worth <cworth@isi.edu>)
8251 ========================================================
8255 This snapshot provides much better text support by implementing the
8256 following four functions:
8263 The text/glyph_extents functions can be used to determine the bounding
8264 box (and advance) for text as if drawn by show_text/glyphs.
8266 The text/glyph_path objects functions place text shapes on the current
8267 path, where they can be subsequently manipulated. For example,
8268 following these functions with cairo_stroke allows outline text to be
8269 drawn. Calling cairo_clip allows clipping to a text-shaped region.
8271 Combined dependencies
8272 ---------------------
8273 The cairo core now depends only on the libpixman library. This single
8274 library replaces the three previous libraries libic, libpixregion, and
8275 slim. Thanks to Dave Beckett <dave.beckett@bristol.ac.uk> for all of
8276 the heavy lifting with this renaming effort.
8278 Conditional compilation of backends
8279 -----------------------------------
8280 Cairo now allows optional backends to be disabled at compile time. The
8281 following options may now be passed to the configure script:
8286 Note that the first option is a change from the old --without-x option
8287 which will no longer have any effect.
8289 OS X supported - several byte-order issues resolved
8290 ---------------------------------------------------
8291 Cairo has now been successfully compiled under OS X. Testing revealed
8292 that there were some byte-order problems in the PostScript backend and
8293 the PNG generation in the demos. These have now been resolved.
8297 Graydon Hoare <graydon@redhat.com> implemented the first real text
8298 support using FreeType/fontconfig, (previous versions of cairo used
8299 Xft and could only draw text when using an X backend).
8303 Graydon Hoare <graydon@redhat.com> added the first real support for
8304 running cairo with a non-render-aware X server.
8306 Jamey Sharp <jamey@minilop.net> virtualized the backend font and
8307 surface interfaces in September, 2003.
8311 Xr is renamed cairo to avoid confusion since it no longer had a strict
8316 A new image surface backend is added to Xr. Keith Packard
8317 <keithp@keithp.com> wrote the image compositing code in libic that is
8318 used for the image_surface backend. This code was originally written
8319 as the software fallback for the render extension within the X
8324 Carl Worth <cworth@isi.edu> wrote the first lines of Xr, after Keith
8325 Packard <keithp@keithp.com> proposed the plan for a stateful drawing
8326 library in C providing a PostScript-like rendering model.
8328 LocalWords: mutex BeOS extraordinaire distro's URL lcd bool tarball