diff options
Diffstat (limited to 'libs/cairo-1.16.0/NEWS')
-rw-r--r-- | libs/cairo-1.16.0/NEWS | 8113 |
1 files changed, 0 insertions, 8113 deletions
diff --git a/libs/cairo-1.16.0/NEWS b/libs/cairo-1.16.0/NEWS deleted file mode 100644 index a50b0a0..0000000 --- a/libs/cairo-1.16.0/NEWS +++ /dev/null @@ -1,8113 +0,0 @@ -Release 1.16.0 (2018-10-19 Bryce Harrington <bryce@bryceharrington.org>) -======================================================================== -This new stable release incorporates a number of improvements made in -the four years since 1.14.0. - -Of particular note is a wealth of work by Adrian Johnson to enhance PDF -functionality, including restoring support for MacOSX 10.4, metadata, -hyperlinks, and more. - -Much attention also went into fonts, including new colored emoji glyph -support, variable fonts, and fixes for various font idiosyncrasies. - -Other noteworthy changes include GLESv3 support for the cairo_gl -backend, tracking of SVG units in generated SVG documents, and cleanups -for numerous test failures and related issues in the PDF and Postscript -backends. - -For a complete log of changes, please see - - https://cairographics.org/releases/ChangeLog.1.16.0 - - -Features and Enhancements -------------------------- -* Add support for OpenGL ES 3.0 to the gl backend. -* The PDF backend has gained support for a range of widely used - features, including thumbnails, page labels, metadata, document - outlines, structured text, hyperlinks, and tags. Tags permit adding - logical info such as headings, tables, figures, etc. that facilitates - indexing, accessibility, text reflow, searching, and extraction of the - tagged items to other software. For details on this new PDF - functionality, see: - https://lists.cairographics.org/archives/cairo/2016-June/027427.html -* Variable font support. Variable fonts are single font files with - various typography characteristics, such as weight or slant, that users - of the font can adjust between two points. Effectively this enables a - single font to behave as multiple fonts. -* Restore MacOSX 10.4 support. Cairo had dropped 10.4 support when - moving to the CoreText API. Now we automatically detect which API to - use via dynamic linking, so can resume supporting this older version - of MacOSX. -* Support colored emoji glyphs, stored as PNG images in OpenType fonts. -* Skia backend is removed -* Use Reusable streams for forms in Level 3 Postscript. -* Add CAIRO_MIME_TYPE_EPS mime type for embedding EPS files. -* Add CCITT_FAX mime type for PDF and PS surfaces -* svg: add a new function to specify the SVG document unit - (Bug #90166) -* Use UTF-8 filenames on Windows - - -API Changes ------------ -Several new APIs were added. No existing APIs were altered. - -New PDF functionality: - - * cairo_pdf_surface_add_outline - * cairo_pdf_surface_set_metadata - * cairo_pdf_surface_set_page_label - * cairo_pdf_surface_set_thumbnail_size - * cairo_tag_begin - * cairo_tag_end - * CAIRO_STATUS_TAG_ERROR - -New error status items for problems relating to PDF tagging: - - * CAIRO_STATUS_WIN32_GDI_ERROR - * CAIRO_STATUS_FREETYPE_ERROR - * CAIRO_STATUS_PNG_ERROR - - New error status items for handling of GDI, libfreetype, and libpng - errors, respectively. - - -Setting up Win32 surfaces for HDC with alpha channels: - - * cairo_win32_surface_create_with_format - - New API for added PDF functionality (see above), and new error - status item for problems relating to PDF tagging. - -Variable fonts: - - * cairo_font_options_get_variations - * cairo_font_options_set_variations - -Tracking units in SVG documents: - - * cairo_svg_surface_set_document_unit - * cairo_svg_surface_get_document_unit - - - -Dependency Changes ------------------- -None - - -Performance Optimizations -------------------------- -None - - -Notable Bug Fixes ------------------ -* Fix thin lines that don't show up when printing in Inkscape due to - overly aggressive culling. - (Bug #77298) -* Fix playback of recording surfaces into PDF surfaces, where objects - with negative coordinates were not getting drawn. To address this, - the coordinate systems for PDF and PS have been changed to match - cairo's coordinate system. This allows recording surfaces to be - emitted in cairo coordinates, and results in the same origin being - used for all operations when using the recording surface XObject. - Test cases for PDF and PS have also been updated accordingly. - (Bug #89232) -* Fix "invalidfont" error on some printers when printing PDFs with - embedded fonts that have glyphs (such as spaces) with - num_contours == 0. (Bug #79897) -* Fix missing glyphs such as thin dashes, which get scaled to 0 in - userspace and thus have their drawing operations culled. (Bug #94615) -* Fix other oddities caused by variously idiosyncratic fonts. -* Fix a data race in freed_pool discovered by Firefox's cairo usage. - The patch adads atomic int load and store functions, with relaxed - memory ordering. (Bug #90318) -* Handle SOURCE and CLEAR operators when painting color glyphs. - (Bug #102661) -* Fix falling back to system font with PDFs using certain embedded - fonts, due to truncated font names. - (Bug #103249) -* Prevent curved strokes in small ctms from being culled from vector - surfaces - (Bug #103071) -* Fix assertion hit with PDFs using Type 4 fonts rendered with user - fonts, due to error when destroying glyph page. - (Bug #103335) -* Prevent invalid ptr access for > 4GB images. - (Bug #98165) -* pdf: Fix internal links pointing to other pages, by pre-calculating - page heights so that link positions can be calculated more accurately. -* Fix error reporting in the xcb backend if fallback fails. Instead of - returning NULL when the X11 server can't do some operation, return a - surface in an error state. -* Clarify documentation regarding device scale inheritance and the units - used in cairo_surface_create_similar_image. - (Bug #99094) -* Call XSync in the xlib backend before setting the error handler to - ignore errors for certain requests, to make sure all pending errors - are handled first. -* Fix regression with text containing space character on Win32. - (Bug: https://gitlab.freedesktop.org/cairo/cairo/issues/339) - -For a more comprehensive listing of fixed bugs, see the release notes for the -individual 1.15.x releases. - - -Release 1.15.14 (2018-09-19 Bryce Harrington <bryce@bryceharrington.org>) -============================================================================ -We're nearly ready to finalize the 1.16.0 release, so this snapshot -can be considered a beta for 1.16. - -The most notable change this release is a performance optimization for -windows, discussed below. Other than that, much of the development -focus was on final polish and stability as we prepare for 1.16. - -Some attention went into getting the testsuite passing at least for the -image backend. The Cairo testsuite depends on external software like -Pixman, and changes in the rendering behavior of these dependencies -change test behavior, leading to false positives. - -Results from the Coverity static testing tool were also reviewed. Most -of the issues flagged were false positives, but there were several -legitimate problems found and fixed. - -For a complete log of changes, please see - - https://cairographics.org/releases/ChangeLog.1.15.12 - -Features and Enhancements -------------------------- -* Add more FreeeType font color conversions to support COLR/CPAL -* Update test reference images against current pixman - -API Changes ------------ -None - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- -Vasily Galkin introduced a Win32 performance optimization for -CAIRO_OPERATOR_SOURCE when copying data from a backbuffer to an argb32 -surface corresponding to a Win32 DC. With this, argb32 drawing should -perform as fast as typical dibsection-buffered GDI drawing. See the -Cairo mailing list for April 2018 for data and discussion of the -performance improvements. - - -Bug Fixes ---------- -* Fix crash when rendering Microsoft's Segoe UI Emoji Regular font. -* Fix build breakage with glesv3 enabled due to non-existant glesv3.pc. -* Fix memory leaks found by Coverity -* Fix incorrect null ptr handling found by Coverity -* Fix test compilation when font-config is disabled -* Use _cairo_malloc instead of malloc (Bug #101547) (CVE-2017-9814) -* Fix assertion failure in the freetype backend (Bug #105746) - - -Release 1.15.12 (2018-04-04 Bryce Harrington <bryce@osg.samsung.com>) -======================================================================== -The main focus for this release is the addition of Variable Font -support. Variable fonts are single font files with various typography -characteristics, such as weight or slant, that users of the font can -adjust between two points. Effectively this enables a single font to -behave as multiple fonts. - -The Skia backend is disabled in this release, due to severe bitrot, and -will be removed in future releases. Contact the cairo team if you have -a need of this backend. - -For a complete log of changes, please see - - https://cairographics.org/releases/ChangeLog.1.15.12 - -Features and Enhancements -------------------------- -* Variable font support -* Skia backend is disabled - -API Changes ------------ -* cairo_font_options_get_variations() and - cairo_font_options_set_variations() are added. - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- -None - -Bug Fixes ---------- -* Fix errors in csi-trace --help and --version options -* Fix a 'memory leak' in the image compositor, with - pixman_glyph_cache_t. -* Fix access of uninitialized memory found by valgrind - (Bug #91271) -* Fix improper initialization of memory in - _cairo_ft_font_face_create_for_pattern() - (Bug #105084) -* Fix multi-monitor virtual desktop with negative coords on Win32 - (Bug #100793) -* Fix issues occuring with older FreeType versions. - - -Release 1.15.10 (2017-12-07 Bryce Harrington <bryce@osg.samsung.com>) -======================================================================== -This release adds GLESv3 support to the cairo_gl backend, adds -tracking of SVG units in generated svg documents, and cleans up numerous -test failures and related issues in the PDF and Postscript backends. - -For a complete log of changes, please see - - https://cairographics.org/releases/ChangeLog.1.15.10 - -Features and Enhancements -------------------------- -* Add support for OpenGL ES 3.0 to the gl backend. -* Use Reusable streams for forms in Level 3 Postscript. -* Add CAIRO_MIME_TYPE_EPS mime type for embedding EPS files. -* Add CCITT_FAX mime type for PDF and PS surfaces -* svg: add a new function to specify the SVG document unit - (Bug #90166) -* Use UTF-8 filenames on Windows - -API Changes ------------ -* cairo_svg_surface_set_document_unit() and - cairo_svg_surface_get_document_unit() - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- -None - -Bug Fixes ---------- -* Fix regression in gles version detection -* Fix undefined-behavior with integer math. -* Handle SOURCE and CLEAR operators when painting color glyphs. - (Bug #102661) -* Convert images to rgba or a8 formats when uploading with GLESv2 -* Use _WIN32 instead of windows.h to check for windows build. -* Fix sigabrt printing documents with fonts lacking the mandatory .nodef - glyph. - (Bug #102922) -* Prevent curved strokes in small ctms from being culled from vector - surfaces - (Bug #103071) -* Fix painting an unbounded recording surface with the SVG backend. -* Fix falling back to system font with PDFs using certain embedded - fonts, due to truncated font names. - (Bug #103249) -* Fix handling of truetype fonts with excessively long font names - (Bug #103249) -* Fix race conditions with cairo_mask_compositor_t - (Bug #103037) -* Fix build error with util/font-view -* Fix assertion hit with PDFs using Type 4 fonts rendered with user - fonts, due to error when destroying glyph page. - (Bug #103335) -* Set default creation date for PDFs -* Prevent invalid ptr access for > 4GB images. - (Bug #98165) -* Prevent self-copy infinite loop in Postscript surface. -* Fix padded image crash in Postscript surface. -* Fix annotation bugs in PDFs and related memory leaks -* Fix test failures and other assorted issues in ps and pdf code. -* Fix code generation when using GCC legacy atomic operations - (Bug #103559) -* Fix various compilation warnings and errors. -* Fix various distcheck errors with private symbols, doxygen formatting, - etc. - -Release 1.15.8 (2017-08-29 Bryce Harrington <bryce@osg.samsung.com>) -======================================================================== -This small snapshot provides new colored emoji glyph support, and a -handful of minor fixes. - -For a complete log of changes, please see - - https://cairographics.org/releases/ChangeLog.1.15.8 - -Features and Enhancements -------------------------- -* Support colored emoji glyphs, stored as PNG images in OpenType fonts. - - -API Changes ------------ -None - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- -None - -Bug Fixes ---------- - -* pdf: Fix internal links pointing to other pages, by pre-calculating - page heights so that link positions can be calculated more accurately. - -* image: Fix crash on negative lengths - -* win32: Fix initialization of mutexes for static builds - -* pdf: Don't emit /PageLabel dict when no labels defined - -* font: Fix color font loading on big-endian systems - -* font: Fix color font support infinite-loop with empty glyphs - -* Fix off by one check in cairo-image-info.c - - - -Release 1.15.6 (2017-06-13 Bryce Harrington <bryce@osg.samsung.com>) -======================================================================== -This new snapshot incorporates changes over the past half-year since the -1.15.4 snapshot, including all the fixes from the 1.14 release series. - -The PDF code continues to be enhanced, and we're restored MacOSX 10.4 -support. Font-related fixes and improved error handling for X round out -the release. - -For a complete log of changes, please see - - https://cairographics.org/releases/ChangeLog.1.15.6 - - -Features and Enhancements -------------------------- -* Detect if variable fonts have synthesized bold/italic or non-default - variants, and use a fallback font where needed. - -* Restore MacOSX 10.4 support. Cairo had dropped 10.4 support when - moving to the CoreText API. Now we automatically detect which API to - use via dynamic linking, so can resume supporting this older version - of MacOSX. - - -API Changes ------------ -None - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- -None - -Bug Fixes ---------- -* Fix error reporting in the xcb backend if fallback fails. Instead of - returning NULL when the X11 server can't do some operation, return a - surface in an error state. - -* Call XSync in the xlib backend before setting the error handler to - ignore errors for certain requests, to make sure all pending errors - are handled first. - -* Fix text-glyph-range for quartz-font. Use 0xFFFF instead of 0 for - invalid index tracking. - -* Fix handling of Supplementary Multilingual Plane (SMP) Unicode - characters in quartz-font. - -* Fix various issues in the drm backend including updating API usage and - general code cleanup. - -* Clarify documentation regarding device scale inheritance and the units - used in cairo_surface_create_similar_image. - Bug #99094. - - -Release 1.15.4 (2016-12-9 Bryce Harrington <bryce@osg.samsung.com>) -======================================================================= -This new snapshot incorporates changes over the past year since the -1.15.2 snapshot, including all the fixes from the 1.14 release series. - -Of particular note in this snapshot is a wealth of work by Adrian -Johnson to enhance PDF support, as well as numerous bug fixes provided -by him and other contributors. - -For a complete log of changes since the last release, please see: - - https://cairographics.org/releases/ChangeLog.1.15.4 - -Features --------- -* The PDF backend has gained support for a range of widely used - features, including thumbnails, page labels, metadata, document - outlines, structured text, hyperlinks, and tags. Tags permit adding - logical info such as headings, tables, figures, etc. that facilitates - indexing, accessibility, text reflow, searching, and extraction of the - tagged items to other software. For details on this new PDF - functionality, see: - - https://lists.cairographics.org/archives/cairo/2016-June/027427.html - - -API Changes ------------ - - cairo_win32_surface_create_with_format - - Added a cairo API to set up Win32 surfaces for HDC with alpha channels. - - cairo_pdf_surface_add_outline - cairo_pdf_surface_set_metadata - cairo_pdf_surface_set_page_label - cairo_pdf_surface_set_thumbnail_size - cairo_tag_begin - cairo_tag_end - CAIRO_STATUS_TAG_ERROR - - New API for added PDF functionality (see above), and new error - status item for problems relating to PDF tagging. - - CAIRO_STATUS_WIN32_GDI_ERROR - CAIRO_STATUS_FREETYPE_ERROR - CAIRO_STATUS_PNG_ERROR - - New error status items for handling of GDI, libfreetype, and libpng - errors, respectively. - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- -None - -Bug Fixes ---------- -* Bug fixes from 1.15.2 (see the 1.15.2 NEWS for details) - -* Fix playback of recording surfaces into PDF surfaces, where objects - with negative coordinates were not getting drawn. To address this, - the coordinate systems for PDF and PS have been changed to match - cairo's coordinate system. This allows recording surfaces to be - emitted in cairo coordinates, and results in the same origin being - used for all operations when using the recording surface XObject. - Test cases for PDF and PS have also been updated accordingly. - (Bug #89232) - -* Fix "invalidfont" error on some printers when printing PDFs with - embedded fonts that have glyphs (such as spaces) with - num_contours == 0. (Bug #79897) - -* Fix missing glyphs such as thin dashes, which get scaled to 0 in - userspace and thus have their drawing operations culled. (Bug #94615) - -* Fix other oddities caused by variously idiosyncratic fonts. - -* Fix deadlock when destruction of a scaled font indirectly triggers - destruction of a second scaled font, causing the global cache to be - locked twice. (Bug #93891) - -* Fix X errors reported to applications when shmdt() is called before - the Attach request is processed, due to missing xcb and xlib calls. - -* Fix random failure in record-paint-alpha-clip-mast test case, caused - by an incorrect assumption that a deferred clear can be skipped. - (Bug #84330) - -* Fix crash when dealing with an XShmGetImage() failure, caused by a - double free in _get_image_surface(). (Bug #91967) - -* Fix invalid execution of ASCII85 data by the PS interpreter that the - image operator didn't use, by flushing the extraneous data after - drawing the image. (Bug #84811) - -* Fix decoding of Adobe Photoshop's inverted CMYK JPEG files in PDF - export. - -* Fix unbounded surface assertion in win32-print code. - -* Fix a data race in freed_pool discovered by Firefox's cairo usage. - The patch adads atomic int load and store functions, with relaxed - memory ordering. (Bug #90318) - -* Cleanup debugging text sent to stdout instead of log. (Bug #95227) - -* Fix build issue when using non-GNU strings utility. (Bug #88639) - -* Fix build of cairo modules as regular modules, not as versioned shared - libaries. (Bug #29319) - -* Fix build on win32 using gcc 5.4. - -* Fix build of script backend to require zlib. - -* Update test suite reference images using Debian Jessie 64-bit and - poppler current as of June, 2016. - -* Various improvements to documentation and tests, compiler warning - fixes, and an assortment of code refactoring and cleanup. - - -Release 1.15.2 (2015-12-10 Bryce Harrington <bryce@osg.samsung.com>) -======================================================================== -This release is largely a rollup to include a variety of fixes that -didn't make the cut for the stable 1.14.2 and 1.14.4 releases, as well -as all the fixes from those releases. Notably this includes a highly -requested new API for Win32 surfaces. - -For a complete log of changes since the last release, please see: - - https://cairographics.org/releases/ChangeLog.1.15.2 - -Features --------- -None - -API Changes ------------ - - cairo_win32_surface_create_with_format - - Added a cairo API to set up Win32 surfaces for HDC with alpha channels. - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- -None - -Bug Fixes ---------- -* All the bug fixes from 1.14.2, 1.14.4, and 1.14.6 - -* Fix xcb/xlib compilation and calls. Make image boxes behave when SHM - is not available. - -* Fix various issues with printing and transparent images on Win32. - -* Fix thin lines that don't show up when printing in Inkscape due to - overly aggressive culling. - (Bug #77298) - -* Fix broken printing via pdf when glyph 0 is used for rendering, - resulting in missing spaces and letters. - (Bug #89082) - -* Fix crash for certain glyphs in opentype fonts. - (Bug #91902) - -* Fix incorrect rendering of SVG paths with more than one subpath. If - more than one trap is passed in then it's guaranteed that the returned - traps will have their left edge to the left of their right edge, but - if only one trap is passed in then the function always returns without - doing anything. - (Bug #90984) - -* Improve rendering with Quartz to better match pixman's blending and - filtering behavior. - - -Release 1.14.6 (2015-12-09 Bryce Harrington <bryce@osg.samsung.com>) -======================================================================== -Simple bugfix release to fix one Windows issue. - -For a complete log of changes since 1.14.4, please see: - - https://cairographics.org/releases/ChangeLog.1.14.6 - -Features --------- -None - -API Changes ------------ -None - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- -None - -Bug Fixes ---------- -* Fix failure on Windows due to reference of the function - cairo_win32_surface_create_with_format(), which isn't included in the - 1.14.4 release. (Bug #92771) - - -Release 1.14.4 (2015-10-28 Bryce Harrington <bryce@osg.samsung.com>) -======================================================================== -Just in time for Halloween we see another bug-fix release for Cairo. -This brings a few dozen straightforward bug fixes with no API changes. - -In addition, this includes a typical assortment of fixes to tests, -cleanup of warnings and memory leaks, correction of misspellings, -updates to documentation, etc. - -For a complete log of changes since 1.14.2, please see: - - https://cairographics.org/releases/ChangeLog.cairo-1.14.4 - -Features --------- -None - -API Changes ------------ -None - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- -None - -Bug Fixes ---------- -* Avoid appending empty slots to user data arrays. Fixes a memory - consumption regression since commit 9341c254a. - -* Return a better error (file-not-found) when setting up pango on - devices where the font files don't have read permissions. - -* Fix regression in the font size of canvas text in Inkscape when - compiled with the Quartz backend. (Bug #84324) - -* Fix _cairo_gl_shader_bind_matrix() to maintain compatibility with - OpenGL ES 2.0. Manually transpose the matrix. - -* Fix incorrect font descriptor conversion when the font matrix yy is - negative. (Bug #90538) - -* Fix crash when using a complex path for clip and stroke due to - discarding the intersection exactly at the top edge. - (Bug #74779) - -* Fix cairo_get_locale_decimal_point() on Android - -* Fix compilation problem on AIX due to conflicting usage of symbol - 'jmpbuf'. (Bug #89339) - -* Fix broken rendering with XCB due to snapshotting of uploaded part of - surfaces. (Bug #67505) - -* Fix loss of alpha when copying a mask for a cairo recording surface, - resulting in a double copy. (Bugs #73038, #73901) - -* Fix incorrect recording of certain paths with script surfaces. - (Bug #91054) - -* Fix typo in definition of MAYBE_WARN in configure script. - (Bug #89750) - -* Fix use of filename variable after it's been freed. - (Bug #91206) - -* Fix out of bounds access when printing pattern. - (Bug #91266) - -* Fix incorrect size calculation in glyph cache unlocking for Cairo GL - compositor. - (Bug #91321) - -* Fix memory leak in _cairo_gl_pattern_texture_setup() - (Bug #91537) - -* Fix transparent images in win32-print. - (Bug #91835) - -* Fix _put_shm_image_boxes and _put_image_boxes when no SHM available - with XCB. - - -Release 1.14.2 (2015-03-09 Bryce Harrington <bryce@osg.samsung.com>) -==================================================================== -This release provides collected bug fixes, along with one feature -enhancement for the xcb backend, and a small performance improvement for -fonts. - -The running theme of the bug fixes is platform-specific issues, both -build and run-time. Platforms with fixes include Sparc, AIX, Windows -(mingw), and Windows (MSVC8). Memory leaks, valgrind issues, and PDF -issues round out our list. - -It's come to light that changes in cairo 1.14 resulted in breakage on -MacOS X 10.4. We've not yet determined whether to fix up the support, -or excise the 10.4-specific code and support only OS X 10.5 or newer. -Meantime, we'll only advertise cairo as working on OS X 10.5. - -Features --------- - * Improve xcb's handling of per-screen subpixel ordering. If no - Xft.rgba property is specified, default to the screen's subpixel - order. - -API Changes ------------ -None - -Dependency Changes ------------------- -None - -Performance Optimizations -------------------------- - * Improve performance of cpu_to_be32 and be32_to_cpu, making truetype - subsetting of large fonts run about 15% faster. - -Bug Fixes ---------- - * Fix unaligned access on sparc with the compact font format (CFF). - Unlike truetype, all data in CFF is not aligned. - (Debian bug #712836) - * Fix unaligned access on sparc with tor-scan-converter's memory pool. - * Fix crash when loading a PDF with a transformed image. - (fdo bug #85151) - * Fix regression on mingw for bigendian test due to removal of file - extension for executables. - (fdo bug #85120) - * Fix handling of backslash in PDF interpreter - (fdo bug #85662) - * Fix crash in xlib and xcb renderers when swapping a 0-sized glyph - * Fix bug with RTL text in PDF operators - (fdo bug #86461) - * Fix compilation 'cairo-path-stroke-traps.c' with MSVC8 - (fdo bug #84908) - * Fix crash in _fill_xrgb32_lerp_opaque_spans when a span length is - negative. - * Fix valgrind error by releasing pattern created by - cairo_pattern_create_rgb(). - * Fix valgrind errors when running cairo-test-suite. - * Fix memory leak in recording surface replays - (fdo bug #87898) - * Fix destruction of fonts in api-special-cases test. - (fdo bug #87567) - * Fix duplicated surface push on similar-image, preventing trivial GTK3 - program traces from being replayable, with an error message about - invalid values for the size of the input. - (fdo bug #73580) - * Fix crash when win32 surface's image size does not cover the entire - surface. - (fdo bug #53121) - * Fix crash due to obsolete CGFontGetGlyphPath call - (fdo bug #84324) - * Fix several build issues on AIX - (fdo bugs #89338, #89340, #89356, #89354) - * Fix various documentation warnings and errors - - -Release 1.14.0 (2014-10-13 Bryce Harrington <bryce@osg.samsung.com>) -==================================================================== -Hard to believe it's been over a year since our last release, but it's -not for lack of activity. This release includes contributions of a wide -assortment of bug fixes, build system improvements, warnings cleanups, -codebase refactoring, test suite repairs, and static analysis work. - -This release is lighter on features (compared with 1.12.10) but includes -a highly demanded rehaul of our image downscaling functionality, which -solves a serious problem experienced by Inkscape users when shrinking -embedded bitmaps in SVG files. The new scaling algorithms are used by -the image backend and by other backends as needed for fallbacks. - - -Features --------- - - Filtering improvements for the image backend, in particular - down-scaling of images produces filtered images that depend on all the - pixels of the source. When using the image backend you get the - following settings: - - CAIRO_FILTER_GOOD: uses a box filter for scales less than .75 in - either direction. For scales larger than this, the same filter as - CAIRO_FILTER_BILINEAR is used. - - CAIRO_FILTER_BEST: uses a Catmull-Rom filter always. When upscaling - more than 2x this will produce anti-aliased square pixels, similar - to OS/X. - - CAIRO_FILTER_GAUSSIAN: uses PIXMAN_FILTER_BEST, which in current - pixman is the same as BILINEAR. (This is subject to change in the - future). - - xlib and xcb also use the image fallback for GOOD/BEST filters, but - note that other backends do not implement these filtering fixes yet, - however other actions may cause them to use an image fallback which - will cause these filters to be used. - - Improve handling of device transformation and scaling, allowing Cairo - to now support scaling at a device level, permitting easier, more - transparent HiDPI support. - - Support JBIG2 mime data in PDF. This allows embedding of more - compressed JPEG formats within PDF, rather than including the full - uncompressed image. Also, reduce the number of transparency groups - used by PDF to keep the file size small and viewing/printing of the - PDF fast. - - Expand the embedding section to include stencil mask support. - - Reorder font declarations to be in natural order. - - Update the Skia backend to build against current Skia (as of June - 2014). - - Drop Link-Time Optimization (LTO) support from build system. This - seems to have caused much trouble for unclear benefit, and most - distros are reverting or disabling it anyway. - - Optimize VBO size on GL to 1M and to 16k for EGL. This improves - (theoretical) performance for desktop GLX use cases while avoiding - hitting VBO memory size limitations on embedded devices. - -API Changes ------------ - - cairo_surface_set_device_scale, cairo_surface_get_device_scale: - - Sets a scale that is multiplied to the device coordinates - determined by the CTM when drawing to @surface. One common use for - this is to render to very high resolution display devices at a scale - factor, so that code that assumes 1 pixel will be a certain size - will still work. - - cairo_egl_device_get_display, cairo_egl_device_get_context: - - Support get/set of EGLContext and EGLDisplay for egl-based cairo - devices, similar to GLX. - -Dependency Changes ------------------- - - Cairo now requires glib 2.14 for its gobject helper functions, - and pixman 0.30 for downscaling. - - -Bug fixes ---------- - - Don't embed CMYK Jpeg images in svg. - - Fix tests to place output in proper location. - - Fix determination of alpha for all surfaces when recording. - - Extend oversize check to cairo_gl_surface_create_for_texture, so an - error surface is returned if the texture is too large to render to. - - Fix embedding of mime data in PDF and PS files. - - Remove useless error handling in *_reply() functions in XCB. - - Fix a double-free exposed by multithreaded apps creating and - destroying the same font concurrently. - https://bugs.freedesktop.org/show_bug.cgi?id=69470 - - Fix corrupt stacks produced by bugs in operand emission for trace. - - Fix out of bounds array access in format cache for xlib - - Don't rename glyphs used by seac operator. This can cause certain - combined characters to use their decorations (e.g. umlauts on ö) to be - lost during printing of PDFs using evince. - https://bugs.freedesktop.org/show_bug.cgi?id=70364 - - Fix crash on calling cairo_create with a finished surface - - Fix SSIZE_T definition problem when making with MSYS on Windows7 - - Fix one off issue in gl context cleanup - - Fix usage of CAIRO_STACK_ARRAY_LENGTH - - Fix rectangle stroke with non rectilinear pen - - Fix imagemask with pattern source failure on some printers. This bug - could cause files converted using pdftops to fail for example on Ricoh - printers, or opening in Adobe Distiller on Windows. - https://bugs.freedesktop.org/show_bug.cgi?id=69485 - - Fix whitespace in font names - - Fix page size in generated PDFs. When printing using pdftocairo on - larger page sizes, such as 11x17, the image would be cropped to letter - size. - https://bugs.freedesktop.org/show_bug.cgi?id=73452 - - Fix path-currentpoint test by preserving current-point in - copy_path()/append_path() sequence - - Fix generation of HTML in code docs for - cairo-format-stride-for-width. Raw HTML code was being passed - to the browser, instead of displaying normally. - https://bugs.freedesktop.org/show_bug.cgi?id=63257 - - Fix spelling of "tessellator" throughout code. We're using the - American rather than British spelling of this word. - https://bugs.freedesktop.org/show_bug.cgi?id=50411 - - Fix crash in pixman_image_composite32 - - Fix crash when trying to modify a (const) all-clipped cairo_clip_t - https://bugs.freedesktop.org/show_bug.cgi?id=75819 - - Add check_composite method to all compositors, to fix crashes in the - test suite. - - Fix crash in Firefox when scrolling on certain pages. - - Fix memory leaks found by static analysis. - - Fix build of any2ppm if fork is not available. - - Fix broken build for Qt backend, due to missing libstdc++. - - Fix typo in two cairo_uint128 functions. Fixes potential build issues - on systems without a uint128 type. - - Fix build when --enable-pdf=no - - Fix cache_frozen assertions for Win32 print. - - Correctly check for xcb image surface for inplace upload - - Fix webkit-based web browser crashes due to empty boxes by skipping - over them when tesselating. - - Make pixman, libpng, and zlib paths commandline configurable for win32 - builds. - - Fix image scale on Win32 when GDI scale is not identity. - - Fix float endian configure test when using clang -O4 - - Fix compilation with Android bionic libc - - Don't try to build util/sphinx on Windows - - Fix loss of precision when emitting joins. This was caused by - discrepancies in line gradients when passing trapezoids around. - - Fix loss of precision and associated rendering issues in - cairo-tor-scan-converter from projection onto sample grid. - - Fix pixman oversampling of neighbouring edges within a cell by - eliminating self-intersections for the pixman traps compositor. - - Fix multi-line string splitting in PDFs - - Various cleanups and fixes to warnings, documentation, tests, and - build system. Improve error handling and return value checks. - Cleanup XFAIL tests and reference images. Cover recently added - functionality. - - -Release 1.12.16 (2013-08-21 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -Thanks to everybody who reported a bug and helped us develop a fix, -we have amassed quite a few bug fixes. There are still more outstanding -bugs that seek attention and a little bit of TLC, but this release has -been delayed long enough... - -Bug fixes ---------- - - Set the correct orientation for simple boxes with a negative scale - factor. - - Fix the creation of the shading dictionary in PDF. - - Fix a crash in PDF when incorporating an image with CAIRO_EXTEND_PAD. - https://bugs.freedesktop.org/show_bug.cgi?id=61451 - - Avoid upscaling bitmap fonts if possible. - - Fix an assertion failure within the mempool allocator for shared memory. - - Fix allocation size for CFF subsets. - - Export cairo_matrix_t for GObject bindings. - - Fix a double free in the Quartz backend. - https://bugs.freedesktop.org/show_bug.cgi?id=62885 - - Fix origin of GDI StretchBlits for the Windows backend - https://bugs.freedesktop.org/show_bug.cgi?id=61876 - - Fix error propagation for requests to create a similar surface with - negative size. - https://bugs.freedesktop.org/show_bug.cgi?id=63196 - - Fix complex clipping of trapezoids with regions - https://bugzilla.gnome.org/show_bug.cgi?id=697357 - - Stop leaking the image data when loading PNGs - - Fix unbounded operations with a clip mask through the span compositor - https://bugs.freedesktop.org/show_bug.cgi?id=61592 - - Add missing checks before rendering to a finished surface - so we return - an error rather than hit an assert. - https://bugs.freedesktop.org/show_bug.cgi?id=68014 - - Prevent an assertion failure when creating similar GL surfaces larger - than supported by hardware. - - Prevent a double free of a similar image under Windows. - https://bugs.freedesktop.org/show_bug.cgi?id=63787 - - -Release 1.12.14 (2013-02-10 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -In the last week we had a few more bugs reported and promptly resolved. -As these are a combination of regressions and stability issues, it is -time for a prompt update and release. Many thanks to everyone for -testing and reporting issues, and helping to make Cairo better. - -Bug fixes ---------- - - Prevent user callbacks accessing user-data during destroy to prevent - use-after-free bugs. - https://bugzilla.mozilla.org/show_bug.cgi?id=722975 - - Use standard names for glyphs in subset fonts (PDF). - https://bugs.freedesktop.org/show_bug.cgi?id=60248 - - Fix detection of Win98. The logic for detecting Win98 (and its broken - AlphaBlend()) was inverted, disabling AlphaBlend() for everyone. - - Prevent numeric overflow from extrapolating polygon edges to the clip - boundary and causing severe render artifacts. - https://bugs.freedesktop.org/show_bug.cgi?id=60489 - - Fix computation of glyph string coordinates when breaking up runs - for xlib. - - Fix an assertion in the win32 backend for failing to clear its - similar-images. - https://bugs.freedesktop.org/show_bug.cgi?id=60519 - - -Release 1.12.12 (2013-01-31 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -The goal of this release is to fix the synchronisation problems that -were exhibited in the SHM transport for cairo-xlib. This cropped up -any place that tried to rapidly push fresh pixel data to the X server -through an ordinary image surface, such as gimp-2.9 and evince. - -Bug fixes ---------- - - Avoid replacing the entire image when uploading subimages - https://bugs.freedesktop.org/show_bug.cgi?id=59635 - - Force synchronisation for scratch SHM image buffers, so that we do - not overwrite data as it is being read by X. - https://bugs.freedesktop.org/show_bug.cgi?id=59635 (also) - - Fix typos in detecting multisampling for the GL (MSAA) backend. - - Fix a memory leak in the GL (MSAA) backend. - - Fix a reference counting bug when mapping a GL surface to an image. - - -Release 1.12.10 (2013-01-16 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -A heap of bug fixes everywhere, and the gradual completion of the MSAA -backend for cairo-gl. Perhaps the most noteworthy set of the bugfixes -was the crusage lead by Behdad Eshfabod to make font handling by -pango/cairo/fontconfig fully threadsafe. This testing revealed a couple -of races that needed fixing in Cairo's scaled-font and glyph cache. - -Bug fixes ---------- - - Append coincident elements to the recording's surface bbtree so that - the list is not corrupted and the overlapping elements lost. - - Fix cairo-trace to correctly record map-to-image/unmap-image and then - replay them. - - Ignore MappingNotifies when running the XCB testsuite as they are sent - to all clients when the keyboard changes. The testsuite would detect - the unexpected event and complain. - - Handle very large images in the XCB backend. - - Fix a memory leak in the xlib/shm layer, and prevent use of the SHM - surfaces after the display is closed. - https://bugs.freedesktop.org/show_bug.cgi?id=58253 - - Handle resizing of bitmap fonts, in preparation for a fix to - fontconfig to correctly pass on the user request for scaling. - - Always include subroutine 4 (hint replacement idion) when subsetting - type 1 fonts in order to prevent a crash in cgpdftops on Mac OS/X - - Fix a couple of typos in the cairo-gobject.h header files for - introspection. - - Prevent a mutex deadlock when freeing a scaled-glyph containing a - recording-surface that itself references another scaled-glyph. - https://bugs.freedesktop.org/show_bug.cgi?id=54950 - - Make scaled-font cache actually thread-safe and prevent - use-after-frees. - - Restore support for older versions of XRender. A couple of typos and a - few forgotten chunks prevented the xlib compositor from running - correctly with XRender < 0.10. Note that there are still a few - regressions remaining. - - -Release 1.12.8 (2012-11-24 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -Another couple of weeks and a few more bugs have been found and fixed, -it is time to push the next point release. Many thanks to everyone who -reported their issues and helped us track down the bugs and helped -testing the fixes. - -Bug fixes ---------- - - Expand the sanity checking for broken combinations of XSendEvent and - ShmCompletionEvent. - - Notice that "The X.Org Foundation" sometimes also identifies itself - as "The Xorg Foundation". - - Handle various ages of libXext and its Shm headers. - - Fix the invalid clipping of the source drawable when using SHM - transport to upload images. - https://bugs.freedesktop.org/show_bug.cgi?id=56547 - - Handle all Type1 postscript operators for better font compatibility. - https://bugs.freedesktop.org/show_bug.cgi?id=56265 - - Fix a couple of memory leaks in Type1 font subsetting - https://bugs.freedesktop.org/show_bug.cgi?id=56566 - - Tighten the evaluation of the start/stop pen vertices, and catch a few - instances where we would use a fan instead of a bevel. - https://bugs.freedesktop.org/show_bug.cgi?id=56432 - - Fix assumption that geometric clipping always succeeds with the - span-compositor. - https://bugs.freedesktop.org/show_bug.cgi?id=56574 - - Fix call to spline intersection when evaluating whether a stoke is - visible. - - Remember to copy inferior sources when using SHM to readback the - surface for use as a source. - -Release 1.12.6 (2012-10-22 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -Thanks to everyone who download cairo-1.12.4 and gave us their feedback. -It truly was invaluable and has helped us to fix many portability issues -that crept in with some of the new features. This release aims to fix -those stability issues and run on a wider range of systems. - -Bug fixes ---------- - - Fix the recording surface to actually snapshot the source and so fix - PDF drawing. - - Calling XSendEvent with an XShmCompletionEvent is incompatabile with - older Xorg servers. - - Reorder CloseDisplay chain so that XShm is not reinstantiated after - shutdown, causing a potential crash if the Display was immediately - recreated using the same memory address. - - Make sure that the Xserver has attached to the SHM segment before - deleting it from the global namespace on systems that do not support - deferred deletion. - - Type1 subsetting support for PDF (and PS) was once again improved to - work with a larger number of PDF readers. - - GLESv2 build fixes and improved support for embedded GPUs. - - Tweak the invisible pen detection for applications that are currently - using too large values for geometric tolerance. - - A build fix for older freetype libraries. - - -Release 1.12.4 (2012-10-05 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -More bugs, and more importantly, more fixes. On the cairo-gl side, we -have refinements to the MSAA compositor which enables hardware -acceleration of comparatively low-quality antialiasing - which is useful -in animations and on very high density screens. For cairo-xlib, we have -finally enabled SHM transport for image transfers to and from the X -server. A long standing required feature, SHM transport offers a notable -reduction in rendering latency by reducing the number of copies -required to upload image data - given hardware and driver support, -cairo-xlib can now perform zero copy uploads onto the GPU. And as usual -Adrian Johnson has been very busy fixing many different corner cases in -cairo-pdf, impoving opacity groups and font subsetting. Last, but not -least, for cairo-image Søren Sandmann Pedersen added support for -rendering glyphs to pixman and using that from within cairo. The new -glyph rendering facility reduces the overhead for setting up the -compositing operation, improving glyph thoughput for the image backend -by a factor of about 4. And before he did so, he also fixed up a few -bugs in the existing glyph rendering code. So many thanks to Andrea -Canciani, Adrian Johnson, Chuanbo Weng, Dongyeon Kim, Henry Song, Martin -Robinson, Søren Sandmann Pedersen and Uli Schlachter for their -contributions, finding and fixing bugs. - -Bug fixes ---------- - - Interior boxes were being dropped when amalgamating regions during - tesselation. - https://bugs.freedesktop.org/show_bug.cgi?id=49446 - - Allow building without gtk-doc installed - - Invalid edge generation whilst reducing complex polygons. - https://bugs.freedesktop.org/show_bug.cgi?id=50852 - - Stroking around tight cusps - - Use locale correct formats for reading font subsetting and valid - buffers. - https://bugs.freedesktop.org/show_bug.cgi?id=51443 - - Ensure that the type1 subset includes all the glyph encodings - https://bugs.freedesktop.org/show_bug.cgi?id=53040 - - Upload the whole source for a repeating pattern. - https://bugs.freedesktop.org/show_bug.cgi?id=51910 - - Fix damage tracking to handle continuation chunks corectly and so - prevent crashes on win32. - https://bugs.freedesktop.org/show_bug.cgi?id=53384 - - Avoid emitting miter joins for degenerate line segments - https://bugzilla.mozilla.org/show_bug.cgi?id=407107 - - Convert the relative path semgents into the backend coordinates - and then back again to user coordinates (cairo_copy_path, - cairo_append_path) - https://bugs.freedesktop.org/show_bug.cgi?id=54732 - - Fix extents computations for a degenerate path consisting only of a - move-to - https://bugs.freedesktop.org/show_bug.cgi?id=54549 - - Prevent crashing on a degenerate project edge after polygon - intersection - https://bugs.freedesktop.org/show_bug.cgi?id=54822 - - - -Release 1.12.2 (2012-04-29 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -After such a long gestation period for the release of Cairo 1.12, we -inevitably accumulated a few bugs that were flushed out by broadening the -test base. Thanks to everybody who tried the release, apologies to any one -unfortunate enough to encounter a bug and many thanks for reporting it. As -a result Adrian Johnson, Alexandros Frantzis, Andrea Canciani, Kalev -Lember, Maarten Bosman, Marcus Meissner, Nis Martensen and Uli Schlachter -have squashed many more bugs and improved the documentation. I would -strongly recommend everyone to upgrade to cairo-1.12.2. --Chris - -Bug fixes ---------- - - Allow applications to create 0x0 xlib surfaces, such as used by LibreOffice. - https://bugs.freedesktop.org/show_bug.cgi?id=49118 - - Trim composite extents for SOURCE/CLEAR operators to the mask. - - Use fallback fonts in PDF for unhandled computed glyph widths - https://bugs.freedesktop.org/show_bug.cgi?id=48349 - - Handle snapshots of recording surfaces for analysing pattern extents. - Fixes a regression of reporting the PDF bounding box as being the page size. - - Fix allocation size for PDF pattern ids. - Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=49089 - - Fix emission of rectilinear dashed segments, with and without scaling, and - application of degenerate line joins. - - Clamp unbounded fixup polygons to the clip extents. - - Prevent infinite loop due to rounding errors whilst incrementing along dashes. - - Prevent overflow for inline a8 span filling. - - Miscellaneous build fixes for Cygwin on Windows and Solaris. - -Release 1.12.0 (2012-03-23 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -It's taken over 18 months, but the wait is finally over. A new cairo release! -We are pleased to annouce a new stable release of Cairo that brings many -new features and performance improvements, all whilst maintaining -compatibility with cairo-1.0 and all releases since. We recommend anyone -using a previous release of Cairo to upgrade to 1.12.0. - -The major feature of this release is the introduction of a new procedural -pattern; the mesh gradient. This, albeit complex, gradient is constructed -from a set of cubic Bezier patches and is a superset of all other gradient -surfaces which allows for the construction of incredibily detailed patterns. -In PDF parlance, the mesh gradient corresponds with type 7 patterns. Many -thanks to Andrea Canciani for bringing this to Cairo, and for his work on -making gradient handling robust. - -Not content with just adding another procedural pattern, Cairo 1.12 also -adds new API to create a callback pattern, -cairo_pattern_create_raster_source, that allows the application to -provide the pixel data for the region of interest at the time of -rendering. This can be used for instance, by an application to decode -compressed images on demand and to keep a cache of those decompressed -images, independently of Cairo. When combined with the recording -surface, it should form a useful basis for a deferred renderer. - -With the release of cairo-1.12, we also introduce a new supported -backend for interoperating with X using XCB. Uli Schlachter, also -maintainer of awesome and contributor to libxcb, has volunteered to -maintain cairo-xcb for us. Thanks Uli! - -For cairo-1.12, we have also added some common API to address any -surface as an image and so allow direct modification of the raster data. -Previously, only the Quartz and Win32 backends supported a very narrow -interface to allow for efficient pixel upload. Now with -cairo_surface_create_similar_image, cairo_surface_map_to_image, and -cairo_surface_unmap_image, Cairo exports a consistent method for -treating those surfaces as an image and so allow modification inplace. -These are the same routines used internally, and should support -efficient transfer or direct mapping of the target surfaces as -applicable. - -Another focus over the past year has been to address many performance -issues, without sacrificing the composition model. To accomplish the -goal, once again the rasterisation pipeline was overhauled and made -explicit, giving the backends the freedom to implement their own -specific pipeline whilst also providing a library of common routines -from which to build the pipeline. For instance, this allows the image -backend and the gl backend to composite scan line primitives inplace, -and to then implement custom fallbacks to catch the corner cases that do -not map onto their fastest paths. Similarly, this allows for the Xlib -backend to implement trapezoidation without compromising the other -backends, yet still allow for the pipeline to be used elsewhere for -testing and fallbacks. Clipping was once again overhauled, so that the -common cases for the raster pipelines could be captured and processed -with fast paths with the emphasis on performing geometric clipping to -reduce the frequency of using multi-pass clipmasks. Stroking was made -faster, both by providing specialised fast-paths for simple, yet frequent, -cases (such as stroking around a rectangle) and by reducing the number -of edges generated by the general stroker. - -As part of the focus on performance, Cairo 1.12 introduces some -antialias hints (NONE, FAST, GOOD, BEST) that are interpolated by the -rasterisers to fine tune their performance versus quality. Cairo 1.12 -also introduces a new observation architecture, -cairo_surface_observer_t, which can be used to analyse the amount of -time consumed by drawing commands and help identify inefficiencies in -both Cairo and the application. - -Last, but by no means least, the OpenGL backend has seen significant -work including the port to GLESv2 and the exploitation of advanced -hardware features. Interesting times. - -As always, I would like to thank everyone who contributed to Cairo, -not only through writing code, but also submitting documentation, bug -reports, suggestions and generally having fun with Cairo! In particular -though this release could not have happened without the efforts of -Adrian Johnson, Alexandros Frantiz, Andrea Canicani, Martin Robinson, -Nis Martensen, and Uli Schlachter. Thanks. --Chris - -Snapshot 1.11.4 (2012-13-12) -============================ -The cairo community is pleased to finally announce the long aniticpated -release candidate for 1.12, 1.11.4, of the cairo graphics library. This -is the first major update to cairo in over a year and brings a large -number of new features; undoubtably a few bugs as well. - -While many people have contributed and have helped to test the release, -providing feedback on 1.10 and suggesting improvements, this release -is the result of a few persevering souls who deserve recognition for their -outstanding contributions: Andrea Canciani (all round bug fixing, -performance tuning and master of the gradients), Adrian Johnson (PDF -supremo) and Uli Schlachter (who stepped forward as maintainer for the -XCB backend). - -Major additions since 1.11.2: - - * cairo_surface_map_to_image API for pixel level access to any surface - - * New antialias hints to control the trade-off between speed and quality - - * A callback pattern, cairo_pattern_create_raster_source, for lazy - decoding of image data. - - * cairo_surface_observer_t, a new type of surface to gather performance - statistics - - * XCB as a supported backend - - * A rewritten compositor pipeline for performance improvements for, but not - limited to, the xlib and image backends. - From ION and PineView through to SandyBridge, every machine I have shows - across the board performance improvement on the cairo-traces: - - i5-2520m gnome-system-monitor: 5.97x speedup - pnv gnome-system-monitor: 4.86x speedup - i5-2520m firefox-asteroids: 4.66x speedup - pnv firefox-asteroids: 4.43x speedup - image firefox-canvas: 3.82x speedup - i5-2520m firefox-canvas-alpha: 3.49x speedup - image firefox-asteroids: 2.87x speedup - pnv firefox-talos-svg: 2.83x speedup - ion grads-heat-map: 2.75x speedup - pnv firefox-canvas-alpha: 2.66x speedup - image gnome-system-monitor: 2.66x speedup - image swfdec-giant-steps: 2.46x speedup - image firefox-canvas-alpha: 2.14x speedup - i5-2520m firefox-talos-svg: 2.03x speedup - image grads-heat-map: 2.02x speedup - ion gnome-system-monitor: 2.00x speedup - pnv firefox-particles: 1.99x speedup - i5-2520m grads-heat-map: 1.96x speedup - pnv firefox-canvas: 1.92x speedup - ion firefox-particles: 1.80x speedup - image poppler-reseau: 1.77x speedup - pnv xfce4-terminal-a1: 1.72x speedup - image firefox-talos-svg: 1.65x speedup - pnv grads-heat-map: 1.63x speedup - i5-2520m firefox-canvas: 1.63x speedup - pnv swfdec-youtube: 1.62x speedup - image ocitysmap: 1.59x speedup - i5-2520m firefox-fishbowl: 1.56x speedup - i5-2520m poppler-reseau: 1.50x speedup - i5-2520m evolution: 1.50x speedup - i5-2520m midori-zoomed: 1.43x speedup - pnv firefox-planet-gnome: 1.42x speedup - i5-2520m firefox-talos-gfx: 1.41x speedup - i5-2520m gvim: 1.41x speedup - pnv ocitysmap: 1.37x speedup - image poppler: 1.31x speedup - ion firefox-canvas-alpha: 1.35x speedup - ion firefox-talos-svg: 1.34x speedup - i5-2520m ocitysmap: 1.32x speedup - pnv poppler-reseau: 1.31x speedup - i5-2520m firefox-planet-gnome: 1.31x speedup - pnv firefox-fishbowl: 1.30x speedup - pnv evolution: 1.28x speedup - image gvim: 1.27x speedup - i5-2520m swfdec-youtube: 1.25x speedup - pnv gnome-terminal-vim: 1.27x speedup - pnv gvim: 1.25x speedup - image firefox-planet-gnome: 1.25x speedup - image swfdec-youtube: 1.25x speedup - ... - -And a plethora of minor improvements everywhere! --Chris - -Snapshot 1.11.2 (2011-01-23) -=========================== - -In this first snapshot along the way to cairo-1.12.0, we are very excited -to announce the introduction of Bezier surface gradients, known as type -6/7 gradients in PS/PDF parlance. This is the culmination of much work by -the dynamic duo: Adrian Johnson and Andrea Canciani. Thanks guys! - -Also, I want to warmly welcome Uli Schlachter who recently joined the -Cairo community on a mission. That mission is to make cairo-xcb a -supported backend for 1.12. And for this snapshot he has made great -strides in fixing all the bugs I had left behind. Thanks Uli! - -And we have also seen a new contributor, Alexandros Frantzis, who has -begun bringing up cairo-gl for GLESv2 devices. Thanks Alex! - -And lastly, I must also thank Adrian and Andrea for the vast numbers of -bugs that they have tackled between them, fixing all those little corner -cases that lie hidden until too late. - -API additions: - -The ability to construct piece-wise Bezier surface gradients: - - cairo_pattern_create_mesh - - constructs a pattern of type CAIRO_PATTERN_TYPE_MESH using - - cairo_pattern_mesh_begin_patch - cairo_pattern_mesh_end_patch - cairo_pattern_mesh_curve_to - cairo_pattern_mesh_line_to - cairo_pattern_mesh_move_to - cairo_pattern_mesh_set_control_point - cairo_pattern_mesh_set_corner_color_rgb - cairo_pattern_mesh_set_corner_color_rgba - cairo_pattern_mesh_get_patch_count - cairo_pattern_mesh_get_path - cairo_pattern_mesh_get_corner_color_rgba - cairo_pattern_mesh_get_control_point - -The introduction of a unique ID accessible via the mime data type: - CAIRO_MIME_TYPE_UNIQUE_ID - - - - - -Release 1.10.2 (2010-12-25 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -The cairo community is pleased to announce the 1.10.2 release of the -cairo graphics library. This is the first update to cairo's stable 1.10 -series and contains a large number of bug fixes. - -While many people have contributed and have help to test the release, -2 people deserve special recognition for their efforts in tracking down -and fixing bugs, Andrea Canciani and Adrian Johnson. Thanks to their -tremendous efforts, and of all cairo contributors, it is much -appreciated. - -We recommend everyone upgrade to cairo 1.10.2 and hope that everyone -will continue to have lots of fun with cairo! - --Chris - -Bug fixes ---------- - - Fix embedding of grayscale jpegs in PS. - https://bugs.freedesktop.org/show_bug.cgi?id=31632 - - Fix the reported path of extents containing a curve. - - Fix the compositing of unaligned boxes. - - Reset the clipper in PDF upon finish. - - Fix degenerates arcs to become a degenerate line. - - Build support for autoconf 2.67 - - Fix painting of transformed patterns in PS - - Fix the EPS bounding box for PS - https://bugs.freedesktop.org/show_bug.cgi?id=24688 - - Fix the missing content for EPS - https://bugs.freedesktop.org/show_bug.cgi?id=24688 - - Fix regression upon changing page size in PS/PDF - https://bugs.freedesktop.org/show_bug.cgi?id=24691 - - Only use ActualText with PDF-1.5 documents - - Fix the bbox for type1 fallbacks. - - Reset the color after ending the context in PDF - https://bugs.freedesktop.org/show_bug.cgi?id=31140 - - Fix the advance of subsetted type1 fonts - https://bugs.freedesktop.org/show_bug.cgi?id=31062 - - Fix handling of EXTEND_NONE gradients for PDF - - Restrict in-place optimisation for a8 image masks with SOURCE - - -Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>) -=================================================================== -The cairo community is astounded (and flabbergast) to finally announce -the 1.10.0 release of the cairo graphics library. This is a major update -to cairo, with new features and enhanced functionality which maintains -compatibility for applications written using any previous major cairo -release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using -a previous version of cairo upgrade to cairo 1.10.0. - -One of the more interesting departures for cairo for this release is the -inclusion of a tracing utility, cairo-trace. cairo-trace generates a -human-readable, replayable, compact representation of the sequences of -drawing commands made by an application. This can be used to inspecting -applications to understand issues and as a means for profiling -real-world usage of cairo. - -The traces generated by cairo-trace have been collected in - - git://git.cairographics.org/git/cairo-traces - -and have driven the performance tuning of cairo over the last couple of -years. In particular, the image backend is much faster with a new -polygon rasterisation and a complete overhaul of the tessellator. Not -only is this faster, but also eliminates visual artifacts from -self-intersecting strokes. Not only has cairo-trace been driving -performance improvements within cairo, but as a repeatable means of -driving complex graphics it has been used to tune OpenGL, DDX, and -pixman. - -Cairo's API has been extended to better support printing, notably -through the ability to include a single compressed representation of an -image for patterns used throughout a document, leading to dramatic file -size reductions. Also the meta-surface used to record the vector -commands compromising a drawing sequence is now exposed as a -CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a -larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a -subsurface would be as a source glyph in a texture atlas, or as a -restricted subwindow within a canvas. - -Cairo's API has also resurrected the RGB16 format from the past as -the prevalence of 16-bit framebuffers has not diminished and is a -fore-taste of the extended format support we anticipate in the future. -Increasing cairo's utility, we introduce the cairo_region_t for handling -sets of pixel aligned rectangles commonly used in graphics applications. -This is a merger of the GdkRegion and the pixman_region_t, hopefully -providing the utility of the former with the speed of the latter. - -Furthermore cairo has been reworked to interoperate more closely with -various acceleration architectures, gaining the ability to share -those hardware resources through the new cairo_device_t. For instance, -with the new OpenGL backend that supersedes the Glitz backend, hardware -and rendering operations can be shared between a classic OpenGL -application mixing libVA for the hardware assisted video decode with -cairo for high quality overlays all within the same OpenGL canvas. - -Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad -Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson, -Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren -Sandmann Pedersen and many others that have contributed over the last -couple of years to cairo. Thank you all! - -Snapshot 1.9.14 (2010-07-26) -============================ - - A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and - we are being to see the results of the stabilisation effort. Clipping bugs - seems to have been the order of the last couple of weeks, with a couple - reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for - finding those regressions. At this point all that seems to remain to do is - to fix the outstanding regressions in the PDF backend... - -Bugs fixes ----------- - - Clip doesn't work for text on the image backend - https://bugs.freedesktop.org/show_bug.cgi?id=29008 - - Add explicit dependency for cxx - https://bugs.freedesktop.org/show_bug.cgi?id=29114 - - Fix regressions in reporting clip extents - https://bugs.freedesktop.org/show_bug.cgi?id=29120 - https://bugs.freedesktop.org/show_bug.cgi?id=29121 - https://bugs.freedesktop.org/show_bug.cgi?id=29122 - https://bugs.freedesktop.org/show_bug.cgi?id=29124 - https://bugs.freedesktop.org/show_bug.cgi?id=29125 - - -Snapshot 1.9.12 (2010-07-12) -============================ - - A couple of weeks spent fixing those annoying bugs and cleaning up the build - system; the list of outstanding tasks to complete for the stable release is - finally shrinking. The chief bug fixer has been Benjamin Otte who not only - made sure that the public API is consistent and being tested for its - consistency, but also ensured that the documentation was up-to-date and - spent time clarifying cases where even the Cairo developers have come - unstuck in the past. Many thanks, Benjamin. However, he was not alone, - as Andrea Canciani continued his fine work in isolating broken corner cases - and proceeding to fix them, and tidying up the quartz backend. And last, but - definitely not least, M Joonas Pihlaja tried building Cairo across a - perverse range of systems and fixed up all the loose bits of code that came - unravelled. Thanks everybody! - -API Changes ------------ - - cairo_surface_set_mime_data, cairo_surface_get_mime_data: - - The length parameter is now an unsigned long (as opposed to an unsigned - int). The parameter is intended to be an equivalent to a size_t without - requiring POSIX types and be large enough to store the size of the - largest possible allocation. - - cairo_gl_surface_create_for_texture: - - This a new surface constructor for cairo-gl that explicitly enables - render-to-texture for foreign, i.e. application, textures. - - cairo_region_xor, cairo_region_xor_rectangle - - A couple of utility routines add to the region handling interface for - the purpose of replacing existing GdkRegion functionality. - -Bugs fixes ----------- - - https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622 - - Inkscape was caught in the act of attempting to modify a finished surface. - Unfortunately, we had the ordering of our guards and assertions wrong and - so an ordinary application error was triggering an assert in Cairo. This - lead Benjamin to add a test case to ensure that the entire public API - could handle erroneous input and then proceeded to fix a whole slew of - uncovered bugs. - - - https://bugs.freedesktop.org/show_bug.cgi?id=28888 - - A regression introduced by the special casing of uploading images to an - xlib surface in-place which was ignoring the translation applied to the - image. - - -Snapshot 1.9.10 (2010-06-26) -============================ - - The first "quick" snapshot in the run up to the stable release. The - last snapshot was picked up by the bleeding edge distributions and so the - bug reports have to started to roll in. The most frequent of these are the - introduction of rendering errors by applications that modify a surface - without subsequently calling cairo_surface_mark_dirty(). Make sure the - application developers are aware of increased reliance on strict use of the - Cairo API before 1.10 is released! - - The usual slew of bugs reported and we would like to thank Zoxc for - contributing the WGL interface for cairo-gl, and finding more build - failures on win32. And it just wouldn't be a 1.9 snapshot unless - Benjamin Otte improved the error handling within cairo-gl, as well as - isolating and fixing some more errors in the test suite. The biggest bug of - the snapshot turned out to be a major sign extension issue that had lain - hidden for many years and was suddenly exposed by incorrectly rounding - rectangles when performing non-antialiased rendering. Also to the relief - of many we have included the downstream patch to honour the user's LCD - filtering preferences for subpixel rendering of fonts. The interface - remains private for the time being, whilst the proposed public API is - finalized. - -API changes ------------ - None. - -Snapshot 1.9.8 (2010-06-12) -=========================== - - One major API changes since the last snapshot, and a whole slew of bugs - fixed and inconsistencies eliminated. Far too many bugs fixed to - individually identify. We need to thank Benjamin Otte for his fantastic - work on the cairo-gl backend making it faster and more robust, Andrea - Canciani for finding so many bugs and developing test cases for them, as - well fixing them. And last but not least we must all thank Adrian Johnson for - continuing to eliminate bugs and improving the PostScript and PDF backends. - - This snapshot represents almost 4 months of bug fixing, bringing Cairo to - a point where we consider it almost ready to be a candidate for release. - There are a few known bugs left to be fixed, being tracked in - https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a - whirl and report any regressions. The plan is to release a new snapshot - every other week leading to a 1.10 release with a target date of - 2010-08-16. - -API additions -------------- - CAIRO_FORMAT_RGB16_565 - - 16 bit devices still remain popular, and so with great demand, - CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create - and use 16 bit images as sources and render targets. - - cairo_surface_create_for_rectangle() - - It is common practice to cut an image up into many smaller pieces and use - each of those as a source - a technique called texture atlasing. - cairo_surface_create_for_rectangle() extends Cairo to directly support use - of these subregions of another cairo_surface_t both as a source and as a - render target. - - cairo_region_create() - cairo_region_create_rectangle() - cairo_region_create_rectangles() - cairo_region_copy() - cairo_region_reference() - cairo_region_destroy() - cairo_region_equal() - cairo_region_status() - cairo_region_get_extents() - cairo_region_num_rectangles() - cairo_region_get_rectangle() - cairo_region_is_empty() - cairo_region_contains_rectangle() - cairo_region_contains_point() - cairo_region_translate() - cairo_region_subtract() - cairo_region_subtract_rectangle() - cairo_region_intersect() - cairo_region_intersect_rectangle() - cairo_region_union() - cairo_region_union_rectangle() - - The Cairo region API was actually added a couple of snapshots ago, but we - forgot to mention it at the time. A simple API for the handling of - rectangular pixel-aligned regions by Soeren Sandmann. - - -Backend-specific improvements ------------------------------ -cairo-gl - - Benjamin Otte made more than 200 commits in which he refactored the cairo-gl - backend, reducing a lot of code duplication and enabled him to begin working - on improving performance by reducing state changes and associated overhead. - -cairo-xlib - - Access to the underlying connection to the Display is now thread-safe - enabling cairo-xlib to be used in a multi-threaded application without fear - of random corruption. Thanks Benjamin Otte! - - cairo-xlib will now attempt to use PolyModeImprecise when compositing - trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which - should allow hardware drivers more scope for accelerating the operation at - the cost of potentially incurring minute rendering errors. The mode can be - forced back to PolyModePrecise by setting the antialias parameter to - CAIRO_ANTIALIAS_SUBPIXEL. - -cairo-svg - - A notable improvement was contributed by Alexander Shulgin to enable SVG to - reference external image through the use an extended MIME data type. - -Snapshot 1.9.6 (2010-02-19) -=========================== -API additions -------------- - Add cairo_device_t - - The device is a generic method for accessing the underlying interface - with the native graphics subsystem, typically the X connection or - perhaps the GL context. By exposing a cairo_device_t on a surface and - its various methods we enable finer control over interoperability with - external interactions of the device by applications. The use case in - mind is, for example, a multi-threaded gstreamer which needs to serialise - its own direct access to the device along with Cairo's across many - threads. - - Secondly, the cairo_device_t is a unifying API for the mismash of - backend specific methods for controlling creation of surfaces with - explicit devices and a convenient hook for debugging and introspection. - - The principal components of the API are the memory management of: - - cairo_device_reference(), - cairo_device_finish() and - cairo_device_destroy(); - - along with a pair of routines for serialising interaction: - - cairo_device_acquire() and - cairo_device_release() - - and a method to flush any outstanding accesses: - - cairo_device_flush(). - - The device for a particular surface may be retrieved using: - - cairo_surface_get_device(). - - The device returned is owned by the surface. - -API changes (to API new in the cairo 1.9.x series) --------------------------------------------------- - cairo_recording_surface_create() - cairo_recording_surface_ink_extents() - - These are the replacement names for the functions previously named - cairo_meta_surface_create and cairo_meta_surface_ink_extents. - - cairo_surface_set_mime_data - - This interface is now changed such that the MIME data will be - detached if the surface is modified at all. This guarantees that - the MIME data will not become out of synch due to surface - modifications, and also means that for the MIME data to be useful, - it must be set after all modifications to the surface are - complete. - -API removal (of experiment API) -------------------------------- - The cairo-glitz backend is removed entirely, (in favor of the new - cairo-gl backend). See below for more on cairo-gl. - -Generic fixes -------------- - - Many improvements for drawing of dashed strokes - - Fix incorrect handling of negative offset - Faster computation of first dash (avoids near-infinite looping) - Approximate extremely fine dash patterns with appropriate alpha value - - Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle) - -Backend-specific improvements ------------------------------ -cairo-drm - - This is a new, direct-rendering backend that supports Intel graphics - chipsets in the i915 and i965 families. It's still experimental and - will likely remain that way for a while. It's already got extremely - good performance on the hardware it supports, so if nothing else - provides a working proof and performance target for the cairo-gl - work for Intel graphics. - -cairo-gl - - Start using GLSL to accelerate many operations. Many thanks to Eric - Anholt and T. Zachary Laine for this work. For the first time, we - have what looks like what will be a very compelling OpenGL-based - backend for cairo (in terms of both quality and performance). - - See this writeup from Eric for more details on recent progress of - cairo-gl (which he presented at FOSDEM 2010): - - http://anholt.livejournal.com/42146.html - -cairo-image - - The image backend is made dramatically faster (3-5 times faster for - benchmarks consisting primarily of glyph rendering). - -cairo-quartz fixes: - - Many fixes from Robert O'Callahan and Andrea Canciani including: - - Fixed gradient pattern painting - Improved A8 image handling - Fixes for "unbounded" and other compositing operators - -cairo-pdf fixes: - - Improvements to embedding of JPEG and JPEG2000 data. - -cairo-ps fixes: - - Fix printing of rotated user fonts. - -Snapshot 1.9.4 (2009-10-15) -=========================== -API additions: - - cairo_meta_surface_create() - cairo_meta_surface_ink_extents() - - Finally exporting the internal meta-surface so that applications - have a method to record and replay a sequence of drawing commands. - - cairo_in_clip() - - Determines whether a given point is inside the current clip. - ??? Should this be called cairo_in_paint() instead? in-clip is the test - that is performed, but in-paint would be similar to in-fill and in-stroke. - -New utilities: - - cairo-test-trace - - A companion to cairo-perf-trace, this utility replays a trace against - multiple targets in parallel and looks for differences in the output, - and then records any drawing commands that cause a failure. - Future plans: - Further minimisation of the fail trace using "delta debugging". - More control over test/reference targets. - -Backend improvements: - - xlib - - Server-side gradients. The theory is that we can offload computation - of gradients to the GPU and avoid pushing large images over the - connection. Even if the driver has to fallback and use pixman to render - a temporary source, it should be able to do so in a more efficient manner - than Cairo itself. However, cairo-perf suggests otherwise: - - On tiny, Celeron/i915: - - before: firefox-20090601 211.585 - after: firefox-20090601 270.939 - - and on tiger, CoreDuo/nvidia: - - before: firefox-20090601 70.143 - after: firefox-20090601 87.326 - - In particular, looking at tiny: - - xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown - █▋ - xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown - █▋ - - -New experimental backends: - - QT - - OpenVG - The initial work was done by Øyvind Kolås, and made ready for - inclusion by Pierre Tardy. - - OpenGL - An advanced OpenGL compositor. The aim is to write a integrate - directed rendering using OpenGL at a high-level into Cairo. In - contrast to the previous attempt using Glitz which tried to - implement the RENDER protocol on top of OpenGL, using the - high-level interface should permit greater flexibility and - more offloading onto the GPU. - The initial work on the backend was performed by Eric Anholt. - -Long standing bugs fixed: - - Self-intersecting strokes. - - A long standing bug where the coverage from overlapping semi-opaque - strokes (including neighbouring edges) was simply summed in lieu of - a costly global calculation has been fixed (by performing the costly - global calculation!) In order to mitigate the extra cost, the - tessellator has been overhauled and tune, which handles the fallback - for when we are unable to use the new span rasteriser on the stroke - (e.g. when using the current RENDER protocol). The large number of - pixel artefacts that implementing self-intersection elimination - removes is ample justification for the potential performance - regression. If you unfortunately do suffer a substantial performance - regression in your application, please consider obtaining a - cairo-trace and submitting it to us for analysis and inclusion into - our performance suite. - -Special thanks: - - To the AuroraUX team for providing access to one of their OpenSolaris - machines for cairo and pixman development. http://www.auroraux.org/ - -Snapshot 1.9.2 (2009-06-12) -=========================== -API additions: - - cairo_surface_set_mime_data() - cairo_surface_get_mime_data() - - Should this take unsigned int, unsigned long or size_t for the length - parameter? (Some datasets may be >4GiB in size.) - - Associate an alternate, compressed, representation for a surface. - Currently: - "image/jp2" (JPEG2000) is understood by PDF >= 1.5 - "image/jpeg" is understood by PDF,PS,SVG,win32-printing. - "image/png" is understood by SVG. - - cairo_pdf_version_t - cairo_pdf_surface_restrict_to_version() - cairo_pdf_get_versions() - cairo_pdf_version_to_string() - - Similar to restrict to version and level found in SVG and PS, - these limit the features used in the output to comply with the PDF - specification for that version. - - CAIRO_STATUS_INVALID_SIZE - Indicates that the request surface size is not supported by the - backend. This generally indicates that the request is too large. - - CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED - Indicates that a required callback for a user-font was not implemented. - - CAIRO_STATUS_LAST_STATUS - This is a special value to indicate the number of status values enumerated - at compile time. (This may differ to the number known at run-time.) - - The built-in twin font is now called "@cairo:" and supports a limited set - of options like "@cairo:mono". Where are these specified? - - cairo_in_fill() now uses HTML Canvas semantics, all edges are inside. - -New experimental backends: - - CairoScript - -New utility: - - cairo-trace and cairo-perf-trace - - cairo-trace generates a human-readable, replayable, compact(-ish!) - representation of the sequences of drawing commands made by an - application. - - Under the util/cairo-script directory is a library to replay traces. - - perf/cairo-perf-trace replays traces against multiple backends - and makes useful benchmark reports. This is integrated with - 'make perf'. You may collect your own traces or take advantage - of traces collected by the community: - - git://git.cairographics.org/git/cairo-traces - - (Put this into perf/cairo-traces to run these as part of "make perf".) - - There is additional WIP in building a debugging tool for cairo applications - based on CairoScript (currently very preliminary, mostly serves to show - that GtkSourceView is too slow) : - - people.freedesktop.org:~ickle/sphinx - -Test suite overhaul: - - The test suite is undergoing an overhaul, primarily to improve its speed - and utility. (Expect more changes in the near future to improve XFAIL - handling.) - -Optimisations: - polygon rasterisation! Joonas implemented the Tor polygon scan converter, - on typical geometry is about 30% faster for the image backend. - - Bovine Polaroids! For those not in on the joke, this is the long - awaited "copy-on-write snapshot" or "COW snapshot" support. The - user-visible feature is that including the same image multiple times - into a PDF file should result in only a single instance of that - image in the final output. This is unlike previous versions of cairo - which would generate very large PDF files with multiple copies of - the same image. Adrian says that the PDF is not quite working as - well as it should yet, so we hope for further improvements before - cairo 1.10. - -Bug fixes: - - EXTEND_PAD. - - Better handling of large scale-factors on image patterns. - - Emit /Interpolate for PS,PDF images. - - Global glyph cache - cap on the total number of inactive glyphs, - should prove fairer for fonts with larger glyph sets. - - Compilation without fontconfig - - Improved handling of low-bitdepth sources (e.g. copying the contents - of 16-bit xserver windows) - -Regressions: - - cairo_traps_extract_region >10x slower. Fix pending. - -Still to come: - - Region tracking API (ssp) for damage tracking, hit testing etc - mime-surface - - An expiremental OpenGL backend? - - Tweaks to tessellator, allocations of patterns, delayed - initialisation of the xlib backend (reduce the cairo overhead of - render_bench by ~80%). - - -Release 1.8.8 (2009-06-16 Chris Wilson <chris@chris-wilson.co.uk>) -================================================================== -The cairo community is pleased to announce the 1.8.8 release of the -cairo graphics library. This is the fourth update to cairo's stable -1.8 series and contains a small number of bug fixes (in particular a -few corrections to the documentation and a few fixes in the FreeType font -backend). This is being released just over six months after cairo 1.8.6. - -We recommend that everyone using cairo upgrade to 1.8.8. - --Chris - -Build fixes ------------ -There were reports of incompatibilities with the autotools bundled in with -the 1.8.6 tarball. This release has been built with automake-1.10.2 and -autoconf-2.63. - -The configure check for FreeType has been improved: - - typo in check for version of freetype in configure script - https://bugs.freedesktop.org/show_bug.cgi?id=19283 - -Compilation on 64-bit MacOS/X fixes: - - Cannot build cairo_quartz_font_face_create_for_atsu_font_id on 64-bit Mac OS X - https://bugs.freedesktop.org/show_bug.cgi?id=15702 - -Bug fixes ---------- -Uninitialised status return within _cairo_clip_intersect_mask(). This caused -random crashes and general mayhem as an error could be generated causing all -rendering to the context to stop. - -Avoid transforming nearly-degenerate matrices into degenerate matrices: - - Painting stops in this case, using -moz-transform: scale, rotate and video - https://bugzilla.mozilla.org/show_bug.cgi?id=467423 - -A few FreeType font handling bugs were fixed: - - Rendering with PANGO_GRAVITY_EAST leads to different results with image and pdf - https://bugs.freedesktop.org/show_bug.cgi?id=21985 - - Don't call FT_Done_Face() on faces we did not create - - zombie ft_font_face / ft_unscaled_font mutual referencing problems - https://bugs.freedesktop.org/show_bug.cgi?id=21706 - -Ensure win32 font backend sets the return value to -1 (indicating the absent -glyph) if the font index lookup for the unicode character fails. And -similarly fix a bug where a fatal error was raised for an invalid glyph. - - cairo_scaled_font_glyph_extents breaks with invalid glyph id - https://bugs.freedesktop.org/show_bug.cgi?id=20255 - -Various improvements to the documentation, reported by Truc Troung: - - https://bugs.freedesktop.org/show_bug.cgi?id=20095 - https://bugs.freedesktop.org/show_bug.cgi?id=20154 - https://bugs.freedesktop.org/show_bug.cgi?id=20180 - https://bugs.freedesktop.org/show_bug.cgi?id=20183 - https://bugs.freedesktop.org/show_bug.cgi?id=20182 - https://bugs.freedesktop.org/show_bug.cgi?id=20441 - - -Release 1.8.6 (2008-12-13 Chris Wilson <chris@chris-wilson.co.uk>) -================================================================== -The cairo community is pleased to announce the 1.8.6 release of the -cairo graphics library. This is the third update to cairo's stable -1.8 series and contains a small number of bug fixes (in particular a -few fixes for failures of cairo 1.8.4 on Quartz and PDF, and build fixes for -a couple of backends). This is being released just under a month after -cairo 1.8.4. - -We recommend that everyone using cairo upgrade to 1.8.6. - --Chris - -Build fixes ------------ -Fix build of DirectFB backend with debugging enabled: - - Bug in _cairo_directfb_surface_release_source_image function - https://bugs.freedesktop.org/show_bug.cgi?id=18322 - -Fix build on OS/2. - -Bug fixes ---------- -Workaround a mis-compilation of cairo_matrix_invert() that generated invalid -matrices and triggered assertion failures later. The issue was reported by -Peter Hercek. - -Invalid computation of the modulus: - - https://bugzilla.mozilla.org/show_bug.cgi?id=466258 - -Invalid referencing of patterns in the Quartz backend: - - Failed assertion `CAIRO_REFERENCE_COUNT_HAS_REFERENCE - (&pattern->ref_count)' when using cairo quartz backend - https://bugs.freedesktop.org/show_bug.cgi?id=18632 - -Invalid references to glyphs after early culling, causing segmentation faults -in the PDF backend: - - https://lists.cairographics.org/archives/cairo/2008-December/015976.html - -Check for XRender in the XCB backend, or else we may attempt an invalid memory -access: - - XCB backend fails with missing render. - https://bugs.freedesktop.org/show_bug.cgi?id=18588 - -Release 1.8.4 (2008-11-14 Carl Worth <cworth@cworth.org>) -========================================================= -The cairo community is pleased to announce the 1.8.4 release of the -cairo graphics library. This is the second update to cairo's stable -1.8 series and contains a small number of bug fixes, (in particular a -few fixes for build failures of cairo 1.8.2 on various systems). This -is being released just over two weeks after cairo 1.8.2. - -We recommend that everyone using cairo upgrade to 1.8.4. - --Carl - -Build fixes ------------ -Fix build with older XRender that doesn't define RepeatNone: - - Build of xlib backend fails against old XRender (RepeatNone undeclared) - https://bugs.freedesktop.org/show_bug.cgi?id=18385 - -Fix build with bash version <= 3.0: - - doltlibtool broken on linux with bash 3.00.0 - https://bugs.freedesktop.org/show_bug.cgi?id=18363 - -Bug fixes ---------- -Avoid triggering a bug in X.org server 6.9 resulting in a hung machine -requiring a reboot: - - https://bugs.freedesktop.org/show_bug.cgi?id=15628#c2 - -Fix display of user fonts as exercised by proposed support for type3 -fonts in poppler (unsigned promotion fixes): - - Use cairo user-font for Type 3 fonts - https://lists.freedesktop.org/archives/poppler/2008-October/004181.html - -Avoid miscomputing size of fallback images required when rendering -with CLEAR, IN, or SOURCE operator to vector surfaces, (PS, PDF, SVG, -etc.). - -Be more tolerant of broken fonts when subsetting type1 fonts: - - Error handling in cairo_type1_font_subset_get_glyph_names_and_widths - https://lists.cairographics.org/archives/cairo/2008-October/015569.html - -Fix cairo_fill_extents, cairo_stroke_extents, cairo_path_extents, to -correctly allow NULL parameters as documented. - -Fix potential crash on emitting a type3 glyph after having drawn text -paths from the same font, (for example with cairo_text_path). - -Release 1.8.2 (2008-10-29 Carl Worth <cworth@cworth.org>) -========================================================= -The cairo community is pleased to announce the 1.8.2 release of the -cairo graphics library. This is the first update to cairo's stable 1.8 -series and contains a large number of bug fixes. It is being released -just over one month since cairo 1.8.0. - -This release consists primarily of bug fixes, but there is one notable -new feature, (the ability to build cairo without an external font -backend), and there are a few optimizations as well. See below for -details on these changes and the most important bug fixes. - -While many people have contributed to this release, Chris Wilson -deserves particular mention. He has contributed well over twice as -many changes to cairo since 1.8.0 than everyone else combined. We -greatly appreciate the tremendous efforts of Chris and all cairo -contributors. - -We recommend everyone upgrade to cairo 1.8.2 and hope that everyone -will have lots of fun with cairo! - --Carl - -New feature ------------ -It is now possible to build cairo without any font backend, (such as -freetype, win32 or quartz). This is most useful when the application -provides custom font rendering through the user-font API. But in the -case where no external font backend is available, and no user-font is -provided, cairo will render with a failsafe font, (a stroked font -covering visible ASCII character). (Behdad Esfahbod) - -Optimizations -------------- -Dramatically speed up compilation with dolt (removes much of the -libtool overhead) (Behdad Esfahbod with thanks to Josh Triplett). - -Several minor optimizations to tessellator (special-cased comparisons, -faster insert for skiplist, etc.) (Chris Wilson). - -Optimize away fractional translation component when doing -EXTEND_NEAREST filtering, (for better performance). - -General bug fixes ------------------ -Allow cloning sub-regions of similar surfaces to fix this bug -(Chris Wilson): - - Crafted gif file will crash firefox - [XError: 'BadAlloc (insufficient resources for operation)'] - https://bugzilla.mozilla.org/show_bug.cgi?id=424333 - -Fix some matrix confusion to fix this regression (Chris Wilson): - - Translucent star exports in a wrong way to PDF - https://bugs.launchpad.net/inkscape/+bug/234546 - -Fix some long-standing bugs with respect to properly computing the -extents of transformed, filtered surfaces (Owen Taylor, Carl Worth, -and Chris Wilson): - - Bad clipping with EXTEND_NONE - https://bugs.freedesktop.org/show_bug.cgi?id=15349 - - Improve filtering handling in cairo-pattern.c - https://bugs.freedesktop.org/show_bug.cgi?id=15367 - - Many thanks to Chris Wilson for digging out and cleaning up - these fixes. - -Fix compilation on Solaris 10 (Chris Wilson): - - Cairo requires -DREENTRANT (along with -D_POSIX_THREAD_SEMANTICS) - to compile on Solaris 10 with pthreads - https://bugs.freedesktop.org/show_bug.cgi?id=18010 - -Fix very old bug causing dashes to be rendered at the wrong length in -fallback images (Adrian Johnson) - - Dashed strokes too long in fallback images - https://bugs.freedesktop.org/show_bug.cgi?id=9189 - -Fix broken dashing when a dashed path starts outside the clip region -(Chris Wilson). - -Avoid range overflow when computing large patterns (Benjamin Otte and -Chris Wilson). - -Avoid crashing due to an invalid font with an incorrect entry in its -CMAP table (Adrian Johnson). - -Fix bugs in computing maximum size of text requests that can be sent -with the Render extension, (avoiding potential crashes when rendering -large amounts of text) (Behdad Esfahbod and Chris Wilson). - -Fix rendering of operators unbounded by the mask (Chris Wilson). - -Fix compilation on systems without compiler support for a native -64-bit type (Chris Wilson). - -Fix several cases of missing error-status propagation. (Chris Wilson, -doing the work he seems to never tire of). - -Fix several locking issues found with the lockdep valgrind skin (Chris -Wilson). - -Backend-specific bug fixes --------------------------- -xlib: Avoid crash due to attempting XRender calls on pixmaps with -formats not supported by the Render extension (Chris Wilson): - - XRender crashes due to NULL pointer from Cairo on SGI O2 - https://bugs.freedesktop.org/show_bug.cgi?id=11734 - -xlib: Add support for XImages with depth of 4, 20, 24, or 28 bits -(Chris Wilson): - - cairo doesn't support 24 bits per pixel mode on X11 - https://bugs.freedesktop.org/show_bug.cgi?id=9102 - -xlib: Avoid mistakenly considering two surfaces as similar just -because their depths match (while their Render formats do not) (Karl -Tomlinson). - -ps: Fix slight mis-scaling of bitmapped fonts (Adrian Johnson) - -svg: Correctly emit comp-op for paint, mask, and show_glyphs -operations (Emmanuel Pacaud). - -svg: Use finer-grained fallbacks for SVG 1.2 (as PS and PDF backends -have been doing since 1.6.0) (Chris Wilson). - -win32: Fallback to DIB if DDB create fails for -cairo_surface_create_similar (Vladimir Vukicevic). - -win32: Fix compatibility with Windows Mobile (Vladimir Vukicevic). - -win32: Fix static builds to not do __declspec(dllimport) on public -functions. This requires the user to set a CAIRO_WIN32_STATIC_BUILD -environment variable when compiling (Behdad Esfahbod). - -Release 1.8.0 (2008-09-25 Carl Worth <cworth@cworth.org>) -========================================================= -The cairo community is happy (and relieved) to announce the 1.8.0 -release of the cairo graphics library. This is a major update to -cairo, with new features and enhanced functionality which maintains -compatibility for applications written using any previous major cairo -release, (1.6, 1.4, 1.2, or 1.0). We recommend that anybody using a -previous version of cairo upgrade to cairo 1.8.0. - -The dominant theme of this release is improvements to cairo's ability -to handle text. The highlights include a new "user fonts" feature as -well as a new cairo_show_text_glyphs API which allows glyphs to be -embedded in PDF output along with their original text, (for searching, -selection, and copy-and-paste). Another major feature is a revamp of -cairo's build system making it much easier to build cairo on various -platforms. - -See below for more details. - -User fonts ----------- -This new API allows the user of cairo API to provide drawings for -glyphs in a font. A common use for this is implementing fonts in -non-standard formats, like SVG fonts and Flash fonts. This API can -also be used by applications to provide custom glyph shapes for fonts -while still getting access to cairo's glyph caches. See -test/user-font.c and test/user-font-proxy.c for usage examples. This -is based on early work by Kristian Høgsberg. Thanks Kristian! - -This new API consists of the following functions (and corresponding -_get functions): - - cairo_user_font_face_create - - cairo_user_font_face_set_init_func - cairo_user_font_face_set_render_glyph_func - cairo_user_font_face_set_text_to_glyphs_func - cairo_user_font_face_set_unicode_to_glyph_func - -An additional, new API is - - cairo_scaled_font_text_to_glyphs - -We were previously reluctant to provide this function as -text-to-glyphs support in cairo was limited to "toy" font -functionality, not really interesting for real-world text -processing. However, with user fonts landing, this API is needed to -expose full access to how user fonts convert text to glyphs. This is -expected to be used by text toolkits like Pango, as well as "proxy" -user-font implementations. - -cairo_show_text_glyphs ----------------------- -This new API allows the caller of cairo to provide text data -corresponding to glyphs being drawn. The PDF backend implements this -new API so that complex text can be copied out of cairo's PDF output -correctly and reliably, (assuming the user of cairo calls -cairo_show_text_glyphs). The cairo_show_text_glyphs API is definitely -the most daunting API to debut in cairo. It is anticipated that pango -(and similar high-level text libraries) will be the primary users of -this API. In fact, pango 1.22 already uses cairo_show_text_glyphs. -Behdad was the architect and implementor of this effort. Thanks, -Behdad! - -The cairo_show_text_glyphs API includes the following new functions: - - cairo_show_text_glyphs - - cairo_glyph_allocate - cairo_glyph_free - - cairo_text_cluster_allocate - cairo_text_cluster_free - - cairo_surface_has_show_text_glyphs - -Build system revamp -------------------- -The primary goal of the revamp is to make the build system less -fragile, (particularly for non-Linux platforms). For example, now -people building on win32 will no longer need to maintain a -platform-specific list of files to be built. See the new README.win32 -for details. Also, the .so file will now be installed with a different -naming scheme, (for example, 1.7.6 will install with a .10800 -suffix). Many thanks to Behdad and his small army of helpers! - -Assorted API additions ----------------------- -For API completeness, several missing "getter" functions were added: - - cairo_scaled_font_get_scale_matrix - - cairo_surface_get_fallback_resolution - - cairo_toy_font_face_create - cairo_toy_font_face_get_family - cairo_toy_font_face_get_slant - cairo_toy_font_face_get_weight - -The new cairo_toy_font_face functions provide access to functionality -and settings provided by cairo_select_font_face(). Thanks Behdad! - -cairo-ps/cairo-pdf: More efficient output ------------------------------------------ -Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF -backends, as well making them generate much more compact output by -avoiding things like re-emitting the color or linestyle on every -drawing operation. Thanks Adrian! - -cairo-xlib: dithering ---------------------- -Dithering: Cairo now does simple dithering when rendering to legacy X -servers. This is most visible with 8-bit visuals. Thanks Behdad! - -cairo-xlib: Avoid rendering glyphs out of surface bounds --------------------------------------------------------- -This seemingly harmless optimization exposed a bug in OpenOffice.org 3 -versions where OO.o was passing bogus surface extents to cairo, -resulting in no text rendered in OO.o. Please contact your -distribution's OO.o maintainers if you see this bug and point them to -the following URL: - - https://bugs.freedesktop.org/show_bug.cgi?id=16209 - -cairo-xlib: Improved performance with X server without Render -------------------------------------------------------------- -Cairo now performs better on remote X servers that lack the Render -extension by being smarter about using X core protocol facilities -instead of falling back to doing all rendering on the client side. - -cairo-ft: respecting FC_FT_FACE -------------------------------- -Previously it was impossible to instruct cairo to do emboldening on a -font face object created from an FT_Face. Cairo now respects and uses -the FC_FT_FACE fontconfig pattern element, so emboldening can be -achieved by using cairo_ft_font_face_create_for_pattern() and a -carefully crafted pattern using FC_FT_FACE and FC_EMBOLDEN. Thanks -Behdad! - -cairo-directfb: backend improvements ------------------------------------- -The directfb backend, though still unsupported, has seen a good deal -of improvements. Thanks Vlad! - -Bug fixing and optimizations ----------------------------- -xlib: Faster bookkeeping (Karl Tomlinson) - https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5 - -PS: Fix gradients with non-constant alpha (Chris Wilson) - -Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod) - https://bugs.freedesktop.org/show_bug.cgi?id=16819 - -Countless other bugs have been fixed and optimizations made, many of -them thanks to Chris Wilson. Thanks Chris and others! - -Note also that the code that had been in cairo 1.7.x calling into -freetype's optional lcd_filter function was removed from cairo before -the 1.8.0 release. We do expect this code to come back in some form in -the future. - -Snapshot 1.7.6 (2008-09-17 Carl Worth <cworth@cworth.org>) -========================================================== -The cairo community is happy to announce the 1.7.6 snapshot of the -cairo graphics library. This is a "release candidate" for the upcoming -1.8.0 release, so we will greatly appreciate any reports of problems -in this release, and no major changes are currently planned before -1.8. - -Notable changes in 1.7.6 ------------------------- -The largest number of changes since 1.7.4 did not change the -implementation of cairo itself, but instead revamped cairo's build -system. The primary goal of the revamp is to make the build system -less fragile, (particularly for non-Linux platforms). For example, now -people building on win32 will no longer need to maintain a -platform-specific list of files to be built. Also, the .so file will -now be installed with a different naming scheme, (for example, 1.7.6 -will install with a .10706 suffix). Much thanks, Behdad! - -And, as usual, Chris Wilson has made another large round of robustness -improvements, (eliminating dead code, fixing propagation of error -status values, test suite improvements, etc. etc.). Thanks as always, -Chris! - -API changes since 1.7.4 ------------------------ -There have been a few changes of API that was new during the 1.7 -series: - -* Remove cairo_font_options_set_lcd_filter - and cairo_font_options_get_lcd_filter - - Motivation: At the Cairo Summit, this API was determined to be too - specific to the freetype font backend to be in the general - API. A similar API with a cairo_ft prefix might be introduced - in the future. Note that cairo will still respect the - corresponding fontconfig settings for these options. - -* Replace cairo_has_show_glyphs - with cairo_surface_has_show_glyphs - - Motivation: This really is a surface-specific interface, and the - convenience function on the cairo_t is not obviously - necessary. An application can easily call: - - cairo_surface_has_show_glyphs (cairo_get_target (cr)); - - as needed. - -* Add cairo_text_cluster_flags_t - to cairo_show_text_glyphs - cairo_scaled_font_text_to_glyphs - cairo_user_scaled_font_text_to_glyphs_func_t - - Motivation: This flag, (and specifically the - CAIRO_TEXT_CLUSTER_FLAG_BACKWARD value), replaces the - cairo_bool_t backward argument in each of the above - interfaces. This leads to more readable user code, and also - allows future extensibility. - -As always, there are no changes to any API from any major cairo -release, (1.0.x, 1.2.x, 1.4.x, 1.6.x). Cairo maintains the same -compatibility promise it always has. - -Bug fixes since 1.7.4 ---------------------- -xlib: Faster bookkeeping (Karl Tomlinson) - https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5 - -PS: Fix gradients with non-constant alpha (Chris Wilson) - -Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod) - https://bugs.freedesktop.org/show_bug.cgi?id=16819 - -Several other minor fixes. - -Snapshot 1.7.4 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>) -=============================================================== -The cairo community is embarrassed to announce availability of the 1.7.4 -snapshot of the cairo graphics library. This is a followup release to the -1.7.2 snapshot to ship a tarball that can actually be built. The only -change since 1.7.4 is including the missing header file -cairo-user-font-private.h in the distribution. - -Snapshot 1.7.2 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>) -=============================================================== -The cairo community is finally ready to announce availability of the 1.7.2 -snapshot of the cairo graphics library. This is embarrassingly the first -snapshot in the 1.7 unstable series of cairo, leading to the eventual release -of cairo 1.8, currently planned for late September. - -This snapshot comes four months after the 1.6.4 release. We have done a -really bad job on getting development snapshots out this cycle, but -hopefully all the API changes for 1.8 are now finished and the remaining -weeks will be spent on bug-fixing. There is more than 400 commits worth -of changes in this snapshot, and those can use some testing. Read on! - -Text, text, and more text! --------------------------- -The dominant theme of this release, and 1.8 in general, is improvements -around cairo text API. Here is a high-level list of changes with text -handling: - -User fonts ----------- -This is new API allowing the user of cairo API to provide drawings for glyphs -in a font. This is most useful in implementing fonts in non-standard formats, -like SVG fonts and Flash fonts, but can also be used by games and other -applications to draw "funky" fonts. See test/user-font.c and -test/user-font-proxy.c for usage examples. This is based on early work by -Kristian Høgsberg. Thanks Kristian! - -show_text_glyphs ----------------- -This new API allows the caller of cairo to mark text glyphs with their -original text. The PDF backend implements this new API and latest Pango -master uses it. The result is (when bugs are fixed) that complex text can be -copied out of pangocairo's PDF output correctly and reliably. There are bugs -to fix though. A few poppler bugs, and some more in cairo and pango. - -To test show_text_glyph, just grab pango master and this cairo snapshot and -print text in gedit. Open in acroread or evince, select all, copy, paste -in gedit and compare. The Arabic text with diacritic marks is particularly -showing bad. Try with pango/pango-view/HELLO.txt if you are brave -enough. The Indic text is showing improvements, but is still coming out -buggy. - -LCD subpixel filtering using FreeType -------------------------------------- -FreeType 2.3.5 added support for various LCD subpixel filtering, and -fontconfig 2.6.0 added support for configuring LCD filter on a font by font -basis. Cairo now relies on FreeType and fontconfig for subpixel filtering. -This work is based on David Turner's original patch to cairo, maintained -and tested by Sylvain Pasche and others. Thanks all! - -Toy font face constructor and getter ------------------------------------- -Mostly for API completion, but also useful for higher level (like Pango) to -hook into what the user has set using cairo_select_font_face(), making that -toy API a bit more useful. - -FreeType: respecting FC_FT_FACE -------------------------------- -Previously it was impossible to instruct cairo to do emboldening on a font -face object created from an FT_Face. Cairo now respects and uses the -FC_FT_FACE fontconfig pattern element, so emboldening can be achieved by -using cairo_ft_font_face_create_for_pattern() and a carefully crafted pattern -using FC_FT_FACE and FC_EMBOLDEN. - - -PS/PDF: More efficient output ------------------------------ -Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF -backends, as well making them generate much more compact output by avoiding -things like re-emitting the color or linestyle on every drawing operation. -Thanks Adrian! - - -Xlib: Dithering ---------------- -Cairo now does simple dithering when rendering to legacy X servers. This is -mostly visible with 8-bit visuals. - -Xlib: Avoid rendering glyphs out of surface bounds --------------------------------------------------- -This seemingly harmless change manifested a bug with OpenOffice.org 3 versions -where OO.o was passing bogus surface extents to cairo, resulting in no text -rendered in OO.o. Please contact your distro's OO.o maintainers if you see -this bug and point them to the following URL: - - https://bugs.freedesktop.org/show_bug.cgi?id=16209 - -Xlib: Improved performance with Xrender-less X servers ------------------------------------------------------- -Cairo now performs better on remote, Xrender-less X servers by being smarter -about using X core protocol facilities instead of falling back to doing all -rendering on the client side. - - -Directfb: backend improvements ------------------------------- -The directfb backend, though still unsupported, has seen a good deal of -improvements. Thanks Vlad! - - -Bug fixing and optimizations ----------------------------- -Countless bugs have been fixed and optimizations made, many of them thanks to -Chris Wilson. Thanks Chris! - - -API additions -------------- - -cairo_show_text_glyphs - - This is a new text rendering API. Being a more advanced version of - cairo_show_glyphs(), it is aimed for use by higher-level text toolkits like - Pango, and enables better text extraction from output generated by backends - like PDF and SVG. The PDF backend already implements it, and the upcoming - Pango release will use it. - - To make that API work, a bunch of other additions were made: - -cairo_glyph_allocate -cairo_glyph_free -cairo_text_cluster_t -cairo_text_cluster_allocate -cairo_text_cluster_free -cairo_surface_has_show_text_glyphs - - -cairo_user_font_face_create - - This is the "user" font face constructor, accompanied by a variety of method - signatures, getters, and setters for a callback-based font backend: - -CAIRO_FONT_TYPE_USER -cairo_user_scaled_font_init_func_t -cairo_user_scaled_font_render_glyph_func_t -cairo_user_scaled_font_text_to_glyphs_func_t -cairo_user_scaled_font_unicode_to_glyph_func_t -cairo_user_font_face_set_init_func -cairo_user_font_face_set_render_glyph_func -cairo_user_font_face_set_text_to_glyphs_func -cairo_user_font_face_set_unicode_to_glyph_func -cairo_user_font_face_get_init_func -cairo_user_font_face_get_render_glyph_func -cairo_user_font_face_get_text_to_glyphs_func -cairo_user_font_face_get_unicode_to_glyph_func - - -cairo_scaled_font_text_to_glyphs - - We were previously reluctant to provide this function as text-to-glyphs - support in cairo was limited to "toy" font functionality, not really - interesting for real-world text processing. However, with user-fonts - landing, this API is needed to expose full access to how user-fonts - convert text to glyphs. This is expected to be used by text toolkits like - Pango, as well as "proxy" user-font implementations. - - -cairo_lcd_filter_t -cairo_font_options_set_lcd_filter -cairo_font_options_get_lcd_filter - - These add the possibility to choose between various available LCD subpixel - filters. The available filter values are modelled after what FreeType - provides. - - -cairo_toy_font_face_create -cairo_toy_font_face_get_family -cairo_toy_font_face_get_slant -cairo_toy_font_face_get_weight - - These provide access to functionality and settings provided by - cairo_select_font_face(). - - -cairo_scaled_font_get_scale_matrix -cairo_surface_get_fallback_resolution - - For API completeness. - - -Various new values for cairo_status_t enum - - -Known issues: - -- Type3 fonts generated by cairo's PDF backend may show up in poppler/Evince - in a different color than expected. This is fixed in poppler master branch. - This mostly affects cairo user fonts. The test case test/user-font.c - demonstrates this. - -- User fonts using other fonts in their rendering are currently embedded in - PDF as fallback bitmap glyphs. This will be (hopefully) fixed before 1.8. - The test case test/user-font-proxy.c demonstrates this. - - -Release 1.6.4 (2008-04-11 Carl Worth <cworth@cworth.org>) -========================================================= -The cairo community is wildly embarrassed to announce the 1.6.4 -release of the cairo graphics library. This release reverts the xlib -locking change introduced in 1.6.4, (and the application crashes that -it caused). The community would be glad to sack its current release -manager and is accepting applications for someone who could do the job -with more discipline. - -Revert 'add missing locking in cairo-xlib' ------------------------------------------- -This change was introduced in cairo 1.6.2, but also introduced a bug -which causes many cairo-xlib applications to crash, (with a -segmentation fault inside of XSetClipMask). Instead of attempting -another fix for the broken fix, the change in 1.6.2 has been -reverted. The original bug which the change was addressing has been -present since at least cairo 1.4, so it is not expected that leaving -this bug unfixed will cause any new problems for applications moving -from cairo 1.4 to cairo 1.6. - -At this point, the code of cairo 1.6.4 differs from cairo 1.6.0 only -in the fix for the PostScript-printer crashes. - -Tweak build to avoid linking with g++ -------------------------------------- -Cairo 1.6.4 avoids a quirk in automake that was causing the cairo -library to be linked with g++ and linked against libstdc++ even when -only C source files were compiled for the library. - -Release 1.6.2 (2008-04-11 Carl Worth <cworth@cworth.org>) -========================================================= -The cairo community is pleased (but somewhat sheepish) to announce the -1.6.2 release of the cairo graphics library. This is an update to -yesterday's 1.6.0 release with an important fix to prevent cairo's -PostScript output from crashing some printers. This release also -includes a locking fix for cairo's xlib backend to improve thread -safety. There are no changes beyond these two fixes. - -Fix for PostScript printer crash --------------------------------- -Adrian Johnson discovered that cairo 1.6.0 was being a bit hard on -PostScript printers, by changing the font matrix very frequently. This -causes some PostScript interpreters to allocate new font objects every -few glyphs, eventually exhausting available resources. The fix -involves leaving translational components of the font matrix as zero, -so that the PostScript interpreter sees an identical font matrix -repeatedly, and can more easily share internal font object resources. - -This fix has been tested to resolve the bugs posted here, (for both -Xerox and Dell printers): - - Printing some PDFs from evince is crashing our Xerox printer - https://bugs.freedesktop.org/show_bug.cgi?id=15348 - - Cairo-generated postscript blocks Dell 5100cn - https://bugs.freedesktop.org/show_bug.cgi?id=15445 - -Add missing locking in cairo-xlib ---------------------------------- -Chris Wilson noticed that cairo 1.6.0 was manipulating an internal -cache of GC object within cairo's Xlib backend without proper -locking. The missing locking could cause failures for multi-threaded -applications. He fixed this in 1.6.2 by adding the missing locks. - -Release 1.6.0 (2008-04-10 Carl Worth <cworth@cworth.org>) -========================================================= -The cairo community is quite pleased to announce the 1.6.0 release of -the cairo graphics library. This is a major update to cairo, with new -features and enhanced functionality which maintains compatibility for -applications written using cairo 1.4, 1.2, or 1.0. We recommend that -anybody using a previous version of cairo upgrade to cairo 1.6.0. - -The most significant new features in this release are dramatically -improved PDF and PostScript[*] output, support for arbitrary X server -visuals (including PseudoColor), a new Quartz backend, and and a new -"win32 printing" backend. See below for more details on these and -other new features. - -New dependency on external pixman library (Thanks, Søren!) ----------------------------------------------------------- -As of cairo 1.6, cairo now depends on the pixman library, for which -the latest release can be obtained alongside cairo: - - https://cairographics.org/releases/pixman-0.10.0.tar.gz - -This library provides all software rendering for cairo, (the -implementation of the image backend as well as any image fallbacks -required for other backends). This is the same code that was -previously included as part of cairo itself, but is now an external -library so that it can be shared by both cairo and by the X server, -(which is where the code originated). - -Improved PDF, PostScript, and SVG output (Thanks, Adrian!) ----------------------------------------------------------- -Users of the cairo-pdf, cairo-ps, and cairo-svg should see a dramatic -improvement from cairo 1.2/1.4 to 1.6. With this release there are now -almost no operations that will result in unnecessary rasterization in -the PDF and PostScript. Rasterized "image fallbacks" are restricted -only to minimal portions of the document where something is being -drawn with cairo that is beyond the native capabilities of the -document, (this is rare for PDF or SVG, but occurs when blending -translucent objects for PostScript). - -This means that the final output will be of higher quality, and will -also be much smaller, and therefore will print more quickly. The -machinery for doing analysis and minimal fallbacks also benefits the -win32-printing surface described below. - -In addition to doing less rasterization, the PostScript and PDF output -also has several other improvements to make the output more efficient -and more compatible with specifications. - -[*] Note: Just before this release, a bug has been reported that the -PostScript output from cairo can crash some printers, (so far the -following models have been reported as problematic Xerox Workcentre -7228 or 7328 and Dell 5100cn). We will implement a workaround as soon -as we can learn exactly what in cairo's output these printers object -to, (and we could use help from users that have access to misbehaving -printers). This bug is being tracked here: - - Printing some PDFs from evince is crashing our Xerox printer - https://bugs.freedesktop.org/show_bug.cgi?id=15348 - -New support for arbitrary X server visuals (Thanks, Keith and Behdad!) ----------------------------------------------------------------------- -As of cairo 1.6, cairo should now work with an arbitrary TrueColor or -8-bit PseudoColor X server visual. Previous versions of cairo did not -support these X servers and refused to draw anything. We're pleased to -announce that this limitation has been lifted and people stuck with -ancient display systems need no longer be stuck with ancient software -just because of cairo. - -New, supported Quartz backend for Mac OS X (Thanks, Brian and Vladimir!) ------------------------------------------------------------------------- -As of cairo 1.6, the cairo-quartz backend is now marked as "supported" -rather than "experimental" as in previous cairo releases. Its API now -has guarantees of API stability into future cairo releases, and its -output quality is comparable to other backends. There have been -significant improvements to cairo-quartz since 1.4. It now uses many -fewer image fallbacks, (meaning better performance), and has greatly -improved text rendering. - -New, "win32 printing" backend (Thanks, Adrian and Vladimir!) ------------------------------------------------------------- -A new win32-printing surface has been added with an interface very -similar to the original win32 surface, (both accept an HDC -parameter). But this new surface should only be called with a printing -DC, and will result in all drawing commands being stored into a -meta-surface and emitted after each page is complete. This allows -cairo to analyze the contents, (as it does with PDF, PostScript, and -SVG backends), and to do minimal image-based fallbacks as -necessary. The analysis keeps things as efficient as possible, while -the presence of fallbacks, (when necessary), ensure the consistent, -high-quality output expected from cairo. - -Robustness fixes (Thanks, Chris!) ---------------------------------- -There has been a tremendous number of improvements to cairo's -robustness. Areas that have been improved include: - - * Proper reporting of errors - - * Responding correctly to invalid input - - * Avoiding integer overflows - - * Avoiding memory leaks on error-recovery paths - - * Making reference counting thread safe - - * Exhaustive testing of memory allocation points - -Other fixes (Thanks, everybody!) --------------------------------- -Cairo's internal fixed-point representation has been changed from -16.16 to 24.8. This has a direct impact on applications as it allows -much larger objects to be drawn before internal limits in cairo make -the drawing not work. - -The CAIRO_EXTEND_PAD mode is now fully supported by surface -patterns. This mode allows applications to use cairo_rectangle and -cairo_fill to draw scaled images with high-quality bilinear filtering -for the internal of the image, but without any objectionably blurry -edges, (as would happen with the default EXTEND_NONE and cairo_paint). - -Rendering with CAIRO_ANTIALIAS_NONE has been fixed to be more -predictable, (previously image rendering and geometry rendering would -be slightly misaligned with respect to each other). - -The reference manual at https://cairographics.org/manual now documents -100% of the functions and types in cairo's public API. - -API additions -------------- -Several small features have been added to cairo with new API functions: - -cairo_format_stride_for_width - - Must be called to compute a properly aligned stride value before - calling cairo_image_surface_create_for_data. - -cairo_has_current_point - - Allows querying if there is a current point defined for the - current path. - -cairo_path_extents - - Allows querying for path extents, (independent of any fill or - stroke parameters). - -cairo_surface_copy_page -cairo_surface_show_page - - Allow beginning a new document page without requiring a cairo_t - object. - -cairo_ps_surface_restrict_to_level -cairo_ps_get_levels -cairo_ps_level_to_string -cairo_ps_surface_set_eps - - Allow controlling the Post PostScript level, (2 or 3), to - target, as well as to generate Encapsulated PostScript (EPS). - -cairo_quartz_font_face_create_for_cgfont - - Create a quartz-specific cairo_font_face_t from a CGFontRef. - -cairo_win32_font_face_create_for_logfontw_hfont - - Create a win32-specific cairo_font_face from a LOGFONTW and an - HFONT together. - -Thanks, Everyone! ------------------ -I've accounted for 32 distinct people with attributed code added to -cairo between 1.4.14 and 1.6.0, (their names are below). That's an -impressive number, but there are certainly dozens more that -contributed with testing, suggestions, clarifying questions, and -encouragement. I'm grateful for the friendships that have developed as -we have worked on cairo together. Thanks to everyone for making this -all so much fun! - -Adrian Johnson, Alp Toker, Antoine Azar, Behdad Esfahbod, -Benjamin Otte, Bernardo Innocenti, Bertram Felgenhauer, -Boying Lu, Brian Ewins, Carl Worth, Chris Heath, Chris Wilson, -Claudio Ciccani, Emmanuel Pacaud, Jeff Muizelaar, Jeremy Huddleston, -Jim Meyering, Jinghua Luo, Jody Goldberg, Jonathan Gramain, -Keith Packard, Ken Herron, Kouhei Sutou, Kristian Høgsberg, -Larry Ewing, Martin Ejdestig, Nis Martensen, Peter Weilbacher, -Richard Hult, Shailendra Jain, Søren Sandmann Pedersen, -Vladimir Vukicevic - -Snapshot 1.5.20 (2008-04-04 Carl Worth <cworth@cworth.org>) -=========================================================== -This is the tenth snapshot in cairo's unstable 1.5 series. It comes -just two days (and only one working day) after the 1.5.18 -snapshot. The quick snapshot is due to two embarrassing bugs (both -affecting cairo-xlib) that had been introduced in the 1.5.18 -snapshot. The fixes for these are described below along with a few -other fixes, (which hopefully aren't introducing new bugs this time). - -cairo-xlib ----------- -Revert fix from 1.5.18 to allow pattern expansion based on the filter -mode. This fix seemed so boring, (the use case it addresses is almost -never used in practice), that it didn't even get mentioned in the -1.5.18 release notes. However, the "fix" happened to break rendering -that is always used resulting in corrupt image rendering in mozilla, -evolution, and probably everything else that uses cairo. - -Fix to avoid BadMatch errors in cairo_surface_create_similar. These -were introduced, (inadvertently, of course), as part of the fix in -1.5.18 for creating similar surfaces without the Render -extension. Again, thanks to mozilla, (and Vladimir Vukicevic in -particular), for noticing our mistake. - -general -------- -Correctly handle an in-error surface in -cairo_surface_write_to_png. Previously this function would cause an -assertion failure if you gave it a finished surface. Now it cleanly -returns a CAIRO_STATUS_SURFACE_FINISHED result instead. - -Avoid potentially infinite wandering through memory inside -_cairo_hull_prev_valid. Thanks to Jonathan Watt for noticing this -problem: - - https://bugzilla.mozilla.org/show_bug.cgi?id=306649#c21 - -cairo-pdf ---------- -Fix generation of "soft" masks made by drawing to a similar surface -and then calling cairo_mask_surface() with it. - -cairo-svg ---------- -Fix for code that uses cairo_mask() on an intermediate surface which -is later passed to cairo_mask_surface(). - -Snapshot 1.5.18 (2008-04-05 Carl Worth <cworth@cworth.org>) -=========================================================== -This is the ninth snapshot in cairo's unstable 1.5 series. It comes -just 4 days after the 1.5.16 snapshot. We had hoped to not need -another snapshot before the final 1.6.0 release, but several critical -bugs were found and fixed in the last few days, so we thought it -important to let people test the fixes with this snapshot. See below -for details. - -documentation -------------- -The README now lists necessary dependencies. - -Various graphics state defaults are now documented, (source pattern is -opaque black, line width is 2.0, line join is miter, line cap is butt, -miter limit is 10.0, etc.). - -general -------- -Several cleanups have been made along many error-path returns, -(carefully propagating up the original error status values, cleaning -up memory leaks during error recovery, etc.). This is yet another in -Chris "ickle" Wilson's long series of error-handling cleanups during -the 1.5 series. - -Avoid undesired clipping when drawing scaled surface patterns with -bilinear filtering. - -cairo-pdf ---------- -Fix emission of 1-bit alpha masks in PDF output. - -Fix a bug that would cause glyphs to be misplaced along the Y axis: - - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%23474136 - - Originally, an issue about a crash, but later leading to the - misplaced glyphs issue being discovered. - -cairo-ps --------- -Fix misplaced glyphs in cairo's PostScript output. - - This issue occurs when consecutive glyphs are placed far - apart. This case is exercised by the new ft-show-glyphs-table test - case, which was originally inspired by the Debian bug #23474136 - mentioned above. - -Fix more misplaced glyphs in cairo's PostScript output: - - The issue here showed up under very particular circumstance, (when - converting a PDF file with a CFF font with CID Identity-H encoding - and using glyph 0, (defined by the CFF specification as .notdef) - as a space instead). More concretely, this problem appeared when - converting the UbuntuDesktop.pdf file mentioned in this bug - report: - - https://bugs.freedesktop.org/show_bug.cgi?id=15348#c3 - - As usual with arcane font-encoding-specific bugs like this, many - thanks to Adrian Johnson for his magical ability to dive into - specifications and emerge almost instantaneously with fixes. And - thanks to Sebastien Bacher for bringing the bug to our attention. - -cairo-xlib ----------- -Fix serious failure on X servers without the Render extension. - - Since the 1.5.14 snapshot (with support for PseudoColor visuals), - any application attempting to create a "similar" xlib surface would - fail on an X server without the Render extension. Thanks to - Frederic Crozat for pointing out that cairo's test suite was - entirely failing when run against Xvfb. - -Avoid crashing cairo-xlib applications for too-large glyphs - - Naively sending glyphs of any size to the X server will eventually - violate the X limit on maximum request sizes. We now properly - detect when a glyph would be too large and use existing fallbacks - to render the glyph rather than trying to send it to the X server. - -Enable the buggy_repeat workaround for Xorg servers < 1.4 - - We have determined that Xorg 1.3.0 (as packaged in Fedora 8 at - least) has a bug that can result in an X server crash when cairo - uses certain X Render repeat operations, (as exercised by cairo's - extend-reflect test). We avoid this crash by using fallbacks - whenever a repeating surface is needed for any Xorg server with a - version less than 1.4. This is slower, but should prevent the - crash. - - (Meanwhile, there appears to be a separate bug where some X - servers or specific X-server drivers will use random pixmap data - when asked to draw a repeating surface. The buggy_repeat - workaround would also avoid those problems, but we have not yet - characterized whether the new "version < 1.4" is a good - characterization of those problems or not.) - -cairo-quartz-font ------------------ -Implement cairo_font_extents for this backend. - -The cairo-quartz-font implementation added in the 1.5.14 snapshot was -entirely missing support for the cairo_font_extents function. Thanks to -Richard Hult for pointing out this obvious shortcoming, (and obvious -lack of coverage in our test suite): - - CGFont backend returns 0 font extents - https://bugs.freedesktop.org/show_bug.cgi?id=15319 - -Snapshot 1.5.16 (2008-04-01 Carl Worth <cworth@cworth.org>) -=========================================================== -This is the eighth snapshot in cairo's unstable 1.5 series. It comes -less than two weeks after the 1.5.14 snapshot and it really is a -legitimate snapshot, (in spite of sharing this date with that of many -bogus announcements). The major change in this snapshot is that the -cairo-quartz backend is now officially "supported", including new API -to construct a font face from a CGFontRef . Also several bug fixes -have been fixed in many backends. See below for details. - -general -------- -Cairo now depends on pixman 0.10.0 which was recently released. The -latest pixman release can always be found alongside cairo releases at: - - https://cairographics.org/releases - -Increase the precision of color stops for gradients. This fixes a -regression in gradient rendering that had been present since the -1.5.12 snapshot. - -paginated (all of ps, pdf, svg, and win32-printing) ---------------------------------------------------- -Fix assertion failure when some drawing elements are outside the page -boundaries, (this bug was noticed when using Inkscape to print a -drawing with landscape orientation to a portrait-oriented piece of -paper). - -cairo-ps --------- -Fix of bug causing incorrect glyph positioning. - -Fix handling of CAIRO_OPERATOR_SOURCE. - -cairo-pdf ---------- -More reduction of unnecessary digits of precision in PDF output. - -Fix handling of CAIRO_OPERATOR_SOURCE. - -cairo-svg ---------- -Fix bug in usage of libpng that was preventing cairo_mask from working -with the svg backend. - -Fix transformation of source pattern for cairo_stroke(). - -cairo-win32-printing --------------------- -Fix fallback resolution, (thanks again to inkscape users/developers -for helping us find this one). - -cairo-quartz ------------- -Mark the cairo-quartz backend as "supported" rather than -"experimental". This means the following: - - * The backend will now be built by default (if possible). - - * We are committing that the backend-specific API (as published in - cairo-quartz.h) are stable and will be supported in all future - cairo 1.x releases. - - * We are committing that the output quality of this backend - compares favorably with other cairo backends, (and that quality - is ensured by good results from the cairo test suite). - - * We recommend that distributions build and distribute this - backend when possible. - -Note that the cairo_quartz_image API (in cairo-quartz-image.h) is -still experimental, will not build by default, (pass ---enable-quartz-image to configure to build it), and may see API -changes before it is marked as "supported" in a future release. - -Put the CAIRO_FONT_TYPE_ATSUI name back into -cairo-deprecated.h. Without this, the cairo 1.5.14 snapshot broke all -builds for applications using the C++ cairomm bindings (and perhaps -others) which have the CAIRO_FONT_TYPE_ATSUI name in their header -files. This breakage happened even for applications not using -cairo-quartz at all. - - Note: Even though the CAIRO_FONT_TYPE_ATSUI name is provided to - avoid this build breakage, we still recommend that bindings and - applications move to the new, and more accurate, - CAIRO_FONT_TYPE_QUARTZ name. - -Replace the implementation of cairo-quartz-font to use CFFont instead -of ATSUI. The CGFont API is a better fit than ATSUI, and this new -implementation is also more correct than the old one as well. - -This also adds the following new API call: - - cairo_public cairo_font_face_t * - cairo_quartz_font_face_create_for_cgfont (CGFontRef font); - -The previous cairo_quartz_font_face_create_for_atsu_font_id function -continues to exist and is part of the supported API going -forward. (However, the old name of that same function, which was -cairo_atsui_font_face_create_for_atsu_font_id is officially -deprecated. Any source code using the old name should be updated to -use the new name.) - -Fix transformation of source pattern for cairo_stroke(). - -cairo-win32 ------------ -Avoid crash in create_similar is cairo_win32_surface_create fails. - -Snapshot 1.5.14 (2008-03-20 Carl Worth <cworth@cworth.org>) -=========================================================== -This is the seventh snapshot in cairo's unstable 1.5 series. It comes -3 weeks after the 1.5.12 snapshot. This snapshot includes support for -arbitrary X server visuals, (including PseudoColor), which was the -final remaining cairo-specific item on the cairo 1.6 roadmap. It also -includes a huge number of improvements to the cairo-quartz backend. So -this is effectively a cairo 1.6 release candidate. We expect very few -changes from now until 1.6 and only for specific bug fixes. - -API Change ----------- -Rename ATSUI font backend to Quartz font backend. This affects the -following usage: - - --enable-atsui -> --enable-quartz-font - CAIRO_HAS_ATSUI_FONT -> CAIRO_HAS_QUARTZ_FONT - CAIRO_FONT_TYPE_ATSUI -> CAIRO_FONT_TYPE_QUARTZ - - cairo_atsui_font_face_create_for_atsu_font_id -> - cairo_quartz_font_font_create_for_atsu_font_id - -This API change is justified by the cairo-quartz backend still be -marked as "experimental" rather than "supported", (though this is one -step toward making the change to "supported" before 1.6). Cairo will -still provide ABI compatibility with the old symbol name, however. - -paginated (all of ps, pdf, svg, and win32-printing) ---------------------------------------------------- -Optimize by not analyzing an image surface for transparency more than -once, (previously all images were analyzed twice). - -cairo-ps and cairo-pdf ----------------------- -Avoiding emitting a matrix into the stroke output when unnecessary, -(making output size more efficient). - -Reduce rounding error of path shapes by factoring large scale factors -out of the path matrix, (ensuring that a fixed-number of printed -digits for path coordinates contains as much information as possible). - -Reduce excess digits for text position coordinates. This makes the -output file size much smaller without making the result any less -correct. - -cairo-ps --------- -Eliminate bug causing extraneous text repetition on Linux PostScript -output in some cases. - - See: Mozilla Bug 419917 – Printed page contents are reflected - inside bordered tables (Linux-only) - - https://bugzilla.mozilla.org/show_bug.cgi?id=419917 - -Optimize output when EXTEND_PAD is used. - -cairo-pdf ---------- -Fix to not use fill-stroke operator with transparent fill, (else PDF -output doesn't match the cairo-defined correct result). See: - - https://bugs.launchpad.net/inkscape/+bug/202096 - -cairo-svg ---------- -Fix stroke of path with a non-solid-color source pattern: - - https://bugs.freedesktop.org/show_bug.cgi?id=14556 - -cairo-quartz ------------- -Fix text rendering with gradient or image source pattern. - -Handling antialiasing correctly for cairo_stroke(), cairo_clip(), and -cairo_show_text()/cairo_show_glyphs(). - -Correctly handle gradients with non-identity transformations: - - Fixes https://bugs.freedesktop.org/show_bug.cgi?id=14248 - -Add native implementation of REPEAT and REFLECT extend modes for -gradients. - -Fix implementation for the "unbounded" operators, (CAIRO_OPERATOR_OUT, -_IN, _DEST_IN, and _DEST_ATOP). - -Correctly handle endiannees in multi-architecture compiles on Mac OS -X. - -Avoid behavior which would cause Core Graphics to print warnings to -the console in some cases. - -cairo-win32 ------------ -Fix handling of miter limit. - -cairo-win32-printing --------------------- -Fix to not use a 1bpp temporary surface in some cases while printing, -(so grayscale data is preserved rather than just becoming black and -white). - -cairo-xlib ----------- -Add support for rendering to arbitrary TrueColor X server -visuals. This fixes at least the following bugs: - - cairo doesn't support 8-bit truecolor visuals - https://bugs.freedesktop.org/show_bug.cgi?id=7735 - - cairo doesn't support 655 xlib format - https://bugs.freedesktop.org/show_bug.cgi?id=9719 - -Add support for rendering to 8-bit PseudoColor X server visuals. This -fixes the following bug: - - Cairo doesn't support 8-bit pseudocolor visuals - https://bugs.freedesktop.org/show_bug.cgi?id=4945 - -Snapshot 1.5.12 (2008-02-28 Carl Worth <cworth@cworth.org>) -=========================================================== -This is the sixth snapshot in cairo's unstable 1.5 series. It comes 1 -week after the 1.5.10 snapshot. This snapshot includes the -long-awaited change from 16.16 to 24.8 fixed-point values, (see below -for why you should care). It also includes several backend-specific -bug fixes. - -24.8 fixed-point format ------------------------ -Cairo has always converted path coordinates to a fixed-point -representation very early in its processing. Historically, this has -been a 32-bit representation with 16 bits of integer for the -device-pixel grid and 16 bits of sub-pixel positioning. The choice of -16 bits for the integer coordinate space was based on the 16-bit limit -for X Window drawables. - -This 16-bit limit has proven problematic for many applications. It's -an especially vexing problem when targeting non-X backends that don't -have any 16-bit restriction. But even when targeting cairo-xlib, it's -often desirable to draw a large shape, (say a background rectangle), -that extends beyond the surface bounds and expect it to fill the -surface completely, (rather than overflowing and triggering random -behavior). - -Meanwhile, nobody has ever really needed 16 bits of sub-pixel -precision. - -With this snapshot, the fixed-point system is still in place and is -still using a 32-bit representation, (future versions of cairo might -move entirely to floating-point when targeting PDF output for -example). But the representation now provides 24 bits of pixel -addressing and only 8 bits of sub-pixel positioning. This should give -a much less stifling space to many applications. - -However, the underlying pixman library still has 16-bit limitations in -many places, (it has its roots in the X server as well). Until those -are also fixed, applications targeting cairo image surfaces, or -hitting software fallbacks when targeting other surfaces will still -encounter problems with device-space values needing more than 16 -integer bits. - -generic fixes -------------- -Add a few tests to the test suite to increase coverage. - -Cleanup a few error-handling paths, (propagate error correctly). - -cairo-ft --------- -Fix handling of font sizes smaller than 1 device pixel. - -cairo-pdf ---------- -Fix to properly save/restore clip when analyzing meta-surface -patterns, (fixing a couple of test-suite failures). - -Implement native support for CAIRO_OPERATOR_SOURCE when the source -pattern is opaque. - -Emit rectangles as PDF rectangles ("re" operator) rather than as -general paths. - -cairo-ps --------- -Fix to work properly with the 16.16->24.8 change. - -cairo-svg ---------- -Fix CAIRO_EXTEND_REFLECT by using an image fallback, (there's no -direct SVG support for reflected patterns). - -Fix the use of alpha-only masks, (such as CAIRO_FORMAT_A8). - -cairo-quartz ------------- -Add new API for efficiently using image data as a source: - - cairo_surface_t * - cairo_quartz_image_surface_create (cairo_surface_t *image_surface); - - cairo_surface_t * - cairo_quartz_image_surface_get_image (cairo_surface_t *surface); - -For full documentation, see: - - https://cairographics.org/manual/cairo-Quartz-Surfaces.html#cairo-quartz-image-surface-create - -Several fixes for cairo_mask(). - -cairo-atsui ------------ -Change default from from Monaco to Helvetica to be more consistent -with other font backends. - -Snapshot 1.5.10 (2008-02-20 Carl Worth <cworth@cworth.org>) -=========================================================== -This is the fifth snapshot in cairo's unstable 1.5 series. It comes 3 -weeks after the 1.5.8 snapshot. This snapshot adds one new API -function, (cairo_has_current_point), and the usual mix of -improvements, (more efficient PostScript/PDF output, optimized -stroking), and fixes (more robust error-handling, etc.). See below for -details. - -New API -------- -Add a new function to query if there is a current point: - - cairo_bool_t - cairo_has_current_point (cairo_t *cr); - -There is no current point immediately after cairo_create(), nor after -cairo_new_path() or cairo_new_sub_path(). There is a current point -after any of the path-creation functions, (cairo_move_to, -cairo_line_to, cairo_curve_to, etc.). - -With this new function, we also revert the change of the return type -of cairo_get_current_point from cairo 1.5.8, (it's now a void function -again). - -Optimizations -------------- -Optimize stroking code to avoid repeated calculation of redundant -values, (particularly significant for very large, offscreen paths). - -General fixes -------------- -Patch a few more potential buffer overruns, (due to integer -overflow). - -Many fixes and improvements to cairo's error-handling, (ensure that -correct error values are returned, clean up memory leaks on -error-handling paths, etc.). - -Fix a potential infinite loop when stroking a spline with a pen that -has been transformed to a line segment. - -Remove treating NULL as a synonym for a valid cairo_font_options_t* -with default values, (a change that had been introduced as of cairo -1.5.8). - -Remove the altered handling of tolerance and fallback-resolution that -had been introduced as of cairo 1.5.4. - -cairo-xlib ----------- -Pass the original Drawable, (as opposed to the root window), to -XCreatePixmap when creating a similar surface. This gives the X server -more information so that it can be clever and efficient. - -cairo-pdf ---------- -Fix the rendering of repeating and reflecting patterns. - -Ensure miter limit is always >= 1, (smaller limits are not meaningful, -but they can cause some PDF viewers to fail to display pages). - -Generate more efficient output when the same path is used for both -fill and stroke. - -cairo-ps --------- -Start sharing much of the cairo-pdf code rather than implementing very -similar code in cairo-ps. - -Implement native support for repeating and reflecting linear -gradients. - -Implement reflected surface patterns. - -Ensure miter limit is always >= 1, (smaller limits are not meaningful, -but they can cause some PostScript viewers to crash). - -Generate PostScript that will perform more efficiently and use less -memory on printers, (use currentfile instead of a giant string array -for image data, and avoid using PostScript patterns for paint() and -fill() when possible). - -cairo-svg ---------- -Avoid unnecessary rasterization when copying a "similar" surface to -another svg surface, (allow the SOURCE operator to be implemented with -all-vector operations if there are no underlying objects). - -cairo-atsui ------------ -Eliminate infinite loop when attempting to render an empty string. - -Snapshot 1.5.8 (2008-01-30 Carl Worth <cworth@cworth.org>) -========================================================== -This is the fourth snapshot in cairo's unstable 1.5 series. It comes 2 -weeks after the 1.5.6 snapshot. It adds a few new API functions. Most -notably all callers of cairo_image_surface_create_for_data should now -be calling cairo_format_stride_for_width to compute a legal stride -value. See below for more details. - -New API in cairo 1.5.8 ----------------------- -We've added a new function that should be called to compute a legal -stride value before allocating data to be used with -cairo_image_surface_create_for_data: - - int - cairo_format_stride_for_width (cairo_format_t format, - int width); - -We've also added a new cairo_path_extents function that can be used to -compute a bounding box for geometry such as a single line segment, -(contrast with cairo_path_extents and cairo_stroke_extents): - - void - cairo_path_extents (cairo_t *cr, - double *x1, double *y1, - double *x2, double *y2); - -And finally, we've added a function to allow for querying the -XRenderPictFormat of a cairo-xlib surface: - - XRenderPictFormat * - cairo_xlib_surface_get_xrender_format (cairo_surface_t *surface); - -API changes ------------ -Fix return types of cairo_surface_show_page and -cairo_surface_copy_page. This is an API change to functions that are -new in the 1.5 series, so not an API break compared to any stable -cairo release, (1.0.x, 1.2.x, 1.4.x). - -Change the return type of cairo_get_current_point() from void to -cairo_status_t. This allows the caller to receive a -CAIRO_STATUS_NO_CURRENT_POINT value to distinguish the a current point -at the origin from no current point existing. - -Performance improvement ------------------------ -Improve performance of clipping by using an optimized code path -internally, (with the ADD operator instead of IN). - -General bug fixes ------------------ -Fix various cairo_*_extents functions to initialize the return-value -variables even in the case of a cairo_t in error. - -Treat NULL as a legitimate value for cairo_font_options_t*. [NOTE: -On discussion afterwards, we decided against this change so it has -been removed as of cairo 1.5.10.] - -Fix rendering with CAIRO_ANTIALIAS_NONE to be more predictable, (that -is, to avoid seams appearing when geometry and imagery share an -identical edge). Portions of this fix are in the pixman library and -will appear in a future release of that library. - -Avoid triggering an error for a font size of 0. - -Miscellaneous changes ---------------------- -Require pixman >= 0.9.6. - -There has been a tremendous amount improvement to cairo's -documentation. We're delighted that 100% of the public API has at -least some documentation in the API reference manual. Many thanks to -Behdad Esfahbod and Nis Martensen for leading this effort. - -cairo-pdf and cairo-ps ----------------------- -Eliminate failure when a Type 1 font is embedded with an explicit -glyph 0. - -cairo-pdf ---------- -Implement a more correct and more efficient approach for patterns with -an extend mode of CAIRO_EXTEND_REFLECT. - -cairo-ps --------- -Fix image masks to properly pack and pad mask bits. - -cairo-quartz ------------- -Take care to only use DrawTiledImage for integer-aligned images, (and -use slower paths to get the correct result in other cases). - -cairo-win32 ------------ -Fix for older versions of mingw. - -Improve the handling of the clipping with the win32 and win32-printing -surfaces. - -Fix rendering of non black/white text. - -Snapshot 1.5.6 (2008-01-15 Carl Worth <cworth@cworth.org>) -========================================================== -This is the third snapshot in cairo's unstable 1.5 series. It comes -about 6 weeks after the 1.5.4 snapshot. The only API addition compared -to 1.5.4 is very minor, (a new value CAIRO_STATUS_TEMP_FILE_ERROR). -The remainder of the changes are the usual accumulation of bug fixes -and improvements. See below for details. - -General bug fixes ------------------ -Fix handling of fonts that contain a mixture of outline and bitmapped -glyphs. There was a change in this handling in 1.5.4 that improved -some cases and also regressed other cases. Now, all cases should be -handled quite well. - -Fix alignment issues that were causing SIGBUS failures on SPARC. - -Fix a regression (which first appeared in 1.5.2) where stroking under -a large scale would sometimes incorrectly replace a miter join with a -bevel join. (Thanks to Keith Packard.) - -Fix reporting of zero-sized extents to be {0,0} rather than -{INT_MAX,INT_MIN}. This avoids several integer overflow and -allocations of massive regions in some cases. - -Fix failures of gradients with no stops, (quartz, ps, and pdf). - -Fix handling of Type 1 fonts on Windows platforms. - -Fix handling of Type 1 fonts with no specific family name in the font -itself, (generate a CairoFont-x-y name). - -Handle NULL string values in cairo_show_text, cairo_show_glyphs, and -friends. - -Many robustness improvements along error-handling paths, (thanks as -always, to Chris "ickle" Wilson). - -Various other minor fixes. - -Paginated backends (PDF/PostScript/win32-printing) --------------------------------------------------- -Avoid unnecessary rasterization when using a paginated surface as a -source, (such as drawing from one pdf surface to another). - -Fix replaying of paginated surface with more than one level of push/pop -group. - -cairo-xlib ----------- -Fix xlib backend to not consider recent X server release as having a -buggy repeat implementation in the Render extension. - -cairo-pdf ---------- -Fix PDF output to avoid triggering very slow rendering in PDF viewers, -(avoid starting and stopping the content stream for each pattern -emission). - -Support CAIRO_OPERATOR_SOURCE in cases where there is nothing below -the object being drawn. - -Fix to avoid seams appearing between multiple fallback regions. - -cairo-ps (PostScript) ---------------------- -Use correct bounding box in Type 3 fonts. - -Fix several bugs in cairo's PostScript output. These include making -the PostScript output more compatible with recent versions of -ghostscript that are more strict about Type 3 fonts, for -example. - -Fix for win32 to not attempt to create temporary files in the root -directory, (where the user may not have write permission). - -Avoid generating Level 3 PostScript if Level 2 is sufficient. Also, -add code in output documents to alert the user if Level 3 PostScript -is handed to a device that cannot handle PostScript beyond Level -2. - -cairo-directfb --------------- -Various performance optimizations. - -Fixed support for small surfaces (less than 8x8). - -Provide support for environment variables CAIRO_DIRECTFB_NO_ACCEL to -disable acceleration and CAIRO_DIRECTFB_ARGB_FONT to enable ARGB fonts -instead of A8. - -cairo-os2 ---------- -Allow OS/2 APIs instead of C library allocation functions. - -Snapshot 1.5.4 (2007-12-05 Carl Worth <cworth@cworth.org>) -========================================================== -This is the second snapshot in cairo's unstable 1.5 series. It comes -just over 1 month after the 1.5.2 snapshot. There are no API changes -or additions in 1.5.4 compared to 1.5.2, but there are several bug -fixes, and some optimizations. Most of these apply to particular -backends. See below for details. - -General improvements --------------------- -Use less memory for spline approximation calculations. - -Change how the tolerance value is interpreted with regard to -fallback-resolution. [Note: On further discussion, we decided against -this change for now. It is removed as of cairo 1.5.10.] - -Fix precision of floating-point values in vector-output backends to -avoid rounding errors with very small numbers. - -Xlib improvements ------------------ -Fix bug in glyph rendering with xlib, (due to everything being clipped -out). This was a regression in the 1.5.2 snapshot that was visible in -the GIMP, for example. See: - - cairo 1.5.2 causes font problems in GIMP 2.4 status bar and evolution 2.12.1 - https://bugs.freedesktop.org/show_bug.cgi?id=13084 - -PostScript improvements ------------------------ -Fix bug leading to invalid PostScript files when rendering -text, (need "0 0 xyshow" instead of "0 xyshow"). - -Fix many issues with Type 3 fonts, including making the resulting text -extractable. - -Quartz improvements -------------------- -Fix font metrics height value for ATSUI, (helps webkit on GTK+ OS X -layout nicely). - -Fix gradients. - -Fix EXTEND_NONE mode for patterns. - -Fix cairo_quartz_surface_create to properly clear the new surface -in cairo_quartz_surface_create. - -Fix to correctly handle 0x0 sized surfaces. - -Optimize drawing of EXTEND_REPEAT patterns for OS X 10.5. - -Snapshot 1.5.2 (2007-10-30 Carl Worth <cworth@cworth.org>) -========================================================== -This is the first snapshot in cairo's unstable 1.5 series. It comes 4 -months after the 1.4.10 release. This snapshot includes significant -improvements to PDF and PostScript output, which is one of the things -in which we're most interested in getting feedback. There are a couple -of minor API additions, and several optimizations, (primarily in the -"print/vector" backends). And there are dozens of bug fixes and -robustness improvements. - -New dependency on external pixman library ------------------------------------------ -A significant change in this snapshot compared to all previous cairo -releases is that cairo now depends on an external "pixman" library for -its software rendering. Previously this same code was compiled -internally as part of cairo, but now the code is separate so that both -cairo and the X server can now share common code, (thanks very much to -Søren Sandmann for his work on separating pixman and maintaining it). - -So users will need to acquire and build pixman before being able to -build cairo. The current release is 0.9.6 and can be obtained from -here: - - https://cairographics.org/releases/pixman-0.9.6.tar.gz - - which can be verified with: - - https://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1 - 66f01a682c64403a3d7a855ba5aa609ed93bcb9e pixman-0.9.6.tar.gz - - https://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1.asc - (signed by Carl Worth) - -Major PDF/PostScript improvements ---------------------------------- -Adrian Johnson has done some long-awaited work to make cairo's PDF and -PostScript output more interesting than ever before. First, many -operations that previously triggered image fallbacks will now be -rendered as native vectors. These operations include: - - PDF: cairo_push_group, cairo_surface_create_similar, - cairo_mask, A8/A1 surface sources, repeating/reflecting linear - gradients. - - PostScript: cairo_push_group, cairo_surface_create_similar, - gradients, bilevel alpha masks, (for example, all values either 0 or - 255 for an A8 mask). - -Not only that, but when an image fallback is required, it will now be -limited to only the necessary region. For example, a tiny translucent -image overlaying a small portion of text would previously caused an -entire PostScript page to be rendered as a giant image. Now, the -majority of that page will be nice text, and there will only be a tiny -image in the output. - -Additionally, the PostScript output now carefully encodes text so that -if it is subsequently converted to PDF, the text will be -selectable. - -This is very exciting progress, and we're hoping to hear from users -during the 1.5 series about how things have improved, (for example, -inkscape users doing cairo-based PDF export: please let us know how -things look). And feel free to pass your thanks along to Adrian for his excellent work. - -NOTE: This much improved PDF output makes more sophisticated use of -functionality in the PDF specification. This means that cairo's output -will sometimes expose bugs in some free software PDF viewers, (evince, -poppler, and xpdf, for example), that are not yet ready for such PDF -files. We're working with the poppler maintainers to get these bugs -fixed as quickly as possible. In the meantime, please double-check -with other PDF viewers if cairo-generated PDF files are not being -rendered correctly. It may be due to a bug in the viewer rather than -in the PDF file that cairo has created. - -Robustness improvements ------------------------ -Chris Wilson has made the largest contribution by far to cairo 1.5.2, -(in number of commits). His more than 150 commits include a huge -number of fixes to increase cairo's robustness. These fixes make cairo -more robust against invalid and degenerate input, (NaN, empty path, -etc.), against size-0 malloc calls, against memory leaks on -error-recovery paths, and against other failures during error -handling. He also implemented atomic operations to cairo, and used -them to fix cairo's previously non-thread-safe reference counting, -again improving robustness. - -Chris has put a tremendous amount of time and effort into writing -analysis tools for this work, and in running those tools and fixing -the problems they report. We're very grateful for this work, and hope -that all cairo users appreciate the more robust implementation that -results from it. - -This work is largely thankless, so it might make sense to notice -sometime that cairo has been running quite smoothly for you, and when -you do, send a quick "thank you" off to Chris Wilson, since it -is all definitely running smoother thanks to his work. - -New API -------- -There are no major additions to cairo's core API. The only new, -generic functions are: - - void - cairo_surface_copy_page (cairo_surface_t *surface); - - void - cairo_surface_show_page (cairo_surface_t *surface); - -which can now be used much more conveniently than the existing -cairo_copy_page and cairo_show_page functions in some -situations. These functions act identically, but require only a -cairo_surface_t* and not a cairo_t*. - -All other API additions are specific to particular backends. - -New cairo-win32 API (new font face function and "win32 printing" surface) -------------------------------------------------------------------------- -There is a new function for creating a win32 font face for both a -logfontw and an hfont together. This complements the existing -functions for creating a font face from one or the other: - - cairo_font_face_t * - cairo_win32_font_face_create_for_logfontw_hfont (LOGFONTW *logfont, - HFONT font); - -There is also a new "win32 printing" surface: - - cairo_surface_t * - cairo_win32_printing_surface_create (HDC hdc); - -This interface looks identical to the original -cairo_win32_surface_create, (both accept and HDC), but the behavior of -this new surface is very different. It should only be called with a -printing DC, and will result in all drawing commands being stored into -a meta-surface and emitted after each page is complete, with analysis -to do as minimal image-based fallbacks as necessary. The behavior and -implementation shares much with the PDF and PostScript backends. - -New cairo-ps API (EPS and PostScript level control) ---------------------------------------------------- -An often requested feature has been the ability to generate -Encapsulated PostScript (EPS) with cairo. We have that now with the -following very simple API. Just do cairo_ps_surface_create as usual -then call this function with a true value: - - void - cairo_ps_surface_set_eps (cairo_surface_t *surface, - cairo_bool_t eps); - -[NOTE: As always with snapshots, it's possible---though not very -likely---that the API could still be modified before a final -release. For example, this is the first public cairo function that -accepts a Boolean parameter. I'm generally opposed to Boolean -parameters, but this is probably the one case where I'm willing to -accept one, (namely a "set" function that accepts a single Boolean).] - -Also, it is now possible to control what PostScript level to target, -(either level 2 or level 3), with the following new API: - - typedef enum _cairo_ps_level { - CAIRO_PS_LEVEL_2, - CAIRO_PS_LEVEL_3 - } cairo_ps_level_t; - - void - cairo_ps_surface_restrict_to_level (cairo_surface_t *surface, - cairo_ps_level_t level); - - void - cairo_ps_get_levels (cairo_ps_level_t const **levels, - int *num_levels); - - const char * - cairo_ps_level_to_string (cairo_ps_level_t level); - -Improvement for cairo-quartz ----------------------------- -Brian Ewins had contributed several improvements to cairo-quartz. These -include an implementation of EXTEND_NONE for linear and radial -gradients, (so this extend mode will no longer trigger image fallbacks -for these gradients), as well as native surface-mask clipping, (only -on OS X 10.4+ where the CGContextClipToMask function is available). - -He also fixed a semantic mismatch between cairo and quartz for dashing -with an odd number of entries in the dash array. - -We're grateful for Brian since not many quartz-specific improvements -to cairo would be happening without him. - -Optimizations -------------- -Optimize SVG output for when the same path is both filled and stroked, -and avoid unnecessary identity matrix in SVG output. (Emmanuel Pacaud). - -Optimize PS output to take less space (Ken Herron). - -Make PS output more compliant with DSC recommendations (avoid initclip -and copy_page) (Adrian Johnson). - -Make PDF output more compact (Adrian Johnson). - -Release glyph surfaces after uploading them to the X server, (should -save some memory for many xlib-using cairo application). (Behdad -Esfahbod). - -Optimize cairo-win32 to use fewer GDI objects (Vladimir Vukicevic). - -win32-printing: Avoid falling back to images when alpha == 255 -everywhere. (Adrian Johnson). - -win32-printing: Avoid falling back for cairo_push_group and -cairo_surface_create_similar. (Adrian Johnson) - -Bug fixes ---------- -Avoid potential integer overflows when allocating large buffers -(Vladimir Vukicevic). - -Preparations to allow the 16.16 fixed-point format to change to -24.8 (Vladimir Vukicevic). - -Fix bugs for unsupported X server visuals (rgb565, rgb555, bgr888, and -abgr8888). (Carl Worth and Vladimir Vukicevic) - -Fix bugs in PDF gradients (Adrian Johnson). - -Fix cairo-xlib to build without requiring Xrender header -files (Behdad Esfahbod). - -Make cairo more resilient in the case of glyphs not being available in -the current font. (Behdad Esfahbod) - -Prevent crashes when both atsui and ft font backends are compiled in -(Brian Ewins). - -Make font subsetting code more robust against fonts that don't include -optional tables (Adrian Johnson). - -Fix CFF subsetting bug, (which manifested by generating PDF files that -Apple's Preview viewer could not read) (Adrian Johnson). - -Fixed error handling for quartz and ATSUI backends (Brian Ewins). - -Avoid rounding problems by pre-transforming to avoid integer-only -restrictions on transformation in GDI (Adrian Johnson). - -Fixed an obscure bug (#7245) computing extents for some stroked -paths (Carl Worth). - -Fix crashes due to extreme transformation of the pen, (seems to show -up in many .swf files for some reason) (Carl Worth). - -Release 1.4.10 (2007-06-27 Carl Worth <cworth@cworth.org>) -========================================================== -This is the fifth update in cairo's stable 1.4 series. It comes -roughly three weeks after the 1.4.8 release. The most significant -change in this release is a fix to avoid an X error in certain cases, -(that were causing OpenOffice.org to crash in Fedora). There is also a -semantic change to include child window contents when using an xlib -surface as a source, an optimization when drawing many rectangles, and -several minor fixes. - -Eliminate X errors that were killing OO.o (Chris Wilson) --------------------------------------------------------- -Cairo is fixed to avoid the X errors propagated when cleaning up -Render Pictures after the application had already destroyed the -Drawable they reference. (It would be nice if the X server wouldn't -complain that some cleanup work is already done, but there you have -it.) This fixes the bug causing OpenOffice.org to crash as described -here: - - XError on right click menus in OOo. - https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=243811 - -Use IncludeInferiors when using xlib surface as a source (Ryan Lortie) ----------------------------------------------------------------------- -When an xlib surface is used as the source of a draw operation the -contents of child windows are now included in the source data. The -semantics of drawing to xlib surfaces are unchanged (ie: draws are -still clipped by child windows overlapping the destination window). - -Optimize drawing of many rectangles (Vladimir Vukicevic) --------------------------------------------------------- -Avoid O(N*N) loop when filling many axis-aligned rectangles, (either -many rectangles as separate sub-paths or due to dashing). - -Miscellaneous fixes -------------------- -Fix cairo-perf on Solaris by linking to librt. (Behdad Esfahbod) - -Fix make check for systems that require executable files to have a -particular extension. (Behdad Esfahbod) - -Eliminate some warnings in cairo-quartz. (Brian Ewins) - -Fix build-breaking typo for cairo-directfb. (Chris Wilson) - -Release 1.4.8 (2007-06-07 Carl Worth <cworth@cworth.org>) -========================================================= -This is the fourth update in cairo's stable 1.4 series. It comes just -over five weeks after the 1.4.6 release. This release includes a -thread-safe surface-cache for solid patterns which significantly -improves text rendering with the xlib backend. Also, dozens of error -paths in cairo have been fixed thanks to extensive fault-injection -testing by Chris Wilson. - -Surface cache for solid patterns --------------------------------- -Originally written by Jorn Baayen, the introduction of a small cache -for surfaces created for solid patterns improves performance -dramatically. For example, this reduces the volume of X requests -during text rendering to the same level as Xft. - -This cache first made its appearance in a 1.3.x snapshot, but was -removed before appearing in any previous major release due to -complications with multi-threaded programs. For example, programs like -evince that would carefully restrict usage of cairo-xlib to a single -thread were unpleasantly surprised to find that using cairo-image in a -separate thread could trigger X requests. - -Behdad Esfahbod designed a fix which was implemented by Chris -Wilson. Now, the necessary X requests are queued up until the next -time the application directly operates on an xlib surface. - -Improved error handling paths ------------------------------- -Chris Wilson continued the excellent work he started in cairo 1.4.4 to -make cairo much more robust against out-of-memory and other errors. He -applied his memory allocation fault injection cairo's main test suite, -(previously he had applied it to cairo's performance suite). - -Chris's testing found dozens of bugs which he fixed. Many of these -bugs had perhaps never been hit by any users. But at least one was -hit by the gnome-about program which resulted in dozens of duplicated -bug reports against that program: - - https://bugzilla.gnome.org/show_bug.cgi?id=431990 - -We were very pleasantly surprised to see this bug get fixed as a -side-effect of Chris's work. Well done, Chris! - -Other fixes ------------ -Cleanup of mutex declarations (Behdad Esfahbod) - -Remove unnecessary clip region from SVG output (Emmanuel Pacaud) - -Remove Xsun from the buggy_repeat blacklist (Elaine Xiong) - -ATSUI: Fix glyph measurement: faster and more correct (Brian Ewins) - -Quartz: fixed 'extend' behaviour for patterns, improved pattern performance, -and a few smaller correctness fixes. (Brian Ewins, Vladimir Vukicevic) - -Release 1.4.6 (2007-05-01 Carl Worth <cworth@cworth.org>) -========================================================= -This is the third update in cairo's stable 1.4 series. It comes a -little less than three weeks since the 1.4.4 release. This release -fixes the broken mutex initialization that made cairo 1.4.4 unusable -on win32, OS/2, and BeOS systems. This release also adds significant -improvements to cairo's PDF backend, (native gradients!), and a couple -of performance optimizations, (one of which is very significant for -users of the xlib backend). See below for more details. - -Repaired mutex initialization ------------------------------ -We apologize that cairo 1.4.4 did little more than crash on many -platforms which are less-frequently used by the most regular cairo -maintainers, (win32, OS/2, and BeOS). The mutex initialization -problems that caused those crashes should be fixed now. And to avoid -similar problems in the future, we've now started posting pre-release -snapshots to get better testing, (subscribe to cairo@cairographics.org -if you're interested in getting notified of those and testing them). - -PDF Improvements ----------------- -Thanks to Adrian Johnson, (cairo PDF hacker extraordinaire), we have -several improvements to cairo's PDF backend to announce: - -Native gradients: - - As of cairo 1.4.6, cairo will now generate native PDF gradients in - many cases, (previously, the presence of a gradient on any page - would force rasterized output for that page). Currently, only - gradients with extend types of PAD (the default) or NONE will - generate native PDF gradients---others will still trigger - rasterization, (but look for support for other extend modes in a - future release). Many thanks to Miklós Erdélyi as well, who did the - initial work for this support. - -Better compatibility with PDF viewers: - - The PDF output from cairo should now be displayed correctly by a - wider range of PDF viewers. Adrian tested cairo's PDF output against - many PDF viewers, identified a common bug in many of those viewers - (ignoring the CTM matrix in some cases), and modified cairo's output - to avoid triggering that bugs (pre-transforming coordinates and - using an identity matrix). - -Better OpenType/CFF subsetting: - - Cairo will now embed CFF and TrueType fonts as CID fonts. - -Performance optimizations -------------------------- -Faster cairo_paint_with_alpha: - - The cairo_paint_with_alpha call is used to apply a uniform alpha - mask to a pattern. For example, it can be used to gradually fade an - image out or in. Jeff Muizelaar fixed some missing/broken - optimizations within the implementation of this function resulting - in cairo_paint_with_alpha being up to 4 times faster when using - cairo's image backend. - -Optimize rendering of "off-screen" geometry: - - Something that applications often do is to ask cairo to render - things that are either partially or wholly outside the current clip - region. Since 1.4.0 the image backend has been fixed to not waste - too much time in this case. But other backends have still been - suffering. - - In particular, the xlib backend has often performed quite badly in - this situation. This is due to a bug in the implementation of - trapezoid rasterization in many X servers. - - Now, in cairo 1.4.6 there is a higher-level fix for this - situation. Cairo now eliminates or clips trapezoids that are wholly - or partially outside the clip region before handing the trapezoids - to the backend. This means that the X server's performance bug is - avoided in almost all cases. - - The net result is that doing an extreme zoom-in of vector-based - objects drawn with cairo might have previously brought the X server - to its knees as it allocated buffers large enough to fit all of the - geometry, (whether visible or not). But now the memory usage should - be bounded and performance should be dramatically better. - -Miscellaneous -------------- -Behdad contributed an impressively long series of changes that -organizes cairo's internals in several ways that will be very -beneficial to cairo developers. Thanks, Behdad! - -Behdad has also provided a utility for generating malloc statistics, -(which was used during the great malloc purges of 1.4.2 and -1.4.4). This utility isn't specific to cairo so may be of benefit to -others. It is found in cairo/util/malloc-stats.c and here are Behdad's -notes on using it: - - To build, do: - - make malloc-stats.so - - inside util/, and to use, run: - - LD_PRELOAD=malloc-stats.so some-program - - For binaries managed by libtool, eg, cairo-perf, do: - - ../libtool --mode=execute /bin/true ./cairo-perf - LD_PRELOAD="../util/malloc-stats.so" .libs/lt-cairo-perf - -Finally, the cairo-perf-diff-files utility was enhanced to allow for -generating performance reports from several runs of the same backend -while some system variables were changed. For example, this is now -being used to allow cairo-perf to measure the performance of various -different acceleration architectures and configuration options of the -X.org X server. - -Release 1.4.4 (2007-04-13 Carl Worth <cworth@cworth.org>) -========================================================= -This is the second update release in cairo's stable 1.4 series. It -comes just less than a month after 1.4.2. The changes since 1.4.2 -consist primarily of bug fixes, but also include at least one -optimization. See below for details. - -Of all the work that went into the 1.4.4 release - -There have been lots of individuals doing lots of great work on cairo, -but two efforts during the 1.4.4 series deserve particular mention: - -Internal cleanup of error handling, (Chris Wilson) --------------------------------------------------- -Chris contributed a tremendous series of patches (74 patches!) to -improve cairo's handling of out-of-memory and other errors. He began -by adding gcc's warn_unused_attribute to as many functions as -possible, and then launched into the ambitious efforts of adding -correct code to quiet the dozens of resulting warnings. - -Chris also wrote a custom valgrind skin to systematically inject -malloc failures into cairo, and did all the work necessary to verify -that cairo's performance test suite runs to completion without -crashing. - -The end result is a much more robust implementation. Previously, many -error conditions would have gone unnoticed and would have led to -assertion failures, segmentation faults, or other harder-to-diagnose -problems. Now, more than ever, cairo should cleanly let the user know -of problems through cairo_status and other similar status -functions. Well done, Chris! - -More malloc reduction, (Mathias Hasselmann) -------------------------------------------- -After 1.4.0, Behdad launched an effort to chase down excessive calls -to malloc within the implementation of cairo. He fixed a lot of -malloc-happy objects for 1.4.2, but one of the worst offenders, -(pixman regions), was left around. Mathias contributed an excellent -series of 15 patches to finish off this effort. - -The end result is a cairo that calls malloc much less often than it -did before. Compared to 1.4.2, 55% of the calls to malloc have been -eliminate, (and 60% have been eliminated compared to 1.4.0). Well -done, Mathias! - -Other improvements since 1.4.2 ------------------------------- -• Centralize mutex declarations (will reduce future build breaks), - (Mathias Hasselmann) - -• Reduce malloc by caching recently freed pattern objects (Chris - Wilson) - -• Fix some broken composite operations (David Reveman) - https://bugs.freedesktop.org/show_bug.cgi?id=5777 - -Backend-specific fixes ----------------------- -PDF: - • Use TJ operator for more compact representation of glyphs (Adrian - Johnson) - - • Fix glyph positioning bug when glyphs are not horizontal - https://lists.freedesktop.org/archives/cairo/2007-April/010337.html - -win32: - • Fix crash when rendering with bitmap fonts (Carl Worth) - https://bugzilla.mozilla.org/show_bug.cgi?id=376498 - -xlib: - • Turn metrics-hinting on by default (Behdad Esfahbod) - - • Fix edge-effect problem with transformed images drawn to xlib - (Behdad Esfahbod) - https://bugs.freedesktop.org/show_bug.cgi?id=10508 - - • Avoid dereferencing a NULL screen. (Chris Wilson) - https://bugs.freedesktop.org/show_bug.cgi?id=10517 - -Quartz/ATSUI: - • Fix scaling of glyph surfaces - (Brian Ewins) - https://bugs.freedesktop.org/show_bug.cgi?id=9568 - - • Fix compilation failure when both xlib and quartz enabled - (Brian Ewins) - - • Fix rounding bug leading to incorrectly positioned glyphs - (Robert O'Callahan) - https://bugs.freedesktop.org/show_bug.cgi?id=10531 - -Release 1.4.2 (2007-03-19 Carl Worth <cworth@cworth.org>) -========================================================= -This is the first update release in cairo's stable 1.4 series. It -comes just less than 2 weeks after 1.4.0. We hadn't anticipated an -update this early, but we've managed to collect some important fixes -that we wanted to get out to cairo users as soon as possible, (6 fixes -for crashes, 1 case where graphical elements would not be drawn at -all, a handful of backend-specific bugs, and several important build -fixes). - -There's almost nothing but bug fixes in this release, (see below one -optimization that Behdad did sneak in), so we recommend that everyone -upgrade to this release when possible. - -Thanks to the many people that worked to fix these bugs, and those -that did the work to report them and to test the fixes, (wherever -possible both names are credited below). - -Critical fixes --------------- -• Fix a crash due to a LOCK vs. UNLOCK typo (M. Drochner fixing Carl - Worth's embarrassing typo). - - https://bugs.freedesktop.org/show_bug.cgi?id=10235 - -• Fix potential buffer overflow, which on some systems with a checking - variant of snprintf would lead to a crash (Adrian Johnson, Stanislav - Brabec, and sangu). - - https://bugs.freedesktop.org/show_bug.cgi?id=10267 - https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=232576 - -• Fix a crash in cairo_stroke_extents or cairo_in_stroke when line - width is 0.0. (Carl Worth and Sebastien Bacher) - - https://bugs.freedesktop.org/show_bug.cgi?id=10231 - -• Fix a crash on certain combinations of X server/video drivers (Carl - Worth and Tomas Carnecky). - - https://bugs.freedesktop.org/show_bug.cgi?id=10250 - -• Fix a crash due to mishandling of invalid user input (Carl Worth and - Alexander Darovsky). - - https://bugs.freedesktop.org/show_bug.cgi?id=9844 - -• xlib: Cleanup server-side glyph caches on XCloseDisplay. This - eliminated a crash detected by the perf suite, (and that - applications could have run into as well). (Chris Wilson) - -Other bug fixes ---------------- -• Fix for some geometry which simply disappeared under some - transformations---a stroked line with an extreme skew in X, for - example (Carl Worth and Jonathan Watt). - - https://bugzilla.mozilla.org/show_bug.cgi?id=373632 - -• SVG: Fix radial gradients for CAIRO_EXTEND_REFLECT and when r0 > r1 - (Emmanuel Pacaud). - -• PDF: Set page group color space to DeviceRGB. - - This fixes incorrect (muddy) transparent colors when rendering cairo - PDF output in some viewers. (Adrian Johnson, Adam Goode, and - MenTaLguY). - - https://lists.freedesktop.org/archives/cairo/2006-November/008551.html - -• win32: Return correct metrics when hinting is off, and fix font - descent computation (Behdad Esfahbod). - -• quartz: Fix glyph interfaces to correctly return user-space rather - than device-space coordinates (Brian Ewins). - - https://bugs.freedesktop.org/show_bug.cgi?id=9568 - -• xcb: Fix parameter-order confusion with xcb_create_pixmap, which now - makes all tests that pass with xlib now pass with xcb (Carl Worth, - Jamey Sharp). - -• Fix some memory leaks in the perf suite (Chris Wilson). - -• Fix perf suite to consider changes in pixman/src (Mathias - Hasselmann). - -Build fixes ------------ -• Don't include pre-generated cairo-features.h file. This was causing - build failures when building with the directfb backend enabled - (Behdad Esfahbod). - - https://bugs.freedesktop.org/show_bug.cgi?id=10189 - -• Eliminate use of maintainer mode from cairo's automake/configure - script. This means that updates to files such as Makefile.am will - take effect, (by rerunning automake and friends as necessary) when - invoking make rather than being silently ignored. (Behdad Esfahbod) - -• Don't compile cairo-deflate-stream.c, which depends on zlib, unless - building the pdf backend which requires it. (Carl Worth, Tor - Lillqvist) - - https://bugs.freedesktop.org/show_bug.cgi?id=10202 - -• Don't make the ps backend link against zlib anymore, since it - doesn't require it (Carl Worth). - -• Use "find !" rather than "find -not" for better portability (Thomas - Klausner). - - https://bugs.freedesktop.org/show_bug.cgi?id=10226 - -• Don't use unsupported visibility attribute "hidden" on Solaris - (Gilles Dauphin, Thomas Klausner). - - https://bugs.freedesktop.org/show_bug.cgi?id=10227 - -Optimization ------------- -• It was Behdad that suggested we focus strictly on bug fixes now that - we shipped so many performance improvements in 1.4.0, but it was - also Behdad that got distracted by the chance to remove a lot of - mallocs from cairo. Paths, gstates, trapezoids, splines, polygons, - and gradient color stops will now use small, stack-allocated buffers - in the most common cases rather than calling malloc as - often. (Behdad Esfahbod). And look for more from Mathias Hasselmann - soon. - -Release 1.4.0 (2007-03-06 Carl Worth <cworth@cworth.org>) -========================================================= -The many people[*] who have been working hard on cairo are very -pleased to announce the long-awaited release of cairo 1.4. This -release comes 4 months after the last stable update release (1.2.6) -and 9 months since the initial release of 1.2.0. - -The release notes below are intended to capture the highlights of the -changes that have occurred from the 1.2 series to the new 1.4.0 -release. - -Performance improvements ------------------------- -Within the cairo project, the last 6 months or so has seen an intense -effort focusing on the performance of cairo itself. That effort has -paid off considerably, as can be seen in the following highlights of -some of the performance differences from cairo 1.2.6 to cairo 1.4.0. - -(Note: The performance results reported here were measured on an x86 -laptop. Many of the improvements in 1.4---particular those involving -text rendering---are even more dramatic on embedded platforms without -hardware floating-point units. Such devices played an important part -of many of the optimizations that found their way into cairo over the -last few months.) - -• Dramatic improvement when drawing objects that are mostly off-screen - with the image backend (with the xlib backend this case is still - slow due to an X server bug): - - image-rgba long-lines-uncropped-100 479.64 -> 4.98: 96.24x speedup - ███████████████████████████████████████████████▋ - -• Dramatic improvement when copying a small fraction of an image - surface to an xlib surface: - - xlib-rgba subimage_copy-512 3.93 -> 0.07: 54.52x speedup - ██████████████████████████▊ - -• Dramatic improvement to tessellation speed for complex objects: - - image-rgb tessellate-256-100 874.16 -> 34.79: 25.13x speedup - ████████████▏ - xlib-rgba zrusin_another_fill-415 148.40 -> 13.85: 10.72x speedup - ████▉ - xlib-rgb world_map-800 680.20 -> 345.54: 1.97x speedup - ▌ - -• Dramatic improvement to the speed of stroking rectilinear shapes, - (such as the outline of a rectangle or "box"): - - image-rgb box-outline-stroke-100 0.18 -> 0.01: 24.22x speedup - ███████████▋ - xlib-rgb box-outline-stroke-100 0.46 -> 0.06: 8.05x speedup - ███▌ - - -• Dramatic improvements to text rendering speeds: - - xlib-rgba text_image_rgba_over-256 63.12 -> 9.61: 6.57x speedup - ██▊ - -• 3x improvements to floating-point to fixed-point conversion speeds: - - image-rgba pattern_create_radial-16 9.29 -> 3.44: 2.70x speedup - ▉ - -• 2x improvements to linear gradient computation: - - image-rgb paint_linear_rgb_source-512 26.22 -> 11.61: 2.26x speedup - ▋ - -• 2x improvement to a case common in PDF rendering: - - image-rgb unaligned_clip-100 0.10 -> 0.06: 1.81x speedup - ▍ - -• 1.3x improvement to rectangle filling speed (note: this improvement - is new since 1.3.16---previously this test case was a 1.3x slowdown - compared to 1.2.6): - - image-rgba rectangles-512 6.19 -> 4.37: 1.42x speedup - ▎ - xlib-rgba rectangles-512 7.48 -> 5.58: 1.34x speedup - ▏ - -NOTE: In spite of our best efforts, there are some measurable -performance regressions in 1.4 compared to 1.2. It appears that the -primary problem is the increased overhead of the new tessellator when -drawing many, very simple shapes. The following test cases capture -some of that slowdown: - - image-rgba mosaic_tessellate_lines-800 11.03 -> 14.29: 1.30x slowdown - ▏ - image-rgba box-outline-fill-100 0.01 -> 0.01: 1.26x slowdown - ▏ - image-rgba fill_solid_rgb_over-64 0.20 -> 0.22: 1.12x slowdown - - image-rgba fill_image_rgba_over-64 0.23 -> 0.25: 1.10x slowdown - - xlib-rgb paint_image_rgba_source-256 3.24 -> 3.47: 1.07x slowdown - -We did put some special effort into eliminating this slowdown for the -very common case of drawing axis-aligned rectangles with an identity -matrix (see the box-outline-stroke and rectangles speedup numbers -above). Eliminating the rest of this slowdown will be a worthwhile -project going forward. - -Also note that the "box-outline-fill" case is a slowdown while -"box-outline-stroke" is a (huge) speedup. These two test cases -resulted from the fact that some GTK+ theme authors were filling -between two rectangles to avoid slow performance from the more natural -means of achieving the same shape by stroking a single rectangle. With -1.4 that workaround should definitely be eliminated as it will now -cause things to perform more slowly. - -Greatly improved PDF output ---------------------------- -We are very happy to be able to announce that cairo-generated PDF -output will now have text that can be selected, cut-and-pasted, and -searched with most capable PDF viewer applications. This is something -that was not ever possible with cairo 1.2. - -Also, the PDF output now has much more compact encoding of text than -before. Cairo is now much more careful to not embed multiple copies of -the same font at different sizes. It also compresses text and font -streams within the PDF output. - -API additions -------------- -There are several new functions available in 1.4 that were not -available in 1.2. Curiously, almost all of the new functions simply -allow the user to query state that has been set in cairo (many new -"get" functions) rather than providing any fundamentally new -operations. The new functionality is: - -• Getting information about the current clip region - - cairo_clip_extents - cairo_copy_clip_rectangle_list - cairo_rectangle_list_destroy - -• Getting information about the current dash setting - - cairo_get_dash_count - cairo_get_dash - -• Getting information from a pattern - - cairo_pattern_get_rgba - cairo_pattern_get_surface - cairo_pattern_get_color_stop_rgba - cairo_pattern_get_color_stop_count - cairo_pattern_get_linear_points - cairo_pattern_get_radial_circles - -• Getting the current scaled font - - cairo_get_scaled_font - -• Getting reference counts - - cairo_get_reference_count - cairo_surface_get_reference_count - cairo_pattern_get_reference_count - cairo_font_face_get_reference_count - cairo_scaled_font_get_reference_count - -• Setting/getting user data on objects - - cairo_set_user_data - cairo_get_user_data - cairo_pattern_set_user_data - cairo_pattern_get_user_data - cairo_scaled_font_set_user_data - cairo_scaled_font_get_user_data - -• New cairo-win32 functions: - - cairo_win32_surface_create_with_ddb - cairo_win32_surface_get_image - cairo_win32_scaled_font_get_logical_to_device - cairo_win32_scaled_font_get_device_to_logical - -API deprecation ---------------- -The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never -worked as a format value for cairo_image_surface_create, and it wasn't -necessary for supporting 16-bit 565 X server visuals. - -A sampling of bug fixes in cairo 1.4 ------------------------------------- - • Fixed radial gradients - • Fixed dashing (degenerate and "leaky" cases) - • Fixed transformed images in PDF/PS output (eliminate bogus repeating) - • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD - • cairo_show_page no longer needed for single-page output - • SVG: Fix bug preventing text from appearing in many viewers - • cairo-ft: Return correct metrics when hinting is off - • Eliminate crash in cairo_create_similar if nil surface is returned - • Eliminate crash after INVALID_RESTORE error - • Fix many bugs related to multi-threaded use and locking - • Fix for glyph spacing 32 times larger than desired (cairo-win32) - • Fixed several problems in cairo-atsui (assertion failures) - • Fix PDF output to avoid problems when printing from Acrobat Reader - • Fix segfault on Mac OS X (measuring a zero-length string) - • Fix text extents to not include the size of non-inked characters - • Fix for glyph cache race condition in glitz backend (Jinghua Luo) - • Fix make check to work on OPD platforms (IA64 or PPC64) - • Fix compilation problems of cairo "wideint" code on some platforms - • Many, many others... - -Experimental backends (quartz, XCB, OS/2, BeOS, directfb) ---------------------------------------------------------- -None of cairo's experimental backends are graduating to "supported" -status with 1.4.0, but two of them in particular (quartz and xcb), are -very close. - -The quartz baceknd has been entirely rewritten and is now much more -efficient. The XCB backend has been updated to track the latest XCB -API (which recently had a 1.0 release). - -We hope to see these backends become supported in a future release, -(once they are passing all the tests in cairo's test suite). - -The experimental OS/2 backend is new in cairo 1.4 compared to cairo -1.2. - -Documentation improvements --------------------------- -We have added documentation for several functions and types that -were previously undocumented, and improved documentation on other -ones. As of this release, there remain only two undocumented -symbols: cairo_filter_t and cairo_operator_t. - -[*]Thanks to everyone ---------------------- -I've accounted for 41 distinct people with attributed code added to -cairo between 1.2.6 and 1.4.0, (their names are below). That's an -impressive number, but there are certainly dozens more that -contributed with testing, suggestions, clarifying questions, and -encouragement. I'm grateful for the friendships that have developed as -we have worked on cairo together. Thanks to everyone for making this -all so much fun! - -Adrian Johnson, Alfred Peng, Alp Toker, Behdad Esfahbod, -Benjamin Otte, Brian Ewins, Carl Worth, Christian Biesinger, -Christopher (Monty) Montgomery, Daniel Amelang, Dan Williams, -Dave Yeo, David Turner, Emmanuel Pacaud, Eugeniy Meshcheryakov, -Frederic Crozat, Hans Breuer, Ian Osgood, Jamey Sharp, Jeff Muizelaar, -Jeff Smith, Jinghua Luo, Jonathan Watt, Joonas Pihlaja, Jorn Baayen, -Kalle Vahlman, Kjartan Maraas, Kristian Høgsberg, M Joonas Pihlaja, -Mathias Hasselmann, Mathieu Lacage, Michael Emmel, Nicholas Miell, -Pavel Roskin, Peter Weilbacher, Robert O'Callahan, -Soren Sandmann Pedersen, Stuart Parmenter, T Rowley, -Vladimir Vukicevic - -Snapshot 1.3.16 (2007-03-02 Carl Worth <cworth@cworth.org>) -=========================================================== -New API functions ------------------ -A few new public functions have been added to the cairo API since the -1.3.14 snapshot. These include a function to query the current scaled -font: - - cairo_get_scaled_font - -New functions to query the reference count of all cairo objects: - - cairo_get_reference_count - - cairo_surface_get_reference_count - cairo_pattern_get_reference_count - - cairo_font_face_get_reference_count - cairo_scaled_font_get_reference_count - -And new functions to allow the use of user_data with any cairo object, -(previously these were only available on cairo_surface_t and -cairo_font_face_t objects): - - cairo_set_user_data - cairo_get_user_data - - cairo_pattern_set_user_data - cairo_pattern_get_user_data - - cairo_scaled_font_set_user_data - cairo_scaled_font_get_user_data - -Usability improvement for PDF/PS/SVG generation ------------------------------------------------ -In previous versions of cairo, generating single-page output with the -cairo-pdf, cairo-ps, or cairo-svg backends required a final call to -cairo_show_page. This was often quite confusing as people would port -functional code from a non-paginated backend and be totally mystified -as to why the output was blank until they learned to add this call. - -Now that call to cairo_show_page is optional, (it will be generated -implicitly if the user does not call it). So cairo_show_page is only -needed to explicitly separate multiple pages. - -Greatly improved PDF output ---------------------------- -We are very happy to be able to announce that cairo-generated PDF -output will now have text that can be selected, cut-and-paste, and -searched with most capable PDF viewer applications. This is something -that was not ever possible with cairo 1.2. - -Also, the PDF output now has much more compact encoding of text than -before. Cairo is now much more careful to not embed multiple copies of -the same font at different sizes. It also compresses text and font -streams within the PDF output. - -Major bug fixes ---------------- - • Fixed radial gradients - - The rendering of radial gradients has been greatly improved. In - the cairo 1.2 series, there was a serious regression affecting - radial gradients---results would be very incorrect unless one of - the gradient circles had a radius of 0.0 and a center point within - the other circle. These bugs have now been fixed. - - • Fixed dashing - - Several fixes have been made to the implementation of dashed - stroking. Previously, some dashed, stroked rectangles would - mis-render and fill half of the rectangle with a large triangular - shape. This bug has now been fixed. - - • Fixed transformed images in PDF/PS output - - In previous versions of cairo, painting with an image-based source - surface pattern to the PDF or PS backends would cause many kinds - of incorrect results. One of the most common problems was that an - image would be repeated many times even when the user had - explicitly requested no repetition with CAIRO_EXTEND_NONE. These - bugs have now been fixed. - - • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD - - In the 1.2 version of cairo any use of CAIRO_EXTEND_REFLECT or - CAIRO_EXTEND_PAD with a surface-based pattern resulted in an - error, (cairo would stop rendering). This bug has now been - fixed. - - Now, CAIRO_EXTEND_REFLECT should work properly with surface - patterns. - - CAIRO_EXTEND_PAD is still not working correctly, but it will now - simply behave as CAIRO_EXTEND_NONE rather than triggering the - error. - -New rewrite of quartz backend (still experimental) --------------------------------------------------- -Cairo's quartz backend has been entirely rewritten and is now much -more efficient. This backend is still marked as experimental, not -supported, but it is now much closer to becoming an officially -supported backend. (For people that used the experimental nquartz -backend in previous snapshots, that implementation has now been -renamed from "nquartz" to "quartz" and has replaced the old quartz -backend.) - -Documentation improvements --------------------------- -We have added documentation for several functions and types that -were previously undocumented, and improved documentation on other -ones. As of this release, there remain only two undocumented -symbols: cairo_filter_t and cairo_operator_t. - -Other bug fixes ---------------- - • cairo-svg: Fix bug that was preventing text from appearing in many - viewers - - • cairo-ft: Return correct metrics when hinting is off - - • Cairo 1.3.14 deadlocks in cairo_scaled_font_glyph_extents or - _cairo_ft_unscaled_font_lock_face - - https://bugs.freedesktop.org/show_bug.cgi?id=10035 - - • cairo crashes in cairo_create_similar if nil surface returned by - other->backend->create_similar - - https://bugs.freedesktop.org/show_bug.cgi?id=9844 - - • evolution crash in _cairo_gstate_backend_to_user() - https://bugs.freedesktop.org/show_bug.cgi?id=9906 - - • Fix memory leak in rectilinear stroking code - -Things not in this release --------------------------- - • Solid-surface-pattern cache: This patch had been applied during - the 1.3.x series, but it was reverted due to some inter-thread - problems it caused. The patch is interesting since it made a big - benefit for text rendering performance---so we'll work to bring a - corrected version of this patch back as soon as possible. - -Snapshot 1.3.14 (2006-02-13 Carl Worth <cworth@cworth.org>) -=========================================================== -This is the seventh development snapshot in the 1.3 series, (and there -likely won't be many more before the 1.4.0 release). It comes just -over 3 weeks after the 1.3.12 snapshot. - -Since we're so close to the 1.4.0 release, there are not a lot of new -features nor even a lot of new performance improvements in this -snapshot. Instead, there are a great number of bug fixes. Some are -long-standing bugs that we're glad to say goodbye to, and several are -fixes for regressions that were introduced as part of the optimization -efforts during the 1.3.x series. - -PDF text selection fixed ------------------------- -The inability to correctly select text in cairo-generated PDF has been -a defect ever since the initial support for the PDF backend in the -cairo 1.2.0 release. With the 1.3.14 snapshot, in most situations, and -with most PDF viewer applications, the PDF generated by cairo will -allow text to be correctly selected for copy-and-paste, (as well as -searching). - -We're very excited about this new functionality, (and very grateful to -Adrian Johnson, Behdad Esfahbod, and others that have put a lot of -work into this lately). Please test this new ability and give feedback -on the cairo@cairographics.org list. - -Many thread-safety issues fixed -------------------------------- -We've discovered that no release of cairo has ever provided safe text -rendering from a multi-threaded application. With the 1.3.14 snapshot -a huge number of the bugs in this area have been fixed, and multiple -application dvelopers have now reported success at writing -multi-threaded applications with cairo. - -Other fixes ------------ -Fixed a bug that was causing glyph spacing to be 32 times larger than -desired when using cairo-win32. - -Fixed a regression in the rendering of linear gradients that had been -present since the 1.3.8 snapshot. - -Fixed several problems in cairo-atsui that were leading to assertion -failures when rendering text. - -Fix corrupted results when rendering a transformed source image -surface to an xlib surface. This was a regression that had been -present since the 1.3.2 snapshot. - -Fixed PDF output to prevent problems printing from some versions of -Acrobat Reader, (a single glyph was being substituted for every -glyph). - -And many other fixes as well, (see the logs for details). - -Snapshot 1.3.12 (2007-01-20 Carl Worth <cworth@cworth.org>) -=========================================================== -The relentless march toward the cairo 1.4 release continues, (even if -slightly late out of the starting blocks in 2007). This is the sixth -development snapshot in the 1.3 series. It comes 4 weeks after the -1.3.10 snapshot. - -Performance ------------ -As usual, this snapshot has some fun performance improvements to show -off: - -image-rgba long-lines-uncropped-100 470.08 -> 4.95: 94.91x speedup -███████████████████████████████████████████████ -image-rgb long-lines-uncropped-100 461.60 -> 4.96: 93.02x speedup -██████████████████████████████████████████████ - -This 100x improvement, (and yes, that's 100x, not 100%), in the image -backend occurs when drawing large shapes where only a fraction of the -shape actually appears in the final result, (the rest being outside -the bounds of the destination surface). Many applications should see -speedups here, and the actual amount of speedup depends on the ratio -of non-visible to visible portions of geometry. - -[Note: There remains a similar performance bug when drawing mostly -non-visible objects with the xlib backend. This is due to a similar -bug in the X server itself, but we hope a future cairo snapshot will -workaround that bug to get a similar speedup with the xlib backend.] - -image-rgba unaligned_clip-100 0.09 -> 0.06: 1.67x speedup -▍ -image-rgb unaligned_clip-100 0.09 -> 0.06: 1.66x speedup -▍ - -This speedup is due to further MMX optimization by Soeren Sandmann for -a case commonly hit when rendering PDF files, (and thanks to Jeff -Muizelaar for writing code to extract the test case for us). - -There's another MMX optimization in this snapshot (without a fancy -speedup chart) by Dan Williams which improves compositing performance -specifically for the OLPC machine. - -Thanks to Adrian Johnson, cairo's PDF output is now much more -efficient in the way it encodes text output. By reducing redundant -information and adding compression to text output streams, Adrian -achieved a ~25x improvement in the efficiency of encoding text in PDF -files, (was ~45 bytes per glyph and is now ~1.6 bytes per glyph). - -Bug fixes ---------- -In addition to those performance improvements, this snapshot includes -several bug fixes: - - * A huge number of bug fixes for cairo-atsui text rendering, (for mac - OS X). These bugs affect font selection, glyph positioning, glyph - rendering, etc. One noteworthy bug fixes is that - cairo_select_font_face will no longer arbitrarily select bold nor - italic when not requested, (at least not when using a standard CSS2 - font family name such as "serif", "sans-serif", "monospace", etc.). - All these fixes are thanks to Brian Ewins who continues to do a - great job as the new cairo-atsui maintainer. - - * Fix PDF output so that images that are scaled down no longer - mysteriously repeat (Carl Worth). - - * Fix segfault on Mac OS X dues to attempt to measure extents of a - zero-length string (Behdad Esfahbod). - - * Fix text extents to not include the size of initial/trailing - non-inked characters (Behdad Esfahbod). - -API tweaks ----------- -Three functions have had API changes to improve consistency. Note that -the API functions being changed here are all functions that were -introduced as new functions during these 1.3.x snapshots. As always, -there will not be any API changes to functions included in a major -release (1.2.x, 1.4.x, etc.) of cairo. - -The changes are as follows: - - * Rename of cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list. - - * Change cairo_get_dash_count to return an int rather than accepting a - pointer to an int for the return value. - - * Change cairo_get_dash to have a void return type rather than - returning cairo_status_t. - -It's possible there will be one more round of changes to these -functions, (and perhaps cairo_get_color_stop as well), as we seek to -establish a unifying convention for returning lists of values. - -Snapshot 1.3.10 (2006-12-23 Carl Worth <cworth@cworth.org>) -=========================================================== -Santa Claus is coming just a little bit early this year, and he's -bringing a shiny new cairo snapshot for all the good little boys and -girls to play with. - -This is the fifth development snapshot in the 1.3 series. It comes 9 -days after the 1.3.8 snapshot, and still well within our goal of -having a new snapshot every week, (though don't expect one next -week---we'll all be too stuffed with sugar plums). - -Speaking of sugar plums, there's a sweet treat waiting in this cairo -snapshot---greatly improved performance for stroking rectilinear -shapes, like the ever common rectangle: - -image-rgb box-outline-stroke-100 0.18 -> 0.01: 25.58x speedup -████████████████████████▋ -image-rgba box-outline-stroke-100 0.18 -> 0.01: 25.57x speedup -████████████████████████▋ -xlib-rgb box-outline-stroke-100 0.49 -> 0.06: 8.67x speedup -███████▋ -xlib-rgba box-outline-stroke-100 0.22 -> 0.04: 5.39x speedup -████▍ - -In past releases of cairo, some people had noticed that using -cairo_stroke to draw rectilinear shapes could be awfully slow. Many -people had worked around this by using cairo_fill with a more complex -path and gotten a 5-15x performance benefit from that. - -If you're one of those people, please rip that workaround out, as now -the more natural use of cairo_stroke should be 1.2-2x faster than the -unnatural use of cairo_fill. - -And if you hadn't ever implemented that workaround, then you just -might get to see your stroked rectangles now get drawn 5-25x faster. - -Beyond that performance fix, there are a handful of bug fixes in this -snapshot: - - * Fix for glyph cache race condition in glitz backend (Jinghua Luo) - - * Many fixes for ATSUI text rendering (Brian Ewins) - - * Un-break recent optimization-triggered regression in rendering text - with a translation in the font matrix (Behdad Esfahbod) - - * Fix make check to work on OPD platforms (IA64 or PPC64) - (Frederic Crozat) - - * Fix a couple of character spacing issues on Windows - (Jonathan Watt) - -Have fun with that, everybody, and we'll be back for more in the new -year, (with a plan to add the last of our performance improvements in -this round, fix a few bad, lingering bugs, and then finish off a nice, -stable 1.4 release before the end of January). - --Carl - -Snapshot 1.3.8 (2006-12-14 Carl Worth <cworth@cworth.org>) -========================================================== -This is the fourth development snapshot in the 1.3 series. It comes -just slightly more than one week after the 1.3.6 snapshot. - -After the bug fixes in 1.3.6, we're back to our original program of -weekly snapshots, each one faster than the one from the week -before. Cairo 1.3.8 brings a 2x improvement in the speed of rendering -linear gradients (thanks to David Turner), and a significant reduction -in X traffic when rendering text (thanks to Xan Lopez and Behdad -Esfahbod), making cairo behave very much like Xft does. - -A few other things in the 1.3.8 snapshot worth noting include a more -forgiving image comparator in the test suite, (using the "perceptual -diff" metric and GPL implementation by Hector Yee[*]), a bug fix for -broken linking on x86_64 (thanks to M Joonas Pihlaja) and an even -better implementation of _cairo_lround, (not faster, but supporting a -more complete input range), from Daniel Amelang. - -[*] http://pdiff.sourceforge.net/ - -Snapshot 1.3.6 (2006-12-06 Carl Worth <cworth@cworth.org>) -========================================================== -This is the third development snapshot in the 1.3 series. It comes two -weeks after the 1.3.4 snapshot. - -We don't have fancy performance charts this week as the primary -changes in this snapshot are bug fixes. The performance work continues -and the next snapshot (planned for one week from today) should include -several improvements. The bug fixes in this snapshot include: - - * Fix undesirable rounding in glyph positioning (Dan Amelang) - - This bug was noticed by several users, most commonly by seeing - improper text spacing or scrambled glyphs as drawn by nautilus. For - example: - - Update to cairo-1.3.4 worsen font rendering - https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=217819 - - * Fix reduced range of valid input coordinates to tessellator - (M Joonas Pihlaja) - - This bug was causing lots of assertion failures in mozilla as - mentioned here: - - CAIRO_BO_GUARD_BITS and coordinate space? - https://lists.freedesktop.org/archives/cairo/2006-December/008743.html - - * Fix several regressions in new tessellator (M Joonas Pihlaja) - - Joonas just had a good eye for detail here. I don't think any - external cairo users had noticed any of these bugs yet. - - * Fix compilation problems of cairo "wideint" code on some platforms - (Mathieu Lacage) - - * Fix failed configure due to broken grep (Dan Amelang) - - This bug was reported here: - - AX_C_FLOAT_WORDS_BIGENDIAN doesn't work because grep doesn't - work with binary file - https://bugs.freedesktop.org/show_bug.cgi?id=9124 - - * Remove the pkg-config minimum version requirement (Behdad Esfahbod) - - Some systems ship with pkg-config 0.15 and there was really no good - reason for cairo to insist on having version 0.19 before it would - build. - -There is also one new (but inert) feature in this snapshot. There's a -new option that can be passed to cairo's configure script: - - --disable-some-floating-point - - Disable certain code paths that rely heavily on double precision - floating-point calculation. This option can improve - performance on systems without a double precision floating-point - unit, but might degrade performance on those that do. - -As of this snapshot, this option does not make any change to cairo, -but it is possible that future versions of cairo will respect this -option and change the implementation of various functions as -appropriate. - -Snapshot 1.3.4 (2006-11-22 Carl Worth <cworth@cworth.org>) -========================================================== -This is the second development snapshot in the 1.3 series. It comes -one week after the 1.3.2 snapshot. - -This snapshot has a couple of significant performance improvements, -and also adds new support for producing multi-page SVG output, (when -targeting SVG 1.2)---thanks to Emmanuel Pacaud. The details of the -performance improvements are as follows: - -1. The long-awaited "new tessellator". - - The credit for this being an improvement goes to Joonas Pihlaja. He - took my really slow code and really put it through its paces to get - the dramatic performance improvement seen below (up to 38x faster - on realistic cases, and more than 10x faster for the zrusin_another - test). - - His own writeup of the work he did is quite thorough, but more than - can be quoted here. Please see his post for the interesting details: - - https://lists.freedesktop.org/archives/cairo/2006-November/008483.html - - (Though note that this snapshot also includes some additional, - significant improvements that were only sketched out in that - email---see "Generating fewer trapezoids"). - -2. More floating-point improvements - - Daniel Amelang continues to work the magic he began in the 1.3.2 - snapshot. This time he short-circuits floating-point - transformations by identity matrices and applies the earlier - floating-to-fixed-point technique to the problem of rounding. - - The improvements here will primarily benefit text performance, and - will benefit platforms without hardware floating-point more than - those that have it, (some text tests show 20% improvement on an x86 - machine and closer to 80% improvement on arm). - -The performance chart comparing 1.3.2 to 1.3.4 really speaks for -itself, (this is on an x86 laptop). This is quite a lot of progress -for one week: - - xlib-rgb stroke_similar_rgba_over-256 74.99 1.45% -> 2.03 68.38%: 36.86x speedup -███████████████████████████████████▉ - xlib-rgb stroke_similar_rgba_source-256 78.23 1.43% -> 3.30 67.05%: 23.71x speedup -██████████████████████▊ - xlib-rgba tessellate-256-100 820.42 0.15% -> 35.06 2.84%: 23.40x speedup -██████████████████████▍ -image-rgba tessellate-256-100 819.55 0.32% -> 35.04 3.56%: 23.39x speedup -██████████████████████▍ - xlib-rgb stroke_image_rgba_over-256 78.10 1.43% -> 4.33 65.56%: 18.04x speedup -█████████████████ - xlib-rgb stroke_image_rgba_source-256 80.11 1.63% -> 5.75 63.99%: 13.94x speedup -█████████████ - xlib-rgba zrusin_another_tessellate-415 89.22 0.35% -> 8.38 5.23%: 10.65x speedup -█████████▋ -image-rgba zrusin_another_tessellate-415 87.38 0.89% -> 8.37 5.22%: 10.44x speedup -█████████▍ -image-rgba zrusin_another_fill-415 117.67 1.34% -> 12.88 2.77%: 9.14x speedup -████████▏ - xlib-rgba zrusin_another_fill-415 140.52 1.57% -> 15.79 2.88%: 8.90x speedup -███████▉ -image-rgba tessellate-64-100 9.68 3.42% -> 1.42 0.60%: 6.82x speedup -█████▉ - xlib-rgba tessellate-64-100 9.78 4.35% -> 1.45 0.83%: 6.72x speedup -█████▊ - xlib-rgb stroke_linear_rgba_over-256 46.01 2.44% -> 7.74 54.51%: 5.94x speedup -█████ - xlib-rgb stroke_linear_rgba_source-256 48.09 2.15% -> 9.14 53.00%: 5.26x speedup -████▎ - xlib-rgb stroke_radial_rgba_over-256 50.96 2.34% -> 12.46 47.99%: 4.09x speedup -███▏ - xlib-rgb stroke_radial_rgba_source-256 53.06 1.57% -> 13.96 46.57%: 3.80x speedup -██▊ -image-rgba paint_similar_rgba_source-256 0.12 1.57% -> 0.08 9.92%: 1.42x speedup -▍ -image-rgba paint_image_rgba_source-256 0.12 2.49% -> 0.08 10.70%: 1.41x speedup -▍ -image-rgba world_map-800 356.28 0.46% -> 275.72 1.15%: 1.29x speedup -▎ - xlib-rgba world_map-800 456.81 0.39% -> 357.95 1.39%: 1.28x speedup -▎ -image-rgb tessellate-16-100 0.09 0.57% -> 0.07 3.43%: 1.23x speedup -▎ -image-rgba tessellate-16-100 0.09 0.06% -> 0.07 2.46%: 1.23x speedup -▎ -image-rgba text_solid_rgb_over-256 5.39 4.01% -> 4.47 0.70%: 1.21x speedup -▎ -image-rgba text_solid_rgba_over-256 5.37 0.82% -> 4.45 0.75%: 1.21x speedup -▎ -image-rgba text_image_rgb_over-64 0.78 0.10% -> 0.65 0.74%: 1.20x speedup -▎ -image-rgba text_image_rgba_over-64 0.78 0.29% -> 0.65 0.68%: 1.19x speedup -▎ -image-rgb text_solid_rgb_over-64 0.76 2.45% -> 0.63 0.81%: 1.19x speedup -▎ -image-rgba text_solid_rgba_over-64 0.76 0.33% -> 0.64 0.66%: 1.19x speedup -▎ -image-rgba text_similar_rgba_over-256 5.99 4.72% -> 5.04 1.09%: 1.19x speedup -▎ - -We should point out that there is some potential for slowdown in this -snapshot. The following are the worst slowdowns reported by the cairo -performance suite when comparing 1.3.2 to 1.3.4: - -image-rgba subimage_copy-256 0.01 0.87% -> 0.01 3.61%: 1.45x slowdown -▌ - xlib-rgb paint_solid_rgb_over-256 0.31 10.23% -> 0.38 0.33%: 1.26x slowdown -▎ -image-rgba box-outline-fill-100 0.01 0.30% -> 0.01 2.52%: 1.21x slowdown -▎ -image-rgba fill_solid_rgb_over-64 0.20 1.22% -> 0.22 1.59%: 1.12x slowdown -▏ -image-rgb fill_similar_rgb_over-64 0.21 1.04% -> 0.24 1.06%: 1.11x slowdown -▏ -image-rgba fill_image_rgb_over-64 0.21 1.19% -> 0.24 0.72%: 1.11x slowdown -▏ -image-rgba fill_similar_rgb_over-64 0.21 0.18% -> 0.24 0.30%: 1.11x slowdown -▏ -image-rgb fill_solid_rgba_over-64 0.22 1.66% -> 0.24 1.15%: 1.11x slowdown -▏ -image-rgb fill_image_rgb_over-64 0.21 0.14% -> 0.24 0.80%: 1.11x slowdown -▏ -image-rgba fill_image_rgba_over-64 0.22 1.34% -> 0.25 0.20%: 1.11x slowdown -▏ -image-rgba fill_solid_rgba_over-64 0.22 1.48% -> 0.24 0.95%: 1.11x slowdown -▏ -image-rgb fill_similar_rgba_over-64 0.22 1.13% -> 0.25 1.25%: 1.10x slowdown -▏ - -The 45% slowdown for subimage_copy is an extreme case. It's unlikely -to hit many applications unless they often use cairo_rectangle; -cairo_fill to copy a single pixel at a time. In any case, it shows a -worst-case impact of the overhead of the new tessellator. The other -slowdowns (~ 10%) are probably more realistic, and still very -concerning. - -We will work to ensure that performance regressions like these are not -present from one major release of cairo to the next, (for example, -from 1.2 to 1.4). - -But we're putting this 1.3.4 snapshot out there now, even with this -potential slowdown so that people can experiment with it. If you've -got complex geometry, we hope you will see some benefit from the new -tessellator. If you've got primarily simple geometry, we hope things -won't slowdown too much, but please let us know what slowdown you see, -if any, so we can calibrate our performance suite against real-world -impacts. - -Thanks, and have fun with cairo! - -Snapshot 1.3.2 (2006-11-14 Carl Worth <cworth@cworth.org>) -========================================================== -This is the first development snapshot since the 1.2 stable series -branched off shortly after the 1.2.4 release in August 2006. - -This snapshot includes all the bug fixes from the 1.2.6 release, -(since they originated here on the 1.3 branch first and were -cherry-picked over to 1.2). But more importantly, it contains some new -API in preparation for a future 1.4 release, and most importantly, it -contains several performance improvements. - -The bug fixes will not be reviewed here, as most of them are already -described in the 1.2.6 release notes. But details for the new API and -some performance improvements are included here. - -As with all snapshots, this is experimental code, and the new API -added here is still experimental and is not guaranteed to appear -unchanged in any future release of cairo. - -API additions -------------- -Several new API additions are available in this release. There is a -common theme among all the additions in that they allow cairo to -advertise information about its state that it was refusing to -volunteer earlier. So this isn't groundbreaking new functionality, but -it is essential for easily achieving several tasks. - -The new functions can be divided into three categories: - - Getting information about the current clip region - ------------------------------------------------- - cairo_clip_extents - cairo_copy_clip_rectangles - cairo_rectangle_list_destroy - - Getting information about the current dash setting - -------------------------------------------------- - cairo_get_dash_count - cairo_get_dash - - Getting information from a pattern - ---------------------------------- - cairo_pattern_get_rgba - cairo_pattern_get_surface - cairo_pattern_get_color_stop_rgba - cairo_pattern_get_color_stop_count - cairo_pattern_get_linear_points - cairo_pattern_get_radial_circles - -In each of these areas, we have new API for providing a list of -uniform values from cairo. The closest thing we had to this before was -cairo_copy_path, (which is rather unique in providing a list of -non-uniform data). - -The copy_clip_rectangles/rectangle_list_destroy functions follow a -style similar to that of cairo_copy_path. Meanwhile, the dash and -pattern color stop functions introduce a new style in which there is a -single call to return the number of elements available (get_dash_count -and get_color_stop_count) and then a function to be called once to get -each element (get_dash and get_color_stop_rgba). - -I'm interested in hearing feedback from users of these new API -functions, particularly from people writing language bindings. One -open question is whether the clip "getter" functionality should adopt -a style similar to that of the new dash and color_stop interfaces. - -API deprecation ---------------- -The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never -worked as a format value for cairo_image_surface_create, and it wasn't -necessary for supporting 16-bit 565 X server visuals. - -XCB backend changes -------------------- -The XCB backend has been updated to track the latest XCB API (which -recently had a 1.0 release). - -New quartz backend ------------------- -Vladimir Vukicevic has written a new "native quartz" backend which -will eventually replace the current "image-surface wrapping" quartz -backend. For now, both backends are available, (the old one is -"quartz" and the new one is "nquartz"). But it is anticipated that the -new backend will replace the old one and take on the "quartz" name -before this backend is marked as supported in a release of cairo. - -New OS/2 backend ----------------- -Doodle and Peter Weilbacher have contributed a new, experimental -backend for using cairo on OS/2 systems. - -Performance improvements ------------------------- -Here are some highlights from cairo's performance suite showing -improvements from cairo 1.2.6 to cairo 1.3.2. The command used to -generate this data is: - - ./cairo-perf-diff 1.2.6 HEAD - -available in the perf/ directory of a recent checkout of cairo's -source, (the cairo-perf-diff script does require a git checkout and -will not work from a tar file---though ./cairo-perf can still be used -to generate a single report there and ./cairo-perf-diff-files can be -used to compare two reports). - -Results are described below both for an x86 laptop (with an old Radeon -video card, recent X.org build, XAA, free software drivers), as well -as for a Nokia 770. First the x86 results with comments on each, (all -times are reported in milliseconds). - -Copying subsets of an image surface to an xlib surface (much faster) --------------------------------------------------------------------- - xlib-rgba subimage_copy-512 10.50 -> : 53.97x speedup -█████████████████████████████████████████████████████ - -Thanks to Christopher (Monty) Montgomery for this big performance -improvement. Any application which has a large image surface and is -copying small pieces of it at a time to an xlib surface, (imagine an -application that loads a single image containing all the "sprites" for -that application), will benefit from this fix. The larger the ratio of -the image surface to the portion being copied, the larger the benefit. - -Floating-point conversion (3x faster) -------------------------------------- - xlib-rgba pattern_create_radial-16 27.75 -> 3.93 : 2.94x speedup -██ -image-rgb pattern_create_radial-16 26.06 -> 3.74 : 2.90x speedup -█▉ - -Thanks to Daniel Amelang, (and others who had contributed the idea -earlier), for this nice improvement in the speed of converting -floating-point values to fixed-point. - -Text rendering (1.3 - 2x faster) ------------------------------- - xlib-rgba text_image_rgba_source-256 319.73 -> 62.40 : 2.13x speedup -█▏ -image-rgb text_solid_rgba_over-64 2.85 -> 0.88 : 1.35x speedup -▍ - -I don't think we've ever set out to improve text performance -specifically, but we did it a bit anyway. I believe the extra -improvement in the xlib backend is due to Monty's image copying fix -above, and the rest is due to the floating-point conversion speedup. - -Thin stroke improvements (1.5x faster) ---------------------------------------------- -image-rgb world_map-800 1641.09 -> 414.77 : 1.65x speedup -▋ - xlib-rgba world_map-800 1939.66 -> 529.94 : 1.52x speedup -▌ - -The most modest stuff to announce in this release is the 50% -improvement I made in the world_map case. This is in improvement that -should help basically anything that is doing strokes with many -straight line segments, (and the thinner the better, since that makes -tessellation dominate rasterization). The fixes here are to use a -custom quadrilateral tessellator rather than the generic tessellator -for straight line segments and the miter joins. - -Performance results from the Nokia 770 --------------------------------------- - xlib-rgba subimage_copy-512 55.88 -> 2.04 : 27.34x speedup -██████████████████████████▍ - xlib-rgb text_image_rgb_over-256 1487.58 -> 294.43 : 5.05x speedup -████ -image-rgb pattern_create_radial-16 187.13 -> 91.86 : 2.04x speedup -█ - xlib-rgba world_map-800 21261.41 -> 15628.02 : 1.36x speedup -▍ - -Here we see that the subimage_copy improvement was only about half as -large as the corresponding improvement on my laptop, (27x faster -compared to 54x) and the floating-point conversion fix also was quite -as significant, (2x compared to 3x). Oddly the improvement to text -rendering performance was more than twice as good (5x compared to -2x). I don't know what the reason for that is, but I don't think it's -anything anybody should complain about. - -Release 1.2.6 (2006-11-02 Behdad Esfahbod <behdad@behdad.org>) -============================================================== -This is the third bug fix release in the 1.2 series, coming less than -two months after the 1.2.4 release made on August 18. - -The 1.2.4 release turned out to be a pretty solid one, except for a crasher -bug when forwarding an X connection where the client and the server have -varying byte orders, eg. from a PPC to an i686. Other than that, various -other small bugs have been fixed. - -Various improvements have been made in the testing infrastructure to prevent -false positives, and to make sure the generated cairo shared object behaves as -expected in terms of exported symbols and relocations. - -There were a total of 89 changes since 1.2.4. The following list the most -important ones: - -Common fixes ------------- -- Avoid unsigned loop control variable to eliminate infinite, - memory-scribbling loop. (#7593) -- Fix cairo_image_surface_create to report INVALID_FORMAT errors. - Previously the detected error was being lost and a nil surface was - returned that erroneously reported CAIRO_STATUS_NO_MEMORY. -- Change _cairo_color_compute_shorts to not rely on any particular - floating-point epsilon value. (#7497) -- Fix infinite-join test case (bug #8379) -- Pass correct surface to create_similar in _cairo_clip_init_deep_copy(). - -PS/PDF fixes ------------- -- Fix Type 1 embedding in PDF. -- Correct the value of /LastChar in the PDF Type 1 font dictionary. -- Improve error checking in TrueType subsetting. -- Compute right index when looking up left side bearing. (bug #8180) -- Correct an unsigned to signed conversion problem in truetype subsetting - bbox. -- Type1 subsetting: Don't put .notdef in Encoding when there are 256 glyphs. -- Add cairo version to PS header / PDF document info dictionary. -- Set CTM before path construction. - -Win32 fixes ------------ -- Get correct unhinted outlines on win32. (bug 7603) -- Make cairo as a win32 static library possible. -- Use CAIRO_FORMAT_RGB24 for BITSPIXEL==32 surfaces too. - -Build system fixes ------------------- -- Define WINVER if it's not defined. (bug 6456) -- Fix the AMD64 final link by removing SLIM from pixman. -- Misc win32 compilation fixes. -- Add Sun Pro C definition of pixman_private. -- Use pixman_private consistently as prefix not suffix. -- Added three tests check-plt.sh, check-def.sh, and check-header.sh that check - that the shared object, the .def file, and the public headers agree about - the exported symbols. -- Require pkg-config 0.19. (#8686) - - -Release 1.2.4 (2006-08-18 Carl Worth <cworth@cworth.org>) -========================================================= -This is the second bug fix release in the 1.2 series, coming less than -two weeks after the 1.2.2 release made on August 8. - -The big motivation for a quick release was that there were a log of -build system snags that people ran into with the 1.2.2 release. But, -by the time we got those all done, we found that we had a bunch of -fixes for cairo's rendering as well. So there's a lot of goodness in -here for such a short time period. - -Rendering fixes ---------------- -Fix image surfaces to not be clipped when used as a source (Vladimir Vukicevic) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=72e25648c4c4bc82ddd938aa4e05887a293f0d8b - -Fix a couple of corner cases in dashing degenerate paths (Jeff Muizelaar) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=fbb1758ba8384650157b2bbbc93d161b0c2a05f0 - -Fix support for type1 fonts on win32 (Adrian Johnson) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=da1019c9138695cb838a54f8b871bbfd0e8996d7 - -Fix assertion failure when rotating bitmap fonts (Carl Worth) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=0bfa6d4f33b8ddb5dc55bbe419c15df4af856ff9 - -Fix assertion failure when calling cairo_text_path with bitmap fonts (Carl Worth) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=9878a033531e6b96b5f27e69e10e90dee7440cd9 - -Fix mis-handling of cairo_close_path in some situations (Tim Rowley, Carl Worth) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=53f74e59faf1af78f2f0741ccf1f23aa5dad4efc - -Respect font_matrix translation in _cairo_gstate_glyph_path (Behdad Esfahbod) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=f183b835b111d23e838889178aa8106ec84663b3 - -Fix vertical metrics adjustment to work with non-identity shapes (Behdad Esfahbod) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7bc263842a798d657a95e539e1693372448837f - -[PS] Set correct ImageMatrix in _cairo_ps_surface_emit_bitmap_glyph_data (Behdad Esfahbod) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=d47388ad759b0a1a0869655a87d9b5eb6ae2445d - -Build system fixes ------------------- -Fix xlib detection to prefer pkg-config to avoid false libXt dependency (Behdad Esfahbod) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=0e78e7144353703cbd28aae6a67cd9ca261f1d68 - -Fix typos causing win32 build problem with PS,PDF, and SVG backends (Behdad Esfahbod) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=aea83b908d020e26732753830bb3056e6702a774 - -Fix configure cache to not use stale results (Behdad Esfahbod) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=6d0e3260444a2d5b6fb0cb223ac79f1c0e7b3a6e - -Fix to not pass unsupported warning options to the compiler (Jens Granseuer) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=97524a8fdb899de1ae4a3e920fb7bda6d76c5571 - -Fix to allow env. variables such as png_REQUIRES to override configure detection (Jens Granseuer) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=abd16e47d6331bd3811c908e524b4dcb6bd23bf0 - -Fix test suite to not use an old system cairo when converting svg2png (Behdad Esfahbod) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=6122cc85c8f71b1ba2df3ab86907768edebe1781 - -Fix test suite to not require signal.h to be present (Behdad Esfahbod) -https://gitweb.freedesktop.org/?p=cairo;a=commit;h=6f8cf53b1e1ccdbe1ab6a275656b19c6e5120e40 - -Code cleanups -------------- -Many useful warnings cleanups from sparse, valgrind, and careful eyes -(Kjartan Maraas, Pavel Roskin) - -Release 1.2.2 (2006-08-08 Carl Worth <cworth@cworth.org>) -========================================================= -This is the first bug fix release in the 1.2 series since the original -1.2.0 release made six weeks ago. - -There were some very serious bugs in the 1.2.0 release, (see below), -so everybody is encouraged to upgrade from 1.2.0 to 1.2.2. The 1.2.2 -release maintains source and binary compatibility with 1.2.0 and does -not make any API additions. - -Fix crashes with BGR X servers ------------------------------- -With cairo 1.2.0 many people reported problems with all cairo-using -programs, (including all GTK+ programs with GTK+ >= 2.8) immediately -crashing with a complaint about an unsupported image format. This bug -affected X servers that do not provide the Render extension and that -provide a visual with BGR rather than RGB channel order. - -report: https://bugs.freedesktop.org/show_bug.cgi?id=7294 -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=9ae66174e774b57f16ad791452ed44efc2770a59 - -Fix the "disappearing text" bug -------------------------------- -With cairo 1.2.0 many people reported that text would disappear from -applications, sometimes reappearing with mouse motion or -selection. The text would disappear after the first space in a string -of text. This bug was caused by an underlying bug in (very common) X -servers, and only affected text rendered without antialiasing, (either -a bitmap font or a vector font with antialiasing disabled). The bug -was also exacerbated by a KDE migration bug that caused antialiasing -to be disabled more than desired. - -report: https://bugs.freedesktop.org/show_bug.cgi?id=7494 -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=456cdb3058f3b416109a9600167cd8842300ae14 -see also: -Xorg: https://bugs.freedesktop.org/show_bug.cgi?id=7681 -KDE: http://qa.mandriva.com/show_bug.cgi?id=23990 - -Fix broken image fallback scaling (aka. "broken printing") ----------------------------------------------------------- -The various "print" backends, (pdf, ps, and svg), sometimes fallback -to using image-based rendering for some operations. In cairo 1.2.0 -these image fallbacks were scaled improperly. Applications using cairo -can influence the resolution of the image fallbacks with -cairo_surface_set_fallback_resolution. With the bug, any value other -than 72.0 would lead to incorrect results, (larger values would lead -to increasingly shrunken output). - -report: https://bugs.freedesktop.org/show_bug.cgi?id=7533 -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=1feb4291cf7813494355459bb547eec604c54ffb - -Fix inadvertent semantic change of font matrix translation (Behdad Esfahbod) ----------------------------------------------------------------------------- -The 1.2.0 release introduced an inadvertent change to how the -translation components of a font matrix are interpreted. In the 1.0 -series, font matrix translation could be used to offset the glyph -origin, (though glyph metrics were reported incorrectly in -1.0). However in 1.2.0, the translation was applied to the advance -values between each glyph. The 1.2.0 behavior is fairly useless in -practice, and it was not intentional to introduce a semantic -change. With 1.2.2 we return to the 1.0 semantics, with a much better -implementation that provides correct glyph metrics. - -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=84840e6bba6e72aa88fad7a0ee929e8955ba9051 - -Fix create_similar to preserve fallback resolution and font options (Behdad Esfahbod) -------------------------------------------------------------------------------------- -There has been a long-standing issue with cairo_surface_create_similar -such that font options and other settings from the original -destination surface would not be preserved to the intermediate -"similar" surface. This could result in incorrect rendering -(particularly with respect to text hinting/antialiasing) with -fallbacks, for example. - -report: https://bugs.freedesktop.org/show_bug.cgi?id=4106 -fixes: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=9fcb3c32c1f16fe6ab913e27eb54d18b7d9a06b0 - https://gitweb.freedesktop.org/?p=cairo;a=commit;h=bdb4e1edadb78a2118ff70b28163f8bd4317f1ec - -xlib: Fix text performance regression from 1.0 to 1.2.0 (Vladimir Vukicevic) ----------------------------------------------------------------------------- -Several people noticed that upgrading from cairo 1.0 to cairo 1.2.0 -caused a significant performance regression when using the xlib -backend. This performance regression was particularly noticeable when -doing lots of text rendering and when using a high-latency connection -to the X server, (such as a remote X server over an ssh -connection). The slowdown was identified and fixed in 1.2.2. - -report: https://bugs.freedesktop.org/show_bug.cgi?id=7514 -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7191885c88068dad57d68ced69a752d1162b12c - -PDF: Eliminate dependency on FreeType library dependency (Adrian Johnson) -------------------------------------------------------------------------- -The cairo 1.2 series adds a supported pdf backend to cairo. In cairo -1.2.0 this backend required the freetype library, which was an -undesirable dependency on systems such as win32, (cairo is designed to -always prefer the "native" font system). As of cairo 1.2.2 the -freetype library is not required to use the pdf backend on the win32 -platform. - -report: https://bugs.freedesktop.org/show_bug.cgi?id=7538 -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=a0989f427be87c60415963dd6822b3c5c3781691 - -PDF: Fix broken output on amd64 (Adrian Johnson) ------------------------------------------------- -report: https://bugzilla.gnome.org/show_bug.cgi?id=349826 -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=f4b12e497b7ac282b2f6831b8fb68deebc412e60 - -PS: Fix broken output for truetype fonts > 64k (Adrian Johnson) ---------------------------------------------------------------- -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=067d97eb1793a6b0d0dddfbd0b54117844511a94 - -PDF: Fix so that dashing doesn't get stuck on (Kent Worsnop) ------------------------------------------------------------- -Kent notices that with the PDF backend in cairo 1.2.0 as soon as a -stroke was performed with dashing, all subsequent strokes would also -be dashed. There was no way to turn dashing off again. - -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=778c4730a86296bf0a71080cf7008d7291792256 - -Fix memory leaks in failure paths in gradient creation (Alfred Peng) --------------------------------------------------------------------- -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=db06681b487873788b51a6766894fc619eb8d8f2 - -Fix memory leak in _cairo_surface_show_glyphs (Chris Wilson) ------------------------------------------------------------- -report: https://bugs.freedesktop.org/show_bug.cgi?id=7766 -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=e2fddcccb43d06486d3680a19cfdd5a54963fcbd - -Solaris: Add definition of cairo_private for some Sun compilers (Alfred Peng) ------------------------------------------------------------------------------ -report: https://bugzilla.mozilla.org/show_bug.cgi?id=341874 -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=04757a3aa8deeff3265719ebe01b021638990ec6 - -Solaris: Change version number of Sun's Xorg server with buggy repeat (Brian Cameron) -------------------------------------------------------------------------------------- -report: https://bugs.freedesktop.org/show_bug.cgi?id=7483 -fix: https://gitweb.freedesktop.org/?p=cairo;a=commit;h=e0ad1aa995bcec4246c0b8ab0d5a5a79871ce235 - -Various memory leak fixes -------------------------- -Fix memory leak in _cairo_surface_show_glyphs (bug 7766) -Fix file handle leak in failure path (bug 7616) -Fix some memory leaks in the test cases. -Fix some memory leaks in font subsetting code used in print backends. - -Documentation improvements (Behdad Esfahbod) --------------------------------------------- -Added new documentation for several functions (cairo_show_page, -cairo_copy_page, cairo_in_stroke, cairo_in_fill). - -Fixed some syntax errors that were preventing some existing -documentation from being published. - -Fixed several minor typographical errors. - -Added an index for new symbols in 1.2. - -Release 1.2.0 (2006-06-27 Carl Worth <cworth@cworth.org>) -========================================================= -This is the culmination of the work that has gone on within the 1.1 -branch of cairo. - -There has been one API addition since the cairo 1.1.10 snapshot: - - cairo_xlib_surface_get_width - cairo_xlib_surface_get_height - -There's also a new feature without any API change: - - Dots can now be drawn by using CAIRO_LINE_CAP_ROUND with - degenerate sub-paths, (cairo_move_to() followed by either - cairo_close_path() or a cairo_line_to() to the same location). - -And at least the following bugs have been fixed: - - 6759 fontconfig option AntiAlias doesn't work in cairo 1.1.2 - 6955 Some characters aren't displayed when using xlib (cache u... - 7268 positive device_offset values don't work as source - * PDF emit_glyph function needs to support bitmapped glyphs - * PS emit_glyph function needs to support bitmapped glyphs - * SVG emit_glyph function needs to support bitmapped glyphs - * PDF: minefield page one is falling back unnecessarily - * PS/PDF: Fix broken placement for vertical glyphs - * PS: Fix to not draw BUTT-capped zero-length dash segments - * Do device offset before float->fixed conversion - https://bugzilla.gnome.org/show_bug.cgi?id=332266 - * PS: Fix source surfaces with transformations - * PS: Fix to not draw BUTT-capped degnerate sub-paths - * PS: Don't walk off end of array when printing "~>" - * Fix some memory leaks in the test suite rig - * SVG: Fix memory leak when using cairo_mask - * Fix EXTEND_REFLECT and EXTEND_PAD to not crash (though these are - still not yet fully implemented for surface patterns). - -This has been a tremendous effort by everyone, and I'm proud to have -been a part of it. Congratulations to all contributors to cairo! - -Snapshot 1.1.10 (2006-06-16 Carl Worth <cworth@cworth.org>) -=========================================================== -This is the fifth in a series of snapshots working toward the 1.2 -release of cairo. - -The primary motivation for this snapshot is to fix a long-standing bug -that had long been silent, but as of the 1.1.8 snapshot started -causing crashes when run against 16-bit depth X servers, (often Xvnc -or Xnest). The fix for this adds a new CAIRO_FORMAT_RGB16_565 to the -API. - -This snapshot also includes a rewrite of cairo's SVG backend to -eliminate the dependency on libxml2. With this in place, cairo 1.2 -will not depend on any libraries that cairo 1.0 did not. - -As usual, there are also a few fixes for minor bugs. - -Snapshot 1.1.8 (2006-06-14 Carl Worth <cworth@cworth.org>) -========================================================== -This is the fourth in a series of snapshots working toward the 1.2 -release of cairo. At this point, all major features of the 1.2 release -are in place, leaving just a few bug fixes left. - -In particular, there well be no additional API changes between this -1.1.8 snapshot and the 1.2 release. - -The announcement for 1.1.6 mentioned several API changes being -considered. Only one of these changes was actually implemented -(set_dpi -> fallback_resolution). This change does introduce one -source-level incompatibility with respect to previous 1.1.x snapshots, -so see below for details. - -Here is an abbreviated summary of changes since the 1.1.6 snapshot: - -** API Change ** ----------------- -According to the plan mentioned in the 1.1.6 notes, one source-level -incompatible change has been implemented. The following three -functions have been removed from cairo's API: - - cairo_pdf_surface_set_dpi - cairo_ps_surface_set_dpi - cairo_svg_surface_set_dpi - -and in their place the following function has been added: - - cairo_surface_set_fallback_resolution - -The signature and semantics of the function remains the same, so it is -a simple matter of changing the name of the function when calling -it. As a transition mechanism, this snapshot will (on many systems) -build to include the old symbols so that code previously compiled will -still run. However, all source code using the old names must be -updated before it will compile. And the upcoming 1.2 release is not -anticipated to include the old symbols. - -Finally, it should be pointed out that the old symbols never existed -in the supported API of any stable release of cairo. (In the stable -1.0 releases the PDF, PS, and SVG backends were advertised as -experimental and unstable.) - -And, as always, cairo continues to maintain source and binary -compatibility between major releases. So applications compiled against -supported backends in a stable release of cairo (1.0.4 say) will -continue to compile and run without modification against new major -releases (1.2.0 say) without modification. - -API additions -------------- -The following new functions have been added to cairo's API: - - cairo_surface_get_content - cairo_debug_reset_static_data - cairo_image_surface_get_data - cairo_image_surface_get_format - cairo_image_surface_get_stride - cairo_win32_font_face_create_for_hfont - -New, backend-specific pkg-config files --------------------------------------- -In addition to the original cairo.pc file, cairo will also now install -a pkg-config files for each configured backend, (for example -cairo-pdf.pc, cairo-svg.pc, cairo-xlib.pc, cairo-win32.pc, etc.) this -also includes optional font backends (such as cairo-ft.pc) and the -optional png functionality (cairo-png.pc). - -These new pkg-config files should be very convenient for allowing -cairo-using code to easily check for the existing of optional -functionality in cairo without having to write complex rules to grub -through cairo header files or the compiled library looking for -symbols. - -Printing backend (PS, PDF, and SVG) ------------------------------------ -Improving the quality of the "printing" backends has been a priority -of the development between cairo 1.1.6 and cairo 1.1.8. - -The big improvement here is in the area of text output. Previously, at -best, text was output as paths without taking advantage of any font -support available in the output file format. - -Now, at the minimum text paths will be shared by using type3 fonts -(for PS and PDF---and similarly, defs for SVG). Also, if possible, -type3 and truetype fonts will be embedded in PostScript and PDF -output. There are still some known bugs with this, (for example, -selecting text in a cairo-generated PDF file with an embedded truetype -font does not work). So there will be some more changes in this area -before cairo 1.2, but do try test this feature out as it exists so -far. - -Many thanks to Kristian Høgsberg for the truetype and type1 font -embedding. - -win32 backend -------------- -Performance improvements by preferring GDI over pixman rendering when possible. -Fixes for text rendering. - -xlib backend ------------- -Fix potentially big performance bug by making xlib's create_similar -try harder to create a pixmap of a depth matching that of the screen. - -Bug fixes ---------- -Among various other fixes, the following bugs listed in bugzilla have -been fixed: - - Bug 2488: Patch to fix pixman samping location bug (#2488). - https://bugs.freedesktop.org/show_bug.cgi?id=2488 - - Bug 4196: undef MIN an MAX before defining to avoid duplicate definition - https://bugs.freedesktop.org/show_bug.cgi?id=4196 - - Bug 4723: configure.in: Fix m4 quoting when examining pkg-config version - https://bugs.freedesktop.org/show_bug.cgi?id=4723 - - Bug 4882: Flag Sun's X server has having buggy_repeat. - https://bugs.freedesktop.org/show_bug.cgi?id=4882 - - Bug 5306: test/pdf2png: Add missing include of stdio.h - https://bugs.freedesktop.org/show_bug.cgi?id=5306 - - Bug 7075: Fix make clean to remove cairo.def - https://bugs.freedesktop.org/show_bug.cgi?id=7075 - -(Many thanks to Behdad Esfahbod for helping us track down and fix many -of these.) - -Snapshot 1.1.6 (2006-05-04 Carl Worth <cworth@cworth.org>) -========================================================== -This is the third in a series of snapshots working toward the imminent -1.2 release of cairo. For a list of items still needing work on the -cairo 1.2 roadmap, please see: - - https://cairographics.org/ROADMAP - -As can be seen in that list, there are no longer any API additions -left on the roadmap. Instead, there is a feature (PDF type 3 fonts) a -performance optimization (X server gradients) and a list of bug -fixes. This gives us a fair amount of freedom to cut the 1.2 release -at almost any point by deciding to defer remaining bug fixes to -subsequent maintenance releases such as 1.2.2 and 1.2.4. - -Before we will do that, we must first be wiling to commit to all the -new API additions. As a heads-up, there are a couple of potential API -changes being considered. (Note that these are changes to new API -introduced during 1.1 so these will not introduce API -incompatibilities compared to the stable 1.0 series). The changes -being considered are: - - cairo_get_group_target: may acquire x and y offset return - parameters. May also be eliminated in favor of - cairo_get_target assuming its role - - cairo_pdf_surface_set_dpi: - cairo_ps_surface_set_dpi: - cairo_svg_surface_set_dpi: These functions may be removed in favor - of a new cairo_surface_set_fallback_resolution - -Additionally there is the possibility of a slight change in the -semantics of cairo_set_line_width. We believe the current behavior of the sequence: - - cairo_set_line_width; ... change CTM ...; cairo_stroke; - -is buggy. It is currently behaving the same as: - - ... change CTM ...; cairo_set_line_width; cairo_stroke; - -We are considering fixing this bug before 1.2 with the hope that -nobody is already relying on the buggy behavior described here. Do -shout if you suspect you might be in that position. - -The items included in this snapshot (since the 1.1.4 snapshot) are -described below. - -API additions -------------- -The long-awaited group-rendering support is now available with the -following function calls: - - cairo_push_group - cairo_push_group_with_content - cairo_pop_group - cairo_pop_group_to_source - cairo_get_group_target - -This API provides a much more convenient mechanism for doing rendering -to an intermediate surface without the need to manually create a -temporary cairo_surface_t and a temporary cairo_t and clean them up -afterwards. - -Add the following missing get function to complement -cairo_surface_set_device_offset: - - cairo_surface_get_device_offset - -PDF backend (API addition) --------------------------- -The PDF backend now provides for per-page size changes, (similar to -what the PostScript backend got in the 1.1.4 snapshot). The new API -is: - - cairo_pdf_surface_set_size - -Xlib backend (API additions) ----------------------------- -The following functions have been added to allow the extraction of -Xlib surface: - - cairo_xlib_surface_get_display - cairo_xlib_surface_get_drawable - cairo_xlib_surface_get_screen - cairo_xlib_surface_get_visual - cairo_xlib_surface_get_depth - -XCB backend (experimental) --------------------------- -Update backend so that it now compiles with the recent XCB 0.9 release. - -Bug fixes and memory leak cleanup ---------------------------------- -Various little things, nothing too significant though. - -Snapshot 1.1.4 (2006-05-03 Carl Worth <cworth@cworth.org>) -========================================================== -This is the second in a series of snapshots working toward the -upcoming 1.2 release of cairo. For a list of items still needing work -on the cairo 1.2 roadmap, please see: - - https://cairographics.org/ROADMAP - -The items included in this snapshot (since the 1.1.2 snapshot) are -described below. - -PostScript backend: new printing-oriented API ---------------------------------------------- -We anticipate that with cairo 1.2, toolkits will begin to use cairo -for printing on systems that use PostScript as the spool format. To -support this use case, we have added 4 new function calls that are -specific to the PostScript backend: - - cairo_ps_surface_set_size - cairo_ps_surface_dsc_comment - cairo_ps_surface_dsc_begin_setup - cairo_ps_surface_dsc_begin_page_setup - -These functions allow variation of the page size/orientation from one -page to the next in the PostScript output. They also allow the toolkit -to provide per-document and per-page printer control options in a -device-independent way, (for example, by using PPD options and -emitting them as DSC comments into the PostScript output). This should -allow toolkits to provide very fine-grained control of many options -available in printers, (media size, media type, tray selection, etc.). - -SVG backend: builds by default, version control ------------------------------------------------ -The SVG backend continues to see major improvements. It is expected -that the SVG backend will be a supported backend in the 1.2 -release. This backend will now be built by default if its dependencies -(freetype and libxml2) are met. - -Additionally, the SVG backend now has flexibility with regard to what -version of SVG it targets. It will target SVG 1.1 by default, which -will require image fallbacks for some of the "fancier" cairo -compositing operators. Or with the following new function calls: - - cairo_svg_surface_restrict_to_version - cairo_svg_get_versions - cairo_svg_version_to_string - -it can be made to target SVG 1.2 in which there is native support for -these compositing operators. - -Bug fixes ---------- -At least the following bugs have been fixed since the 1.1.2 snapshot: - -crash at XRenderAddGlyphs -https://bugs.freedesktop.org/show_bug.cgi?id=4705 - -Can't build cairo-1.1.2 on opensolaris due to " void function cannot return value" -https://bugs.freedesktop.org/show_bug.cgi?id=6792 - -Missing out-of-memory check at gfx/cairo/cairo/src/cairo-atsui-font.c:185 -https://bugzilla.mozilla.org/show_bug.cgi?id=336129 - -A couple of memory leaks. - -Snapshot 1.1.2 (2006-04-25 Carl Worth <cworth@cworth.org>) -========================================================== -This is the first in a series of snapshots working toward the upcoming -1.2 release of cairo. (Subsequent snapshot will use successive even -numbers for the third digit, 1.1.4, 1.1.6, etc.) This snapshot is -backwards-compatible with the 1.0 series---it makes a few API -additions but does not remove any API. - -PostScript and PDF backends are no longer "experimental" --------------------------------------------------------- -The major theme of the 1.2 release is improved PostScript and PDF -backends for cairo. Unlike the 1.0 series, in the 1.2 series these -backends will not be marked as experimental and will be enabled by -default. We encourage people to test this snapshot and the PS/PDF -backends in particular as much as possible. - -The PostScript and PDF output is not yet ideal. - - * One major problem with the PostScript output is that image - fallbacks are used more often than strictly necessary, and the - image fallbacks are at a lower resolution than desired, (the - cairo_ps_surface_set_dpi call is ignored). - - * The major drawback of the current PDF backend implementation is - its text support. Every glyph is represented by a filled path in - the PDF file. The causes file sizes to be much larger and - rendering to be much slower than desired. - -It is anticipated that both of these shortcomings will see some -improvements before the final 1.2 release. - -In spite of those shortcomings, we hope that the PS and PDF backends -will yield faithful results for pretty much any cairo operations you -can throw at them. Please let us know if you are getting obviously -"different" results from the PS/PDF backends than from the image or -xlib backends. - -Other new experimental backends -------------------------------- -This snapshot includes three new backends that did not exist in the -1.0 series: - - * beos backend - - * directfb backend - - * svg backend - -These are all currently marked "experimental" and are disabled by -default. But the SVG backend in particular has seen a lot of recent -development and is very close to passing the entire cairo test -suite. It is possible that this backend will become a fully supported -backend by the time of the cairo 1.2 release. - -Public API additions --------------------- -There have been a few new API functions added to cairo, including: - -New get_type functions for querying sub-types of object: - - cairo_surface_get_type - cairo_pattern_get_type - cairo_font_face_get_type - cairo_scaled_font_get_type - -More convenience in working with cairo_scaled_font_t with new getter -functions: - - cairo_scaled_font_get_font_face - cairo_scaled_font_get_font_matrix - cairo_scaled_font_get_ctm - cairo_scaled_font_get_font_options - -As well as a convenience function for setting a scaled font into a -cairo context: - - cairo_set_scaled_font - -and a function to allow text extents to be queried directly from a -scaled font, (without requiring a cairo_surface_t or a cairo_t): - - cairo_scaled_font_text_extents - -These new scaled font functions were motivated by the needs of the -pango library. - -Finally, a new path-construction function was added which clears the -current point in preparation for a new sub path. This makes cairo_arc -easier to use in some situations: - - cairo_new_sub_path - -Before the 1.2 release is final we do still plan a few more API -additions specifically motivated by the needs of Mozilla/Firefox. - -Optimizations and bug fixes ---------------------------- -Shortly after the 1.0 maintenance series branched off the mainline -there was a major rework of the cairo font internals. This should -provide some good performance benefits, but it's also another area -people should look at closely for potential regressions. - -There has not yet been any widespread, systematic optimization of -cairo, but various performance improvements have been made, (and some -of them are fairly significant). So if some things seem faster than -1.0 then things are good. If there are any performance regressions -compared to 1.0 then there is a real problem and we would like to hear -about that. - -There has been a huge number of bug fixes---too many to mention in -detail. Again, things should be better, and never worse compared to -1.0. Please let us know if your testing shows otherwise. - -Release 1.0.2 (2005-10-03 Carl Worth <cworth@cworth.org>) -========================================================= -For each bug number XXXX below, see: - - https://bugs.freedesktop.org/show_bug.cgi?id=XXXX - -for more details. - -General bug fixes ------------------ - * 4408 - Add support for dashing of stroked curves - (Carl Worth) - - * 4409 - Fix dashing so that each dash is capped on both ends - (Carl Worth) - - * 4414 - Prevent SIGILL failures (proper use of -mmmx and -msse flags) - (Sebastien Bacher, Billy Biggs) - - * 4299 - Fix crashes with text display in multi-threaded program - (Alexey Shabalin, Carl Worth) - - * 4401 - Do not use sincos function since it is buggy on some platforms) - (Tim Mooney, Carl Worth) - - * 4245 - Fix several bugs in the test suite exposed by amd64 systems - (Seemant Kulleen, Carl Worth) - - * 4321 - Add missing byteswapping on GetImage/PutImage - (Sjoerd Simons, Owen Taylor) - - * 4220 - Make the check for rectangular trapezoids simpler and more accurate - (Richard Stellingwerff, Owen Taylor) - - * 4260 - Add missing channel-order swapping for antialised fonts - (Barbie LeVile, Owen Taylor) - - * 4283 - Fix compilation failure with aggressive inlining (gcc -O3) - (Marco Manfredini, Owen Taylor) - - * 4208 - Fix some warnings from sparse - (Kjartan Maraas, Billy Biggs) - - * 4269 - Fix to not crash when compiled with -fomit-frame-pointer - (Ronald Wahl, Owen Taylor) - - * 4263 - Improve performance for vertical gradients - (Richard Stellingwerff, Owen Taylor) - - * 4231 - * 4298 - Accommodate gentoo and Mandriva versions in X server vendor string check - (Billy Biggs, Frederic Crozat, Owen Taylor) - -win32-specific fixes --------------------- - * 4599 - Fix "missing wedges" on some stroked paths (win32) - (Tim Rowley, Jonathan Watt, Bertram Felgenhauer, Carl Worth, Keith Packard) - - * 4612 - Fix disappearing text if first character out of surface (win32) - (Tim Rowley) - - * 4602 - Fix shutdown of cairo from failing intermediate, size-0 bitmaps (win32) - Aka. the "white rectangles" bug from mozilla-svg testing - (Tim Rowley) - - * Various portability improvements for win32 - (Hans Breuer, Owen Taylor, Carl Worth) - - * 4593 - Fix font sizes to match user expectations (win32) - (Tor Lillqvist, Owen Taylor) - - * 3927 - Fix to report metrics of size 0 for glyph-not-available (win32) - (Hans Breuer, Owen Taylor, Tor Lillqvist) - - * Add locking primitives for win32 - (Hans Breuer) - -xlib-specific fixes -------------------- - * Fix crash from size-0 pixmap due to empty clip region (xlib) - (Radek Doulík, Carl Worth) - -Release 1.0.0 (2005-08-24 Carl Worth <cworth@cworth.org>) -========================================================= -Experimental backends ---------------------- - * The Glitz, PS, PDF, Quartz, and XCB backends have been declared - experimental, and are not part of the API guarantees that accompany - this release. They are not built by default, even when the required - libraries are available, and must be enabled explicitly with - --enable-ps, --enable-pdf, --enable-quartz or --enable-xcb. - - It is very painful for us to be pushing out a major release without - these backends enabled. There has been a tremendous amount of work - put into each one and all are quite functional to some - extent. However, each also has some limitations. And none of these - backends have been tested to the level of completeness and - correctness that we expect from cairo backends. - - We do encourage people to experiment with these backends and report - success, failure, or means of improving them. - -Operator behavior ------------------ - * Prior to 0.9.0 the SOURCE, CLEAR and a number of other operators - behaved in an inconsistent and buggy fashion and could affect areas - outside the clip mask. In 0.9.0, these six "unbounded" operators - were fixed to consistently clear areas outside the shape but within - the clip mask. This is useful behavior for an operator such as IN, - but not what was expected for SOURCE and CLEAR. So, in this release - the behavior of SOURCE and CLEAR has been changed again. They now - affect areas only within both the source and shape. We can write - the new operators as: - - SOURCE: dest' = (mask IN clip) ? source : dest - CLEAR: dest' = (mask IN clip) ? 0 : dest - -Behavior and API changes ------------------------- - * Setting the filter on a gradient pattern would change the - interpolation between color stops away from the normal linear - interpolation. This dubious behavior has been removed. - - * The CAIRO_CONTENT_VALID() and CAIRO_FORMAT_VALID() macros -- - implementation details that leaked into cairo.h -- have been moved - into an internal header. - - * The cairo_show_text function now advances the current point - according to the total advance values of the string. - -API additions -------------- - * cairo_set_dash can now detect error and can set - CAIRO_STATUS_INVALID_DASH. - -Features --------- - * When compiled against recent versions of fontconfig and FreeType, - artificial bold fonts can now be turned on from fonts.conf using - the FC_EMBOLDEN fontconfig key. - -Optimization ------------- - * The compositing code from the 'xserver' code tree has now been - completely merged into libpixman. This includes MMX optimization of - common operations. - - * The image transformation code in libpixman has been improved and - now performs significantly faster. - -Bug fixes ---------- - * Several crashes related to corruption in the font caches have been - fixed. - - * All test cases now match pixel-for-pixel on x86 and PPC; this - required fixing bugs in the compositing, stroking, and pattern - rendering code. - - * Negative dash offsets have been fixed to work correctly. - - * The stroking of paths with mutiple subpaths has now been fixed to - apply caps to all subpaths rather than just the last one. - - * Many build fixes for better portability on various systems. - - * Lots of other bug fixes, but we're too tired to describe them in - more detail here. - -Release 0.9.2 (2005-08-13 Carl Worth <cworth@cworth.org>) -========================================================= -Release numbering ------------------ - * You will notice that this release jumped from 0.9.0 to 0.9.2. We've - decided to use an odd micro version number (eg. 0.9.1) to indicate - in-progress development between releases. As soon as 0.9.2 is - tagged, the version will be incremented in CVS to 0.9.3 where it - will stay until just before 0.9.4 is built, uploaded, and tagged. - - So, even-micro == a released version, odd-micro == something in-between. - -Libpixman dependency dropped ----------------------------- - * As of this release, the dependency on an external libpixman has - been dropped. Instead, the code from libpixman needed for cairo has - been incorporated into the cairo source tree. The motivation for - this change is that while cairo's API is stable and ready to be - maintained after the 1.0 release, libpixman's API is not, so we do - not want to expose it at this time. - - Also, the incorporation of libpixman into cairo also renames all - previously-public libpixman symbols in order to avoid any conflict - with a future release of libpixman - -API additions -------------- - * Macros and functions have been added so that the version of cairo - can be queried at either compile-time or at run-time. The version - is made available as both a human-readable string and as a single - integer: - - CAIRO_VERSION_STRING eg. "0.9.2" - CAIRO_VERSION eg. 000902 - - const char* - cairo_version_string (void); /* eg. "0.9.2" */ - - int - cairo_version (void); /* eg. 000902 */ - - A macro is provided to convert a three-part component version into - the encoded single-integer form: - - CAIRO_VERSION_ENCODE(X,Y,Z) - - For example, the CAIRO_VERSION value of 000902 is obtained as - CAIRO_VERSION_ENCODE(0,9,2). The intent is to make version - comparisons easy, either at compile-time: - - #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(0,9,2) - ... - #endif - - Or at run-time: - - if (cairo_version() >= CAIRO_VERSION_ENCODE(0,9,2)) { /* ... */ } - -Thread safety -------------- - * This release adds pthread-based locking (when available) to make - the caches used by cairo safe for threaded programs. Some may - remember a failed experiment with this locking between the 0.5.1 - and 0.5.2 snapshots, (where even single-threaded programs that - linked with -lpthread would deadlock). We believe that that problem - has been fixed, so we are looking forward to testing and reports - from users with threaded applications. - -Bug fixes ---------- - * The XCB and Quartz backends failed to compiled in the 0.9.0 release - due to minor syntax errors. These have now been fixed. - - * Various crashes in glitz and pixman due to size 0 glyphs have been - fixed. - -Release 0.9.0 (2005-08-08 Carl Worth <cworth@cworth.org>) -========================================================= -Soname change -------------- - * In all prior snapshots, the libtool library versioning was set to - 1:0:0. As this release is intended to mark the beginning of - backwards-compatible releases, the versioning has been incremented - to 2:0:0. You will notice that the numeric extension on the - installed library filename will change similarly. - - This change will also require all cairo-using applications to be - recompiled. We recognize that this may cause some frustration since - this release is backwards-compatible with 0.6.0 and in that sense - "shouldn't" require re-compilation. However, since all historical - snapshots have used the same 1:0:0 version in spite of incompatible - API changes between them, it was essential that the upcoming 1.0 - release series have distinct library versioning. - - All future releases will use the library versioning to properly - indicate compatibility between releases. So, any application - re-compiled now to work with the 0.9.0 will not need to be - recompiled when a compatible 1.0 release of cairo is made in the - future. - -API additions -------------- - * Add new function calls to set/get the current antialiasing mode in - the graphics state: - - cairo_set_antialias - cairo_get_antialias - - This call accepts the same modes recently added for font options - (NONE or GRAY) but affects the rendering of geometry other than - text. The intent of this call is to enable more precise control of - which pixels are affected by each operation, for example to allow - for full-scene antialiasing for seam-free rendering. It is not - expected that non-antialiased rendering will perform better than - anti-aliased rendering. - - * Three new functions were added to provide support for mixed cairo- - and non-cairo drawing to the same surface: - - cairo_surface_mark_dirty - cairo_surface_mark_dirty_rectangle - cairo_surface_flush - - * The return type of the several "reference" functions was change, - (API compatibly), from void to the same type as the argument. The - affected functions are: - - cairo_font_face_reference - cairo_scaled_font_reference - cairo_pattern_reference - cairo_surface_reference - cairo_reference - - This allows a convenient way to assign and reference in a single - statement. - -Semantic changes ----------------- - * The behavior of cairo_set_source with a pattern with a non-identity - matrix was previously not well-defined. The new behavior is as - follows: - - The pattern's transformation matrix will be locked to the - user space in effect at the time of cairo_set_source(). This means - that further modifications of the CTM will not affect the source - pattern. - -cairo-win32 ------------ - * Some portability improvements, (eg. workaround for missing stdint.h). - -cairo-ft --------- - * Updated to allow compilation with older versions of freetype. - -Bug fixes ---------- - * Fix the unbounded operators to actually produce a correct result, - (previously the results were artificially restricted to the - bounding box of whatever shape was being drawn rather than - extending out infinitely). The fixed operators are: - - CAIRO_OPERATOR_CLEAR - CAIRO_OPERATOR_SOURCE - CAIRO_OPERATOR_OUT - CAIRO_OPERATOR_IN - CAIRO_OPERATOR_DEST_IN - CAIRO_OPERATOR_DEST_ATOP - - * Fix cairo_mask and cairo_mask_surface to transform the mask by the - current transformation matrix (CTM). - - * Fix cairo_set_source to lock the CTM used to transform the pattern. - - * Workaround for X server Render bug involving repeating patterns - with a general transformation matrix. - - * cairo_get_font_face fixed to return a "nil" font face object rather - than NULL on error. - - * cairo_set_font_face fixed to not crash if given a NULL font face, - (which is the documented interface for restoring the default font - face). - - * Fix xlib glyphset caching to not try to free a NULL glyph. - -Snapshot 0.6.0 (2005-07-28 Carl Worth <cworth@cworth.org>) -========================================================== -API changes ------------ -* The prototypes of the following functions have changed: - - cairo_xlib_surface_create_with_xrender_format - cairo_xlib_surface_create_for_bitmap - - A Screen* parameter has been added to each. This allows the cairo - xlib backend to work correctly with multi-head X servers. - -* The following function has been modified: - - cairo_scaled_font_create - - to accept a cairo_font_options_t*. See below fore more details. - -* All opaque, reference-counted cairo objects have now been moved to a - standard error-handling scheme. The new objects to receive this - treatment are cairo_font_face_t, cairo_scaled_font_t, and - cairo_surface_t. (Previous snapshots already provided this scheme - for cairo_t, cairo_path_t, and cairo_pattern_t.) - - This changes two functions to have a return type of void rather than - cairo_status_t: - - cairo_scaled_font_extent - cairo_surface_finish - - And significantly, none of the create functions for any of the - objects listed above will return NULL. The pointer returned from any - function will now always be a valid pointer and should always be - passed to the corresponding destroy function when finished - - The simplest strategy for porting code is to switch from: - - object = cairo_<object>_create (); - if (object == NULL) - goto BAILOUT; - - /* act on object */ - - cairo_<object>_destroy (object); - - to: - - object = cairo_<object>_create (); - if (cairo_<object>_status (object)) - goto BAILOUT; - - /* act on object */ - - cairo_<object>_destroy (object); - - But significantly, it is not required to check for an error status - before the "act on object" portions of the code above. All - operations on an object with an error status are, by definition, - no-ops without side effect. So new code might be written in an - easier-to-read style of: - - object = cairo_<object>_create (); - - /* act on object */ - - cairo_<object>_destroy (object); - - with cairo_<object>_status checks placed only at strategic - locations. For example, passing an error object to another object, - (eg. cairo_set_source with an in-error pattern), will propagate the - error to the subsequent object (eg. the cairo_t). This means that - error checking can often be deferred even beyond the destruction of - a temporary object. - -API additions -------------- -* New functions for checking the status of objects that have been - switched to the common error-handling scheme: - - cairo_font_face_status - cairo_scaled_font_status - cairo_surface_status - -* The _cairo_error function which was added in 0.5.1 has now been made - much more useful. In 0.5.1 only errors on cairo_t objects passed - through _cairo_error. Now, an error on any object should pass - through _cairo_error making it much more reliable as a debugging - mechanism for finding when an error first occurs. - -* Added new font options support with a myriad of functions: - - cairo_font_options_create - cairo_font_options_copy - cairo_font_options_destroy - - cairo_font_options_status - - cairo_font_options_merge - cairo_font_options_equal - cairo_font_options_hash - - cairo_font_options_set_antialias - cairo_font_options_get_antialias - cairo_font_options_set_subpixel_order - cairo_font_options_get_subpixel_order - cairo_font_options_set_hint_style - cairo_font_options_get_hint_style - cairo_font_options_set_hint_metrics - cairo_font_options_get_hint_metrics - - cairo_surface_get_font_options - - cairo_ft_font_options_substitute - - cairo_set_font_options - cairo_get_font_options - - This new font options support allows the application to have much - more fine-grained control over how fonts are rendered. - Significantly, it also allows surface backends to have some - influence over the process. For example, the xlib backend now - queries existing Xft properties to set font option defaults. - -* New function: - - cairo_xlib_surface_set_drawable - - which allows the target drawable for an xlib cairo_surface_t to be - changed to another with the same format, screen, and display. This - is necessary in certain double-buffering techniques. - -New features ------------- -* Sub-pixel text antialiasing is now supported. - -Bug fixes ---------- -* Fixed assertion failure in cairo_surface_create_similar when - application commits an error by passing a cairo_format_t rather than - a cairo_content_t. - -* Avoid division by zero in various places (cairo-ft). - -* Fix infinite loop when using non-default visuals (cairo-xlib). - -* Eliminate segfault in cairo_image_surface_create_from_png_stream. - -* Prevent errant sign-extension of masks on 64-bit architectures - (cairo-xlib and cairo-xcb). - -* Other miscellaneous fixes. - -Snapshot 0.5.2 (2005-07-18 Carl Worth <cworth@cworth.org>) -========================================================== -API changes ------------ -* New functions for creating patterns of a single color: - - cairo_pattern_create_rgb - cairo_pattern_create_rgba - -* Change cairo_surface_create_similar to accept a new type of - cairo_content_t rather than cairo_format_t: - - typedef enum _cairo_content { - CAIRO_CONTENT_COLOR = 0x1000, - CAIRO_CONTENT_ALPHA = 0x2000, - CAIRO_CONTENT_COLOR_ALPHA = 0x3000 - } cairo_content_t; - -* Add new CAIRO_FORMAT_VALID and CAIRO_CONTENT_VALID macros. - -* Remove unused status value: - - CAIRO_STATUS_NO_TARGET_SURFACE - -* Add new status values: - - CAIRO_STATUS_INVALID_STATUS - -* Require libpixman >= 0.1.5 (for necessary bug fixes) - -Bug fixes ---------- -* Fix cairo_surface_write_to_png for RGB24 images. - -* Fix broken metrics and rendering for bitmap fonts. Add mostly - useless bitmap glyph transformation. - -* Fix glyph caches to not eject entries that might be immediately - needed, (fixing intermittent crashes when rendering text). - -* Fix all memory leaks found by running "make check-valgrind". - -ATSUI backend changes ---------------------- -* Allow building against < 10.3 SDK. - -* Prevent crash on empty strings. - -Glitz backend changes ---------------------- -* Require glitz >= 0.4.4. - -* Use frame buffer objects instead of pbuffers for accelerated - offscreen drawing. - -* Minor improvement to gradient pattern creation. - -PostScript backend fixes ------------------------- -* Rewrite of the PS backend to generate more interesting output that - the old big-image implementation. - -Win32 backend fixes -------------------- -* Implement glyph path support. - -* Fix swap of blue and green values in the fill_rectangles path. - -Xlib backend fixes ------------------- -* Add optimization to use XCopyArea rather than XRenderComposite when - transforming only with an integer translation, and using SOURCE - operator or OVER with a source pattern without alpha. - -Snapshot 0.5.1 (2005-06-20 Carl Worth <cworth@cworth.org>) -========================================================== -API changes ------------ -* Removed cairo_status_string(cairo_t*) and add - cairo_status_to_string(cairo_status_t) in its place. Code using - cairo_status_string can be ported forward as follows: - - cairo_status (cr); - -> - cairo_status_to_string (cairo_status (cr)); - -* Removed the BAD_NESTING restriction which means that two different - cairo_t objects can now interleave drawing to the same - cairo_surface_t without causing an error. - -* The following functions which previously had a return type of - cairo_status_t now have a return type of void: - - cairo_pattern_add_color_stop_rgba - cairo_pattern_set_matrix - cairo_pattern_get_matrix - cairo_pattern_set_extend - cairo_pattern_set_filter - - See discussion of cairo_pattern_status below for more details. - -API additions -------------- -* Improved error handling: - - cairo_status_t - cairo_pattern_status (cairo_pattern_t *pattern); - - This snapshot expands the status-based error handling scheme from - cairo_t to cairo_path_t and cairo_pattern_t. It also expands the - scheme so that object-creating functions, (cairo_create, - cairo_pattern_create_*, cairo_copy_path_*), are now guaranteed to - not return NULL. Instead, in the case of out-of-memory these - functions will return a static object with - status==CAIRO_STATUS_NO_MEMORY. The status can be checked with the - functions cairo_status and cairo_pattern_status, or by direct - inspection of the new status field in cairo_path_t. - - Please note that some objects, including cairo_surface_t and all of - the font-related objects have not been converted to this - error-handling scheme. - -* In addition to the above changes, a new private function has been added: - - _cairo_error - - This function can be used to set a breakpoint in a debugger to make - it easier to find programming error in cairo-using code. (Currently, - _cairo_error is called when any error is detected within a cairo_t - context, but is not called for non-cairo_t errors such as for - cairo_path_t and cairo_pattern_t). - -* Fixed cairo_path_data_t so that its enum is visible to C++ code, (as - cairo_path_data_type_t). - -Performance improvements ------------------------- -* Made a minor performance improvement for clipping, (restrict clip - surface to the new intersected bounds). - -* Optimize rendering of a solid source pattern with a pixel-aligned - rectangular path to use backend clipping rather than rasterization - and backend compositing. - -* Optimize cairo_paint_with_alpha to defer to cairo_paint when alpha - is 1.0. - -Bug fixes ---------- -* Fixed memory leak in cairo_copy_path. - -* A build fix for non-srcdir builds. - -PDF backend fixes ------------------ -* New support for path-based clipping. - -* Fix for text rotated to angles other than multiples of π/2. - -Win32 backend fixes -------------------- -* Fix for text extents. - -Xlib backend ------------- -* Implemented a complex workaround for X server bug[*] related to - Render-based compositing with untransformed, repeating source - pictures. The workaround uses core Xlib when possible for - performance, (ie. with CAIRO_OPERATOR_SOURCE or CAIRO_OPERATOR_OVER - with an opaque source surface), and falls back to the pixman - image-based compositing otherwise. - - [*] https://bugs.freedesktop.org/show_bug.cgi?id=3566 - -* Various bug fixes, particularly in the fallback paths. - -Snapshot 0.5.0 (2005-05-17 Carl Worth <cworth@cworth.org>) -========================================================== -This is a pretty big, and fairly significant snapshot. It represents -between 2 and 3 months of solid work from a lot of people on improving -the API as much as possible. I'd like to express my appreciation and -congratulations to everyone who has worked on the big API Shakeup, -(whether in email battles over names, or fixing my silly bugs). - -This snapshot will require some effort on the part of users, since -there are a _lot_ of API changes (ie. no cairo program ever written is -safe --- they're all broken now in at least one way). But, in spite of -that, we do encourage everyone to move their code to this snapshot as -soon as possible. And we're doing everything we can think of to make -the transition as smooth as possible. - -The idea behind 0.5 is that we've tried to make every good API change -we could want now, and get them all done with. That is, between now -and the 1.0 release of cairo, we expect very few new API changes, -(though some will certainly sneak in). We will have some significant -additions, but the pain of moving code from cairo 0.4 to cairo 0.5 -should be a one time experience, and things should be much smoother as -we continue to move toward cairo 1.0. - -And with so many changes coming out for the first time in this 0.5 -release, we really do need a lot of people trying this out to make -sure the ideas are solid before we freeze the API in preparation for -the 1.0 release. - -OK, enough introduction. Here is a (not-quite-complete) description of -the API removals, changes and additions in this snapshot, (compared to -0.4.0) - -API removals -============ -The following public functions have been removed: - -- cairo_set_target_* - - This is a big change. See the description of cairo_create in - the API changes section for how to deal with this. - -- cairo_set_alpha - - Alpha blending hasn't gone away; there's just a much more - unified rendering model now. Almost all uses of - cairo_set_alpha will be trivially replaced with - cairo_set_source_rgba and a few others will be replaced just - as easily with cairo_paint_with_alpha. - -- cairo_show_surface - - Another useful function that we realized was muddling up the - rendering model. The replacement is quite easy: - cairo_set_source_surface and cairo_paint. - -- cairo_matrix_create -- cairo_matrix_destroy -- cairo_matrix_copy -- cairo_matrix_get_affine - - These functions supported an opaque cairo_matrix_t. We now - have an exposed cairo_matrix_t structure, so these can be - dropped. - -- cairo_surface_set_repeat -- cairo_surface_set_matrix -- cairo_surface_set_filter - - These properties don't belong on surfaces. If you were using - them, you'll just want to instead use - cairo_pattern_create_for_surface and then set these properties - on the pattern. - -- cairo_copy - - This was a confusing function and hopefully nobody will miss - it. But if you really don't find cairo_save/restore adequate, - let us know and we have another idea for a potential - replacement. - -And while we're on the subject of removals, we carefully tightened up -the cairo header files so they no longer gratuitously include header -files that are not strictly necessary, (stdio.h, stdint.h, pixman.h, -Xrender.h, etc. and their dependencies). This may lead to some -surprising errors, so keep your eyes open for that. - -API changes -=========== -Here are some of the API changes that have occurred: - -~ cairo_create(void) -> cairo_create(cairo_surface_t *) - - This is the big change that breaks every program. The ability - to re-target a cairo_t was not particularly useful, but it did - introduce a lot of muddy semantic questions. To eliminate - that, cairo_create now requires its target surface to be - passed in at creation time. This isn't too hard to cope with - as the typical first operation after cairo_create was often - cairo_set_target_foo. So the order of those two swap and the - application instead has cairo_foo_surface_create, then - cairo_create. - -~ cairo_current_* -> cairo_get_* - - We had a strange mixture of cairo_get and cairo_current - functions. They've all been standardized on cairo_get, (though - note one is cairo_get_current_point). - -~ CAIRO_OPERATOR_SRC -> CAIRO_OPERATOR_SOURCE -~ CAIRO_OPERATOR_OVER_REVERSE -> CAIRO_OPERATOR_DEST_OVER - - Many of the cairo_operator_t symbolic values were renamed to - reduce the amount of abbreviation. The confusing "OP_REVERSE" - naming was also changed to use "DEST_OP" instead which is - easier to read and has wider acceptance in other - libraries/languages. - -~ cairo_set_pattern -> cairo_set_source -~ cairo_set_rgb_color -> cairo_set_source_rgb - - All of the various functions that changed the source - color/pattern were unified to use cairo_set_source names to - make the relation more clear. - -~ cairo_transform_point -> cairo_user_to_device -~ cairo_transform_distance -> cairo_user_to_device_distance -~ cairo_inverse_transform_point -> cairo_device_to_user -~ cairo_inverse_transform_distance -> cairo_device_to_user_distance - - These names just seemed a lot more clear. - -~ cairo_init_clip -> cairo_reset_clip -~ cairo_concat_matrix -> cairo_transform - - More abbreviation elimination - -~ cairo_current_path -> cairo_copy_path -~ cairo_current_path_flat -> cairo_copy_path_flat - - The former mechanism for examining the current path was a - function that required 3 or 4 callbacks. This was more - complexity than warranted in most situations. The new - cairo_copy_path function copies the current path into an - exposed data structure, and the documentation provides a - convenient idiom for navigating the path data. - -API additions -------------- -+ cairo_paint - - A generalized version of the painting operators cairo_stroke - and cairo_fill. The cairo_paint call applies the source paint - everywhere within the current clip region. Very useful for - clearing a surface to a solid color, or painting an image, - (see cairo_set_source_surface). - -+ cairo_paint_with_alpha - - Like cairo_paint but applying some alpha to the source, - (making the source paint translucent, eg. to blend an image on - top of another). - -+ cairo_mask - - A more generalized version of cairo_paint_with_alpha which - allows a pattern to specify the amount of translucence at each - point rather than using a constant value everywhere. - -+ cairo_mask_surface - - A convenience function on cairo_mask for when the mask pattern - is already contained within a surface. - -+ cairo_surface_set_user_data -+ cairo_surface_get_user_data -+ cairo_font_face_set_user_data -+ cairo_font_face_get_user_data - - Associate arbitrary data with a surface or font face for later - retrieval. Get notified when a surface or font face object is - destroyed. - -+ cairo_surface_finish - - Allows the user to instruct cairo to finish all of its - operations for a given surface. This provides a safe point for - doing things such as flushing and closing files that the - surface may have had open for writing. - -+ cairo_fill_preserve -+ cairo_stroke_preserve -+ cairo_clip_preserve - - One interesting change in cairo is that the path is no longer - part of the graphics state managed by - cairo_save/restore. This allows functions to construct paths - without interfering with the graphics state. But it prevents - the traditional idiom for fill-and-stroke: - - cairo_save; cairo_fill; cairo_restore; cairo_stroke - - Instead we know have alternate versions cairo cairo_fill, - cairo_stroke, and cairo_clip that preserve the current path - rather than consuming it. So the idiom now becomes simply: - - cairo_fill_preserve; cairo_stroke - -+ cairo_surface_write_to_png -+ cairo_surface_write_to_png_stream - - In place of a single PNG backend, now a surface created - through any backend (except PDF currently) can be written out - to a PNG image. - -+ cairo_image_surface_create_from_png -+ cairo_image_surface_create_from_png_stream - - And its just as easy to load a PNG image into a surface as well. - -+ cairo_append_path - - With the new, exposed path data structure, it's now possible - to append bulk path data to the current path, (rather than - issuing a long sequence of cairo_move_to/line_to/curve_to - function calls). - -Xlib and XCB backends ---------------------- - -Any cairo_format_t and Colormap arguments have been dropped from -cairo_xlib_surface_create. There are also two new -cairo_xlib|xcb_surface_create functions: - - cairo_xlib|xcb_surface_create_for_bitmap - (Particular for creating A1 surfaces) - cairo_xlib|xcb_surface_create_with_xrender_format - (For any other surface types, not described by a Visual*) - -All of these surface create functions now accept width and height. In -addition, there are new cairo_xlib|xcb_surface_set_size functions -which must be called each time a window that is underlying a surface -changes size. - -Print backends (PS and PDF) ---------------------------- -The old FILE* based interfaces have been eliminated. In their place we -have two different functions. One accepts a simple const char -*filename. The other is a more general function which accepts a -callback write function and a void* closure. This should allow the -flexibility needed to hook up with various stream object in many -languages. - -In addition, when specifying the surface size during construction, the -units are now device-space units (ie. points) rather than inches. This -provides consistency with all the other surface types and also makes -it much easier to reason about the size of the surface when drawing to -it with the default identity matrix. - -Finally, the DPI parameters, which are only needed to control the -quality of fallbacks, have been made optional. Nothing is required -during surface_create (300 DPI is assumed) and -cairo_ps|pdf_surface_set_dpi can be used to set alternate values if -needed. - -Font system ------------ -Owen very graciously listened to feedback after the big font rework he -had done for 0.4, and came up with way to improve it even more. In 0.4 -there was a cairo_font_t that was always pre-scaled. Now, there is an -unscaled cairo_font_face_t which is easier to construct, (eg. no -scaling matrix required) and work with, (it can be scaled and -transformed after being set on the graphics state). And the font size -manipulation functions are much easier. You can set an explicit size -and read/modify/write the font matrix with: - - cairo_set_font_size - cairo_get_font_matrix - cairo_set_font_matrix - -(Previously you could only multiply in a scale factor or a matrix.) A -pleasant side effect is that we can (and do) now have a default font -size that is reasonable, as opposed to the old default height of one -device-space unit which was useless until scaled. - -Of course, the old pre-scaled font had allowed some performance -benefits when getting many metrics for a font. Those benefits are -still made available through the new cairo_scaled_font_t. And a -cairo_font_face_t can be "promoted" to a cairo_scaled_font_t by -suppling a font_matrix and the desired CTM. - -Quartz backend --------------- -Tim Rowley put in the work to bring the Quartz backend back after it -had been disabled in the 0.4.0 snapshot. He was not able to bring back -the function that allows one to create a cairo_font_t from an ATSUI -style: - - cairo_font_t * - cairo_atsui_font_create (ATSUStyle style); - -because he didn't have a test case for it. If you care about this -function, please provide a fairly minimal test and we'll try to bring -it back in an upcoming snapshot. - -Snapshot 0.4.0 (2005-03-08 Carl Worth <cworth@cworth.org>) -========================================================== -New documentation ------------------ -Owen Taylor has converted cairo's documentation system to gtk-doc and -has begun some long-needed work on the documentation, which can now be -viewed online here: - - https://cairographics.org/manual/ - -New backend: win32 ------------------- -This is the first snapshot to include a functional win32 backend, -(thanks to Owen Taylor). The interface is as follows: - - #include <cairo-win32.h> - - void - cairo_set_target_win32 (cairo_t *cr, - HDC hdc); - - cairo_surface_t * - cairo_win32_surface_create (HDC hdc); - - cairo_font_t * - cairo_win32_font_create_for_logfontw (LOGFONTW *logfont, - cairo_matrix_t *scale); - - cairo_status_t - cairo_win32_font_select_font (cairo_font_t *font, - HDC hdc); - - void - cairo_win32_font_done_font (cairo_font_t *font); - - double - cairo_win32_font_get_scale_factor (cairo_font_t *font); - -And see also the documentation at: - -https://cairographics.org/manual/cairo-Microsoft-Windows-Backend.html - -Disabled backend: quartz ------------------------- -Unfortunately, the quartz backend code is currently out of date with -respect to some recent backend interface changes. So, the quartz -backend is disabled in this snapshot. - -If the quartz backend is brought up-to-date before the next snapshot, -we would be glad to make a 0.4.1 snapshot that re-enables it, (we do -not expect many more big backend interface changes). - -API Changes ------------ -The font system has been revamped, (as Owen Taylor's work with -integrating pango and cairo gave us the first serious usage of the -non-toy font API). - -One fundamental, user-visible change is that the cairo_font_t object -now represents a font that is scaled to a particular device -resolution. Further changes are described below. - - cairo.h - ------- - Removed cairo_font_set_transform and cairo_font_current_transform. - - Added cairo_font_extents and cairo_font_glyph_extents. See - documentation for details: - - https://cairographics.org/manual/cairo-cairo-t.html#cairo-font-extents - - cairo-ft.h - ---------- - The cairo_ft_font API changed considerably. Please see the - documentation for details: - - https://cairographics.org/manual/cairo-FreeType-Fonts.html - -Performance ------------ -Make the fast-path clipping (pixel-aligned rectangles) faster. - -Add optimization for applying a constant alpha to a pattern. - -Optimize gradients that are horizontal or vertical in device space. - -Xlib: When RENDER is not available, use image surfaces for -intermediate surfaces rather than xlib surfaces. - -Backend-specific changes ------------------------- - Glitz - ----- - Major update to glitz backend. The output quality should now be just - as good as the image and xlib backends. - - Track changes to glitz 0.4.0. - - PDF - --- - Various improvements to produce more conformant output. - -Internals ---------- -David Reveman contributed a large re-work of the cairo_pattern_t -implementation, providing cleaner code and more optimization -opportunities. - - Backend interface changes - ------------------------- - Rework backend interface to accept patterns, not surfaces for source - and mask. - - Remove set_matrix, set_filter, and set_repeat functions. - - More sophisticated backend interface for image fallbacks, - ({acquire,release}_{source,dest}_image() and clone_similar). - -Bug fixes ---------- -Only install header files for backends that have been compiled. - -Fixed some rounding errors leading to incorrectly placed glyphs. - -Many other minor fixes. - -Snapshot 0.3.0 (2005-01-21 Carl Worth <cworth@cworth.org>) -========================================================== -Major API changes ------------------ -1) The public header files will no longer be directly installed into - the system include directory. They will now be installed in a - subdirectory named "cairo", (eg. in /usr/include/cairo rather than - in /usr/include). - - As always, the easiest way for applications to discover the - location of the header file is to let pkg-config generate the - necessary -I CFLAGS and -L/-l LDFLAGS. For example: - - cc `pkg-config --cflags --libs cairo` -o foo foo.c - - IMPORTANT: Users with old versions of cairo installed will need to - manually remove cairo.h and cairo-features.h from the - system include directories in order to prevent the old - headers from being used in preference to the new ones. - -2) The backend-specific portions of the old monolithic cairo.h have - been split out into individual public header files. The new files - are: - - cairo-atsui.h - cairo-ft.h - cairo-glitz.h - cairo-pdf.h - cairo-png.h - cairo-ps.h - cairo-quartz.h - cairo-xcb.h - cairo-xlib.h - - Applications will need to be modified to explicitly include the new - header files where appropriate. - -3) There are two new graphics backends in this snapshot, a PDF - backend, and a Quartz backend. There is also one new font backend, - ATSUI. - -PDF backend ------------ -Kristian Høgsberg has contributed a new backend to allow cairo-based -applications to generate PDF output. The interface for creating a PDF -surface is similar to that of the PS backend, as can be seen in -cairo-pdf.h: - - void - cairo_set_target_pdf (cairo_t *cr, - FILE *file, - double width_inches, - double height_inches, - double x_pixels_per_inch, - double y_pixels_per_inch); - - cairo_surface_t * - cairo_pdf_surface_create (FILE *file, - double width_inches, - double height_inches, - double x_pixels_per_inch, - double y_pixels_per_inch); - -Once a PDF surface has been created, applications can draw to it as -any other cairo surface. - -This code is still a bit rough around the edges, and does not yet -support clipping, surface patterns, or transparent gradients. Text -only works with TrueType fonts at this point and only black text is -supported. Also, the size of the generated PDF files is currently -quite big. - -Kristian is still actively developing this backend, so watch this -space for future progress. - -Quartz backend --------------- -Calum Robinson has contributed a new backend to allow cairo -applications to target native Mac OS X windows through the Quartz -API. Geoff Norton integrated this backend into the current -configure-based build system, while Calum also provided Xcode build -support in the separate "macosx" module available in CVS. - -The new interface, available in cairo-quartz.h, is as follows: - - void - cairo_set_target_quartz_context (cairo_t *cr, - CGContextRef context, - int width, - int height); - - cairo_surface_t * - cairo_quartz_surface_create (CGContextRef context, - int width, - int height); - -There is an example program available in CVS in cairo-demo/quartz. It -is a port of Keith Packard's fdclock program originally written for -the xlib backend. A screenshot of this program running on Mac OS X is -available here: - - https://cairographics.org/~cworth/images/fdclock-quartz.png - -ATSUI font backend ------------------- -This new font backend complements the Quartz backend by allowing -applications to use native font selection on Mac OS X. The interface -is a single new function: - - cairo_font_t * - cairo_atsui_font_create (ATSUStyle style); - -Minor API changes ------------------ -Prototype for non-existent function "cairo_ft_font_destroy" removed. - -Now depends on libpixman 0.1.2 or newer, (0.1.3 is being released -concurrently and has some useful performance improvements). - -Default paint color is now opaque black, (was opaque white). Default -background color is transparent (as before). - -Renamed "struct cairo" to "struct _cairo" to free up the word "cairo" -from the C++ identifier name space. - -Functions returning multiple return values through provided pointers, -(cairo_matrix_get_affine, cairo_current_point, and -cairo_current_color_rgb), will now accept NULL for values the user -wants to ignore. - -CAIRO_HAS_FREETYPE_FONT has now been renamed to CAIRO_HAS_FT_FONT. - -Performance improvements ------------------------- -Alexander Larsson provided some fantastic performance improvements -yielding a 10000% performance improvement in his application, (when -also including his performance work in libpixman-0.1.3). These include - - * Fixed handling of cache misses. - - * Creating intermediate clip surfaces at the minimal size required. - - * Eliminating roundtrips when creating intermediate Xlib surfaces. - -Implementation --------------- -Major re-work of font metrics system by Keith Packard. Font metrics -should now be much more reliable. - -Glitz backend -------------- -Updated for glitz-0.3.0. -Bug fixes in reference counting. - -Test suite ----------- -New tests for cache crashing, rotating text, improper filling of -complex polygons, and leaky rasterization. - -Bug fixes ---------- -Fixed assertion failure when selecting the same font multiple times in -sequence. - -Fixed reference counting so cache_destroy functions work. - -Remove unintended copyright statement from files generated with -PostScript backend. - -Fixed to eliminate new warnings from gcc 3.4 and gcc 4. - -Snapshot 0.2.0 (2004-10-27 Carl Worth <cworth@cworth.org>) -=========================================================== -New license: LGPL/MPL ---------------------- -The most significant news with this release is that the license of -cairo has changed. It is now dual-licensed under the LGPL and the -MPL. For details see the COPYING file as well as COPYING-LGPL-2.1 and -COPYING-MPL-1.1. - -I express my thanks to everyone involved in the license change process -for their patience and support! - -New font and glyph internals ----------------------------- -Graydon Hoare has put a tremendous amount of work into new internals -for handling fonts and glyphs, including caches where appropriate. -This work has no impact on the user-level API, but should result in -great performance improvements for applications using text. - -New test suite --------------- -This snapshot of cairo includes a (small) test suite in -cairo/test. The tests can be run with "make check". The test suite was -designed to make it very easy to add new tests, and we hope to see -many contributions here. As you find bugs, please try adding a minimal -test case to the suite, and submit it with the bug report to the -cairo@cairographics.org mailing list. This will make it much easier -for us to track progress in fixing bugs. - -New name for glitz backend --------------------------- -The gl backend has now been renamed to the glitz backend. This means -that the following names have changed: - - CAIRO_HAS_GL_SURFACE -> CAIRO_HAS_GLITZ_SURFACE - cairo_set_target_gl -> cairo_set_target_glitz - cairo_gl_surface_create -> cairo_glitz_surface_create - -This change obviously breaks backwards compatibility for applications -using the old gl backend. - -Up-to-date with latest glitz snapshots --------------------------------------- -This snapshot of cairo is now up to date with the latest glitz -snapshot, (currently 0.2.3). We know that the latest cairo and glitz -snapshots have been incompatible for a very long time. We've finally -fixed that now and we're determined to not let that happen again. - -Revert some tessellation regression bugs ----------------------------------------- -People that have been seeing some tessellation bugs, (eg. leaked -fills), in the CVS version of cairo may have better luck with this -release. A change since the last snapshot was identified to trigger -some of these bugs and was reverted before making the snapshot. The -behavior should be the same as the previous (0.1.23) snapshot. - -Miscellaneous changes ---------------------- -Changed CAIRO_FILTER_DEFAULT to CAIRO_FILTER_BEST to make gradients -easier. - -Track XCB API change regarding iterators. - -Various bug fixes ------------------ -Fix calculation of required number of vertices for pen. - -Fix to avoid zero-dimensioned pixmaps. - -Fix broken sort of pen vertices. - -Fix bug when cairo_show_text called with a NULL string. - -Fix clipping bugs. - -Fix bug in computing image length with XCB. - -Fix infinite loop bug in cairo_arc. - -Fix memory management interactions with libpixman. - -Snapshot 0.1.23 (2004-05-11 Carl Worth <cworth@isi.edu>) -======================================================== -Fixes for gcc 3.4 ------------------ -Fix prototype mismatches so that cairo can be built by gcc 3.4. - -Updates to track glitz ----------------------- -Various fixes to support the latest glitz snapshot (0.1.2). - -Gradient updates ----------------- -Radial gradients now support both inner and outer circles. -Transformed linear gradients are now properly handled. -Fixes for extend type reflect. - -Glitz updates -------------- -Converted shading routines to use fixed point values and introduced a -shading operator structure for more efficient shading calculations. -Support compositing with mask surface when mask is solid or -multi-texturing is available. - -PNG backend cleanups --------------------- -Fix output to properly compensate for pre-multiplied alpha format in cairo. -Add support for A8 and A1 image formats. - -Bug fixes ---------- -Avoid crash or infinite loop on null strings and degeneratively short -splines. - -New? bugs in cairo_clip ------------------------ -There are some fairly serious bugs in cairo_clip. It is sometimes -causing an incorrect result. And even when it does work, it is -sometimes so slow as to be unusable. Some of these bugs may not be -new, (indeed cairo_clip has only ever had a braindead-slow -implementation), but I think they're worth mentioning here. - -Snapshot 0.1.22 (2004-04-16 Carl Worth <cworth@isi.edu>) -======================================================== -Cairo was updated to track the changes in libpixman, and now depends -on libpixman version 0.1.1. - -Snapshot 0.1.21 (2004-04-09 David Reveman <c99drn@cs.umu.se>) -============================================================= -New OpenGL backend ------------------- -The OpenGL backend provides hardware accelerated output for -X11 and OS X. The significant new functions are: - - cairo_set_target_gl - cairo_gl_surface_create - -Automatic detection of available backends ------------------------------------------ -The configure script now automatically detect what backends are -available, (use ./configure --disable-`backend' to prevent -compilation of specific backends). - -Snapshot 0.1.20 (2004-04-06 Carl Worth <cworth@isi.edu>) -======================================================== -New pattern API ---------------- -David Reveman has contributed a new pattern API which enable linear -and radial gradient patterns in addition to the original surface-based -patterns. The significant new top-level functions are: - - cairo_pattern_create_linear - cairo_pattern_create_radial - cairo_pattern_create_for_surface - cairo_pattern_add_color_stop - cairo_set_pattern - -Any code using the old cairo_set_pattern, (which accepted a -cairo_surface_t rather than a cairo_pattern_t), will need to be -updated. - -Update to XCB backend ---------------------- -The XCB backend is now enabled by default, (use ./configure ---disable-xcb to turn it off). - -Faster clipping ---------------- -Graydon Hoare has added optimizations that make cairo_clip much faster -when the path is a pixel-aligned, rectangular region. - -Bug fixes. - -Snapshot 0.1.19 (2004-02-24 Carl Worth <cworth@isi.edu>) -======================================================== -New PNG backend ---------------- -Olivier Andrieu contributed a new PNG backend. It builds on the -existing image backend to make it easy to render "directly" to a -.png file. The user never needs to deal with the actual image -buffer. The significant new functions are: - - cairo_set_target_png - cairo_png_surface_create - -The PNG backend is not enabled by default so that by default there is -not a new dependency on libpng. Use ./configure --enable-png to enable -this backend. - -Snapshot 0.1.18 (2004-02-17 Carl Worth <cworth@isi.edu>) -======================================================== -Path query functionality ------------------------- -It's now possible to query the current path. The two new functions -are: - - cairo_current_path - cairo_current_path_flat - -Each function accepts a number of callback functions that will be -called for each element in the path (move_to, line_to, curve_to, -close_path). The cairo_current_path_flat function does not accept a -curve_to callback. Instead, all curved portions of the path will be -converted to line segments, (within the current tolerance value). This -can be handy for doing things like text-on-path without having to -manually interpolate Bézier splines. - -New XCB backend ---------------- -Jamey Sharp has contributed a second X backend that uses the new, lean -XCB library rather than Xlib. It cannot currently be compiled at the -same time as the Xlib backend. See ./configure --enable-xcb. - -Build fixes for cygwin. - -Bug fixes. - -Snapshot 0.1.17 (2003-12-16 Carl Worth <cworth@isi.edu>) -======================================================== - -Better text support -------------------- -This snapshot provides much better text support by implementing the -following four functions: - - cairo_text_extents - cairo_glyph_extents - cairo_text_path - cairo_glyph_path - -The text/glyph_extents functions can be used to determine the bounding -box (and advance) for text as if drawn by show_text/glyphs. - -The text/glyph_path objects functions place text shapes on the current -path, where they can be subsequently manipulated. For example, -following these functions with cairo_stroke allows outline text to be -drawn. Calling cairo_clip allows clipping to a text-shaped region. - -Combined dependencies ---------------------- -The cairo core now depends only on the libpixman library. This single -library replaces the three previous libraries libic, libpixregion, and -slim. Thanks to Dave Beckett <dave.beckett@bristol.ac.uk> for all of -the heavy lifting with this renaming effort. - -Conditional compilation of backends ------------------------------------ -Cairo now allows optional backends to be disabled at compile time. The -following options may now be passed to the configure script: - - --disable-xlib - --disable-ps - -Note that the first option is a change from the old --without-x option -which will no longer have any effect. - -OS X supported - several byte-order issues resolved ---------------------------------------------------- -Cairo has now been successfully compiled under OS X. Testing revealed -that there were some byte-order problems in the PostScript backend and -the PNG generation in the demos. These have now been resolved. - -2003-10 -======= -Graydon Hoare <graydon@redhat.com> implemented the first real text -support using Freetype/fontconfig, (previous versions of cairo used -Xft and could only draw text when using an X backend). - -2003-09 -======= -Graydon Hoare <graydon@redhat.com> added the first real support for -running cairo with a non-render-aware X server. - -Jamey Sharp <jamey@minilop.net> virtualized the backend font and -surface interfaces in September, 2003. - -2003-06 -======= -Xr is renamed cairo to avoid confusion since it no longer had a strict -dependence on X. - -2003-05 -======= -A new image surface backend is added to Xr. Keith Packard -<keithp@keithp.com> wrote the image compositing code in libic that is -used for the image_surface backend. This code was originally written -as the software fallback for the render extension within the X -server. - -2002-06 -======= -Carl Worth <cworth@isi.edu> wrote the first lines of Xr, after Keith -Packard <keithp@keithp.com> proposed the plan for a stateful drawing -library in C providing a PostScript-like rendering model. - - LocalWords: mutex BeOS extraordinaire distro's URL lcd bool tarball |