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
     • 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.
