1Release 1.6.4 (2008-04-11 Carl Worth <cworth@cworth.org>) 2========================================================= 3The cairo community is wildly embarrassed to announce the 1.6.4 4release of the cairo graphics library. This release reverts the xlib 5locking change introduced in 1.6.4, (and the application crashes that 6it caused). The community would be glad to sack its current release 7manager and is accepting applications for someone who could do the job 8with more discipline. 9 10Revert 'add missing locking in cairo-xlib' 11------------------------------------------ 12This change was introduced in cairo 1.6.2, but also introduced a bug 13which causes many cairo-xlib applications to crash, (with a 14segmentation fault inside of XSetClipMask). Instead of attempting 15another fix for the broken fix, the change in 1.6.2 has been 16reverted. The original bug which the change was addressing has been 17present since at least cairo 1.4, so it is not expected that leaving 18this bug unfixed will cause any new problems for applications moving 19from cairo 1.4 to cairo 1.6. 20 21At this point, the code of cairo 1.6.4 differs from cairo 1.6.0 only 22in the fix for the PostScript-printer crashes. 23 24Tweak build to avoid linking with g++ 25------------------------------------- 26Cairo 1.6.4 avoids a quirk in automake that was causing the cairo 27library to be linked with g++ and linked against libstdc++ even when 28only C source files were compiled for the library. 29 30Release 1.6.2 (2008-04-11 Carl Worth <cworth@cworth.org>) 31========================================================= 32The cairo community is pleased (but somewhat sheepish) to announce the 331.6.2 release of the cairo graphics library. This is an update to 34yesterday's 1.6.0 release with an important fix to prevent cairo's 35PostScript output from crashing some printers. This release also 36includes a locking fix for cairo's xlib backend to improve thread 37safety. There are no changes beyond these two fixes. 38 39Fix for PostScript printer crash 40-------------------------------- 41Adrian Johnson discovered that cairo 1.6.0 was being a bit hard on 42PostScript printers, by changing the font matrix very frequently. This 43causes some PostScript interpreters to allocate new font objects every 44few glyphs, eventually exhausting available resources. The fix 45involves leaving translational components of the font matrix as zero, 46so that the PostScript interpreter sees an identical font matrix 47repeatedly, and can more easily share internal font object resources. 48 49This fix has been tested to resolve the bugs posted here, (for both 50Xerox and Dell printers): 51 52 Printing some PDFs from evince is crashing our Xerox printer 53 http://bugs.freedesktop.org/show_bug.cgi?id=15348 54 55 Cairo-generated postscript blocks Dell 5100cn 56 http://bugs.freedesktop.org/show_bug.cgi?id=15445 57 58Add missing locking in cairo-xlib 59--------------------------------- 60Chris Wilson noticed that cairo 1.6.0 was manipulating an internal 61cache of GC object within cairo's Xlib backend without proper 62locking. The missing locking could cause failures for multi-threaded 63applications. He fixed this in 1.6.2 by adding the missing locks. 64 65Release 1.6.0 (2008-04-10 Carl Worth <cworth@cworth.org>) 66========================================================= 67The cairo community is quite pleased to announce the 1.6.0 release of 68the cairo graphics library. This is a major update to cairo, with new 69features and enhanced functionality which maintains compatibility for 70applications written using cairo 1.4, 1.2, or 1.0. We recommend that 71anybody using a previous version of cairo upgrade to cairo 1.6.0. 72 73The most significant new features in this release are dramatically 74improved PDF and PostScript[*] output, support for arbitrary X server 75visuals (including PseudoColor), a new Quartz backend, and and a new 76"win32 printing" backend. See below for more details on these and 77other new features. 78 79New dependency on external pixman library (Thanks, Søren!) 80---------------------------------------------------------- 81As of cairo 1.6, cairo now depends on the pixman library, for which 82the latest release can be obtained alongside cairo: 83 84 http://cairographics.org/releases/pixman-0.10.0.tar.gz 85 86This library provides all software rendering for cairo, (the 87implementation of the image backend as well as any image fallbacks 88required for other backends). This is the same code that was 89previously included as part of cairo itself, but is now an external 90library so that it can be shared by both cairo and by the X server, 91(which is where the code originated). 92 93Improved PDF, PostScript, and SVG output (Thanks, Adrian!) 94---------------------------------------------------------- 95Users of the cairo-pdf, cairo-ps, and cairo-svg should see a dramatic 96improvement from cairo 1.2/1.4 to 1.6. With this release there are now 97almost no operations that will result in unnecessary rasterization in 98the PDF and PostScript. Rasterized "image fallbacks" are restricted 99only to minimal portions of the document where something is being 100drawn with cairo that is beyond the native capabilities of the 101document, (this is rare for PDF or SVG, but occurs when blending 102translucent objects for PostScript). 103 104This means that the final output will be of higher quality, and will 105also be much smaller, and therefore will print more quickly. The 106machinery for doing analysis and minimal fallbacks also benefits the 107win32-printing surface described below. 108 109In addition to doing less rasterization, the PostScript and PDF output 110also has several other improvements to make the output more efficient 111and more compatible with specifications. 112 113[*] Note: Just before this release, a bug has been reported that the 114PostScript output from cairo can crash some printers, (so far the 115following models have been reported as problematic Xerox Workcentre 1167228 or 7328 and Dell 5100cn). We will implement a workaround as soon 117as we can learn exactly what in cairo's output these printers object 118to, (and we could use help from users that have access to misbehaving 119printers). This bug is being tracked here: 120 121 Printing some PDFs from evince is crashing our Xerox printer 122 http://bugs.freedesktop.org/show_bug.cgi?id=15348 123 124New support for arbitrary X server visuals (Thanks, Keith and Behdad!) 125---------------------------------------------------------------------- 126As of cairo 1.6, cairo should now work with an arbitrary TrueColor or 1278-bit PseudoColor X server visual. Previous versions of cairo did not 128support these X servers and refused to draw anything. We're pleased to 129announce that this limitation has been lifted and people stuck with 130ancient display systems need no longer be stuck with ancient software 131just because of cairo. 132 133New, supported Quartz backend for Mac OS X (Thanks, Brian and Vladimir!) 134------------------------------------------------------------------------ 135As of cairo 1.6, the cairo-quartz backend is now marked as "supported" 136rather than "experimental" as in previous cairo releases. Its API now 137has guarantees of API stability into future cairo releases, and its 138output quality is comparable to other backends. There have been 139significant improvements to cairo-quartz since 1.4. It now uses many 140fewer image fallbacks, (meaning better performance), and has greatly 141improved text rendering. 142 143New, "win32 printing" backend (Thanks, Adrian and Vladimir!) 144------------------------------------------------------------ 145A new win32-printing surface has been added with an interface very 146similar to the original win32 surface, (both accept an HDC 147parameter). But this new surface should only be called with a printing 148DC, and will result in all drawing commands being stored into a 149meta-surface and emitted after each page is complete. This allows 150cairo to analyze the contents, (as it does with PDF, PostScript, and 151SVG backends), and to do minimal image-based fallbacks as 152necessary. The analysis keeps things as efficient as possible, while 153the presence of fallbacks, (when necessary), ensure the consistent, 154high-quality output expected from cairo. 155 156Robustness fixes (Thanks, Chris!) 157--------------------------------- 158There has been a tremendous number of improvements to cairo's 159robustness. Areas that have been improved include: 160 161 * Proper reporting of errors 162 163 * Responding correctly to invalid input 164 165 * Avoiding integer overflows 166 167 * Avoiding memory leaks on error-recovery paths 168 169 * Making reference counting thread safe 170 171 * Exhaustive testing of memory allocation points 172 173Other fixes (Thanks, everybody!) 174-------------------------------- 175Cairo's internal fixed-point representation has been changed from 17616.16 to 24.8. This has a direct impact on applications as it allows 177much larger objects to be drawn before internal limits in cairo make 178the drawing not work. 179 180The CAIRO_EXTEND_PAD mode is now fully supported by surface 181patterns. This mode allows applications to use cairo_rectangle and 182cairo_fill to draw scaled images with high-quality bilinear filtering 183for the internal of the image, but without any objectionably blurry 184edges, (as would happen with the default EXTEND_NONE and cairo_paint). 185 186Rendering with CAIRO_ANTIALIAS_NONE has been fixed to be more 187predictable, (previously image rendering and geometry rendering would 188be slightly misaligned with respect to each other). 189 190The reference manual at http://cairographics.org/manual now documents 191100% of the functions and types in cairo's public API. 192 193API additions 194------------- 195Several small features have been added to cairo with new API functions: 196 197cairo_format_stride_for_width 198 199 Must be called to compute a properly aligned stride value before 200 calling cairo_image_surface_create_for_data. 201 202cairo_has_current_point 203 204 Allows querying if there is a current point defined for the 205 current path. 206 207cairo_path_extents 208 209 Allows querying for path extents, (independent of any fill or 210 stroke parameters). 211 212cairo_surface_copy_page 213cairo_surface_show_page 214 215 Allow beginning a new document page without requiring a cairo_t 216 object. 217 218cairo_ps_surface_restrict_to_level 219cairo_ps_get_levels 220cairo_ps_level_to_string 221cairo_ps_surface_set_eps 222 223 Allow controlling the Post PostScript level, (2 or 3), to 224 target, as well as to generate Encapsulated PostScript (EPS). 225 226cairo_quartz_font_face_create_for_cgfont 227 228 Create a quartz-specific cairo_font_face_t from a CGFontRef. 229 230cairo_win32_font_face_create_for_logfontw_hfont 231 232 Create a win32-specific cairo_font_face from a LOGFONTW and an 233 HFONT together. 234 235Thanks, Everyone! 236----------------- 237I've accounted for 32 distinct people with attributed code added to 238cairo between 1.4.14 and 1.6.0, (their names are below). That's an 239impressive number, but there are certainly dozens more that 240contributed with testing, suggestions, clarifying questions, and 241encouragement. I'm grateful for the friendships that have developed as 242we have worked on cairo together. Thanks to everyone for making this 243all so much fun! 244 245Adrian Johnson, Alp Toker, Antoine Azar, Behdad Esfahbod, 246Benjamin Otte, Bernardo Innocenti, Bertram Felgenhauer, 247Boying Lu, Brian Ewins, Carl Worth, Chris Heath, Chris Wilson, 248Claudio Ciccani, Emmanuel Pacaud, Jeff Muizelaar, Jeremy Huddleston, 249Jim Meyering, Jinghua Luo, Jody Goldberg, Jonathan Gramain, 250Keith Packard, Ken Herron, Kouhei Sutou, Kristian Høgsberg, 251Larry Ewing, Martin Ejdestig, Nis Martensen, Peter Weilbacher, 252Richard Hult, Shailendra Jain, Søren Sandmann Pedersen, 253Vladimir Vukicevic 254 255Snapshot 1.5.20 (2008-04-04 Carl Worth <cworth@cworth.org>) 256=========================================================== 257This is the tenth snapshot in cairo's unstable 1.5 series. It comes 258just two days (and only one working day) after the 1.5.18 259snapshot. The quick snapshot is due to two embarrassing bugs (both 260affecting cairo-xlib) that had been introduced in the 1.5.18 261snapshot. The fixes for these are described below along with a few 262other fixes, (which hopefully aren't introducing new bugs this time). 263 264cairo-xlib 265---------- 266Revert fix from 1.5.18 to allow pattern expansion based on the filter 267mode. This fix seemed so boring, (the use case it addresses is almost 268never used in practice), that it didn't even get mentioned in the 2691.5.18 release notes. However, the "fix" happened to break rendering 270that is always used resulting in corrupt image rendering in mozilla, 271evolution, and probably everything else that uses cairo. 272 273Fix to avoid BadMatch errors in cairo_surface_create_similar. These 274were introduced, (inadvertently, of course), as part of the fix in 2751.5.18 for creating similar surfaces without the Render 276extension. Again, thanks to mozilla, (and Vladimir Vukicevic in 277particular), for noticing our mistake. 278 279general 280------- 281Correctly handle an in-error surface in 282cairo_surface_write_to_png. Previously this function would cause an 283assertion failure if you gave it a finished surface. Now it cleanly 284returns a CAIRO_STATUS_SURFACE_FINISHED result instead. 285 286Avoid potentially infinite wandering through memory inside 287_cairo_hull_prev_valid. Thanks to Jonathan Watt for noticing this 288problem: 289 290 https://bugzilla.mozilla.org/show_bug.cgi?id=306649#c21 291 292cairo-pdf 293--------- 294Fix generation of "soft" masks made by drawing to a similar surface 295and then calling cairo_mask_surface() with it. 296 297cairo-svg 298--------- 299Fix for code that uses cairo_mask() on an intermediate surface which 300is later passed to cairo_mask_surface(). 301 302Snapshot 1.5.18 (2008-04-05 Carl Worth <cworth@cworth.org>) 303=========================================================== 304This is the ninth snapshot in cairo's unstable 1.5 series. It comes 305just 4 days after the 1.5.16 snapshot. We had hoped to not need 306another snapshot before the final 1.6.0 release, but several critical 307bugs were found and fixed in the last few days, so we thought it 308important to let people test the fixes with this snapshot. See below 309for details. 310 311documentation 312------------- 313The README now lists necessary dependencies. 314 315Various graphics state defaults are now documented, (source pattern is 316opaque black, line width is 2.0, line join is miter, line cap is butt, 317miter limit is 10.0, etc.). 318 319general 320------- 321Several cleanups have been made along many error-path returns, 322(carefully propagating up the original error status values, cleaning 323up memory leaks during error recovery, etc.). This is yet another in 324Chris "ickle" Wilson's long series of error-handling cleanups during 325the 1.5 series. 326 327Avoid undesired clipping when drawing scaled surface patterns with 328bilinear filtering. 329 330cairo-pdf 331--------- 332Fix emission of 1-bit alpha masks in PDF output. 333 334Fix a bug that would cause glyphs to be misplaced along the Y axis: 335 336 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%23474136 337 338 Originally, an issue about a crash, but later leading to the 339 misplaced glyphs issue being discovered. 340 341cairo-ps 342-------- 343Fix misplaced glyphs in cairo's PostScript output. 344 345 This issue occurs when consecutive glyphs are placed far 346 apart. This case is exercised by the new ft-show-glyphs-table test 347 case, which was originally inspired by the Debian bug #23474136 348 mentioned above. 349 350Fix more misplaced glyphs in cairo's PostScript output: 351 352 The issue here showed up under very particular circumstance, (when 353 converting a PDF file with a CFF font with CID Identity-H encoding 354 and using glyph 0, (defined by the CFF specification as .notdef) 355 as a space instead). More concretely, this problem appeared when 356 converting the UbuntuDesktop.pdf file mentioned in this bug 357 report: 358 359 https://bugs.freedesktop.org/show_bug.cgi?id=15348#c3 360 361 As usual with arcane font-encoding-specific bugs like this, many 362 thanks to Adrian Johnson for his magical ability to dive into 363 specifications and emerge almost instantaneously with fixes. And 364 thanks to Sebastien Bacher for bringing the bug to our attention. 365 366cairo-xlib 367---------- 368Fix serious failure on X servers without the Render extension. 369 370 Since the 1.5.14 snapshot (with support for PseudoColor visuals), 371 any application attempting to create a "similar" xlib surface would 372 fail on an X server without the Render extension. Thanks to 373 Frederic Crozat for pointing out that cairo's test suite was 374 entirely failing when run against Xvfb. 375 376Avoid crashing cairo-xlib applications for too-large glyphs 377 378 Naively sending glyphs of any size to the X server will eventually 379 violate the X limit on maximum request sizes. We now properly 380 detect when a glyph would be too large and use existing fallbacks 381 to render the glyph rather than trying to send it to the X server. 382 383Enable the buggy_repeat workaround for Xorg servers < 1.4 384 385 We have determined that Xorg 1.3.0 (as packaged in Fedora 8 at 386 least) has a bug that can result in an X server crash when cairo 387 uses certain X Render repeat operations, (as exercised by cairo's 388 extend-reflect test). We avoid this crash by using fallbacks 389 whenever a repeating surface is needed for any Xorg server with a 390 version less than 1.4. This is slower, but should prevent the 391 crash. 392 393 (Meanwhile, there appears to be a separate bug where some X 394 servers or specific X-server drivers will use random pixmap data 395 when asked to draw a repeating surface. The buggy_repeat 396 workaround would also avoid those problems, but we have not yet 397 characterized whether the new "version < 1.4" is a good 398 characterization of those problems or not.) 399 400cairo-quartz-font 401----------------- 402Implement cairo_font_extents for this backend. 403 404The cairo-quartz-font implementation added in the 1.5.14 snapshot was 405entirely missing support for the cairo_font_extents function. Thanks to 406Richard Hult for pointing out this obvious shortcoming, (and obvious 407lack of coverage in our test suite): 408 409 CGFont backend returns 0 font extents 410 https://bugs.freedesktop.org/show_bug.cgi?id=15319 411 412Snapshot 1.5.16 (2008-04-01 Carl Worth <cworth@cworth.org>) 413=========================================================== 414This is the eighth snapshot in cairo's unstable 1.5 series. It comes 415less than two weeks after the 1.5.14 snapshot and it really is a 416legitimate snapshot, (in spite of sharing this date with that of many 417bogus announcements). The major change in this snapshot is that the 418cairo-quartz backend is now officially "supported", including new API 419to construct a font face from a CGFontRef . Also several bug fixes 420have been fixed in many backends. See below for details. 421 422general 423------- 424Cairo now depends on pixman 0.10.0 which was recently released. The 425latest pixman release can always be found alongside cairo releases at: 426 427 http://cairographics.org/releases 428 429Increase the precision of color stops for gradients. This fixes a 430regression in gradient rendering that had been present since the 4311.5.12 snapshot. 432 433paginated (all of ps, pdf, svg, and win32-printing) 434--------------------------------------------------- 435Fix assertion failure when some drawing elements are outside the page 436boundaries, (this bug was noticed when using Inkscape to print a 437drawing with landscape orientation to a portrait-oriented piece of 438paper). 439 440cairo-ps 441-------- 442Fix of bug causing incorrect glyph positioning. 443 444Fix handling of CAIRO_OPERATOR_SOURCE. 445 446cairo-pdf 447--------- 448More reduction of unnecessary digits of precision in PDF output. 449 450Fix handling of CAIRO_OPERATOR_SOURCE. 451 452cairo-svg 453--------- 454Fix bug in usage of libpng that was preventing cairo_mask from working 455with the svg backend. 456 457Fix transformation of source pattern for cairo_stroke(). 458 459cairo-win32-printing 460-------------------- 461Fix fallback resolution, (thanks again to inkscape users/developers 462for helping us find this one). 463 464cairo-quartz 465------------ 466Mark the cairo-quartz backend as "supported" rather than 467"experimental". This means the following: 468 469 * The backend will now be built by default (if possible). 470 471 * We are committing that the backend-specific API (as published in 472 cairo-quartz.h) are stable and will be supported in all future 473 cairo 1.x releases. 474 475 * We are committing that the output quality of this backend 476 compares favorably with other cairo backends, (and that quality 477 is ensured by good results from the cairo test suite). 478 479 * We recommend that distributions build and distribute this 480 backend when possible. 481 482Note that the cairo_quartz_image API (in cairo-quartz-image.h) is 483still experimental, will not build by default, (pass 484--enable-quartz-image to configure to build it), and may see API 485changes before it is marked as "supported" in a future release. 486 487Put the CAIRO_FONT_TYPE_ATSUI name back into 488cairo-deprecated.h. Without this, the cairo 1.5.14 snapshot broke all 489builds for applications using the C++ cairomm bindings (and perhaps 490others) which have the CAIRO_FONT_TYPE_ATSUI name in their header 491files. This breakage happened even for applications not using 492cairo-quartz at all. 493 494 Note: Even though the CAIRO_FONT_TYPE_ATSUI name is provided to 495 avoid this build breakage, we still recommend that bindings and 496 applications move to the new, and more accurate, 497 CAIRO_FONT_TYPE_QUARTZ name. 498 499Replace the implementation of cairo-quartz-font to use CFFont instead 500of ATSUI. The CGFont API is a better fit than ATSUI, and this new 501implementation is also more correct than the old one as well. 502 503This also adds the following new API call: 504 505 cairo_public cairo_font_face_t * 506 cairo_quartz_font_face_create_for_cgfont (CGFontRef font); 507 508The previous cairo_quartz_font_face_create_for_atsu_font_id function 509continues to exist and is part of the supported API going 510forward. (However, the old name of that same function, which was 511cairo_atsui_font_face_create_for_atsu_font_id is officially 512deprecated. Any source code using the old name should be updated to 513use the new name.) 514 515Fix transformation of source pattern for cairo_stroke(). 516 517cairo-win32 518----------- 519Avoid crash in create_similar is cairo_win32_surface_create fails. 520 521Snapshot 1.5.14 (2008-03-20 Carl Worth <cworth@cworth.org>) 522=========================================================== 523This is the seventh snapshot in cairo's unstable 1.5 series. It comes 5243 weeks after the 1.5.12 snapshot. This snapshot includes support for 525arbitrary X server visuals, (including PseudoColor), which was the 526final remaining cairo-specific item on the cairo 1.6 roadmap. It also 527includes a huge number of improvements to the cairo-quartz backend. So 528this is effectively a cairo 1.6 release candidate. We expect very few 529changes from now until 1.6 and only for specific bug fixes. 530 531API Change 532---------- 533Rename ATSUI font backend to Quartz font backend. This affects the 534following usage: 535 536 --enable-atsui -> --enable-quartz-font 537 CAIRO_HAS_ATSUI_FONT -> CAIRO_HAS_QUARTZ_FONT 538 CAIRO_FONT_TYPE_ATSUI -> CAIRO_FONT_TYPE_QUARTZ 539 540 cairo_atsui_font_face_create_for_atsu_font_id -> 541 cairo_quartz_font_font_create_for_atsu_font_id 542 543This API change is justified by the cairo-quartz backend still be 544marked as "experimental" rather than "supported", (though this is one 545step toward making the change to "supported" before 1.6). Cairo will 546still provide ABI compatibility with the old symbol name, however. 547 548paginated (all of ps, pdf, svg, and win32-printing) 549--------------------------------------------------- 550Optimize by not analyzing an image surface for transparency more than 551once, (previously all images were analyzed twice). 552 553cairo-ps and cairo-pdf 554---------------------- 555Avoiding emitting a matrix into the stroke output when unnecessary, 556(making output size more efficient). 557 558Reduce rounding error of path shapes by factoring large scale factors 559out of the path matrix, (ensuring that a fixed-number of printed 560digits for path coordinates contains as much information as possible). 561 562Reduce excess digits for text position coordinates. This makes the 563output file size much smaller without making the result any less 564correct. 565 566cairo-ps 567-------- 568Eliminate bug causing extraneous text repetition on Linux PostScript 569output in some cases. 570 571 See: Mozilla Bug 419917 – Printed page contents are reflected 572 inside bordered tables (Linux-only) 573 574 https://bugzilla.mozilla.org/show_bug.cgi?id=419917 575 576Optimize output when EXTEND_PAD is used. 577 578cairo-pdf 579--------- 580Fix to not use fill-stroke operator with transparent fill, (else PDF 581output doesn't match the cairo-defined correct result). See: 582 583 https://bugs.launchpad.net/inkscape/+bug/202096 584 585cairo-svg 586--------- 587Fix stroke of path with a non-solid-color source pattern: 588 589 http://bugs.freedesktop.org/show_bug.cgi?id=14556 590 591cairo-quartz 592------------ 593Fix text rendering with gradient or image source pattern. 594 595Handling antialiasing correctly for cairo_stroke(), cairo_clip(), and 596cairo_show_text()/cairo_show_glyphs(). 597 598Correctly handle gradients with non-identity transformations: 599 600 Fixes http://bugs.freedesktop.org/show_bug.cgi?id=14248 601 602Add native implementation of REPEAT and REFLECT extend modes for 603gradients. 604 605Fix implementation for the "unbounded" operators, (CAIRO_OPERATOR_OUT, 606_IN, _DEST_IN, and _DEST_ATOP). 607 608Correctly handle endiannees in multi-architecture compiles on Mac OS 609X. 610 611Avoid behavior which would cause Core Graphics to print warnings to 612the console in some cases. 613 614cairo-win32 615----------- 616Fix handling of miter limit. 617 618cairo-win32-printing 619-------------------- 620Fix to not use a 1bpp temporary surface in some cases while printing, 621(so grayscale data is preserved rather than just becoming black and 622white). 623 624cairo-xlib 625---------- 626Add support for rendering to arbitrary TrueColor X server 627visuals. This fixes at least the following bugs: 628 629 cairo doesn't support 8-bit truecolor visuals 630 https://bugs.freedesktop.org/show_bug.cgi?id=7735 631 632 cairo doesn't support 655 xlib format 633 https://bugs.freedesktop.org/show_bug.cgi?id=9719 634 635Add support for rendering to 8-bit PseudoColor X server visuals. This 636fixes the following bug: 637 638 Cairo doesn't support 8-bit pseudocolor visuals 639 https://bugs.freedesktop.org/show_bug.cgi?id=4945 640 641Snapshot 1.5.12 (2008-02-28 Carl Worth <cworth@cworth.org>) 642=========================================================== 643This is the sixth snapshot in cairo's unstable 1.5 series. It comes 1 644week after the 1.5.10 snapshot. This snapshot includes the 645long-awaited change from 16.16 to 24.8 fixed-point values, (see below 646for why you should care). It also includes several backend-specific 647bug fixes. 648 64924.8 fixed-point format 650----------------------- 651Cairo has always converted path coordinates to a fixed-point 652representation very early in its processing. Historically, this has 653been a 32-bit representation with 16 bits of integer for the 654device-pixel grid and 16 bits of sub-pixel positioning. The choice of 65516 bits for the integer coordinate space was based on the 16-bit limit 656for X Window drawables. 657 658This 16-bit limit has proven problematic for many applications. It's 659an especially vexing problem when targeting non-X backends that don't 660have any 16-bit restriction. But even when targeting cairo-xlib, it's 661often desirable to draw a large shape, (say a background rectangle), 662that extends beyond the surface bounds and expect it to fill the 663surface completely, (rather than overflowing and triggering random 664behavior). 665 666Meanwhile, nobody has ever really needed 16 bits of sub-pixel 667precision. 668 669With this snapshot, the fixed-point system is still in place and is 670still using a 32-bit representation, (future versions of cairo might 671move entirely to floating-point when targeting PDF output for 672example). But the representation now provides 24 bits of pixel 673addressing and only 8 bits of sub-pixel positioning. This should give 674a much less stifling space to many applications. 675 676However, the underlying pixman library still has 16-bit limitations in 677many places, (it has its roots in the X server as well). Until those 678are also fixed, applications targeting cairo image surfaces, or 679hitting software fallbacks when targeting other surfaces will still 680encounter problems with device-space values needing more than 16 681integer bits. 682 683generic fixes 684------------- 685Add a few tests to the test suite to increase coverage. 686 687Cleanup a few error-handling paths, (propagate error correctly). 688 689cairo-ft 690-------- 691Fix handling of font sizes smaller than 1 device pixel. 692 693cairo-pdf 694--------- 695Fix to properly save/restore clip when analyzing meta-surface 696patterns, (fixing a couple of test-suite failures). 697 698Implement native support for CAIRO_OPERATOR_SOURCE when the source 699pattern is opaque. 700 701Emit rectangles as PDF rectangles ("re" operator) rather than as 702general paths. 703 704cairo-ps 705-------- 706Fix to work properly with the 16.16->24.8 change. 707 708cairo-svg 709--------- 710Fix CAIRO_EXTEND_REFLECT by using an image fallback, (there's no 711direct SVG support for reflected patterns). 712 713Fix the use of alpha-only masks, (such as CAIRO_FORMAT_A8). 714 715cairo-quartz 716------------ 717Add new API for efficiently using image data as a source: 718 719 cairo_surface_t * 720 cairo_quartz_image_surface_create (cairo_surface_t *image_surface); 721 722 cairo_surface_t * 723 cairo_quartz_image_surface_get_image (cairo_surface_t *surface); 724 725For full documentation, see: 726 727 http://cairographics.org/manual/cairo-Quartz-Surfaces.html#cairo-quartz-image-surface-create 728 729Several fixes for cairo_mask(). 730 731cairo-atsui 732----------- 733Change default from from Monaco to Helvetica to be more consistent 734with other font backends. 735 736Snapshot 1.5.10 (2008-02-20 Carl Worth <cworth@cworth.org>) 737=========================================================== 738This is the fifth snapshot in cairo's unstable 1.5 series. It comes 3 739weeks after the 1.5.8 snapshot. This snapshot adds one new API 740function, (cairo_has_current_point), and the usual mix of 741improvements, (more efficient PostScript/PDF output, optimized 742stroking), and fixes (more robust error-handling, etc.). See below for 743details. 744 745New API 746------- 747Add a new function to query if there is a current point: 748 749 cairo_bool_t 750 cairo_has_current_point (cairo_t *cr); 751 752There is no current point immediately after cairo_create(), nor after 753cairo_new_path() or cairo_new_sub_path(). There is a current point 754after any of the path-creation functions, (cairo_move_to, 755cairo_line_to, cairo_curve_to, etc.). 756 757With this new function, we also revert the change of the return type 758of cairo_get_current_point from cairo 1.5.8, (it's now a void function 759again). 760 761Optimizations 762------------- 763Optimize stroking code to avoid repeated calculation of redundant 764values, (particularly significant for very large, offscreen paths). 765 766General fixes 767------------- 768Patch a few more potential buffer overruns, (due to integer 769overflow). 770 771Many fixes and improvements to cairo's error-handling, (ensure that 772correct error values are returned, clean up memory leaks on 773error-handling paths, etc.). 774 775Fix a potential infinite loop when stroking a spline with a pen that 776has been transformed to a line segment. 777 778Remove treating NULL as a synonym for a valid cairo_font_options_t* 779with default values, (a change that had been introduced as of cairo 7801.5.8). 781 782Remove the altered handling of tolerance and fallback-resolution that 783had been introduced as of cairo 1.5.4. 784 785cairo-xlib 786---------- 787Pass the original Drawable, (as opposed to the root window), to 788XCreatePixmap when creating a similar surface. This gives the X server 789more information so that it can be clever and efficient. 790 791cairo-pdf 792--------- 793Fix the rendering of repeating and reflecting patterns. 794 795Ensure miter limit is always >= 1, (smaller limits are not meaningful, 796but they can cause some PDF viewers to fail to display pages). 797 798Generate more efficient output when the same path is used for both 799fill and stroke. 800 801cairo-ps 802-------- 803Start sharing much of the cairo-pdf code rather than implementing very 804similar code in cairo-ps. 805 806Implement native support for repeating and reflecting linear 807gradients. 808 809Implement reflected surface patterns. 810 811Ensure miter limit is always >= 1, (smaller limits are not meaningful, 812but they can cause some PostScript viewers to crash). 813 814Generate PostScript that will perform more efficiently and use less 815memory on printers, (use currentfile instead of a giant string array 816for image data, and avoid using PostScript patterns for paint() and 817fill() when possible). 818 819cairo-svg 820--------- 821Avoid unnecessary rasterization when copying a "similar" surface to 822another svg surface, (allow the SOURCE operator to be implemented with 823all-vector operations if there are no underlying objects). 824 825cairo-atsui 826----------- 827Eliminate infinite loop when attempting to render an empty string. 828 829Snapshot 1.5.8 (2008-01-30 Carl Worth <cworth@cworth.org>) 830========================================================== 831This is the fourth snapshot in cairo's unstable 1.5 series. It comes 2 832weeks after the 1.5.6 snapshot. It adds a few new API functions. Most 833notably all callers of cairo_image_surface_create_for_data should now 834be calling cairo_format_stride_for_width to compute a legal stride 835value. See below for more details. 836 837New API in cairo 1.5.8 838---------------------- 839We've added a new function that should be called to compute a legal 840stride value before allocating data to be used with 841cairo_image_surface_create_for_data: 842 843 int 844 cairo_format_stride_for_width (cairo_format_t format, 845 int width); 846 847We've also added a new cairo_path_extents function that can be used to 848compute a bounding box for geometry such as a single line segment, 849(contrast with cairo_path_extents and cairo_stroke_extents): 850 851 void 852 cairo_path_extents (cairo_t *cr, 853 double *x1, double *y1, 854 double *x2, double *y2); 855 856And finally, we've added a function to allow for querying the 857XRenderPictFormat of a cairo-xlib surface: 858 859 XRenderPictFormat * 860 cairo_xlib_surface_get_xrender_format (cairo_surface_t *surface); 861 862API changes 863----------- 864Fix return types of cairo_surface_show_page and 865cairo_surface_copy_page. This is an API change to functions that are 866new in the 1.5 series, so not an API break compared to any stable 867cairo release, (1.0.x, 1.2.x, 1.4.x). 868 869Change the return type of cairo_get_current_point() from void to 870cairo_status_t. This allows the caller to receive a 871CAIRO_STATUS_NO_CURRENT_POINT value to distinguish the a current point 872at the origin from no current point existing. 873 874Performance improvement 875----------------------- 876Improve performance of clipping by using an optimized code path 877internally, (with the ADD operator instead of IN). 878 879General bug fixes 880----------------- 881Fix various cairo_*_extents functions to initialize the return-value 882variables even in the case of a cairo_t in error. 883 884Treat NULL as a legitimate value for cairo_font_options_t*. [NOTE: 885On discussion afterwards, we decided against this change so it has 886been removed as of cairo 1.5.10.] 887 888Fix rendering with CAIRO_ANTIALIAS_NONE to be more predictable, (that 889is, to avoid seams appearing when geometry and imagery share an 890identical edge). Portions of this fix are in the pixman library and 891will appear in a future release of that library. 892 893Avoid triggering an error for a font size of 0. 894 895Miscellaneous changes 896--------------------- 897Require pixman >= 0.9.6. 898 899There has been a tremendous amount improvement to cairo's 900documentation. We're delighted that 100% of the public API has at 901least some documentation in the API reference manual. Many thanks to 902Behdad Esfahbod and Nis Martensen for leading this effort. 903 904cairo-pdf and cairo-ps 905---------------------- 906Eliminate failure when a Type 1 font is embedded with an explicit 907glyph 0. 908 909cairo-pdf 910--------- 911Implement a more correct and more efficient approach for patterns with 912an extend mode of CAIRO_EXTEND_REFLECT. 913 914cairo-ps 915-------- 916Fix image masks to properly pack and pad mask bits. 917 918cairo-quartz 919------------ 920Take care to only use DrawTiledImage for integer-aligned images, (and 921use slower paths to get the correct result in other cases). 922 923cairo-win32 924----------- 925Fix for older versions of mingw. 926 927Improve the handling of the clipping with the win32 and win32-printing 928surfaces. 929 930Fix rendering of non black/white text. 931 932Snapshot 1.5.6 (2008-01-15 Carl Worth <cworth@cworth.org>) 933========================================================== 934This is the third snapshot in cairo's unstable 1.5 series. It comes 935about 6 weeks after the 1.5.4 snapshot. The only API addition compared 936to 1.5.4 is very minor, (a new value CAIRO_STATUS_TEMP_FILE_ERROR). 937The remainder of the changes are the usual accumulation of bug fixes 938and improvements. See below for details. 939 940General bug fixes 941----------------- 942Fix handling of fonts that contain a mixture of outline and bitmapped 943glyphs. There was a change in this handling in 1.5.4 that improved 944some cases and also regressed other cases. Now, all cases should be 945handled quite well. 946 947Fix alignment issues that were causing SIGBUS failures on SPARC. 948 949Fix a regression (which first appeared in 1.5.2) where stroking under 950a large scale would sometimes incorrectly replace a miter join with a 951bevel join. (Thanks to Keith Packard.) 952 953Fix reporting of zero-sized extents to be {0,0} rather than 954{INT_MAX,INT_MIN}. This avoids several integer overflow and 955allocations of massive regions in some cases. 956 957Fix failures of gradients with no stops, (quartz, ps, and pdf). 958 959Fix handling of Type 1 fonts on Windows platforms. 960 961Fix handling of Type 1 fonts with no specific family name in the font 962itself, (generate a CairoFont-x-y name). 963 964Handle NULL string values in cairo_show_text, cairo_show_glyphs, and 965friends. 966 967Many robustness improvements along error-handling paths, (thanks as 968always, to Chris "ickle" Wilson). 969 970Various other minor fixes. 971 972Paginated backends (PDF/PostScript/win32-printing) 973-------------------------------------------------- 974Avoid unnecessary rasterization when using a paginated surface as a 975source, (such as drawing from one pdf surface to another). 976 977Fix replaying of paginated surface with more than one level of push/pop 978group. 979 980cairo-xlib 981---------- 982Fix xlib backend to not consider recent X server release as having a 983buggy repeat implementation in the Render extension. 984 985cairo-pdf 986--------- 987Fix PDF output to avoid triggering very slow rendering in PDF viewers, 988(avoid starting and stopping the content stream for each pattern 989emission). 990 991Support CAIRO_OPERATOR_SOURCE in cases where there is nothing below 992the object being drawn. 993 994Fix to avoid seams appearing between multiple fallback regions. 995 996cairo-ps (PostScript) 997--------------------- 998Use correct bounding box in Type 3 fonts. 999 1000Fix several bugs in cairo's PostScript output. These include making 1001the PostScript output more compatible with recent versions of 1002ghostscript that are more strict about Type 3 fonts, for 1003example. 1004 1005Fix for win32 to not attempt to create temporary files in the root 1006directory, (where the user may not have write permission). 1007 1008Avoid generating Level 3 PostScript if Level 2 is sufficient. Also, 1009add code in output documents to alert the user if Level 3 PostScript 1010is handed to a device that cannot handle PostScript beyond Level 10112. 1012 1013cairo-directfb 1014-------------- 1015Various performance optimizations. 1016 1017Fixed support for small surfaces (less than 8x8). 1018 1019Provide support for environment variables CAIRO_DIRECTFB_NO_ACCEL to 1020disable acceleration and CAIRO_DIRECTFB_ARGB_FONT to enable ARGB fonts 1021instead of A8. 1022 1023cairo-os2 1024--------- 1025Allow OS/2 APIs instead of C library allocation functions. 1026 1027Snapshot 1.5.4 (2007-12-05 Carl Worth <cworth@cworth.org>) 1028========================================================== 1029This is the second snapshot in cairo's unstable 1.5 series. It comes 1030just over 1 month after the 1.5.2 snapshot. There are no API changes 1031or additions in 1.5.4 compared to 1.5.2, but there are several bug 1032fixes, and some optimizations. Most of these apply to particular 1033backends. See below for details. 1034 1035General improvements 1036-------------------- 1037Use less memory for spline approximation calculations. 1038 1039Change how the tolerance value is interpreted with regard to 1040fallback-resolution. [Note: On further discussion, we decided against 1041this change for now. It is removed as of cairo 1.5.10.] 1042 1043Fix precision of floating-point values in vector-output backends to 1044avoid rounding errors with very small numbers. 1045 1046Xlib improvements 1047----------------- 1048Fix bug in glyph rendering with xlib, (due to everything being clipped 1049out). This was a regression in the 1.5.2 snapshot that was visible in 1050the GIMP, for example. See: 1051 1052 cairo 1.5.2 causes font problems in GIMP 2.4 status bar and evolution 2.12.1 1053 https://bugs.freedesktop.org/show_bug.cgi?id=13084 1054 1055PostScript improvements 1056----------------------- 1057Fix bug leading to invalid PostScript files when rendering 1058text, (need "0 0 xyshow" instead of "0 xyshow"). 1059 1060Fix many issues with Type 3 fonts, including making the resulting text 1061extractable. 1062 1063Quartz improvements 1064------------------- 1065Fix font metrics height value for ATSUI, (helps webkit on GTK+ OS X 1066layout nicely). 1067 1068Fix gradients. 1069 1070Fix EXTEND_NONE mode for patterns. 1071 1072Fix cairo_quartz_surface_create to properly clear the new surface 1073in cairo_quartz_surface_create. 1074 1075Fix to correctly handle 0x0 sized surfaces. 1076 1077Optimize drawing of ExtendMode::REPEAT patterns for OS X 10.5. 1078 1079Snapshot 1.5.2 (2007-10-30 Carl Worth <cworth@cworth.org>) 1080========================================================== 1081This is the first snapshot in cairo's unstable 1.5 series. It comes 4 1082months after the 1.4.10 release. This snapshot includes significant 1083improvements to PDF and PostScript output, which is one of the things 1084in which we're most interested in getting feedback. There are a couple 1085of minor API additions, and several optimizations, (primarily in the 1086"print/vector" backends). And there are dozens of bug fixes and 1087robustness improvements. 1088 1089New dependency on external pixman library 1090----------------------------------------- 1091A significant change in this snapshot compared to all previous cairo 1092releases is that cairo now depends on an external "pixman" library for 1093its software rendering. Previously this same code was compiled 1094internally as part of cairo, but now the code is separate so that both 1095cairo and the X server can now share common code, (thanks very much to 1096Søren Sandmann for his work on separating pixman and maintaining it). 1097 1098So users will need to acquire and build pixman before being able to 1099build cairo. The current release is 0.9.6 and can be obtained from 1100here: 1101 1102 http://cairographics.org/releases/pixman-0.9.6.tar.gz 1103 1104 which can be verified with: 1105 1106 http://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1 1107 66f01a682c64403a3d7a855ba5aa609ed93bcb9e pixman-0.9.6.tar.gz 1108 1109 http://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1.asc 1110 (signed by Carl Worth) 1111 1112Major PDF/PostScript improvements 1113--------------------------------- 1114Adrian Johnson has done some long-awaited work to make cairo's PDF and 1115PostScript output more interesting than ever before. First, many 1116operations that previously triggered image fallbacks will now be 1117rendered as native vectors. These operations include: 1118 1119 PDF: cairo_push_group, cairo_surface_create_similar, 1120 cairo_mask, A8/A1 surface sources, repeating/reflecting linear 1121 gradients. 1122 1123 PostScript: cairo_push_group, cairo_surface_create_similar, 1124 gradients, bilevel alpha masks, (for example, all values either 0 or 1125 255 for an A8 mask). 1126 1127Not only that, but when an image fallback is required, it will now be 1128limited to only the necessary region. For example, a tiny translucent 1129image overlaying a small portion of text would previously caused an 1130entire PostScript page to be rendered as a giant image. Now, the 1131majority of that page will be nice text, and there will only be a tiny 1132image in the output. 1133 1134Additionally, the PostScript output now carefully encodes text so that 1135if it is subsequently converted to PDF, the text will be 1136selectable. 1137 1138This is very exciting progress, and we're hoping to hear from users 1139during the 1.5 series about how things have improved, (for example, 1140inkscape users doing cairo-based PDF export: please let us know how 1141things look). And feel free to pass your thanks along to Adrian for his excellent work. 1142 1143NOTE: This much improved PDF output makes more sophisticated use of 1144functionality in the PDF specification. This means that cairo's output 1145will sometimes expose bugs in some free software PDF viewers, (evince, 1146poppler, and xpdf, for example), that are not yet ready for such PDF 1147files. We're working with the poppler maintainers to get these bugs 1148fixed as quickly as possible. In the meantime, please double-check 1149with other PDF viewers if cairo-generated PDF files are not being 1150rendered correctly. It may be due to a bug in the viewer rather than 1151in the PDF file that cairo has created. 1152 1153Robustness improvements 1154----------------------- 1155Chris Wilson has made the largest contribution by far to cairo 1.5.2, 1156(in number of commits). His more than 150 commits include a huge 1157number of fixes to increase cairo's robustness. These fixes make cairo 1158more robust against invalid and degenerate input, (NaN, empty path, 1159etc.), against size-0 malloc calls, against memory leaks on 1160error-recovery paths, and against other failures during error 1161handling. He also implemented atomic operations to cairo, and used 1162them to fix cairo's previously non-thread-safe reference counting, 1163again improving robustness. 1164 1165Chris has put a tremendous amount of time and effort into writing 1166analysis tools for this work, and in running those tools and fixing 1167the problems they report. We're very grateful for this work, and hope 1168that all cairo users appreciate the more robust implementation that 1169results from it. 1170 1171This work is largely thankless, so it might make sense to notice 1172sometime that cairo has been running quite smoothly for you, and when 1173you do, send a quick "thank you" off to Chris Wilson, since it 1174is all definitely running smoother thanks to his work. 1175 1176New API 1177------- 1178There are no major additions to cairo's core API. The only new, 1179generic functions are: 1180 1181 void 1182 cairo_surface_copy_page (cairo_surface_t *surface); 1183 1184 void 1185 cairo_surface_show_page (cairo_surface_t *surface); 1186 1187which can now be used much more conveniently than the existing 1188cairo_copy_page and cairo_show_page functions in some 1189situations. These functions act identically, but require only a 1190cairo_surface_t* and not a cairo_t*. 1191 1192All other API additions are specific to particular backends. 1193 1194New cairo-win32 API (new font face function and "win32 printing" surface) 1195------------------------------------------------------------------------- 1196There is a new function for creating a win32 font face for both a 1197logfontw and an hfont together. This complements the existing 1198functions for creating a font face from one or the other: 1199 1200 cairo_font_face_t * 1201 cairo_win32_font_face_create_for_logfontw_hfont (LOGFONTW *logfont, 1202 HFONT font); 1203 1204There is also a new "win32 printing" surface: 1205 1206 cairo_surface_t * 1207 cairo_win32_printing_surface_create (HDC hdc); 1208 1209This interface looks identical to the original 1210cairo_win32_surface_create, (both accept and HDC), but the behavior of 1211this new surface is very different. It should only be called with a 1212printing DC, and will result in all drawing commands being stored into 1213a meta-surface and emitted after each page is complete, with analysis 1214to do as minimal image-based fallbacks as necessary. The behavior and 1215implementation shares much with the PDF and PostScript backends. 1216 1217New cairo-ps API (EPS and PostScript level control) 1218--------------------------------------------------- 1219An often requested feature has been the ability to generate 1220Encapsulated PostScript (EPS) with cairo. We have that now with the 1221following very simple API. Just do cairo_ps_surface_create as usual 1222then call this function with a true value: 1223 1224 void 1225 cairo_ps_surface_set_eps (cairo_surface_t *surface, 1226 cairo_bool_t eps); 1227 1228[NOTE: As always with snapshots, it's possible---though not very 1229likely---that the API could still be modified before a final 1230release. For example, this is the first public cairo function that 1231accepts a Boolean parameter. I'm generally opposed to Boolean 1232parameters, but this is probably the one case where I'm willing to 1233accept one, (namely a "set" function that accepts a single Boolean).] 1234 1235Also, it is now possible to control what PostScript level to target, 1236(either level 2 or level 3), with the following new API: 1237 1238 typedef enum _cairo_ps_level { 1239 CAIRO_PS_LEVEL_2, 1240 CAIRO_PS_LEVEL_3 1241 } cairo_ps_level_t; 1242 1243 void 1244 cairo_ps_surface_restrict_to_level (cairo_surface_t *surface, 1245 cairo_ps_level_t level); 1246 1247 void 1248 cairo_ps_get_levels (cairo_ps_level_t const **levels, 1249 int *num_levels); 1250 1251 const char * 1252 cairo_ps_level_to_string (cairo_ps_level_t level); 1253 1254Improvement for cairo-quartz 1255---------------------------- 1256Brian Ewins had contributed several improvements to cairo-quartz. These 1257include an implementation of EXTEND_NONE for linear and radial 1258gradients, (so this extend mode will no longer trigger image fallbacks 1259for these gradients), as well as native surface-mask clipping, (only 1260on OS X 10.4+ where the CGContextClipToMask function is available). 1261 1262He also fixed a semantic mismatch between cairo and quartz for dashing 1263with an odd number of entries in the dash array. 1264 1265We're grateful for Brian since not many quartz-specific improvements 1266to cairo would be happening without him. 1267 1268Optimizations 1269------------- 1270Optimize SVG output for when the same path is both filled and stroked, 1271and avoid unnecessary identity matrix in SVG output. (Emmanuel Pacaud). 1272 1273Optimize PS output to take less space (Ken Herron). 1274 1275Make PS output more compliant with DSC recommendations (avoid initclip 1276and copy_page) (Adrian Johnson). 1277 1278Make PDF output more compact (Adrian Johnson). 1279 1280Release glyph surfaces after uploading them to the X server, (should 1281save some memory for many xlib-using cairo application). (Behdad 1282Esfahbod). 1283 1284Optimize cairo-win32 to use fewer GDI objects (Vladimir Vukicevic). 1285 1286win32-printing: Avoid falling back to images when alpha == 255 1287everywhere. (Adrian Johnson). 1288 1289win32-printing: Avoid falling back for cairo_push_group and 1290cairo_surface_create_similar. (Adrian Johnson) 1291 1292Bug fixes 1293--------- 1294Avoid potential integer overflows when allocating large buffers 1295(Vladimir Vukicevic). 1296 1297Preparations to allow the 16.16 fixed-point format to change to 129824.8 (Vladimir Vukicevic). 1299 1300Fix bugs for unsupported X server visuals (rgb565, rgb555, bgr888, and 1301abgr8888). (Carl Worth and Vladimir Vukicevic) 1302 1303Fix bugs in PDF gradients (Adrian Johnson). 1304 1305Fix cairo-xlib to build without requiring Xrender header 1306files (Behdad Esfahbod). 1307 1308Make cairo more resilient in the case of glyphs not being available in 1309the current font. (Behdad Esfahbod) 1310 1311Prevent crashes when both atsui and ft font backends are compiled in 1312(Brian Ewins). 1313 1314Make font subsetting code more robust against fonts that don't include 1315optional tables (Adrian Johnson). 1316 1317Fix CFF subsetting bug, (which manifested by generating PDF files that 1318Apple's Preview viewer could not read) (Adrian Johnson). 1319 1320Fixed error handling for quartz and ATSUI backends (Brian Ewins). 1321 1322Avoid rounding problems by pre-transforming to avoid integer-only 1323restrictions on transformation in GDI (Adrian Johnson). 1324 1325Fixed an obscure bug (#7245) computing extents for some stroked 1326paths (Carl Worth). 1327 1328Fix crashes due to extreme transformation of the pen, (seems to show 1329up in many .swf files for some reason) (Carl Worth). 1330 1331Release 1.4.10 (2007-06-27 Carl Worth <cworth@cworth.org>) 1332========================================================== 1333This is the fifth update in cairo's stable 1.4 series. It comes 1334roughly three weeks after the 1.4.8 release. The most significant 1335change in this release is a fix to avoid an X error in certain cases, 1336(that were causing OpenOffice.org to crash in Fedora). There is also a 1337semantic change to include child window contents when using an xlib 1338surface as a source, an optimization when drawing many rectangles, and 1339several minor fixes. 1340 1341Eliminate X errors that were killing OO.o (Chris Wilson) 1342-------------------------------------------------------- 1343Cairo is fixed to avoid the X errors propagated when cleaning up 1344Render Pictures after the application had already destroyed the 1345Drawable they reference. (It would be nice if the X server wouldn't 1346complain that some cleanup work is already done, but there you have 1347it.) This fixes the bug causing OpenOffice.org to crash as described 1348here: 1349 1350 XError on right click menus in OOo. 1351 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=243811 1352 1353Use IncludeInferiors when using xlib surface as a source (Ryan Lortie) 1354---------------------------------------------------------------------- 1355When an xlib surface is used as the source of a draw operation the 1356contents of child windows are now included in the source data. The 1357semantics of drawing to xlib surfaces are unchanged (ie: draws are 1358still clipped by child windows overlapping the destination window). 1359 1360Optimize drawing of many rectangles (Vladimir Vukicevic) 1361-------------------------------------------------------- 1362Avoid O(N*N) loop when filling many axis-aligned rectangles, (either 1363many rectangles as separate sub-paths or due to dashing). 1364 1365Miscellaneous fixes 1366------------------- 1367Fix cairo-perf on Solaris by linking to librt. (Behdad Esfahbod) 1368 1369Fix make check for systems that require executable files to have a 1370particular extension. (Behdad Esfahbod) 1371 1372Eliminate some warnings in cairo-quartz. (Brian Ewins) 1373 1374Fix build-breaking typo for cairo-directfb. (Chris Wilson) 1375 1376Release 1.4.8 (2007-06-07 Carl Worth <cworth@cworth.org>) 1377========================================================= 1378This is the fourth update in cairo's stable 1.4 series. It comes just 1379over five weeks after the 1.4.6 release. This release includes a 1380thread-safe surface-cache for solid patterns which significantly 1381improves text rendering with the xlib backend. Also, dozens of error 1382paths in cairo have been fixed thanks to extensive fault-injection 1383testing by Chris Wilson. 1384 1385Surface cache for solid patterns 1386-------------------------------- 1387Originally written by Jorn Baayen, the introduction of a small cache 1388for surfaces created for solid patterns improves performance 1389dramatically. For example, this reduces the volume of X requests 1390during text rendering to the same level as Xft. 1391 1392This cache first made its appearance in a 1.3.x snapshot, but was 1393removed before appearing in any previous major release due to 1394complications with multi-threaded programs. For example, programs like 1395evince that would carefully restrict usage of cairo-xlib to a single 1396thread were unpleasantly surprised to find that using cairo-image in a 1397separate thread could trigger X requests. 1398 1399Behdad Esfahbod designed a fix which was implemented by Chris 1400Wilson. Now, the necessary X requests are queued up until the next 1401time the application directly operates on an xlib surface. 1402 1403Improved error handling paths 1404------------------------------ 1405Chris Wilson continued the excellent work he started in cairo 1.4.4 to 1406make cairo much more robust against out-of-memory and other errors. He 1407applied his memory allocation fault injection cairo's main test suite, 1408(previously he had applied it to cairo's performance suite). 1409 1410Chris's testing found dozens of bugs which he fixed. Many of these 1411bugs had perhaps never been hit by any users. But at least one was 1412hit by the gnome-about program which resulted in dozens of duplicated 1413bug reports against that program: 1414 1415 http://bugzilla.gnome.org/show_bug.cgi?id=431990 1416 1417We were very pleasantly surprised to see this bug get fixed as a 1418side-effect of Chris's work. Well done, Chris! 1419 1420Other fixes 1421----------- 1422Cleanup of mutex declarations (Behdad Esfahbod) 1423 1424Remove unnecessary clip region from SVG output (Emmanuel Pacaud) 1425 1426Remove Xsun from the buggy_repeat blacklist (Elaine Xiong) 1427 1428ATSUI: Fix glyph measurement: faster and more correct (Brian Ewins) 1429 1430Quartz: fixed 'extend' behaviour for patterns, improved pattern performance, 1431and a few smaller correctness fixes. (Brian Ewins, Vladimir Vukicevic) 1432 1433Release 1.4.6 (2007-05-01 Carl Worth <cworth@cworth.org>) 1434========================================================= 1435This is the third update in cairo's stable 1.4 series. It comes a 1436little less than three weeks since the 1.4.4 release. This release 1437fixes the broken mutex initialization that made cairo 1.4.4 unusable 1438on win32, OS/2, and BeOS systems. This release also adds significant 1439improvements to cairo's PDF backend, (native gradients!), and a couple 1440of performance optimizations, (one of which is very significant for 1441users of the xlib backend). See below for more details. 1442 1443Repaired mutex initialization 1444----------------------------- 1445We apologize that cairo 1.4.4 did little more than crash on many 1446platforms which are less-frequently used by the most regular cairo 1447maintainers, (win32, OS/2, and BeOS). The mutex initialization 1448problems that caused those crashes should be fixed now. And to avoid 1449similar problems in the future, we've now started posting pre-release 1450snapshots to get better testing, (subscribe to cairo@cairographics.org 1451if you're interested in getting notified of those and testing them). 1452 1453PDF Improvements 1454---------------- 1455Thanks to Adrian Johnson, (cairo PDF hacker extraordinaire), we have 1456several improvements to cairo's PDF backend to announce: 1457 1458Native gradients: 1459 1460 As of cairo 1.4.6, cairo will now generate native PDF gradients in 1461 many cases, (previously, the presence of a gradient on any page 1462 would force rasterized output for that page). Currently, only 1463 gradients with extend types of PAD (the default) or NONE will 1464 generate native PDF gradients---others will still trigger 1465 rasterization, (but look for support for other extend modes in a 1466 future release). Many thanks to Miklós Erdélyi as well, who did the 1467 initial work for this support. 1468 1469Better compatibility with PDF viewers: 1470 1471 The PDF output from cairo should now be displayed correctly by a 1472 wider range of PDF viewers. Adrian tested cairo's PDF output against 1473 many PDF viewers, identified a common bug in many of those viewers 1474 (ignoring the CTM matrix in some cases), and modified cairo's output 1475 to avoid triggering that bugs (pre-transforming coordinates and 1476 using an identity matrix). 1477 1478Better OpenType/CFF subsetting: 1479 1480 Cairo will now embed CFF and TrueType fonts as CID fonts. 1481 1482Performance optimizations 1483------------------------- 1484Faster cairo_paint_with_alpha: 1485 1486 The cairo_paint_with_alpha call is used to apply a uniform alpha 1487 mask to a pattern. For example, it can be used to gradually fade an 1488 image out or in. Jeff Muizelaar fixed some missing/broken 1489 optimizations within the implementation of this function resulting 1490 in cairo_paint_with_alpha being up to 4 times faster when using 1491 cairo's image backend. 1492 1493Optimize rendering of "off-screen" geometry: 1494 1495 Something that applications often do is to ask cairo to render 1496 things that are either partially or wholly outside the current clip 1497 region. Since 1.4.0 the image backend has been fixed to not waste 1498 too much time in this case. But other backends have still been 1499 suffering. 1500 1501 In particular, the xlib backend has often performed quite badly in 1502 this situation. This is due to a bug in the implementation of 1503 trapezoid rasterization in many X servers. 1504 1505 Now, in cairo 1.4.6 there is a higher-level fix for this 1506 situation. Cairo now eliminates or clips trapezoids that are wholly 1507 or partially outside the clip region before handing the trapezoids 1508 to the backend. This means that the X server's performance bug is 1509 avoided in almost all cases. 1510 1511 The net result is that doing an extreme zoom-in of vector-based 1512 objects drawn with cairo might have previously brought the X server 1513 to its knees as it allocated buffers large enough to fit all of the 1514 geometry, (whether visible or not). But now the memory usage should 1515 be bounded and performance should be dramatically better. 1516 1517Miscellaneous 1518------------- 1519Behdad contributed an impressively long series of changes that 1520organizes cairo's internals in several ways that will be very 1521beneficial to cairo developers. Thanks, Behdad! 1522 1523Behdad has also provided a utility for generating malloc statistics, 1524(which was used during the great malloc purges of 1.4.2 and 15251.4.4). This utility isn't specific to cairo so may be of benefit to 1526others. It is found in cairo/util/malloc-stats.c and here are Behdad's 1527notes on using it: 1528 1529 To build, do: 1530 1531 make malloc-stats.so 1532 1533 inside util/, and to use, run: 1534 1535 LD_PRELOAD=malloc-stats.so some-program 1536 1537 For binaries managed by libtool, eg, cairo-perf, do: 1538 1539 ../libtool --mode=execute /bin/true ./cairo-perf 1540 LD_PRELOAD="../util/malloc-stats.so" .libs/lt-cairo-perf 1541 1542Finally, the cairo-perf-diff-files utility was enhanced to allow for 1543generating performance reports from several runs of the same backend 1544while some system variables were changed. For example, this is now 1545being used to allow cairo-perf to measure the performance of various 1546different acceleration architectures and configuration options of the 1547X.org X server. 1548 1549Release 1.4.4 (2007-04-13 Carl Worth <cworth@cworth.org>) 1550========================================================= 1551This is the second update release in cairo's stable 1.4 series. It 1552comes just less than a month after 1.4.2. The changes since 1.4.2 1553consist primarily of bug fixes, but also include at least one 1554optimization. See below for details. 1555 1556Of all the work that went into the 1.4.4 release 1557 1558There have been lots of individuals doing lots of great work on cairo, 1559but two efforts during the 1.4.4 series deserve particular mention: 1560 1561Internal cleanup of error handling, (Chris Wilson) 1562-------------------------------------------------- 1563Chris contributed a tremendous series of patches (74 patches!) to 1564improve cairo's handling of out-of-memory and other errors. He began 1565by adding gcc's warn_unused_attribute to as many functions as 1566possible, and then launched into the ambitious efforts of adding 1567correct code to quiet the dozens of resulting warnings. 1568 1569Chris also wrote a custom valgrind skin to systematically inject 1570malloc failures into cairo, and did all the work necessary to verify 1571that cairo's performance test suite runs to completion without 1572crashing. 1573 1574The end result is a much more robust implementation. Previously, many 1575error conditions would have gone unnoticed and would have led to 1576assertion failures, segmentation faults, or other harder-to-diagnose 1577problems. Now, more than ever, cairo should cleanly let the user know 1578of problems through cairo_status and other similar status 1579functions. Well done, Chris! 1580 1581More malloc reduction, (Mathias Hasselmann) 1582------------------------------------------- 1583After 1.4.0, Behdad launched an effort to chase down excessive calls 1584to malloc within the implementation of cairo. He fixed a lot of 1585malloc-happy objects for 1.4.2, but one of the worst offenders, 1586(pixman regions), was left around. Mathias contributed an excellent 1587series of 15 patches to finish off this effort. 1588 1589The end result is a cairo that calls malloc much less often than it 1590did before. Compared to 1.4.2, 55% of the calls to malloc have been 1591eliminate, (and 60% have been eliminated compared to 1.4.0). Well 1592done, Mathias! 1593 1594Other improvements since 1.4.2 1595------------------------------ 1596• Centralize mutex declarations (will reduce future build breaks), 1597 (Mathias Hasselmann) 1598 1599• Reduce malloc by caching recently freed pattern objects (Chris 1600 Wilson) 1601 1602• Fix some broken composite operations (David Reveman) 1603 https://bugs.freedesktop.org/show_bug.cgi?id=5777 1604 1605Backend-specific fixes 1606---------------------- 1607PDF: 1608 • Use TJ operator for more compact representation of glyphs (Adrian 1609 Johnson) 1610 1611 • Fix glyph positioning bug when glyphs are not horizontal 1612 http://lists.freedesktop.org/archives/cairo/2007-April/010337.html 1613 1614win32: 1615 • Fix crash when rendering with bitmap fonts (Carl Worth) 1616 https://bugzilla.mozilla.org/show_bug.cgi?id=376498 1617 1618xlib: 1619 • Turn metrics-hinting on by default (Behdad Esfahbod) 1620 1621 • Fix edge-effect problem with transformed images drawn to xlib 1622 (Behdad Esfahbod) 1623 https://bugs.freedesktop.org/show_bug.cgi?id=10508 1624 1625 • Avoid dereferencing a NULL screen. (Chris Wilson) 1626 https://bugs.freedesktop.org/show_bug.cgi?id=10517 1627 1628Quartz/ATSUI: 1629 • Fix scaling of glyph surfaces 1630 (Brian Ewins) 1631 https://bugs.freedesktop.org/show_bug.cgi?id=9568 1632 1633 • Fix compilation failure when both xlib and quartz enabled 1634 (Brian Ewins) 1635 1636 • Fix rounding bug leading to incorrectly positioned glyphs 1637 (Robert O'Callahan) 1638 https://bugs.freedesktop.org/show_bug.cgi?id=10531 1639 1640Release 1.4.2 (2007-03-19 Carl Worth <cworth@cworth.org>) 1641========================================================= 1642This is the first update release in cairo's stable 1.4 series. It 1643comes just less than 2 weeks after 1.4.0. We hadn't anticipated an 1644update this early, but we've managed to collect some important fixes 1645that we wanted to get out to cairo users as soon as possible, (6 fixes 1646for crashes, 1 case where graphical elements would not be drawn at 1647all, a handful of backend-specific bugs, and several important build 1648fixes). 1649 1650There's almost nothing but bug fixes in this release, (see below one 1651optimization that Behdad did sneak in), so we recommend that everyone 1652upgrade to this release when possible. 1653 1654Thanks to the many people that worked to fix these bugs, and those 1655that did the work to report them and to test the fixes, (wherever 1656possible both names are credited below). 1657 1658Critical fixes 1659-------------- 1660• Fix a crash due to a LOCK vs. UNLOCK typo (M. Drochner fixing Carl 1661 Worth's embarrassing typo). 1662 1663 http://bugs.freedesktop.org/show_bug.cgi?id=10235 1664 1665• Fix potential buffer overflow, which on some systems with a checking 1666 variant of snprintf would lead to a crash (Adrian Johnson, Stanislav 1667 Brabec, and sangu). 1668 1669 https://bugs.freedesktop.org/show_bug.cgi?id=10267 1670 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=232576 1671 1672• Fix a crash in cairo_stroke_extents or cairo_in_stroke when line 1673 width is 0.0. (Carl Worth and Sebastien Bacher) 1674 1675 https://bugs.freedesktop.org/show_bug.cgi?id=10231 1676 1677• Fix a crash on certain combinations of X server/video drivers (Carl 1678 Worth and Tomas Carnecky). 1679 1680 https://bugs.freedesktop.org/show_bug.cgi?id=10250 1681 1682• Fix a crash due to mishandling of invalid user input (Carl Worth and 1683 Alexander Darovsky). 1684 1685 https://bugs.freedesktop.org/show_bug.cgi?id=9844 1686 1687• xlib: Cleanup server-side glyph caches on XCloseDisplay. This 1688 eliminated a crash detected by the perf suite, (and that 1689 applications could have run into as well). (Chris Wilson) 1690 1691Other bug fixes 1692--------------- 1693• Fix for some geometry which simply disappeared under some 1694 transformations---a stroked line with an extreme skew in X, for 1695 example (Carl Worth and Jonathan Watt). 1696 1697 https://bugzilla.mozilla.org/show_bug.cgi?id=373632 1698 1699• SVG: Fix radial gradients for CAIRO_EXTEND_REFLECT and when r0 > r1 1700 (Emmanuel Pacaud). 1701 1702• PDF: Set page group color space to DeviceRGB. 1703 1704 This fixes incorrect (muddy) transparent colors when rendering cairo 1705 PDF output in some viewers. (Adrian Johnson, Adam Goode, and 1706 MenTaLguY). 1707 1708 http://lists.freedesktop.org/archives/cairo/2006-November/008551.html 1709 1710• win32: Return correct metrics when hinting is off, and fix font 1711 descent computation (Behdad Esfahbod). 1712 1713• quartz: Fix glyph interfaces to correctly return user-space rather 1714 than device-space coordinates (Brian Ewins). 1715 1716 https://bugs.freedesktop.org/show_bug.cgi?id=9568 1717 1718• xcb: Fix parameter-order confusion with xcb_create_pixmap, which now 1719 makes all tests that pass with xlib now pass with xcb (Carl Worth, 1720 Jamey Sharp). 1721 1722• Fix some memory leaks in the perf suite (Chris Wilson). 1723 1724• Fix perf suite to consider changes in pixman/src (Mathias 1725 Hasselmann). 1726 1727Build fixes 1728----------- 1729• Don't include pre-generated cairo-features.h file. This was causing 1730 build failures when building with the directfb backend enabled 1731 (Behdad Esfahbod). 1732 1733 https://bugs.freedesktop.org/show_bug.cgi?id=10189 1734 1735• Eliminate use of maintainer mode from cairo's automake/configure 1736 script. This means that updates to files such as Makefile.am will 1737 take effect, (by rerunning automake and friends as necessary) when 1738 invoking make rather than being silently ignored. (Behdad Esfahbod) 1739 1740• Don't compile cairo-deflate-stream.c, which depends on zlib, unless 1741 building the pdf backend which requires it. (Carl Worth, Tor 1742 Lillqvist) 1743 1744 https://bugs.freedesktop.org/show_bug.cgi?id=10202 1745 1746• Don't make the ps backend link against zlib anymore, since it 1747 doesn't require it (Carl Worth). 1748 1749• Use "find !" rather than "find -not" for better portability (Thomas 1750 Klausner). 1751 1752 https://bugs.freedesktop.org/show_bug.cgi?id=10226 1753 1754• Don't use unsupported visibility attribute "hidden" on Solaris 1755 (Gilles Dauphin, Thomas Klausner). 1756 1757 https://bugs.freedesktop.org/show_bug.cgi?id=10227 1758 1759Optimization 1760------------ 1761• It was Behdad that suggested we focus strictly on bug fixes now that 1762 we shipped so many performance improvements in 1.4.0, but it was 1763 also Behdad that got distracted by the chance to remove a lot of 1764 mallocs from cairo. Paths, gstates, trapezoids, splines, polygons, 1765 and gradient color stops will now use small, stack-allocated buffers 1766 in the most common cases rather than calling malloc as 1767 often. (Behdad Esfahbod). And look for more from Mathias Hasselmann 1768 soon. 1769 1770Release 1.4.0 (2007-03-06 Carl Worth <cworth@cworth.org>) 1771========================================================= 1772The many people[*] who have been working hard on cairo are very 1773pleased to announce the long-awaited release of cairo 1.4. This 1774release comes 4 months after the last stable update release (1.2.6) 1775and 9 months since the initial release of 1.2.0. 1776 1777The release notes below are intended to capture the highlights of the 1778changes that have occurred from the 1.2 series to the new 1.4.0 1779release. 1780 1781Performance improvements 1782------------------------ 1783Within the cairo project, the last 6 months or so has seen an intense 1784effort focusing on the performance of cairo itself. That effort has 1785paid off considerably, as can be seen in the following highlights of 1786some of the performance differences from cairo 1.2.6 to cairo 1.4.0. 1787 1788(Note: The performance results reported here were measured on an x86 1789laptop. Many of the improvements in 1.4---particular those involving 1790text rendering---are even more dramatic on embedded platforms without 1791hardware floating-point units. Such devices played an important part 1792of many of the optimizations that found their way into cairo over the 1793last few months.) 1794 1795• Dramatic improvement when drawing objects that are mostly off-screen 1796 with the image backend (with the xlib backend this case is still 1797 slow due to an X server bug): 1798 1799 image-rgba long-lines-uncropped-100 479.64 -> 4.98: 96.24x speedup 1800 ███████████████████████████████████████████████▋ 1801 1802• Dramatic improvement when copying a small fraction of an image 1803 surface to an xlib surface: 1804 1805 xlib-rgba subimage_copy-512 3.93 -> 0.07: 54.52x speedup 1806 ██████████████████████████▊ 1807 1808• Dramatic improvement to tessellation speed for complex objects: 1809 1810 image-rgb tessellate-256-100 874.16 -> 34.79: 25.13x speedup 1811 ████████████▏ 1812 xlib-rgba zrusin_another_fill-415 148.40 -> 13.85: 10.72x speedup 1813 ████▉ 1814 xlib-rgb world_map-800 680.20 -> 345.54: 1.97x speedup 1815 ▌ 1816 1817• Dramatic improvement to the speed of stroking rectilinear shapes, 1818 (such as the outline of a rectangle or "box"): 1819 1820 image-rgb box-outline-stroke-100 0.18 -> 0.01: 24.22x speedup 1821 ███████████▋ 1822 xlib-rgb box-outline-stroke-100 0.46 -> 0.06: 8.05x speedup 1823 ███▌ 1824 1825 1826• Dramatic improvements to text rendering speeds: 1827 1828 xlib-rgba text_image_rgba_over-256 63.12 -> 9.61: 6.57x speedup 1829 ██▊ 1830 1831• 3x improvements to floating-point to fixed-point conversion speeds: 1832 1833 image-rgba pattern_create_radial-16 9.29 -> 3.44: 2.70x speedup 1834 ▉ 1835 1836• 2x improvements to linear gradient computation: 1837 1838 image-rgb paint_linear_rgb_source-512 26.22 -> 11.61: 2.26x speedup 1839 ▋ 1840 1841• 2x improvement to a case common in PDF rendering: 1842 1843 image-rgb unaligned_clip-100 0.10 -> 0.06: 1.81x speedup 1844 ▍ 1845 1846• 1.3x improvement to rectangle filling speed (note: this improvement 1847 is new since 1.3.16---previously this test case was a 1.3x slowdown 1848 compared to 1.2.6): 1849 1850 image-rgba rectangles-512 6.19 -> 4.37: 1.42x speedup 1851 ▎ 1852 xlib-rgba rectangles-512 7.48 -> 5.58: 1.34x speedup 1853 ▏ 1854 1855NOTE: In spite of our best efforts, there are some measurable 1856performance regressions in 1.4 compared to 1.2. It appears that the 1857primary problem is the increased overhead of the new tessellator when 1858drawing many, very simple shapes. The following test cases capture 1859some of that slowdown: 1860 1861 image-rgba mosaic_tessellate_lines-800 11.03 -> 14.29: 1.30x slowdown 1862 ▏ 1863 image-rgba box-outline-fill-100 0.01 -> 0.01: 1.26x slowdown 1864 ▏ 1865 image-rgba fill_solid_rgb_over-64 0.20 -> 0.22: 1.12x slowdown 1866 1867 image-rgba fill_image_rgba_over-64 0.23 -> 0.25: 1.10x slowdown 1868 1869 xlib-rgb paint_image_rgba_source-256 3.24 -> 3.47: 1.07x slowdown 1870 1871We did put some special effort into eliminating this slowdown for the 1872very common case of drawing axis-aligned rectangles with an identity 1873matrix (see the box-outline-stroke and rectangles speedup numbers 1874above). Eliminating the rest of this slowdown will be a worthwhile 1875project going forward. 1876 1877Also note that the "box-outline-fill" case is a slowdown while 1878"box-outline-stroke" is a (huge) speedup. These two test cases 1879resulted from the fact that some GTK+ theme authors were filling 1880between two rectangles to avoid slow performance from the more natural 1881means of achieving the same shape by stroking a single rectangle. With 18821.4 that workaround should definitely be eliminated as it will now 1883cause things to perform more slowly. 1884 1885Greatly improved PDF output 1886--------------------------- 1887We are very happy to be able to announce that cairo-generated PDF 1888output will now have text that can be selected, cut-and-pasted, and 1889searched with most capable PDF viewer applications. This is something 1890that was not ever possible with cairo 1.2. 1891 1892Also, the PDF output now has much more compact encoding of text than 1893before. Cairo is now much more careful to not embed multiple copies of 1894the same font at different sizes. It also compresses text and font 1895streams within the PDF output. 1896 1897API additions 1898------------- 1899There are several new functions available in 1.4 that were not 1900available in 1.2. Curiously, almost all of the new functions simply 1901allow the user to query state that has been set in cairo (many new 1902"get" functions) rather than providing any fundamentally new 1903operations. The new functionality is: 1904 1905• Getting information about the current clip region 1906 1907 cairo_clip_extents 1908 cairo_copy_clip_rectangle_list 1909 cairo_rectangle_list_destroy 1910 1911• Getting information about the current dash setting 1912 1913 cairo_get_dash_count 1914 cairo_get_dash 1915 1916• Getting information from a pattern 1917 1918 cairo_pattern_get_rgba 1919 cairo_pattern_get_surface 1920 cairo_pattern_get_color_stop_rgba 1921 cairo_pattern_get_color_stop_count 1922 cairo_pattern_get_linear_points 1923 cairo_pattern_get_radial_circles 1924 1925• Getting the current scaled font 1926 1927 cairo_get_scaled_font 1928 1929• Getting reference counts 1930 1931 cairo_get_reference_count 1932 cairo_surface_get_reference_count 1933 cairo_pattern_get_reference_count 1934 cairo_font_face_get_reference_count 1935 cairo_scaled_font_get_reference_count 1936 1937• Setting/getting user data on objects 1938 1939 cairo_set_user_data 1940 cairo_get_user_data 1941 cairo_pattern_set_user_data 1942 cairo_pattern_get_user_data 1943 cairo_scaled_font_set_user_data 1944 cairo_scaled_font_get_user_data 1945 1946• New cairo-win32 functions: 1947 1948 cairo_win32_surface_create_with_ddb 1949 cairo_win32_surface_get_image 1950 cairo_win32_scaled_font_get_logical_to_device 1951 cairo_win32_scaled_font_get_device_to_logical 1952 1953API deprecation 1954--------------- 1955The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never 1956worked as a format value for cairo_image_surface_create, and it wasn't 1957necessary for supporting 16-bit 565 X server visuals. 1958 1959A sampling of bug fixes in cairo 1.4 1960------------------------------------ 1961 • Fixed radial gradients 1962 • Fixed dashing (degenerate and "leaky" cases) 1963 • Fixed transformed images in PDF/PS output (eliminate bogus repeating) 1964 • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD 1965 • cairo_show_page no longer needed for single-page output 1966 • SVG: Fix bug preventing text from appearing in many viewers 1967 • cairo-ft: Return correct metrics when hinting is off 1968 • Eliminate crash in cairo_create_similar if nil surface is returned 1969 • Eliminate crash after INVALID_RESTORE error 1970 • Fix many bugs related to multi-threaded use and locking 1971 • Fix for glyph spacing 32 times larger than desired (cairo-win32) 1972 • Fixed several problems in cairo-atsui (assertion failures) 1973 • Fix PDF output to avoid problems when printing from Acrobat Reader 1974 • Fix segfault on Mac OS X (measuring a zero-length string) 1975 • Fix text extents to not include the size of non-inked characters 1976 • Fix for glyph cache race condition in glitz backend (Jinghua Luo) 1977 • Fix make check to work on OPD platforms (IA64 or PPC64) 1978 • Fix compilation problems of cairo "wideint" code on some platforms 1979 • Many, many others... 1980 1981Experimental backends (quartz, XCB, OS/2, BeOS, directfb) 1982--------------------------------------------------------- 1983None of cairo's experimental backends are graduating to "supported" 1984status with 1.4.0, but two of them in particular (quartz and xcb), are 1985very close. 1986 1987The quartz baceknd has been entirely rewritten and is now much more 1988efficient. The XCB backend has been updated to track the latest XCB 1989API (which recently had a 1.0 release). 1990 1991We hope to see these backends become supported in a future release, 1992(once they are passing all the tests in cairo's test suite). 1993 1994The experimental OS/2 backend is new in cairo 1.4 compared to cairo 19951.2. 1996 1997Documentation improvements 1998-------------------------- 1999We have added documentation for several functions and types that 2000were previously undocumented, and improved documentation on other 2001ones. As of this release, there remain only two undocumented 2002symbols: cairo_filter_t and cairo_operator_t. 2003 2004[*]Thanks to everyone 2005--------------------- 2006I've accounted for 41 distinct people with attributed code added to 2007cairo between 1.2.6 and 1.4.0, (their names are below). That's an 2008impressive number, but there are certainly dozens more that 2009contributed with testing, suggestions, clarifying questions, and 2010encouragement. I'm grateful for the friendships that have developed as 2011we have worked on cairo together. Thanks to everyone for making this 2012all so much fun! 2013 2014Adrian Johnson, Alfred Peng, Alp Toker, Behdad Esfahbod, 2015Benjamin Otte, Brian Ewins, Carl Worth, Christian Biesinger, 2016Christopher (Monty) Montgomery, Daniel Amelang, Dan Williams, 2017Dave Yeo, David Turner, Emmanuel Pacaud, Eugeniy Meshcheryakov, 2018Frederic Crozat, Hans Breuer, Ian Osgood, Jamey Sharp, Jeff Muizelaar, 2019Jeff Smith, Jinghua Luo, Jonathan Watt, Joonas Pihlaja, Jorn Baayen, 2020Kalle Vahlman, Kjartan Maraas, Kristian Høgsberg, M Joonas Pihlaja, 2021Mathias Hasselmann, Mathieu Lacage, Michael Emmel, Nicholas Miell, 2022Pavel Roskin, Peter Weilbacher, Robert O'Callahan, 2023Soren Sandmann Pedersen, Stuart Parmenter, T Rowley, 2024Vladimir Vukicevic 2025 2026Snapshot 1.3.16 (2007-03-02 Carl Worth <cworth@cworth.org>) 2027=========================================================== 2028New API functions 2029----------------- 2030A few new public functions have been added to the cairo API since the 20311.3.14 snapshot. These include a function to query the current scaled 2032font: 2033 2034 cairo_get_scaled_font 2035 2036New functions to query the reference count of all cairo objects: 2037 2038 cairo_get_reference_count 2039 2040 cairo_surface_get_reference_count 2041 cairo_pattern_get_reference_count 2042 2043 cairo_font_face_get_reference_count 2044 cairo_scaled_font_get_reference_count 2045 2046And new functions to allow the use of user_data with any cairo object, 2047(previously these were only available on cairo_surface_t and 2048cairo_font_face_t objects): 2049 2050 cairo_set_user_data 2051 cairo_get_user_data 2052 2053 cairo_pattern_set_user_data 2054 cairo_pattern_get_user_data 2055 2056 cairo_scaled_font_set_user_data 2057 cairo_scaled_font_get_user_data 2058 2059Usability improvement for PDF/PS/SVG generation 2060----------------------------------------------- 2061In previous versions of cairo, generating single-page output with the 2062cairo-pdf, cairo-ps, or cairo-svg backends required a final call to 2063cairo_show_page. This was often quite confusing as people would port 2064functional code from a non-paginated backend and be totally mystified 2065as to why the output was blank until they learned to add this call. 2066 2067Now that call to cairo_show_page is optional, (it will be generated 2068implicitly if the user does not call it). So cairo_show_page is only 2069needed to explicitly separate multiple pages. 2070 2071Greatly improved PDF output 2072--------------------------- 2073We are very happy to be able to announce that cairo-generated PDF 2074output will now have text that can be selected, cut-and-paste, and 2075searched with most capable PDF viewer applications. This is something 2076that was not ever possible with cairo 1.2. 2077 2078Also, the PDF output now has much more compact encoding of text than 2079before. Cairo is now much more careful to not embed multiple copies of 2080the same font at different sizes. It also compresses text and font 2081streams within the PDF output. 2082 2083Major bug fixes 2084--------------- 2085 • Fixed radial gradients 2086 2087 The rendering of radial gradients has been greatly improved. In 2088 the cairo 1.2 series, there was a serious regression affecting 2089 radial gradients---results would be very incorrect unless one of 2090 the gradient circles had a radius of 0.0 and a center point within 2091 the other circle. These bugs have now been fixed. 2092 2093 • Fixed dashing 2094 2095 Several fixes have been made to the implementation of dashed 2096 stroking. Previously, some dashed, stroked rectangles would 2097 mis-render and fill half of the rectangle with a large triangular 2098 shape. This bug has now been fixed. 2099 2100 • Fixed transformed images in PDF/PS output 2101 2102 In previous versions of cairo, painting with an image-based source 2103 surface pattern to the PDF or PS backends would cause many kinds 2104 of incorrect results. One of the most common problems was that an 2105 image would be repeated many times even when the user had 2106 explicitly requested no repetition with CAIRO_EXTEND_NONE. These 2107 bugs have now been fixed. 2108 2109 • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD 2110 2111 In the 1.2 version of cairo any use of CAIRO_EXTEND_REFLECT or 2112 CAIRO_EXTEND_PAD with a surface-based pattern resulted in an 2113 error, (cairo would stop rendering). This bug has now been 2114 fixed. 2115 2116 Now, CAIRO_EXTEND_REFLECT should work properly with surface 2117 patterns. 2118 2119 CAIRO_EXTEND_PAD is still not working correctly, but it will now 2120 simply behave as CAIRO_EXTEND_NONE rather than triggering the 2121 error. 2122 2123New rewrite of quartz backend (still experimental) 2124-------------------------------------------------- 2125Cairo's quartz backend has been entirely rewritten and is now much 2126more efficient. This backend is still marked as experimental, not 2127supported, but it is now much closer to becoming an officially 2128supported backend. (For people that used the experimental nquartz 2129backend in previous snapshots, that implementation has now been 2130renamed from "nquartz" to "quartz" and has replaced the old quartz 2131backend.) 2132 2133Documentation improvements 2134-------------------------- 2135We have added documentation for several functions and types that 2136were previously undocumented, and improved documentation on other 2137ones. As of this release, there remain only two undocumented 2138symbols: cairo_filter_t and cairo_operator_t. 2139 2140Other bug fixes 2141--------------- 2142 • cairo-svg: Fix bug that was preventing text from appearing in many 2143 viewers 2144 2145 • cairo-ft: Return correct metrics when hinting is off 2146 2147 • Cairo 1.3.14 deadlocks in cairo_scaled_font_glyph_extents or 2148 _cairo_ft_unscaled_font_lock_face 2149 2150 https://bugs.freedesktop.org/show_bug.cgi?id=10035 2151 2152 • cairo crashes in cairo_create_similar if nil surface returned by 2153 other->backend->create_similar 2154 2155 https://bugs.freedesktop.org/show_bug.cgi?id=9844 2156 2157 • evolution crash in _cairo_gstate_backend_to_user() 2158 https://bugs.freedesktop.org/show_bug.cgi?id=9906 2159 2160 • Fix memory leak in rectilinear stroking code 2161 2162Things not in this release 2163-------------------------- 2164 • Solid-surface-pattern cache: This patch had been applied during 2165 the 1.3.x series, but it was reverted due to some inter-thread 2166 problems it caused. The patch is interesting since it made a big 2167 benefit for text rendering performance---so we'll work to bring a 2168 corrected version of this patch back as soon as possible. 2169 2170Snapshot 1.3.14 (2006-02-13 Carl Worth <cworth@cworth.org>) 2171=========================================================== 2172This is the seventh development snapshot in the 1.3 series, (and there 2173likely won't be many more before the 1.4.0 release). It comes just 2174over 3 weeks after the 1.3.12 snapshot. 2175 2176Since we're so close to the 1.4.0 release, there are not a lot of new 2177features nor even a lot of new performance improvements in this 2178snapshot. Instead, there are a great number of bug fixes. Some are 2179long-standing bugs that we're glad to say goodbye to, and several are 2180fixes for regressions that were introduced as part of the optimization 2181efforts during the 1.3.x series. 2182 2183PDF text selection fixed 2184------------------------ 2185The inability to correctly select text in cairo-generated PDF has been 2186a defect ever since the initial support for the PDF backend in the 2187cairo 1.2.0 release. With the 1.3.14 snapshot, in most situations, and 2188with most PDF viewer applications, the PDF generated by cairo will 2189allow text to be correctly selected for copy-and-paste, (as well as 2190searching). 2191 2192We're very excited about this new functionality, (and very grateful to 2193Adrian Johnson, Behdad Esfahbod, and others that have put a lot of 2194work into this lately). Please test this new ability and give feedback 2195on the cairo@cairographics.org list. 2196 2197Many thread-safety issues fixed 2198------------------------------- 2199We've discovered that no release of cairo has ever provided safe text 2200rendering from a multi-threaded application. With the 1.3.14 snapshot 2201a huge number of the bugs in this area have been fixed, and multiple 2202application dvelopers have now reported success at writing 2203multi-threaded applications with cairo. 2204 2205Other fixes 2206----------- 2207Fixed a bug that was causing glyph spacing to be 32 times larger than 2208desired when using cairo-win32. 2209 2210Fixed a regression in the rendering of linear gradients that had been 2211present since the 1.3.8 snapshot. 2212 2213Fixed several problems in cairo-atsui that were leading to assertion 2214failures when rendering text. 2215 2216Fix corrupted results when rendering a transformed source image 2217surface to an xlib surface. This was a regression that had been 2218present since the 1.3.2 snapshot. 2219 2220Fixed PDF output to prevent problems printing from some versions of 2221Acrobat Reader, (a single glyph was being substituted for every 2222glyph). 2223 2224And many other fixes as well, (see the logs for details). 2225 2226Snapshot 1.3.12 (2007-01-20 Carl Worth <cworth@cworth.org>) 2227=========================================================== 2228The relentless march toward the cairo 1.4 release continues, (even if 2229slightly late out of the starting blocks in 2007). This is the sixth 2230development snapshot in the 1.3 series. It comes 4 weeks after the 22311.3.10 snapshot. 2232 2233Performance 2234----------- 2235As usual, this snapshot has some fun performance improvements to show 2236off: 2237 2238image-rgba long-lines-uncropped-100 470.08 -> 4.95: 94.91x speedup 2239███████████████████████████████████████████████ 2240image-rgb long-lines-uncropped-100 461.60 -> 4.96: 93.02x speedup 2241██████████████████████████████████████████████ 2242 2243This 100x improvement, (and yes, that's 100x, not 100%), in the image 2244backend occurs when drawing large shapes where only a fraction of the 2245shape actually appears in the final result, (the rest being outside 2246the bounds of the destination surface). Many applications should see 2247speedups here, and the actual amount of speedup depends on the ratio 2248of non-visible to visible portions of geometry. 2249 2250[Note: There remains a similar performance bug when drawing mostly 2251non-visible objects with the xlib backend. This is due to a similar 2252bug in the X server itself, but we hope a future cairo snapshot will 2253workaround that bug to get a similar speedup with the xlib backend.] 2254 2255image-rgba unaligned_clip-100 0.09 -> 0.06: 1.67x speedup 2256▍ 2257image-rgb unaligned_clip-100 0.09 -> 0.06: 1.66x speedup 2258▍ 2259 2260This speedup is due to further MMX optimization by Soeren Sandmann for 2261a case commonly hit when rendering PDF files, (and thanks to Jeff 2262Muizelaar for writing code to extract the test case for us). 2263 2264There's another MMX optimization in this snapshot (without a fancy 2265speedup chart) by Dan Williams which improves compositing performance 2266specifically for the OLPC machine. 2267 2268Thanks to Adrian Johnson, cairo's PDF output is now much more 2269efficient in the way it encodes text output. By reducing redundant 2270information and adding compression to text output streams, Adrian 2271achieved a ~25x improvement in the efficiency of encoding text in PDF 2272files, (was ~45 bytes per glyph and is now ~1.6 bytes per glyph). 2273 2274Bug fixes 2275--------- 2276In addition to those performance improvements, this snapshot includes 2277several bug fixes: 2278 2279 * A huge number of bug fixes for cairo-atsui text rendering, (for mac 2280 OS X). These bugs affect font selection, glyph positioning, glyph 2281 rendering, etc. One noteworthy bug fixes is that 2282 cairo_select_font_face will no longer arbitrarily select bold nor 2283 italic when not requested, (at least not when using a standard CSS2 2284 font family name such as "serif", "sans-serif", "monospace", etc.). 2285 All these fixes are thanks to Brian Ewins who continues to do a 2286 great job as the new cairo-atsui maintainer. 2287 2288 * Fix PDF output so that images that are scaled down no longer 2289 mysteriously repeat (Carl Worth). 2290 2291 * Fix segfault on Mac OS X dues to attempt to measure extents of a 2292 zero-length string (Behdad Esfahbod). 2293 2294 * Fix text extents to not include the size of initial/trailing 2295 non-inked characters (Behdad Esfahbod). 2296 2297API tweaks 2298---------- 2299Three functions have had API changes to improve consistency. Note that 2300the API functions being changed here are all functions that were 2301introduced as new functions during these 1.3.x snapshots. As always, 2302there will not be any API changes to functions included in a major 2303release (1.2.x, 1.4.x, etc.) of cairo. 2304 2305The changes are as follows: 2306 2307 * Rename of cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list. 2308 2309 * Change cairo_get_dash_count to return an int rather than accepting a 2310 pointer to an int for the return value. 2311 2312 * Change cairo_get_dash to have a void return type rather than 2313 returning cairo_status_t. 2314 2315It's possible there will be one more round of changes to these 2316functions, (and perhaps cairo_get_color_stop as well), as we seek to 2317establish a unifying convention for returning lists of values. 2318 2319Snapshot 1.3.10 (2006-12-23 Carl Worth <cworth@cworth.org>) 2320=========================================================== 2321Santa Claus is coming just a little bit early this year, and he's 2322bringing a shiny new cairo snapshot for all the good little boys and 2323girls to play with. 2324 2325This is the fifth development snapshot in the 1.3 series. It comes 9 2326days after the 1.3.8 snapshot, and still well within our goal of 2327having a new snapshot every week, (though don't expect one next 2328week---we'll all be too stuffed with sugar plums). 2329 2330Speaking of sugar plums, there's a sweet treat waiting in this cairo 2331snapshot---greatly improved performance for stroking rectilinear 2332shapes, like the ever common rectangle: 2333 2334image-rgb box-outline-stroke-100 0.18 -> 0.01: 25.58x speedup 2335████████████████████████▋ 2336image-rgba box-outline-stroke-100 0.18 -> 0.01: 25.57x speedup 2337████████████████████████▋ 2338xlib-rgb box-outline-stroke-100 0.49 -> 0.06: 8.67x speedup 2339███████▋ 2340xlib-rgba box-outline-stroke-100 0.22 -> 0.04: 5.39x speedup 2341████▍ 2342 2343In past releases of cairo, some people had noticed that using 2344cairo_stroke to draw rectilinear shapes could be awfully slow. Many 2345people had worked around this by using cairo_fill with a more complex 2346path and gotten a 5-15x performance benefit from that. 2347 2348If you're one of those people, please rip that workaround out, as now 2349the more natural use of cairo_stroke should be 1.2-2x faster than the 2350unnatural use of cairo_fill. 2351 2352And if you hadn't ever implemented that workaround, then you just 2353might get to see your stroked rectangles now get drawn 5-25x faster. 2354 2355Beyond that performance fix, there are a handful of bug fixes in this 2356snapshot: 2357 2358 * Fix for glyph cache race condition in glitz backend (Jinghua Luo) 2359 2360 * Many fixes for ATSUI text rendering (Brian Ewins) 2361 2362 * Un-break recent optimization-triggered regression in rendering text 2363 with a translation in the font matrix (Behdad Esfahbod) 2364 2365 * Fix make check to work on OPD platforms (IA64 or PPC64) 2366 (Frederic Crozat) 2367 2368 * Fix a couple of character spacing issues on Windows 2369 (Jonathan Watt) 2370 2371Have fun with that, everybody, and we'll be back for more in the new 2372year, (with a plan to add the last of our performance improvements in 2373this round, fix a few bad, lingering bugs, and then finish off a nice, 2374stable 1.4 release before the end of January). 2375 2376-Carl 2377 2378Snapshot 1.3.8 (2006-12-14 Carl Worth <cworth@cworth.org>) 2379========================================================== 2380This is the fourth development snapshot in the 1.3 series. It comes 2381just slightly more than one week after the 1.3.6 snapshot. 2382 2383After the bug fixes in 1.3.6, we're back to our original program of 2384weekly snapshots, each one faster than the one from the week 2385before. Cairo 1.3.8 brings a 2x improvement in the speed of rendering 2386linear gradients (thanks to David Turner), and a significant reduction 2387in X traffic when rendering text (thanks to Xan Lopez and Behdad 2388Esfahbod), making cairo behave very much like Xft does. 2389 2390A few other things in the 1.3.8 snapshot worth noting include a more 2391forgiving image comparator in the test suite, (using the "perceptual 2392diff" metric and GPL implementation by Hector Yee[*]), a bug fix for 2393broken linking on x86_64 (thanks to M Joonas Pihlaja) and an even 2394better implementation of _cairo_lround, (not faster, but supporting a 2395more complete input range), from Daniel Amelang. 2396 2397[*] http://pdiff.sourceforge.net/ 2398 2399Snapshot 1.3.6 (2006-12-06 Carl Worth <cworth@cworth.org>) 2400========================================================== 2401This is the third development snapshot in the 1.3 series. It comes two 2402weeks after the 1.3.4 snapshot. 2403 2404We don't have fancy performance charts this week as the primary 2405changes in this snapshot are bug fixes. The performance work continues 2406and the next snapshot (planned for one week from today) should include 2407several improvements. The bug fixes in this snapshot include: 2408 2409 * Fix undesirable rounding in glyph positioning (Dan Amelang) 2410 2411 This bug was noticed by several users, most commonly by seeing 2412 improper text spacing or scrambled glyphs as drawn by nautilus. For 2413 example: 2414 2415 Update to cairo-1.3.4 worsen font rendering 2416 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=217819 2417 2418 * Fix reduced range of valid input coordinates to tessellator 2419 (M Joonas Pihlaja) 2420 2421 This bug was causing lots of assertion failures in mozilla as 2422 mentioned here: 2423 2424 CAIRO_BO_GUARD_BITS and coordinate space? 2425 http://lists.freedesktop.org/archives/cairo/2006-December/008743.html 2426 2427 * Fix several regressions in new tessellator (M Joonas Pihlaja) 2428 2429 Joonas just had a good eye for detail here. I don't think any 2430 external cairo users had noticed any of these bugs yet. 2431 2432 * Fix compilation problems of cairo "wideint" code on some platforms 2433 (Mathieu Lacage) 2434 2435 * Fix failed configure due to broken grep (Dan Amelang) 2436 2437 This bug was reported here: 2438 2439 AX_C_FLOAT_WORDS_BIGENDIAN doesn't work because grep doesn't 2440 work with binary file 2441 https://bugs.freedesktop.org/show_bug.cgi?id=9124 2442 2443 * Remove the pkg-config minimum version requirement (Behdad Esfahbod) 2444 2445 Some systems ship with pkg-config 0.15 and there was really no good 2446 reason for cairo to insist on having version 0.19 before it would 2447 build. 2448 2449There is also one new (but inert) feature in this snapshot. There's a 2450new option that can be passed to cairo's configure script: 2451 2452 --disable-some-floating-point 2453 2454 Disable certain code paths that rely heavily on double precision 2455 floating-point calculation. This option can improve 2456 performance on systems without a double precision floating-point 2457 unit, but might degrade performance on those that do. 2458 2459As of this snapshot, this option does not make any change to cairo, 2460but it is possible that future versions of cairo will respect this 2461option and change the implementation of various functions as 2462appropriate. 2463 2464Snapshot 1.3.4 (2006-11-22 Carl Worth <cworth@cworth.org>) 2465========================================================== 2466This is the second development snapshot in the 1.3 series. It comes 2467one week after the 1.3.2 snapshot. 2468 2469This snapshot has a couple of significant performance improvements, 2470and also adds new support for producing multi-page SVG output, (when 2471targeting SVG 1.2)---thanks to Emmanuel Pacaud. The details of the 2472performance improvements are as follows: 2473 24741. The long-awaited "new tessellator". 2475 2476 The credit for this being an improvement goes to Joonas Pihlaja. He 2477 took my really slow code and really put it through its paces to get 2478 the dramatic performance improvement seen below (up to 38x faster 2479 on realistic cases, and more than 10x faster for the zrusin_another 2480 test). 2481 2482 His own writeup of the work he did is quite thorough, but more than 2483 can be quoted here. Please see his post for the interesting details: 2484 2485 http://lists.freedesktop.org/archives/cairo/2006-November/008483.html 2486 2487 (Though note that this snapshot also includes some additional, 2488 significant improvements that were only sketched out in that 2489 email---see "Generating fewer trapezoids"). 2490 24912. More floating-point improvements 2492 2493 Daniel Amelang continues to work the magic he began in the 1.3.2 2494 snapshot. This time he short-circuits floating-point 2495 transformations by identity matrices and applies the earlier 2496 floating-to-fixed-point technique to the problem of rounding. 2497 2498 The improvements here will primarily benefit text performance, and 2499 will benefit platforms without hardware floating-point more than 2500 those that have it, (some text tests show 20% improvement on an x86 2501 machine and closer to 80% improvement on arm). 2502 2503The performance chart comparing 1.3.2 to 1.3.4 really speaks for 2504itself, (this is on an x86 laptop). This is quite a lot of progress 2505for one week: 2506 2507 xlib-rgb stroke_similar_rgba_over-256 74.99 1.45% -> 2.03 68.38%: 36.86x speedup 2508███████████████████████████████████▉ 2509 xlib-rgb stroke_similar_rgba_source-256 78.23 1.43% -> 3.30 67.05%: 23.71x speedup 2510██████████████████████▊ 2511 xlib-rgba tessellate-256-100 820.42 0.15% -> 35.06 2.84%: 23.40x speedup 2512██████████████████████▍ 2513image-rgba tessellate-256-100 819.55 0.32% -> 35.04 3.56%: 23.39x speedup 2514██████████████████████▍ 2515 xlib-rgb stroke_image_rgba_over-256 78.10 1.43% -> 4.33 65.56%: 18.04x speedup 2516█████████████████ 2517 xlib-rgb stroke_image_rgba_source-256 80.11 1.63% -> 5.75 63.99%: 13.94x speedup 2518█████████████ 2519 xlib-rgba zrusin_another_tessellate-415 89.22 0.35% -> 8.38 5.23%: 10.65x speedup 2520█████████▋ 2521image-rgba zrusin_another_tessellate-415 87.38 0.89% -> 8.37 5.22%: 10.44x speedup 2522█████████▍ 2523image-rgba zrusin_another_fill-415 117.67 1.34% -> 12.88 2.77%: 9.14x speedup 2524████████▏ 2525 xlib-rgba zrusin_another_fill-415 140.52 1.57% -> 15.79 2.88%: 8.90x speedup 2526███████▉ 2527image-rgba tessellate-64-100 9.68 3.42% -> 1.42 0.60%: 6.82x speedup 2528█████▉ 2529 xlib-rgba tessellate-64-100 9.78 4.35% -> 1.45 0.83%: 6.72x speedup 2530█████▊ 2531 xlib-rgb stroke_linear_rgba_over-256 46.01 2.44% -> 7.74 54.51%: 5.94x speedup 2532█████ 2533 xlib-rgb stroke_linear_rgba_source-256 48.09 2.15% -> 9.14 53.00%: 5.26x speedup 2534████▎ 2535 xlib-rgb stroke_radial_rgba_over-256 50.96 2.34% -> 12.46 47.99%: 4.09x speedup 2536███▏ 2537 xlib-rgb stroke_radial_rgba_source-256 53.06 1.57% -> 13.96 46.57%: 3.80x speedup 2538██▊ 2539image-rgba paint_similar_rgba_source-256 0.12 1.57% -> 0.08 9.92%: 1.42x speedup 2540▍ 2541image-rgba paint_image_rgba_source-256 0.12 2.49% -> 0.08 10.70%: 1.41x speedup 2542▍ 2543image-rgba world_map-800 356.28 0.46% -> 275.72 1.15%: 1.29x speedup 2544▎ 2545 xlib-rgba world_map-800 456.81 0.39% -> 357.95 1.39%: 1.28x speedup 2546▎ 2547image-rgb tessellate-16-100 0.09 0.57% -> 0.07 3.43%: 1.23x speedup 2548▎ 2549image-rgba tessellate-16-100 0.09 0.06% -> 0.07 2.46%: 1.23x speedup 2550▎ 2551image-rgba text_solid_rgb_over-256 5.39 4.01% -> 4.47 0.70%: 1.21x speedup 2552▎ 2553image-rgba text_solid_rgba_over-256 5.37 0.82% -> 4.45 0.75%: 1.21x speedup 2554▎ 2555image-rgba text_image_rgb_over-64 0.78 0.10% -> 0.65 0.74%: 1.20x speedup 2556▎ 2557image-rgba text_image_rgba_over-64 0.78 0.29% -> 0.65 0.68%: 1.19x speedup 2558▎ 2559image-rgb text_solid_rgb_over-64 0.76 2.45% -> 0.63 0.81%: 1.19x speedup 2560▎ 2561image-rgba text_solid_rgba_over-64 0.76 0.33% -> 0.64 0.66%: 1.19x speedup 2562▎ 2563image-rgba text_similar_rgba_over-256 5.99 4.72% -> 5.04 1.09%: 1.19x speedup 2564▎ 2565 2566We should point out that there is some potential for slowdown in this 2567snapshot. The following are the worst slowdowns reported by the cairo 2568performance suite when comparing 1.3.2 to 1.3.4: 2569 2570image-rgba subimage_copy-256 0.01 0.87% -> 0.01 3.61%: 1.45x slowdown 2571▌ 2572 xlib-rgb paint_solid_rgb_over-256 0.31 10.23% -> 0.38 0.33%: 1.26x slowdown 2573▎ 2574image-rgba box-outline-fill-100 0.01 0.30% -> 0.01 2.52%: 1.21x slowdown 2575▎ 2576image-rgba fill_solid_rgb_over-64 0.20 1.22% -> 0.22 1.59%: 1.12x slowdown 2577▏ 2578image-rgb fill_similar_rgb_over-64 0.21 1.04% -> 0.24 1.06%: 1.11x slowdown 2579▏ 2580image-rgba fill_image_rgb_over-64 0.21 1.19% -> 0.24 0.72%: 1.11x slowdown 2581▏ 2582image-rgba fill_similar_rgb_over-64 0.21 0.18% -> 0.24 0.30%: 1.11x slowdown 2583▏ 2584image-rgb fill_solid_rgba_over-64 0.22 1.66% -> 0.24 1.15%: 1.11x slowdown 2585▏ 2586image-rgb fill_image_rgb_over-64 0.21 0.14% -> 0.24 0.80%: 1.11x slowdown 2587▏ 2588image-rgba fill_image_rgba_over-64 0.22 1.34% -> 0.25 0.20%: 1.11x slowdown 2589▏ 2590image-rgba fill_solid_rgba_over-64 0.22 1.48% -> 0.24 0.95%: 1.11x slowdown 2591▏ 2592image-rgb fill_similar_rgba_over-64 0.22 1.13% -> 0.25 1.25%: 1.10x slowdown 2593▏ 2594 2595The 45% slowdown for subimage_copy is an extreme case. It's unlikely 2596to hit many applications unless they often use cairo_rectangle; 2597cairo_fill to copy a single pixel at a time. In any case, it shows a 2598worst-case impact of the overhead of the new tessellator. The other 2599slowdowns (~ 10%) are probably more realistic, and still very 2600concerning. 2601 2602We will work to ensure that performance regressions like these are not 2603present from one major release of cairo to the next, (for example, 2604from 1.2 to 1.4). 2605 2606But we're putting this 1.3.4 snapshot out there now, even with this 2607potential slowdown so that people can experiment with it. If you've 2608got complex geometry, we hope you will see some benefit from the new 2609tessellator. If you've got primarily simple geometry, we hope things 2610won't slowdown too much, but please let us know what slowdown you see, 2611if any, so we can calibrate our performance suite against real-world 2612impacts. 2613 2614Thanks, and have fun with cairo! 2615 2616Snapshot 1.3.2 (2006-11-14 Carl Worth <cworth@cworth.org>) 2617========================================================== 2618This is the first development snapshot since the 1.2 stable series 2619branched off shortly after the 1.2.4 release in August 2006. 2620 2621This snapshot includes all the bug fixes from the 1.2.6 release, 2622(since they originated here on the 1.3 branch first and were 2623cherry-picked over to 1.2). But more importantly, it contains some new 2624API in preparation for a future 1.4 release, and most importantly, it 2625contains several performance improvements. 2626 2627The bug fixes will not be reviewed here, as most of them are already 2628described in the 1.2.6 release notes. But details for the new API and 2629some performance improvements are included here. 2630 2631As with all snapshots, this is experimental code, and the new API 2632added here is still experimental and is not guaranteed to appear 2633unchanged in any future release of cairo. 2634 2635API additions 2636------------- 2637Several new API additions are available in this release. There is a 2638common theme among all the additions in that they allow cairo to 2639advertise information about its state that it was refusing to 2640volunteer earlier. So this isn't groundbreaking new functionality, but 2641it is essential for easily achieving several tasks. 2642 2643The new functions can be divided into three categories: 2644 2645 Getting information about the current clip region 2646 ------------------------------------------------- 2647 cairo_clip_extents 2648 cairo_copy_clip_rectangles 2649 cairo_rectangle_list_destroy 2650 2651 Getting information about the current dash setting 2652 -------------------------------------------------- 2653 cairo_get_dash_count 2654 cairo_get_dash 2655 2656 Getting information from a pattern 2657 ---------------------------------- 2658 cairo_pattern_get_rgba 2659 cairo_pattern_get_surface 2660 cairo_pattern_get_color_stop_rgba 2661 cairo_pattern_get_color_stop_count 2662 cairo_pattern_get_linear_points 2663 cairo_pattern_get_radial_circles 2664 2665In each of these areas, we have new API for providing a list of 2666uniform values from cairo. The closest thing we had to this before was 2667cairo_copy_path, (which is rather unique in providing a list of 2668non-uniform data). 2669 2670The copy_clip_rectangles/rectangle_list_destroy functions follow a 2671style similar to that of cairo_copy_path. Meanwhile, the dash and 2672pattern color stop functions introduce a new style in which there is a 2673single call to return the number of elements available (get_dash_count 2674and get_color_stop_count) and then a function to be called once to get 2675each element (get_dash and get_color_stop_rgba). 2676 2677I'm interested in hearing feedback from users of these new API 2678functions, particularly from people writing language bindings. One 2679open question is whether the clip "getter" functionality should adopt 2680a style similar to that of the new dash and color_stop interfaces. 2681 2682API deprecation 2683--------------- 2684The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never 2685worked as a format value for cairo_image_surface_create, and it wasn't 2686necessary for supporting 16-bit 565 X server visuals. 2687 2688XCB backend changes 2689------------------- 2690The XCB backend has been updated to track the latest XCB API (which 2691recently had a 1.0 release). 2692 2693New quartz backend 2694------------------ 2695Vladimir Vukicevic has written a new "native quartz" backend which 2696will eventually replace the current "image-surface wrapping" quartz 2697backend. For now, both backends are available, (the old one is 2698"quartz" and the new one is "nquartz"). But it is anticipated that the 2699new backend will replace the old one and take on the "quartz" name 2700before this backend is marked as supported in a release of cairo. 2701 2702New OS/2 backend 2703---------------- 2704Doodle and Peter Weilbacher have contributed a new, experimental 2705backend for using cairo on OS/2 systems. 2706 2707Performance improvements 2708------------------------ 2709Here are some highlights from cairo's performance suite showing 2710improvements from cairo 1.2.6 to cairo 1.3.2. The command used to 2711generate this data is: 2712 2713 ./cairo-perf-diff 1.2.6 HEAD 2714 2715available in the perf/ directory of a recent checkout of cairo's 2716source, (the cairo-perf-diff script does require a git checkout and 2717will not work from a tar file---though ./cairo-perf can still be used 2718to generate a single report there and ./cairo-perf-diff-files can be 2719used to compare two reports). 2720 2721Results are described below both for an x86 laptop (with an old Radeon 2722video card, recent X.org build, XAA, free software drivers), as well 2723as for a Nokia 770. First the x86 results with comments on each, (all 2724times are reported in milliseconds). 2725 2726Copying subsets of an image surface to an xlib surface (much faster) 2727-------------------------------------------------------------------- 2728 xlib-rgba subimage_copy-512 10.50 -> : 53.97x speedup 2729█████████████████████████████████████████████████████ 2730 2731Thanks to Christopher (Monty) Montgomery for this big performance 2732improvement. Any application which has a large image surface and is 2733copying small pieces of it at a time to an xlib surface, (imagine an 2734application that loads a single image containing all the "sprites" for 2735that application), will benefit from this fix. The larger the ratio of 2736the image surface to the portion being copied, the larger the benefit. 2737 2738Floating-point conversion (3x faster) 2739------------------------------------- 2740 xlib-rgba pattern_create_radial-16 27.75 -> 3.93 : 2.94x speedup 2741██ 2742image-rgb pattern_create_radial-16 26.06 -> 3.74 : 2.90x speedup 2743█▉ 2744 2745Thanks to Daniel Amelang, (and others who had contributed the idea 2746earlier), for this nice improvement in the speed of converting 2747floating-point values to fixed-point. 2748 2749Text rendering (1.3 - 2x faster) 2750------------------------------ 2751 xlib-rgba text_image_rgba_source-256 319.73 -> 62.40 : 2.13x speedup 2752█▏ 2753image-rgb text_solid_rgba_over-64 2.85 -> 0.88 : 1.35x speedup 2754▍ 2755 2756I don't think we've ever set out to improve text performance 2757specifically, but we did it a bit anyway. I believe the extra 2758improvement in the xlib backend is due to Monty's image copying fix 2759above, and the rest is due to the floating-point conversion speedup. 2760 2761Thin stroke improvements (1.5x faster) 2762--------------------------------------------- 2763image-rgb world_map-800 1641.09 -> 414.77 : 1.65x speedup 2764▋ 2765 xlib-rgba world_map-800 1939.66 -> 529.94 : 1.52x speedup 2766▌ 2767 2768The most modest stuff to announce in this release is the 50% 2769improvement I made in the world_map case. This is in improvement that 2770should help basically anything that is doing strokes with many 2771straight line segments, (and the thinner the better, since that makes 2772tessellation dominate rasterization). The fixes here are to use a 2773custom quadrilateral tessellator rather than the generic tessellator 2774for straight line segments and the miter joins. 2775 2776Performance results from the Nokia 770 2777-------------------------------------- 2778 xlib-rgba subimage_copy-512 55.88 -> 2.04 : 27.34x speedup 2779██████████████████████████▍ 2780 xlib-rgb text_image_rgb_over-256 1487.58 -> 294.43 : 5.05x speedup 2781████ 2782image-rgb pattern_create_radial-16 187.13 -> 91.86 : 2.04x speedup 2783█ 2784 xlib-rgba world_map-800 21261.41 -> 15628.02 : 1.36x speedup 2785▍ 2786 2787Here we see that the subimage_copy improvement was only about half as 2788large as the corresponding improvement on my laptop, (27x faster 2789compared to 54x) and the floating-point conversion fix also was quite 2790as significant, (2x compared to 3x). Oddly the improvement to text 2791rendering performance was more than twice as good (5x compared to 27922x). I don't know what the reason for that is, but I don't think it's 2793anything anybody should complain about. 2794 2795Release 1.2.6 (2006-11-02 Behdad Esfahbod <behdad@behdad.org>) 2796============================================================== 2797This is the third bug fix release in the 1.2 series, coming less than 2798two months after the 1.2.4 release made on August 18. 2799 2800The 1.2.4 release turned out to be a pretty solid one, except for a crasher 2801bug when forwarding an X connection where the client and the server have 2802varying byte orders, eg. from a PPC to an i686. Other than that, various 2803other small bugs have been fixed. 2804 2805Various improvements have been made in the testing infrastructure to prevent 2806false positives, and to make sure the generated cairo shared object behaves as 2807expected in terms of exported symbols and relocations. 2808 2809There were a total of 89 changes since 1.2.4. The following list the most 2810important ones: 2811 2812Common fixes 2813------------ 2814- Avoid unsigned loop control variable to eliminate infinite, 2815 memory-scribbling loop. (#7593) 2816- Fix cairo_image_surface_create to report INVALID_FORMAT errors. 2817 Previously the detected error was being lost and a nil surface was 2818 returned that erroneously reported CAIRO_STATUS_NO_MEMORY. 2819- Change _cairo_color_compute_shorts to not rely on any particular 2820 floating-point epsilon value. (#7497) 2821- Fix infinite-join test case (bug #8379) 2822- Pass correct surface to create_similar in _cairo_clip_init_deep_copy(). 2823 2824PS/PDF fixes 2825------------ 2826- Fix Type 1 embedding in PDF. 2827- Correct the value of /LastChar in the PDF Type 1 font dictionary. 2828- Improve error checking in TrueType subsetting. 2829- Compute right index when looking up left side bearing. (bug #8180) 2830- Correct an unsigned to signed conversion problem in truetype subsetting 2831 bbox. 2832- Type1 subsetting: Don't put .notdef in Encoding when there are 256 glyphs. 2833- Add cairo version to PS header / PDF document info dictionary. 2834- Set CTM before path construction. 2835 2836Win32 fixes 2837----------- 2838- Get correct unhinted outlines on win32. (bug 7603) 2839- Make cairo as a win32 static library possible. 2840- Use CAIRO_FORMAT_RGB24 for BITSPIXEL==32 surfaces too. 2841 2842Build system fixes 2843------------------ 2844- Define WINVER if it's not defined. (bug 6456) 2845- Fix the AMD64 final link by removing SLIM from pixman. 2846- Misc win32 compilation fixes. 2847- Add Sun Pro C definition of pixman_private. 2848- Use pixman_private consistently as prefix not suffix. 2849- Added three tests check-plt.sh, check-def.sh, and check-header.sh that check 2850 that the shared object, the .def file, and the public headers agree about 2851 the exported symbols. 2852- Require pkg-config 0.19. (#8686) 2853 2854 2855Release 1.2.4 (2006-08-18 Carl Worth <cworth@cworth.org>) 2856========================================================= 2857This is the second bug fix release in the 1.2 series, coming less than 2858two weeks after the 1.2.2 release made on August 8. 2859 2860The big motivation for a quick release was that there were a log of 2861build system snags that people ran into with the 1.2.2 release. But, 2862by the time we got those all done, we found that we had a bunch of 2863fixes for cairo's rendering as well. So there's a lot of goodness in 2864here for such a short time period. 2865 2866Rendering fixes 2867--------------- 2868Fix image surfaces to not be clipped when used as a source (Vladimir Vukicevic) 2869http://gitweb.freedesktop.org/?p=cairo;a=commit;h=72e25648c4c4bc82ddd938aa4e05887a293f0d8b 2870 2871Fix a couple of corner cases in dashing degenerate paths (Jeff Muizelaar) 2872http://gitweb.freedesktop.org/?p=cairo;a=commit;h=fbb1758ba8384650157b2bbbc93d161b0c2a05f0 2873 2874Fix support for type1 fonts on win32 (Adrian Johnson) 2875http://gitweb.freedesktop.org/?p=cairo;a=commit;h=da1019c9138695cb838a54f8b871bbfd0e8996d7 2876 2877Fix assertion failure when rotating bitmap fonts (Carl Worth) 2878http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0bfa6d4f33b8ddb5dc55bbe419c15df4af856ff9 2879 2880Fix assertion failure when calling cairo_text_path with bitmap fonts (Carl Worth) 2881http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9878a033531e6b96b5f27e69e10e90dee7440cd9 2882 2883Fix mis-handling of cairo_close_path in some situations (Tim Rowley, Carl Worth) 2884http://gitweb.freedesktop.org/?p=cairo;a=commit;h=53f74e59faf1af78f2f0741ccf1f23aa5dad4efc 2885 2886Respect font_matrix translation in _cairo_gstate_glyph_path (Behdad Esfahbod) 2887http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f183b835b111d23e838889178aa8106ec84663b3 2888 2889Fix vertical metrics adjustment to work with non-identity shapes (Behdad Esfahbod) 2890http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7bc263842a798d657a95e539e1693372448837f 2891 2892[PS] Set correct ImageMatrix in _cairo_ps_surface_emit_bitmap_glyph_data (Behdad Esfahbod) 2893http://gitweb.freedesktop.org/?p=cairo;a=commit;h=d47388ad759b0a1a0869655a87d9b5eb6ae2445d 2894 2895Build system fixes 2896------------------ 2897Fix xlib detection to prefer pkg-config to avoid false libXt dependency (Behdad Esfahbod) 2898http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0e78e7144353703cbd28aae6a67cd9ca261f1d68 2899 2900Fix typos causing win32 build problem with PS,PDF, and SVG backends (Behdad Esfahbod) 2901http://gitweb.freedesktop.org/?p=cairo;a=commit;h=aea83b908d020e26732753830bb3056e6702a774 2902 2903Fix configure cache to not use stale results (Behdad Esfahbod) 2904http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6d0e3260444a2d5b6fb0cb223ac79f1c0e7b3a6e 2905 2906Fix to not pass unsupported warning options to the compiler (Jens Granseuer) 2907http://gitweb.freedesktop.org/?p=cairo;a=commit;h=97524a8fdb899de1ae4a3e920fb7bda6d76c5571 2908 2909Fix to allow env. variables such as png_REQUIRES to override configure detection (Jens Granseuer) 2910http://gitweb.freedesktop.org/?p=cairo;a=commit;h=abd16e47d6331bd3811c908e524b4dcb6bd23bf0 2911 2912Fix test suite to not use an old system cairo when converting svg2png (Behdad Esfahbod) 2913http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6122cc85c8f71b1ba2df3ab86907768edebe1781 2914 2915Fix test suite to not require signal.h to be present (Behdad Esfahbod) 2916http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6f8cf53b1e1ccdbe1ab6a275656b19c6e5120e40 2917 2918Code cleanups 2919------------- 2920Many useful warnings cleanups from sparse, valgrind, and careful eyes 2921(Kjartan Maraas, Pavel Roskin) 2922 2923Release 1.2.2 (2006-08-08 Carl Worth <cworth@cworth.org>) 2924========================================================= 2925This is the first bug fix release in the 1.2 series since the original 29261.2.0 release made six weeks ago. 2927 2928There were some very serious bugs in the 1.2.0 release, (see below), 2929so everybody is encouraged to upgrade from 1.2.0 to 1.2.2. The 1.2.2 2930release maintains source and binary compatibility with 1.2.0 and does 2931not make any API additions. 2932 2933Fix crashes with BGR X servers 2934------------------------------ 2935With cairo 1.2.0 many people reported problems with all cairo-using 2936programs, (including all GTK+ programs with GTK+ >= 2.8) immediately 2937crashing with a complaint about an unsupported image format. This bug 2938affected X servers that do not provide the Render extension and that 2939provide a visual with BGR rather than RGB channel order. 2940 2941report: https://bugs.freedesktop.org/show_bug.cgi?id=7294 2942fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9ae66174e774b57f16ad791452ed44efc2770a59 2943 2944Fix the "disappearing text" bug 2945------------------------------- 2946With cairo 1.2.0 many people reported that text would disappear from 2947applications, sometimes reappearing with mouse motion or 2948selection. The text would disappear after the first space in a string 2949of text. This bug was caused by an underlying bug in (very common) X 2950servers, and only affected text rendered without antialiasing, (either 2951a bitmap font or a vector font with antialiasing disabled). The bug 2952was also exacerbated by a KDE migration bug that caused antialiasing 2953to be disabled more than desired. 2954 2955report: https://bugs.freedesktop.org/show_bug.cgi?id=7494 2956fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=456cdb3058f3b416109a9600167cd8842300ae14 2957see also: 2958Xorg: https://bugs.freedesktop.org/show_bug.cgi?id=7681 2959KDE: http://qa.mandriva.com/show_bug.cgi?id=23990 2960 2961Fix broken image fallback scaling (aka. "broken printing") 2962---------------------------------------------------------- 2963The various "print" backends, (pdf, ps, and svg), sometimes fallback 2964to using image-based rendering for some operations. In cairo 1.2.0 2965these image fallbacks were scaled improperly. Applications using cairo 2966can influence the resolution of the image fallbacks with 2967cairo_surface_set_fallback_resolution. With the bug, any value other 2968than 72.0 would lead to incorrect results, (larger values would lead 2969to increasingly shrunken output). 2970 2971report: https://bugs.freedesktop.org/show_bug.cgi?id=7533 2972fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=1feb4291cf7813494355459bb547eec604c54ffb 2973 2974Fix inadvertent semantic change of font matrix translation (Behdad Esfahbod) 2975---------------------------------------------------------------------------- 2976The 1.2.0 release introduced an inadvertent change to how the 2977translation components of a font matrix are interpreted. In the 1.0 2978series, font matrix translation could be used to offset the glyph 2979origin, (though glyph metrics were reported incorrectly in 29801.0). However in 1.2.0, the translation was applied to the advance 2981values between each glyph. The 1.2.0 behavior is fairly useless in 2982practice, and it was not intentional to introduce a semantic 2983change. With 1.2.2 we return to the 1.0 semantics, with a much better 2984implementation that provides correct glyph metrics. 2985 2986fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=84840e6bba6e72aa88fad7a0ee929e8955ba9051 2987 2988Fix create_similar to preserve fallback resolution and font options (Behdad Esfahbod) 2989------------------------------------------------------------------------------------- 2990There has been a long-standing issue with cairo_surface_create_similar 2991such that font options and other settings from the original 2992destination surface would not be preserved to the intermediate 2993"similar" surface. This could result in incorrect rendering 2994(particularly with respect to text hinting/antialiasing) with 2995fallbacks, for example. 2996 2997report: https://bugs.freedesktop.org/show_bug.cgi?id=4106 2998fixes: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9fcb3c32c1f16fe6ab913e27eb54d18b7d9a06b0 2999 http://gitweb.freedesktop.org/?p=cairo;a=commit;h=bdb4e1edadb78a2118ff70b28163f8bd4317f1ec 3000 3001xlib: Fix text performance regression from 1.0 to 1.2.0 (Vladimir Vukicevic) 3002---------------------------------------------------------------------------- 3003Several people noticed that upgrading from cairo 1.0 to cairo 1.2.0 3004caused a significant performance regression when using the xlib 3005backend. This performance regression was particularly noticeable when 3006doing lots of text rendering and when using a high-latency connection 3007to the X server, (such as a remote X server over an ssh 3008connection). The slowdown was identified and fixed in 1.2.2. 3009 3010report: https://bugs.freedesktop.org/show_bug.cgi?id=7514 3011fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7191885c88068dad57d68ced69a752d1162b12c 3012 3013PDF: Eliminate dependency on FreeType library dependency (Adrian Johnson) 3014------------------------------------------------------------------------- 3015The cairo 1.2 series adds a supported pdf backend to cairo. In cairo 30161.2.0 this backend required the freetype library, which was an 3017undesirable dependency on systems such as win32, (cairo is designed to 3018always prefer the "native" font system). As of cairo 1.2.2 the 3019freetype library is not required to use the pdf backend on the win32 3020platform. 3021 3022report: https://bugs.freedesktop.org/show_bug.cgi?id=7538 3023fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=a0989f427be87c60415963dd6822b3c5c3781691 3024 3025PDF: Fix broken output on amd64 (Adrian Johnson) 3026------------------------------------------------ 3027report: http://bugzilla.gnome.org/show_bug.cgi?id=349826 3028fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f4b12e497b7ac282b2f6831b8fb68deebc412e60 3029 3030PS: Fix broken output for truetype fonts > 64k (Adrian Johnson) 3031--------------------------------------------------------------- 3032fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=067d97eb1793a6b0d0dddfbd0b54117844511a94 3033 3034PDF: Fix so that dashing doesn't get stuck on (Kent Worsnop) 3035------------------------------------------------------------ 3036Kent notices that with the PDF backend in cairo 1.2.0 as soon as a 3037stroke was performed with dashing, all subsequent strokes would also 3038be dashed. There was no way to turn dashing off again. 3039 3040fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=778c4730a86296bf0a71080cf7008d7291792256 3041 3042Fix memory leaks in failure paths in gradient creation (Alfred Peng) 3043-------------------------------------------------------------------- 3044fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=db06681b487873788b51a6766894fc619eb8d8f2 3045 3046Fix memory leak in _cairo_surface_show_glyphs (Chris Wilson) 3047------------------------------------------------------------ 3048report: https://bugs.freedesktop.org/show_bug.cgi?id=7766 3049fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e2fddcccb43d06486d3680a19cfdd5a54963fcbd 3050 3051Solaris: Add definition of cairo_private for some Sun compilers (Alfred Peng) 3052----------------------------------------------------------------------------- 3053report: https://bugzilla.mozilla.org/show_bug.cgi?id=341874 3054fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=04757a3aa8deeff3265719ebe01b021638990ec6 3055 3056Solaris: Change version number of Sun's Xorg server with buggy repeat (Brian Cameron) 3057------------------------------------------------------------------------------------- 3058report: https://bugs.freedesktop.org/show_bug.cgi?id=7483 3059fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e0ad1aa995bcec4246c0b8ab0d5a5a79871ce235 3060 3061Various memory leak fixes 3062------------------------- 3063Fix memory leak in _cairo_surface_show_glyphs (bug 7766) 3064Fix file handle leak in failure path (bug 7616) 3065Fix some memory leaks in the test cases. 3066Fix some memory leaks in font subsetting code used in print backends. 3067 3068Documentation improvements (Behdad Esfahbod) 3069-------------------------------------------- 3070Added new documentation for several functions (cairo_show_page, 3071cairo_copy_page, cairo_in_stroke, cairo_in_fill). 3072 3073Fixed some syntax errors that were preventing some existing 3074documentation from being published. 3075 3076Fixed several minor typographical errors. 3077 3078Added an index for new symbols in 1.2. 3079 3080Release 1.2.0 (2006-06-27 Carl Worth <cworth@cworth.org>) 3081========================================================= 3082This is the culmination of the work that has gone on within the 1.1 3083branch of cairo. 3084 3085There has been one API addition since the cairo 1.1.10 snapshot: 3086 3087 cairo_xlib_surface_get_width 3088 cairo_xlib_surface_get_height 3089 3090There's also a new feature without any API change: 3091 3092 Dots can now be drawn by using CAIRO_LINE_CAP_ROUND with 3093 degenerate sub-paths, (cairo_move_to() followed by either 3094 cairo_close_path() or a cairo_line_to() to the same location). 3095 3096And at least the following bugs have been fixed: 3097 3098 6759 fontconfig option AntiAlias doesn't work in cairo 1.1.2 3099 6955 Some characters aren't displayed when using xlib (cache u... 3100 7268 positive device_offset values don't work as source 3101 * PDF emit_glyph function needs to support bitmapped glyphs 3102 * PS emit_glyph function needs to support bitmapped glyphs 3103 * SVG emit_glyph function needs to support bitmapped glyphs 3104 * PDF: minefield page one is falling back unnecessarily 3105 * PS/PDF: Fix broken placement for vertical glyphs 3106 * PS: Fix to not draw BUTT-capped zero-length dash segments 3107 * Do device offset before float->fixed conversion 3108 http://bugzilla.gnome.org/show_bug.cgi?id=332266 3109 * PS: Fix source surfaces with transformations 3110 * PS: Fix to not draw BUTT-capped degnerate sub-paths 3111 * PS: Don't walk off end of array when printing "~>" 3112 * Fix some memory leaks in the test suite rig 3113 * SVG: Fix memory leak when using cairo_mask 3114 * Fix ExtendMode::REFLECT and EXTEND_PAD to not crash (though these are 3115 still not yet fully implemented for surface patterns). 3116 3117This has been a tremendous effort by everyone, and I'm proud to have 3118been a part of it. Congratulations to all contributors to cairo! 3119 3120Snapshot 1.1.10 (2006-06-16 Carl Worth <cworth@cworth.org>) 3121=========================================================== 3122This is the fifth in a series of snapshots working toward the 1.2 3123release of cairo. 3124 3125The primary motivation for this snapshot is to fix a long-standing bug 3126that had long been silent, but as of the 1.1.8 snapshot started 3127causing crashes when run against 16-bit depth X servers, (often Xvnc 3128or Xnest). The fix for this adds a new CAIRO_FORMAT_RGB16_565 to the 3129API. 3130 3131This snapshot also includes a rewrite of cairo's SVG backend to 3132eliminate the dependency on libxml2. With this in place, cairo 1.2 3133will not depend on any libraries that cairo 1.0 did not. 3134 3135As usual, there are also a few fixes for minor bugs. 3136 3137Snapshot 1.1.8 (2006-06-14 Carl Worth <cworth@cworth.org>) 3138========================================================== 3139This is the fourth in a series of snapshots working toward the 1.2 3140release of cairo. At this point, all major features of the 1.2 release 3141are in place, leaving just a few bug fixes left. 3142 3143In particular, there well be no additional API changes between this 31441.1.8 snapshot and the 1.2 release. 3145 3146The announcement for 1.1.6 mentioned several API changes being 3147considered. Only one of these changes was actually implemented 3148(set_dpi -> fallback_resolution). This change does introduce one 3149source-level incompatibility with respect to previous 1.1.x snapshots, 3150so see below for details. 3151 3152Here is an abbreviated summary of changes since the 1.1.6 snapshot: 3153 3154** API Change ** 3155---------------- 3156According to the plan mentioned in the 1.1.6 notes, one source-level 3157incompatible change has been implemented. The following three 3158functions have been removed from cairo's API: 3159 3160 cairo_pdf_surface_set_dpi 3161 cairo_ps_surface_set_dpi 3162 cairo_svg_surface_set_dpi 3163 3164and in their place the following function has been added: 3165 3166 cairo_surface_set_fallback_resolution 3167 3168The signature and semantics of the function remains the same, so it is 3169a simple matter of changing the name of the function when calling 3170it. As a transition mechanism, this snapshot will (on many systems) 3171build to include the old symbols so that code previously compiled will 3172still run. However, all source code using the old names must be 3173updated before it will compile. And the upcoming 1.2 release is not 3174anticipated to include the old symbols. 3175 3176Finally, it should be pointed out that the old symbols never existed 3177in the supported API of any stable release of cairo. (In the stable 31781.0 releases the PDF, PS, and SVG backends were advertised as 3179experimental and unstable.) 3180 3181And, as always, cairo continues to maintain source and binary 3182compatibility between major releases. So applications compiled against 3183supported backends in a stable release of cairo (1.0.4 say) will 3184continue to compile and run without modification against new major 3185releases (1.2.0 say) without modification. 3186 3187API additions 3188------------- 3189The following new functions have been added to cairo's API: 3190 3191 cairo_surface_get_content 3192 cairo_debug_reset_static_data 3193 cairo_image_surface_get_data 3194 cairo_image_surface_get_format 3195 cairo_image_surface_get_stride 3196 cairo_win32_font_face_create_for_hfont 3197 3198New, backend-specific pkg-config files 3199-------------------------------------- 3200In addition to the original cairo.pc file, cairo will also now install 3201a pkg-config files for each configured backend, (for example 3202cairo-pdf.pc, cairo-svg.pc, cairo-xlib.pc, cairo-win32.pc, etc.) this 3203also includes optional font backends (such as cairo-ft.pc) and the 3204optional png functionality (cairo-png.pc). 3205 3206These new pkg-config files should be very convenient for allowing 3207cairo-using code to easily check for the existing of optional 3208functionality in cairo without having to write complex rules to grub 3209through cairo header files or the compiled library looking for 3210symbols. 3211 3212Printing backend (PS, PDF, and SVG) 3213----------------------------------- 3214Improving the quality of the "printing" backends has been a priority 3215of the development between cairo 1.1.6 and cairo 1.1.8. 3216 3217The big improvement here is in the area of text output. Previously, at 3218best, text was output as paths without taking advantage of any font 3219support available in the output file format. 3220 3221Now, at the minimum text paths will be shared by using type3 fonts 3222(for PS and PDF---and similarly, defs for SVG). Also, if possible, 3223type3 and truetype fonts will be embedded in PostScript and PDF 3224output. There are still some known bugs with this, (for example, 3225selecting text in a cairo-generated PDF file with an embedded truetype 3226font does not work). So there will be some more changes in this area 3227before cairo 1.2, but do try test this feature out as it exists so 3228far. 3229 3230Many thanks to Kristian Høgsberg for the truetype and type1 font 3231embedding. 3232 3233win32 backend 3234------------- 3235Performance improvements by preferring GDI over pixman rendering when possible. 3236Fixes for text rendering. 3237 3238xlib backend 3239------------ 3240Fix potentially big performance bug by making xlib's create_similar 3241try harder to create a pixmap of a depth matching that of the screen. 3242 3243Bug fixes 3244--------- 3245Among various other fixes, the following bugs listed in bugzilla have 3246been fixed: 3247 3248 Bug 2488: Patch to fix pixman samping location bug (#2488). 3249 https://bugs.freedesktop.org/show_bug.cgi?id=2488 3250 3251 Bug 4196: undef MIN an MAX before defining to avoid duplicate definition 3252 https://bugs.freedesktop.org/show_bug.cgi?id=4196 3253 3254 Bug 4723: configure.in: Fix m4 quoting when examining pkg-config version 3255 https://bugs.freedesktop.org/show_bug.cgi?id=4723 3256 3257 Bug 4882: Flag Sun's X server has having buggy_repeat. 3258 https://bugs.freedesktop.org/show_bug.cgi?id=4882 3259 3260 Bug 5306: test/pdf2png: Add missing include of stdio.h 3261 https://bugs.freedesktop.org/show_bug.cgi?id=5306 3262 3263 Bug 7075: Fix make clean to remove cairo.def 3264 https://bugs.freedesktop.org/show_bug.cgi?id=7075 3265 3266(Many thanks to Behdad Esfahbod for helping us track down and fix many 3267of these.) 3268 3269Snapshot 1.1.6 (2006-05-04 Carl Worth <cworth@cworth.org>) 3270========================================================== 3271This is the third in a series of snapshots working toward the imminent 32721.2 release of cairo. For a list of items still needing work on the 3273cairo 1.2 roadmap, please see: 3274 3275 http://cairographics.org/ROADMAP 3276 3277As can be seen in that list, there are no longer any API additions 3278left on the roadmap. Instead, there is a feature (PDF type 3 fonts) a 3279performance optimization (X server gradients) and a list of bug 3280fixes. This gives us a fair amount of freedom to cut the 1.2 release 3281at almost any point by deciding to defer remaining bug fixes to 3282subsequent maintenance releases such as 1.2.2 and 1.2.4. 3283 3284Before we will do that, we must first be wiling to commit to all the 3285new API additions. As a heads-up, there are a couple of potential API 3286changes being considered. (Note that these are changes to new API 3287introduced during 1.1 so these will not introduce API 3288incompatibilities compared to the stable 1.0 series). The changes 3289being considered are: 3290 3291 cairo_get_group_target: may acquire x and y offset return 3292 parameters. May also be eliminated in favor of 3293 cairo_get_target assuming its role 3294 3295 cairo_pdf_surface_set_dpi: 3296 cairo_ps_surface_set_dpi: 3297 cairo_svg_surface_set_dpi: These functions may be removed in favor 3298 of a new cairo_surface_set_fallback_resolution 3299 3300Additionally there is the possibility of a slight change in the 3301semantics of cairo_set_line_width. We believe the current behavior of the sequence: 3302 3303 cairo_set_line_width; ... change CTM ...; cairo_stroke; 3304 3305is buggy. It is currently behaving the same as: 3306 3307 ... change CTM ...; cairo_set_line_width; cairo_stroke; 3308 3309We are considering fixing this bug before 1.2 with the hope that 3310nobody is already relying on the buggy behavior described here. Do 3311shout if you suspect you might be in that position. 3312 3313The items included in this snapshot (since the 1.1.4 snapshot) are 3314described below. 3315 3316API additions 3317------------- 3318The long-awaited group-rendering support is now available with the 3319following function calls: 3320 3321 cairo_push_group 3322 cairo_push_group_with_content 3323 cairo_pop_group 3324 cairo_pop_group_to_source 3325 cairo_get_group_target 3326 3327This API provides a much more convenient mechanism for doing rendering 3328to an intermediate surface without the need to manually create a 3329temporary cairo_surface_t and a temporary cairo_t and clean them up 3330afterwards. 3331 3332Add the following missing get function to complement 3333cairo_surface_set_device_offset: 3334 3335 cairo_surface_get_device_offset 3336 3337PDF backend (API addition) 3338-------------------------- 3339The PDF backend now provides for per-page size changes, (similar to 3340what the PostScript backend got in the 1.1.4 snapshot). The new API 3341is: 3342 3343 cairo_pdf_surface_set_size 3344 3345Xlib backend (API additions) 3346---------------------------- 3347The following functions have been added to allow the extraction of 3348Xlib surface: 3349 3350 cairo_xlib_surface_get_display 3351 cairo_xlib_surface_get_drawable 3352 cairo_xlib_surface_get_screen 3353 cairo_xlib_surface_get_visual 3354 cairo_xlib_surface_get_depth 3355 3356XCB backend (experimental) 3357-------------------------- 3358Update backend so that it now compiles with the recent XCB 0.9 release. 3359 3360Bug fixes and memory leak cleanup 3361--------------------------------- 3362Various little things, nothing too significant though. 3363 3364Snapshot 1.1.4 (2006-05-03 Carl Worth <cworth@cworth.org>) 3365========================================================== 3366This is the second in a series of snapshots working toward the 3367upcoming 1.2 release of cairo. For a list of items still needing work 3368on the cairo 1.2 roadmap, please see: 3369 3370 http://cairographics.org/ROADMAP 3371 3372The items included in this snapshot (since the 1.1.2 snapshot) are 3373described below. 3374 3375PostScript backend: new printing-oriented API 3376--------------------------------------------- 3377We anticipate that with cairo 1.2, toolkits will begin to use cairo 3378for printing on systems that use PostScript as the spool format. To 3379support this use case, we have added 4 new function calls that are 3380specific to the PostScript backend: 3381 3382 cairo_ps_surface_set_size 3383 cairo_ps_surface_dsc_comment 3384 cairo_ps_surface_dsc_begin_setup 3385 cairo_ps_surface_dsc_begin_page_setup 3386 3387These functions allow variation of the page size/orientation from one 3388page to the next in the PostScript output. They also allow the toolkit 3389to provide per-document and per-page printer control options in a 3390device-independent way, (for example, by using PPD options and 3391emitting them as DSC comments into the PostScript output). This should 3392allow toolkits to provide very fine-grained control of many options 3393available in printers, (media size, media type, tray selection, etc.). 3394 3395SVG backend: builds by default, version control 3396----------------------------------------------- 3397The SVG backend continues to see major improvements. It is expected 3398that the SVG backend will be a supported backend in the 1.2 3399release. This backend will now be built by default if its dependencies 3400(freetype and libxml2) are met. 3401 3402Additionally, the SVG backend now has flexibility with regard to what 3403version of SVG it targets. It will target SVG 1.1 by default, which 3404will require image fallbacks for some of the "fancier" cairo 3405compositing operators. Or with the following new function calls: 3406 3407 cairo_svg_surface_restrict_to_version 3408 cairo_svg_get_versions 3409 cairo_svg_version_to_string 3410 3411it can be made to target SVG 1.2 in which there is native support for 3412these compositing operators. 3413 3414Bug fixes 3415--------- 3416At least the following bugs have been fixed since the 1.1.2 snapshot: 3417 3418crash at XRenderAddGlyphs 3419https://bugs.freedesktop.org/show_bug.cgi?id=4705 3420 3421Can't build cairo-1.1.2 on opensolaris due to " void function cannot return value" 3422https://bugs.freedesktop.org/show_bug.cgi?id=6792 3423 3424Missing out-of-memory check at gfx/cairo/cairo/src/cairo-atsui-font.c:185 3425https://bugzilla.mozilla.org/show_bug.cgi?id=336129 3426 3427A couple of memory leaks. 3428 3429Snapshot 1.1.2 (2006-04-25 Carl Worth <cworth@cworth.org>) 3430========================================================== 3431This is the first in a series of snapshots working toward the upcoming 34321.2 release of cairo. (Subsequent snapshot will use successive even 3433numbers for the third digit, 1.1.4, 1.1.6, etc.) This snapshot is 3434backwards-compatible with the 1.0 series---it makes a few API 3435additions but does not remove any API. 3436 3437PostScript and PDF backends are no longer "experimental" 3438-------------------------------------------------------- 3439The major theme of the 1.2 release is improved PostScript and PDF 3440backends for cairo. Unlike the 1.0 series, in the 1.2 series these 3441backends will not be marked as experimental and will be enabled by 3442default. We encourage people to test this snapshot and the PS/PDF 3443backends in particular as much as possible. 3444 3445The PostScript and PDF output is not yet ideal. 3446 3447 * One major problem with the PostScript output is that image 3448 fallbacks are used more often than strictly necessary, and the 3449 image fallbacks are at a lower resolution than desired, (the 3450 cairo_ps_surface_set_dpi call is ignored). 3451 3452 * The major drawback of the current PDF backend implementation is 3453 its text support. Every glyph is represented by a filled path in 3454 the PDF file. The causes file sizes to be much larger and 3455 rendering to be much slower than desired. 3456 3457It is anticipated that both of these shortcomings will see some 3458improvements before the final 1.2 release. 3459 3460In spite of those shortcomings, we hope that the PS and PDF backends 3461will yield faithful results for pretty much any cairo operations you 3462can throw at them. Please let us know if you are getting obviously 3463"different" results from the PS/PDF backends than from the image or 3464xlib backends. 3465 3466Other new experimental backends 3467------------------------------- 3468This snapshot includes three new backends that did not exist in the 34691.0 series: 3470 3471 * beos backend 3472 3473 * directfb backend 3474 3475 * svg backend 3476 3477These are all currently marked "experimental" and are disabled by 3478default. But the SVG backend in particular has seen a lot of recent 3479development and is very close to passing the entire cairo test 3480suite. It is possible that this backend will become a fully supported 3481backend by the time of the cairo 1.2 release. 3482 3483Public API additions 3484-------------------- 3485There have been a few new API functions added to cairo, including: 3486 3487New get_type functions for querying sub-types of object: 3488 3489 cairo_surface_get_type 3490 cairo_pattern_get_type 3491 cairo_font_face_get_type 3492 cairo_scaled_font_get_type 3493 3494More convenience in working with cairo_scaled_font_t with new getter 3495functions: 3496 3497 cairo_scaled_font_get_font_face 3498 cairo_scaled_font_get_font_matrix 3499 cairo_scaled_font_get_ctm 3500 cairo_scaled_font_get_font_options 3501 3502As well as a convenience function for setting a scaled font into a 3503cairo context: 3504 3505 cairo_set_scaled_font 3506 3507and a function to allow text extents to be queried directly from a 3508scaled font, (without requiring a cairo_surface_t or a cairo_t): 3509 3510 cairo_scaled_font_text_extents 3511 3512These new scaled font functions were motivated by the needs of the 3513pango library. 3514 3515Finally, a new path-construction function was added which clears the 3516current point in preparation for a new sub path. This makes cairo_arc 3517easier to use in some situations: 3518 3519 cairo_new_sub_path 3520 3521Before the 1.2 release is final we do still plan a few more API 3522additions specifically motivated by the needs of Mozilla/Firefox. 3523 3524Optimizations and bug fixes 3525--------------------------- 3526Shortly after the 1.0 maintenance series branched off the mainline 3527there was a major rework of the cairo font internals. This should 3528provide some good performance benefits, but it's also another area 3529people should look at closely for potential regressions. 3530 3531There has not yet been any widespread, systematic optimization of 3532cairo, but various performance improvements have been made, (and some 3533of them are fairly significant). So if some things seem faster than 35341.0 then things are good. If there are any performance regressions 3535compared to 1.0 then there is a real problem and we would like to hear 3536about that. 3537 3538There has been a huge number of bug fixes---too many to mention in 3539detail. Again, things should be better, and never worse compared to 35401.0. Please let us know if your testing shows otherwise. 3541 3542Release 1.0.2 (2005-10-03 Carl Worth <cworth@cworth.org>) 3543========================================================= 3544For each bug number XXXX below, see: 3545 3546 https://bugs.freedesktop.org/show_bug.cgi?id=XXXX 3547 3548for more details. 3549 3550General bug fixes 3551----------------- 3552 * 4408 - Add support for dashing of stroked curves 3553 (Carl Worth) 3554 3555 * 4409 - Fix dashing so that each dash is capped on both ends 3556 (Carl Worth) 3557 3558 * 4414 - Prevent SIGILL failures (proper use of -mmmx and -msse flags) 3559 (Sebastien Bacher, Billy Biggs) 3560 3561 * 4299 - Fix crashes with text display in multi-threaded program 3562 (Alexey Shabalin, Carl Worth) 3563 3564 * 4401 - Do not use sincos function since it is buggy on some platforms) 3565 (Tim Mooney, Carl Worth) 3566 3567 * 4245 - Fix several bugs in the test suite exposed by amd64 systems 3568 (Seemant Kulleen, Carl Worth) 3569 3570 * 4321 - Add missing byteswapping on GetImage/PutImage 3571 (Sjoerd Simons, Owen Taylor) 3572 3573 * 4220 - Make the check for rectangular trapezoids simpler and more accurate 3574 (Richard Stellingwerff, Owen Taylor) 3575 3576 * 4260 - Add missing channel-order swapping for antialised fonts 3577 (Barbie LeVile, Owen Taylor) 3578 3579 * 4283 - Fix compilation failure with aggressive inlining (gcc -O3) 3580 (Marco Manfredini, Owen Taylor) 3581 3582 * 4208 - Fix some warnings from sparse 3583 (Kjartan Maraas, Billy Biggs) 3584 3585 * 4269 - Fix to not crash when compiled with -fomit-frame-pointer 3586 (Ronald Wahl, Owen Taylor) 3587 3588 * 4263 - Improve performance for vertical gradients 3589 (Richard Stellingwerff, Owen Taylor) 3590 3591 * 4231 3592 * 4298 - Accomodate gentoo and Mandriva versions in X server vendor string check 3593 (Billy Biggs, Frederic Crozat, Owen Taylor) 3594 3595win32-specific fixes 3596-------------------- 3597 * 4599 - Fix "missing wedges" on some stroked paths (win32) 3598 (Tim Rowley, Jonathan Watt, Bertram Felgenhauer, Carl Worth, Keith Packard) 3599 3600 * 4612 - Fix disappearing text if first character out of surface (win32) 3601 (Tim Rowley) 3602 3603 * 4602 - Fix shutdown of cairo from failing intermediate, size-0 bitmaps (win32) 3604 Aka. the "white rectangles" bug from mozilla-svg testing 3605 (Tim Rowley) 3606 3607 * Various portability improvements for win32 3608 (Hans Breuer, Owen Taylor, Carl Worth) 3609 3610 * 4593 - Fix font sizes to match user expectations (win32) 3611 (Tor Lillqvist, Owen Taylor) 3612 3613 * 3927 - Fix to report metrics of size 0 for glyph-not-available (win32) 3614 (Hans Breuer, Owen Taylor, Tor Lillqvist) 3615 3616 * Add locking primitives for win32 3617 (Hans Breuer) 3618 3619xlib-specific fixes 3620------------------- 3621 * Fix crash from size-0 pixmap due to empty clip region (xlib) 3622 (Radek Doulík, Carl Worth) 3623 3624Release 1.0.0 (2005-08-24 Carl Worth <cworth@cworth.org>) 3625========================================================= 3626Experimental backends 3627--------------------- 3628 * The Glitz, PS, PDF, Quartz, and XCB backends have been declared 3629 experimental, and are not part of the API guarantees that accompany 3630 this release. They are not built by default, even when the required 3631 libraries are available, and must be enabled explicitly with 3632 --enable-ps, --enable-pdf, --enable-quartz or --enable-xcb. 3633 3634 It is very painful for us to be pushing out a major release without 3635 these backends enabled. There has been a tremendous amount of work 3636 put into each one and all are quite functional to some 3637 extent. However, each also has some limitations. And none of these 3638 backends have been tested to the level of completeness and 3639 correctness that we expect from cairo backends. 3640 3641 We do encourage people to experiment with these backends and report 3642 success, failure, or means of improving them. 3643 3644Operator behavior 3645----------------- 3646 * Prior to 0.9.0 the SOURCE, CLEAR and a number of other operators 3647 behaved in an inconsistent and buggy fashion and could affect areas 3648 outside the clip mask. In 0.9.0, these six "unbounded" operators 3649 were fixed to consistently clear areas outside the shape but within 3650 the clip mask. This is useful behavior for an operator such as IN, 3651 but not what was expected for SOURCE and CLEAR. So, in this release 3652 the behavior of SOURCE and CLEAR has been changed again. They now 3653 affect areas only within both the source and shape. We can write 3654 the new operators as: 3655 3656 SOURCE: dest' = (mask IN clip) ? source : dest 3657 CLEAR: dest' = (mask IN clip) ? 0 : dest 3658 3659Behavior and API changes 3660------------------------ 3661 * Setting the filter on a gradient pattern would change the 3662 interpolation between color stops away from the normal linear 3663 interpolation. This dubious behavior has been removed. 3664 3665 * The CAIRO_CONTENT_VALID() and CAIRO_FORMAT_VALID() macros -- 3666 implementation details that leaked into cairo.h -- have been moved 3667 into an internal header. 3668 3669 * The cairo_show_text function now advances the current point 3670 according to the total advance values of the string. 3671 3672API additions 3673------------- 3674 * cairo_set_dash can now detect error and can set 3675 CAIRO_STATUS_INVALID_DASH. 3676 3677Features 3678-------- 3679 * When compiled against recent versions of fontconfig and FreeType, 3680 artificial bold fonts can now be turned on from fonts.conf using 3681 the FC_EMBOLDEN fontconfig key. 3682 3683Optimization 3684------------ 3685 * The compositing code from the 'xserver' code tree has now been 3686 completely merged into libpixman. This includes MMX optimization of 3687 common operations. 3688 3689 * The image transformation code in libpixman has been improved and 3690 now performs significantly faster. 3691 3692Bug fixes 3693--------- 3694 * Several crashes related to corruption in the font caches have been 3695 fixed. 3696 3697 * All test cases now match pixel-for-pixel on x86 and PPC; this 3698 required fixing bugs in the compositing, stroking, and pattern 3699 rendering code. 3700 3701 * Negative dash offsets have been fixed to work correctly. 3702 3703 * The stroking of paths with mutiple subpaths has now been fixed to 3704 apply caps to all subpaths rather than just the last one. 3705 3706 * Many build fixes for better portability on various systems. 3707 3708 * Lots of other bug fixes, but we're too tired to describe them in 3709 more detail here. 3710 3711Release 0.9.2 (2005-08-13 Carl Worth <cworth@cworth.org>) 3712========================================================= 3713Release numbering 3714----------------- 3715 * You will notice that this release jumped from 0.9.0 to 0.9.2. We've 3716 decided to use an odd micro version number (eg. 0.9.1) to indicate 3717 in-progress development between releases. As soon as 0.9.2 is 3718 tagged, the version will be incremented in CVS to 0.9.3 where it 3719 will stay until just before 0.9.4 is built, uploaded, and tagged. 3720 3721 So, even-micro == a released version, odd-micro == something in-between. 3722 3723Libpixman dependency dropped 3724---------------------------- 3725 * As of this release, the dependency on an external libpixman has 3726 been dropped. Instead, the code from libpixman needed for cairo has 3727 been incorporated into the cairo source tree. The motivation for 3728 this change is that while cairo's API is stable and ready to be 3729 maintained after the 1.0 release, libpixman's API is not, so we do 3730 not want to expose it at this time. 3731 3732 Also, the incorporation of libpixman into cairo also renames all 3733 previously-public libpixman symbols in order to avoid any conflict 3734 with a future release of libpixman 3735 3736API additions 3737------------- 3738 * Macros and functions have been added so that the version of cairo 3739 can be queried at either compile-time or at run-time. The version 3740 is made available as both a human-readable string and as a single 3741 integer: 3742 3743 CAIRO_VERSION_STRING eg. "0.9.2" 3744 CAIRO_VERSION eg. 000902 3745 3746 const char* 3747 cairo_version_string (void); /* eg. "0.9.2" */ 3748 3749 int 3750 cairo_version (void); /* eg. 000902 */ 3751 3752 A macro is provided to convert a three-part component version into 3753 the encoded single-integer form: 3754 3755 CAIRO_VERSION_ENCODE(X,Y,Z) 3756 3757 For example, the CAIRO_VERSION value of 000902 is obtained as 3758 CAIRO_VERSION_ENCODE(0,9,2). The intent is to make version 3759 comparisons easy, either at compile-time: 3760 3761 #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(0,9,2) 3762 ... 3763 #endif 3764 3765 Or at run-time: 3766 3767 if (cairo_version() >= CAIRO_VERSION_ENCODE(0,9,2)) { /* ... */ } 3768 3769Thread safety 3770------------- 3771 * This release adds pthread-based locking (when available) to make 3772 the caches used by cairo safe for threaded programs. Some may 3773 remember a failed experiment with this locking between the 0.5.1 3774 and 0.5.2 snapshots, (where even single-threaded programs that 3775 linked with -lpthread would deadlock). We believe that that problem 3776 has been fixed, so we are looking forward to testing and reports 3777 from users with threaded applications. 3778 3779Bug fixes 3780--------- 3781 * The XCB and Quartz backends failed to compiled in the 0.9.0 release 3782 due to minor syntax errors. These have now been fixed. 3783 3784 * Various crashes in glitz and pixman due to size 0 glyphs have been 3785 fixed. 3786 3787Release 0.9.0 (2005-08-08 Carl Worth <cworth@cworth.org>) 3788========================================================= 3789Soname change 3790------------- 3791 * In all prior snapshots, the libtool library versioning was set to 3792 1:0:0. As this release is intended to mark the beginning of 3793 backwards-compatible releases, the versioning has been incremented 3794 to 2:0:0. You will notice that the numeric extension on the 3795 installed library filename will change similarly. 3796 3797 This change will also require all cairo-using applications to be 3798 recompiled. We recognize that this may cause some frustration since 3799 this release is backwards-compatible with 0.6.0 and in that sense 3800 "shouldn't" require re-compilation. However, since all historical 3801 snapshots have used the same 1:0:0 version in spite of incompatible 3802 API changes between them, it was essential that the upcoming 1.0 3803 release series have distinct library versioning. 3804 3805 All future releases will use the library versioning to properly 3806 indicate compatibility between releases. So, any application 3807 re-compiled now to work with the 0.9.0 will not need to be 3808 recompiled when a compatible 1.0 release of cairo is made in the 3809 future. 3810 3811API additions 3812------------- 3813 * Add new function calls to set/get the current antialiasing mode in 3814 the graphics state: 3815 3816 cairo_set_antialias 3817 cairo_get_antialias 3818 3819 This call accepts the same modes recently added for font options 3820 (NONE or GRAY) but affects the rendering of geometry other than 3821 text. The intent of this call is to enable more precise control of 3822 which pixels are affected by each operation, for example to allow 3823 for full-scene antialiasing for seam-free rendering. It is not 3824 expected that non-antialiased rendering will perform better than 3825 anti-aliased rendering. 3826 3827 * Three new functions were added to provide support for mixed cairo- 3828 and non-cairo drawing to the same surface: 3829 3830 cairo_surface_mark_dirty 3831 cairo_surface_mark_dirty_rectangle 3832 cairo_surface_flush 3833 3834 * The return type of the several "reference" functions was change, 3835 (API compatibly), from void to the same type as the argument. The 3836 affected functions are: 3837 3838 cairo_font_face_reference 3839 cairo_scaled_font_reference 3840 cairo_pattern_reference 3841 cairo_surface_reference 3842 cairo_reference 3843 3844 This allows a convenient way to assign and reference in a single 3845 statement. 3846 3847Semantic changes 3848---------------- 3849 * The behavior of cairo_set_source with a pattern with a non-identity 3850 matrix was previously not well-defined. The new behavior is as 3851 follows: 3852 3853 The pattern's transformation matrix will be locked to the 3854 user space in effect at the time of cairo_set_source(). This means 3855 that further modifications of the CTM will not affect the source 3856 pattern. 3857 3858cairo-win32 3859----------- 3860 * Some portability improvements, (eg. workaround for missing stdint.h). 3861 3862cairo-ft 3863-------- 3864 * Updated to allow compilation with older versions of freetype. 3865 3866Bug fixes 3867--------- 3868 * Fix the unbounded operators to actually produce a correct result, 3869 (previously the results were artificially restricted to the 3870 bounding box of whatever shape was being drawn rather than 3871 extending out infinitely). The fixed operators are: 3872 3873 CAIRO_OPERATOR_CLEAR 3874 CAIRO_OPERATOR_SOURCE 3875 CAIRO_OPERATOR_OUT 3876 CAIRO_OPERATOR_IN 3877 CAIRO_OPERATOR_DEST_IN 3878 CAIRO_OPERATOR_DEST_ATOP 3879 3880 * Fix cairo_mask and cairo_mask_surface to transform the mask by the 3881 current transformation matrix (CTM). 3882 3883 * Fix cairo_set_source to lock the CTM used to transform the pattern. 3884 3885 * Workaround for X server Render bug involving repeating patterns 3886 with a general transformation matrix. 3887 3888 * cairo_get_font_face fixed to return a "nil" font face object rather 3889 than NULL on error. 3890 3891 * cairo_set_font_face fixed to not crash if given a NULL font face, 3892 (which is the documented interface for restoring the default font 3893 face). 3894 3895 * Fix xlib glyphset caching to not try to free a NULL glyph. 3896 3897Snapshot 0.6.0 (2005-07-28 Carl Worth <cworth@cworth.org>) 3898========================================================== 3899API changes 3900----------- 3901* The prototypes of the following functions have changed: 3902 3903 cairo_xlib_surface_create_with_xrender_format 3904 cairo_xlib_surface_create_for_bitmap 3905 3906 A Screen* parameter has been added to each. This allows the cairo 3907 xlib backend to work correctly with multi-head X servers. 3908 3909* The following function has been modified: 3910 3911 cairo_scaled_font_create 3912 3913 to accept a cairo_font_options_t*. See below fore more details. 3914 3915* All opaque, reference-counted cairo objects have now been moved to a 3916 standard error-handling scheme. The new objects to receive this 3917 treatment are cairo_font_face_t, cairo_scaled_font_t, and 3918 cairo_surface_t. (Previous snapshots already provided this scheme 3919 for cairo_t, cairo_path_t, and cairo_pattern_t.) 3920 3921 This changes two functions to have a return type of void rather than 3922 cairo_status_t: 3923 3924 cairo_scaled_font_extent 3925 cairo_surface_finish 3926 3927 And significantly, none of the create functions for any of the 3928 objects listed above will return NULL. The pointer returned from any 3929 function will now always be a valid pointer and should always be 3930 passed to the corresponding destroy function when finished 3931 3932 The simplest strategy for porting code is to switch from: 3933 3934 object = cairo_<object>_create (); 3935 if (object == NULL) 3936 goto BAILOUT; 3937 3938 /* act on object */ 3939 3940 cairo_<object>_destroy (object); 3941 3942 to: 3943 3944 object = cairo_<object>_create (); 3945 if (cairo_<object>_status (object)) 3946 goto BAILOUT; 3947 3948 /* act on object */ 3949 3950 cairo_<object>_destroy (object); 3951 3952 But significantly, it is not required to check for an error status 3953 before the "act on object" portions of the code above. All 3954 operations on an object with an error status are, by definition, 3955 no-ops without side effect. So new code might be written in an 3956 easier-to-read style of: 3957 3958 object = cairo_<object>_create (); 3959 3960 /* act on object */ 3961 3962 cairo_<object>_destroy (object); 3963 3964 with cairo_<object>_status checks placed only at strategic 3965 locations. For example, passing an error object to another object, 3966 (eg. cairo_set_source with an in-error pattern), will propagate the 3967 error to the subsequent object (eg. the cairo_t). This means that 3968 error checking can often be deferred even beyond the destruction of 3969 a temporary object. 3970 3971API additions 3972------------- 3973* New functions for checking the status of objects that have been 3974 switched to the common error-handling scheme: 3975 3976 cairo_font_face_status 3977 cairo_scaled_font_status 3978 cairo_surface_status 3979 3980* The _cairo_error function which was added in 0.5.1 has now been made 3981 much more useful. In 0.5.1 only errors on cairo_t objects passed 3982 through _cairo_error. Now, an error on any object should pass 3983 through _cairo_error making it much more reliable as a debugging 3984 mechanism for finding when an error first occurs. 3985 3986* Added new font options support with a myriad of functions: 3987 3988 cairo_font_options_create 3989 cairo_font_options_copy 3990 cairo_font_options_destroy 3991 3992 cairo_font_options_status 3993 3994 cairo_font_options_merge 3995 cairo_font_options_equal 3996 cairo_font_options_hash 3997 3998 cairo_font_options_set_antialias 3999 cairo_font_options_get_antialias 4000 cairo_font_options_set_subpixel_order 4001 cairo_font_options_get_subpixel_order 4002 cairo_font_options_set_hint_style 4003 cairo_font_options_get_hint_style 4004 cairo_font_options_set_hint_metrics 4005 cairo_font_options_get_hint_metrics 4006 4007 cairo_surface_get_font_options 4008 4009 cairo_ft_font_options_substitute 4010 4011 cairo_set_font_options 4012 cairo_get_font_options 4013 4014 This new font options support allows the application to have much 4015 more fine-grained control over how fonts are rendered. 4016 Significantly, it also allows surface backends to have some 4017 influence over the process. For example, the xlib backend now 4018 queries existing Xft properties to set font option defaults. 4019 4020* New function: 4021 4022 cairo_xlib_surface_set_drawable 4023 4024 which allows the target drawable for an xlib cairo_surface_t to be 4025 changed to another with the same format, screen, and display. This 4026 is necessary in certain double-buffering techniques. 4027 4028New features 4029------------ 4030* Sub-pixel text antialiasing is now supported. 4031 4032Bug fixes 4033--------- 4034* Fixed assertion failure in cairo_surface_create_similar when 4035 application commits an error by passing a cairo_format_t rather than 4036 a cairo_content_t. 4037 4038* Avoid division by zero in various places (cairo-ft). 4039 4040* Fix infinite loop when using non-default visuals (cairo-xlib). 4041 4042* Eliminate segfault in cairo_image_surface_create_from_png_stream. 4043 4044* Prevent errant sign-extension of masks on 64-bit architectures 4045 (cairo-xlib and cairo-xcb). 4046 4047* Other miscellaneous fixes. 4048 4049Snapshot 0.5.2 (2005-07-18 Carl Worth <cworth@cworth.org>) 4050========================================================== 4051API changes 4052----------- 4053* New functions for creating patterns of a single color: 4054 4055 cairo_pattern_create_rgb 4056 cairo_pattern_create_rgba 4057 4058* Change cairo_surface_create_similar to accept a new type of 4059 cairo_content_t rather than cairo_format_t: 4060 4061 typedef enum _cairo_content { 4062 CAIRO_CONTENT_COLOR = 0x1000, 4063 CAIRO_CONTENT_ALPHA = 0x2000, 4064 CAIRO_CONTENT_COLOR_ALPHA = 0x3000 4065 } cairo_content_t; 4066 4067* Add new CAIRO_FORMAT_VALID and CAIRO_CONTENT_VALID macros. 4068 4069* Remove unused status value: 4070 4071 CAIRO_STATUS_NO_TARGET_SURFACE 4072 4073* Add new status values: 4074 4075 CAIRO_STATUS_INVALID_STATUS 4076 4077* Require libpixman >= 0.1.5 (for necessary bug fixes) 4078 4079Bug fixes 4080--------- 4081* Fix cairo_surface_write_to_png for RGB24 images. 4082 4083* Fix broken metrics and rendering for bitmap fonts. Add mostly 4084 useless bitmap glyph transformation. 4085 4086* Fix glyph caches to not eject entries that might be immediately 4087 needed, (fixing intermittent crashes when rendering text). 4088 4089* Fix all memory leaks found by running "make check-valgrind". 4090 4091ATSUI backend changes 4092--------------------- 4093* Allow building against < 10.3 SDK. 4094 4095* Prevent crash on empty strings. 4096 4097Glitz backend changes 4098--------------------- 4099* Require glitz >= 0.4.4. 4100 4101* Use frame buffer objects instead of pbuffers for accelerated 4102 offscreen drawing. 4103 4104* Minor improvement to gradient pattern creation. 4105 4106PostScript backend fixes 4107------------------------ 4108* Rewrite of the PS backend to generate more interesting output that 4109 the old big-image implementation. 4110 4111Win32 backend fixes 4112------------------- 4113* Implement glyph path support. 4114 4115* Fix swap of blue and green values in the fill_rectangles path. 4116 4117Xlib backend fixes 4118------------------ 4119* Add optimization to use XCopyArea rather than XRenderComposite when 4120 transforming only with an integer translation, and using SOURCE 4121 operator or OVER with a source pattern without alpha. 4122 4123Snapshot 0.5.1 (2005-06-20 Carl Worth <cworth@cworth.org>) 4124========================================================== 4125API changes 4126----------- 4127* Removed cairo_status_string(cairo_t*) and add 4128 cairo_status_to_string(cairo_status_t) in its place. Code using 4129 cairo_status_string can be ported forward as follows: 4130 4131 cairo_status (cr); 4132 -> 4133 cairo_status_to_string (cairo_status (cr)); 4134 4135* Removed the BAD_NESTING restriction which means that two different 4136 cairo_t objects can now interleave drawing to the same 4137 cairo_surface_t without causing an error. 4138 4139* The following functions which previously had a return type of 4140 cairo_status_t now have a return type of void: 4141 4142 cairo_pattern_add_color_stop_rgba 4143 cairo_pattern_set_matrix 4144 cairo_pattern_get_matrix 4145 cairo_pattern_set_extend 4146 cairo_pattern_set_filter 4147 4148 See discussion of cairo_pattern_status below for more details. 4149 4150API additions 4151------------- 4152* Improved error handling: 4153 4154 cairo_status_t 4155 cairo_pattern_status (cairo_pattern_t *pattern); 4156 4157 This snapshot expands the status-based error handling scheme from 4158 cairo_t to cairo_path_t and cairo_pattern_t. It also expands the 4159 scheme so that object-creating functions, (cairo_create, 4160 cairo_pattern_create_*, cairo_copy_path_*), are now guaranteed to 4161 not return NULL. Instead, in the case of out-of-memory these 4162 functions will return a static object with 4163 status==CAIRO_STATUS_NO_MEMORY. The status can be checked with the 4164 functions cairo_status and cairo_pattern_status, or by direct 4165 inspection of the new status field in cairo_path_t. 4166 4167 Please note that some objects, including cairo_surface_t and all of 4168 the font-related objects have not been converted to this 4169 error-handling scheme. 4170 4171* In addition to the above changes, a new private function has been added: 4172 4173 _cairo_error 4174 4175 This function can be used to set a breakpoint in a debugger to make 4176 it easier to find programming error in cairo-using code. (Currently, 4177 _cairo_error is called when any error is detected within a cairo_t 4178 context, but is not called for non-cairo_t errors such as for 4179 cairo_path_t and cairo_pattern_t). 4180 4181* Fixed cairo_path_data_t so that its enum is visible to C++ code, (as 4182 cairo_path_data_type_t). 4183 4184Performance improvements 4185------------------------ 4186* Made a minor performance improvement for clipping, (restrict clip 4187 surface to the new intersected bounds). 4188 4189* Optimize rendering of a solid source pattern with a pixel-aligned 4190 rectangular path to use backend clipping rather than rasterization 4191 and backend compositing. 4192 4193* Optimize cairo_paint_with_alpha to defer to cairo_paint when alpha 4194 is 1.0. 4195 4196Bug fixes 4197--------- 4198* Fixed memory leak in cairo_copy_path. 4199 4200* A build fix for non-srcdir builds. 4201 4202PDF backend fixes 4203----------------- 4204* New support for path-based clipping. 4205 4206* Fix for text rotated to angles other than multiples of π/2. 4207 4208Win32 backend fixes 4209------------------- 4210* Fix for text extents. 4211 4212Xlib backend 4213------------ 4214* Implemented a complex workaround for X server bug[*] related to 4215 Render-based compositing with untransformed, repeating source 4216 pictures. The workaround uses core Xlib when possible for 4217 performance, (ie. with CAIRO_OPERATOR_SOURCE or CAIRO_OPERATOR_OVER 4218 with an opaque source surface), and falls back to the pixman 4219 image-based compositing otherwise. 4220 4221 [*] https://bugs.freedesktop.org/show_bug.cgi?id=3566 4222 4223* Various bug fixes, particularly in the fallback paths. 4224 4225Snapshot 0.5.0 (2005-05-17 Carl Worth <cworth@cworth.org>) 4226========================================================== 4227This is a pretty big, and fairly significant snapshot. It represents 4228between 2 and 3 months of solid work from a lot of people on improving 4229the API as much as possible. I'd like to express my appreciation and 4230congratulations to everyone who has worked on the big API Shakeup, 4231(whether in email battles over names, or fixing my silly bugs). 4232 4233This snapshot will require some effort on the part of users, since 4234there are a _lot_ of API changes (ie. no cairo program ever written is 4235safe --- they're all broken now in at least one way). But, in spite of 4236that, we do encourage everyone to move their code to this snapshot as 4237soon as possible. And we're doing everything we can think of to make 4238the transition as smooth as possible. 4239 4240The idea behind 0.5 is that we've tried to make every good API change 4241we could want now, and get them all done with. That is, between now 4242and the 1.0 release of cairo, we expect very few new API changes, 4243(though some will certainly sneak in). We will have some significant 4244additions, but the pain of moving code from cairo 0.4 to cairo 0.5 4245should be a one time experience, and things should be much smoother as 4246we continue to move toward cairo 1.0. 4247 4248And with so many changes coming out for the first time in this 0.5 4249release, we really do need a lot of people trying this out to make 4250sure the ideas are solid before we freeze the API in preparation for 4251the 1.0 release. 4252 4253OK, enough introduction. Here is a (not-quite-complete) description of 4254the API removals, changes and additions in this snapshot, (compared to 42550.4.0) 4256 4257API removals 4258============ 4259The following public functions have been removed: 4260 4261- cairo_set_target_* 4262 4263 This is a big change. See the description of cairo_create in 4264 the API changes section for how to deal with this. 4265 4266- cairo_set_alpha 4267 4268 Alpha blending hasn't gone away; there's just a much more 4269 unified rendering model now. Almost all uses of 4270 cairo_set_alpha will be trivially replaced with 4271 cairo_set_source_rgba and a few others will be replaced just 4272 as easily with cairo_paint_with_alpha. 4273 4274- cairo_show_surface 4275 4276 Another useful function that we realized was muddling up the 4277 rendering model. The replacement is quite easy: 4278 cairo_set_source_surface and cairo_paint. 4279 4280- cairo_matrix_create 4281- cairo_matrix_destroy 4282- cairo_matrix_copy 4283- cairo_matrix_get_affine 4284 4285 These functions supported an opaque cairo_matrix_t. We now 4286 have an exposed cairo_matrix_t structure, so these can be 4287 dropped. 4288 4289- cairo_surface_set_repeat 4290- cairo_surface_set_matrix 4291- cairo_surface_set_filter 4292 4293 These properties don't belong on surfaces. If you were using 4294 them, you'll just want to instead use 4295 cairo_pattern_create_for_surface and then set these properties 4296 on the pattern. 4297 4298- cairo_copy 4299 4300 This was a confusing function and hopefully nobody will miss 4301 it. But if you really don't find cairo_save/restore adequate, 4302 let us know and we have another idea for a potential 4303 replacement. 4304 4305And while we're on the subject of removals, we carefully tightened up 4306the cairo header files so they no longer gratuitously include header 4307files that are not strictly necessary, (stdio.h, stdint.h, pixman.h, 4308Xrender.h, etc. and their dependencies). This may lead to some 4309surprising errors, so keep your eyes open for that. 4310 4311API changes 4312=========== 4313Here are some of the API changes that have occurred: 4314 4315~ cairo_create(void) -> cairo_create(cairo_surface_t *) 4316 4317 This is the big change that breaks every program. The ability 4318 to re-target a cairo_t was not particularly useful, but it did 4319 introduce a lot of muddy semantic questions. To eliminate 4320 that, cairo_create now requires its target surface to be 4321 passed in at creation time. This isn't too hard to cope with 4322 as the typical first operation after cairo_create was often 4323 cairo_set_target_foo. So the order of those two swap and the 4324 application instead has cairo_foo_surface_create, then 4325 cairo_create. 4326 4327~ cairo_current_* -> cairo_get_* 4328 4329 We had a strange mixture of cairo_get and cairo_current 4330 functions. They've all been standardized on cairo_get, (though 4331 note one is cairo_get_current_point). 4332 4333~ CAIRO_OPERATOR_SRC -> CAIRO_OPERATOR_SOURCE 4334~ CAIRO_OPERATOR_OVER_REVERSE -> CAIRO_OPERATOR_DEST_OVER 4335 4336 Many of the cairo_operator_t symbolic values were renamed to 4337 reduce the amount of abbreviation. The confusing "OP_REVERSE" 4338 naming was also changed to use "DEST_OP" instead which is 4339 easier to read and has wider acceptance in other 4340 libraries/languages. 4341 4342~ cairo_set_pattern -> cairo_set_source 4343~ cairo_set_rgb_color -> cairo_set_source_rgb 4344 4345 All of the various functions that changed the source 4346 color/pattern were unified to use cairo_set_source names to 4347 make the relation more clear. 4348 4349~ cairo_transform_point -> cairo_user_to_device 4350~ cairo_transform_distance -> cairo_user_to_device_distance 4351~ cairo_inverse_transform_point -> cairo_device_to_user 4352~ cairo_inverse_transform_distance -> cairo_device_to_user_distance 4353 4354 These names just seemed a lot more clear. 4355 4356~ cairo_init_clip -> cairo_reset_clip 4357~ cairo_concat_matrix -> cairo_transform 4358 4359 More abbreviation elimination 4360 4361~ cairo_current_path -> cairo_copy_path 4362~ cairo_current_path_flat -> cairo_copy_path_flat 4363 4364 The former mechanism for examining the current path was a 4365 function that required 3 or 4 callbacks. This was more 4366 complexity than warranted in most situations. The new 4367 cairo_copy_path function copies the current path into an 4368 exposed data structure, and the documentation provides a 4369 convenient idiom for navigating the path data. 4370 4371API additions 4372------------- 4373+ cairo_paint 4374 4375 A generalized version of the painting operators cairo_stroke 4376 and cairo_fill. The cairo_paint call applies the source paint 4377 everywhere within the current clip region. Very useful for 4378 clearing a surface to a solid color, or painting an image, 4379 (see cairo_set_source_surface). 4380 4381+ cairo_paint_with_alpha 4382 4383 Like cairo_paint but applying some alpha to the source, 4384 (making the source paint translucent, eg. to blend an image on 4385 top of another). 4386 4387+ cairo_mask 4388 4389 A more generalized version of cairo_paint_with_alpha which 4390 allows a pattern to specify the amount of translucence at each 4391 point rather than using a constant value everywhere. 4392 4393+ cairo_mask_surface 4394 4395 A convenience function on cairo_mask for when the mask pattern 4396 is already contained within a surface. 4397 4398+ cairo_surface_set_user_data 4399+ cairo_surface_get_user_data 4400+ cairo_font_face_set_user_data 4401+ cairo_font_face_get_user_data 4402 4403 Associate arbitrary data with a surface or font face for later 4404 retrieval. Get notified when a surface or font face object is 4405 destroyed. 4406 4407+ cairo_surface_finish 4408 4409 Allows the user to instruct cairo to finish all of its 4410 operations for a given surface. This provides a safe point for 4411 doing things such as flushing and closing files that the 4412 surface may have had open for writing. 4413 4414+ cairo_fill_preserve 4415+ cairo_stroke_preserve 4416+ cairo_clip_preserve 4417 4418 One interesting change in cairo is that the path is no longer 4419 part of the graphics state managed by 4420 cairo_save/restore. This allows functions to construct paths 4421 without interfering with the graphics state. But it prevents 4422 the traditional idiom for fill-and-stroke: 4423 4424 cairo_save; cairo_fill; cairo_restore; cairo_stroke 4425 4426 Instead we know have alternate versions cairo cairo_fill, 4427 cairo_stroke, and cairo_clip that preserve the current path 4428 rather than consuming it. So the idiom now becomes simply: 4429 4430 cairo_fill_preserve; cairo_stroke 4431 4432+ cairo_surface_write_to_png 4433+ cairo_surface_write_to_png_stream 4434 4435 In place of a single PNG backend, now a surface created 4436 through any backend (except PDF currently) can be written out 4437 to a PNG image. 4438 4439+ cairo_image_surface_create_from_png 4440+ cairo_image_surface_create_from_png_stream 4441 4442 And its just as easy to load a PNG image into a surface as well. 4443 4444+ cairo_append_path 4445 4446 With the new, exposed path data structure, it's now possible 4447 to append bulk path data to the current path, (rather than 4448 issuing a long sequence of cairo_move_to/line_to/curve_to 4449 function calls). 4450 4451Xlib and XCB backends 4452--------------------- 4453 4454Any cairo_format_t and Colormap arguments have been dropped from 4455cairo_xlib_surface_create. There are also two new 4456cairo_xlib|xcb_surface_create functions: 4457 4458 cairo_xlib|xcb_surface_create_for_bitmap 4459 (Particular for creating A1 surfaces) 4460 cairo_xlib|xcb_surface_create_with_xrender_format 4461 (For any other surface types, not described by a Visual*) 4462 4463All of these surface create functions now accept width and height. In 4464addition, there are new cairo_xlib|xcb_surface_set_size functions 4465which must be called each time a window that is underlying a surface 4466changes size. 4467 4468Print backends (PS and PDF) 4469--------------------------- 4470The old FILE* based interfaces have been eliminated. In their place we 4471have two different functions. One accepts a simple const char 4472*filename. The other is a more general function which accepts a 4473callback write function and a void* closure. This should allow the 4474flexibility needed to hook up with various stream object in many 4475languages. 4476 4477In addition, when specifying the surface size during construction, the 4478units are now device-space units (ie. points) rather than inches. This 4479provides consistency with all the other surface types and also makes 4480it much easier to reason about the size of the surface when drawing to 4481it with the default identity matrix. 4482 4483Finally, the DPI parameters, which are only needed to control the 4484quality of fallbacks, have been made optional. Nothing is required 4485during surface_create (300 DPI is assumed) and 4486cairo_ps|pdf_surface_set_dpi can be used to set alternate values if 4487needed. 4488 4489Font system 4490----------- 4491Owen very graciously listened to feedback after the big font rework he 4492had done for 0.4, and came up with way to improve it even more. In 0.4 4493there was a cairo_font_t that was always pre-scaled. Now, there is an 4494unscaled cairo_font_face_t which is easier to construct, (eg. no 4495scaling matrix required) and work with, (it can be scaled and 4496transformed after being set on the graphics state). And the font size 4497manipulation functions are much easier. You can set an explicit size 4498and read/modify/write the font matrix with: 4499 4500 cairo_set_font_size 4501 cairo_get_font_matrix 4502 cairo_set_font_matrix 4503 4504(Previously you could only multiply in a scale factor or a matrix.) A 4505pleasant side effect is that we can (and do) now have a default font 4506size that is reasonable, as opposed to the old default height of one 4507device-space unit which was useless until scaled. 4508 4509Of course, the old pre-scaled font had allowed some performance 4510benefits when getting many metrics for a font. Those benefits are 4511still made available through the new cairo_scaled_font_t. And a 4512cairo_font_face_t can be "promoted" to a cairo_scaled_font_t by 4513suppling a font_matrix and the desired CTM. 4514 4515Quartz backend 4516-------------- 4517Tim Rowley put in the work to bring the Quartz backend back after it 4518had been disabled in the 0.4.0 snapshot. He was not able to bring back 4519the function that allows one to create a cairo_font_t from an ATSUI 4520style: 4521 4522 cairo_font_t * 4523 cairo_atsui_font_create (ATSUStyle style); 4524 4525because he didn't have a test case for it. If you care about this 4526function, please provide a fairly minimal test and we'll try to bring 4527it back in an upcoming snapshot. 4528 4529Snapshot 0.4.0 (2005-03-08 Carl Worth <cworth@cworth.org>) 4530========================================================== 4531New documentation 4532----------------- 4533Owen Taylor has converted cairo's documentation system to gtk-doc and 4534has begun some long-needed work on the documentation, which can now be 4535viewed online here: 4536 4537 http://cairographics.org/manual/ 4538 4539New backend: win32 4540------------------ 4541This is the first snapshot to include a functional win32 backend, 4542(thanks to Owen Taylor). The interface is as follows: 4543 4544 #include <cairo-win32.h> 4545 4546 void 4547 cairo_set_target_win32 (cairo_t *cr, 4548 HDC hdc); 4549 4550 cairo_surface_t * 4551 cairo_win32_surface_create (HDC hdc); 4552 4553 cairo_font_t * 4554 cairo_win32_font_create_for_logfontw (LOGFONTW *logfont, 4555 cairo_matrix_t *scale); 4556 4557 cairo_status_t 4558 cairo_win32_font_select_font (cairo_font_t *font, 4559 HDC hdc); 4560 4561 void 4562 cairo_win32_font_done_font (cairo_font_t *font); 4563 4564 double 4565 cairo_win32_font_get_scale_factor (cairo_font_t *font); 4566 4567And see also the documentation at: 4568 4569http://cairographics.org/manual/cairo-Microsoft-Windows-Backend.html 4570 4571Disabled backend: quartz 4572------------------------ 4573Unfortunately, the quartz backend code is currently out of date with 4574respect to some recent backend interface changes. So, the quartz 4575backend is disabled in this snapshot. 4576 4577If the quartz backend is brought up-to-date before the next snapshot, 4578we would be glad to make a 0.4.1 snapshot that re-enables it, (we do 4579not expect many more big backend interface changes). 4580 4581API Changes 4582----------- 4583The font system has been revamped, (as Owen Taylor's work with 4584integrating pango and cairo gave us the first serious usage of the 4585non-toy font API). 4586 4587One fundamental, user-visible change is that the cairo_font_t object 4588now represents a font that is scaled to a particular device 4589resolution. Further changes are described below. 4590 4591 cairo.h 4592 ------- 4593 Removed cairo_font_set_transform and cairo_font_current_transform. 4594 4595 Added cairo_font_extents and cairo_font_glyph_extents. See 4596 documentation for details: 4597 4598 http://cairographics.org/manual/cairo-cairo-t.html#cairo-font-extents 4599 4600 cairo-ft.h 4601 ---------- 4602 The cairo_ft_font API changed considerably. Please see the 4603 documentation for details: 4604 4605 http://cairographics.org/manual/cairo-FreeType-Fonts.html 4606 4607Performance 4608----------- 4609Make the fast-path clipping (pixel-aligned rectangles) faster. 4610 4611Add optimization for applying a constant alpha to a pattern. 4612 4613Optimize gradients that are horizontal or vertical in device space. 4614 4615Xlib: When RENDER is not available, use image surfaces for 4616intermediate surfaces rather than xlib surfaces. 4617 4618Backend-specific changes 4619------------------------ 4620 Glitz 4621 ----- 4622 Major update to glitz backend. The output quality should now be just 4623 as good as the image and xlib backends. 4624 4625 Track changes to glitz 0.4.0. 4626 4627 PDF 4628 --- 4629 Various improvements to produce more conformant output. 4630 4631Internals 4632--------- 4633David Reveman contributed a large re-work of the cairo_pattern_t 4634implementation, providing cleaner code and more optimization 4635opportunities. 4636 4637 Backend interface changes 4638 ------------------------- 4639 Rework backend interface to accept patterns, not surfaces for source 4640 and mask. 4641 4642 Remove set_matrix, set_filter, and set_repeat functions. 4643 4644 More sophisticated backend interface for image fallbacks, 4645 ({acquire,release}_{source,dest}_image() and clone_similar). 4646 4647Bug fixes 4648--------- 4649Only install header files for backends that have been compiled. 4650 4651Fixed some rounding errors leading to incorrectly placed glyphs. 4652 4653Many other minor fixes. 4654 4655Snapshot 0.3.0 (2005-01-21 Carl Worth <cworth@cworth.org>) 4656========================================================== 4657Major API changes 4658----------------- 46591) The public header files will no longer be directly installed into 4660 the system include directory. They will now be installed in a 4661 subdirectory named "cairo", (eg. in /usr/include/cairo rather than 4662 in /usr/include). 4663 4664 As always, the easiest way for applications to discover the 4665 location of the header file is to let pkg-config generate the 4666 necessary -I CFLAGS and -L/-l LDFLAGS. For example: 4667 4668 cc `pkg-config --cflags --libs cairo` -o foo foo.c 4669 4670 IMPORTANT: Users with old versions of cairo installed will need to 4671 manually remove cairo.h and cairo-features.h from the 4672 system include directories in order to prevent the old 4673 headers from being used in preference to the new ones. 4674 46752) The backend-specific portions of the old monolithic cairo.h have 4676 been split out into individual public header files. The new files 4677 are: 4678 4679 cairo-atsui.h 4680 cairo-ft.h 4681 cairo-glitz.h 4682 cairo-pdf.h 4683 cairo-png.h 4684 cairo-ps.h 4685 cairo-quartz.h 4686 cairo-xcb.h 4687 cairo-xlib.h 4688 4689 Applications will need to be modified to explicitly include the new 4690 header files where appropriate. 4691 46923) There are two new graphics backends in this snapshot, a PDF 4693 backend, and a Quartz backend. There is also one new font backend, 4694 ATSUI. 4695 4696PDF backend 4697----------- 4698Kristian Høgsberg has contributed a new backend to allow cairo-based 4699applications to generate PDF output. The interface for creating a PDF 4700surface is similar to that of the PS backend, as can be seen in 4701cairo-pdf.h: 4702 4703 void 4704 cairo_set_target_pdf (cairo_t *cr, 4705 FILE *file, 4706 double width_inches, 4707 double height_inches, 4708 double x_pixels_per_inch, 4709 double y_pixels_per_inch); 4710 4711 cairo_surface_t * 4712 cairo_pdf_surface_create (FILE *file, 4713 double width_inches, 4714 double height_inches, 4715 double x_pixels_per_inch, 4716 double y_pixels_per_inch); 4717 4718Once a PDF surface has been created, applications can draw to it as 4719any other cairo surface. 4720 4721This code is still a bit rough around the edges, and does not yet 4722support clipping, surface patterns, or transparent gradients. Text 4723only works with TrueType fonts at this point and only black text is 4724supported. Also, the size of the generated PDF files is currently 4725quite big. 4726 4727Kristian is still actively developing this backend, so watch this 4728space for future progress. 4729 4730Quartz backend 4731-------------- 4732Calum Robinson has contributed a new backend to allow cairo 4733applications to target native Mac OS X windows through the Quartz 4734API. Geoff Norton integrated this backend into the current 4735configure-based build system, while Calum also provided Xcode build 4736support in the separate "macosx" module available in CVS. 4737 4738The new interface, available in cairo-quartz.h, is as follows: 4739 4740 void 4741 cairo_set_target_quartz_context (cairo_t *cr, 4742 CGContextRef context, 4743 int width, 4744 int height); 4745 4746 cairo_surface_t * 4747 cairo_quartz_surface_create (CGContextRef context, 4748 int width, 4749 int height); 4750 4751There is an example program available in CVS in cairo-demo/quartz. It 4752is a port of Keith Packard's fdclock program originally written for 4753the xlib backend. A screenshot of this program running on Mac OS X is 4754available here: 4755 4756 http://cairographics.org/~cworth/images/fdclock-quartz.png 4757 4758ATSUI font backend 4759------------------ 4760This new font backend complements the Quartz backend by allowing 4761applications to use native font selection on Mac OS X. The interface 4762is a single new function: 4763 4764 cairo_font_t * 4765 cairo_atsui_font_create (ATSUStyle style); 4766 4767Minor API changes 4768----------------- 4769Prototype for non-existent function "cairo_ft_font_destroy" removed. 4770 4771Now depends on libpixman 0.1.2 or newer, (0.1.3 is being released 4772concurrently and has some useful performance improvements). 4773 4774Default paint color is now opaque black, (was opaque white). Default 4775background color is transparent (as before). 4776 4777Renamed "struct cairo" to "struct _cairo" to free up the word "cairo" 4778from the C++ identifier name space. 4779 4780Functions returning multiple return values through provided pointers, 4781(cairo_matrix_get_affine, cairo_current_point, and 4782cairo_current_color_rgb), will now accept NULL for values the user 4783wants to ignore. 4784 4785CAIRO_HAS_FREETYPE_FONT has now been renamed to CAIRO_HAS_FT_FONT. 4786 4787Performance improvements 4788------------------------ 4789Alexander Larsson provided some fantastic performance improvements 4790yielding a 10000% performance improvement in his application, (when 4791also including his performance work in libpixman-0.1.3). These include 4792 4793 * Fixed handling of cache misses. 4794 4795 * Creating intermediate clip surfaces at the minimal size required. 4796 4797 * Eliminating roundtrips when creating intermediate Xlib surfaces. 4798 4799Implementation 4800-------------- 4801Major re-work of font metrics system by Keith Packard. Font metrics 4802should now be much more reliable. 4803 4804Glitz backend 4805------------- 4806Updated for glitz-0.3.0. 4807Bug fixes in reference counting. 4808 4809Test suite 4810---------- 4811New tests for cache crashing, rotating text, improper filling of 4812complex polygons, and leaky rasterization. 4813 4814Bug fixes 4815--------- 4816Fixed assertion failure when selecting the same font multiple times in 4817sequence. 4818 4819Fixed reference counting so cache_destroy functions work. 4820 4821Remove unintended copyright statement from files generated with 4822PostScript backend. 4823 4824Fixed to eliminate new warnings from gcc 3.4 and gcc 4. 4825 4826Snapshot 0.2.0 (2004-10-27 Carl Worth <cworth@cworth.org>) 4827=========================================================== 4828New license: LGPL/MPL 4829--------------------- 4830The most significant news with this release is that the license of 4831cairo has changed. It is now dual-licensed under the LGPL and the 4832MPL. For details see the COPYING file as well as COPYING-LGPL-2.1 and 4833COPYING-MPL-1.1. 4834 4835I express my thanks to everyone involved in the license change process 4836for their patience and support! 4837 4838New font and glyph internals 4839---------------------------- 4840Graydon Hoare has put a tremendous amount of work into new internals 4841for handling fonts and glyphs, including caches where appropriate. 4842This work has no impact on the user-level API, but should result in 4843great performance improvements for applications using text. 4844 4845New test suite 4846-------------- 4847This snapshot of cairo includes a (small) test suite in 4848cairo/test. The tests can be run with "make check". The test suite was 4849designed to make it very easy to add new tests, and we hope to see 4850many contributions here. As you find bugs, please try adding a minimal 4851test case to the suite, and submit it with the bug report to the 4852cairo@cairographics.org mailing list. This will make it much easier 4853for us to track progress in fixing bugs. 4854 4855New name for glitz backend 4856-------------------------- 4857The gl backend has now been renamed to the glitz backend. This means 4858that the following names have changed: 4859 4860 CAIRO_HAS_GL_SURFACE -> CAIRO_HAS_GLITZ_SURFACE 4861 cairo_set_target_gl -> cairo_set_target_glitz 4862 cairo_gl_surface_create -> cairo_glitz_surface_create 4863 4864This change obviously breaks backwards compatibility for applications 4865using the old gl backend. 4866 4867Up-to-date with latest glitz snapshots 4868-------------------------------------- 4869This snapshot of cairo is now up to date with the latest glitz 4870snapshot, (currently 0.2.3). We know that the latest cairo and glitz 4871snapshots have been incompatible for a very long time. We've finally 4872fixed that now and we're determined to not let that happen again. 4873 4874Revert some tessellation regression bugs 4875---------------------------------------- 4876People that have been seeing some tessellation bugs, (eg. leaked 4877fills), in the CVS version of cairo may have better luck with this 4878release. A change since the last snapshot was identified to trigger 4879some of these bugs and was reverted before making the snapshot. The 4880behavior should be the same as the previous (0.1.23) snapshot. 4881 4882Miscellaneous changes 4883--------------------- 4884Changed CAIRO_FILTER_DEFAULT to CAIRO_FILTER_BEST to make gradients 4885easier. 4886 4887Track XCB API change regarding iterators. 4888 4889Various bug fixes 4890----------------- 4891Fix calculation of required number of vertices for pen. 4892 4893Fix to avoid zero-dimensioned pixmaps. 4894 4895Fix broken sort of pen vertices. 4896 4897Fix bug when cairo_show_text called with a NULL string. 4898 4899Fix clipping bugs. 4900 4901Fix bug in computing image length with XCB. 4902 4903Fix infinite loop bug in cairo_arc. 4904 4905Fix memory management interactions with libpixman. 4906 4907Snapshot 0.1.23 (2004-05-11 Carl Worth <cworth@isi.edu>) 4908======================================================== 4909Fixes for gcc 3.4 4910----------------- 4911Fix prototype mismatches so that cairo can be built by gcc 3.4. 4912 4913Updates to track glitz 4914---------------------- 4915Various fixes to support the latest glitz snapshot (0.1.2). 4916 4917Gradient updates 4918---------------- 4919Radial gradients now support both inner and outer circles. 4920Transformed linear gradients are now properly handled. 4921Fixes for extend type reflect. 4922 4923Glitz updates 4924------------- 4925Converted shading routines to use fixed point values and introduced a 4926shading operator structure for more efficient shading calculations. 4927Support compositing with mask surface when mask is solid or 4928multi-texturing is available. 4929 4930PNG backend cleanups 4931-------------------- 4932Fix output to properly compensate for pre-multiplied alpha format in cairo. 4933Add support for A8 and A1 image formats. 4934 4935Bug fixes 4936--------- 4937Avoid crash or infinite loop on null strings and degeneratively short 4938splines. 4939 4940New? bugs in cairo_clip 4941----------------------- 4942There are some fairly serious bugs in cairo_clip. It is sometimes 4943causing an incorrect result. And even when it does work, it is 4944sometimes so slow as to be unusable. Some of these bugs may not be 4945new, (indeed cairo_clip has only ever had a braindead-slow 4946implementation), but I think they're worth mentioning here. 4947 4948Snapshot 0.1.22 (2004-04-16 Carl Worth <cworth@isi.edu>) 4949======================================================== 4950Cairo was updated to track the changes in libpixman, and now depends 4951on libpixman version 0.1.1. 4952 4953Snapshot 0.1.21 (2004-04-09 David Reveman <c99drn@cs.umu.se>) 4954============================================================= 4955New OpenGL backend 4956------------------ 4957The OpenGL backend provides hardware accelerated output for 4958X11 and OS X. The significant new functions are: 4959 4960 cairo_set_target_gl 4961 cairo_gl_surface_create 4962 4963Automatic detection of available backends 4964----------------------------------------- 4965The configure script now automatically detect what backends are 4966available, (use ./configure --disable-`backend' to prevent 4967compilation of specific backends). 4968 4969Snapshot 0.1.20 (2004-04-06 Carl Worth <cworth@isi.edu>) 4970======================================================== 4971New pattern API 4972--------------- 4973David Reveman has contributed a new pattern API which enable linear 4974and radial gradient patterns in addition to the original surface-based 4975patterns. The significant new top-level functions are: 4976 4977 cairo_pattern_create_linear 4978 cairo_pattern_create_radial 4979 cairo_pattern_create_for_surface 4980 cairo_pattern_add_color_stop 4981 cairo_set_pattern 4982 4983Any code using the old cairo_set_pattern, (which accepted a 4984cairo_surface_t rather than a cairo_pattern_t), will need to be 4985updated. 4986 4987Update to XCB backend 4988--------------------- 4989The XCB backend is now enabled by default, (use ./configure 4990--disable-xcb to turn it off). 4991 4992Faster clipping 4993--------------- 4994Graydon Hoare has added optimizations that make cairo_clip much faster 4995when the path is a pixel-aligned, rectangular region. 4996 4997Bug fixes. 4998 4999Snapshot 0.1.19 (2004-02-24 Carl Worth <cworth@isi.edu>) 5000======================================================== 5001New PNG backend 5002--------------- 5003Olivier Andrieu contributed a new PNG backend. It builds on the 5004existing image backend to make it easy to render "directly" to a 5005.png file. The user never needs to deal with the actual image 5006buffer. The significant new functions are: 5007 5008 cairo_set_target_png 5009 cairo_png_surface_create 5010 5011The PNG backend is not enabled by default so that by default there is 5012not a new dependency on libpng. Use ./configure --enable-png to enable 5013this backend. 5014 5015Snapshot 0.1.18 (2004-02-17 Carl Worth <cworth@isi.edu>) 5016======================================================== 5017Path query functionality 5018------------------------ 5019It's now possible to query the current path. The two new functions 5020are: 5021 5022 cairo_current_path 5023 cairo_current_path_flat 5024 5025Each function accepts a number of callback functions that will be 5026called for each element in the path (move_to, line_to, curve_to, 5027close_path). The cairo_current_path_flat function does not accept a 5028curve_to callback. Instead, all curved portions of the path will be 5029converted to line segments, (within the current tolerance value). This 5030can be handy for doing things like text-on-path without having to 5031manually interpolate Bézier splines. 5032 5033New XCB backend 5034--------------- 5035Jamey Sharp has contributed a second X backend that uses the new, lean 5036XCB library rather than Xlib. It cannot currently be compiled at the 5037same time as the Xlib backend. See ./configure --enable-xcb. 5038 5039Build fixes for cygwin. 5040 5041Bug fixes. 5042 5043Snapshot 0.1.17 (2003-12-16 Carl Worth <cworth@isi.edu>) 5044======================================================== 5045 5046Better text support 5047------------------- 5048This snapshot provides much better text support by implementing the 5049following four functions: 5050 5051 cairo_text_extents 5052 cairo_glyph_extents 5053 cairo_text_path 5054 cairo_glyph_path 5055 5056The text/glyph_extents functions can be used to determine the bounding 5057box (and advance) for text as if drawn by show_text/glyphs. 5058 5059The text/glyph_path objects functions place text shapes on the current 5060path, where they can be subsequently manipulated. For example, 5061following these functions with cairo_stroke allows outline text to be 5062drawn. Calling cairo_clip allows clipping to a text-shaped region. 5063 5064Combined dependencies 5065--------------------- 5066The cairo core now depends only on the libpixman library. This single 5067library replaces the three previous libraries libic, libpixregion, and 5068slim. Thanks to Dave Beckett <dave.beckett@bristol.ac.uk> for all of 5069the heavy lifting with this renaming effort. 5070 5071Conditional compilation of backends 5072----------------------------------- 5073Cairo now allows optional backends to be disabled at compile time. The 5074following options may now be passed to the configure script: 5075 5076 --disable-xlib 5077 --disable-ps 5078 5079Note that the first option is a change from the old --without-x option 5080which will no longer have any effect. 5081 5082OS X supported - several byte-order issues resolved 5083--------------------------------------------------- 5084Cairo has now been successfully compiled under OS X. Testing revealed 5085that there were some byte-order problems in the PostScript backend and 5086the PNG generation in the demos. These have now been resolved. 5087 50882003-10 5089======= 5090Graydon Hoare <graydon@redhat.com> implemented the first real text 5091support using Freetype/fontconfig, (previous versions of cairo used 5092Xft and could only draw text when using an X backend). 5093 50942003-09 5095======= 5096Graydon Hoare <graydon@redhat.com> added the first real support for 5097running cairo with a non-render-aware X server. 5098 5099Jamey Sharp <jamey@minilop.net> virtualized the backend font and 5100surface interfaces in September, 2003. 5101 51022003-06 5103======= 5104Xr is renamed cairo to avoid confusion since it no longer had a strict 5105dependence on X. 5106 51072003-05 5108======= 5109A new image surface backend is added to Xr. Keith Packard 5110<keithp@keithp.com> wrote the image compositing code in libic that is 5111used for the image_surface backend. This code was originally written 5112as the software fallback for the render extension within the X 5113server. 5114 51152002-06 5116======= 5117Carl Worth <cworth@isi.edu> wrote the first lines of Xr, after Keith 5118Packard <keithp@keithp.com> proposed the plan for a stateful drawing 5119library in C providing a PostScript-like rendering model. 5120 5121 LocalWords: mutex BeOS extraordinaire 5122