This file contains a list of some things that have been proposed for inclusion in cairo. None of these items have been scheduled for a particular release, (see the ROADMAP file next to this TODO file for those). If you'd like to see an item on this list get into a particular release, let us know that you're planning on working on it, (see http://cairographics.org/lists ), and we can move the item to ROADMAP with your name on it. Changes that add new API (API changes/removals will not be considered) ====================================================================== • Add CAIRO_FILL_RULE_INVERSE_WINDING and CAIRO_FILL_RULE_INVERSE_EVEN_ODD or another way to provide that functionality. • Add support for programmatic patterns, (ie. arbitrary gradients) • Add cairo_arc_to. see http://lists.freedesktop.org/archives/cairo/2005-August/004801.html or see arc_to branch in bedhad's repository • Add support for custom caps It would be nice if the user had a mechanism to reliably draw custom caps. One approach here would be to provide the coordinates of the butt cap faces so that the user can append seamless caps to the current path. We may also need to provide the coordinates of the faces of every dash as well. • Polling API (cairo_get_serial and cairo_changed) • cairo_save/restore_path() http://lists.freedesktop.org/archives/cairo/2007-April/010363.html • cairo_copy_clip() and cairo_copy_clip_flat() http://lists.freedesktop.org/archives/cairo/2007-April/010520.html Performance improvements ======================== • Add dashing support to the fast-path rectilinear stroking code, (will help GTK+ focus rectangle, for example) • Improve software polygon compositing by doing it in a single scanline pass rather than tessellating, rasterizing, then compositing the entire polygon. • Clip trapezoids that are partially outside the clip region Other fixes =========== • Fix/define tolerance for PS/PDF/SVG backends • Fix CAIRO_EXTEND_REFLECT in pixman and remove the current hack • Fix disabled show-glyphs-many case in cairo test suite • Get pixman merged up with X server fb implementation • Possibly remove pdiff (slows down the test suite with little benefit) • Make font backends separable from their native surfaces • Fix cairo so that a degenerate matrix draws nothing rather than triggering an error state. That is: cairo_scale (cr, 0, 0); should not cause an error, (though maybe it shouldn't actually draw _nothing_ for painting an infinite source pattern---compute the average color for a surface-based source pattern perhaps?). • The new tessellator has greatly improved performance, robustness, and code readability, but may still suffer from "missed intersections" as described here: http://cm.bell-labs.com/cm/cs/doc/93/2-27.ps.gz [Hobby93c] John D. Hobby, Practical Segment Intersection with Finite Precision Output, Computation Geometry Theory and Applications, 13(4), 1999. We could do multi-pass Bentley-Ottmann or add a tolerance-square pass as described by Hobby in the paper above. • Fix vertical metric and TrueType subsetting: Text drawn with vertical metrics cannot currently use TrueType subsetting for PDF/PS output as the code doesn't write out the necessary VHEA or VMTX entries to the TrueType font objects. As a result, cairo uses Type3 fonts which generates slightly different outlines. Type1 has the same problem. • Pen matrix locking. Carl has written an excellent summary but unfortunately that was not sent to the mailing list. Ask him. • Explore Render-like component-alpha ARGB masks Backend-specific improvements ============================== Win32 backend • Fix self-copy test • Fix trap-clip test PS/PDF improvements • Fix extend modes in PDF • Fix encoding "issues" reported here: http://lists.freedesktop.org/archives/cairo/2006-December/008985.html • Use glyph advances to generate more compact PostScript (done for PDF) Xlib backend • xlib backend requires xrender to compile, while it can perform without xrender at run time. Make it compile without it. see http://lists.freedesktop.org/archives/cairo/2006-October/008075.html • Switch to server-side gradients • Switch to using XRenderAddTraps rather than XRenderCompositeTrapezoids • Use XlibRectStretch for nearest-neighbor image scaling.