The TODO list for cairo is separated into things to improve this website and things to improve the cairo library itself.
Website improvements
Integrate subset of old cairo-demo programs into the wiki proper
Integrate existing reference manual into the wiki proper
Fix these broken links (if any):
Library improvements
This is an attempt to collect all good ideas that have been proposed for inclusion in cairo. None of these items have been scheduled for a particular release, (see roadmap 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, (via the mailing list), and you 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_WINDINGandCAIRO_FILL_RULE_INVERSE_EVEN_ODDor another way to provide that functionality.Add support for programmatic patterns, (ie. arbitrary gradients).
This should likely be modeled after PostScript Type 6 and Type 7 shading functions, (coons patch and tensor-product patch meshes). See the PostScript Language Reference for details.
Add
cairo_arc_to.see Behdad's proposal with patch or the
arc_tobranch in Behdad's repositoryAdd 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_serialandcairo_changed)cairo_save/restore_path()http://lists.freedesktop.org/archives/cairo/2007-April/010363.html
cairo_copy_clip()andcairo_copy_clip_flat()http://lists.freedesktop.org/archives/cairo/2007-April/010520.html
Add a move-current-point-but-don't-make-a-new-sub-path API, (bulia byak wanted this for an inkscape optimization). See:
http://lists.cairographics.org/archives/cairo/2008-April/013651.html
Obviously it will need a real name first.
Add support for backends implemented in external libraries.
Export cairosurfacesnapshot
Export meta surfaces
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 define glyph extents for FreeType. Currently if hinting is enabled, it returns integer extents, which is not necessarily tight to hinted glyph path.
Fix
CAIRO_EXTEND_REFLECTin pixman and remove the current hackFix disabled show-glyphs-many case in cairo test suite
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? It may also draw something for a stroke if pen-locking (below) is implemented).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. [1]
Font matrix locking as well.
Explore Render-like component-alpha ARGB masks
Rotated text is not keeping baseline due to glyph cache, that stores only single image of a letter: [1] example, source code
Backend-specific improvements
Win32 backend
- Fix self-copy test
- Fix trap-clip test
- Hardware Acceleration of some sort
- win32 rendering fails for rotated bitmap fonts
- HDC multithread conflict [1]
Xlib backend
- Switch to using XRenderAddTraps rather than XRenderCompositeTrapezoids
- Use XlibRectStretch for nearest-neighbor image scaling.
