1Release 1.10.2 (2010-12-25 Chris Wilson <chris@chris-wilson.co.uk>) 2=================================================================== 3The cairo community is pleased to announce the 1.10.2 release of the 4cairo graphics library. This is the first update to cairo's stable 1.10 5series and contains a large number of bug fixes. 6 7While many people have contributed and have help to test the release, 82 people deserve special recognition for their efforts in tracking down 9and fixing bugs, Andrea Canciani and Adrian Johnson. Thanks to their 10tremendous efforts, and of all cairo contributors, it is much 11appreciated. 12 13We recommend everyone upgrade to cairo 1.10.2 and hope that everyone 14will continue to have lots of fun with cairo! 15 16-Chris 17 18Bug fixes 19--------- 20 21 Fix embedding of grayscale jpegs in PS. 22 https://bugs.freedesktop.org/show_bug.cgi?id=31632 23 24 Fix the reported path of extents containing a curve. 25 26 Fix the compositing of unaligned boxes. 27 28 Reset the clipper in PDF upon finish. 29 30 Fix degenerates arcs to become a degenerate line. 31 32 Build support for autoconf 2.67 33 34 Fix painting of transformed patterns in PS 35 36 Fix the EPS bounding box for PS 37 https://bugs.freedesktop.org/show_bug.cgi?id=24688 38 39 Fix the missing content for EPS 40 https://bugs.freedesktop.org/show_bug.cgi?id=24688 41 42 Fix regression upon changing page size in PS/PDF 43 https://bugs.freedesktop.org/show_bug.cgi?id=24691 44 45 Only use ActualText with PDF-1.5 documents 46 47 Fix the bbox for type1 fallbacks. 48 49 Reset the color after ending the context in PDF 50 https://bugs.freedesktop.org/show_bug.cgi?id=31140 51 52 Fix the advance of subsetted type1 fonts 53 https://bugs.freedesktop.org/show_bug.cgi?id=31062 54 55 Fix handling of EXTEND_NONE gradients for PDF 56 57 Restrict in-place optimisation for a8 image masks with SOURCE 58 59 60Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>) 61=================================================================== 62The cairo community is astounded (and flabbergast) to finally announce 63the 1.10.0 release of the cairo graphics library. This is a major update 64to cairo, with new features and enhanced functionality which maintains 65compatibility for applications written using any previous major cairo 66release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using 67a previous version of cairo upgrade to cairo 1.10.0. 68 69One of the more interesting departures for cairo for this release is the 70inclusion of a tracing utility, cairo-trace. cairo-trace generates a 71human-readable, replayable, compact representation of the sequences of 72drawing commands made by an application. This can be used to inspecting 73applications to understand issues and as a means for profiling 74real-world usage of cairo. 75 76The traces generated by cairo-trace have been collected in 77 78 git://git.cairographics.org/git/cairo-traces 79 80and have driven the performance tuning of cairo over the last couple of 81years. In particular, the image backend is much faster with a new 82polygon rasterisation and a complete overhaul of the tessellator. Not 83only is this faster, but also eliminates visual artifacts from 84self-intersecting strokes. Not only has cairo-trace been driving 85performance improvements within cairo, but as a repeatable means of 86driving complex graphics it has been used to tune OpenGL, DDX, and 87pixman. 88 89Cairo's API has been extended to better support printing, notably 90through the ability to include a single compressed representation of an 91image for patterns used throughout a document, leading to dramatic file 92size reductions. Also the meta-surface used to record the vector 93commands compromising a drawing sequence is now exposed as a 94CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a 95larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a 96subsurface would be as a source glyph in a texture atlas, or as a 97restricted subwindow within a canvas. 98 99Cairo's API has also resurrected the RGB16 format from the past as 100the prevalence of 16-bit framebuffers has not diminished and is a 101fore-taste of the extended format support we anticipate in the future. 102Increasing cairo's utility, we introduce the cairo_region_t for handling 103sets of pixel aligned rectangles commonly used in graphics applications. 104This is a merger of the GdkRegion and the pixman_region_t, hopefully 105providing the utility of the former with the speed of the latter. 106 107Furthermore cairo has been reworked to interoperate more closely with 108various acceleration architectures, gaining the ability to share 109those hardware resources through the new cairo_device_t. For instance, 110with the new OpenGL backend that supersedes the Glitz backend, hardware 111and rendering operations can be shared between a classic OpenGL 112application mixing libVA for the hardware assisted video decode with 113cairo for high quality overlays all within the same OpenGL canvas. 114 115Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad 116Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson, 117Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren 118Sandmann Pedersen and many others that have contributed over the last 119couple of years to cairo. Thank you all! 120 121Snapshot 1.9.14 (2010-07-26) 122============================ 123 124 A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and 125 we are being to see the results of the stabilisation effort. Clipping bugs 126 seems to have been the order of the last couple of weeks, with a couple 127 reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for 128 finding those regressions. At this point all that seems to remain to do is 129 to fix the outstanding regressions in the PDF backend... 130 131Bugs fixes 132---------- 133 134 Clip doesn't work for text on the image backend 135 https://bugs.freedesktop.org/show_bug.cgi?id=29008 136 137 Add explicit dependency for cxx 138 https://bugs.freedesktop.org/show_bug.cgi?id=29114 139 140 Fix regressions in reporting clip extents 141 https://bugs.freedesktop.org/show_bug.cgi?id=29120 142 https://bugs.freedesktop.org/show_bug.cgi?id=29121 143 https://bugs.freedesktop.org/show_bug.cgi?id=29122 144 https://bugs.freedesktop.org/show_bug.cgi?id=29124 145 https://bugs.freedesktop.org/show_bug.cgi?id=29125 146 147 148Snapshot 1.9.12 (2010-07-12) 149============================ 150 151 A couple of weeks spent fixing those annoying bugs and cleaning up the build 152 system; the list of outstanding tasks to complete for the stable release is 153 finally shrinking. The chief bug fixer has been Benjamin Otte who not only 154 made sure that the public API is consistent and being tested for its 155 consistency, but also ensured that the documentation was up-to-date and 156 spent time clarifying cases where even the Cairo developers have come 157 unstuck in the past. Many thanks, Benjamin. However, he was not alone, 158 as Andrea Canciani continued his fine work in isolating broken corner cases 159 and proceeding to fix them, and tidying up the quartz backend. And last, but 160 definitely not least, M Joonas Pihlaja tried building Cairo across a 161 perverse range of systems and fixed up all the loose bits of code that came 162 unravelled. Thanks everybody! 163 164API Changes 165----------- 166 167 cairo_surface_set_mime_data, cairo_surface_get_mime_data: 168 169 The length parameter is now an unsigned long (as opposed to an unsigned 170 int). The parameter is intended to be an equivalent to a size_t without 171 requiring POSIX types and be large enough to store the size of the 172 largest possible allocation. 173 174 cairo_gl_surface_create_for_texture: 175 176 This a new surface constructor for cairo-gl that explicitly enables 177 render-to-texture for foreign, i.e. application, textures. 178 179 cairo_region_xor, cairo_region_xor_rectangle 180 181 A couple of utility routines add to the region handling interface for 182 the purpose of replacing existing GdkRegion functionality. 183 184Bugs fixes 185---------- 186 187 https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622 188 189 Inkscape was caught in the act of attempting to modify a finished surface. 190 Unfortunately, we had the ordering of our guards and assertions wrong and 191 so an ordinary application error was triggering an assert in Cairo. This 192 lead Benjamin to add a test case to ensure that the entire public API 193 could handle erroneous input and then proceeded to fix a whole slew of 194 uncovered bugs. 195 196 197 https://bugs.freedesktop.org/show_bug.cgi?id=28888 198 199 A regression introduced by the special casing of uploading images to an 200 xlib surface in-place which was ignoring the translation applied to the 201 image. 202 203 204Snapshot 1.9.10 (2010-06-26) 205============================ 206 207 The first "quick" snapshot in the run up to the stable release. The 208 last snapshot was picked up by the bleeding edge distributions and so the 209 bug reports have to started to roll in. The most frequent of these are the 210 introduction of rendering errors by applications that modify a surface 211 without subsequently calling cairo_surface_mark_dirty(). Make sure the 212 application developers are aware of increased reliance on strict use of the 213 Cairo API before 1.10 is released! 214 215 The usual slew of bugs reported and we would like to thank Zoxc for 216 contributing the WGL interface for cairo-gl, and finding more build 217 failures on win32. And it just wouldn't be a 1.9 snapshot unless 218 Benjamin Otte improved the error handling within cairo-gl, as well as 219 isolating and fixing some more errors in the test suite. The biggest bug of 220 the snapshot turned out to be a major sign extension issue that had lain 221 hidden for many years and was suddenly exposed by incorrectly rounding 222 rectangles when performing non-antialiased rendering. Also to the relief 223 of many we have included the downstream patch to honour the user's LCD 224 filtering preferences for subpixel rendering of fonts. The interface 225 remains private for the time being, whilst the proposed public API is 226 finalized. 227 228API changes 229----------- 230 None. 231 232Snapshot 1.9.8 (2010-06-12) 233=========================== 234 235 One major API changes since the last snapshot, and a whole slew of bugs 236 fixed and inconsistencies eliminated. Far too many bugs fixed to 237 individually identify. We need to thank Benjamin Otte for his fantastic 238 work on the cairo-gl backend making it faster and more robust, Andrea 239 Canciani for finding so many bugs and developing test cases for them, as 240 well fixing them. And last but not least we must all thank Adrian Johnson for 241 continuing to eliminate bugs and improving the PostScript and PDF backends. 242 243 This snapshot represents almost 4 months of bug fixing, bringing Cairo to 244 a point where we consider it almost ready to be a candidate for release. 245 There are a few known bugs left to be fixed, being tracked in 246 https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a 247 whirl and report any regressions. The plan is to release a new snapshot 248 every other week leading to a 1.10 release with a target date of 249 2010-08-16. 250 251API additions 252------------- 253 CAIRO_FORMAT_RGB16_565 254 255 16 bit devices still remain popular, and so with great demand, 256 CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create 257 and use 16 bit images as sources and render targets. 258 259 cairo_surface_create_for_rectangle() 260 261 It is common practice to cut an image up into many smaller pieces and use 262 each of those as a source - a technique called texture atlasing. 263 cairo_surface_create_for_rectangle() extends Cairo to directly support use 264 of these subregions of another cairo_surface_t both as a source and as a 265 render target. 266 267 cairo_region_create() 268 cairo_region_create_rectangle() 269 cairo_region_create_rectangles() 270 cairo_region_copy() 271 cairo_region_reference() 272 cairo_region_destroy() 273 cairo_region_equal() 274 cairo_region_status() 275 cairo_region_get_extents() 276 cairo_region_num_rectangles() 277 cairo_region_get_rectangle() 278 cairo_region_is_empty() 279 cairo_region_contains_rectangle() 280 cairo_region_contains_point() 281 cairo_region_translate() 282 cairo_region_subtract() 283 cairo_region_subtract_rectangle() 284 cairo_region_intersect() 285 cairo_region_intersect_rectangle() 286 cairo_region_union() 287 cairo_region_union_rectangle() 288 289 The Cairo region API was actually added a couple of snapshots ago, but we 290 forgot to mention it at the time. A simple API for the handling of 291 rectangular pixel-aligned regions by Soeren Sandmann. 292 293 294Backend-specific improvements 295----------------------------- 296cairo-gl 297 298 Benjamin Otte made more than 200 commits in which he refactored the cairo-gl 299 backend, reducing a lot of code duplication and enabled him to begin working 300 on improving performance by reducing state changes and associated overhead. 301 302cairo-xlib 303 304 Access to the underlying connection to the Display is now thread-safe 305 enabling cairo-xlib to be used in a multi-threaded application without fear 306 of random corruption. Thanks Benjamin Otte! 307 308 cairo-xlib will now attempt to use PolyModeImprecise when compositing 309 trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which 310 should allow hardware drivers more scope for accelerating the operation at 311 the cost of potentially incurring minute rendering errors. The mode can be 312 forced back to PolyModePrecise by setting the antialias parameter to 313 CAIRO_ANTIALIAS_SUBPIXEL. 314 315cairo-svg 316 317 A notable improvement was contributed by Alexander Shulgin to enable SVG to 318 reference external image through the use an extended MIME data type. 319 320Snapshot 1.9.6 (2010-02-19) 321=========================== 322API additions 323------------- 324 Add cairo_device_t 325 326 The device is a generic method for accessing the underlying interface 327 with the native graphics subsystem, typically the X connection or 328 perhaps the GL context. By exposing a cairo_device_t on a surface and 329 its various methods we enable finer control over interoperability with 330 external interactions of the device by applications. The use case in 331 mind is, for example, a multi-threaded gstreamer which needs to serialise 332 its own direct access to the device along with Cairo's across many 333 threads. 334 335 Secondly, the cairo_device_t is a unifying API for the mismash of 336 backend specific methods for controlling creation of surfaces with 337 explicit devices and a convenient hook for debugging and introspection. 338 339 The principal components of the API are the memory management of: 340 341 cairo_device_reference(), 342 cairo_device_finish() and 343 cairo_device_destroy(); 344 345 along with a pair of routines for serialising interaction: 346 347 cairo_device_acquire() and 348 cairo_device_release() 349 350 and a method to flush any outstanding accesses: 351 352 cairo_device_flush(). 353 354 The device for a particular surface may be retrieved using: 355 356 cairo_surface_get_device(). 357 358 The device returned is owned by the surface. 359 360API changes (to API new in the cairo 1.9.x series) 361-------------------------------------------------- 362 cairo_recording_surface_create() 363 cairo_recording_surface_ink_extents() 364 365 These are the replacement names for the functions previously named 366 cairo_meta_surface_create and cairo_meta_surface_ink_extents. 367 368 cairo_surface_set_mime_data 369 370 This interface is now changed such that the MIME data will be 371 detached if the surface is modified at all. This guarantees that 372 the MIME data will not become out of synch due to surface 373 modifications, and also means that for the MIME data to be useful, 374 it must be set after all modifications to the surface are 375 complete. 376 377API removal (of experiment API) 378------------------------------- 379 The cairo-glitz backend is removed entirely, (in favor of the new 380 cairo-gl backend). See below for more on cairo-gl. 381 382Generic fixes 383------------- 384 385 Many improvements for drawing of dashed strokes 386 387 Fix incorrect handling of negative offset 388 Faster computation of first dash (avoids near-infinite looping) 389 Approximate extremely fine dash patterns with appropriate alpha value 390 391 Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle) 392 393Backend-specific improvements 394----------------------------- 395cairo-drm 396 397 This is a new, direct-rendering backend that supports Intel graphics 398 chipsets in the i915 and i965 families. It's still experimental and 399 will likely remain that way for a while. It's already got extremely 400 good performance on the hardware it supports, so if nothing else 401 provides a working proof and performance target for the cairo-gl 402 work for Intel graphics. 403 404cairo-gl 405 406 Start using GLSL to accelerate many operations. Many thanks to Eric 407 Anholt and T. Zachary Laine for this work. For the first time, we 408 have what looks like what will be a very compelling OpenGL-based 409 backend for cairo (in terms of both quality and performance). 410 411 See this writeup from Eric for more details on recent progress of 412 cairo-gl (which he presented at FOSDEM 2010): 413 414 http://anholt.livejournal.com/42146.html 415 416cairo-image 417 418 The image backend is made dramatically faster (3-5 times faster for 419 benchmarks consisting primarily of glyph rendering). 420 421cairo-quartz fixes: 422 423 Many fixes from Robert O'Callahan and Andrea Canciani including: 424 425 Fixed gradient pattern painting 426 Improved A8 image handling 427 Fixes for "unbounded" and other compositing operators 428 429cairo-pdf fixes: 430 431 Improvements to embedding of JPEG and JPEG2000 data. 432 433cairo-ps fixes: 434 435 Fix printing of rotated user fonts. 436 437Snapshot 1.9.4 (2009-10-15) 438=========================== 439API additions: 440 441 cairo_meta_surface_create() 442 cairo_meta_surface_ink_extents() 443 444 Finally exporting the internal meta-surface so that applications 445 have a method to record and replay a sequence of drawing commands. 446 447 cairo_in_clip() 448 449 Determines whether a given point is inside the current clip. 450 ??? Should this be called cairo_in_paint() instead? in-clip is the test 451 that is performed, but in-paint would be similar to in-fill and in-stroke. 452 453New utilities: 454 455 cairo-test-trace 456 457 A companion to cairo-perf-trace, this utility replays a trace against 458 multiple targets in parallel and looks for differences in the output, 459 and then records any drawing commands that cause a failure. 460 Future plans: 461 Further minimisation of the fail trace using "delta debugging". 462 More control over test/reference targets. 463 464Backend improvements: 465 466 xlib 467 468 Server-side gradients. The theory is that we can offload computation 469 of gradients to the GPU and avoid pushing large images over the 470 connection. Even if the driver has to fallback and use pixman to render 471 a temporary source, it should be able to do so in a more efficient manner 472 than Cairo itself. However, cairo-perf suggests otherwise: 473 474 On tiny, Celeron/i915: 475 476 before: firefox-20090601 211.585 477 after: firefox-20090601 270.939 478 479 and on tiger, CoreDuo/nvidia: 480 481 before: firefox-20090601 70.143 482 after: firefox-20090601 87.326 483 484 In particular, looking at tiny: 485 486 xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown 487 █▋ 488 xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown 489 █▋ 490 491 492New experimental backends: 493 494 QT 495 496 OpenVG - The initial work was done by Øyvind Kolås, and made ready for 497 inclusion by Pierre Tardy. 498 499 OpenGL - An advanced OpenGL compositor. The aim is to write a integrate 500 directed rendering using OpenGL at a high-level into Cairo. In 501 contrast to the previous attempt using Glitz which tried to 502 implement the RENDER protocol on top of OpenGL, using the 503 high-level interface should permit greater flexibility and 504 more offloading onto the GPU. 505 The initial work on the backend was performed by Eric Anholt. 506 507Long standing bugs fixed: 508 509 Self-intersecting strokes. 510 511 A long standing bug where the coverage from overlapping semi-opaque 512 strokes (including neighbouring edges) was simply summed in lieu of 513 a costly global calculation has been fixed (by performing the costly 514 global calculation!) In order to mitigate the extra cost, the 515 tessellator has been overhauled and tune, which handles the fallback 516 for when we are unable to use the new span rasteriser on the stroke 517 (e.g. when using the current RENDER protocol). The large number of 518 pixel artefacts that implementing self-intersection elimination 519 removes is ample justification for the potential performance 520 regression. If you unfortunately do suffer a substantial performance 521 regression in your application, please consider obtaining a 522 cairo-trace and submitting it to us for analysis and inclusion into 523 our performance suite. 524 525Special thanks: 526 527 To the AuroraUX team for providing access to one of their OpenSolaris 528 machines for cairo and pixman development. http://www.auroraux.org/ 529 530Snapshot 1.9.2 (2009-06-12) 531=========================== 532API additions: 533 534 cairo_surface_set_mime_data() 535 cairo_surface_get_mime_data() 536 537 Should this take unsigned int, unsigned long or size_t for the length 538 parameter? (Some datasets may be >4GiB in size.) 539 540 Associate an alternate, compressed, representation for a surface. 541 Currently: 542 "image/jp2" (JPEG2000) is understood by PDF >= 1.5 543 "image/jpeg" is understood by PDF,PS,SVG,win32-printing. 544 "image/png" is understood by SVG. 545 546 cairo_pdf_version_t 547 cairo_pdf_surface_restrict_to_version() 548 cairo_pdf_get_versions() 549 cairo_pdf_version_to_string() 550 551 Similar to restrict to version and level found in SVG and PS, 552 these limit the features used in the output to comply with the PDF 553 specification for that version. 554 555 CAIRO_STATUS_INVALID_SIZE 556 Indicates that the request surface size is not supported by the 557 backend. This generally indicates that the request is too large. 558 559 CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED 560 Indicates that a required callback for a user-font was not implemented. 561 562 CAIRO_STATUS_LAST_STATUS 563 This is a special value to indicate the number of status values enumerated 564 at compile time. (This may differ to the number known at run-time.) 565 566 The built-in twin font is now called "@cairo:" and supports a limited set 567 of options like "@cairo:mono". Where are these specified? 568 569 cairo_in_fill() now uses HTML Canvas semantics, all edges are inside. 570 571New experimental backends: 572 573 CairoScript 574 575New utility: 576 577 cairo-trace and cairo-perf-trace 578 579 cairo-trace generates a human-readable, replayable, compact(-ish!) 580 representation of the sequences of drawing commands made by an 581 application. 582 583 Under the util/cairo-script directory is a library to replay traces. 584 585 perf/cairo-perf-trace replays traces against multiple backends 586 and makes useful benchmark reports. This is integrated with 587 'make perf'. You may collect your own traces or take advantage 588 of traces collected by the community: 589 590 git://git.cairographics.org/git/cairo-traces 591 592 (Put this into perf/cairo-traces to run these as part of "make perf".) 593 594 There is additional WIP in building a debugging tool for cairo applications 595 based on CairoScript (currently very preliminary, mostly serves to show 596 that GtkSourceView is too slow) : 597 598 people.freedesktop.org:~ickle/sphinx 599 600Test suite overhaul: 601 602 The test suite is undergoing an overhaul, primarily to improve its speed 603 and utility. (Expect more changes in the near future to improve XFAIL 604 handling.) 605 606Optimisations: 607 polygon rasterisation! Joonas implemented the Tor polygon scan converter, 608 on typical geometry is about 30% faster for the image backend. 609 610 Bovine Polaroids! For those not in on the joke, this is the long 611 awaited "copy-on-write snapshot" or "COW snapshot" support. The 612 user-visible feature is that including the same image multiple times 613 into a PDF file should result in only a single instance of that 614 image in the final output. This is unlike previous versions of cairo 615 which would generate very large PDF files with multiple copies of 616 the same image. Adrian says that the PDF is not quite working as 617 well as it should yet, so we hope for futher improvements before 618 cairo 1.10. 619 620Bug fixes: 621 622 EXTEND_PAD. 623 624 Better handling of large scale-factors on image patterns. 625 626 Emit /Interpolate for PS,PDF images. 627 628 Global glyph cache - cap on the total number of inactive glyphs, 629 should prove fairer for fonts with larger glyph sets. 630 631 Compilation without fontconfig 632 633 Improved handling of low-bitdepth sources (e.g. copying the contents 634 of 16-bit xserver windows) 635 636Regressions: 637 638 cairo_traps_extract_region >10x slower. Fix pending. 639 640Still to come: 641 642 Region tracking API (ssp) for damage tracking, hit testing etc 643 mime-surface 644 645 An expiremental OpenGL backend? 646 647 Tweaks to tessellator, allocations of patterns, delayed 648 initialisation of the xlib backend (reduce the cairo overhead of 649 render_bench by ~80%). 650 651 652Release 1.8.8 (2009-06-16 Chris Wilson <chris@chris-wilson.co.uk>) 653================================================================== 654The cairo community is pleased to announce the 1.8.8 release of the 655cairo graphics library. This is the fourth update to cairo's stable 6561.8 series and contains a small number of bug fixes (in particular a 657few corrections to the documentation and a few fixes in the FreeType font 658backend). This is being released just over six months after cairo 1.8.6. 659 660We recommend that everyone using cairo upgrade to 1.8.8. 661 662-Chris 663 664Build fixes 665----------- 666There were reports of incompatibilities with the autotools bundled in with 667the 1.8.6 tarball. This release has been built with automake-1.10.2 and 668autoconf-2.63. 669 670The configure check for FreeType has been improved: 671 672 typo in check for version of freetype in configure script 673 https://bugs.freedesktop.org/show_bug.cgi?id=19283 674 675Compilation on 64-bit MacOS/X fixes: 676 677 Cannot build cairo_quartz_font_face_create_for_atsu_font_id on 64-bit Mac OS X 678 https://bugs.freedesktop.org/show_bug.cgi?id=15702 679 680Bug fixes 681--------- 682Uninitialised status return within _cairo_clip_intersect_mask(). This caused 683random crashes and general mayhem as an error could be generated causing all 684rendering to the context to stop. 685 686Avoid transforming nearly-degenerate matrices into degenerate matrices: 687 688 Painting stops in this case, using -moz-transform: scale, rotate and video 689 https://bugzilla.mozilla.org/show_bug.cgi?id=467423 690 691A few FreeType font handling bugs were fixed: 692 693 Rendering with PANGO_GRAVITY_EAST leads to different results with image and pdf 694 https://bugs.freedesktop.org/show_bug.cgi?id=21985 695 696 Don't call FT_Done_Face() on faces we did not create 697 698 zombie ft_font_face / ft_unscaled_font mutual referencing problems 699 http://bugs.freedesktop.org/show_bug.cgi?id=21706 700 701Ensure win32 font backend sets the return value to -1 (indicating the absent 702glyph) if the font index lookup for the unicode character fails. And 703similarly fix a bug where a fatal error was raised for an invalid glyph. 704 705 cairo_scaled_font_glyph_extents breaks with invalid glyph id 706 http://bugs.freedesktop.org/show_bug.cgi?id=20255 707 708Various improvements to the documentation, reported by Truc Troung: 709 710 https://bugs.freedesktop.org/show_bug.cgi?id=20095 711 https://bugs.freedesktop.org/show_bug.cgi?id=20154 712 https://bugs.freedesktop.org/show_bug.cgi?id=20180 713 https://bugs.freedesktop.org/show_bug.cgi?id=20183 714 https://bugs.freedesktop.org/show_bug.cgi?id=20182 715 https://bugs.freedesktop.org/show_bug.cgi?id=20441 716 717 718Release 1.8.6 (2008-12-13 Chris Wilson <chris@chris-wilson.co.uk>) 719================================================================== 720The cairo community is pleased to announce the 1.8.6 release of the 721cairo graphics library. This is the third update to cairo's stable 7221.8 series and contains a small number of bug fixes (in particular a 723few fixes for failures of cairo 1.8.4 on Quartz and PDF, and build fixes for 724a couple of backends). This is being released just under a month after 725cairo 1.8.4. 726 727We recommend that everyone using cairo upgrade to 1.8.6. 728 729-Chris 730 731Build fixes 732----------- 733Fix build of DirectFB backend with debugging enabled: 734 735 Bug in _cairo_directfb_surface_release_source_image function 736 http://bugs.freedesktop.org/show_bug.cgi?id=18322 737 738Fix build on OS/2. 739 740Bug fixes 741--------- 742Workaround a mis-compilation of cairo_matrix_invert() that generated invalid 743matrices and triggered assertion failures later. The issue was reported by 744Peter Hercek. 745 746Invalid computation of the modulus: 747 748 https://bugzilla.mozilla.org/show_bug.cgi?id=466258 749 750Invalid referencing of patterns in the Quartz backend: 751 752 Failed assertion `CAIRO_REFERENCE_COUNT_HAS_REFERENCE 753 (&pattern->ref_count)' when using cairo quartz backend 754 http://bugs.freedesktop.org/show_bug.cgi?id=18632 755 756Invalid references to glyphs after early culling, causing segmentation faults 757in the PDF backend: 758 759 http://lists.cairographics.org/archives/cairo/2008-December/015976.html 760 761Check for XRender in the XCB backend, or else we may attempt an invalid memory 762access: 763 764 XCB backend fails with missing render. 765 https://bugs.freedesktop.org/show_bug.cgi?id=18588 766 767Release 1.8.4 (2008-11-14 Carl Worth <cworth@cworth.org>) 768========================================================= 769The cairo community is pleased to announce the 1.8.4 release of the 770cairo graphics library. This is the second update to cairo's stable 7711.8 series and contains a small number of bug fixes, (in particular a 772few fixes for build failures of cairo 1.8.2 on various systems). This 773is being released just over two weeks after cairo 1.8.2. 774 775We recommend that everyone using cairo upgrade to 1.8.4. 776 777-Carl 778 779Build fixes 780----------- 781Fix build with older XRender that doesn't define RepeatNone: 782 783 Build of xlib backend fails against old XRender (RepeatNone undeclared) 784 https://bugs.freedesktop.org/show_bug.cgi?id=18385 785 786Fix build with bash version <= 3.0: 787 788 doltlibtool broken on linux with bash 3.00.0 789 https://bugs.freedesktop.org/show_bug.cgi?id=18363 790 791Bug fixes 792--------- 793Avoid triggering a bug in X.org server 6.9 resulting in a hung machine 794requiring a reboot: 795 796 https://bugs.freedesktop.org/show_bug.cgi?id=15628#c2 797 798Fix display of user fonts as exercised by proposed support for type3 799fonts in poppler (unsigned promotion fixes): 800 801 Use cairo user-font for Type 3 fonts 802 http://lists.freedesktop.org/archives/poppler/2008-October/004181.html 803 804Avoid miscomputing size of fallback images required when rendering 805with CLEAR, IN, or SOURCE operator to vector surfaces, (PS, PDF, SVG, 806etc.). 807 808Be more tolerant of broken fonts when subsetting type1 fonts: 809 810 Error handling in cairo_type1_font_subset_get_glyph_names_and_widths 811 http://lists.cairographics.org/archives/cairo/2008-October/015569.html 812 813Fix cairo_fill_extents, cairo_stroke_extents, cairo_path_extents, to 814correctly allow NULL parameters as documented. 815 816Fix potential crash on emitting a type3 glyph after having drawn text 817paths from the same font, (for example with cairo_text_path). 818 819Release 1.8.2 (2008-10-29 Carl Worth <cworth@cworth.org>) 820========================================================= 821The cairo community is pleased to announce the 1.8.2 release of the 822cairo graphics library. This is the first update to cairo's stable 1.8 823series and contains a large number of bug fixes. It is being released 824just over one month since cairo 1.8.0. 825 826This release consists primarily of bug fixes, but there is one notable 827new feature, (the ability to build cairo without an external font 828backend), and there are a few optimizations as well. See below for 829details on these changes and the most important bug fixes. 830 831While many people have contributed to this release, Chris Wilson 832deserves particular mention. He has contributed well over twice as 833many changes to cairo since 1.8.0 than everyone else combined. We 834greatly appreciate the tremendous efforts of Chris and all cairo 835contributors. 836 837We recommend everyone upgrade to cairo 1.8.2 and hope that everyone 838will have lots of fun with cairo! 839 840-Carl 841 842New feature 843----------- 844It is now possible to build cairo without any font backend, (such as 845freetype, win32 or quartz). This is most useful when the application 846provides custom font rendering through the user-font API. But in the 847case where no external font backend is available, and no user-font is 848provided, cairo will render with a failsafe font, (a stroked font 849covering visible ASCII character). (Behdad Esfahbod) 850 851Optimizations 852------------- 853Dramatically speed up compilation with dolt (removes much of the 854libtool overhead) (Behdad Esfahbod with thanks to Josh Triplett). 855 856Several minor optimizations to tessellator (special-cased comparisons, 857faster insert for skiplist, etc.) (Chris Wilson). 858 859Optimize away fractional translation component when doing 860EXTEND_NEAREST filtering, (for better performance). 861 862General bug fixes 863----------------- 864Allow cloning sub-regions of similar surfaces to fix this bug 865(Chris Wilson): 866 867 Crafted gif file will crash firefox 868 [XError: 'BadAlloc (insufficient resources for operation)'] 869 https://bugzilla.mozilla.org/show_bug.cgi?id=424333 870 871Fix some matrix confusion to fix this regression (Chris Wilson): 872 873 Translucent star exports in a wrong way to PDF 874 https://bugs.launchpad.net/inkscape/+bug/234546 875 876Fix some long-standing bugs with respect to properly computing the 877extents of transformed, filtered surfaces (Owen Taylor, Carl Worth, 878and Chris Wilson): 879 880 Bad clipping with EXTEND_NONE 881 http://bugs.freedesktop.org/show_bug.cgi?id=15349 882 883 Improve filtering handling in cairo-pattern.c 884 http://bugs.freedesktop.org/show_bug.cgi?id=15367 885 886 Many thanks to Chris Wilson for digging out and cleaning up 887 these fixes. 888 889Fix compilation on Solaris 10 (Chris Wilson): 890 891 Cairo requires -DREENTRANT (along with -D_POSIX_THREAD_SEMANTICS) 892 to compile on Solaris 10 with pthreads 893 https://bugs.freedesktop.org/show_bug.cgi?id=18010 894 895Fix very old bug causing dashes to be rendered at the wrong length in 896fallback images (Adrian Johnson) 897 898 Dashed strokes too long in fallback images 899 https://bugs.freedesktop.org/show_bug.cgi?id=9189 900 901Fix broken dashing when a dashed path starts outside the clip region 902(Chris Wilson). 903 904Avoid range overflow when computing large patterns (Benjamin Otte and 905Chris Wilson). 906 907Avoid crashing due to an invalid font with an incorrect entry in its 908CMAP table (Adrian Johnson). 909 910Fix bugs in computing maximum size of text requests that can be sent 911with the Render extension, (avoiding potential crashes when rendering 912large amounts of text) (Behdad Esfahbod and Chris Wilson). 913 914Fix rendering of operators unbounded by the mask (Chris Wilson). 915 916Fix compilation on systems without compiler support for a native 91764-bit type (Chris Wilson). 918 919Fix several cases of missing error-status propagation. (Chris Wilson, 920doing the work he seems to never tire of). 921 922Fix several locking issues found with the lockdep valgrind skin (Chris 923Wilson). 924 925Backend-specific bug fixes 926-------------------------- 927xlib: Avoid crash due to attempting XRender calls on pixmaps with 928formats not supported by the Render extension (Chris Wilson): 929 930 XRender crashes due to NULL pointer from Cairo on SGI O2 931 https://bugs.freedesktop.org/show_bug.cgi?id=11734 932 933xlib: Add support for XImages with depth of 4, 20, 24, or 28 bits 934(Chris Wilson): 935 936 cairo doesn't support 24 bits per pixel mode on X11 937 https://bugs.freedesktop.org/show_bug.cgi?id=9102 938 939xlib: Avoid mistakenly considering two surfaces as similar just 940because their depths match (while their Render formats do not) (Karl 941Tomlinson). 942 943ps: Fix slight mis-scaling of bitmapped fonts (Adrian Johnson) 944 945svg: Correctly emit comp-op for paint, mask, and show_glyphs 946operations (Emmanuel Pacaud). 947 948svg: Use finer-grained fallbacks for SVG 1.2 (as PS and PDF backends 949have been doing since 1.6.0) (Chris Wilson). 950 951win32: Fallback to DIB if DDB create fails for 952cairo_surface_create_similar (Vladimir Vukicevic). 953 954win32: Fix compatibility with Windows Mobile (Vladimir Vukicevic). 955 956win32: Fix static builds to not do __declspec(dllimport) on public 957functions. This requires the user to set a CAIRO_WIN32_STATIC_BUILD 958environment variable when compiling (Behdad Esfahbod). 959 960Release 1.8.0 (2008-09-25 Carl Worth <cworth@cworth.org>) 961========================================================= 962The cairo community is happy (and relieved) to announce the 1.8.0 963release of the cairo graphics library. This is a major update to 964cairo, with new features and enhanced functionality which maintains 965compatibility for applications written using any previous major cairo 966release, (1.6, 1.4, 1.2, or 1.0). We recommend that anybody using a 967previous version of cairo upgrade to cairo 1.8.0. 968 969The dominant theme of this release is improvements to cairo's ability 970to handle text. The highlights include a new "user fonts" feature as 971well as a new cairo_show_text_glyphs API which allows glyphs to be 972embedded in PDF output along with their original text, (for searching, 973selection, and copy-and-paste). Another major feature is a revamp of 974cairo's build system making it much easier to build cairo on various 975platforms. 976 977See below for more details. 978 979User fonts 980---------- 981This new API allows the user of cairo API to provide drawings for 982glyphs in a font. A common use for this is implementing fonts in 983non-standard formats, like SVG fonts and Flash fonts. This API can 984also be used by applications to provide custom glyph shapes for fonts 985while still getting access to cairo's glyph caches. See 986test/user-font.c and test/user-font-proxy.c for usage examples. This 987is based on early work by Kristian Høgsberg. Thanks Kristian! 988 989This new API consists of the following functions (and corresponding 990_get functions): 991 992 cairo_user_font_face_create 993 994 cairo_user_font_face_set_init_func 995 cairo_user_font_face_set_render_glyph_func 996 cairo_user_font_face_set_text_to_glyphs_func 997 cairo_user_font_face_set_unicode_to_glyph_func 998 999An additional, new API is 1000 1001 cairo_scaled_font_text_to_glyphs 1002 1003We were previously reluctant to provide this function as 1004text-to-glyphs support in cairo was limited to "toy" font 1005functionality, not really interesting for real-world text 1006processing. However, with user fonts landing, this API is needed to 1007expose full access to how user fonts convert text to glyphs. This is 1008expected to be used by text toolkits like Pango, as well as "proxy" 1009user-font implementations. 1010 1011cairo_show_text_glyphs 1012---------------------- 1013This new API allows the caller of cairo to provide text data 1014corresponding to glyphs being drawn. The PDF backend implements this 1015new API so that complex text can be copied out of cairo's PDF output 1016correctly and reliably, (assuming the user of cairo calls 1017cairo_show_text_glyphs). The cairo_show_text_glyphs API is definitely 1018the most daunting API to debut in cairo. It is anticipated that pango 1019(and similar high-level text libraries) will be the primary users of 1020this API. In fact, pango 1.22 already uses cairo_show_text_glyphs. 1021Behdad was the architect and implementor of this effort. Thanks, 1022Behdad! 1023 1024The cairo_show_text_glyphs API includes the following new functions: 1025 1026 cairo_show_text_glyphs 1027 1028 cairo_glyph_allocate 1029 cairo_glyph_free 1030 1031 cairo_text_cluster_allocate 1032 cairo_text_cluster_free 1033 1034 cairo_surface_has_show_text_glyphs 1035 1036Build system revamp 1037------------------- 1038The primary goal of the revamp is to make the build system less 1039fragile, (particularly for non-Linux platforms). For example, now 1040people building on win32 will no longer need to maintain a 1041platform-specific list of files to be built. See the new README.win32 1042for details. Also, the .so file will now be installed with a different 1043naming scheme, (for example, 1.7.6 will install with a .10800 1044suffix). Many thanks to Behdad and his small army of helpers! 1045 1046Assorted API additions 1047---------------------- 1048For API completeness, several missing "getter" functions were added: 1049 1050 cairo_scaled_font_get_scale_matrix 1051 1052 cairo_surface_get_fallback_resolution 1053 1054 cairo_toy_font_face_create 1055 cairo_toy_font_face_get_family 1056 cairo_toy_font_face_get_slant 1057 cairo_toy_font_face_get_weight 1058 1059The new cairo_toy_font_face functions provide access to functionality 1060and settings provided by cairo_select_font_face(). Thanks Behdad! 1061 1062cairo-ps/cairo-pdf: More efficient output 1063----------------------------------------- 1064Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF 1065backends, as well making them generate much more compact output by 1066avoiding things like re-emitting the color or linestyle on every 1067drawing operation. Thanks Adrian! 1068 1069cairo-xlib: dithering 1070--------------------- 1071Dithering: Cairo now does simple dithering when rendering to legacy X 1072servers. This is most visible with 8-bit visuals. Thanks Behdad! 1073 1074cairo-xlib: Avoid rendering glyphs out of surface bounds 1075-------------------------------------------------------- 1076This seemingly harmless optimization exposed a bug in OpenOffice.org 3 1077versions where OO.o was passing bogus surface extents to cairo, 1078resulting in no text rendered in OO.o. Please contact your 1079distribution's OO.o maintainers if you see this bug and point them to 1080the following URL: 1081 1082 https://bugs.freedesktop.org/show_bug.cgi?id=16209 1083 1084cairo-xlib: Improved performance with X server without Render 1085------------------------------------------------------------- 1086Cairo now performs better on remote X servers that lack the Render 1087extension by being smarter about using X core protocol facilities 1088instead of falling back to doing all rendering on the client side. 1089 1090cairo-ft: respecting FC_FT_FACE 1091------------------------------- 1092Previously it was impossible to instruct cairo to do emboldening on a 1093font face object created from an FT_Face. Cairo now respects and uses 1094the FC_FT_FACE fontconfig pattern element, so emboldening can be 1095achieved by using cairo_ft_font_face_create_for_pattern() and a 1096carefully crafted pattern using FC_FT_FACE and FC_EMBOLDEN. Thanks 1097Behdad! 1098 1099cairo-directfb: backend improvements 1100------------------------------------ 1101The directfb backend, though still unsupported, has seen a good deal 1102of improvements. Thanks Vlad! 1103 1104Bug fixing and optimizations 1105---------------------------- 1106xlib: Faster bookkeeping (Karl Tomlinson) 1107 https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5 1108 1109PS: Fix gradients with non-constant alpha (Chris Wilson) 1110 1111Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod) 1112 http://bugs.freedesktop.org/show_bug.cgi?id=16819 1113 1114Countless other bugs have been fixed and optimizations made, many of 1115them thanks to Chris Wilson. Thanks Chris and others! 1116 1117Note also that the code that had been in cairo 1.7.x calling into 1118freetype's optional lcd_filter function was removed from cairo before 1119the 1.8.0 release. We do expect this code to come back in some form in 1120the future. 1121 1122Snapshot 1.7.6 (2008-09-17 Carl Worth <cworth@cworth.org>) 1123========================================================== 1124The cairo community is happy to announce the 1.7.6 snapshot of the 1125cairo graphics library. This is a "release candidate" for the upcoming 11261.8.0 release, so we will greatly appreciate any reports of problems 1127in this release, and no major changes are currently planned before 11281.8. 1129 1130Notable changes in 1.7.6 1131------------------------ 1132The largest number of changes since 1.7.4 did not change the 1133implementation of cairo itself, but instead revamped cairo's build 1134system. The primary goal of the revamp is to make the build system 1135less fragile, (particularly for non-Linux platforms). For example, now 1136people building on win32 will no longer need to maintain a 1137platform-specific list of files to be built. Also, the .so file will 1138now be installed with a different naming scheme, (for example, 1.7.6 1139will install with a .10706 suffix). Much thanks, Behdad! 1140 1141And, as usual, Chris Wilson has made another large round of robustness 1142improvements, (eliminating dead code, fixing propagation of error 1143status values, test suite improvements, etc. etc.). Thanks as always, 1144Chris! 1145 1146API changes since 1.7.4 1147----------------------- 1148There have been a few changes of API that was new during the 1.7 1149series: 1150 1151* Remove cairo_font_options_set_lcd_filter 1152 and cairo_font_options_get_lcd_filter 1153 1154 Motivation: At the Cairo Summit, this API was determined to be too 1155 specific to the freetype font backend to be in the general 1156 API. A similar API with a cairo_ft prefix might be introduced 1157 in the future. Note that cairo will still respect the 1158 corresponding fontconfig settings for these options. 1159 1160* Replace cairo_has_show_glyphs 1161 with cairo_surface_has_show_glyphs 1162 1163 Motivation: This really is a surface-specific interface, and the 1164 convenience function on the cairo_t is not obviously 1165 necessary. An application can easily call: 1166 1167 cairo_surface_has_show_glyphs (cairo_get_target (cr)); 1168 1169 as needed. 1170 1171* Add cairo_text_cluster_flags_t 1172 to cairo_show_text_glyphs 1173 cairo_scaled_font_text_to_glyphs 1174 cairo_user_scaled_font_text_to_glyphs_func_t 1175 1176 Motivation: This flag, (and specifically the 1177 CAIRO_TEXT_CLUSTER_FLAG_BACKWARD value), replaces the 1178 cairo_bool_t backward argument in each of the above 1179 interfaces. This leads to more readable user code, and also 1180 allows future extensibility. 1181 1182As always, there are no changes to any API from any major cairo 1183release, (1.0.x, 1.2.x, 1.4.x, 1.6.x). Cairo maintains the same 1184compatibility promise it always has. 1185 1186Bug fixes since 1.7.4 1187--------------------- 1188xlib: Faster bookkeeping (Karl Tomlinson) 1189 https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5 1190 1191PS: Fix gradients with non-constant alpha (Chris Wilson) 1192 1193Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod) 1194 http://bugs.freedesktop.org/show_bug.cgi?id=16819 1195 1196Several other minor fixes. 1197 1198Snapshot 1.7.4 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>) 1199=============================================================== 1200The cairo community is embarrassed to announce availability of the 1.7.4 1201snapshot of the cairo graphics library. This is a followup release to the 12021.7.2 snapshot to ship a tarball that can actually be built. The only 1203change since 1.7.4 is including the missing header file 1204cairo-user-font-private.h in the distribution. 1205 1206Snapshot 1.7.2 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>) 1207=============================================================== 1208The cairo community is finally ready to announce availability of the 1.7.2 1209snapshot of the cairo graphics library. This is embarrassingly the first 1210snapshot in the 1.7 unstable series of cairo, leading to the eventual release 1211of cairo 1.8, currently planned for late September. 1212 1213This snapshot comes four months after the 1.6.4 release. We have done a 1214really bad job on getting development snapshots out this cycle, but 1215hopefully all the API changes for 1.8 are now finished and the remaining 1216weeks will be spent on bug-fixing. There is more than 400 commits worth 1217of changes in this snapshot, and those can use some testing. Read on! 1218 1219Text, text, and more text! 1220-------------------------- 1221The dominant theme of this release, and 1.8 in general, is improvements 1222around cairo text API. Here is a high-level list of changes with text 1223handling: 1224 1225User fonts 1226---------- 1227This is new API allowing the user of cairo API to provide drawings for glyphs 1228in a font. This is most useful in implementing fonts in non-standard formats, 1229like SVG fonts and Flash fonts, but can also be used by games and other 1230applications to draw "funky" fonts. See test/user-font.c and 1231test/user-font-proxy.c for usage examples. This is based on early work by 1232Kristian Høgsberg. Thanks Kristian! 1233 1234show_text_glyphs 1235---------------- 1236This new API allows the caller of cairo to mark text glyphs with their 1237original text. The PDF backend implements this new API and latest Pango 1238master uses it. The result is (when bugs are fixed) that complex text can be 1239copied out of pangocairo's PDF output correctly and reliably. There are bugs 1240to fix though. A few poppler bugs, and some more in cairo and pango. 1241 1242To test show_text_glyph, just grab pango master and this cairo snapshot and 1243print text in gedit. Open in acroread or evince, select all, copy, paste 1244in gedit and compare. The Arabic text with diacritic marks is particularly 1245showing bad. Try with pango/pango-view/HELLO.txt if you are brave 1246enough. The Indic text is showing improvements, but is still coming out 1247buggy. 1248 1249LCD subpixel filtering using FreeType 1250------------------------------------- 1251FreeType 2.3.5 added support for various LCD subpixel filtering, and 1252fontconfig 2.6.0 added support for configuring LCD filter on a font by font 1253basis. Cairo now relies on FreeType and fontconfig for subpixel filtering. 1254This work is based on David Turner's original patch to cairo, maintained 1255and tested by Sylvain Pasche and others. Thanks all! 1256 1257Toy font face constructor and getter 1258------------------------------------ 1259Mostly for API completion, but also useful for higher level (like Pango) to 1260hook into what the user has set using cairo_select_font_face(), making that 1261toy API a bit more useful. 1262 1263FreeType: respecting FC_FT_FACE 1264------------------------------- 1265Previously it was impossible to instruct cairo to do emboldening on a font 1266face object created from an FT_Face. Cairo now respects and uses the 1267FC_FT_FACE fontconfig pattern element, so emboldening can be achieved by 1268using cairo_ft_font_face_create_for_pattern() and a carefully crafted pattern 1269using FC_FT_FACE and FC_EMBOLDEN. 1270 1271 1272PS/PDF: More efficient output 1273----------------------------- 1274Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF 1275backends, as well making them generate much more compact output by avoiding 1276things like re-emitting the color or linestyle on every drawing operation. 1277Thanks Adrian! 1278 1279 1280Xlib: Dithering 1281--------------- 1282Cairo now does simple dithering when rendering to legacy X servers. This is 1283mostly visible with 8-bit visuals. 1284 1285Xlib: Avoid rendering glyphs out of surface bounds 1286-------------------------------------------------- 1287This seemingly harmless change manifested a bug with OpenOffice.org 3 versions 1288where OO.o was passing bogus surface extents to cairo, resulting in no text 1289rendered in OO.o. Please contact your distro's OO.o maintainers if you see 1290this bug and point them to the following URL: 1291 1292 https://bugs.freedesktop.org/show_bug.cgi?id=16209 1293 1294Xlib: Improved performance with Xrender-less X servers 1295------------------------------------------------------ 1296Cairo now performs better on remote, Xrender-less X servers by being smarter 1297about using X core protocol facilities instead of falling back to doing all 1298rendering on the client side. 1299 1300 1301Directfb: backend improvements 1302------------------------------ 1303The directfb backend, though still unsupported, has seen a good deal of 1304improvements. Thanks Vlad! 1305 1306 1307Bug fixing and optimizations 1308---------------------------- 1309Countless bugs have been fixed and optimizations made, many of them thanks to 1310Chris Wilson. Thanks Chris! 1311 1312 1313API additions 1314------------- 1315 1316cairo_show_text_glyphs 1317 1318 This is a new text rendering API. Being a more advanced version of 1319 cairo_show_glyphs(), it is aimed for use by higher-level text toolkits like 1320 Pango, and enables better text extraction from output generated by backends 1321 like PDF and SVG. The PDF backend already implements it, and the upcoming 1322 Pango release will use it. 1323 1324 To make that API work, a bunch of other additions were made: 1325 1326cairo_glyph_allocate 1327cairo_glyph_free 1328cairo_text_cluster_t 1329cairo_text_cluster_allocate 1330cairo_text_cluster_free 1331cairo_surface_has_show_text_glyphs 1332 1333 1334cairo_user_font_face_create 1335 1336 This is the "user" font face constructor, accompanied by a variety of method 1337 signatures, getters, and setters for a callback-based font backend: 1338 1339CAIRO_FONT_TYPE_USER 1340cairo_user_scaled_font_init_func_t 1341cairo_user_scaled_font_render_glyph_func_t 1342cairo_user_scaled_font_text_to_glyphs_func_t 1343cairo_user_scaled_font_unicode_to_glyph_func_t 1344cairo_user_font_face_set_init_func 1345cairo_user_font_face_set_render_glyph_func 1346cairo_user_font_face_set_text_to_glyphs_func 1347cairo_user_font_face_set_unicode_to_glyph_func 1348cairo_user_font_face_get_init_func 1349cairo_user_font_face_get_render_glyph_func 1350cairo_user_font_face_get_text_to_glyphs_func 1351cairo_user_font_face_get_unicode_to_glyph_func 1352 1353 1354cairo_scaled_font_text_to_glyphs 1355 1356 We were previously reluctant to provide this function as text-to-glyphs 1357 support in cairo was limited to "toy" font functionality, not really 1358 interesting for real-world text processing. However, with user-fonts 1359 landing, this API is needed to expose full access to how user-fonts 1360 convert text to glyphs. This is expected to be used by text toolkits like 1361 Pango, as well as "proxy" user-font implementations. 1362 1363 1364cairo_lcd_filter_t 1365cairo_font_options_set_lcd_filter 1366cairo_font_options_get_lcd_filter 1367 1368 These add the possibility to choose between various available LCD subpixel 1369 filters. The available filter values are modeled after what FreeType 1370 provides. 1371 1372 1373cairo_toy_font_face_create 1374cairo_toy_font_face_get_family 1375cairo_toy_font_face_get_slant 1376cairo_toy_font_face_get_weight 1377 1378 These provide access to functionality and settings provided by 1379 cairo_select_font_face(). 1380 1381 1382cairo_scaled_font_get_scale_matrix 1383cairo_surface_get_fallback_resolution 1384 1385 For API completeness. 1386 1387 1388Various new values for cairo_status_t enum 1389 1390 1391Known issues: 1392 1393- Type3 fonts generated by cairo's PDF backend may show up in poppler/Evince 1394 in a different color than expected. This is fixed in poppler master branch. 1395 This mostly affects cairo user fonts. The test case test/user-font.c 1396 demonstrates this. 1397 1398- User fonts using other fonts in their rendering are currently embedded in 1399 PDF as fallback bitmap glyphs. This will be (hopefully) fixed before 1.8. 1400 The test case test/user-font-proxy.c demonstrates this. 1401 1402 1403Release 1.6.4 (2008-04-11 Carl Worth <cworth@cworth.org>) 1404========================================================= 1405The cairo community is wildly embarrassed to announce the 1.6.4 1406release of the cairo graphics library. This release reverts the xlib 1407locking change introduced in 1.6.4, (and the application crashes that 1408it caused). The community would be glad to sack its current release 1409manager and is accepting applications for someone who could do the job 1410with more discipline. 1411 1412Revert 'add missing locking in cairo-xlib' 1413------------------------------------------ 1414This change was introduced in cairo 1.6.2, but also introduced a bug 1415which causes many cairo-xlib applications to crash, (with a 1416segmentation fault inside of XSetClipMask). Instead of attempting 1417another fix for the broken fix, the change in 1.6.2 has been 1418reverted. The original bug which the change was addressing has been 1419present since at least cairo 1.4, so it is not expected that leaving 1420this bug unfixed will cause any new problems for applications moving 1421from cairo 1.4 to cairo 1.6. 1422 1423At this point, the code of cairo 1.6.4 differs from cairo 1.6.0 only 1424in the fix for the PostScript-printer crashes. 1425 1426Tweak build to avoid linking with g++ 1427------------------------------------- 1428Cairo 1.6.4 avoids a quirk in automake that was causing the cairo 1429library to be linked with g++ and linked against libstdc++ even when 1430only C source files were compiled for the library. 1431 1432Release 1.6.2 (2008-04-11 Carl Worth <cworth@cworth.org>) 1433========================================================= 1434The cairo community is pleased (but somewhat sheepish) to announce the 14351.6.2 release of the cairo graphics library. This is an update to 1436yesterday's 1.6.0 release with an important fix to prevent cairo's 1437PostScript output from crashing some printers. This release also 1438includes a locking fix for cairo's xlib backend to improve thread 1439safety. There are no changes beyond these two fixes. 1440 1441Fix for PostScript printer crash 1442-------------------------------- 1443Adrian Johnson discovered that cairo 1.6.0 was being a bit hard on 1444PostScript printers, by changing the font matrix very frequently. This 1445causes some PostScript interpreters to allocate new font objects every 1446few glyphs, eventually exhausting available resources. The fix 1447involves leaving translational components of the font matrix as zero, 1448so that the PostScript interpreter sees an identical font matrix 1449repeatedly, and can more easily share internal font object resources. 1450 1451This fix has been tested to resolve the bugs posted here, (for both 1452Xerox and Dell printers): 1453 1454 Printing some PDFs from evince is crashing our Xerox printer 1455 http://bugs.freedesktop.org/show_bug.cgi?id=15348 1456 1457 Cairo-generated postscript blocks Dell 5100cn 1458 http://bugs.freedesktop.org/show_bug.cgi?id=15445 1459 1460Add missing locking in cairo-xlib 1461--------------------------------- 1462Chris Wilson noticed that cairo 1.6.0 was manipulating an internal 1463cache of GC object within cairo's Xlib backend without proper 1464locking. The missing locking could cause failures for multi-threaded 1465applications. He fixed this in 1.6.2 by adding the missing locks. 1466 1467Release 1.6.0 (2008-04-10 Carl Worth <cworth@cworth.org>) 1468========================================================= 1469The cairo community is quite pleased to announce the 1.6.0 release of 1470the cairo graphics library. This is a major update to cairo, with new 1471features and enhanced functionality which maintains compatibility for 1472applications written using cairo 1.4, 1.2, or 1.0. We recommend that 1473anybody using a previous version of cairo upgrade to cairo 1.6.0. 1474 1475The most significant new features in this release are dramatically 1476improved PDF and PostScript[*] output, support for arbitrary X server 1477visuals (including PseudoColor), a new Quartz backend, and and a new 1478"win32 printing" backend. See below for more details on these and 1479other new features. 1480 1481New dependency on external pixman library (Thanks, Søren!) 1482---------------------------------------------------------- 1483As of cairo 1.6, cairo now depends on the pixman library, for which 1484the latest release can be obtained alongside cairo: 1485 1486 http://cairographics.org/releases/pixman-0.10.0.tar.gz 1487 1488This library provides all software rendering for cairo, (the 1489implementation of the image backend as well as any image fallbacks 1490required for other backends). This is the same code that was 1491previously included as part of cairo itself, but is now an external 1492library so that it can be shared by both cairo and by the X server, 1493(which is where the code originated). 1494 1495Improved PDF, PostScript, and SVG output (Thanks, Adrian!) 1496---------------------------------------------------------- 1497Users of the cairo-pdf, cairo-ps, and cairo-svg should see a dramatic 1498improvement from cairo 1.2/1.4 to 1.6. With this release there are now 1499almost no operations that will result in unnecessary rasterization in 1500the PDF and PostScript. Rasterized "image fallbacks" are restricted 1501only to minimal portions of the document where something is being 1502drawn with cairo that is beyond the native capabilities of the 1503document, (this is rare for PDF or SVG, but occurs when blending 1504translucent objects for PostScript). 1505 1506This means that the final output will be of higher quality, and will 1507also be much smaller, and therefore will print more quickly. The 1508machinery for doing analysis and minimal fallbacks also benefits the 1509win32-printing surface described below. 1510 1511In addition to doing less rasterization, the PostScript and PDF output 1512also has several other improvements to make the output more efficient 1513and more compatible with specifications. 1514 1515[*] Note: Just before this release, a bug has been reported that the 1516PostScript output from cairo can crash some printers, (so far the 1517following models have been reported as problematic Xerox Workcentre 15187228 or 7328 and Dell 5100cn). We will implement a workaround as soon 1519as we can learn exactly what in cairo's output these printers object 1520to, (and we could use help from users that have access to misbehaving 1521printers). This bug is being tracked here: 1522 1523 Printing some PDFs from evince is crashing our Xerox printer 1524 http://bugs.freedesktop.org/show_bug.cgi?id=15348 1525 1526New support for arbitrary X server visuals (Thanks, Keith and Behdad!) 1527---------------------------------------------------------------------- 1528As of cairo 1.6, cairo should now work with an arbitrary TrueColor or 15298-bit PseudoColor X server visual. Previous versions of cairo did not 1530support these X servers and refused to draw anything. We're pleased to 1531announce that this limitation has been lifted and people stuck with 1532ancient display systems need no longer be stuck with ancient software 1533just because of cairo. 1534 1535New, supported Quartz backend for Mac OS X (Thanks, Brian and Vladimir!) 1536------------------------------------------------------------------------ 1537As of cairo 1.6, the cairo-quartz backend is now marked as "supported" 1538rather than "experimental" as in previous cairo releases. Its API now 1539has guarantees of API stability into future cairo releases, and its 1540output quality is comparable to other backends. There have been 1541significant improvements to cairo-quartz since 1.4. It now uses many 1542fewer image fallbacks, (meaning better performance), and has greatly 1543improved text rendering. 1544 1545New, "win32 printing" backend (Thanks, Adrian and Vladimir!) 1546------------------------------------------------------------ 1547A new win32-printing surface has been added with an interface very 1548similar to the original win32 surface, (both accept an HDC 1549parameter). But this new surface should only be called with a printing 1550DC, and will result in all drawing commands being stored into a 1551meta-surface and emitted after each page is complete. This allows 1552cairo to analyze the contents, (as it does with PDF, PostScript, and 1553SVG backends), and to do minimal image-based fallbacks as 1554necessary. The analysis keeps things as efficient as possible, while 1555the presence of fallbacks, (when necessary), ensure the consistent, 1556high-quality output expected from cairo. 1557 1558Robustness fixes (Thanks, Chris!) 1559--------------------------------- 1560There has been a tremendous number of improvements to cairo's 1561robustness. Areas that have been improved include: 1562 1563 * Proper reporting of errors 1564 1565 * Responding correctly to invalid input 1566 1567 * Avoiding integer overflows 1568 1569 * Avoiding memory leaks on error-recovery paths 1570 1571 * Making reference counting thread safe 1572 1573 * Exhaustive testing of memory allocation points 1574 1575Other fixes (Thanks, everybody!) 1576-------------------------------- 1577Cairo's internal fixed-point representation has been changed from 157816.16 to 24.8. This has a direct impact on applications as it allows 1579much larger objects to be drawn before internal limits in cairo make 1580the drawing not work. 1581 1582The CAIRO_EXTEND_PAD mode is now fully supported by surface 1583patterns. This mode allows applications to use cairo_rectangle and 1584cairo_fill to draw scaled images with high-quality bilinear filtering 1585for the internal of the image, but without any objectionably blurry 1586edges, (as would happen with the default EXTEND_NONE and cairo_paint). 1587 1588Rendering with CAIRO_ANTIALIAS_NONE has been fixed to be more 1589predictable, (previously image rendering and geometry rendering would 1590be slightly misaligned with respect to each other). 1591 1592The reference manual at http://cairographics.org/manual now documents 1593100% of the functions and types in cairo's public API. 1594 1595API additions 1596------------- 1597Several small features have been added to cairo with new API functions: 1598 1599cairo_format_stride_for_width 1600 1601 Must be called to compute a properly aligned stride value before 1602 calling cairo_image_surface_create_for_data. 1603 1604cairo_has_current_point 1605 1606 Allows querying if there is a current point defined for the 1607 current path. 1608 1609cairo_path_extents 1610 1611 Allows querying for path extents, (independent of any fill or 1612 stroke parameters). 1613 1614cairo_surface_copy_page 1615cairo_surface_show_page 1616 1617 Allow beginning a new document page without requiring a cairo_t 1618 object. 1619 1620cairo_ps_surface_restrict_to_level 1621cairo_ps_get_levels 1622cairo_ps_level_to_string 1623cairo_ps_surface_set_eps 1624 1625 Allow controlling the Post PostScript level, (2 or 3), to 1626 target, as well as to generate Encapsulated PostScript (EPS). 1627 1628cairo_quartz_font_face_create_for_cgfont 1629 1630 Create a quartz-specific cairo_font_face_t from a CGFontRef. 1631 1632cairo_win32_font_face_create_for_logfontw_hfont 1633 1634 Create a win32-specific cairo_font_face from a LOGFONTW and an 1635 HFONT together. 1636 1637Thanks, Everyone! 1638----------------- 1639I've accounted for 32 distinct people with attributed code added to 1640cairo between 1.4.14 and 1.6.0, (their names are below). That's an 1641impressive number, but there are certainly dozens more that 1642contributed with testing, suggestions, clarifying questions, and 1643encouragement. I'm grateful for the friendships that have developed as 1644we have worked on cairo together. Thanks to everyone for making this 1645all so much fun! 1646 1647Adrian Johnson, Alp Toker, Antoine Azar, Behdad Esfahbod, 1648Benjamin Otte, Bernardo Innocenti, Bertram Felgenhauer, 1649Boying Lu, Brian Ewins, Carl Worth, Chris Heath, Chris Wilson, 1650Claudio Ciccani, Emmanuel Pacaud, Jeff Muizelaar, Jeremy Huddleston, 1651Jim Meyering, Jinghua Luo, Jody Goldberg, Jonathan Gramain, 1652Keith Packard, Ken Herron, Kouhei Sutou, Kristian Høgsberg, 1653Larry Ewing, Martin Ejdestig, Nis Martensen, Peter Weilbacher, 1654Richard Hult, Shailendra Jain, Søren Sandmann Pedersen, 1655Vladimir Vukicevic 1656 1657Snapshot 1.5.20 (2008-04-04 Carl Worth <cworth@cworth.org>) 1658=========================================================== 1659This is the tenth snapshot in cairo's unstable 1.5 series. It comes 1660just two days (and only one working day) after the 1.5.18 1661snapshot. The quick snapshot is due to two embarrassing bugs (both 1662affecting cairo-xlib) that had been introduced in the 1.5.18 1663snapshot. The fixes for these are described below along with a few 1664other fixes, (which hopefully aren't introducing new bugs this time). 1665 1666cairo-xlib 1667---------- 1668Revert fix from 1.5.18 to allow pattern expansion based on the filter 1669mode. This fix seemed so boring, (the use case it addresses is almost 1670never used in practice), that it didn't even get mentioned in the 16711.5.18 release notes. However, the "fix" happened to break rendering 1672that is always used resulting in corrupt image rendering in mozilla, 1673evolution, and probably everything else that uses cairo. 1674 1675Fix to avoid BadMatch errors in cairo_surface_create_similar. These 1676were introduced, (inadvertently, of course), as part of the fix in 16771.5.18 for creating similar surfaces without the Render 1678extension. Again, thanks to mozilla, (and Vladimir Vukicevic in 1679particular), for noticing our mistake. 1680 1681general 1682------- 1683Correctly handle an in-error surface in 1684cairo_surface_write_to_png. Previously this function would cause an 1685assertion failure if you gave it a finished surface. Now it cleanly 1686returns a CAIRO_STATUS_SURFACE_FINISHED result instead. 1687 1688Avoid potentially infinite wandering through memory inside 1689_cairo_hull_prev_valid. Thanks to Jonathan Watt for noticing this 1690problem: 1691 1692 https://bugzilla.mozilla.org/show_bug.cgi?id=306649#c21 1693 1694cairo-pdf 1695--------- 1696Fix generation of "soft" masks made by drawing to a similar surface 1697and then calling cairo_mask_surface() with it. 1698 1699cairo-svg 1700--------- 1701Fix for code that uses cairo_mask() on an intermediate surface which 1702is later passed to cairo_mask_surface(). 1703 1704Snapshot 1.5.18 (2008-04-05 Carl Worth <cworth@cworth.org>) 1705=========================================================== 1706This is the ninth snapshot in cairo's unstable 1.5 series. It comes 1707just 4 days after the 1.5.16 snapshot. We had hoped to not need 1708another snapshot before the final 1.6.0 release, but several critical 1709bugs were found and fixed in the last few days, so we thought it 1710important to let people test the fixes with this snapshot. See below 1711for details. 1712 1713documentation 1714------------- 1715The README now lists necessary dependencies. 1716 1717Various graphics state defaults are now documented, (source pattern is 1718opaque black, line width is 2.0, line join is miter, line cap is butt, 1719miter limit is 10.0, etc.). 1720 1721general 1722------- 1723Several cleanups have been made along many error-path returns, 1724(carefully propagating up the original error status values, cleaning 1725up memory leaks during error recovery, etc.). This is yet another in 1726Chris "ickle" Wilson's long series of error-handling cleanups during 1727the 1.5 series. 1728 1729Avoid undesired clipping when drawing scaled surface patterns with 1730bilinear filtering. 1731 1732cairo-pdf 1733--------- 1734Fix emission of 1-bit alpha masks in PDF output. 1735 1736Fix a bug that would cause glyphs to be misplaced along the Y axis: 1737 1738 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%23474136 1739 1740 Originally, an issue about a crash, but later leading to the 1741 misplaced glyphs issue being discovered. 1742 1743cairo-ps 1744-------- 1745Fix misplaced glyphs in cairo's PostScript output. 1746 1747 This issue occurs when consecutive glyphs are placed far 1748 apart. This case is exercised by the new ft-show-glyphs-table test 1749 case, which was originally inspired by the Debian bug #23474136 1750 mentioned above. 1751 1752Fix more misplaced glyphs in cairo's PostScript output: 1753 1754 The issue here showed up under very particular circumstance, (when 1755 converting a PDF file with a CFF font with CID Identity-H encoding 1756 and using glyph 0, (defined by the CFF specification as .notdef) 1757 as a space instead). More concretely, this problem appeared when 1758 converting the UbuntuDesktop.pdf file mentioned in this bug 1759 report: 1760 1761 https://bugs.freedesktop.org/show_bug.cgi?id=15348#c3 1762 1763 As usual with arcane font-encoding-specific bugs like this, many 1764 thanks to Adrian Johnson for his magical ability to dive into 1765 specifications and emerge almost instantaneously with fixes. And 1766 thanks to Sebastien Bacher for bringing the bug to our attention. 1767 1768cairo-xlib 1769---------- 1770Fix serious failure on X servers without the Render extension. 1771 1772 Since the 1.5.14 snapshot (with support for PseudoColor visuals), 1773 any application attempting to create a "similar" xlib surface would 1774 fail on an X server without the Render extension. Thanks to 1775 Frederic Crozat for pointing out that cairo's test suite was 1776 entirely failing when run against Xvfb. 1777 1778Avoid crashing cairo-xlib applications for too-large glyphs 1779 1780 Naively sending glyphs of any size to the X server will eventually 1781 violate the X limit on maximum request sizes. We now properly 1782 detect when a glyph would be too large and use existing fallbacks 1783 to render the glyph rather than trying to send it to the X server. 1784 1785Enable the buggy_repeat workaround for Xorg servers < 1.4 1786 1787 We have determined that Xorg 1.3.0 (as packaged in Fedora 8 at 1788 least) has a bug that can result in an X server crash when cairo 1789 uses certain X Render repeat operations, (as exercised by cairo's 1790 extend-reflect test). We avoid this crash by using fallbacks 1791 whenever a repeating surface is needed for any Xorg server with a 1792 version less than 1.4. This is slower, but should prevent the 1793 crash. 1794 1795 (Meanwhile, there appears to be a separate bug where some X 1796 servers or specific X-server drivers will use random pixmap data 1797 when asked to draw a repeating surface. The buggy_repeat 1798 workaround would also avoid those problems, but we have not yet 1799 characterized whether the new "version < 1.4" is a good 1800 characterization of those problems or not.) 1801 1802cairo-quartz-font 1803----------------- 1804Implement cairo_font_extents for this backend. 1805 1806The cairo-quartz-font implementation added in the 1.5.14 snapshot was 1807entirely missing support for the cairo_font_extents function. Thanks to 1808Richard Hult for pointing out this obvious shortcoming, (and obvious 1809lack of coverage in our test suite): 1810 1811 CGFont backend returns 0 font extents 1812 https://bugs.freedesktop.org/show_bug.cgi?id=15319 1813 1814Snapshot 1.5.16 (2008-04-01 Carl Worth <cworth@cworth.org>) 1815=========================================================== 1816This is the eighth snapshot in cairo's unstable 1.5 series. It comes 1817less than two weeks after the 1.5.14 snapshot and it really is a 1818legitimate snapshot, (in spite of sharing this date with that of many 1819bogus announcements). The major change in this snapshot is that the 1820cairo-quartz backend is now officially "supported", including new API 1821to construct a font face from a CGFontRef . Also several bug fixes 1822have been fixed in many backends. See below for details. 1823 1824general 1825------- 1826Cairo now depends on pixman 0.10.0 which was recently released. The 1827latest pixman release can always be found alongside cairo releases at: 1828 1829 http://cairographics.org/releases 1830 1831Increase the precision of color stops for gradients. This fixes a 1832regression in gradient rendering that had been present since the 18331.5.12 snapshot. 1834 1835paginated (all of ps, pdf, svg, and win32-printing) 1836--------------------------------------------------- 1837Fix assertion failure when some drawing elements are outside the page 1838boundaries, (this bug was noticed when using Inkscape to print a 1839drawing with landscape orientation to a portrait-oriented piece of 1840paper). 1841 1842cairo-ps 1843-------- 1844Fix of bug causing incorrect glyph positioning. 1845 1846Fix handling of CAIRO_OPERATOR_SOURCE. 1847 1848cairo-pdf 1849--------- 1850More reduction of unnecessary digits of precision in PDF output. 1851 1852Fix handling of CAIRO_OPERATOR_SOURCE. 1853 1854cairo-svg 1855--------- 1856Fix bug in usage of libpng that was preventing cairo_mask from working 1857with the svg backend. 1858 1859Fix transformation of source pattern for cairo_stroke(). 1860 1861cairo-win32-printing 1862-------------------- 1863Fix fallback resolution, (thanks again to inkscape users/developers 1864for helping us find this one). 1865 1866cairo-quartz 1867------------ 1868Mark the cairo-quartz backend as "supported" rather than 1869"experimental". This means the following: 1870 1871 * The backend will now be built by default (if possible). 1872 1873 * We are committing that the backend-specific API (as published in 1874 cairo-quartz.h) are stable and will be supported in all future 1875 cairo 1.x releases. 1876 1877 * We are committing that the output quality of this backend 1878 compares favorably with other cairo backends, (and that quality 1879 is ensured by good results from the cairo test suite). 1880 1881 * We recommend that distributions build and distribute this 1882 backend when possible. 1883 1884Note that the cairo_quartz_image API (in cairo-quartz-image.h) is 1885still experimental, will not build by default, (pass 1886--enable-quartz-image to configure to build it), and may see API 1887changes before it is marked as "supported" in a future release. 1888 1889Put the CAIRO_FONT_TYPE_ATSUI name back into 1890cairo-deprecated.h. Without this, the cairo 1.5.14 snapshot broke all 1891builds for applications using the C++ cairomm bindings (and perhaps 1892others) which have the CAIRO_FONT_TYPE_ATSUI name in their header 1893files. This breakage happened even for applications not using 1894cairo-quartz at all. 1895 1896 Note: Even though the CAIRO_FONT_TYPE_ATSUI name is provided to 1897 avoid this build breakage, we still recommend that bindings and 1898 applications move to the new, and more accurate, 1899 CAIRO_FONT_TYPE_QUARTZ name. 1900 1901Replace the implementation of cairo-quartz-font to use CFFont instead 1902of ATSUI. The CGFont API is a better fit than ATSUI, and this new 1903implementation is also more correct than the old one as well. 1904 1905This also adds the following new API call: 1906 1907 cairo_public cairo_font_face_t * 1908 cairo_quartz_font_face_create_for_cgfont (CGFontRef font); 1909 1910The previous cairo_quartz_font_face_create_for_atsu_font_id function 1911continues to exist and is part of the supported API going 1912forward. (However, the old name of that same function, which was 1913cairo_atsui_font_face_create_for_atsu_font_id is officially 1914deprecated. Any source code using the old name should be updated to 1915use the new name.) 1916 1917Fix transformation of source pattern for cairo_stroke(). 1918 1919cairo-win32 1920----------- 1921Avoid crash in create_similar is cairo_win32_surface_create fails. 1922 1923Snapshot 1.5.14 (2008-03-20 Carl Worth <cworth@cworth.org>) 1924=========================================================== 1925This is the seventh snapshot in cairo's unstable 1.5 series. It comes 19263 weeks after the 1.5.12 snapshot. This snapshot includes support for 1927arbitrary X server visuals, (including PseudoColor), which was the 1928final remaining cairo-specific item on the cairo 1.6 roadmap. It also 1929includes a huge number of improvements to the cairo-quartz backend. So 1930this is effectively a cairo 1.6 release candidate. We expect very few 1931changes from now until 1.6 and only for specific bug fixes. 1932 1933API Change 1934---------- 1935Rename ATSUI font backend to Quartz font backend. This affects the 1936following usage: 1937 1938 --enable-atsui -> --enable-quartz-font 1939 CAIRO_HAS_ATSUI_FONT -> CAIRO_HAS_QUARTZ_FONT 1940 CAIRO_FONT_TYPE_ATSUI -> CAIRO_FONT_TYPE_QUARTZ 1941 1942 cairo_atsui_font_face_create_for_atsu_font_id -> 1943 cairo_quartz_font_font_create_for_atsu_font_id 1944 1945This API change is justified by the cairo-quartz backend still be 1946marked as "experimental" rather than "supported", (though this is one 1947step toward making the change to "supported" before 1.6). Cairo will 1948still provide ABI compatibility with the old symbol name, however. 1949 1950paginated (all of ps, pdf, svg, and win32-printing) 1951--------------------------------------------------- 1952Optimize by not analyzing an image surface for transparency more than 1953once, (previously all images were analyzed twice). 1954 1955cairo-ps and cairo-pdf 1956---------------------- 1957Avoiding emitting a matrix into the stroke output when unnecessary, 1958(making output size more efficient). 1959 1960Reduce rounding error of path shapes by factoring large scale factors 1961out of the path matrix, (ensuring that a fixed-number of printed 1962digits for path coordinates contains as much information as possible). 1963 1964Reduce excess digits for text position coordinates. This makes the 1965output file size much smaller without making the result any less 1966correct. 1967 1968cairo-ps 1969-------- 1970Eliminate bug causing extraneous text repetition on Linux PostScript 1971output in some cases. 1972 1973 See: Mozilla Bug 419917 – Printed page contents are reflected 1974 inside bordered tables (Linux-only) 1975 1976 https://bugzilla.mozilla.org/show_bug.cgi?id=419917 1977 1978Optimize output when EXTEND_PAD is used. 1979 1980cairo-pdf 1981--------- 1982Fix to not use fill-stroke operator with transparent fill, (else PDF 1983output doesn't match the cairo-defined correct result). See: 1984 1985 https://bugs.launchpad.net/inkscape/+bug/202096 1986 1987cairo-svg 1988--------- 1989Fix stroke of path with a non-solid-color source pattern: 1990 1991 http://bugs.freedesktop.org/show_bug.cgi?id=14556 1992 1993cairo-quartz 1994------------ 1995Fix text rendering with gradient or image source pattern. 1996 1997Handling antialiasing correctly for cairo_stroke(), cairo_clip(), and 1998cairo_show_text()/cairo_show_glyphs(). 1999 2000Correctly handle gradients with non-identity transformations: 2001 2002 Fixes http://bugs.freedesktop.org/show_bug.cgi?id=14248 2003 2004Add native implementation of REPEAT and REFLECT extend modes for 2005gradients. 2006 2007Fix implementation for the "unbounded" operators, (CAIRO_OPERATOR_OUT, 2008_IN, _DEST_IN, and _DEST_ATOP). 2009 2010Correctly handle endiannees in multi-architecture compiles on Mac OS 2011X. 2012 2013Avoid behavior which would cause Core Graphics to print warnings to 2014the console in some cases. 2015 2016cairo-win32 2017----------- 2018Fix handling of miter limit. 2019 2020cairo-win32-printing 2021-------------------- 2022Fix to not use a 1bpp temporary surface in some cases while printing, 2023(so grayscale data is preserved rather than just becoming black and 2024white). 2025 2026cairo-xlib 2027---------- 2028Add support for rendering to arbitrary TrueColor X server 2029visuals. This fixes at least the following bugs: 2030 2031 cairo doesn't support 8-bit truecolor visuals 2032 https://bugs.freedesktop.org/show_bug.cgi?id=7735 2033 2034 cairo doesn't support 655 xlib format 2035 https://bugs.freedesktop.org/show_bug.cgi?id=9719 2036 2037Add support for rendering to 8-bit PseudoColor X server visuals. This 2038fixes the following bug: 2039 2040 Cairo doesn't support 8-bit pseudocolor visuals 2041 https://bugs.freedesktop.org/show_bug.cgi?id=4945 2042 2043Snapshot 1.5.12 (2008-02-28 Carl Worth <cworth@cworth.org>) 2044=========================================================== 2045This is the sixth snapshot in cairo's unstable 1.5 series. It comes 1 2046week after the 1.5.10 snapshot. This snapshot includes the 2047long-awaited change from 16.16 to 24.8 fixed-point values, (see below 2048for why you should care). It also includes several backend-specific 2049bug fixes. 2050 205124.8 fixed-point format 2052----------------------- 2053Cairo has always converted path coordinates to a fixed-point 2054representation very early in its processing. Historically, this has 2055been a 32-bit representation with 16 bits of integer for the 2056device-pixel grid and 16 bits of sub-pixel positioning. The choice of 205716 bits for the integer coordinate space was based on the 16-bit limit 2058for X Window drawables. 2059 2060This 16-bit limit has proven problematic for many applications. It's 2061an especially vexing problem when targeting non-X backends that don't 2062have any 16-bit restriction. But even when targeting cairo-xlib, it's 2063often desirable to draw a large shape, (say a background rectangle), 2064that extends beyond the surface bounds and expect it to fill the 2065surface completely, (rather than overflowing and triggering random 2066behavior). 2067 2068Meanwhile, nobody has ever really needed 16 bits of sub-pixel 2069precision. 2070 2071With this snapshot, the fixed-point system is still in place and is 2072still using a 32-bit representation, (future versions of cairo might 2073move entirely to floating-point when targeting PDF output for 2074example). But the representation now provides 24 bits of pixel 2075addressing and only 8 bits of sub-pixel positioning. This should give 2076a much less stifling space to many applications. 2077 2078However, the underlying pixman library still has 16-bit limitations in 2079many places, (it has its roots in the X server as well). Until those 2080are also fixed, applications targeting cairo image surfaces, or 2081hitting software fallbacks when targeting other surfaces will still 2082encounter problems with device-space values needing more than 16 2083integer bits. 2084 2085generic fixes 2086------------- 2087Add a few tests to the test suite to increase coverage. 2088 2089Cleanup a few error-handling paths, (propagate error correctly). 2090 2091cairo-ft 2092-------- 2093Fix handling of font sizes smaller than 1 device pixel. 2094 2095cairo-pdf 2096--------- 2097Fix to properly save/restore clip when analyzing meta-surface 2098patterns, (fixing a couple of test-suite failures). 2099 2100Implement native support for CAIRO_OPERATOR_SOURCE when the source 2101pattern is opaque. 2102 2103Emit rectangles as PDF rectangles ("re" operator) rather than as 2104general paths. 2105 2106cairo-ps 2107-------- 2108Fix to work properly with the 16.16->24.8 change. 2109 2110cairo-svg 2111--------- 2112Fix CAIRO_EXTEND_REFLECT by using an image fallback, (there's no 2113direct SVG support for reflected patterns). 2114 2115Fix the use of alpha-only masks, (such as CAIRO_FORMAT_A8). 2116 2117cairo-quartz 2118------------ 2119Add new API for efficiently using image data as a source: 2120 2121 cairo_surface_t * 2122 cairo_quartz_image_surface_create (cairo_surface_t *image_surface); 2123 2124 cairo_surface_t * 2125 cairo_quartz_image_surface_get_image (cairo_surface_t *surface); 2126 2127For full documentation, see: 2128 2129 http://cairographics.org/manual/cairo-Quartz-Surfaces.html#cairo-quartz-image-surface-create 2130 2131Several fixes for cairo_mask(). 2132 2133cairo-atsui 2134----------- 2135Change default from from Monaco to Helvetica to be more consistent 2136with other font backends. 2137 2138Snapshot 1.5.10 (2008-02-20 Carl Worth <cworth@cworth.org>) 2139=========================================================== 2140This is the fifth snapshot in cairo's unstable 1.5 series. It comes 3 2141weeks after the 1.5.8 snapshot. This snapshot adds one new API 2142function, (cairo_has_current_point), and the usual mix of 2143improvements, (more efficient PostScript/PDF output, optimized 2144stroking), and fixes (more robust error-handling, etc.). See below for 2145details. 2146 2147New API 2148------- 2149Add a new function to query if there is a current point: 2150 2151 cairo_bool_t 2152 cairo_has_current_point (cairo_t *cr); 2153 2154There is no current point immediately after cairo_create(), nor after 2155cairo_new_path() or cairo_new_sub_path(). There is a current point 2156after any of the path-creation functions, (cairo_move_to, 2157cairo_line_to, cairo_curve_to, etc.). 2158 2159With this new function, we also revert the change of the return type 2160of cairo_get_current_point from cairo 1.5.8, (it's now a void function 2161again). 2162 2163Optimizations 2164------------- 2165Optimize stroking code to avoid repeated calculation of redundant 2166values, (particularly significant for very large, offscreen paths). 2167 2168General fixes 2169------------- 2170Patch a few more potential buffer overruns, (due to integer 2171overflow). 2172 2173Many fixes and improvements to cairo's error-handling, (ensure that 2174correct error values are returned, clean up memory leaks on 2175error-handling paths, etc.). 2176 2177Fix a potential infinite loop when stroking a spline with a pen that 2178has been transformed to a line segment. 2179 2180Remove treating NULL as a synonym for a valid cairo_font_options_t* 2181with default values, (a change that had been introduced as of cairo 21821.5.8). 2183 2184Remove the altered handling of tolerance and fallback-resolution that 2185had been introduced as of cairo 1.5.4. 2186 2187cairo-xlib 2188---------- 2189Pass the original Drawable, (as opposed to the root window), to 2190XCreatePixmap when creating a similar surface. This gives the X server 2191more information so that it can be clever and efficient. 2192 2193cairo-pdf 2194--------- 2195Fix the rendering of repeating and reflecting patterns. 2196 2197Ensure miter limit is always >= 1, (smaller limits are not meaningful, 2198but they can cause some PDF viewers to fail to display pages). 2199 2200Generate more efficient output when the same path is used for both 2201fill and stroke. 2202 2203cairo-ps 2204-------- 2205Start sharing much of the cairo-pdf code rather than implementing very 2206similar code in cairo-ps. 2207 2208Implement native support for repeating and reflecting linear 2209gradients. 2210 2211Implement reflected surface patterns. 2212 2213Ensure miter limit is always >= 1, (smaller limits are not meaningful, 2214but they can cause some PostScript viewers to crash). 2215 2216Generate PostScript that will perform more efficiently and use less 2217memory on printers, (use currentfile instead of a giant string array 2218for image data, and avoid using PostScript patterns for paint() and 2219fill() when possible). 2220 2221cairo-svg 2222--------- 2223Avoid unnecessary rasterization when copying a "similar" surface to 2224another svg surface, (allow the SOURCE operator to be implemented with 2225all-vector operations if there are no underlying objects). 2226 2227cairo-atsui 2228----------- 2229Eliminate infinite loop when attempting to render an empty string. 2230 2231Snapshot 1.5.8 (2008-01-30 Carl Worth <cworth@cworth.org>) 2232========================================================== 2233This is the fourth snapshot in cairo's unstable 1.5 series. It comes 2 2234weeks after the 1.5.6 snapshot. It adds a few new API functions. Most 2235notably all callers of cairo_image_surface_create_for_data should now 2236be calling cairo_format_stride_for_width to compute a legal stride 2237value. See below for more details. 2238 2239New API in cairo 1.5.8 2240---------------------- 2241We've added a new function that should be called to compute a legal 2242stride value before allocating data to be used with 2243cairo_image_surface_create_for_data: 2244 2245 int 2246 cairo_format_stride_for_width (cairo_format_t format, 2247 int width); 2248 2249We've also added a new cairo_path_extents function that can be used to 2250compute a bounding box for geometry such as a single line segment, 2251(contrast with cairo_path_extents and cairo_stroke_extents): 2252 2253 void 2254 cairo_path_extents (cairo_t *cr, 2255 double *x1, double *y1, 2256 double *x2, double *y2); 2257 2258And finally, we've added a function to allow for querying the 2259XRenderPictFormat of a cairo-xlib surface: 2260 2261 XRenderPictFormat * 2262 cairo_xlib_surface_get_xrender_format (cairo_surface_t *surface); 2263 2264API changes 2265----------- 2266Fix return types of cairo_surface_show_page and 2267cairo_surface_copy_page. This is an API change to functions that are 2268new in the 1.5 series, so not an API break compared to any stable 2269cairo release, (1.0.x, 1.2.x, 1.4.x). 2270 2271Change the return type of cairo_get_current_point() from void to 2272cairo_status_t. This allows the caller to receive a 2273CAIRO_STATUS_NO_CURRENT_POINT value to distinguish the a current point 2274at the origin from no current point existing. 2275 2276Performance improvement 2277----------------------- 2278Improve performance of clipping by using an optimized code path 2279internally, (with the ADD operator instead of IN). 2280 2281General bug fixes 2282----------------- 2283Fix various cairo_*_extents functions to initialize the return-value 2284variables even in the case of a cairo_t in error. 2285 2286Treat NULL as a legitimate value for cairo_font_options_t*. [NOTE: 2287On discussion afterwards, we decided against this change so it has 2288been removed as of cairo 1.5.10.] 2289 2290Fix rendering with CAIRO_ANTIALIAS_NONE to be more predictable, (that 2291is, to avoid seams appearing when geometry and imagery share an 2292identical edge). Portions of this fix are in the pixman library and 2293will appear in a future release of that library. 2294 2295Avoid triggering an error for a font size of 0. 2296 2297Miscellaneous changes 2298--------------------- 2299Require pixman >= 0.9.6. 2300 2301There has been a tremendous amount improvement to cairo's 2302documentation. We're delighted that 100% of the public API has at 2303least some documentation in the API reference manual. Many thanks to 2304Behdad Esfahbod and Nis Martensen for leading this effort. 2305 2306cairo-pdf and cairo-ps 2307---------------------- 2308Eliminate failure when a Type 1 font is embedded with an explicit 2309glyph 0. 2310 2311cairo-pdf 2312--------- 2313Implement a more correct and more efficient approach for patterns with 2314an extend mode of CAIRO_EXTEND_REFLECT. 2315 2316cairo-ps 2317-------- 2318Fix image masks to properly pack and pad mask bits. 2319 2320cairo-quartz 2321------------ 2322Take care to only use DrawTiledImage for integer-aligned images, (and 2323use slower paths to get the correct result in other cases). 2324 2325cairo-win32 2326----------- 2327Fix for older versions of mingw. 2328 2329Improve the handling of the clipping with the win32 and win32-printing 2330surfaces. 2331 2332Fix rendering of non black/white text. 2333 2334Snapshot 1.5.6 (2008-01-15 Carl Worth <cworth@cworth.org>) 2335========================================================== 2336This is the third snapshot in cairo's unstable 1.5 series. It comes 2337about 6 weeks after the 1.5.4 snapshot. The only API addition compared 2338to 1.5.4 is very minor, (a new value CAIRO_STATUS_TEMP_FILE_ERROR). 2339The remainder of the changes are the usual accumulation of bug fixes 2340and improvements. See below for details. 2341 2342General bug fixes 2343----------------- 2344Fix handling of fonts that contain a mixture of outline and bitmapped 2345glyphs. There was a change in this handling in 1.5.4 that improved 2346some cases and also regressed other cases. Now, all cases should be 2347handled quite well. 2348 2349Fix alignment issues that were causing SIGBUS failures on SPARC. 2350 2351Fix a regression (which first appeared in 1.5.2) where stroking under 2352a large scale would sometimes incorrectly replace a miter join with a 2353bevel join. (Thanks to Keith Packard.) 2354 2355Fix reporting of zero-sized extents to be {0,0} rather than 2356{INT_MAX,INT_MIN}. This avoids several integer overflow and 2357allocations of massive regions in some cases. 2358 2359Fix failures of gradients with no stops, (quartz, ps, and pdf). 2360 2361Fix handling of Type 1 fonts on Windows platforms. 2362 2363Fix handling of Type 1 fonts with no specific family name in the font 2364itself, (generate a CairoFont-x-y name). 2365 2366Handle NULL string values in cairo_show_text, cairo_show_glyphs, and 2367friends. 2368 2369Many robustness improvements along error-handling paths, (thanks as 2370always, to Chris "ickle" Wilson). 2371 2372Various other minor fixes. 2373 2374Paginated backends (PDF/PostScript/win32-printing) 2375-------------------------------------------------- 2376Avoid unnecessary rasterization when using a paginated surface as a 2377source, (such as drawing from one pdf surface to another). 2378 2379Fix replaying of paginated surface with more than one level of push/pop 2380group. 2381 2382cairo-xlib 2383---------- 2384Fix xlib backend to not consider recent X server release as having a 2385buggy repeat implementation in the Render extension. 2386 2387cairo-pdf 2388--------- 2389Fix PDF output to avoid triggering very slow rendering in PDF viewers, 2390(avoid starting and stopping the content stream for each pattern 2391emission). 2392 2393Support CAIRO_OPERATOR_SOURCE in cases where there is nothing below 2394the object being drawn. 2395 2396Fix to avoid seams appearing between multiple fallback regions. 2397 2398cairo-ps (PostScript) 2399--------------------- 2400Use correct bounding box in Type 3 fonts. 2401 2402Fix several bugs in cairo's PostScript output. These include making 2403the PostScript output more compatible with recent versions of 2404ghostscript that are more strict about Type 3 fonts, for 2405example. 2406 2407Fix for win32 to not attempt to create temporary files in the root 2408directory, (where the user may not have write permission). 2409 2410Avoid generating Level 3 PostScript if Level 2 is sufficient. Also, 2411add code in output documents to alert the user if Level 3 PostScript 2412is handed to a device that cannot handle PostScript beyond Level 24132. 2414 2415cairo-directfb 2416-------------- 2417Various performance optimizations. 2418 2419Fixed support for small surfaces (less than 8x8). 2420 2421Provide support for environment variables CAIRO_DIRECTFB_NO_ACCEL to 2422disable acceleration and CAIRO_DIRECTFB_ARGB_FONT to enable ARGB fonts 2423instead of A8. 2424 2425cairo-os2 2426--------- 2427Allow OS/2 APIs instead of C library allocation functions. 2428 2429Snapshot 1.5.4 (2007-12-05 Carl Worth <cworth@cworth.org>) 2430========================================================== 2431This is the second snapshot in cairo's unstable 1.5 series. It comes 2432just over 1 month after the 1.5.2 snapshot. There are no API changes 2433or additions in 1.5.4 compared to 1.5.2, but there are several bug 2434fixes, and some optimizations. Most of these apply to particular 2435backends. See below for details. 2436 2437General improvements 2438-------------------- 2439Use less memory for spline approximation calculations. 2440 2441Change how the tolerance value is interpreted with regard to 2442fallback-resolution. [Note: On further discussion, we decided against 2443this change for now. It is removed as of cairo 1.5.10.] 2444 2445Fix precision of floating-point values in vector-output backends to 2446avoid rounding errors with very small numbers. 2447 2448Xlib improvements 2449----------------- 2450Fix bug in glyph rendering with xlib, (due to everything being clipped 2451out). This was a regression in the 1.5.2 snapshot that was visible in 2452the GIMP, for example. See: 2453 2454 cairo 1.5.2 causes font problems in GIMP 2.4 status bar and evolution 2.12.1 2455 https://bugs.freedesktop.org/show_bug.cgi?id=13084 2456 2457PostScript improvements 2458----------------------- 2459Fix bug leading to invalid PostScript files when rendering 2460text, (need "0 0 xyshow" instead of "0 xyshow"). 2461 2462Fix many issues with Type 3 fonts, including making the resulting text 2463extractable. 2464 2465Quartz improvements 2466------------------- 2467Fix font metrics height value for ATSUI, (helps webkit on GTK+ OS X 2468layout nicely). 2469 2470Fix gradients. 2471 2472Fix EXTEND_NONE mode for patterns. 2473 2474Fix cairo_quartz_surface_create to properly clear the new surface 2475in cairo_quartz_surface_create. 2476 2477Fix to correctly handle 0x0 sized surfaces. 2478 2479Optimize drawing of EXTEND_REPEAT patterns for OS X 10.5. 2480 2481Snapshot 1.5.2 (2007-10-30 Carl Worth <cworth@cworth.org>) 2482========================================================== 2483This is the first snapshot in cairo's unstable 1.5 series. It comes 4 2484months after the 1.4.10 release. This snapshot includes significant 2485improvements to PDF and PostScript output, which is one of the things 2486in which we're most interested in getting feedback. There are a couple 2487of minor API additions, and several optimizations, (primarily in the 2488"print/vector" backends). And there are dozens of bug fixes and 2489robustness improvements. 2490 2491New dependency on external pixman library 2492----------------------------------------- 2493A significant change in this snapshot compared to all previous cairo 2494releases is that cairo now depends on an external "pixman" library for 2495its software rendering. Previously this same code was compiled 2496internally as part of cairo, but now the code is separate so that both 2497cairo and the X server can now share common code, (thanks very much to 2498Søren Sandmann for his work on separating pixman and maintaining it). 2499 2500So users will need to acquire and build pixman before being able to 2501build cairo. The current release is 0.9.6 and can be obtained from 2502here: 2503 2504 http://cairographics.org/releases/pixman-0.9.6.tar.gz 2505 2506 which can be verified with: 2507 2508 http://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1 2509 66f01a682c64403a3d7a855ba5aa609ed93bcb9e pixman-0.9.6.tar.gz 2510 2511 http://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1.asc 2512 (signed by Carl Worth) 2513 2514Major PDF/PostScript improvements 2515--------------------------------- 2516Adrian Johnson has done some long-awaited work to make cairo's PDF and 2517PostScript output more interesting than ever before. First, many 2518operations that previously triggered image fallbacks will now be 2519rendered as native vectors. These operations include: 2520 2521 PDF: cairo_push_group, cairo_surface_create_similar, 2522 cairo_mask, A8/A1 surface sources, repeating/reflecting linear 2523 gradients. 2524 2525 PostScript: cairo_push_group, cairo_surface_create_similar, 2526 gradients, bilevel alpha masks, (for example, all values either 0 or 2527 255 for an A8 mask). 2528 2529Not only that, but when an image fallback is required, it will now be 2530limited to only the necessary region. For example, a tiny translucent 2531image overlaying a small portion of text would previously caused an 2532entire PostScript page to be rendered as a giant image. Now, the 2533majority of that page will be nice text, and there will only be a tiny 2534image in the output. 2535 2536Additionally, the PostScript output now carefully encodes text so that 2537if it is subsequently converted to PDF, the text will be 2538selectable. 2539 2540This is very exciting progress, and we're hoping to hear from users 2541during the 1.5 series about how things have improved, (for example, 2542inkscape users doing cairo-based PDF export: please let us know how 2543things look). And feel free to pass your thanks along to Adrian for his excellent work. 2544 2545NOTE: This much improved PDF output makes more sophisticated use of 2546functionality in the PDF specification. This means that cairo's output 2547will sometimes expose bugs in some free software PDF viewers, (evince, 2548poppler, and xpdf, for example), that are not yet ready for such PDF 2549files. We're working with the poppler maintainers to get these bugs 2550fixed as quickly as possible. In the meantime, please double-check 2551with other PDF viewers if cairo-generated PDF files are not being 2552rendered correctly. It may be due to a bug in the viewer rather than 2553in the PDF file that cairo has created. 2554 2555Robustness improvements 2556----------------------- 2557Chris Wilson has made the largest contribution by far to cairo 1.5.2, 2558(in number of commits). His more than 150 commits include a huge 2559number of fixes to increase cairo's robustness. These fixes make cairo 2560more robust against invalid and degenerate input, (NaN, empty path, 2561etc.), against size-0 malloc calls, against memory leaks on 2562error-recovery paths, and against other failures during error 2563handling. He also implemented atomic operations to cairo, and used 2564them to fix cairo's previously non-thread-safe reference counting, 2565again improving robustness. 2566 2567Chris has put a tremendous amount of time and effort into writing 2568analysis tools for this work, and in running those tools and fixing 2569the problems they report. We're very grateful for this work, and hope 2570that all cairo users appreciate the more robust implementation that 2571results from it. 2572 2573This work is largely thankless, so it might make sense to notice 2574sometime that cairo has been running quite smoothly for you, and when 2575you do, send a quick "thank you" off to Chris Wilson, since it 2576is all definitely running smoother thanks to his work. 2577 2578New API 2579------- 2580There are no major additions to cairo's core API. The only new, 2581generic functions are: 2582 2583 void 2584 cairo_surface_copy_page (cairo_surface_t *surface); 2585 2586 void 2587 cairo_surface_show_page (cairo_surface_t *surface); 2588 2589which can now be used much more conveniently than the existing 2590cairo_copy_page and cairo_show_page functions in some 2591situations. These functions act identically, but require only a 2592cairo_surface_t* and not a cairo_t*. 2593 2594All other API additions are specific to particular backends. 2595 2596New cairo-win32 API (new font face function and "win32 printing" surface) 2597------------------------------------------------------------------------- 2598There is a new function for creating a win32 font face for both a 2599logfontw and an hfont together. This complements the existing 2600functions for creating a font face from one or the other: 2601 2602 cairo_font_face_t * 2603 cairo_win32_font_face_create_for_logfontw_hfont (LOGFONTW *logfont, 2604 HFONT font); 2605 2606There is also a new "win32 printing" surface: 2607 2608 cairo_surface_t * 2609 cairo_win32_printing_surface_create (HDC hdc); 2610 2611This interface looks identical to the original 2612cairo_win32_surface_create, (both accept and HDC), but the behavior of 2613this new surface is very different. It should only be called with a 2614printing DC, and will result in all drawing commands being stored into 2615a meta-surface and emitted after each page is complete, with analysis 2616to do as minimal image-based fallbacks as necessary. The behavior and 2617implementation shares much with the PDF and PostScript backends. 2618 2619New cairo-ps API (EPS and PostScript level control) 2620--------------------------------------------------- 2621An often requested feature has been the ability to generate 2622Encapsulated PostScript (EPS) with cairo. We have that now with the 2623following very simple API. Just do cairo_ps_surface_create as usual 2624then call this function with a true value: 2625 2626 void 2627 cairo_ps_surface_set_eps (cairo_surface_t *surface, 2628 cairo_bool_t eps); 2629 2630[NOTE: As always with snapshots, it's possible---though not very 2631likely---that the API could still be modified before a final 2632release. For example, this is the first public cairo function that 2633accepts a Boolean parameter. I'm generally opposed to Boolean 2634parameters, but this is probably the one case where I'm willing to 2635accept one, (namely a "set" function that accepts a single Boolean).] 2636 2637Also, it is now possible to control what PostScript level to target, 2638(either level 2 or level 3), with the following new API: 2639 2640 typedef enum _cairo_ps_level { 2641 CAIRO_PS_LEVEL_2, 2642 CAIRO_PS_LEVEL_3 2643 } cairo_ps_level_t; 2644 2645 void 2646 cairo_ps_surface_restrict_to_level (cairo_surface_t *surface, 2647 cairo_ps_level_t level); 2648 2649 void 2650 cairo_ps_get_levels (cairo_ps_level_t const **levels, 2651 int *num_levels); 2652 2653 const char * 2654 cairo_ps_level_to_string (cairo_ps_level_t level); 2655 2656Improvement for cairo-quartz 2657---------------------------- 2658Brian Ewins had contributed several improvements to cairo-quartz. These 2659include an implementation of EXTEND_NONE for linear and radial 2660gradients, (so this extend mode will no longer trigger image fallbacks 2661for these gradients), as well as native surface-mask clipping, (only 2662on OS X 10.4+ where the CGContextClipToMask function is available). 2663 2664He also fixed a semantic mismatch between cairo and quartz for dashing 2665with an odd number of entries in the dash array. 2666 2667We're grateful for Brian since not many quartz-specific improvements 2668to cairo would be happening without him. 2669 2670Optimizations 2671------------- 2672Optimize SVG output for when the same path is both filled and stroked, 2673and avoid unnecessary identity matrix in SVG output. (Emmanuel Pacaud). 2674 2675Optimize PS output to take less space (Ken Herron). 2676 2677Make PS output more compliant with DSC recommendations (avoid initclip 2678and copy_page) (Adrian Johnson). 2679 2680Make PDF output more compact (Adrian Johnson). 2681 2682Release glyph surfaces after uploading them to the X server, (should 2683save some memory for many xlib-using cairo application). (Behdad 2684Esfahbod). 2685 2686Optimize cairo-win32 to use fewer GDI objects (Vladimir Vukicevic). 2687 2688win32-printing: Avoid falling back to images when alpha == 255 2689everywhere. (Adrian Johnson). 2690 2691win32-printing: Avoid falling back for cairo_push_group and 2692cairo_surface_create_similar. (Adrian Johnson) 2693 2694Bug fixes 2695--------- 2696Avoid potential integer overflows when allocating large buffers 2697(Vladimir Vukicevic). 2698 2699Preparations to allow the 16.16 fixed-point format to change to 270024.8 (Vladimir Vukicevic). 2701 2702Fix bugs for unsupported X server visuals (rgb565, rgb555, bgr888, and 2703abgr8888). (Carl Worth and Vladimir Vukicevic) 2704 2705Fix bugs in PDF gradients (Adrian Johnson). 2706 2707Fix cairo-xlib to build without requiring Xrender header 2708files (Behdad Esfahbod). 2709 2710Make cairo more resilient in the case of glyphs not being available in 2711the current font. (Behdad Esfahbod) 2712 2713Prevent crashes when both atsui and ft font backends are compiled in 2714(Brian Ewins). 2715 2716Make font subsetting code more robust against fonts that don't include 2717optional tables (Adrian Johnson). 2718 2719Fix CFF subsetting bug, (which manifested by generating PDF files that 2720Apple's Preview viewer could not read) (Adrian Johnson). 2721 2722Fixed error handling for quartz and ATSUI backends (Brian Ewins). 2723 2724Avoid rounding problems by pre-transforming to avoid integer-only 2725restrictions on transformation in GDI (Adrian Johnson). 2726 2727Fixed an obscure bug (#7245) computing extents for some stroked 2728paths (Carl Worth). 2729 2730Fix crashes due to extreme transformation of the pen, (seems to show 2731up in many .swf files for some reason) (Carl Worth). 2732 2733Release 1.4.10 (2007-06-27 Carl Worth <cworth@cworth.org>) 2734========================================================== 2735This is the fifth update in cairo's stable 1.4 series. It comes 2736roughly three weeks after the 1.4.8 release. The most significant 2737change in this release is a fix to avoid an X error in certain cases, 2738(that were causing OpenOffice.org to crash in Fedora). There is also a 2739semantic change to include child window contents when using an xlib 2740surface as a source, an optimization when drawing many rectangles, and 2741several minor fixes. 2742 2743Eliminate X errors that were killing OO.o (Chris Wilson) 2744-------------------------------------------------------- 2745Cairo is fixed to avoid the X errors propagated when cleaning up 2746Render Pictures after the application had already destroyed the 2747Drawable they reference. (It would be nice if the X server wouldn't 2748complain that some cleanup work is already done, but there you have 2749it.) This fixes the bug causing OpenOffice.org to crash as described 2750here: 2751 2752 XError on right click menus in OOo. 2753 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=243811 2754 2755Use IncludeInferiors when using xlib surface as a source (Ryan Lortie) 2756---------------------------------------------------------------------- 2757When an xlib surface is used as the source of a draw operation the 2758contents of child windows are now included in the source data. The 2759semantics of drawing to xlib surfaces are unchanged (ie: draws are 2760still clipped by child windows overlapping the destination window). 2761 2762Optimize drawing of many rectangles (Vladimir Vukicevic) 2763-------------------------------------------------------- 2764Avoid O(N*N) loop when filling many axis-aligned rectangles, (either 2765many rectangles as separate sub-paths or due to dashing). 2766 2767Miscellaneous fixes 2768------------------- 2769Fix cairo-perf on Solaris by linking to librt. (Behdad Esfahbod) 2770 2771Fix make check for systems that require executable files to have a 2772particular extension. (Behdad Esfahbod) 2773 2774Eliminate some warnings in cairo-quartz. (Brian Ewins) 2775 2776Fix build-breaking typo for cairo-directfb. (Chris Wilson) 2777 2778Release 1.4.8 (2007-06-07 Carl Worth <cworth@cworth.org>) 2779========================================================= 2780This is the fourth update in cairo's stable 1.4 series. It comes just 2781over five weeks after the 1.4.6 release. This release includes a 2782thread-safe surface-cache for solid patterns which significantly 2783improves text rendering with the xlib backend. Also, dozens of error 2784paths in cairo have been fixed thanks to extensive fault-injection 2785testing by Chris Wilson. 2786 2787Surface cache for solid patterns 2788-------------------------------- 2789Originally written by Jorn Baayen, the introduction of a small cache 2790for surfaces created for solid patterns improves performance 2791dramatically. For example, this reduces the volume of X requests 2792during text rendering to the same level as Xft. 2793 2794This cache first made its appearance in a 1.3.x snapshot, but was 2795removed before appearing in any previous major release due to 2796complications with multi-threaded programs. For example, programs like 2797evince that would carefully restrict usage of cairo-xlib to a single 2798thread were unpleasantly surprised to find that using cairo-image in a 2799separate thread could trigger X requests. 2800 2801Behdad Esfahbod designed a fix which was implemented by Chris 2802Wilson. Now, the necessary X requests are queued up until the next 2803time the application directly operates on an xlib surface. 2804 2805Improved error handling paths 2806------------------------------ 2807Chris Wilson continued the excellent work he started in cairo 1.4.4 to 2808make cairo much more robust against out-of-memory and other errors. He 2809applied his memory allocation fault injection cairo's main test suite, 2810(previously he had applied it to cairo's performance suite). 2811 2812Chris's testing found dozens of bugs which he fixed. Many of these 2813bugs had perhaps never been hit by any users. But at least one was 2814hit by the gnome-about program which resulted in dozens of duplicated 2815bug reports against that program: 2816 2817 http://bugzilla.gnome.org/show_bug.cgi?id=431990 2818 2819We were very pleasantly surprised to see this bug get fixed as a 2820side-effect of Chris's work. Well done, Chris! 2821 2822Other fixes 2823----------- 2824Cleanup of mutex declarations (Behdad Esfahbod) 2825 2826Remove unnecessary clip region from SVG output (Emmanuel Pacaud) 2827 2828Remove Xsun from the buggy_repeat blacklist (Elaine Xiong) 2829 2830ATSUI: Fix glyph measurement: faster and more correct (Brian Ewins) 2831 2832Quartz: fixed 'extend' behaviour for patterns, improved pattern performance, 2833and a few smaller correctness fixes. (Brian Ewins, Vladimir Vukicevic) 2834 2835Release 1.4.6 (2007-05-01 Carl Worth <cworth@cworth.org>) 2836========================================================= 2837This is the third update in cairo's stable 1.4 series. It comes a 2838little less than three weeks since the 1.4.4 release. This release 2839fixes the broken mutex initialization that made cairo 1.4.4 unusable 2840on win32, OS/2, and BeOS systems. This release also adds significant 2841improvements to cairo's PDF backend, (native gradients!), and a couple 2842of performance optimizations, (one of which is very significant for 2843users of the xlib backend). See below for more details. 2844 2845Repaired mutex initialization 2846----------------------------- 2847We apologize that cairo 1.4.4 did little more than crash on many 2848platforms which are less-frequently used by the most regular cairo 2849maintainers, (win32, OS/2, and BeOS). The mutex initialization 2850problems that caused those crashes should be fixed now. And to avoid 2851similar problems in the future, we've now started posting pre-release 2852snapshots to get better testing, (subscribe to cairo@cairographics.org 2853if you're interested in getting notified of those and testing them). 2854 2855PDF Improvements 2856---------------- 2857Thanks to Adrian Johnson, (cairo PDF hacker extraordinaire), we have 2858several improvements to cairo's PDF backend to announce: 2859 2860Native gradients: 2861 2862 As of cairo 1.4.6, cairo will now generate native PDF gradients in 2863 many cases, (previously, the presence of a gradient on any page 2864 would force rasterized output for that page). Currently, only 2865 gradients with extend types of PAD (the default) or NONE will 2866 generate native PDF gradients---others will still trigger 2867 rasterization, (but look for support for other extend modes in a 2868 future release). Many thanks to Miklós Erdélyi as well, who did the 2869 initial work for this support. 2870 2871Better compatibility with PDF viewers: 2872 2873 The PDF output from cairo should now be displayed correctly by a 2874 wider range of PDF viewers. Adrian tested cairo's PDF output against 2875 many PDF viewers, identified a common bug in many of those viewers 2876 (ignoring the CTM matrix in some cases), and modified cairo's output 2877 to avoid triggering that bugs (pre-transforming coordinates and 2878 using an identity matrix). 2879 2880Better OpenType/CFF subsetting: 2881 2882 Cairo will now embed CFF and TrueType fonts as CID fonts. 2883 2884Performance optimizations 2885------------------------- 2886Faster cairo_paint_with_alpha: 2887 2888 The cairo_paint_with_alpha call is used to apply a uniform alpha 2889 mask to a pattern. For example, it can be used to gradually fade an 2890 image out or in. Jeff Muizelaar fixed some missing/broken 2891 optimizations within the implementation of this function resulting 2892 in cairo_paint_with_alpha being up to 4 times faster when using 2893 cairo's image backend. 2894 2895Optimize rendering of "off-screen" geometry: 2896 2897 Something that applications often do is to ask cairo to render 2898 things that are either partially or wholly outside the current clip 2899 region. Since 1.4.0 the image backend has been fixed to not waste 2900 too much time in this case. But other backends have still been 2901 suffering. 2902 2903 In particular, the xlib backend has often performed quite badly in 2904 this situation. This is due to a bug in the implementation of 2905 trapezoid rasterization in many X servers. 2906 2907 Now, in cairo 1.4.6 there is a higher-level fix for this 2908 situation. Cairo now eliminates or clips trapezoids that are wholly 2909 or partially outside the clip region before handing the trapezoids 2910 to the backend. This means that the X server's performance bug is 2911 avoided in almost all cases. 2912 2913 The net result is that doing an extreme zoom-in of vector-based 2914 objects drawn with cairo might have previously brought the X server 2915 to its knees as it allocated buffers large enough to fit all of the 2916 geometry, (whether visible or not). But now the memory usage should 2917 be bounded and performance should be dramatically better. 2918 2919Miscellaneous 2920------------- 2921Behdad contributed an impressively long series of changes that 2922organizes cairo's internals in several ways that will be very 2923beneficial to cairo developers. Thanks, Behdad! 2924 2925Behdad has also provided a utility for generating malloc statistics, 2926(which was used during the great malloc purges of 1.4.2 and 29271.4.4). This utility isn't specific to cairo so may be of benefit to 2928others. It is found in cairo/util/malloc-stats.c and here are Behdad's 2929notes on using it: 2930 2931 To build, do: 2932 2933 make malloc-stats.so 2934 2935 inside util/, and to use, run: 2936 2937 LD_PRELOAD=malloc-stats.so some-program 2938 2939 For binaries managed by libtool, eg, cairo-perf, do: 2940 2941 ../libtool --mode=execute /bin/true ./cairo-perf 2942 LD_PRELOAD="../util/malloc-stats.so" .libs/lt-cairo-perf 2943 2944Finally, the cairo-perf-diff-files utility was enhanced to allow for 2945generating performance reports from several runs of the same backend 2946while some system variables were changed. For example, this is now 2947being used to allow cairo-perf to measure the performance of various 2948different acceleration architectures and configuration options of the 2949X.org X server. 2950 2951Release 1.4.4 (2007-04-13 Carl Worth <cworth@cworth.org>) 2952========================================================= 2953This is the second update release in cairo's stable 1.4 series. It 2954comes just less than a month after 1.4.2. The changes since 1.4.2 2955consist primarily of bug fixes, but also include at least one 2956optimization. See below for details. 2957 2958Of all the work that went into the 1.4.4 release 2959 2960There have been lots of individuals doing lots of great work on cairo, 2961but two efforts during the 1.4.4 series deserve particular mention: 2962 2963Internal cleanup of error handling, (Chris Wilson) 2964-------------------------------------------------- 2965Chris contributed a tremendous series of patches (74 patches!) to 2966improve cairo's handling of out-of-memory and other errors. He began 2967by adding gcc's warn_unused_attribute to as many functions as 2968possible, and then launched into the ambitious efforts of adding 2969correct code to quiet the dozens of resulting warnings. 2970 2971Chris also wrote a custom valgrind skin to systematically inject 2972malloc failures into cairo, and did all the work necessary to verify 2973that cairo's performance test suite runs to completion without 2974crashing. 2975 2976The end result is a much more robust implementation. Previously, many 2977error conditions would have gone unnoticed and would have led to 2978assertion failures, segmentation faults, or other harder-to-diagnose 2979problems. Now, more than ever, cairo should cleanly let the user know 2980of problems through cairo_status and other similar status 2981functions. Well done, Chris! 2982 2983More malloc reduction, (Mathias Hasselmann) 2984------------------------------------------- 2985After 1.4.0, Behdad launched an effort to chase down excessive calls 2986to malloc within the implementation of cairo. He fixed a lot of 2987malloc-happy objects for 1.4.2, but one of the worst offenders, 2988(pixman regions), was left around. Mathias contributed an excellent 2989series of 15 patches to finish off this effort. 2990 2991The end result is a cairo that calls malloc much less often than it 2992did before. Compared to 1.4.2, 55% of the calls to malloc have been 2993eliminate, (and 60% have been eliminated compared to 1.4.0). Well 2994done, Mathias! 2995 2996Other improvements since 1.4.2 2997------------------------------ 2998• Centralize mutex declarations (will reduce future build breaks), 2999 (Mathias Hasselmann) 3000 3001• Reduce malloc by caching recently freed pattern objects (Chris 3002 Wilson) 3003 3004• Fix some broken composite operations (David Reveman) 3005 https://bugs.freedesktop.org/show_bug.cgi?id=5777 3006 3007Backend-specific fixes 3008---------------------- 3009PDF: 3010 • Use TJ operator for more compact representation of glyphs (Adrian 3011 Johnson) 3012 3013 • Fix glyph positioning bug when glyphs are not horizontal 3014 http://lists.freedesktop.org/archives/cairo/2007-April/010337.html 3015 3016win32: 3017 • Fix crash when rendering with bitmap fonts (Carl Worth) 3018 https://bugzilla.mozilla.org/show_bug.cgi?id=376498 3019 3020xlib: 3021 • Turn metrics-hinting on by default (Behdad Esfahbod) 3022 3023 • Fix edge-effect problem with transformed images drawn to xlib 3024 (Behdad Esfahbod) 3025 https://bugs.freedesktop.org/show_bug.cgi?id=10508 3026 3027 • Avoid dereferencing a NULL screen. (Chris Wilson) 3028 https://bugs.freedesktop.org/show_bug.cgi?id=10517 3029 3030Quartz/ATSUI: 3031 • Fix scaling of glyph surfaces 3032 (Brian Ewins) 3033 https://bugs.freedesktop.org/show_bug.cgi?id=9568 3034 3035 • Fix compilation failure when both xlib and quartz enabled 3036 (Brian Ewins) 3037 3038 • Fix rounding bug leading to incorrectly positioned glyphs 3039 (Robert O'Callahan) 3040 https://bugs.freedesktop.org/show_bug.cgi?id=10531 3041 3042Release 1.4.2 (2007-03-19 Carl Worth <cworth@cworth.org>) 3043========================================================= 3044This is the first update release in cairo's stable 1.4 series. It 3045comes just less than 2 weeks after 1.4.0. We hadn't anticipated an 3046update this early, but we've managed to collect some important fixes 3047that we wanted to get out to cairo users as soon as possible, (6 fixes 3048for crashes, 1 case where graphical elements would not be drawn at 3049all, a handful of backend-specific bugs, and several important build 3050fixes). 3051 3052There's almost nothing but bug fixes in this release, (see below one 3053optimization that Behdad did sneak in), so we recommend that everyone 3054upgrade to this release when possible. 3055 3056Thanks to the many people that worked to fix these bugs, and those 3057that did the work to report them and to test the fixes, (wherever 3058possible both names are credited below). 3059 3060Critical fixes 3061-------------- 3062• Fix a crash due to a LOCK vs. UNLOCK typo (M. Drochner fixing Carl 3063 Worth's embarrassing typo). 3064 3065 http://bugs.freedesktop.org/show_bug.cgi?id=10235 3066 3067• Fix potential buffer overflow, which on some systems with a checking 3068 variant of snprintf would lead to a crash (Adrian Johnson, Stanislav 3069 Brabec, and sangu). 3070 3071 https://bugs.freedesktop.org/show_bug.cgi?id=10267 3072 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=232576 3073 3074• Fix a crash in cairo_stroke_extents or cairo_in_stroke when line 3075 width is 0.0. (Carl Worth and Sebastien Bacher) 3076 3077 https://bugs.freedesktop.org/show_bug.cgi?id=10231 3078 3079• Fix a crash on certain combinations of X server/video drivers (Carl 3080 Worth and Tomas Carnecky). 3081 3082 https://bugs.freedesktop.org/show_bug.cgi?id=10250 3083 3084• Fix a crash due to mishandling of invalid user input (Carl Worth and 3085 Alexander Darovsky). 3086 3087 https://bugs.freedesktop.org/show_bug.cgi?id=9844 3088 3089• xlib: Cleanup server-side glyph caches on XCloseDisplay. This 3090 eliminated a crash detected by the perf suite, (and that 3091 applications could have run into as well). (Chris Wilson) 3092 3093Other bug fixes 3094--------------- 3095• Fix for some geometry which simply disappeared under some 3096 transformations---a stroked line with an extreme skew in X, for 3097 example (Carl Worth and Jonathan Watt). 3098 3099 https://bugzilla.mozilla.org/show_bug.cgi?id=373632 3100 3101• SVG: Fix radial gradients for CAIRO_EXTEND_REFLECT and when r0 > r1 3102 (Emmanuel Pacaud). 3103 3104• PDF: Set page group color space to DeviceRGB. 3105 3106 This fixes incorrect (muddy) transparent colors when rendering cairo 3107 PDF output in some viewers. (Adrian Johnson, Adam Goode, and 3108 MenTaLguY). 3109 3110 http://lists.freedesktop.org/archives/cairo/2006-November/008551.html 3111 3112• win32: Return correct metrics when hinting is off, and fix font 3113 descent computation (Behdad Esfahbod). 3114 3115• quartz: Fix glyph interfaces to correctly return user-space rather 3116 than device-space coordinates (Brian Ewins). 3117 3118 https://bugs.freedesktop.org/show_bug.cgi?id=9568 3119 3120• xcb: Fix parameter-order confusion with xcb_create_pixmap, which now 3121 makes all tests that pass with xlib now pass with xcb (Carl Worth, 3122 Jamey Sharp). 3123 3124• Fix some memory leaks in the perf suite (Chris Wilson). 3125 3126• Fix perf suite to consider changes in pixman/src (Mathias 3127 Hasselmann). 3128 3129Build fixes 3130----------- 3131• Don't include pre-generated cairo-features.h file. This was causing 3132 build failures when building with the directfb backend enabled 3133 (Behdad Esfahbod). 3134 3135 https://bugs.freedesktop.org/show_bug.cgi?id=10189 3136 3137• Eliminate use of maintainer mode from cairo's automake/configure 3138 script. This means that updates to files such as Makefile.am will 3139 take effect, (by rerunning automake and friends as necessary) when 3140 invoking make rather than being silently ignored. (Behdad Esfahbod) 3141 3142• Don't compile cairo-deflate-stream.c, which depends on zlib, unless 3143 building the pdf backend which requires it. (Carl Worth, Tor 3144 Lillqvist) 3145 3146 https://bugs.freedesktop.org/show_bug.cgi?id=10202 3147 3148• Don't make the ps backend link against zlib anymore, since it 3149 doesn't require it (Carl Worth). 3150 3151• Use "find !" rather than "find -not" for better portability (Thomas 3152 Klausner). 3153 3154 https://bugs.freedesktop.org/show_bug.cgi?id=10226 3155 3156• Don't use unsupported visibility attribute "hidden" on Solaris 3157 (Gilles Dauphin, Thomas Klausner). 3158 3159 https://bugs.freedesktop.org/show_bug.cgi?id=10227 3160 3161Optimization 3162------------ 3163• It was Behdad that suggested we focus strictly on bug fixes now that 3164 we shipped so many performance improvements in 1.4.0, but it was 3165 also Behdad that got distracted by the chance to remove a lot of 3166 mallocs from cairo. Paths, gstates, trapezoids, splines, polygons, 3167 and gradient color stops will now use small, stack-allocated buffers 3168 in the most common cases rather than calling malloc as 3169 often. (Behdad Esfahbod). And look for more from Mathias Hasselmann 3170 soon. 3171 3172Release 1.4.0 (2007-03-06 Carl Worth <cworth@cworth.org>) 3173========================================================= 3174The many people[*] who have been working hard on cairo are very 3175pleased to announce the long-awaited release of cairo 1.4. This 3176release comes 4 months after the last stable update release (1.2.6) 3177and 9 months since the initial release of 1.2.0. 3178 3179The release notes below are intended to capture the highlights of the 3180changes that have occurred from the 1.2 series to the new 1.4.0 3181release. 3182 3183Performance improvements 3184------------------------ 3185Within the cairo project, the last 6 months or so has seen an intense 3186effort focusing on the performance of cairo itself. That effort has 3187paid off considerably, as can be seen in the following highlights of 3188some of the performance differences from cairo 1.2.6 to cairo 1.4.0. 3189 3190(Note: The performance results reported here were measured on an x86 3191laptop. Many of the improvements in 1.4---particular those involving 3192text rendering---are even more dramatic on embedded platforms without 3193hardware floating-point units. Such devices played an important part 3194of many of the optimizations that found their way into cairo over the 3195last few months.) 3196 3197• Dramatic improvement when drawing objects that are mostly off-screen 3198 with the image backend (with the xlib backend this case is still 3199 slow due to an X server bug): 3200 3201 image-rgba long-lines-uncropped-100 479.64 -> 4.98: 96.24x speedup 3202 ███████████████████████████████████████████████▋ 3203 3204• Dramatic improvement when copying a small fraction of an image 3205 surface to an xlib surface: 3206 3207 xlib-rgba subimage_copy-512 3.93 -> 0.07: 54.52x speedup 3208 ██████████████████████████▊ 3209 3210• Dramatic improvement to tessellation speed for complex objects: 3211 3212 image-rgb tessellate-256-100 874.16 -> 34.79: 25.13x speedup 3213 ████████████▏ 3214 xlib-rgba zrusin_another_fill-415 148.40 -> 13.85: 10.72x speedup 3215 ████▉ 3216 xlib-rgb world_map-800 680.20 -> 345.54: 1.97x speedup 3217 ▌ 3218 3219• Dramatic improvement to the speed of stroking rectilinear shapes, 3220 (such as the outline of a rectangle or "box"): 3221 3222 image-rgb box-outline-stroke-100 0.18 -> 0.01: 24.22x speedup 3223 ███████████▋ 3224 xlib-rgb box-outline-stroke-100 0.46 -> 0.06: 8.05x speedup 3225 ███▌ 3226 3227 3228• Dramatic improvements to text rendering speeds: 3229 3230 xlib-rgba text_image_rgba_over-256 63.12 -> 9.61: 6.57x speedup 3231 ██▊ 3232 3233• 3x improvements to floating-point to fixed-point conversion speeds: 3234 3235 image-rgba pattern_create_radial-16 9.29 -> 3.44: 2.70x speedup 3236 ▉ 3237 3238• 2x improvements to linear gradient computation: 3239 3240 image-rgb paint_linear_rgb_source-512 26.22 -> 11.61: 2.26x speedup 3241 ▋ 3242 3243• 2x improvement to a case common in PDF rendering: 3244 3245 image-rgb unaligned_clip-100 0.10 -> 0.06: 1.81x speedup 3246 ▍ 3247 3248• 1.3x improvement to rectangle filling speed (note: this improvement 3249 is new since 1.3.16---previously this test case was a 1.3x slowdown 3250 compared to 1.2.6): 3251 3252 image-rgba rectangles-512 6.19 -> 4.37: 1.42x speedup 3253 ▎ 3254 xlib-rgba rectangles-512 7.48 -> 5.58: 1.34x speedup 3255 ▏ 3256 3257NOTE: In spite of our best efforts, there are some measurable 3258performance regressions in 1.4 compared to 1.2. It appears that the 3259primary problem is the increased overhead of the new tessellator when 3260drawing many, very simple shapes. The following test cases capture 3261some of that slowdown: 3262 3263 image-rgba mosaic_tessellate_lines-800 11.03 -> 14.29: 1.30x slowdown 3264 ▏ 3265 image-rgba box-outline-fill-100 0.01 -> 0.01: 1.26x slowdown 3266 ▏ 3267 image-rgba fill_solid_rgb_over-64 0.20 -> 0.22: 1.12x slowdown 3268 3269 image-rgba fill_image_rgba_over-64 0.23 -> 0.25: 1.10x slowdown 3270 3271 xlib-rgb paint_image_rgba_source-256 3.24 -> 3.47: 1.07x slowdown 3272 3273We did put some special effort into eliminating this slowdown for the 3274very common case of drawing axis-aligned rectangles with an identity 3275matrix (see the box-outline-stroke and rectangles speedup numbers 3276above). Eliminating the rest of this slowdown will be a worthwhile 3277project going forward. 3278 3279Also note that the "box-outline-fill" case is a slowdown while 3280"box-outline-stroke" is a (huge) speedup. These two test cases 3281resulted from the fact that some GTK+ theme authors were filling 3282between two rectangles to avoid slow performance from the more natural 3283means of achieving the same shape by stroking a single rectangle. With 32841.4 that workaround should definitely be eliminated as it will now 3285cause things to perform more slowly. 3286 3287Greatly improved PDF output 3288--------------------------- 3289We are very happy to be able to announce that cairo-generated PDF 3290output will now have text that can be selected, cut-and-pasted, and 3291searched with most capable PDF viewer applications. This is something 3292that was not ever possible with cairo 1.2. 3293 3294Also, the PDF output now has much more compact encoding of text than 3295before. Cairo is now much more careful to not embed multiple copies of 3296the same font at different sizes. It also compresses text and font 3297streams within the PDF output. 3298 3299API additions 3300------------- 3301There are several new functions available in 1.4 that were not 3302available in 1.2. Curiously, almost all of the new functions simply 3303allow the user to query state that has been set in cairo (many new 3304"get" functions) rather than providing any fundamentally new 3305operations. The new functionality is: 3306 3307• Getting information about the current clip region 3308 3309 cairo_clip_extents 3310 cairo_copy_clip_rectangle_list 3311 cairo_rectangle_list_destroy 3312 3313• Getting information about the current dash setting 3314 3315 cairo_get_dash_count 3316 cairo_get_dash 3317 3318• Getting information from a pattern 3319 3320 cairo_pattern_get_rgba 3321 cairo_pattern_get_surface 3322 cairo_pattern_get_color_stop_rgba 3323 cairo_pattern_get_color_stop_count 3324 cairo_pattern_get_linear_points 3325 cairo_pattern_get_radial_circles 3326 3327• Getting the current scaled font 3328 3329 cairo_get_scaled_font 3330 3331• Getting reference counts 3332 3333 cairo_get_reference_count 3334 cairo_surface_get_reference_count 3335 cairo_pattern_get_reference_count 3336 cairo_font_face_get_reference_count 3337 cairo_scaled_font_get_reference_count 3338 3339• Setting/getting user data on objects 3340 3341 cairo_set_user_data 3342 cairo_get_user_data 3343 cairo_pattern_set_user_data 3344 cairo_pattern_get_user_data 3345 cairo_scaled_font_set_user_data 3346 cairo_scaled_font_get_user_data 3347 3348• New cairo-win32 functions: 3349 3350 cairo_win32_surface_create_with_ddb 3351 cairo_win32_surface_get_image 3352 cairo_win32_scaled_font_get_logical_to_device 3353 cairo_win32_scaled_font_get_device_to_logical 3354 3355API deprecation 3356--------------- 3357The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never 3358worked as a format value for cairo_image_surface_create, and it wasn't 3359necessary for supporting 16-bit 565 X server visuals. 3360 3361A sampling of bug fixes in cairo 1.4 3362------------------------------------ 3363 • Fixed radial gradients 3364 • Fixed dashing (degenerate and "leaky" cases) 3365 • Fixed transformed images in PDF/PS output (eliminate bogus repeating) 3366 • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD 3367 • cairo_show_page no longer needed for single-page output 3368 • SVG: Fix bug preventing text from appearing in many viewers 3369 • cairo-ft: Return correct metrics when hinting is off 3370 • Eliminate crash in cairo_create_similar if nil surface is returned 3371 • Eliminate crash after INVALID_RESTORE error 3372 • Fix many bugs related to multi-threaded use and locking 3373 • Fix for glyph spacing 32 times larger than desired (cairo-win32) 3374 • Fixed several problems in cairo-atsui (assertion failures) 3375 • Fix PDF output to avoid problems when printing from Acrobat Reader 3376 • Fix segfault on Mac OS X (measuring a zero-length string) 3377 • Fix text extents to not include the size of non-inked characters 3378 • Fix for glyph cache race condition in glitz backend (Jinghua Luo) 3379 • Fix make check to work on OPD platforms (IA64 or PPC64) 3380 • Fix compilation problems of cairo "wideint" code on some platforms 3381 • Many, many others... 3382 3383Experimental backends (quartz, XCB, OS/2, BeOS, directfb) 3384--------------------------------------------------------- 3385None of cairo's experimental backends are graduating to "supported" 3386status with 1.4.0, but two of them in particular (quartz and xcb), are 3387very close. 3388 3389The quartz baceknd has been entirely rewritten and is now much more 3390efficient. The XCB backend has been updated to track the latest XCB 3391API (which recently had a 1.0 release). 3392 3393We hope to see these backends become supported in a future release, 3394(once they are passing all the tests in cairo's test suite). 3395 3396The experimental OS/2 backend is new in cairo 1.4 compared to cairo 33971.2. 3398 3399Documentation improvements 3400-------------------------- 3401We have added documentation for several functions and types that 3402were previously undocumented, and improved documentation on other 3403ones. As of this release, there remain only two undocumented 3404symbols: cairo_filter_t and cairo_operator_t. 3405 3406[*]Thanks to everyone 3407--------------------- 3408I've accounted for 41 distinct people with attributed code added to 3409cairo between 1.2.6 and 1.4.0, (their names are below). That's an 3410impressive number, but there are certainly dozens more that 3411contributed with testing, suggestions, clarifying questions, and 3412encouragement. I'm grateful for the friendships that have developed as 3413we have worked on cairo together. Thanks to everyone for making this 3414all so much fun! 3415 3416Adrian Johnson, Alfred Peng, Alp Toker, Behdad Esfahbod, 3417Benjamin Otte, Brian Ewins, Carl Worth, Christian Biesinger, 3418Christopher (Monty) Montgomery, Daniel Amelang, Dan Williams, 3419Dave Yeo, David Turner, Emmanuel Pacaud, Eugeniy Meshcheryakov, 3420Frederic Crozat, Hans Breuer, Ian Osgood, Jamey Sharp, Jeff Muizelaar, 3421Jeff Smith, Jinghua Luo, Jonathan Watt, Joonas Pihlaja, Jorn Baayen, 3422Kalle Vahlman, Kjartan Maraas, Kristian Høgsberg, M Joonas Pihlaja, 3423Mathias Hasselmann, Mathieu Lacage, Michael Emmel, Nicholas Miell, 3424Pavel Roskin, Peter Weilbacher, Robert O'Callahan, 3425Soren Sandmann Pedersen, Stuart Parmenter, T Rowley, 3426Vladimir Vukicevic 3427 3428Snapshot 1.3.16 (2007-03-02 Carl Worth <cworth@cworth.org>) 3429=========================================================== 3430New API functions 3431----------------- 3432A few new public functions have been added to the cairo API since the 34331.3.14 snapshot. These include a function to query the current scaled 3434font: 3435 3436 cairo_get_scaled_font 3437 3438New functions to query the reference count of all cairo objects: 3439 3440 cairo_get_reference_count 3441 3442 cairo_surface_get_reference_count 3443 cairo_pattern_get_reference_count 3444 3445 cairo_font_face_get_reference_count 3446 cairo_scaled_font_get_reference_count 3447 3448And new functions to allow the use of user_data with any cairo object, 3449(previously these were only available on cairo_surface_t and 3450cairo_font_face_t objects): 3451 3452 cairo_set_user_data 3453 cairo_get_user_data 3454 3455 cairo_pattern_set_user_data 3456 cairo_pattern_get_user_data 3457 3458 cairo_scaled_font_set_user_data 3459 cairo_scaled_font_get_user_data 3460 3461Usability improvement for PDF/PS/SVG generation 3462----------------------------------------------- 3463In previous versions of cairo, generating single-page output with the 3464cairo-pdf, cairo-ps, or cairo-svg backends required a final call to 3465cairo_show_page. This was often quite confusing as people would port 3466functional code from a non-paginated backend and be totally mystified 3467as to why the output was blank until they learned to add this call. 3468 3469Now that call to cairo_show_page is optional, (it will be generated 3470implicitly if the user does not call it). So cairo_show_page is only 3471needed to explicitly separate multiple pages. 3472 3473Greatly improved PDF output 3474--------------------------- 3475We are very happy to be able to announce that cairo-generated PDF 3476output will now have text that can be selected, cut-and-paste, and 3477searched with most capable PDF viewer applications. This is something 3478that was not ever possible with cairo 1.2. 3479 3480Also, the PDF output now has much more compact encoding of text than 3481before. Cairo is now much more careful to not embed multiple copies of 3482the same font at different sizes. It also compresses text and font 3483streams within the PDF output. 3484 3485Major bug fixes 3486--------------- 3487 • Fixed radial gradients 3488 3489 The rendering of radial gradients has been greatly improved. In 3490 the cairo 1.2 series, there was a serious regression affecting 3491 radial gradients---results would be very incorrect unless one of 3492 the gradient circles had a radius of 0.0 and a center point within 3493 the other circle. These bugs have now been fixed. 3494 3495 • Fixed dashing 3496 3497 Several fixes have been made to the implementation of dashed 3498 stroking. Previously, some dashed, stroked rectangles would 3499 mis-render and fill half of the rectangle with a large triangular 3500 shape. This bug has now been fixed. 3501 3502 • Fixed transformed images in PDF/PS output 3503 3504 In previous versions of cairo, painting with an image-based source 3505 surface pattern to the PDF or PS backends would cause many kinds 3506 of incorrect results. One of the most common problems was that an 3507 image would be repeated many times even when the user had 3508 explicitly requested no repetition with CAIRO_EXTEND_NONE. These 3509 bugs have now been fixed. 3510 3511 • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD 3512 3513 In the 1.2 version of cairo any use of CAIRO_EXTEND_REFLECT or 3514 CAIRO_EXTEND_PAD with a surface-based pattern resulted in an 3515 error, (cairo would stop rendering). This bug has now been 3516 fixed. 3517 3518 Now, CAIRO_EXTEND_REFLECT should work properly with surface 3519 patterns. 3520 3521 CAIRO_EXTEND_PAD is still not working correctly, but it will now 3522 simply behave as CAIRO_EXTEND_NONE rather than triggering the 3523 error. 3524 3525New rewrite of quartz backend (still experimental) 3526-------------------------------------------------- 3527Cairo's quartz backend has been entirely rewritten and is now much 3528more efficient. This backend is still marked as experimental, not 3529supported, but it is now much closer to becoming an officially 3530supported backend. (For people that used the experimental nquartz 3531backend in previous snapshots, that implementation has now been 3532renamed from "nquartz" to "quartz" and has replaced the old quartz 3533backend.) 3534 3535Documentation improvements 3536-------------------------- 3537We have added documentation for several functions and types that 3538were previously undocumented, and improved documentation on other 3539ones. As of this release, there remain only two undocumented 3540symbols: cairo_filter_t and cairo_operator_t. 3541 3542Other bug fixes 3543--------------- 3544 • cairo-svg: Fix bug that was preventing text from appearing in many 3545 viewers 3546 3547 • cairo-ft: Return correct metrics when hinting is off 3548 3549 • Cairo 1.3.14 deadlocks in cairo_scaled_font_glyph_extents or 3550 _cairo_ft_unscaled_font_lock_face 3551 3552 https://bugs.freedesktop.org/show_bug.cgi?id=10035 3553 3554 • cairo crashes in cairo_create_similar if nil surface returned by 3555 other->backend->create_similar 3556 3557 https://bugs.freedesktop.org/show_bug.cgi?id=9844 3558 3559 • evolution crash in _cairo_gstate_backend_to_user() 3560 https://bugs.freedesktop.org/show_bug.cgi?id=9906 3561 3562 • Fix memory leak in rectilinear stroking code 3563 3564Things not in this release 3565-------------------------- 3566 • Solid-surface-pattern cache: This patch had been applied during 3567 the 1.3.x series, but it was reverted due to some inter-thread 3568 problems it caused. The patch is interesting since it made a big 3569 benefit for text rendering performance---so we'll work to bring a 3570 corrected version of this patch back as soon as possible. 3571 3572Snapshot 1.3.14 (2006-02-13 Carl Worth <cworth@cworth.org>) 3573=========================================================== 3574This is the seventh development snapshot in the 1.3 series, (and there 3575likely won't be many more before the 1.4.0 release). It comes just 3576over 3 weeks after the 1.3.12 snapshot. 3577 3578Since we're so close to the 1.4.0 release, there are not a lot of new 3579features nor even a lot of new performance improvements in this 3580snapshot. Instead, there are a great number of bug fixes. Some are 3581long-standing bugs that we're glad to say goodbye to, and several are 3582fixes for regressions that were introduced as part of the optimization 3583efforts during the 1.3.x series. 3584 3585PDF text selection fixed 3586------------------------ 3587The inability to correctly select text in cairo-generated PDF has been 3588a defect ever since the initial support for the PDF backend in the 3589cairo 1.2.0 release. With the 1.3.14 snapshot, in most situations, and 3590with most PDF viewer applications, the PDF generated by cairo will 3591allow text to be correctly selected for copy-and-paste, (as well as 3592searching). 3593 3594We're very excited about this new functionality, (and very grateful to 3595Adrian Johnson, Behdad Esfahbod, and others that have put a lot of 3596work into this lately). Please test this new ability and give feedback 3597on the cairo@cairographics.org list. 3598 3599Many thread-safety issues fixed 3600------------------------------- 3601We've discovered that no release of cairo has ever provided safe text 3602rendering from a multi-threaded application. With the 1.3.14 snapshot 3603a huge number of the bugs in this area have been fixed, and multiple 3604application dvelopers have now reported success at writing 3605multi-threaded applications with cairo. 3606 3607Other fixes 3608----------- 3609Fixed a bug that was causing glyph spacing to be 32 times larger than 3610desired when using cairo-win32. 3611 3612Fixed a regression in the rendering of linear gradients that had been 3613present since the 1.3.8 snapshot. 3614 3615Fixed several problems in cairo-atsui that were leading to assertion 3616failures when rendering text. 3617 3618Fix corrupted results when rendering a transformed source image 3619surface to an xlib surface. This was a regression that had been 3620present since the 1.3.2 snapshot. 3621 3622Fixed PDF output to prevent problems printing from some versions of 3623Acrobat Reader, (a single glyph was being substituted for every 3624glyph). 3625 3626And many other fixes as well, (see the logs for details). 3627 3628Snapshot 1.3.12 (2007-01-20 Carl Worth <cworth@cworth.org>) 3629=========================================================== 3630The relentless march toward the cairo 1.4 release continues, (even if 3631slightly late out of the starting blocks in 2007). This is the sixth 3632development snapshot in the 1.3 series. It comes 4 weeks after the 36331.3.10 snapshot. 3634 3635Performance 3636----------- 3637As usual, this snapshot has some fun performance improvements to show 3638off: 3639 3640image-rgba long-lines-uncropped-100 470.08 -> 4.95: 94.91x speedup 3641███████████████████████████████████████████████ 3642image-rgb long-lines-uncropped-100 461.60 -> 4.96: 93.02x speedup 3643██████████████████████████████████████████████ 3644 3645This 100x improvement, (and yes, that's 100x, not 100%), in the image 3646backend occurs when drawing large shapes where only a fraction of the 3647shape actually appears in the final result, (the rest being outside 3648the bounds of the destination surface). Many applications should see 3649speedups here, and the actual amount of speedup depends on the ratio 3650of non-visible to visible portions of geometry. 3651 3652[Note: There remains a similar performance bug when drawing mostly 3653non-visible objects with the xlib backend. This is due to a similar 3654bug in the X server itself, but we hope a future cairo snapshot will 3655workaround that bug to get a similar speedup with the xlib backend.] 3656 3657image-rgba unaligned_clip-100 0.09 -> 0.06: 1.67x speedup 3658▍ 3659image-rgb unaligned_clip-100 0.09 -> 0.06: 1.66x speedup 3660▍ 3661 3662This speedup is due to further MMX optimization by Soeren Sandmann for 3663a case commonly hit when rendering PDF files, (and thanks to Jeff 3664Muizelaar for writing code to extract the test case for us). 3665 3666There's another MMX optimization in this snapshot (without a fancy 3667speedup chart) by Dan Williams which improves compositing performance 3668specifically for the OLPC machine. 3669 3670Thanks to Adrian Johnson, cairo's PDF output is now much more 3671efficient in the way it encodes text output. By reducing redundant 3672information and adding compression to text output streams, Adrian 3673achieved a ~25x improvement in the efficiency of encoding text in PDF 3674files, (was ~45 bytes per glyph and is now ~1.6 bytes per glyph). 3675 3676Bug fixes 3677--------- 3678In addition to those performance improvements, this snapshot includes 3679several bug fixes: 3680 3681 * A huge number of bug fixes for cairo-atsui text rendering, (for mac 3682 OS X). These bugs affect font selection, glyph positioning, glyph 3683 rendering, etc. One noteworthy bug fixes is that 3684 cairo_select_font_face will no longer arbitrarily select bold nor 3685 italic when not requested, (at least not when using a standard CSS2 3686 font family name such as "serif", "sans-serif", "monospace", etc.). 3687 All these fixes are thanks to Brian Ewins who continues to do a 3688 great job as the new cairo-atsui maintainer. 3689 3690 * Fix PDF output so that images that are scaled down no longer 3691 mysteriously repeat (Carl Worth). 3692 3693 * Fix segfault on Mac OS X dues to attempt to measure extents of a 3694 zero-length string (Behdad Esfahbod). 3695 3696 * Fix text extents to not include the size of initial/trailing 3697 non-inked characters (Behdad Esfahbod). 3698 3699API tweaks 3700---------- 3701Three functions have had API changes to improve consistency. Note that 3702the API functions being changed here are all functions that were 3703introduced as new functions during these 1.3.x snapshots. As always, 3704there will not be any API changes to functions included in a major 3705release (1.2.x, 1.4.x, etc.) of cairo. 3706 3707The changes are as follows: 3708 3709 * Rename of cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list. 3710 3711 * Change cairo_get_dash_count to return an int rather than accepting a 3712 pointer to an int for the return value. 3713 3714 * Change cairo_get_dash to have a void return type rather than 3715 returning cairo_status_t. 3716 3717It's possible there will be one more round of changes to these 3718functions, (and perhaps cairo_get_color_stop as well), as we seek to 3719establish a unifying convention for returning lists of values. 3720 3721Snapshot 1.3.10 (2006-12-23 Carl Worth <cworth@cworth.org>) 3722=========================================================== 3723Santa Claus is coming just a little bit early this year, and he's 3724bringing a shiny new cairo snapshot for all the good little boys and 3725girls to play with. 3726 3727This is the fifth development snapshot in the 1.3 series. It comes 9 3728days after the 1.3.8 snapshot, and still well within our goal of 3729having a new snapshot every week, (though don't expect one next 3730week---we'll all be too stuffed with sugar plums). 3731 3732Speaking of sugar plums, there's a sweet treat waiting in this cairo 3733snapshot---greatly improved performance for stroking rectilinear 3734shapes, like the ever common rectangle: 3735 3736image-rgb box-outline-stroke-100 0.18 -> 0.01: 25.58x speedup 3737████████████████████████▋ 3738image-rgba box-outline-stroke-100 0.18 -> 0.01: 25.57x speedup 3739████████████████████████▋ 3740xlib-rgb box-outline-stroke-100 0.49 -> 0.06: 8.67x speedup 3741███████▋ 3742xlib-rgba box-outline-stroke-100 0.22 -> 0.04: 5.39x speedup 3743████▍ 3744 3745In past releases of cairo, some people had noticed that using 3746cairo_stroke to draw rectilinear shapes could be awfully slow. Many 3747people had worked around this by using cairo_fill with a more complex 3748path and gotten a 5-15x performance benefit from that. 3749 3750If you're one of those people, please rip that workaround out, as now 3751the more natural use of cairo_stroke should be 1.2-2x faster than the 3752unnatural use of cairo_fill. 3753 3754And if you hadn't ever implemented that workaround, then you just 3755might get to see your stroked rectangles now get drawn 5-25x faster. 3756 3757Beyond that performance fix, there are a handful of bug fixes in this 3758snapshot: 3759 3760 * Fix for glyph cache race condition in glitz backend (Jinghua Luo) 3761 3762 * Many fixes for ATSUI text rendering (Brian Ewins) 3763 3764 * Un-break recent optimization-triggered regression in rendering text 3765 with a translation in the font matrix (Behdad Esfahbod) 3766 3767 * Fix make check to work on OPD platforms (IA64 or PPC64) 3768 (Frederic Crozat) 3769 3770 * Fix a couple of character spacing issues on Windows 3771 (Jonathan Watt) 3772 3773Have fun with that, everybody, and we'll be back for more in the new 3774year, (with a plan to add the last of our performance improvements in 3775this round, fix a few bad, lingering bugs, and then finish off a nice, 3776stable 1.4 release before the end of January). 3777 3778-Carl 3779 3780Snapshot 1.3.8 (2006-12-14 Carl Worth <cworth@cworth.org>) 3781========================================================== 3782This is the fourth development snapshot in the 1.3 series. It comes 3783just slightly more than one week after the 1.3.6 snapshot. 3784 3785After the bug fixes in 1.3.6, we're back to our original program of 3786weekly snapshots, each one faster than the one from the week 3787before. Cairo 1.3.8 brings a 2x improvement in the speed of rendering 3788linear gradients (thanks to David Turner), and a significant reduction 3789in X traffic when rendering text (thanks to Xan Lopez and Behdad 3790Esfahbod), making cairo behave very much like Xft does. 3791 3792A few other things in the 1.3.8 snapshot worth noting include a more 3793forgiving image comparator in the test suite, (using the "perceptual 3794diff" metric and GPL implementation by Hector Yee[*]), a bug fix for 3795broken linking on x86_64 (thanks to M Joonas Pihlaja) and an even 3796better implementation of _cairo_lround, (not faster, but supporting a 3797more complete input range), from Daniel Amelang. 3798 3799[*] http://pdiff.sourceforge.net/ 3800 3801Snapshot 1.3.6 (2006-12-06 Carl Worth <cworth@cworth.org>) 3802========================================================== 3803This is the third development snapshot in the 1.3 series. It comes two 3804weeks after the 1.3.4 snapshot. 3805 3806We don't have fancy performance charts this week as the primary 3807changes in this snapshot are bug fixes. The performance work continues 3808and the next snapshot (planned for one week from today) should include 3809several improvements. The bug fixes in this snapshot include: 3810 3811 * Fix undesirable rounding in glyph positioning (Dan Amelang) 3812 3813 This bug was noticed by several users, most commonly by seeing 3814 improper text spacing or scrambled glyphs as drawn by nautilus. For 3815 example: 3816 3817 Update to cairo-1.3.4 worsen font rendering 3818 https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=217819 3819 3820 * Fix reduced range of valid input coordinates to tessellator 3821 (M Joonas Pihlaja) 3822 3823 This bug was causing lots of assertion failures in mozilla as 3824 mentioned here: 3825 3826 CAIRO_BO_GUARD_BITS and coordinate space? 3827 http://lists.freedesktop.org/archives/cairo/2006-December/008743.html 3828 3829 * Fix several regressions in new tessellator (M Joonas Pihlaja) 3830 3831 Joonas just had a good eye for detail here. I don't think any 3832 external cairo users had noticed any of these bugs yet. 3833 3834 * Fix compilation problems of cairo "wideint" code on some platforms 3835 (Mathieu Lacage) 3836 3837 * Fix failed configure due to broken grep (Dan Amelang) 3838 3839 This bug was reported here: 3840 3841 AX_C_FLOAT_WORDS_BIGENDIAN doesn't work because grep doesn't 3842 work with binary file 3843 https://bugs.freedesktop.org/show_bug.cgi?id=9124 3844 3845 * Remove the pkg-config minimum version requirement (Behdad Esfahbod) 3846 3847 Some systems ship with pkg-config 0.15 and there was really no good 3848 reason for cairo to insist on having version 0.19 before it would 3849 build. 3850 3851There is also one new (but inert) feature in this snapshot. There's a 3852new option that can be passed to cairo's configure script: 3853 3854 --disable-some-floating-point 3855 3856 Disable certain code paths that rely heavily on double precision 3857 floating-point calculation. This option can improve 3858 performance on systems without a double precision floating-point 3859 unit, but might degrade performance on those that do. 3860 3861As of this snapshot, this option does not make any change to cairo, 3862but it is possible that future versions of cairo will respect this 3863option and change the implementation of various functions as 3864appropriate. 3865 3866Snapshot 1.3.4 (2006-11-22 Carl Worth <cworth@cworth.org>) 3867========================================================== 3868This is the second development snapshot in the 1.3 series. It comes 3869one week after the 1.3.2 snapshot. 3870 3871This snapshot has a couple of significant performance improvements, 3872and also adds new support for producing multi-page SVG output, (when 3873targeting SVG 1.2)---thanks to Emmanuel Pacaud. The details of the 3874performance improvements are as follows: 3875 38761. The long-awaited "new tessellator". 3877 3878 The credit for this being an improvement goes to Joonas Pihlaja. He 3879 took my really slow code and really put it through its paces to get 3880 the dramatic performance improvement seen below (up to 38x faster 3881 on realistic cases, and more than 10x faster for the zrusin_another 3882 test). 3883 3884 His own writeup of the work he did is quite thorough, but more than 3885 can be quoted here. Please see his post for the interesting details: 3886 3887 http://lists.freedesktop.org/archives/cairo/2006-November/008483.html 3888 3889 (Though note that this snapshot also includes some additional, 3890 significant improvements that were only sketched out in that 3891 email---see "Generating fewer trapezoids"). 3892 38932. More floating-point improvements 3894 3895 Daniel Amelang continues to work the magic he began in the 1.3.2 3896 snapshot. This time he short-circuits floating-point 3897 transformations by identity matrices and applies the earlier 3898 floating-to-fixed-point technique to the problem of rounding. 3899 3900 The improvements here will primarily benefit text performance, and 3901 will benefit platforms without hardware floating-point more than 3902 those that have it, (some text tests show 20% improvement on an x86 3903 machine and closer to 80% improvement on arm). 3904 3905The performance chart comparing 1.3.2 to 1.3.4 really speaks for 3906itself, (this is on an x86 laptop). This is quite a lot of progress 3907for one week: 3908 3909 xlib-rgb stroke_similar_rgba_over-256 74.99 1.45% -> 2.03 68.38%: 36.86x speedup 3910███████████████████████████████████▉ 3911 xlib-rgb stroke_similar_rgba_source-256 78.23 1.43% -> 3.30 67.05%: 23.71x speedup 3912██████████████████████▊ 3913 xlib-rgba tessellate-256-100 820.42 0.15% -> 35.06 2.84%: 23.40x speedup 3914██████████████████████▍ 3915image-rgba tessellate-256-100 819.55 0.32% -> 35.04 3.56%: 23.39x speedup 3916██████████████████████▍ 3917 xlib-rgb stroke_image_rgba_over-256 78.10 1.43% -> 4.33 65.56%: 18.04x speedup 3918█████████████████ 3919 xlib-rgb stroke_image_rgba_source-256 80.11 1.63% -> 5.75 63.99%: 13.94x speedup 3920█████████████ 3921 xlib-rgba zrusin_another_tessellate-415 89.22 0.35% -> 8.38 5.23%: 10.65x speedup 3922█████████▋ 3923image-rgba zrusin_another_tessellate-415 87.38 0.89% -> 8.37 5.22%: 10.44x speedup 3924█████████▍ 3925image-rgba zrusin_another_fill-415 117.67 1.34% -> 12.88 2.77%: 9.14x speedup 3926████████▏ 3927 xlib-rgba zrusin_another_fill-415 140.52 1.57% -> 15.79 2.88%: 8.90x speedup 3928███████▉ 3929image-rgba tessellate-64-100 9.68 3.42% -> 1.42 0.60%: 6.82x speedup 3930█████▉ 3931 xlib-rgba tessellate-64-100 9.78 4.35% -> 1.45 0.83%: 6.72x speedup 3932█████▊ 3933 xlib-rgb stroke_linear_rgba_over-256 46.01 2.44% -> 7.74 54.51%: 5.94x speedup 3934█████ 3935 xlib-rgb stroke_linear_rgba_source-256 48.09 2.15% -> 9.14 53.00%: 5.26x speedup 3936████▎ 3937 xlib-rgb stroke_radial_rgba_over-256 50.96 2.34% -> 12.46 47.99%: 4.09x speedup 3938███▏ 3939 xlib-rgb stroke_radial_rgba_source-256 53.06 1.57% -> 13.96 46.57%: 3.80x speedup 3940██▊ 3941image-rgba paint_similar_rgba_source-256 0.12 1.57% -> 0.08 9.92%: 1.42x speedup 3942▍ 3943image-rgba paint_image_rgba_source-256 0.12 2.49% -> 0.08 10.70%: 1.41x speedup 3944▍ 3945image-rgba world_map-800 356.28 0.46% -> 275.72 1.15%: 1.29x speedup 3946▎ 3947 xlib-rgba world_map-800 456.81 0.39% -> 357.95 1.39%: 1.28x speedup 3948▎ 3949image-rgb tessellate-16-100 0.09 0.57% -> 0.07 3.43%: 1.23x speedup 3950▎ 3951image-rgba tessellate-16-100 0.09 0.06% -> 0.07 2.46%: 1.23x speedup 3952▎ 3953image-rgba text_solid_rgb_over-256 5.39 4.01% -> 4.47 0.70%: 1.21x speedup 3954▎ 3955image-rgba text_solid_rgba_over-256 5.37 0.82% -> 4.45 0.75%: 1.21x speedup 3956▎ 3957image-rgba text_image_rgb_over-64 0.78 0.10% -> 0.65 0.74%: 1.20x speedup 3958▎ 3959image-rgba text_image_rgba_over-64 0.78 0.29% -> 0.65 0.68%: 1.19x speedup 3960▎ 3961image-rgb text_solid_rgb_over-64 0.76 2.45% -> 0.63 0.81%: 1.19x speedup 3962▎ 3963image-rgba text_solid_rgba_over-64 0.76 0.33% -> 0.64 0.66%: 1.19x speedup 3964▎ 3965image-rgba text_similar_rgba_over-256 5.99 4.72% -> 5.04 1.09%: 1.19x speedup 3966▎ 3967 3968We should point out that there is some potential for slowdown in this 3969snapshot. The following are the worst slowdowns reported by the cairo 3970performance suite when comparing 1.3.2 to 1.3.4: 3971 3972image-rgba subimage_copy-256 0.01 0.87% -> 0.01 3.61%: 1.45x slowdown 3973▌ 3974 xlib-rgb paint_solid_rgb_over-256 0.31 10.23% -> 0.38 0.33%: 1.26x slowdown 3975▎ 3976image-rgba box-outline-fill-100 0.01 0.30% -> 0.01 2.52%: 1.21x slowdown 3977▎ 3978image-rgba fill_solid_rgb_over-64 0.20 1.22% -> 0.22 1.59%: 1.12x slowdown 3979▏ 3980image-rgb fill_similar_rgb_over-64 0.21 1.04% -> 0.24 1.06%: 1.11x slowdown 3981▏ 3982image-rgba fill_image_rgb_over-64 0.21 1.19% -> 0.24 0.72%: 1.11x slowdown 3983▏ 3984image-rgba fill_similar_rgb_over-64 0.21 0.18% -> 0.24 0.30%: 1.11x slowdown 3985▏ 3986image-rgb fill_solid_rgba_over-64 0.22 1.66% -> 0.24 1.15%: 1.11x slowdown 3987▏ 3988image-rgb fill_image_rgb_over-64 0.21 0.14% -> 0.24 0.80%: 1.11x slowdown 3989▏ 3990image-rgba fill_image_rgba_over-64 0.22 1.34% -> 0.25 0.20%: 1.11x slowdown 3991▏ 3992image-rgba fill_solid_rgba_over-64 0.22 1.48% -> 0.24 0.95%: 1.11x slowdown 3993▏ 3994image-rgb fill_similar_rgba_over-64 0.22 1.13% -> 0.25 1.25%: 1.10x slowdown 3995▏ 3996 3997The 45% slowdown for subimage_copy is an extreme case. It's unlikely 3998to hit many applications unless they often use cairo_rectangle; 3999cairo_fill to copy a single pixel at a time. In any case, it shows a 4000worst-case impact of the overhead of the new tessellator. The other 4001slowdowns (~ 10%) are probably more realistic, and still very 4002concerning. 4003 4004We will work to ensure that performance regressions like these are not 4005present from one major release of cairo to the next, (for example, 4006from 1.2 to 1.4). 4007 4008But we're putting this 1.3.4 snapshot out there now, even with this 4009potential slowdown so that people can experiment with it. If you've 4010got complex geometry, we hope you will see some benefit from the new 4011tessellator. If you've got primarily simple geometry, we hope things 4012won't slowdown too much, but please let us know what slowdown you see, 4013if any, so we can calibrate our performance suite against real-world 4014impacts. 4015 4016Thanks, and have fun with cairo! 4017 4018Snapshot 1.3.2 (2006-11-14 Carl Worth <cworth@cworth.org>) 4019========================================================== 4020This is the first development snapshot since the 1.2 stable series 4021branched off shortly after the 1.2.4 release in August 2006. 4022 4023This snapshot includes all the bug fixes from the 1.2.6 release, 4024(since they originated here on the 1.3 branch first and were 4025cherry-picked over to 1.2). But more importantly, it contains some new 4026API in preparation for a future 1.4 release, and most importantly, it 4027contains several performance improvements. 4028 4029The bug fixes will not be reviewed here, as most of them are already 4030described in the 1.2.6 release notes. But details for the new API and 4031some performance improvements are included here. 4032 4033As with all snapshots, this is experimental code, and the new API 4034added here is still experimental and is not guaranteed to appear 4035unchanged in any future release of cairo. 4036 4037API additions 4038------------- 4039Several new API additions are available in this release. There is a 4040common theme among all the additions in that they allow cairo to 4041advertise information about its state that it was refusing to 4042volunteer earlier. So this isn't groundbreaking new functionality, but 4043it is essential for easily achieving several tasks. 4044 4045The new functions can be divided into three categories: 4046 4047 Getting information about the current clip region 4048 ------------------------------------------------- 4049 cairo_clip_extents 4050 cairo_copy_clip_rectangles 4051 cairo_rectangle_list_destroy 4052 4053 Getting information about the current dash setting 4054 -------------------------------------------------- 4055 cairo_get_dash_count 4056 cairo_get_dash 4057 4058 Getting information from a pattern 4059 ---------------------------------- 4060 cairo_pattern_get_rgba 4061 cairo_pattern_get_surface 4062 cairo_pattern_get_color_stop_rgba 4063 cairo_pattern_get_color_stop_count 4064 cairo_pattern_get_linear_points 4065 cairo_pattern_get_radial_circles 4066 4067In each of these areas, we have new API for providing a list of 4068uniform values from cairo. The closest thing we had to this before was 4069cairo_copy_path, (which is rather unique in providing a list of 4070non-uniform data). 4071 4072The copy_clip_rectangles/rectangle_list_destroy functions follow a 4073style similar to that of cairo_copy_path. Meanwhile, the dash and 4074pattern color stop functions introduce a new style in which there is a 4075single call to return the number of elements available (get_dash_count 4076and get_color_stop_count) and then a function to be called once to get 4077each element (get_dash and get_color_stop_rgba). 4078 4079I'm interested in hearing feedback from users of these new API 4080functions, particularly from people writing language bindings. One 4081open question is whether the clip "getter" functionality should adopt 4082a style similar to that of the new dash and color_stop interfaces. 4083 4084API deprecation 4085--------------- 4086The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never 4087worked as a format value for cairo_image_surface_create, and it wasn't 4088necessary for supporting 16-bit 565 X server visuals. 4089 4090XCB backend changes 4091------------------- 4092The XCB backend has been updated to track the latest XCB API (which 4093recently had a 1.0 release). 4094 4095New quartz backend 4096------------------ 4097Vladimir Vukicevic has written a new "native quartz" backend which 4098will eventually replace the current "image-surface wrapping" quartz 4099backend. For now, both backends are available, (the old one is 4100"quartz" and the new one is "nquartz"). But it is anticipated that the 4101new backend will replace the old one and take on the "quartz" name 4102before this backend is marked as supported in a release of cairo. 4103 4104New OS/2 backend 4105---------------- 4106Doodle and Peter Weilbacher have contributed a new, experimental 4107backend for using cairo on OS/2 systems. 4108 4109Performance improvements 4110------------------------ 4111Here are some highlights from cairo's performance suite showing 4112improvements from cairo 1.2.6 to cairo 1.3.2. The command used to 4113generate this data is: 4114 4115 ./cairo-perf-diff 1.2.6 HEAD 4116 4117available in the perf/ directory of a recent checkout of cairo's 4118source, (the cairo-perf-diff script does require a git checkout and 4119will not work from a tar file---though ./cairo-perf can still be used 4120to generate a single report there and ./cairo-perf-diff-files can be 4121used to compare two reports). 4122 4123Results are described below both for an x86 laptop (with an old Radeon 4124video card, recent X.org build, XAA, free software drivers), as well 4125as for a Nokia 770. First the x86 results with comments on each, (all 4126times are reported in milliseconds). 4127 4128Copying subsets of an image surface to an xlib surface (much faster) 4129-------------------------------------------------------------------- 4130 xlib-rgba subimage_copy-512 10.50 -> : 53.97x speedup 4131█████████████████████████████████████████████████████ 4132 4133Thanks to Christopher (Monty) Montgomery for this big performance 4134improvement. Any application which has a large image surface and is 4135copying small pieces of it at a time to an xlib surface, (imagine an 4136application that loads a single image containing all the "sprites" for 4137that application), will benefit from this fix. The larger the ratio of 4138the image surface to the portion being copied, the larger the benefit. 4139 4140Floating-point conversion (3x faster) 4141------------------------------------- 4142 xlib-rgba pattern_create_radial-16 27.75 -> 3.93 : 2.94x speedup 4143██ 4144image-rgb pattern_create_radial-16 26.06 -> 3.74 : 2.90x speedup 4145█▉ 4146 4147Thanks to Daniel Amelang, (and others who had contributed the idea 4148earlier), for this nice improvement in the speed of converting 4149floating-point values to fixed-point. 4150 4151Text rendering (1.3 - 2x faster) 4152------------------------------ 4153 xlib-rgba text_image_rgba_source-256 319.73 -> 62.40 : 2.13x speedup 4154█▏ 4155image-rgb text_solid_rgba_over-64 2.85 -> 0.88 : 1.35x speedup 4156▍ 4157 4158I don't think we've ever set out to improve text performance 4159specifically, but we did it a bit anyway. I believe the extra 4160improvement in the xlib backend is due to Monty's image copying fix 4161above, and the rest is due to the floating-point conversion speedup. 4162 4163Thin stroke improvements (1.5x faster) 4164--------------------------------------------- 4165image-rgb world_map-800 1641.09 -> 414.77 : 1.65x speedup 4166▋ 4167 xlib-rgba world_map-800 1939.66 -> 529.94 : 1.52x speedup 4168▌ 4169 4170The most modest stuff to announce in this release is the 50% 4171improvement I made in the world_map case. This is in improvement that 4172should help basically anything that is doing strokes with many 4173straight line segments, (and the thinner the better, since that makes 4174tessellation dominate rasterization). The fixes here are to use a 4175custom quadrilateral tessellator rather than the generic tessellator 4176for straight line segments and the miter joins. 4177 4178Performance results from the Nokia 770 4179-------------------------------------- 4180 xlib-rgba subimage_copy-512 55.88 -> 2.04 : 27.34x speedup 4181██████████████████████████▍ 4182 xlib-rgb text_image_rgb_over-256 1487.58 -> 294.43 : 5.05x speedup 4183████ 4184image-rgb pattern_create_radial-16 187.13 -> 91.86 : 2.04x speedup 4185█ 4186 xlib-rgba world_map-800 21261.41 -> 15628.02 : 1.36x speedup 4187▍ 4188 4189Here we see that the subimage_copy improvement was only about half as 4190large as the corresponding improvement on my laptop, (27x faster 4191compared to 54x) and the floating-point conversion fix also was quite 4192as significant, (2x compared to 3x). Oddly the improvement to text 4193rendering performance was more than twice as good (5x compared to 41942x). I don't know what the reason for that is, but I don't think it's 4195anything anybody should complain about. 4196 4197Release 1.2.6 (2006-11-02 Behdad Esfahbod <behdad@behdad.org>) 4198============================================================== 4199This is the third bug fix release in the 1.2 series, coming less than 4200two months after the 1.2.4 release made on August 18. 4201 4202The 1.2.4 release turned out to be a pretty solid one, except for a crasher 4203bug when forwarding an X connection where the client and the server have 4204varying byte orders, eg. from a PPC to an i686. Other than that, various 4205other small bugs have been fixed. 4206 4207Various improvements have been made in the testing infrastructure to prevent 4208false positives, and to make sure the generated cairo shared object behaves as 4209expected in terms of exported symbols and relocations. 4210 4211There were a total of 89 changes since 1.2.4. The following list the most 4212important ones: 4213 4214Common fixes 4215------------ 4216- Avoid unsigned loop control variable to eliminate infinite, 4217 memory-scribbling loop. (#7593) 4218- Fix cairo_image_surface_create to report INVALID_FORMAT errors. 4219 Previously the detected error was being lost and a nil surface was 4220 returned that erroneously reported CAIRO_STATUS_NO_MEMORY. 4221- Change _cairo_color_compute_shorts to not rely on any particular 4222 floating-point epsilon value. (#7497) 4223- Fix infinite-join test case (bug #8379) 4224- Pass correct surface to create_similar in _cairo_clip_init_deep_copy(). 4225 4226PS/PDF fixes 4227------------ 4228- Fix Type 1 embedding in PDF. 4229- Correct the value of /LastChar in the PDF Type 1 font dictionary. 4230- Improve error checking in TrueType subsetting. 4231- Compute right index when looking up left side bearing. (bug #8180) 4232- Correct an unsigned to signed conversion problem in truetype subsetting 4233 bbox. 4234- Type1 subsetting: Don't put .notdef in Encoding when there are 256 glyphs. 4235- Add cairo version to PS header / PDF document info dictionary. 4236- Set CTM before path construction. 4237 4238Win32 fixes 4239----------- 4240- Get correct unhinted outlines on win32. (bug 7603) 4241- Make cairo as a win32 static library possible. 4242- Use CAIRO_FORMAT_RGB24 for BITSPIXEL==32 surfaces too. 4243 4244Build system fixes 4245------------------ 4246- Define WINVER if it's not defined. (bug 6456) 4247- Fix the AMD64 final link by removing SLIM from pixman. 4248- Misc win32 compilation fixes. 4249- Add Sun Pro C definition of pixman_private. 4250- Use pixman_private consistently as prefix not suffix. 4251- Added three tests check-plt.sh, check-def.sh, and check-header.sh that check 4252 that the shared object, the .def file, and the public headers agree about 4253 the exported symbols. 4254- Require pkg-config 0.19. (#8686) 4255 4256 4257Release 1.2.4 (2006-08-18 Carl Worth <cworth@cworth.org>) 4258========================================================= 4259This is the second bug fix release in the 1.2 series, coming less than 4260two weeks after the 1.2.2 release made on August 8. 4261 4262The big motivation for a quick release was that there were a log of 4263build system snags that people ran into with the 1.2.2 release. But, 4264by the time we got those all done, we found that we had a bunch of 4265fixes for cairo's rendering as well. So there's a lot of goodness in 4266here for such a short time period. 4267 4268Rendering fixes 4269--------------- 4270Fix image surfaces to not be clipped when used as a source (Vladimir Vukicevic) 4271http://gitweb.freedesktop.org/?p=cairo;a=commit;h=72e25648c4c4bc82ddd938aa4e05887a293f0d8b 4272 4273Fix a couple of corner cases in dashing degenerate paths (Jeff Muizelaar) 4274http://gitweb.freedesktop.org/?p=cairo;a=commit;h=fbb1758ba8384650157b2bbbc93d161b0c2a05f0 4275 4276Fix support for type1 fonts on win32 (Adrian Johnson) 4277http://gitweb.freedesktop.org/?p=cairo;a=commit;h=da1019c9138695cb838a54f8b871bbfd0e8996d7 4278 4279Fix assertion failure when rotating bitmap fonts (Carl Worth) 4280http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0bfa6d4f33b8ddb5dc55bbe419c15df4af856ff9 4281 4282Fix assertion failure when calling cairo_text_path with bitmap fonts (Carl Worth) 4283http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9878a033531e6b96b5f27e69e10e90dee7440cd9 4284 4285Fix mis-handling of cairo_close_path in some situations (Tim Rowley, Carl Worth) 4286http://gitweb.freedesktop.org/?p=cairo;a=commit;h=53f74e59faf1af78f2f0741ccf1f23aa5dad4efc 4287 4288Respect font_matrix translation in _cairo_gstate_glyph_path (Behdad Esfahbod) 4289http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f183b835b111d23e838889178aa8106ec84663b3 4290 4291Fix vertical metrics adjustment to work with non-identity shapes (Behdad Esfahbod) 4292http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7bc263842a798d657a95e539e1693372448837f 4293 4294[PS] Set correct ImageMatrix in _cairo_ps_surface_emit_bitmap_glyph_data (Behdad Esfahbod) 4295http://gitweb.freedesktop.org/?p=cairo;a=commit;h=d47388ad759b0a1a0869655a87d9b5eb6ae2445d 4296 4297Build system fixes 4298------------------ 4299Fix xlib detection to prefer pkg-config to avoid false libXt dependency (Behdad Esfahbod) 4300http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0e78e7144353703cbd28aae6a67cd9ca261f1d68 4301 4302Fix typos causing win32 build problem with PS,PDF, and SVG backends (Behdad Esfahbod) 4303http://gitweb.freedesktop.org/?p=cairo;a=commit;h=aea83b908d020e26732753830bb3056e6702a774 4304 4305Fix configure cache to not use stale results (Behdad Esfahbod) 4306http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6d0e3260444a2d5b6fb0cb223ac79f1c0e7b3a6e 4307 4308Fix to not pass unsupported warning options to the compiler (Jens Granseuer) 4309http://gitweb.freedesktop.org/?p=cairo;a=commit;h=97524a8fdb899de1ae4a3e920fb7bda6d76c5571 4310 4311Fix to allow env. variables such as png_REQUIRES to override configure detection (Jens Granseuer) 4312http://gitweb.freedesktop.org/?p=cairo;a=commit;h=abd16e47d6331bd3811c908e524b4dcb6bd23bf0 4313 4314Fix test suite to not use an old system cairo when converting svg2png (Behdad Esfahbod) 4315http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6122cc85c8f71b1ba2df3ab86907768edebe1781 4316 4317Fix test suite to not require signal.h to be present (Behdad Esfahbod) 4318http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6f8cf53b1e1ccdbe1ab6a275656b19c6e5120e40 4319 4320Code cleanups 4321------------- 4322Many useful warnings cleanups from sparse, valgrind, and careful eyes 4323(Kjartan Maraas, Pavel Roskin) 4324 4325Release 1.2.2 (2006-08-08 Carl Worth <cworth@cworth.org>) 4326========================================================= 4327This is the first bug fix release in the 1.2 series since the original 43281.2.0 release made six weeks ago. 4329 4330There were some very serious bugs in the 1.2.0 release, (see below), 4331so everybody is encouraged to upgrade from 1.2.0 to 1.2.2. The 1.2.2 4332release maintains source and binary compatibility with 1.2.0 and does 4333not make any API additions. 4334 4335Fix crashes with BGR X servers 4336------------------------------ 4337With cairo 1.2.0 many people reported problems with all cairo-using 4338programs, (including all GTK+ programs with GTK+ >= 2.8) immediately 4339crashing with a complaint about an unsupported image format. This bug 4340affected X servers that do not provide the Render extension and that 4341provide a visual with BGR rather than RGB channel order. 4342 4343report: https://bugs.freedesktop.org/show_bug.cgi?id=7294 4344fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9ae66174e774b57f16ad791452ed44efc2770a59 4345 4346Fix the "disappearing text" bug 4347------------------------------- 4348With cairo 1.2.0 many people reported that text would disappear from 4349applications, sometimes reappearing with mouse motion or 4350selection. The text would disappear after the first space in a string 4351of text. This bug was caused by an underlying bug in (very common) X 4352servers, and only affected text rendered without antialiasing, (either 4353a bitmap font or a vector font with antialiasing disabled). The bug 4354was also exacerbated by a KDE migration bug that caused antialiasing 4355to be disabled more than desired. 4356 4357report: https://bugs.freedesktop.org/show_bug.cgi?id=7494 4358fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=456cdb3058f3b416109a9600167cd8842300ae14 4359see also: 4360Xorg: https://bugs.freedesktop.org/show_bug.cgi?id=7681 4361KDE: http://qa.mandriva.com/show_bug.cgi?id=23990 4362 4363Fix broken image fallback scaling (aka. "broken printing") 4364---------------------------------------------------------- 4365The various "print" backends, (pdf, ps, and svg), sometimes fallback 4366to using image-based rendering for some operations. In cairo 1.2.0 4367these image fallbacks were scaled improperly. Applications using cairo 4368can influence the resolution of the image fallbacks with 4369cairo_surface_set_fallback_resolution. With the bug, any value other 4370than 72.0 would lead to incorrect results, (larger values would lead 4371to increasingly shrunken output). 4372 4373report: https://bugs.freedesktop.org/show_bug.cgi?id=7533 4374fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=1feb4291cf7813494355459bb547eec604c54ffb 4375 4376Fix inadvertent semantic change of font matrix translation (Behdad Esfahbod) 4377---------------------------------------------------------------------------- 4378The 1.2.0 release introduced an inadvertent change to how the 4379translation components of a font matrix are interpreted. In the 1.0 4380series, font matrix translation could be used to offset the glyph 4381origin, (though glyph metrics were reported incorrectly in 43821.0). However in 1.2.0, the translation was applied to the advance 4383values between each glyph. The 1.2.0 behavior is fairly useless in 4384practice, and it was not intentional to introduce a semantic 4385change. With 1.2.2 we return to the 1.0 semantics, with a much better 4386implementation that provides correct glyph metrics. 4387 4388fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=84840e6bba6e72aa88fad7a0ee929e8955ba9051 4389 4390Fix create_similar to preserve fallback resolution and font options (Behdad Esfahbod) 4391------------------------------------------------------------------------------------- 4392There has been a long-standing issue with cairo_surface_create_similar 4393such that font options and other settings from the original 4394destination surface would not be preserved to the intermediate 4395"similar" surface. This could result in incorrect rendering 4396(particularly with respect to text hinting/antialiasing) with 4397fallbacks, for example. 4398 4399report: https://bugs.freedesktop.org/show_bug.cgi?id=4106 4400fixes: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9fcb3c32c1f16fe6ab913e27eb54d18b7d9a06b0 4401 http://gitweb.freedesktop.org/?p=cairo;a=commit;h=bdb4e1edadb78a2118ff70b28163f8bd4317f1ec 4402 4403xlib: Fix text performance regression from 1.0 to 1.2.0 (Vladimir Vukicevic) 4404---------------------------------------------------------------------------- 4405Several people noticed that upgrading from cairo 1.0 to cairo 1.2.0 4406caused a significant performance regression when using the xlib 4407backend. This performance regression was particularly noticeable when 4408doing lots of text rendering and when using a high-latency connection 4409to the X server, (such as a remote X server over an ssh 4410connection). The slowdown was identified and fixed in 1.2.2. 4411 4412report: https://bugs.freedesktop.org/show_bug.cgi?id=7514 4413fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7191885c88068dad57d68ced69a752d1162b12c 4414 4415PDF: Eliminate dependency on FreeType library dependency (Adrian Johnson) 4416------------------------------------------------------------------------- 4417The cairo 1.2 series adds a supported pdf backend to cairo. In cairo 44181.2.0 this backend required the freetype library, which was an 4419undesirable dependency on systems such as win32, (cairo is designed to 4420always prefer the "native" font system). As of cairo 1.2.2 the 4421freetype library is not required to use the pdf backend on the win32 4422platform. 4423 4424report: https://bugs.freedesktop.org/show_bug.cgi?id=7538 4425fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=a0989f427be87c60415963dd6822b3c5c3781691 4426 4427PDF: Fix broken output on amd64 (Adrian Johnson) 4428------------------------------------------------ 4429report: http://bugzilla.gnome.org/show_bug.cgi?id=349826 4430fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f4b12e497b7ac282b2f6831b8fb68deebc412e60 4431 4432PS: Fix broken output for truetype fonts > 64k (Adrian Johnson) 4433--------------------------------------------------------------- 4434fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=067d97eb1793a6b0d0dddfbd0b54117844511a94 4435 4436PDF: Fix so that dashing doesn't get stuck on (Kent Worsnop) 4437------------------------------------------------------------ 4438Kent notices that with the PDF backend in cairo 1.2.0 as soon as a 4439stroke was performed with dashing, all subsequent strokes would also 4440be dashed. There was no way to turn dashing off again. 4441 4442fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=778c4730a86296bf0a71080cf7008d7291792256 4443 4444Fix memory leaks in failure paths in gradient creation (Alfred Peng) 4445-------------------------------------------------------------------- 4446fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=db06681b487873788b51a6766894fc619eb8d8f2 4447 4448Fix memory leak in _cairo_surface_show_glyphs (Chris Wilson) 4449------------------------------------------------------------ 4450report: https://bugs.freedesktop.org/show_bug.cgi?id=7766 4451fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e2fddcccb43d06486d3680a19cfdd5a54963fcbd 4452 4453Solaris: Add definition of cairo_private for some Sun compilers (Alfred Peng) 4454----------------------------------------------------------------------------- 4455report: https://bugzilla.mozilla.org/show_bug.cgi?id=341874 4456fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=04757a3aa8deeff3265719ebe01b021638990ec6 4457 4458Solaris: Change version number of Sun's Xorg server with buggy repeat (Brian Cameron) 4459------------------------------------------------------------------------------------- 4460report: https://bugs.freedesktop.org/show_bug.cgi?id=7483 4461fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e0ad1aa995bcec4246c0b8ab0d5a5a79871ce235 4462 4463Various memory leak fixes 4464------------------------- 4465Fix memory leak in _cairo_surface_show_glyphs (bug 7766) 4466Fix file handle leak in failure path (bug 7616) 4467Fix some memory leaks in the test cases. 4468Fix some memory leaks in font subsetting code used in print backends. 4469 4470Documentation improvements (Behdad Esfahbod) 4471-------------------------------------------- 4472Added new documentation for several functions (cairo_show_page, 4473cairo_copy_page, cairo_in_stroke, cairo_in_fill). 4474 4475Fixed some syntax errors that were preventing some existing 4476documentation from being published. 4477 4478Fixed several minor typographical errors. 4479 4480Added an index for new symbols in 1.2. 4481 4482Release 1.2.0 (2006-06-27 Carl Worth <cworth@cworth.org>) 4483========================================================= 4484This is the culmination of the work that has gone on within the 1.1 4485branch of cairo. 4486 4487There has been one API addition since the cairo 1.1.10 snapshot: 4488 4489 cairo_xlib_surface_get_width 4490 cairo_xlib_surface_get_height 4491 4492There's also a new feature without any API change: 4493 4494 Dots can now be drawn by using CAIRO_LINE_CAP_ROUND with 4495 degenerate sub-paths, (cairo_move_to() followed by either 4496 cairo_close_path() or a cairo_line_to() to the same location). 4497 4498And at least the following bugs have been fixed: 4499 4500 6759 fontconfig option AntiAlias doesn't work in cairo 1.1.2 4501 6955 Some characters aren't displayed when using xlib (cache u... 4502 7268 positive device_offset values don't work as source 4503 * PDF emit_glyph function needs to support bitmapped glyphs 4504 * PS emit_glyph function needs to support bitmapped glyphs 4505 * SVG emit_glyph function needs to support bitmapped glyphs 4506 * PDF: minefield page one is falling back unnecessarily 4507 * PS/PDF: Fix broken placement for vertical glyphs 4508 * PS: Fix to not draw BUTT-capped zero-length dash segments 4509 * Do device offset before float->fixed conversion 4510 http://bugzilla.gnome.org/show_bug.cgi?id=332266 4511 * PS: Fix source surfaces with transformations 4512 * PS: Fix to not draw BUTT-capped degnerate sub-paths 4513 * PS: Don't walk off end of array when printing "~>" 4514 * Fix some memory leaks in the test suite rig 4515 * SVG: Fix memory leak when using cairo_mask 4516 * Fix EXTEND_REFLECT and EXTEND_PAD to not crash (though these are 4517 still not yet fully implemented for surface patterns). 4518 4519This has been a tremendous effort by everyone, and I'm proud to have 4520been a part of it. Congratulations to all contributors to cairo! 4521 4522Snapshot 1.1.10 (2006-06-16 Carl Worth <cworth@cworth.org>) 4523=========================================================== 4524This is the fifth in a series of snapshots working toward the 1.2 4525release of cairo. 4526 4527The primary motivation for this snapshot is to fix a long-standing bug 4528that had long been silent, but as of the 1.1.8 snapshot started 4529causing crashes when run against 16-bit depth X servers, (often Xvnc 4530or Xnest). The fix for this adds a new CAIRO_FORMAT_RGB16_565 to the 4531API. 4532 4533This snapshot also includes a rewrite of cairo's SVG backend to 4534eliminate the dependency on libxml2. With this in place, cairo 1.2 4535will not depend on any libraries that cairo 1.0 did not. 4536 4537As usual, there are also a few fixes for minor bugs. 4538 4539Snapshot 1.1.8 (2006-06-14 Carl Worth <cworth@cworth.org>) 4540========================================================== 4541This is the fourth in a series of snapshots working toward the 1.2 4542release of cairo. At this point, all major features of the 1.2 release 4543are in place, leaving just a few bug fixes left. 4544 4545In particular, there well be no additional API changes between this 45461.1.8 snapshot and the 1.2 release. 4547 4548The announcement for 1.1.6 mentioned several API changes being 4549considered. Only one of these changes was actually implemented 4550(set_dpi -> fallback_resolution). This change does introduce one 4551source-level incompatibility with respect to previous 1.1.x snapshots, 4552so see below for details. 4553 4554Here is an abbreviated summary of changes since the 1.1.6 snapshot: 4555 4556** API Change ** 4557---------------- 4558According to the plan mentioned in the 1.1.6 notes, one source-level 4559incompatible change has been implemented. The following three 4560functions have been removed from cairo's API: 4561 4562 cairo_pdf_surface_set_dpi 4563 cairo_ps_surface_set_dpi 4564 cairo_svg_surface_set_dpi 4565 4566and in their place the following function has been added: 4567 4568 cairo_surface_set_fallback_resolution 4569 4570The signature and semantics of the function remains the same, so it is 4571a simple matter of changing the name of the function when calling 4572it. As a transition mechanism, this snapshot will (on many systems) 4573build to include the old symbols so that code previously compiled will 4574still run. However, all source code using the old names must be 4575updated before it will compile. And the upcoming 1.2 release is not 4576anticipated to include the old symbols. 4577 4578Finally, it should be pointed out that the old symbols never existed 4579in the supported API of any stable release of cairo. (In the stable 45801.0 releases the PDF, PS, and SVG backends were advertised as 4581experimental and unstable.) 4582 4583And, as always, cairo continues to maintain source and binary 4584compatibility between major releases. So applications compiled against 4585supported backends in a stable release of cairo (1.0.4 say) will 4586continue to compile and run without modification against new major 4587releases (1.2.0 say) without modification. 4588 4589API additions 4590------------- 4591The following new functions have been added to cairo's API: 4592 4593 cairo_surface_get_content 4594 cairo_debug_reset_static_data 4595 cairo_image_surface_get_data 4596 cairo_image_surface_get_format 4597 cairo_image_surface_get_stride 4598 cairo_win32_font_face_create_for_hfont 4599 4600New, backend-specific pkg-config files 4601-------------------------------------- 4602In addition to the original cairo.pc file, cairo will also now install 4603a pkg-config files for each configured backend, (for example 4604cairo-pdf.pc, cairo-svg.pc, cairo-xlib.pc, cairo-win32.pc, etc.) this 4605also includes optional font backends (such as cairo-ft.pc) and the 4606optional png functionality (cairo-png.pc). 4607 4608These new pkg-config files should be very convenient for allowing 4609cairo-using code to easily check for the existing of optional 4610functionality in cairo without having to write complex rules to grub 4611through cairo header files or the compiled library looking for 4612symbols. 4613 4614Printing backend (PS, PDF, and SVG) 4615----------------------------------- 4616Improving the quality of the "printing" backends has been a priority 4617of the development between cairo 1.1.6 and cairo 1.1.8. 4618 4619The big improvement here is in the area of text output. Previously, at 4620best, text was output as paths without taking advantage of any font 4621support available in the output file format. 4622 4623Now, at the minimum text paths will be shared by using type3 fonts 4624(for PS and PDF---and similarly, defs for SVG). Also, if possible, 4625type3 and truetype fonts will be embedded in PostScript and PDF 4626output. There are still some known bugs with this, (for example, 4627selecting text in a cairo-generated PDF file with an embedded truetype 4628font does not work). So there will be some more changes in this area 4629before cairo 1.2, but do try test this feature out as it exists so 4630far. 4631 4632Many thanks to Kristian Høgsberg for the truetype and type1 font 4633embedding. 4634 4635win32 backend 4636------------- 4637Performance improvements by preferring GDI over pixman rendering when possible. 4638Fixes for text rendering. 4639 4640xlib backend 4641------------ 4642Fix potentially big performance bug by making xlib's create_similar 4643try harder to create a pixmap of a depth matching that of the screen. 4644 4645Bug fixes 4646--------- 4647Among various other fixes, the following bugs listed in bugzilla have 4648been fixed: 4649 4650 Bug 2488: Patch to fix pixman samping location bug (#2488). 4651 https://bugs.freedesktop.org/show_bug.cgi?id=2488 4652 4653 Bug 4196: undef MIN an MAX before defining to avoid duplicate definition 4654 https://bugs.freedesktop.org/show_bug.cgi?id=4196 4655 4656 Bug 4723: configure.in: Fix m4 quoting when examining pkg-config version 4657 https://bugs.freedesktop.org/show_bug.cgi?id=4723 4658 4659 Bug 4882: Flag Sun's X server has having buggy_repeat. 4660 https://bugs.freedesktop.org/show_bug.cgi?id=4882 4661 4662 Bug 5306: test/pdf2png: Add missing include of stdio.h 4663 https://bugs.freedesktop.org/show_bug.cgi?id=5306 4664 4665 Bug 7075: Fix make clean to remove cairo.def 4666 https://bugs.freedesktop.org/show_bug.cgi?id=7075 4667 4668(Many thanks to Behdad Esfahbod for helping us track down and fix many 4669of these.) 4670 4671Snapshot 1.1.6 (2006-05-04 Carl Worth <cworth@cworth.org>) 4672========================================================== 4673This is the third in a series of snapshots working toward the imminent 46741.2 release of cairo. For a list of items still needing work on the 4675cairo 1.2 roadmap, please see: 4676 4677 http://cairographics.org/ROADMAP 4678 4679As can be seen in that list, there are no longer any API additions 4680left on the roadmap. Instead, there is a feature (PDF type 3 fonts) a 4681performance optimization (X server gradients) and a list of bug 4682fixes. This gives us a fair amount of freedom to cut the 1.2 release 4683at almost any point by deciding to defer remaining bug fixes to 4684subsequent maintenance releases such as 1.2.2 and 1.2.4. 4685 4686Before we will do that, we must first be wiling to commit to all the 4687new API additions. As a heads-up, there are a couple of potential API 4688changes being considered. (Note that these are changes to new API 4689introduced during 1.1 so these will not introduce API 4690incompatibilities compared to the stable 1.0 series). The changes 4691being considered are: 4692 4693 cairo_get_group_target: may acquire x and y offset return 4694 parameters. May also be eliminated in favor of 4695 cairo_get_target assuming its role 4696 4697 cairo_pdf_surface_set_dpi: 4698 cairo_ps_surface_set_dpi: 4699 cairo_svg_surface_set_dpi: These functions may be removed in favor 4700 of a new cairo_surface_set_fallback_resolution 4701 4702Additionally there is the possibility of a slight change in the 4703semantics of cairo_set_line_width. We believe the current behavior of the sequence: 4704 4705 cairo_set_line_width; ... change CTM ...; cairo_stroke; 4706 4707is buggy. It is currently behaving the same as: 4708 4709 ... change CTM ...; cairo_set_line_width; cairo_stroke; 4710 4711We are considering fixing this bug before 1.2 with the hope that 4712nobody is already relying on the buggy behavior described here. Do 4713shout if you suspect you might be in that position. 4714 4715The items included in this snapshot (since the 1.1.4 snapshot) are 4716described below. 4717 4718API additions 4719------------- 4720The long-awaited group-rendering support is now available with the 4721following function calls: 4722 4723 cairo_push_group 4724 cairo_push_group_with_content 4725 cairo_pop_group 4726 cairo_pop_group_to_source 4727 cairo_get_group_target 4728 4729This API provides a much more convenient mechanism for doing rendering 4730to an intermediate surface without the need to manually create a 4731temporary cairo_surface_t and a temporary cairo_t and clean them up 4732afterwards. 4733 4734Add the following missing get function to complement 4735cairo_surface_set_device_offset: 4736 4737 cairo_surface_get_device_offset 4738 4739PDF backend (API addition) 4740-------------------------- 4741The PDF backend now provides for per-page size changes, (similar to 4742what the PostScript backend got in the 1.1.4 snapshot). The new API 4743is: 4744 4745 cairo_pdf_surface_set_size 4746 4747Xlib backend (API additions) 4748---------------------------- 4749The following functions have been added to allow the extraction of 4750Xlib surface: 4751 4752 cairo_xlib_surface_get_display 4753 cairo_xlib_surface_get_drawable 4754 cairo_xlib_surface_get_screen 4755 cairo_xlib_surface_get_visual 4756 cairo_xlib_surface_get_depth 4757 4758XCB backend (experimental) 4759-------------------------- 4760Update backend so that it now compiles with the recent XCB 0.9 release. 4761 4762Bug fixes and memory leak cleanup 4763--------------------------------- 4764Various little things, nothing too significant though. 4765 4766Snapshot 1.1.4 (2006-05-03 Carl Worth <cworth@cworth.org>) 4767========================================================== 4768This is the second in a series of snapshots working toward the 4769upcoming 1.2 release of cairo. For a list of items still needing work 4770on the cairo 1.2 roadmap, please see: 4771 4772 http://cairographics.org/ROADMAP 4773 4774The items included in this snapshot (since the 1.1.2 snapshot) are 4775described below. 4776 4777PostScript backend: new printing-oriented API 4778--------------------------------------------- 4779We anticipate that with cairo 1.2, toolkits will begin to use cairo 4780for printing on systems that use PostScript as the spool format. To 4781support this use case, we have added 4 new function calls that are 4782specific to the PostScript backend: 4783 4784 cairo_ps_surface_set_size 4785 cairo_ps_surface_dsc_comment 4786 cairo_ps_surface_dsc_begin_setup 4787 cairo_ps_surface_dsc_begin_page_setup 4788 4789These functions allow variation of the page size/orientation from one 4790page to the next in the PostScript output. They also allow the toolkit 4791to provide per-document and per-page printer control options in a 4792device-independent way, (for example, by using PPD options and 4793emitting them as DSC comments into the PostScript output). This should 4794allow toolkits to provide very fine-grained control of many options 4795available in printers, (media size, media type, tray selection, etc.). 4796 4797SVG backend: builds by default, version control 4798----------------------------------------------- 4799The SVG backend continues to see major improvements. It is expected 4800that the SVG backend will be a supported backend in the 1.2 4801release. This backend will now be built by default if its dependencies 4802(freetype and libxml2) are met. 4803 4804Additionally, the SVG backend now has flexibility with regard to what 4805version of SVG it targets. It will target SVG 1.1 by default, which 4806will require image fallbacks for some of the "fancier" cairo 4807compositing operators. Or with the following new function calls: 4808 4809 cairo_svg_surface_restrict_to_version 4810 cairo_svg_get_versions 4811 cairo_svg_version_to_string 4812 4813it can be made to target SVG 1.2 in which there is native support for 4814these compositing operators. 4815 4816Bug fixes 4817--------- 4818At least the following bugs have been fixed since the 1.1.2 snapshot: 4819 4820crash at XRenderAddGlyphs 4821https://bugs.freedesktop.org/show_bug.cgi?id=4705 4822 4823Can't build cairo-1.1.2 on opensolaris due to " void function cannot return value" 4824https://bugs.freedesktop.org/show_bug.cgi?id=6792 4825 4826Missing out-of-memory check at gfx/cairo/cairo/src/cairo-atsui-font.c:185 4827https://bugzilla.mozilla.org/show_bug.cgi?id=336129 4828 4829A couple of memory leaks. 4830 4831Snapshot 1.1.2 (2006-04-25 Carl Worth <cworth@cworth.org>) 4832========================================================== 4833This is the first in a series of snapshots working toward the upcoming 48341.2 release of cairo. (Subsequent snapshot will use successive even 4835numbers for the third digit, 1.1.4, 1.1.6, etc.) This snapshot is 4836backwards-compatible with the 1.0 series---it makes a few API 4837additions but does not remove any API. 4838 4839PostScript and PDF backends are no longer "experimental" 4840-------------------------------------------------------- 4841The major theme of the 1.2 release is improved PostScript and PDF 4842backends for cairo. Unlike the 1.0 series, in the 1.2 series these 4843backends will not be marked as experimental and will be enabled by 4844default. We encourage people to test this snapshot and the PS/PDF 4845backends in particular as much as possible. 4846 4847The PostScript and PDF output is not yet ideal. 4848 4849 * One major problem with the PostScript output is that image 4850 fallbacks are used more often than strictly necessary, and the 4851 image fallbacks are at a lower resolution than desired, (the 4852 cairo_ps_surface_set_dpi call is ignored). 4853 4854 * The major drawback of the current PDF backend implementation is 4855 its text support. Every glyph is represented by a filled path in 4856 the PDF file. The causes file sizes to be much larger and 4857 rendering to be much slower than desired. 4858 4859It is anticipated that both of these shortcomings will see some 4860improvements before the final 1.2 release. 4861 4862In spite of those shortcomings, we hope that the PS and PDF backends 4863will yield faithful results for pretty much any cairo operations you 4864can throw at them. Please let us know if you are getting obviously 4865"different" results from the PS/PDF backends than from the image or 4866xlib backends. 4867 4868Other new experimental backends 4869------------------------------- 4870This snapshot includes three new backends that did not exist in the 48711.0 series: 4872 4873 * beos backend 4874 4875 * directfb backend 4876 4877 * svg backend 4878 4879These are all currently marked "experimental" and are disabled by 4880default. But the SVG backend in particular has seen a lot of recent 4881development and is very close to passing the entire cairo test 4882suite. It is possible that this backend will become a fully supported 4883backend by the time of the cairo 1.2 release. 4884 4885Public API additions 4886-------------------- 4887There have been a few new API functions added to cairo, including: 4888 4889New get_type functions for querying sub-types of object: 4890 4891 cairo_surface_get_type 4892 cairo_pattern_get_type 4893 cairo_font_face_get_type 4894 cairo_scaled_font_get_type 4895 4896More convenience in working with cairo_scaled_font_t with new getter 4897functions: 4898 4899 cairo_scaled_font_get_font_face 4900 cairo_scaled_font_get_font_matrix 4901 cairo_scaled_font_get_ctm 4902 cairo_scaled_font_get_font_options 4903 4904As well as a convenience function for setting a scaled font into a 4905cairo context: 4906 4907 cairo_set_scaled_font 4908 4909and a function to allow text extents to be queried directly from a 4910scaled font, (without requiring a cairo_surface_t or a cairo_t): 4911 4912 cairo_scaled_font_text_extents 4913 4914These new scaled font functions were motivated by the needs of the 4915pango library. 4916 4917Finally, a new path-construction function was added which clears the 4918current point in preparation for a new sub path. This makes cairo_arc 4919easier to use in some situations: 4920 4921 cairo_new_sub_path 4922 4923Before the 1.2 release is final we do still plan a few more API 4924additions specifically motivated by the needs of Mozilla/Firefox. 4925 4926Optimizations and bug fixes 4927--------------------------- 4928Shortly after the 1.0 maintenance series branched off the mainline 4929there was a major rework of the cairo font internals. This should 4930provide some good performance benefits, but it's also another area 4931people should look at closely for potential regressions. 4932 4933There has not yet been any widespread, systematic optimization of 4934cairo, but various performance improvements have been made, (and some 4935of them are fairly significant). So if some things seem faster than 49361.0 then things are good. If there are any performance regressions 4937compared to 1.0 then there is a real problem and we would like to hear 4938about that. 4939 4940There has been a huge number of bug fixes---too many to mention in 4941detail. Again, things should be better, and never worse compared to 49421.0. Please let us know if your testing shows otherwise. 4943 4944Release 1.0.2 (2005-10-03 Carl Worth <cworth@cworth.org>) 4945========================================================= 4946For each bug number XXXX below, see: 4947 4948 https://bugs.freedesktop.org/show_bug.cgi?id=XXXX 4949 4950for more details. 4951 4952General bug fixes 4953----------------- 4954 * 4408 - Add support for dashing of stroked curves 4955 (Carl Worth) 4956 4957 * 4409 - Fix dashing so that each dash is capped on both ends 4958 (Carl Worth) 4959 4960 * 4414 - Prevent SIGILL failures (proper use of -mmmx and -msse flags) 4961 (Sebastien Bacher, Billy Biggs) 4962 4963 * 4299 - Fix crashes with text display in multi-threaded program 4964 (Alexey Shabalin, Carl Worth) 4965 4966 * 4401 - Do not use sincos function since it is buggy on some platforms) 4967 (Tim Mooney, Carl Worth) 4968 4969 * 4245 - Fix several bugs in the test suite exposed by amd64 systems 4970 (Seemant Kulleen, Carl Worth) 4971 4972 * 4321 - Add missing byteswapping on GetImage/PutImage 4973 (Sjoerd Simons, Owen Taylor) 4974 4975 * 4220 - Make the check for rectangular trapezoids simpler and more accurate 4976 (Richard Stellingwerff, Owen Taylor) 4977 4978 * 4260 - Add missing channel-order swapping for antialised fonts 4979 (Barbie LeVile, Owen Taylor) 4980 4981 * 4283 - Fix compilation failure with aggressive inlining (gcc -O3) 4982 (Marco Manfredini, Owen Taylor) 4983 4984 * 4208 - Fix some warnings from sparse 4985 (Kjartan Maraas, Billy Biggs) 4986 4987 * 4269 - Fix to not crash when compiled with -fomit-frame-pointer 4988 (Ronald Wahl, Owen Taylor) 4989 4990 * 4263 - Improve performance for vertical gradients 4991 (Richard Stellingwerff, Owen Taylor) 4992 4993 * 4231 4994 * 4298 - Accomodate gentoo and Mandriva versions in X server vendor string check 4995 (Billy Biggs, Frederic Crozat, Owen Taylor) 4996 4997win32-specific fixes 4998-------------------- 4999 * 4599 - Fix "missing wedges" on some stroked paths (win32) 5000 (Tim Rowley, Jonathan Watt, Bertram Felgenhauer, Carl Worth, Keith Packard) 5001 5002 * 4612 - Fix disappearing text if first character out of surface (win32) 5003 (Tim Rowley) 5004 5005 * 4602 - Fix shutdown of cairo from failing intermediate, size-0 bitmaps (win32) 5006 Aka. the "white rectangles" bug from mozilla-svg testing 5007 (Tim Rowley) 5008 5009 * Various portability improvements for win32 5010 (Hans Breuer, Owen Taylor, Carl Worth) 5011 5012 * 4593 - Fix font sizes to match user expectations (win32) 5013 (Tor Lillqvist, Owen Taylor) 5014 5015 * 3927 - Fix to report metrics of size 0 for glyph-not-available (win32) 5016 (Hans Breuer, Owen Taylor, Tor Lillqvist) 5017 5018 * Add locking primitives for win32 5019 (Hans Breuer) 5020 5021xlib-specific fixes 5022------------------- 5023 * Fix crash from size-0 pixmap due to empty clip region (xlib) 5024 (Radek Doulík, Carl Worth) 5025 5026Release 1.0.0 (2005-08-24 Carl Worth <cworth@cworth.org>) 5027========================================================= 5028Experimental backends 5029--------------------- 5030 * The Glitz, PS, PDF, Quartz, and XCB backends have been declared 5031 experimental, and are not part of the API guarantees that accompany 5032 this release. They are not built by default, even when the required 5033 libraries are available, and must be enabled explicitly with 5034 --enable-ps, --enable-pdf, --enable-quartz or --enable-xcb. 5035 5036 It is very painful for us to be pushing out a major release without 5037 these backends enabled. There has been a tremendous amount of work 5038 put into each one and all are quite functional to some 5039 extent. However, each also has some limitations. And none of these 5040 backends have been tested to the level of completeness and 5041 correctness that we expect from cairo backends. 5042 5043 We do encourage people to experiment with these backends and report 5044 success, failure, or means of improving them. 5045 5046Operator behavior 5047----------------- 5048 * Prior to 0.9.0 the SOURCE, CLEAR and a number of other operators 5049 behaved in an inconsistent and buggy fashion and could affect areas 5050 outside the clip mask. In 0.9.0, these six "unbounded" operators 5051 were fixed to consistently clear areas outside the shape but within 5052 the clip mask. This is useful behavior for an operator such as IN, 5053 but not what was expected for SOURCE and CLEAR. So, in this release 5054 the behavior of SOURCE and CLEAR has been changed again. They now 5055 affect areas only within both the source and shape. We can write 5056 the new operators as: 5057 5058 SOURCE: dest' = (mask IN clip) ? source : dest 5059 CLEAR: dest' = (mask IN clip) ? 0 : dest 5060 5061Behavior and API changes 5062------------------------ 5063 * Setting the filter on a gradient pattern would change the 5064 interpolation between color stops away from the normal linear 5065 interpolation. This dubious behavior has been removed. 5066 5067 * The CAIRO_CONTENT_VALID() and CAIRO_FORMAT_VALID() macros -- 5068 implementation details that leaked into cairo.h -- have been moved 5069 into an internal header. 5070 5071 * The cairo_show_text function now advances the current point 5072 according to the total advance values of the string. 5073 5074API additions 5075------------- 5076 * cairo_set_dash can now detect error and can set 5077 CAIRO_STATUS_INVALID_DASH. 5078 5079Features 5080-------- 5081 * When compiled against recent versions of fontconfig and FreeType, 5082 artificial bold fonts can now be turned on from fonts.conf using 5083 the FC_EMBOLDEN fontconfig key. 5084 5085Optimization 5086------------ 5087 * The compositing code from the 'xserver' code tree has now been 5088 completely merged into libpixman. This includes MMX optimization of 5089 common operations. 5090 5091 * The image transformation code in libpixman has been improved and 5092 now performs significantly faster. 5093 5094Bug fixes 5095--------- 5096 * Several crashes related to corruption in the font caches have been 5097 fixed. 5098 5099 * All test cases now match pixel-for-pixel on x86 and PPC; this 5100 required fixing bugs in the compositing, stroking, and pattern 5101 rendering code. 5102 5103 * Negative dash offsets have been fixed to work correctly. 5104 5105 * The stroking of paths with mutiple subpaths has now been fixed to 5106 apply caps to all subpaths rather than just the last one. 5107 5108 * Many build fixes for better portability on various systems. 5109 5110 * Lots of other bug fixes, but we're too tired to describe them in 5111 more detail here. 5112 5113Release 0.9.2 (2005-08-13 Carl Worth <cworth@cworth.org>) 5114========================================================= 5115Release numbering 5116----------------- 5117 * You will notice that this release jumped from 0.9.0 to 0.9.2. We've 5118 decided to use an odd micro version number (eg. 0.9.1) to indicate 5119 in-progress development between releases. As soon as 0.9.2 is 5120 tagged, the version will be incremented in CVS to 0.9.3 where it 5121 will stay until just before 0.9.4 is built, uploaded, and tagged. 5122 5123 So, even-micro == a released version, odd-micro == something in-between. 5124 5125Libpixman dependency dropped 5126---------------------------- 5127 * As of this release, the dependency on an external libpixman has 5128 been dropped. Instead, the code from libpixman needed for cairo has 5129 been incorporated into the cairo source tree. The motivation for 5130 this change is that while cairo's API is stable and ready to be 5131 maintained after the 1.0 release, libpixman's API is not, so we do 5132 not want to expose it at this time. 5133 5134 Also, the incorporation of libpixman into cairo also renames all 5135 previously-public libpixman symbols in order to avoid any conflict 5136 with a future release of libpixman 5137 5138API additions 5139------------- 5140 * Macros and functions have been added so that the version of cairo 5141 can be queried at either compile-time or at run-time. The version 5142 is made available as both a human-readable string and as a single 5143 integer: 5144 5145 CAIRO_VERSION_STRING eg. "0.9.2" 5146 CAIRO_VERSION eg. 000902 5147 5148 const char* 5149 cairo_version_string (void); /* eg. "0.9.2" */ 5150 5151 int 5152 cairo_version (void); /* eg. 000902 */ 5153 5154 A macro is provided to convert a three-part component version into 5155 the encoded single-integer form: 5156 5157 CAIRO_VERSION_ENCODE(X,Y,Z) 5158 5159 For example, the CAIRO_VERSION value of 000902 is obtained as 5160 CAIRO_VERSION_ENCODE(0,9,2). The intent is to make version 5161 comparisons easy, either at compile-time: 5162 5163 #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(0,9,2) 5164 ... 5165 #endif 5166 5167 Or at run-time: 5168 5169 if (cairo_version() >= CAIRO_VERSION_ENCODE(0,9,2)) { /* ... */ } 5170 5171Thread safety 5172------------- 5173 * This release adds pthread-based locking (when available) to make 5174 the caches used by cairo safe for threaded programs. Some may 5175 remember a failed experiment with this locking between the 0.5.1 5176 and 0.5.2 snapshots, (where even single-threaded programs that 5177 linked with -lpthread would deadlock). We believe that that problem 5178 has been fixed, so we are looking forward to testing and reports 5179 from users with threaded applications. 5180 5181Bug fixes 5182--------- 5183 * The XCB and Quartz backends failed to compiled in the 0.9.0 release 5184 due to minor syntax errors. These have now been fixed. 5185 5186 * Various crashes in glitz and pixman due to size 0 glyphs have been 5187 fixed. 5188 5189Release 0.9.0 (2005-08-08 Carl Worth <cworth@cworth.org>) 5190========================================================= 5191Soname change 5192------------- 5193 * In all prior snapshots, the libtool library versioning was set to 5194 1:0:0. As this release is intended to mark the beginning of 5195 backwards-compatible releases, the versioning has been incremented 5196 to 2:0:0. You will notice that the numeric extension on the 5197 installed library filename will change similarly. 5198 5199 This change will also require all cairo-using applications to be 5200 recompiled. We recognize that this may cause some frustration since 5201 this release is backwards-compatible with 0.6.0 and in that sense 5202 "shouldn't" require re-compilation. However, since all historical 5203 snapshots have used the same 1:0:0 version in spite of incompatible 5204 API changes between them, it was essential that the upcoming 1.0 5205 release series have distinct library versioning. 5206 5207 All future releases will use the library versioning to properly 5208 indicate compatibility between releases. So, any application 5209 re-compiled now to work with the 0.9.0 will not need to be 5210 recompiled when a compatible 1.0 release of cairo is made in the 5211 future. 5212 5213API additions 5214------------- 5215 * Add new function calls to set/get the current antialiasing mode in 5216 the graphics state: 5217 5218 cairo_set_antialias 5219 cairo_get_antialias 5220 5221 This call accepts the same modes recently added for font options 5222 (NONE or GRAY) but affects the rendering of geometry other than 5223 text. The intent of this call is to enable more precise control of 5224 which pixels are affected by each operation, for example to allow 5225 for full-scene antialiasing for seam-free rendering. It is not 5226 expected that non-antialiased rendering will perform better than 5227 anti-aliased rendering. 5228 5229 * Three new functions were added to provide support for mixed cairo- 5230 and non-cairo drawing to the same surface: 5231 5232 cairo_surface_mark_dirty 5233 cairo_surface_mark_dirty_rectangle 5234 cairo_surface_flush 5235 5236 * The return type of the several "reference" functions was change, 5237 (API compatibly), from void to the same type as the argument. The 5238 affected functions are: 5239 5240 cairo_font_face_reference 5241 cairo_scaled_font_reference 5242 cairo_pattern_reference 5243 cairo_surface_reference 5244 cairo_reference 5245 5246 This allows a convenient way to assign and reference in a single 5247 statement. 5248 5249Semantic changes 5250---------------- 5251 * The behavior of cairo_set_source with a pattern with a non-identity 5252 matrix was previously not well-defined. The new behavior is as 5253 follows: 5254 5255 The pattern's transformation matrix will be locked to the 5256 user space in effect at the time of cairo_set_source(). This means 5257 that further modifications of the CTM will not affect the source 5258 pattern. 5259 5260cairo-win32 5261----------- 5262 * Some portability improvements, (eg. workaround for missing stdint.h). 5263 5264cairo-ft 5265-------- 5266 * Updated to allow compilation with older versions of freetype. 5267 5268Bug fixes 5269--------- 5270 * Fix the unbounded operators to actually produce a correct result, 5271 (previously the results were artificially restricted to the 5272 bounding box of whatever shape was being drawn rather than 5273 extending out infinitely). The fixed operators are: 5274 5275 CAIRO_OPERATOR_CLEAR 5276 CAIRO_OPERATOR_SOURCE 5277 CAIRO_OPERATOR_OUT 5278 CAIRO_OPERATOR_IN 5279 CAIRO_OPERATOR_DEST_IN 5280 CAIRO_OPERATOR_DEST_ATOP 5281 5282 * Fix cairo_mask and cairo_mask_surface to transform the mask by the 5283 current transformation matrix (CTM). 5284 5285 * Fix cairo_set_source to lock the CTM used to transform the pattern. 5286 5287 * Workaround for X server Render bug involving repeating patterns 5288 with a general transformation matrix. 5289 5290 * cairo_get_font_face fixed to return a "nil" font face object rather 5291 than NULL on error. 5292 5293 * cairo_set_font_face fixed to not crash if given a NULL font face, 5294 (which is the documented interface for restoring the default font 5295 face). 5296 5297 * Fix xlib glyphset caching to not try to free a NULL glyph. 5298 5299Snapshot 0.6.0 (2005-07-28 Carl Worth <cworth@cworth.org>) 5300========================================================== 5301API changes 5302----------- 5303* The prototypes of the following functions have changed: 5304 5305 cairo_xlib_surface_create_with_xrender_format 5306 cairo_xlib_surface_create_for_bitmap 5307 5308 A Screen* parameter has been added to each. This allows the cairo 5309 xlib backend to work correctly with multi-head X servers. 5310 5311* The following function has been modified: 5312 5313 cairo_scaled_font_create 5314 5315 to accept a cairo_font_options_t*. See below fore more details. 5316 5317* All opaque, reference-counted cairo objects have now been moved to a 5318 standard error-handling scheme. The new objects to receive this 5319 treatment are cairo_font_face_t, cairo_scaled_font_t, and 5320 cairo_surface_t. (Previous snapshots already provided this scheme 5321 for cairo_t, cairo_path_t, and cairo_pattern_t.) 5322 5323 This changes two functions to have a return type of void rather than 5324 cairo_status_t: 5325 5326 cairo_scaled_font_extent 5327 cairo_surface_finish 5328 5329 And significantly, none of the create functions for any of the 5330 objects listed above will return NULL. The pointer returned from any 5331 function will now always be a valid pointer and should always be 5332 passed to the corresponding destroy function when finished 5333 5334 The simplest strategy for porting code is to switch from: 5335 5336 object = cairo_<object>_create (); 5337 if (object == NULL) 5338 goto BAILOUT; 5339 5340 /* act on object */ 5341 5342 cairo_<object>_destroy (object); 5343 5344 to: 5345 5346 object = cairo_<object>_create (); 5347 if (cairo_<object>_status (object)) 5348 goto BAILOUT; 5349 5350 /* act on object */ 5351 5352 cairo_<object>_destroy (object); 5353 5354 But significantly, it is not required to check for an error status 5355 before the "act on object" portions of the code above. All 5356 operations on an object with an error status are, by definition, 5357 no-ops without side effect. So new code might be written in an 5358 easier-to-read style of: 5359 5360 object = cairo_<object>_create (); 5361 5362 /* act on object */ 5363 5364 cairo_<object>_destroy (object); 5365 5366 with cairo_<object>_status checks placed only at strategic 5367 locations. For example, passing an error object to another object, 5368 (eg. cairo_set_source with an in-error pattern), will propagate the 5369 error to the subsequent object (eg. the cairo_t). This means that 5370 error checking can often be deferred even beyond the destruction of 5371 a temporary object. 5372 5373API additions 5374------------- 5375* New functions for checking the status of objects that have been 5376 switched to the common error-handling scheme: 5377 5378 cairo_font_face_status 5379 cairo_scaled_font_status 5380 cairo_surface_status 5381 5382* The _cairo_error function which was added in 0.5.1 has now been made 5383 much more useful. In 0.5.1 only errors on cairo_t objects passed 5384 through _cairo_error. Now, an error on any object should pass 5385 through _cairo_error making it much more reliable as a debugging 5386 mechanism for finding when an error first occurs. 5387 5388* Added new font options support with a myriad of functions: 5389 5390 cairo_font_options_create 5391 cairo_font_options_copy 5392 cairo_font_options_destroy 5393 5394 cairo_font_options_status 5395 5396 cairo_font_options_merge 5397 cairo_font_options_equal 5398 cairo_font_options_hash 5399 5400 cairo_font_options_set_antialias 5401 cairo_font_options_get_antialias 5402 cairo_font_options_set_subpixel_order 5403 cairo_font_options_get_subpixel_order 5404 cairo_font_options_set_hint_style 5405 cairo_font_options_get_hint_style 5406 cairo_font_options_set_hint_metrics 5407 cairo_font_options_get_hint_metrics 5408 5409 cairo_surface_get_font_options 5410 5411 cairo_ft_font_options_substitute 5412 5413 cairo_set_font_options 5414 cairo_get_font_options 5415 5416 This new font options support allows the application to have much 5417 more fine-grained control over how fonts are rendered. 5418 Significantly, it also allows surface backends to have some 5419 influence over the process. For example, the xlib backend now 5420 queries existing Xft properties to set font option defaults. 5421 5422* New function: 5423 5424 cairo_xlib_surface_set_drawable 5425 5426 which allows the target drawable for an xlib cairo_surface_t to be 5427 changed to another with the same format, screen, and display. This 5428 is necessary in certain double-buffering techniques. 5429 5430New features 5431------------ 5432* Sub-pixel text antialiasing is now supported. 5433 5434Bug fixes 5435--------- 5436* Fixed assertion failure in cairo_surface_create_similar when 5437 application commits an error by passing a cairo_format_t rather than 5438 a cairo_content_t. 5439 5440* Avoid division by zero in various places (cairo-ft). 5441 5442* Fix infinite loop when using non-default visuals (cairo-xlib). 5443 5444* Eliminate segfault in cairo_image_surface_create_from_png_stream. 5445 5446* Prevent errant sign-extension of masks on 64-bit architectures 5447 (cairo-xlib and cairo-xcb). 5448 5449* Other miscellaneous fixes. 5450 5451Snapshot 0.5.2 (2005-07-18 Carl Worth <cworth@cworth.org>) 5452========================================================== 5453API changes 5454----------- 5455* New functions for creating patterns of a single color: 5456 5457 cairo_pattern_create_rgb 5458 cairo_pattern_create_rgba 5459 5460* Change cairo_surface_create_similar to accept a new type of 5461 cairo_content_t rather than cairo_format_t: 5462 5463 typedef enum _cairo_content { 5464 CAIRO_CONTENT_COLOR = 0x1000, 5465 CAIRO_CONTENT_ALPHA = 0x2000, 5466 CAIRO_CONTENT_COLOR_ALPHA = 0x3000 5467 } cairo_content_t; 5468 5469* Add new CAIRO_FORMAT_VALID and CAIRO_CONTENT_VALID macros. 5470 5471* Remove unused status value: 5472 5473 CAIRO_STATUS_NO_TARGET_SURFACE 5474 5475* Add new status values: 5476 5477 CAIRO_STATUS_INVALID_STATUS 5478 5479* Require libpixman >= 0.1.5 (for necessary bug fixes) 5480 5481Bug fixes 5482--------- 5483* Fix cairo_surface_write_to_png for RGB24 images. 5484 5485* Fix broken metrics and rendering for bitmap fonts. Add mostly 5486 useless bitmap glyph transformation. 5487 5488* Fix glyph caches to not eject entries that might be immediately 5489 needed, (fixing intermittent crashes when rendering text). 5490 5491* Fix all memory leaks found by running "make check-valgrind". 5492 5493ATSUI backend changes 5494--------------------- 5495* Allow building against < 10.3 SDK. 5496 5497* Prevent crash on empty strings. 5498 5499Glitz backend changes 5500--------------------- 5501* Require glitz >= 0.4.4. 5502 5503* Use frame buffer objects instead of pbuffers for accelerated 5504 offscreen drawing. 5505 5506* Minor improvement to gradient pattern creation. 5507 5508PostScript backend fixes 5509------------------------ 5510* Rewrite of the PS backend to generate more interesting output that 5511 the old big-image implementation. 5512 5513Win32 backend fixes 5514------------------- 5515* Implement glyph path support. 5516 5517* Fix swap of blue and green values in the fill_rectangles path. 5518 5519Xlib backend fixes 5520------------------ 5521* Add optimization to use XCopyArea rather than XRenderComposite when 5522 transforming only with an integer translation, and using SOURCE 5523 operator or OVER with a source pattern without alpha. 5524 5525Snapshot 0.5.1 (2005-06-20 Carl Worth <cworth@cworth.org>) 5526========================================================== 5527API changes 5528----------- 5529* Removed cairo_status_string(cairo_t*) and add 5530 cairo_status_to_string(cairo_status_t) in its place. Code using 5531 cairo_status_string can be ported forward as follows: 5532 5533 cairo_status (cr); 5534 -> 5535 cairo_status_to_string (cairo_status (cr)); 5536 5537* Removed the BAD_NESTING restriction which means that two different 5538 cairo_t objects can now interleave drawing to the same 5539 cairo_surface_t without causing an error. 5540 5541* The following functions which previously had a return type of 5542 cairo_status_t now have a return type of void: 5543 5544 cairo_pattern_add_color_stop_rgba 5545 cairo_pattern_set_matrix 5546 cairo_pattern_get_matrix 5547 cairo_pattern_set_extend 5548 cairo_pattern_set_filter 5549 5550 See discussion of cairo_pattern_status below for more details. 5551 5552API additions 5553------------- 5554* Improved error handling: 5555 5556 cairo_status_t 5557 cairo_pattern_status (cairo_pattern_t *pattern); 5558 5559 This snapshot expands the status-based error handling scheme from 5560 cairo_t to cairo_path_t and cairo_pattern_t. It also expands the 5561 scheme so that object-creating functions, (cairo_create, 5562 cairo_pattern_create_*, cairo_copy_path_*), are now guaranteed to 5563 not return NULL. Instead, in the case of out-of-memory these 5564 functions will return a static object with 5565 status==CAIRO_STATUS_NO_MEMORY. The status can be checked with the 5566 functions cairo_status and cairo_pattern_status, or by direct 5567 inspection of the new status field in cairo_path_t. 5568 5569 Please note that some objects, including cairo_surface_t and all of 5570 the font-related objects have not been converted to this 5571 error-handling scheme. 5572 5573* In addition to the above changes, a new private function has been added: 5574 5575 _cairo_error 5576 5577 This function can be used to set a breakpoint in a debugger to make 5578 it easier to find programming error in cairo-using code. (Currently, 5579 _cairo_error is called when any error is detected within a cairo_t 5580 context, but is not called for non-cairo_t errors such as for 5581 cairo_path_t and cairo_pattern_t). 5582 5583* Fixed cairo_path_data_t so that its enum is visible to C++ code, (as 5584 cairo_path_data_type_t). 5585 5586Performance improvements 5587------------------------ 5588* Made a minor performance improvement for clipping, (restrict clip 5589 surface to the new intersected bounds). 5590 5591* Optimize rendering of a solid source pattern with a pixel-aligned 5592 rectangular path to use backend clipping rather than rasterization 5593 and backend compositing. 5594 5595* Optimize cairo_paint_with_alpha to defer to cairo_paint when alpha 5596 is 1.0. 5597 5598Bug fixes 5599--------- 5600* Fixed memory leak in cairo_copy_path. 5601 5602* A build fix for non-srcdir builds. 5603 5604PDF backend fixes 5605----------------- 5606* New support for path-based clipping. 5607 5608* Fix for text rotated to angles other than multiples of π/2. 5609 5610Win32 backend fixes 5611------------------- 5612* Fix for text extents. 5613 5614Xlib backend 5615------------ 5616* Implemented a complex workaround for X server bug[*] related to 5617 Render-based compositing with untransformed, repeating source 5618 pictures. The workaround uses core Xlib when possible for 5619 performance, (ie. with CAIRO_OPERATOR_SOURCE or CAIRO_OPERATOR_OVER 5620 with an opaque source surface), and falls back to the pixman 5621 image-based compositing otherwise. 5622 5623 [*] https://bugs.freedesktop.org/show_bug.cgi?id=3566 5624 5625* Various bug fixes, particularly in the fallback paths. 5626 5627Snapshot 0.5.0 (2005-05-17 Carl Worth <cworth@cworth.org>) 5628========================================================== 5629This is a pretty big, and fairly significant snapshot. It represents 5630between 2 and 3 months of solid work from a lot of people on improving 5631the API as much as possible. I'd like to express my appreciation and 5632congratulations to everyone who has worked on the big API Shakeup, 5633(whether in email battles over names, or fixing my silly bugs). 5634 5635This snapshot will require some effort on the part of users, since 5636there are a _lot_ of API changes (ie. no cairo program ever written is 5637safe --- they're all broken now in at least one way). But, in spite of 5638that, we do encourage everyone to move their code to this snapshot as 5639soon as possible. And we're doing everything we can think of to make 5640the transition as smooth as possible. 5641 5642The idea behind 0.5 is that we've tried to make every good API change 5643we could want now, and get them all done with. That is, between now 5644and the 1.0 release of cairo, we expect very few new API changes, 5645(though some will certainly sneak in). We will have some significant 5646additions, but the pain of moving code from cairo 0.4 to cairo 0.5 5647should be a one time experience, and things should be much smoother as 5648we continue to move toward cairo 1.0. 5649 5650And with so many changes coming out for the first time in this 0.5 5651release, we really do need a lot of people trying this out to make 5652sure the ideas are solid before we freeze the API in preparation for 5653the 1.0 release. 5654 5655OK, enough introduction. Here is a (not-quite-complete) description of 5656the API removals, changes and additions in this snapshot, (compared to 56570.4.0) 5658 5659API removals 5660============ 5661The following public functions have been removed: 5662 5663- cairo_set_target_* 5664 5665 This is a big change. See the description of cairo_create in 5666 the API changes section for how to deal with this. 5667 5668- cairo_set_alpha 5669 5670 Alpha blending hasn't gone away; there's just a much more 5671 unified rendering model now. Almost all uses of 5672 cairo_set_alpha will be trivially replaced with 5673 cairo_set_source_rgba and a few others will be replaced just 5674 as easily with cairo_paint_with_alpha. 5675 5676- cairo_show_surface 5677 5678 Another useful function that we realized was muddling up the 5679 rendering model. The replacement is quite easy: 5680 cairo_set_source_surface and cairo_paint. 5681 5682- cairo_matrix_create 5683- cairo_matrix_destroy 5684- cairo_matrix_copy 5685- cairo_matrix_get_affine 5686 5687 These functions supported an opaque cairo_matrix_t. We now 5688 have an exposed cairo_matrix_t structure, so these can be 5689 dropped. 5690 5691- cairo_surface_set_repeat 5692- cairo_surface_set_matrix 5693- cairo_surface_set_filter 5694 5695 These properties don't belong on surfaces. If you were using 5696 them, you'll just want to instead use 5697 cairo_pattern_create_for_surface and then set these properties 5698 on the pattern. 5699 5700- cairo_copy 5701 5702 This was a confusing function and hopefully nobody will miss 5703 it. But if you really don't find cairo_save/restore adequate, 5704 let us know and we have another idea for a potential 5705 replacement. 5706 5707And while we're on the subject of removals, we carefully tightened up 5708the cairo header files so they no longer gratuitously include header 5709files that are not strictly necessary, (stdio.h, stdint.h, pixman.h, 5710Xrender.h, etc. and their dependencies). This may lead to some 5711surprising errors, so keep your eyes open for that. 5712 5713API changes 5714=========== 5715Here are some of the API changes that have occurred: 5716 5717~ cairo_create(void) -> cairo_create(cairo_surface_t *) 5718 5719 This is the big change that breaks every program. The ability 5720 to re-target a cairo_t was not particularly useful, but it did 5721 introduce a lot of muddy semantic questions. To eliminate 5722 that, cairo_create now requires its target surface to be 5723 passed in at creation time. This isn't too hard to cope with 5724 as the typical first operation after cairo_create was often 5725 cairo_set_target_foo. So the order of those two swap and the 5726 application instead has cairo_foo_surface_create, then 5727 cairo_create. 5728 5729~ cairo_current_* -> cairo_get_* 5730 5731 We had a strange mixture of cairo_get and cairo_current 5732 functions. They've all been standardized on cairo_get, (though 5733 note one is cairo_get_current_point). 5734 5735~ CAIRO_OPERATOR_SRC -> CAIRO_OPERATOR_SOURCE 5736~ CAIRO_OPERATOR_OVER_REVERSE -> CAIRO_OPERATOR_DEST_OVER 5737 5738 Many of the cairo_operator_t symbolic values were renamed to 5739 reduce the amount of abbreviation. The confusing "OP_REVERSE" 5740 naming was also changed to use "DEST_OP" instead which is 5741 easier to read and has wider acceptance in other 5742 libraries/languages. 5743 5744~ cairo_set_pattern -> cairo_set_source 5745~ cairo_set_rgb_color -> cairo_set_source_rgb 5746 5747 All of the various functions that changed the source 5748 color/pattern were unified to use cairo_set_source names to 5749 make the relation more clear. 5750 5751~ cairo_transform_point -> cairo_user_to_device 5752~ cairo_transform_distance -> cairo_user_to_device_distance 5753~ cairo_inverse_transform_point -> cairo_device_to_user 5754~ cairo_inverse_transform_distance -> cairo_device_to_user_distance 5755 5756 These names just seemed a lot more clear. 5757 5758~ cairo_init_clip -> cairo_reset_clip 5759~ cairo_concat_matrix -> cairo_transform 5760 5761 More abbreviation elimination 5762 5763~ cairo_current_path -> cairo_copy_path 5764~ cairo_current_path_flat -> cairo_copy_path_flat 5765 5766 The former mechanism for examining the current path was a 5767 function that required 3 or 4 callbacks. This was more 5768 complexity than warranted in most situations. The new 5769 cairo_copy_path function copies the current path into an 5770 exposed data structure, and the documentation provides a 5771 convenient idiom for navigating the path data. 5772 5773API additions 5774------------- 5775+ cairo_paint 5776 5777 A generalized version of the painting operators cairo_stroke 5778 and cairo_fill. The cairo_paint call applies the source paint 5779 everywhere within the current clip region. Very useful for 5780 clearing a surface to a solid color, or painting an image, 5781 (see cairo_set_source_surface). 5782 5783+ cairo_paint_with_alpha 5784 5785 Like cairo_paint but applying some alpha to the source, 5786 (making the source paint translucent, eg. to blend an image on 5787 top of another). 5788 5789+ cairo_mask 5790 5791 A more generalized version of cairo_paint_with_alpha which 5792 allows a pattern to specify the amount of translucence at each 5793 point rather than using a constant value everywhere. 5794 5795+ cairo_mask_surface 5796 5797 A convenience function on cairo_mask for when the mask pattern 5798 is already contained within a surface. 5799 5800+ cairo_surface_set_user_data 5801+ cairo_surface_get_user_data 5802+ cairo_font_face_set_user_data 5803+ cairo_font_face_get_user_data 5804 5805 Associate arbitrary data with a surface or font face for later 5806 retrieval. Get notified when a surface or font face object is 5807 destroyed. 5808 5809+ cairo_surface_finish 5810 5811 Allows the user to instruct cairo to finish all of its 5812 operations for a given surface. This provides a safe point for 5813 doing things such as flushing and closing files that the 5814 surface may have had open for writing. 5815 5816+ cairo_fill_preserve 5817+ cairo_stroke_preserve 5818+ cairo_clip_preserve 5819 5820 One interesting change in cairo is that the path is no longer 5821 part of the graphics state managed by 5822 cairo_save/restore. This allows functions to construct paths 5823 without interfering with the graphics state. But it prevents 5824 the traditional idiom for fill-and-stroke: 5825 5826 cairo_save; cairo_fill; cairo_restore; cairo_stroke 5827 5828 Instead we know have alternate versions cairo cairo_fill, 5829 cairo_stroke, and cairo_clip that preserve the current path 5830 rather than consuming it. So the idiom now becomes simply: 5831 5832 cairo_fill_preserve; cairo_stroke 5833 5834+ cairo_surface_write_to_png 5835+ cairo_surface_write_to_png_stream 5836 5837 In place of a single PNG backend, now a surface created 5838 through any backend (except PDF currently) can be written out 5839 to a PNG image. 5840 5841+ cairo_image_surface_create_from_png 5842+ cairo_image_surface_create_from_png_stream 5843 5844 And its just as easy to load a PNG image into a surface as well. 5845 5846+ cairo_append_path 5847 5848 With the new, exposed path data structure, it's now possible 5849 to append bulk path data to the current path, (rather than 5850 issuing a long sequence of cairo_move_to/line_to/curve_to 5851 function calls). 5852 5853Xlib and XCB backends 5854--------------------- 5855 5856Any cairo_format_t and Colormap arguments have been dropped from 5857cairo_xlib_surface_create. There are also two new 5858cairo_xlib|xcb_surface_create functions: 5859 5860 cairo_xlib|xcb_surface_create_for_bitmap 5861 (Particular for creating A1 surfaces) 5862 cairo_xlib|xcb_surface_create_with_xrender_format 5863 (For any other surface types, not described by a Visual*) 5864 5865All of these surface create functions now accept width and height. In 5866addition, there are new cairo_xlib|xcb_surface_set_size functions 5867which must be called each time a window that is underlying a surface 5868changes size. 5869 5870Print backends (PS and PDF) 5871--------------------------- 5872The old FILE* based interfaces have been eliminated. In their place we 5873have two different functions. One accepts a simple const char 5874*filename. The other is a more general function which accepts a 5875callback write function and a void* closure. This should allow the 5876flexibility needed to hook up with various stream object in many 5877languages. 5878 5879In addition, when specifying the surface size during construction, the 5880units are now device-space units (ie. points) rather than inches. This 5881provides consistency with all the other surface types and also makes 5882it much easier to reason about the size of the surface when drawing to 5883it with the default identity matrix. 5884 5885Finally, the DPI parameters, which are only needed to control the 5886quality of fallbacks, have been made optional. Nothing is required 5887during surface_create (300 DPI is assumed) and 5888cairo_ps|pdf_surface_set_dpi can be used to set alternate values if 5889needed. 5890 5891Font system 5892----------- 5893Owen very graciously listened to feedback after the big font rework he 5894had done for 0.4, and came up with way to improve it even more. In 0.4 5895there was a cairo_font_t that was always pre-scaled. Now, there is an 5896unscaled cairo_font_face_t which is easier to construct, (eg. no 5897scaling matrix required) and work with, (it can be scaled and 5898transformed after being set on the graphics state). And the font size 5899manipulation functions are much easier. You can set an explicit size 5900and read/modify/write the font matrix with: 5901 5902 cairo_set_font_size 5903 cairo_get_font_matrix 5904 cairo_set_font_matrix 5905 5906(Previously you could only multiply in a scale factor or a matrix.) A 5907pleasant side effect is that we can (and do) now have a default font 5908size that is reasonable, as opposed to the old default height of one 5909device-space unit which was useless until scaled. 5910 5911Of course, the old pre-scaled font had allowed some performance 5912benefits when getting many metrics for a font. Those benefits are 5913still made available through the new cairo_scaled_font_t. And a 5914cairo_font_face_t can be "promoted" to a cairo_scaled_font_t by 5915suppling a font_matrix and the desired CTM. 5916 5917Quartz backend 5918-------------- 5919Tim Rowley put in the work to bring the Quartz backend back after it 5920had been disabled in the 0.4.0 snapshot. He was not able to bring back 5921the function that allows one to create a cairo_font_t from an ATSUI 5922style: 5923 5924 cairo_font_t * 5925 cairo_atsui_font_create (ATSUStyle style); 5926 5927because he didn't have a test case for it. If you care about this 5928function, please provide a fairly minimal test and we'll try to bring 5929it back in an upcoming snapshot. 5930 5931Snapshot 0.4.0 (2005-03-08 Carl Worth <cworth@cworth.org>) 5932========================================================== 5933New documentation 5934----------------- 5935Owen Taylor has converted cairo's documentation system to gtk-doc and 5936has begun some long-needed work on the documentation, which can now be 5937viewed online here: 5938 5939 http://cairographics.org/manual/ 5940 5941New backend: win32 5942------------------ 5943This is the first snapshot to include a functional win32 backend, 5944(thanks to Owen Taylor). The interface is as follows: 5945 5946 #include <cairo-win32.h> 5947 5948 void 5949 cairo_set_target_win32 (cairo_t *cr, 5950 HDC hdc); 5951 5952 cairo_surface_t * 5953 cairo_win32_surface_create (HDC hdc); 5954 5955 cairo_font_t * 5956 cairo_win32_font_create_for_logfontw (LOGFONTW *logfont, 5957 cairo_matrix_t *scale); 5958 5959 cairo_status_t 5960 cairo_win32_font_select_font (cairo_font_t *font, 5961 HDC hdc); 5962 5963 void 5964 cairo_win32_font_done_font (cairo_font_t *font); 5965 5966 double 5967 cairo_win32_font_get_scale_factor (cairo_font_t *font); 5968 5969And see also the documentation at: 5970 5971http://cairographics.org/manual/cairo-Microsoft-Windows-Backend.html 5972 5973Disabled backend: quartz 5974------------------------ 5975Unfortunately, the quartz backend code is currently out of date with 5976respect to some recent backend interface changes. So, the quartz 5977backend is disabled in this snapshot. 5978 5979If the quartz backend is brought up-to-date before the next snapshot, 5980we would be glad to make a 0.4.1 snapshot that re-enables it, (we do 5981not expect many more big backend interface changes). 5982 5983API Changes 5984----------- 5985The font system has been revamped, (as Owen Taylor's work with 5986integrating pango and cairo gave us the first serious usage of the 5987non-toy font API). 5988 5989One fundamental, user-visible change is that the cairo_font_t object 5990now represents a font that is scaled to a particular device 5991resolution. Further changes are described below. 5992 5993 cairo.h 5994 ------- 5995 Removed cairo_font_set_transform and cairo_font_current_transform. 5996 5997 Added cairo_font_extents and cairo_font_glyph_extents. See 5998 documentation for details: 5999 6000 http://cairographics.org/manual/cairo-cairo-t.html#cairo-font-extents 6001 6002 cairo-ft.h 6003 ---------- 6004 The cairo_ft_font API changed considerably. Please see the 6005 documentation for details: 6006 6007 http://cairographics.org/manual/cairo-FreeType-Fonts.html 6008 6009Performance 6010----------- 6011Make the fast-path clipping (pixel-aligned rectangles) faster. 6012 6013Add optimization for applying a constant alpha to a pattern. 6014 6015Optimize gradients that are horizontal or vertical in device space. 6016 6017Xlib: When RENDER is not available, use image surfaces for 6018intermediate surfaces rather than xlib surfaces. 6019 6020Backend-specific changes 6021------------------------ 6022 Glitz 6023 ----- 6024 Major update to glitz backend. The output quality should now be just 6025 as good as the image and xlib backends. 6026 6027 Track changes to glitz 0.4.0. 6028 6029 PDF 6030 --- 6031 Various improvements to produce more conformant output. 6032 6033Internals 6034--------- 6035David Reveman contributed a large re-work of the cairo_pattern_t 6036implementation, providing cleaner code and more optimization 6037opportunities. 6038 6039 Backend interface changes 6040 ------------------------- 6041 Rework backend interface to accept patterns, not surfaces for source 6042 and mask. 6043 6044 Remove set_matrix, set_filter, and set_repeat functions. 6045 6046 More sophisticated backend interface for image fallbacks, 6047 ({acquire,release}_{source,dest}_image() and clone_similar). 6048 6049Bug fixes 6050--------- 6051Only install header files for backends that have been compiled. 6052 6053Fixed some rounding errors leading to incorrectly placed glyphs. 6054 6055Many other minor fixes. 6056 6057Snapshot 0.3.0 (2005-01-21 Carl Worth <cworth@cworth.org>) 6058========================================================== 6059Major API changes 6060----------------- 60611) The public header files will no longer be directly installed into 6062 the system include directory. They will now be installed in a 6063 subdirectory named "cairo", (eg. in /usr/include/cairo rather than 6064 in /usr/include). 6065 6066 As always, the easiest way for applications to discover the 6067 location of the header file is to let pkg-config generate the 6068 necessary -I CFLAGS and -L/-l LDFLAGS. For example: 6069 6070 cc `pkg-config --cflags --libs cairo` -o foo foo.c 6071 6072 IMPORTANT: Users with old versions of cairo installed will need to 6073 manually remove cairo.h and cairo-features.h from the 6074 system include directories in order to prevent the old 6075 headers from being used in preference to the new ones. 6076 60772) The backend-specific portions of the old monolithic cairo.h have 6078 been split out into individual public header files. The new files 6079 are: 6080 6081 cairo-atsui.h 6082 cairo-ft.h 6083 cairo-glitz.h 6084 cairo-pdf.h 6085 cairo-png.h 6086 cairo-ps.h 6087 cairo-quartz.h 6088 cairo-xcb.h 6089 cairo-xlib.h 6090 6091 Applications will need to be modified to explicitly include the new 6092 header files where appropriate. 6093 60943) There are two new graphics backends in this snapshot, a PDF 6095 backend, and a Quartz backend. There is also one new font backend, 6096 ATSUI. 6097 6098PDF backend 6099----------- 6100Kristian Høgsberg has contributed a new backend to allow cairo-based 6101applications to generate PDF output. The interface for creating a PDF 6102surface is similar to that of the PS backend, as can be seen in 6103cairo-pdf.h: 6104 6105 void 6106 cairo_set_target_pdf (cairo_t *cr, 6107 FILE *file, 6108 double width_inches, 6109 double height_inches, 6110 double x_pixels_per_inch, 6111 double y_pixels_per_inch); 6112 6113 cairo_surface_t * 6114 cairo_pdf_surface_create (FILE *file, 6115 double width_inches, 6116 double height_inches, 6117 double x_pixels_per_inch, 6118 double y_pixels_per_inch); 6119 6120Once a PDF surface has been created, applications can draw to it as 6121any other cairo surface. 6122 6123This code is still a bit rough around the edges, and does not yet 6124support clipping, surface patterns, or transparent gradients. Text 6125only works with TrueType fonts at this point and only black text is 6126supported. Also, the size of the generated PDF files is currently 6127quite big. 6128 6129Kristian is still actively developing this backend, so watch this 6130space for future progress. 6131 6132Quartz backend 6133-------------- 6134Calum Robinson has contributed a new backend to allow cairo 6135applications to target native Mac OS X windows through the Quartz 6136API. Geoff Norton integrated this backend into the current 6137configure-based build system, while Calum also provided Xcode build 6138support in the separate "macosx" module available in CVS. 6139 6140The new interface, available in cairo-quartz.h, is as follows: 6141 6142 void 6143 cairo_set_target_quartz_context (cairo_t *cr, 6144 CGContextRef context, 6145 int width, 6146 int height); 6147 6148 cairo_surface_t * 6149 cairo_quartz_surface_create (CGContextRef context, 6150 int width, 6151 int height); 6152 6153There is an example program available in CVS in cairo-demo/quartz. It 6154is a port of Keith Packard's fdclock program originally written for 6155the xlib backend. A screenshot of this program running on Mac OS X is 6156available here: 6157 6158 http://cairographics.org/~cworth/images/fdclock-quartz.png 6159 6160ATSUI font backend 6161------------------ 6162This new font backend complements the Quartz backend by allowing 6163applications to use native font selection on Mac OS X. The interface 6164is a single new function: 6165 6166 cairo_font_t * 6167 cairo_atsui_font_create (ATSUStyle style); 6168 6169Minor API changes 6170----------------- 6171Prototype for non-existent function "cairo_ft_font_destroy" removed. 6172 6173Now depends on libpixman 0.1.2 or newer, (0.1.3 is being released 6174concurrently and has some useful performance improvements). 6175 6176Default paint color is now opaque black, (was opaque white). Default 6177background color is transparent (as before). 6178 6179Renamed "struct cairo" to "struct _cairo" to free up the word "cairo" 6180from the C++ identifier name space. 6181 6182Functions returning multiple return values through provided pointers, 6183(cairo_matrix_get_affine, cairo_current_point, and 6184cairo_current_color_rgb), will now accept NULL for values the user 6185wants to ignore. 6186 6187CAIRO_HAS_FREETYPE_FONT has now been renamed to CAIRO_HAS_FT_FONT. 6188 6189Performance improvements 6190------------------------ 6191Alexander Larsson provided some fantastic performance improvements 6192yielding a 10000% performance improvement in his application, (when 6193also including his performance work in libpixman-0.1.3). These include 6194 6195 * Fixed handling of cache misses. 6196 6197 * Creating intermediate clip surfaces at the minimal size required. 6198 6199 * Eliminating roundtrips when creating intermediate Xlib surfaces. 6200 6201Implementation 6202-------------- 6203Major re-work of font metrics system by Keith Packard. Font metrics 6204should now be much more reliable. 6205 6206Glitz backend 6207------------- 6208Updated for glitz-0.3.0. 6209Bug fixes in reference counting. 6210 6211Test suite 6212---------- 6213New tests for cache crashing, rotating text, improper filling of 6214complex polygons, and leaky rasterization. 6215 6216Bug fixes 6217--------- 6218Fixed assertion failure when selecting the same font multiple times in 6219sequence. 6220 6221Fixed reference counting so cache_destroy functions work. 6222 6223Remove unintended copyright statement from files generated with 6224PostScript backend. 6225 6226Fixed to eliminate new warnings from gcc 3.4 and gcc 4. 6227 6228Snapshot 0.2.0 (2004-10-27 Carl Worth <cworth@cworth.org>) 6229=========================================================== 6230New license: LGPL/MPL 6231--------------------- 6232The most significant news with this release is that the license of 6233cairo has changed. It is now dual-licensed under the LGPL and the 6234MPL. For details see the COPYING file as well as COPYING-LGPL-2.1 and 6235COPYING-MPL-1.1. 6236 6237I express my thanks to everyone involved in the license change process 6238for their patience and support! 6239 6240New font and glyph internals 6241---------------------------- 6242Graydon Hoare has put a tremendous amount of work into new internals 6243for handling fonts and glyphs, including caches where appropriate. 6244This work has no impact on the user-level API, but should result in 6245great performance improvements for applications using text. 6246 6247New test suite 6248-------------- 6249This snapshot of cairo includes a (small) test suite in 6250cairo/test. The tests can be run with "make check". The test suite was 6251designed to make it very easy to add new tests, and we hope to see 6252many contributions here. As you find bugs, please try adding a minimal 6253test case to the suite, and submit it with the bug report to the 6254cairo@cairographics.org mailing list. This will make it much easier 6255for us to track progress in fixing bugs. 6256 6257New name for glitz backend 6258-------------------------- 6259The gl backend has now been renamed to the glitz backend. This means 6260that the following names have changed: 6261 6262 CAIRO_HAS_GL_SURFACE -> CAIRO_HAS_GLITZ_SURFACE 6263 cairo_set_target_gl -> cairo_set_target_glitz 6264 cairo_gl_surface_create -> cairo_glitz_surface_create 6265 6266This change obviously breaks backwards compatibility for applications 6267using the old gl backend. 6268 6269Up-to-date with latest glitz snapshots 6270-------------------------------------- 6271This snapshot of cairo is now up to date with the latest glitz 6272snapshot, (currently 0.2.3). We know that the latest cairo and glitz 6273snapshots have been incompatible for a very long time. We've finally 6274fixed that now and we're determined to not let that happen again. 6275 6276Revert some tessellation regression bugs 6277---------------------------------------- 6278People that have been seeing some tessellation bugs, (eg. leaked 6279fills), in the CVS version of cairo may have better luck with this 6280release. A change since the last snapshot was identified to trigger 6281some of these bugs and was reverted before making the snapshot. The 6282behavior should be the same as the previous (0.1.23) snapshot. 6283 6284Miscellaneous changes 6285--------------------- 6286Changed CAIRO_FILTER_DEFAULT to CAIRO_FILTER_BEST to make gradients 6287easier. 6288 6289Track XCB API change regarding iterators. 6290 6291Various bug fixes 6292----------------- 6293Fix calculation of required number of vertices for pen. 6294 6295Fix to avoid zero-dimensioned pixmaps. 6296 6297Fix broken sort of pen vertices. 6298 6299Fix bug when cairo_show_text called with a NULL string. 6300 6301Fix clipping bugs. 6302 6303Fix bug in computing image length with XCB. 6304 6305Fix infinite loop bug in cairo_arc. 6306 6307Fix memory management interactions with libpixman. 6308 6309Snapshot 0.1.23 (2004-05-11 Carl Worth <cworth@isi.edu>) 6310======================================================== 6311Fixes for gcc 3.4 6312----------------- 6313Fix prototype mismatches so that cairo can be built by gcc 3.4. 6314 6315Updates to track glitz 6316---------------------- 6317Various fixes to support the latest glitz snapshot (0.1.2). 6318 6319Gradient updates 6320---------------- 6321Radial gradients now support both inner and outer circles. 6322Transformed linear gradients are now properly handled. 6323Fixes for extend type reflect. 6324 6325Glitz updates 6326------------- 6327Converted shading routines to use fixed point values and introduced a 6328shading operator structure for more efficient shading calculations. 6329Support compositing with mask surface when mask is solid or 6330multi-texturing is available. 6331 6332PNG backend cleanups 6333-------------------- 6334Fix output to properly compensate for pre-multiplied alpha format in cairo. 6335Add support for A8 and A1 image formats. 6336 6337Bug fixes 6338--------- 6339Avoid crash or infinite loop on null strings and degeneratively short 6340splines. 6341 6342New? bugs in cairo_clip 6343----------------------- 6344There are some fairly serious bugs in cairo_clip. It is sometimes 6345causing an incorrect result. And even when it does work, it is 6346sometimes so slow as to be unusable. Some of these bugs may not be 6347new, (indeed cairo_clip has only ever had a braindead-slow 6348implementation), but I think they're worth mentioning here. 6349 6350Snapshot 0.1.22 (2004-04-16 Carl Worth <cworth@isi.edu>) 6351======================================================== 6352Cairo was updated to track the changes in libpixman, and now depends 6353on libpixman version 0.1.1. 6354 6355Snapshot 0.1.21 (2004-04-09 David Reveman <c99drn@cs.umu.se>) 6356============================================================= 6357New OpenGL backend 6358------------------ 6359The OpenGL backend provides hardware accelerated output for 6360X11 and OS X. The significant new functions are: 6361 6362 cairo_set_target_gl 6363 cairo_gl_surface_create 6364 6365Automatic detection of available backends 6366----------------------------------------- 6367The configure script now automatically detect what backends are 6368available, (use ./configure --disable-`backend' to prevent 6369compilation of specific backends). 6370 6371Snapshot 0.1.20 (2004-04-06 Carl Worth <cworth@isi.edu>) 6372======================================================== 6373New pattern API 6374--------------- 6375David Reveman has contributed a new pattern API which enable linear 6376and radial gradient patterns in addition to the original surface-based 6377patterns. The significant new top-level functions are: 6378 6379 cairo_pattern_create_linear 6380 cairo_pattern_create_radial 6381 cairo_pattern_create_for_surface 6382 cairo_pattern_add_color_stop 6383 cairo_set_pattern 6384 6385Any code using the old cairo_set_pattern, (which accepted a 6386cairo_surface_t rather than a cairo_pattern_t), will need to be 6387updated. 6388 6389Update to XCB backend 6390--------------------- 6391The XCB backend is now enabled by default, (use ./configure 6392--disable-xcb to turn it off). 6393 6394Faster clipping 6395--------------- 6396Graydon Hoare has added optimizations that make cairo_clip much faster 6397when the path is a pixel-aligned, rectangular region. 6398 6399Bug fixes. 6400 6401Snapshot 0.1.19 (2004-02-24 Carl Worth <cworth@isi.edu>) 6402======================================================== 6403New PNG backend 6404--------------- 6405Olivier Andrieu contributed a new PNG backend. It builds on the 6406existing image backend to make it easy to render "directly" to a 6407.png file. The user never needs to deal with the actual image 6408buffer. The significant new functions are: 6409 6410 cairo_set_target_png 6411 cairo_png_surface_create 6412 6413The PNG backend is not enabled by default so that by default there is 6414not a new dependency on libpng. Use ./configure --enable-png to enable 6415this backend. 6416 6417Snapshot 0.1.18 (2004-02-17 Carl Worth <cworth@isi.edu>) 6418======================================================== 6419Path query functionality 6420------------------------ 6421It's now possible to query the current path. The two new functions 6422are: 6423 6424 cairo_current_path 6425 cairo_current_path_flat 6426 6427Each function accepts a number of callback functions that will be 6428called for each element in the path (move_to, line_to, curve_to, 6429close_path). The cairo_current_path_flat function does not accept a 6430curve_to callback. Instead, all curved portions of the path will be 6431converted to line segments, (within the current tolerance value). This 6432can be handy for doing things like text-on-path without having to 6433manually interpolate Bézier splines. 6434 6435New XCB backend 6436--------------- 6437Jamey Sharp has contributed a second X backend that uses the new, lean 6438XCB library rather than Xlib. It cannot currently be compiled at the 6439same time as the Xlib backend. See ./configure --enable-xcb. 6440 6441Build fixes for cygwin. 6442 6443Bug fixes. 6444 6445Snapshot 0.1.17 (2003-12-16 Carl Worth <cworth@isi.edu>) 6446======================================================== 6447 6448Better text support 6449------------------- 6450This snapshot provides much better text support by implementing the 6451following four functions: 6452 6453 cairo_text_extents 6454 cairo_glyph_extents 6455 cairo_text_path 6456 cairo_glyph_path 6457 6458The text/glyph_extents functions can be used to determine the bounding 6459box (and advance) for text as if drawn by show_text/glyphs. 6460 6461The text/glyph_path objects functions place text shapes on the current 6462path, where they can be subsequently manipulated. For example, 6463following these functions with cairo_stroke allows outline text to be 6464drawn. Calling cairo_clip allows clipping to a text-shaped region. 6465 6466Combined dependencies 6467--------------------- 6468The cairo core now depends only on the libpixman library. This single 6469library replaces the three previous libraries libic, libpixregion, and 6470slim. Thanks to Dave Beckett <dave.beckett@bristol.ac.uk> for all of 6471the heavy lifting with this renaming effort. 6472 6473Conditional compilation of backends 6474----------------------------------- 6475Cairo now allows optional backends to be disabled at compile time. The 6476following options may now be passed to the configure script: 6477 6478 --disable-xlib 6479 --disable-ps 6480 6481Note that the first option is a change from the old --without-x option 6482which will no longer have any effect. 6483 6484OS X supported - several byte-order issues resolved 6485--------------------------------------------------- 6486Cairo has now been successfully compiled under OS X. Testing revealed 6487that there were some byte-order problems in the PostScript backend and 6488the PNG generation in the demos. These have now been resolved. 6489 64902003-10 6491======= 6492Graydon Hoare <graydon@redhat.com> implemented the first real text 6493support using Freetype/fontconfig, (previous versions of cairo used 6494Xft and could only draw text when using an X backend). 6495 64962003-09 6497======= 6498Graydon Hoare <graydon@redhat.com> added the first real support for 6499running cairo with a non-render-aware X server. 6500 6501Jamey Sharp <jamey@minilop.net> virtualized the backend font and 6502surface interfaces in September, 2003. 6503 65042003-06 6505======= 6506Xr is renamed cairo to avoid confusion since it no longer had a strict 6507dependence on X. 6508 65092003-05 6510======= 6511A new image surface backend is added to Xr. Keith Packard 6512<keithp@keithp.com> wrote the image compositing code in libic that is 6513used for the image_surface backend. This code was originally written 6514as the software fallback for the render extension within the X 6515server. 6516 65172002-06 6518======= 6519Carl Worth <cworth@isi.edu> wrote the first lines of Xr, after Keith 6520Packard <keithp@keithp.com> proposed the plan for a stateful drawing 6521library in C providing a PostScript-like rendering model. 6522 6523 LocalWords: mutex BeOS extraordinaire distro's URL lcd bool tarball 6524