| 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) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=72e25648c4c4bc82ddd938aa4e05887a293f0d8b |
| |
| Fix a couple of corner cases in dashing degenerate paths (Jeff Muizelaar) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=fbb1758ba8384650157b2bbbc93d161b0c2a05f0 |
| |
| Fix support for type1 fonts on win32 (Adrian Johnson) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=da1019c9138695cb838a54f8b871bbfd0e8996d7 |
| |
| Fix assertion failure when rotating bitmap fonts (Carl Worth) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0bfa6d4f33b8ddb5dc55bbe419c15df4af856ff9 |
| |
| Fix assertion failure when calling cairo_text_path with bitmap fonts (Carl Worth) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9878a033531e6b96b5f27e69e10e90dee7440cd9 |
| |
| Fix mis-handling of cairo_close_path in some situations (Tim Rowley, Carl Worth) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=53f74e59faf1af78f2f0741ccf1f23aa5dad4efc |
| |
| Respect font_matrix translation in _cairo_gstate_glyph_path (Behdad Esfahbod) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f183b835b111d23e838889178aa8106ec84663b3 |
| |
| Fix vertical metrics adjustment to work with non-identity shapes (Behdad Esfahbod) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7bc263842a798d657a95e539e1693372448837f |
| |
| [PS] Set correct ImageMatrix in _cairo_ps_surface_emit_bitmap_glyph_data (Behdad Esfahbod) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=d47388ad759b0a1a0869655a87d9b5eb6ae2445d |
| |
| Build system fixes |
| ------------------ |
| Fix xlib detection to prefer pkg-config to avoid false libXt dependency (Behdad Esfahbod) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0e78e7144353703cbd28aae6a67cd9ca261f1d68 |
| |
| Fix typos causing win32 build problem with PS,PDF, and SVG backends (Behdad Esfahbod) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=aea83b908d020e26732753830bb3056e6702a774 |
| |
| Fix configure cache to not use stale results (Behdad Esfahbod) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6d0e3260444a2d5b6fb0cb223ac79f1c0e7b3a6e |
| |
| Fix to not pass unsupported warning options to the compiler (Jens Granseuer) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=97524a8fdb899de1ae4a3e920fb7bda6d76c5571 |
| |
| Fix to allow env. variables such as png_REQUIRES to override configure detection (Jens Granseuer) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=abd16e47d6331bd3811c908e524b4dcb6bd23bf0 |
| |
| Fix test suite to not use an old system cairo when converting svg2png (Behdad Esfahbod) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6122cc85c8f71b1ba2df3ab86907768edebe1781 |
| |
| Fix test suite to not require signal.h to be present (Behdad Esfahbod) |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6f8cf53b1e1ccdbe1ab6a275656b19c6e5120e40 |
| |
| Code cleanups |
| ------------- |
| Many useful warnings cleanups from sparse, valgrind, and careful eyes |
| (Kjartan Maraas, Pavel Roskin) |
| |
| Release 1.2.2 (2006-08-08 Carl Worth <cworth@cworth.org>) |
| ========================================================= |
| This is the first bug fix release in the 1.2 series since the original |
| 1.2.0 release made six weeks ago. |
| |
| There were some very serious bugs in the 1.2.0 release, (see below), |
| so everybody is encouraged to upgrade from 1.2.0 to 1.2.2. The 1.2.2 |
| release maintains source and binary compatibility with 1.2.0 and does |
| not make any API additions. |
| |
| Fix crashes with BGR X servers |
| ------------------------------ |
| With cairo 1.2.0 many people reported problems with all cairo-using |
| programs, (including all GTK+ programs with GTK+ >= 2.8) immediately |
| crashing with a complaint about an unsupported image format. This bug |
| affected X servers that do not provide the Render extension and that |
| provide a visual with BGR rather than RGB channel order. |
| |
| report: https://bugs.freedesktop.org/show_bug.cgi?id=7294 |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9ae66174e774b57f16ad791452ed44efc2770a59 |
| |
| Fix the "disappearing text" bug |
| ------------------------------- |
| With cairo 1.2.0 many people reported that text would disappear from |
| applications, sometimes reappearing with mouse motion or |
| selection. The text would disappear after the first space in a string |
| of text. This bug was caused by an underlying bug in (very common) X |
| servers, and only affected text rendered without antialiasing, (either |
| a bitmap font or a vector font with antialiasing disabled). The bug |
| was also exacerbated by a KDE migration bug that caused antialiasing |
| to be disabled more than desired. |
| |
| report: https://bugs.freedesktop.org/show_bug.cgi?id=7494 |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=456cdb3058f3b416109a9600167cd8842300ae14 |
| see also: |
| Xorg: https://bugs.freedesktop.org/show_bug.cgi?id=7681 |
| KDE: http://qa.mandriva.com/show_bug.cgi?id=23990 |
| |
| Fix broken image fallback scaling (aka. "broken printing") |
| ---------------------------------------------------------- |
| The various "print" backends, (pdf, ps, and svg), sometimes fallback |
| to using image-based rendering for some operations. In cairo 1.2.0 |
| these image fallbacks were scaled improperly. Applications using cairo |
| can influence the resolution of the image fallbacks with |
| 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: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=1feb4291cf7813494355459bb547eec604c54ffb |
| |
| Fix inadvertent semantic change of font matrix translation (Behdad Esfahbod) |
| ---------------------------------------------------------------------------- |
| The 1.2.0 release introduced an inadvertent change to how the |
| translation components of a font matrix are interpreted. In the 1.0 |
| series, font matrix translation could be used to offset the glyph |
| origin, (though glyph metrics were reported incorrectly in |
| 1.0). However in 1.2.0, the translation was applied to the advance |
| values 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: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=84840e6bba6e72aa88fad7a0ee929e8955ba9051 |
| |
| Fix create_similar to preserve fallback resolution and font options (Behdad Esfahbod) |
| ------------------------------------------------------------------------------------- |
| There has been a long-standing issue with cairo_surface_create_similar |
| such that font options and other settings from the original |
| destination surface would not be preserved to the intermediate |
| "similar" surface. This could result in incorrect rendering |
| (particularly with respect to text hinting/antialiasing) with |
| fallbacks, for example. |
| |
| report: https://bugs.freedesktop.org/show_bug.cgi?id=4106 |
| fixes: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9fcb3c32c1f16fe6ab913e27eb54d18b7d9a06b0 |
| http://gitweb.freedesktop.org/?p=cairo;a=commit;h=bdb4e1edadb78a2118ff70b28163f8bd4317f1ec |
| |
| xlib: Fix text performance regression from 1.0 to 1.2.0 (Vladimir Vukicevic) |
| ---------------------------------------------------------------------------- |
| Several people noticed that upgrading from cairo 1.0 to cairo 1.2.0 |
| 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: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7191885c88068dad57d68ced69a752d1162b12c |
| |
| PDF: Eliminate dependency on FreeType library dependency (Adrian Johnson) |
| ------------------------------------------------------------------------- |
| The cairo 1.2 series adds a supported pdf backend to cairo. In cairo |
| 1.2.0 this backend required the freetype library, which was an |
| undesirable dependency on systems such as win32, (cairo is designed to |
| always prefer the "native" font system). As of cairo 1.2.2 the |
| freetype library is not required to use the pdf backend on the win32 |
| platform. |
| |
| report: https://bugs.freedesktop.org/show_bug.cgi?id=7538 |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=a0989f427be87c60415963dd6822b3c5c3781691 |
| |
| PDF: Fix broken output on amd64 (Adrian Johnson) |
| ------------------------------------------------ |
| report: http://bugzilla.gnome.org/show_bug.cgi?id=349826 |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f4b12e497b7ac282b2f6831b8fb68deebc412e60 |
| |
| PS: Fix broken output for truetype fonts > 64k (Adrian Johnson) |
| --------------------------------------------------------------- |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=067d97eb1793a6b0d0dddfbd0b54117844511a94 |
| |
| PDF: Fix so that dashing doesn't get stuck on (Kent Worsnop) |
| ------------------------------------------------------------ |
| Kent notices that with the PDF backend in cairo 1.2.0 as soon as a |
| stroke was performed with dashing, all subsequent strokes would also |
| be dashed. There was no way to turn dashing off again. |
| |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=778c4730a86296bf0a71080cf7008d7291792256 |
| |
| Fix memory leaks in failure paths in gradient creation (Alfred Peng) |
| -------------------------------------------------------------------- |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=db06681b487873788b51a6766894fc619eb8d8f2 |
| |
| Fix memory leak in _cairo_surface_show_glyphs (Chris Wilson) |
| ------------------------------------------------------------ |
| report: https://bugs.freedesktop.org/show_bug.cgi?id=7766 |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e2fddcccb43d06486d3680a19cfdd5a54963fcbd |
| |
| Solaris: Add definition of cairo_private for some Sun compilers (Alfred Peng) |
| ----------------------------------------------------------------------------- |
| report: https://bugzilla.mozilla.org/show_bug.cgi?id=341874 |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=04757a3aa8deeff3265719ebe01b021638990ec6 |
| |
| Solaris: Change version number of Sun's Xorg server with buggy repeat (Brian Cameron) |
| ------------------------------------------------------------------------------------- |
| report: https://bugs.freedesktop.org/show_bug.cgi?id=7483 |
| fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e0ad1aa995bcec4246c0b8ab0d5a5a79871ce235 |
| |
| Various memory leak fixes |
| ------------------------- |
| Fix memory leak in _cairo_surface_show_glyphs (bug 7766) |
| Fix file handle leak in failure path (bug 7616) |
| Fix some memory leaks in the test cases. |
| Fix some memory leaks in font subsetting code used in print backends. |
| |
| Documentation improvements (Behdad Esfahbod) |
| -------------------------------------------- |
| Added new documentation for several functions (cairo_show_page, |
| cairo_copy_page, cairo_in_stroke, cairo_in_fill). |
| |
| Fixed some syntax errors that were preventing some existing |
| documentation from being published. |
| |
| Fixed several minor typographical errors. |
| |
| Added an index for new symbols in 1.2. |
| |
| Release 1.2.0 (2006-06-27 Carl Worth <cworth@cworth.org>) |
| ========================================================= |
| This is the culmination of the work that has gone on within the 1.1 |
| branch of cairo. |
| |
| There has been one API addition since the cairo 1.1.10 snapshot: |
| |
| cairo_xlib_surface_get_width |
| cairo_xlib_surface_get_height |
| |
| There's also a new feature without any API change: |
| |
| Dots can now be drawn by using CAIRO_LINE_CAP_ROUND with |
| degenerate sub-paths, (cairo_move_to() followed by either |
| cairo_close_path() or a cairo_line_to() to the same location). |
| |
| And at least the following bugs have been fixed: |
| |
| 6759 fontconfig option AntiAlias doesn't work in cairo 1.1.2 |
| 6955 Some characters aren't displayed when using xlib (cache u... |
| 7268 positive device_offset values don't work as source |
| * PDF emit_glyph function needs to support bitmapped glyphs |
| * PS emit_glyph function needs to support bitmapped glyphs |
| * SVG emit_glyph function needs to support bitmapped glyphs |
| * PDF: minefield page one is falling back unnecessarily |
| * PS/PDF: Fix broken placement for vertical glyphs |
| * PS: Fix to not draw BUTT-capped zero-length dash segments |
| * Do device offset before float->fixed conversion |
| http://bugzilla.gnome.org/show_bug.cgi?id=332266 |
| * PS: Fix source surfaces with transformations |
| * PS: Fix to not draw BUTT-capped degnerate sub-paths |
| * PS: Don't walk off end of array when printing "~>" |
| * Fix some memory leaks in the test suite rig |
| * SVG: Fix memory leak when using cairo_mask |
| * Fix EXTEND_REFLECT and EXTEND_PAD to not crash (though these are |
| still not yet fully implemented for surface patterns). |
| |
| This has been a tremendous effort by everyone, and I'm proud to have |
| been a part of it. Congratulations to all contributors to cairo! |
| |
| 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: |
| |
| http://cairographics.org/ROADMAP |
| |
| As can be seen in that list, there are no longer any API additions |
| left on the roadmap. Instead, there is a feature (PDF type 3 fonts) a |
| performance optimization (X server gradients) and a list of bug |
| fixes. This gives us a fair amount of freedom to cut the 1.2 release |
| at almost any point by deciding to defer remaining bug fixes to |
| subsequent maintenance releases such as 1.2.2 and 1.2.4. |
| |
| Before we will do that, we must first be wiling to commit to all the |
| new API additions. As a heads-up, there are a couple of potential API |
| changes being considered. (Note that these are changes to new API |
| introduced during 1.1 so these will not introduce API |
| incompatibilities compared to the stable 1.0 series). The changes |
| being considered are: |
| |
| cairo_get_group_target: may acquire x and y offset return |
| parameters. May also be eliminated in favor of |
| cairo_get_target assuming its role |
| |
| cairo_pdf_surface_set_dpi: |
| cairo_ps_surface_set_dpi: |
| cairo_svg_surface_set_dpi: These functions may be removed in favor |
| of a new cairo_surface_set_fallback_resolution |
| |
| Additionally there is the possibility of a slight change in the |
| semantics of cairo_set_line_width. We believe the current behavior of the sequence: |
| |
| cairo_set_line_width; ... change CTM ...; cairo_stroke; |
| |
| is buggy. It is currently behaving the same as: |
| |
| ... change CTM ...; cairo_set_line_width; cairo_stroke; |
| |
| We are considering fixing this bug before 1.2 with the hope that |
| nobody is already relying on the buggy behavior described here. Do |
| shout if you suspect you might be in that position. |
| |
| The items included in this snapshot (since the 1.1.4 snapshot) are |
| described below. |
| |
| API additions |
| ------------- |
| The long-awaited group-rendering support is now available with the |
| following function calls: |
| |
| cairo_push_group |
| cairo_push_group_with_content |
| cairo_pop_group |
| cairo_pop_group_to_source |
| cairo_get_group_target |
| |
| This API provides a much more convenient mechanism for doing rendering |
| to an intermediate surface without the need to manually create a |
| temporary cairo_surface_t and a temporary cairo_t and clean them up |
| afterwards. |
| |
| Add the following missing get function to complement |
| cairo_surface_set_device_offset: |
| |
| cairo_surface_get_device_offset |
| |
| PDF backend (API addition) |
| -------------------------- |
| The PDF backend now provides for per-page size changes, (similar to |
| what the PostScript backend got in the 1.1.4 snapshot). The new API |
| is: |
| |
| cairo_pdf_surface_set_size |
| |
| Xlib backend (API additions) |
| ---------------------------- |
| The following functions have been added to allow the extraction of |
| Xlib surface: |
| |
| cairo_xlib_surface_get_display |
| cairo_xlib_surface_get_drawable |
| cairo_xlib_surface_get_screen |
| cairo_xlib_surface_get_visual |
| cairo_xlib_surface_get_depth |
| |
| XCB backend (experimental) |
| -------------------------- |
| Update backend so that it now compiles with the recent XCB 0.9 release. |
| |
| Bug fixes and memory leak cleanup |
| --------------------------------- |
| Various little things, nothing too significant though. |
| |
| Snapshot 1.1.4 (2006-05-03 Carl Worth <cworth@cworth.org>) |
| ========================================================== |
| This is the second in a series of snapshots working toward the |
| upcoming 1.2 release of cairo. For a list of items still needing work |
| on the cairo 1.2 roadmap, please see: |
| |
| http://cairographics.org/ROADMAP |
| |
| The items included in this snapshot (since the 1.1.2 snapshot) are |
| described below. |
| |
| PostScript backend: new printing-oriented API |
| --------------------------------------------- |
| We anticipate that with cairo 1.2, toolkits will begin to use cairo |
| for printing on systems that use PostScript as the spool format. To |
| support this use case, we have added 4 new function calls that are |
| specific to the PostScript backend: |
| |
| cairo_ps_surface_set_size |
| cairo_ps_surface_dsc_comment |
| cairo_ps_surface_dsc_begin_setup |
| cairo_ps_surface_dsc_begin_page_setup |
| |
| These functions allow variation of the page size/orientation from one |
| page to the next in the PostScript output. They also allow the toolkit |
| to provide per-document and per-page printer control options in a |
| device-independent way, (for example, by using PPD options and |
| emitting them as DSC comments into the PostScript output). This should |
| allow toolkits to provide very fine-grained control of many options |
| available in printers, (media size, media type, tray selection, etc.). |
| |
| SVG backend: builds by default, version control |
| ----------------------------------------------- |
| The SVG backend continues to see major improvements. It is expected |
| that the SVG backend will be a supported backend in the 1.2 |
| release. This backend will now be built by default if its dependencies |
| (freetype and libxml2) are met. |
| |
| Additionally, the SVG backend now has flexibility with regard to what |
| version of SVG it targets. It will target SVG 1.1 by default, which |
| will require image fallbacks for some of the "fancier" cairo |
| compositing operators. Or with the following new function calls: |
| |
| cairo_svg_surface_restrict_to_version |
| cairo_svg_get_versions |
| cairo_svg_version_to_string |
| |
| it can be made to target SVG 1.2 in which there is native support for |
| these compositing operators. |
| |
| Bug fixes |
| --------- |
| At least the following bugs have been fixed since the 1.1.2 snapshot: |
| |
| crash at XRenderAddGlyphs |
| https://bugs.freedesktop.org/show_bug.cgi?id=4705 |
| |
| Can't build cairo-1.1.2 on opensolaris due to " void function cannot return value" |
| https://bugs.freedesktop.org/show_bug.cgi?id=6792 |
| |
| Missing out-of-memory check at gfx/cairo/cairo/src/cairo-atsui-font.c:185 |
| https://bugzilla.mozilla.org/show_bug.cgi?id=336129 |
| |
| A couple of memory leaks. |
| |
| 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 - Accomodate gentoo and Mandriva versions in X server vendor string check |
| (Billy Biggs, Frederic Crozat, Owen Taylor) |
| |
| win32-specific fixes |
| -------------------- |
| * 4599 - Fix "missing wedges" on some stroked paths (win32) |
| (Tim Rowley, Jonathan Watt, Bertram Felgenhauer, Carl Worth, Keith Packard) |
| |
| * 4612 - Fix disappearing text if first character out of surface (win32) |
| (Tim Rowley) |
| |
| * 4602 - Fix shutdown of cairo from failing intermediate, size-0 bitmaps (win32) |
| Aka. the "white rectangles" bug from mozilla-svg testing |
| (Tim Rowley) |
| |
| * Various portability improvements for win32 |
| (Hans Breuer, Owen Taylor, Carl Worth) |
| |
| * 4593 - Fix font sizes to match user expectations (win32) |
| (Tor Lillqvist, Owen Taylor) |
| |
| * 3927 - Fix to report metrics of size 0 for glyph-not-available (win32) |
| (Hans Breuer, Owen Taylor, Tor Lillqvist) |
| |
| * Add locking primitives for win32 |
| (Hans Breuer) |
| |
| xlib-specific fixes |
| ------------------- |
| * Fix crash from size-0 pixmap due to empty clip region (xlib) |
| (Radek Doulík, Carl Worth) |
| |
| 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: |
| |
| http://cairographics.org/manual/ |
| |
| New backend: win32 |
| ------------------ |
| This is the first snapshot to include a functional win32 backend, |
| (thanks to Owen Taylor). The interface is as follows: |
| |
| #include <cairo-win32.h> |
| |
| 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: |
| |
| http://cairographics.org/manual/cairo-Microsoft-Windows-Backend.html |
| |
| Disabled backend: quartz |
| ------------------------ |
| Unfortunately, the quartz backend code is currently out of date with |
| respect to some recent backend interface changes. So, the quartz |
| backend is disabled in this snapshot. |
| |
| If the quartz backend is brought up-to-date before the next snapshot, |
| we would be glad to make a 0.4.1 snapshot that re-enables it, (we do |
| not expect many more big backend interface changes). |
| |
| API Changes |
| ----------- |
| The font system has been revamped, (as Owen Taylor's work with |
| integrating pango and cairo gave us the first serious usage of the |
| non-toy font API). |
| |
| One fundamental, user-visible change is that the cairo_font_t object |
| now represents a font that is scaled to a particular device |
| resolution. Further changes are described below. |
| |
| cairo.h |
| ------- |
| Removed cairo_font_set_transform and cairo_font_current_transform. |
| |
| Added cairo_font_extents and cairo_font_glyph_extents. See |
| documentation for details: |
| |
| http://cairographics.org/manual/cairo-cairo-t.html#cairo-font-extents |
| |
| cairo-ft.h |
| ---------- |
| The cairo_ft_font API changed considerably. Please see the |
| documentation for details: |
| |
| http://cairographics.org/manual/cairo-FreeType-Fonts.html |
| |
| Performance |
| ----------- |
| Make the fast-path clipping (pixel-aligned rectangles) faster. |
| |
| Add optimization for applying a constant alpha to a pattern. |
| |
| Optimize gradients that are horizontal or vertical in device space. |
| |
| Xlib: When RENDER is not available, use image surfaces for |
| intermediate surfaces rather than xlib surfaces. |
| |
| Backend-specific changes |
| ------------------------ |
| Glitz |
| ----- |
| Major update to glitz backend. The output quality should now be just |
| as good as the image and xlib backends. |
| |
| Track changes to glitz 0.4.0. |
| |
| PDF |
| --- |
| Various improvements to produce more conformant output. |
| |
| Internals |
| --------- |
| David Reveman contributed a large re-work of the cairo_pattern_t |
| implementation, providing cleaner code and more optimization |
| opportunities. |
| |
| Backend interface changes |
| ------------------------- |
| Rework backend interface to accept patterns, not surfaces for source |
| and mask. |
| |
| Remove set_matrix, set_filter, and set_repeat functions. |
| |
| More sophisticated backend interface for image fallbacks, |
| ({acquire,release}_{source,dest}_image() and clone_similar). |
| |
| Bug fixes |
| --------- |
| Only install header files for backends that have been compiled. |
| |
| Fixed some rounding errors leading to incorrectly placed glyphs. |
| |
| Many other minor fixes. |
| |
| Snapshot 0.3.0 (2005-01-21 Carl Worth <cworth@cworth.org>) |
| ========================================================== |
| Major API changes |
| ----------------- |
| 1) The public header files will no longer be directly installed into |
| the system include directory. They will now be installed in a |
| subdirectory named "cairo", (eg. in /usr/include/cairo rather than |
| in /usr/include). |
| |
| As always, the easiest way for applications to discover the |
| location of the header file is to let pkg-config generate the |
| necessary -I CFLAGS and -L/-l LDFLAGS. For example: |
| |
| cc `pkg-config --cflags --libs cairo` -o foo foo.c |
| |
| IMPORTANT: Users with old versions of cairo installed will need to |
| manually remove cairo.h and cairo-features.h from the |
| system include directories in order to prevent the old |
| headers from being used in preference to the new ones. |
| |
| 2) The backend-specific portions of the old monolithic cairo.h have |
| been split out into individual public header files. The new files |
| are: |
| |
| cairo-atsui.h |
| cairo-ft.h |
| cairo-glitz.h |
| cairo-pdf.h |
| cairo-png.h |
| cairo-ps.h |
| cairo-quartz.h |
| cairo-xcb.h |
| cairo-xlib.h |
| |
| Applications will need to be modified to explicitly include the new |
| header files where appropriate. |
| |
| 3) There are two new graphics backends in this snapshot, a PDF |
| backend, and a Quartz backend. There is also one new font backend, |
| ATSUI. |
| |
| PDF backend |
| ----------- |
| Kristian Høgsberg has contributed a new backend to allow cairo-based |
| applications to generate PDF output. The interface for creating a PDF |
| surface is similar to that of the PS backend, as can be seen in |
| cairo-pdf.h: |
| |
| void |
| cairo_set_target_pdf (cairo_t *cr, |
| FILE *file, |
| double width_inches, |
| double height_inches, |
| double x_pixels_per_inch, |
| double y_pixels_per_inch); |
| |
| cairo_surface_t * |
| cairo_pdf_surface_create (FILE *file, |
| double width_inches, |
| double height_inches, |
| double x_pixels_per_inch, |
| double y_pixels_per_inch); |
| |
| Once a PDF surface has been created, applications can draw to it as |
| any other cairo surface. |
| |
| This code is still a bit rough around the edges, and does not yet |
| support clipping, surface patterns, or transparent gradients. Text |
| only works with TrueType fonts at this point and only black text is |
| supported. Also, the size of the generated PDF files is currently |
| quite big. |
| |
| Kristian is still actively developing this backend, so watch this |
| space for future progress. |
| |
| Quartz backend |
| -------------- |
| Calum Robinson has contributed a new backend to allow cairo |
| applications to target native Mac OS X windows through the Quartz |
| API. Geoff Norton integrated this backend into the current |
| configure-based build system, while Calum also provided Xcode build |
| support in the separate "macosx" module available in CVS. |
| |
| The new interface, available in cairo-quartz.h, is as follows: |
| |
| void |
| cairo_set_target_quartz_context (cairo_t *cr, |
| CGContextRef context, |
| int width, |
| int height); |
| |
| cairo_surface_t * |
| cairo_quartz_surface_create (CGContextRef context, |
| int width, |
| int height); |
| |
| There is an example program available in CVS in cairo-demo/quartz. It |
| is a port of Keith Packard's fdclock program originally written for |
| the xlib backend. A screenshot of this program running on Mac OS X is |
| available here: |
| |
| http://cairographics.org/~cworth/images/fdclock-quartz.png |
| |
| ATSUI font backend |
| ------------------ |
| This new font backend complements the Quartz backend by allowing |
| applications to use native font selection on Mac OS X. The interface |
| is a single new function: |
| |
| cairo_font_t * |
| cairo_atsui_font_create (ATSUStyle style); |
| |
| Minor API changes |
| ----------------- |
| Prototype for non-existent function "cairo_ft_font_destroy" removed. |
| |
| Now depends on libpixman 0.1.2 or newer, (0.1.3 is being released |
| concurrently and has some useful performance improvements). |
| |
| Default paint color is now opaque black, (was opaque white). Default |
| background color is transparent (as before). |
| |
| Renamed "struct cairo" to "struct _cairo" to free up the word "cairo" |
| from the C++ identifier name space. |
| |
| Functions returning multiple return values through provided pointers, |
| (cairo_matrix_get_affine, cairo_current_point, and |
| cairo_current_color_rgb), will now accept NULL for values the user |
| wants to ignore. |
| |
| CAIRO_HAS_FREETYPE_FONT has now been renamed to CAIRO_HAS_FT_FONT. |
| |
| Performance improvements |
| ------------------------ |
| Alexander Larsson provided some fantastic performance improvements |
| yielding a 10000% performance improvement in his application, (when |
| also including his performance work in libpixman-0.1.3). These include |
| |
| * Fixed handling of cache misses. |
| |
| * Creating intermediate clip surfaces at the minimal size required. |
| |
| * Eliminating roundtrips when creating intermediate Xlib surfaces. |
| |
| Implementation |
| -------------- |
| Major re-work of font metrics system by Keith Packard. Font metrics |
| should now be much more reliable. |
| |
| Glitz backend |
| ------------- |
| Updated for glitz-0.3.0. |
| Bug fixes in reference counting. |
| |
| Test suite |
| ---------- |
| New tests for cache crashing, rotating text, improper filling of |
| complex polygons, and leaky rasterization. |
| |
| Bug fixes |
| --------- |
| Fixed assertion failure when selecting the same font multiple times in |
| sequence. |
| |
| Fixed reference counting so cache_destroy functions work. |
| |
| Remove unintended copyright statement from files generated with |
| PostScript backend. |
| |
| Fixed to eliminate new warnings from gcc 3.4 and gcc 4. |
| |
| 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. |