[cairo-commit] ROADMAP TODO
cworth at kemper.freedesktop.org
Thu Apr 5 16:35:17 PDT 2007
ROADMAP | 164 +++++++++++++++++++++++++++------------------
TODO | 229 +++++++++++++++++++++++-----------------------------------------
2 files changed, 184 insertions(+), 209 deletions(-)
diff-tree 94460a9790ece7a436d6681ab41d7b2365f0775f (from d801aa59f84d95568e36d02a0ecf3544b9914187)
Author: Carl Worth <cworth at cworth.org>
Date: Thu Apr 5 16:35:03 2007 -0700
ROADMAP/TODO: Update with 1.4.4 and 1.6 items from recent meeting
diff --git a/ROADMAP b/ROADMAP
index 71b8d09..c7f8aa5 100644
@@ -1,86 +1,120 @@
-This is the cairo roadmap.
+This is the cairo roadmap
Everything here is subject to change, but it is hoped that all of it
-will be useful. If you want to influence, please feel free to get
-involved with cairo (see http://cairographics.org ).
+will be useful. If you want to influence the roadmap, please feel free
+to get involved with cairo (see http://cairographics.org ).
-The intent is for this to be a living document. We want both the users
-of cairo, (GTK+, GNOME, Mozilla, Mono, etc. etc.) to let us know
-features they need and dates by which they are needed so that we can
-use those to guide our plans.
+cairo 1.4.4 (scheduled for 2007-04-09)
+ â¢ Mathias Hasselmann's "static region" patch series, (to be reviewed
+ by behdad, and performance tested by cworth)
-Additionally, people who are actively developing cairo itself should
-regularly update this document to reflect their current plans. If you
-don't want to see a particular release happen without some essential
-feature, then put that feature on the list and put your name next to
-it to indicate you are working on it.
+ â¢ Chris Wilson's many recent cleanups, (to be reviewed by behdad and cworth)
-Firefox 3.0 - http://www.mozilla.org/projects/firefox/roadmap.html
-Firefox 3 (scheduled for early 2007?) is the first release expected to
-use cairo for all rendering. In the meantime, development builds using
-cairo are available. Satisfying firefox 3 well requiring releasing a a
-new version of cairo some months before the firefox 3 release data
-with much-improved performance.
-Gnome 2.18 - http://live.gnome.org/TwoPointSeventeen
-Looks like early January would be a great time to get cairo 1.4 out.
-Themes and Schedules
-cairo-1.4 (January 2006): Better performance
- â New tessellator
- - New rasterization
- - Finer-grained fallbacks for PS/PDF
- - [Bug 9994] performance opportunities in cairo
- - [Bug 10150] Support inline with Sun Studio compiler
- - AltiVec patches
- - Kmaraas's warning cleanups
- - Mathias's Mutex cleanup patch
- - Update bindings chapter of documentation to reflect new APIs
+ â¢ 10508 Painting regression in 1.4.x (cworth)
+ â¢ 5777 fbcompose.c broken for some composite operations post r1.5
+ (choose one of the existing patches)
+ â 10531 cairo nquartz backend floating point precision issues (bewins)
+cairo 1.4.x (not scheduled, may become part of 1.6)
+ â¢ David Turner's cairo-ft rewrite. (behdad)
+ â¢ Fix all remaining XFAIL failures from the test suite
+ a8mask has a patch available on the list
+ â¢ Implement CAIRO_EXTEND_PAD for surface patterns
+ â¢ Work around bug in X server causing extend-reflect test to hang it
+ â¢ Eliminate problems with "unsupported image formats" for xlib,
+ (very frequently duplicated bug reports and a regression since
+ cairo 1.0.x apparently)
+ 7735 cairo doesn't support 8-bit truecolor visuals
+ 9993 Cairo fails with 555 X server visual
+ â¢ Discard trapezoids that lie outside the clip region (cworth)
+ â¢ Review and land AltiVec patches
+ â¢ Update bindings chapter of documentation to reflect new APIs
(get_reference_count() and user_data for all)
- - Work around bug in X server causing extend-reflect test to hang it
- - Fix a8mask (patch available)
- - Possibly remove pdiff
- - Make font backends separable from their native surfaces
-cairo 1.4.0 ideas (think performance!)
-â Implement framework for performance regression testing
+cairo 1.6 (scheduled for July 2007, targeting firefox and GNOME)
+ â¢ Change from 16.16 to 24.8 (or so) for fixed-point storage (cworth)
+ â¢ Implement a faster lookup-table-based rasterizer (cworth)
+ â¢ New cairo-xlib API to support IncludeInferior Pictures (see bug
+ 10329 for one proposal --- perhaps do
+ cairo_xlib_surface_create_for_picture instead)
+ â¢ Make cairo-quartz a supported backend (vlad)
- Investigate "low-hanging fruit" identified by David Turner (write test case for each)
+ â¢ Make cairo-xcb a supported backend (Jamey Sharp)
-â Look into speeding up pixman gradients
+ â¢ A significant improvement to pixman compositing code (jrmuizel)
+ jrmuizel's recent work and other ideas going on).
-â Look into improving text positioning/placement on ARM (with no hardware floating-point)
+ â¢ User-font API (behdad, krh)
- Look into speeding up dashing used for GTK+ focus rectangle
+ â¢ cairo_font_options_[gs]et_writing_mode() (behdad)
-â Look into other GTK+ performance regressions as identified on performance-list
+ â¢ cairo_font_metrics_t (behdad)
- xlib backend
- Switch to server-side gradients for xlib backend
- Fix X server to make server-side gradients faster
- Switch to using XRenderAddTraps rather than XRenderCompositeTrapezoids
+ â¢ New text API that allows for perfect text extraction in PDF (behdad)
- Implement a non-trapezoid based rasterizer for use with xlib and other backends
+ â¢ Set PS Level for the PS backend (adrianj)
- Cull geometry outside clip region bounds
+ â¢ EPS output from the PS backend (adrianj)
-â New tessellator
+ â¢ API to allow enable/disabling certain subsetters (adrianj)
+ This would also be useful feature to control via an environment
+ variable as it would allow the user to override the application
- Bugs to fix
- CAIRO_EXTEND_PAD is not implemented for surface patterns
- âCAIRO_FORMAT_RGB16_565 should be deprecated
- â8379 infinite loop when stroking (see 8379 branch in cworth tree)
+ â¢ Debug environment variable to disable PDF compression (adrianj)
For other ideas that have been proposed for cairo but are not yet
scheduled on the roadmap of any particular release, please see the
TODO file next to this ROADMAP file.
+Where does the information on this roadmap come from?
+The intent is for this to be a living document. We want both the users
+of cairo, (GTK+, GNOME, Mozilla, Mono, etc. etc.) to let us know
+features they need and dates by which they are needed so that we can
+use those to guide our plans.
+Additionally, people who are actively developing cairo itself should
+regularly update this document to reflect their current plans. If you
+don't want to see a particular release happen without some essential
+feature, then put that feature on the list and put your name next to
+it to indicate you are working on it.
+Firefox 3.0 - http://www.mozilla.org/projects/firefox/roadmap.html
+Firefox 3 is the first release expected to use cairo for all
+rendering. In the meantime, development builds using cairo are
+available. Late June 2007 appears to be a rough deadline for when
+mozilla would like to freeze on a cairo release, (as mentioned by
+Vladimir in a cairo meeting on 2007-04-02). No new cairo API is
+needed, but performance improvements are always appreciated.
+GNOME - http://live.gnome.org/TwoPointSeventeen
+GNOME has a regular (6 month) release schedule, so there's always
+another GNOME release coming up soon.
diff --git a/TODO b/TODO
index db23626..342d1c4 100644
@@ -1,179 +1,111 @@
-This file contains a list of some things that have been suggested
+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
+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
-Changes that are expected to impact the public API
+ â¢ Add support for programmatic patterns, (ie. arbitrary gradients)
- Patch submitted to mailing list?
-/ Documentation included in patch?
-|/ Review of patch completed?
-||/ Test case included?
-Backwards compatible (API additions only)
- Add CAIRO_FILL_RULE_INVERSE_WINDING and CAIRO_FILL_RULE_INVERSE_EVEN_ODD
- Add support for programmatic patterns, (ie. arbitrary gradients)
-P Add cairo_arc_to.
- Add support for custom caps (see below for details)
- Add CAIRO_STATUS_DESTROYED
-See New Api below
-Details on some of the above changes
-* 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.
-Changes that do not affect the public API
-* Change stroke code to go through one giant polygon. This will fix
- problems with stroking self-intersecting paths.
-* Fix the intersection problem, (see reference to Hobby's paper
- mentioned in cairo_traps.c).
-* Should add geometry pruning as appropriate.
-* Fix/define tolerance for PS/PDF/SVG backends
-* Fix CAIRO_EXTEND_REFLECT in pixman and remove the current hack
-Other changes (this text used to be in RODMAP)
- Fairly severe bugs
- 6806 cairo 1.0.4 crash progressbar in window
- PDF: minefield shows too-tiny bitmapped fonts in image fallback
- PDF: minefield shows strangely hinted glyph shapes (only without truetype subsetting)
- PDF: minefield has broken selection (only with truetype subsetting code)
- 4630 Fonts too large when drawing to image surface while printing
- 4863 stroking problems with wide dashed lines
- Fix all expected failures (XFAIL) in the test suite
- Fix disabled tests in the test suite
- Win32 backend
- â1. Incorporate into test suite
- 2. Correct output for the entire suite
- a. self-copy
- b. trap-clip
- [There is some mailing-list discussion about possible fixes
- for these.]
- New API
+ â¢ Add cairo_arc_to.
or see arc_to branch in bedhad's repository
- cairo_surface_show_page() and cairo_surface_copy_page()
- show_page is a surface operation and should have been there instead of
- cairo_show_page() from the beginning. Same about copy_page().
- Implement the right API now.
- User-font API---a couple of threads of interest:
- Polling API (cairo_get_serial and cairo_changed)
- PS/PDF improvements
- - Make image fallbacks finer-grained than a whole page
- - Fix extend modes in PDF
- - Fix encoding "issues" reported here:
- - Use glyph advances to generate more compact PS/PDF (done for PDF)
- - Look into generating EPS. That may be done using a new constructor
- for the PS backend, or better, using an API similar to
- cairo_svg_surface_restrict_to_version. The PDF backend needs a
- restrict_to API at some point too.
- Xlib backend
- - xlib backend requires xrender to compile, while it can perform without
- xrender at run time. Make it compile without it. see
- - Cache patterns (maybe solid ones only). see
- Quartz backend (maintainer needed!)
- - Mark Quartz backend as supported:
- a. Incorporate into test suite
- b. Correct output for the entire suite
-Some known bugs (this text used to be in BUGS)
-XXX: Many of these bugs are likely no longer valid. We should
-invesitgate each and either move it up into TODO (above) or ROADMAP or
-else just delete it.
-The caches need to be invalidated at font destruction time.
+ â¢ 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.
-The polygon tessellation routine has problems. It appears that the
-following paper has the right answers:
+ â¢ cairo_surface_show_page() and cairo_surface_copy_page()
+ how_page is a surface operation and should have been there instead of
+ cairo_show_page() from the beginning. Same about copy_page().
+ Implement the right API now.
+ â¢ Polling API (cairo_get_serial and cairo_changed)
- [Hobby93c] John D. Hobby, Practical Segment Intersection with
- Finite Precision Output, Computation Geometry Theory and
- Applications, 13(4), 1999.
-Recent improvements to make the intersection code more robust (using
-128-bit arithmetic where needed), have exposed some of the weakness in
-the current tessellation implementation. So, for now, filling some
-polygons will cause "leaking" until we implement Hobby's algorithm.
+ â¢ 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.
-Stroke width of 0 might do bad things.
+ â¢ Clip trapezoids that are partially outside the clip region
+ â¢ Fix/define tolerance for PS/PDF/SVG backends
-Could there be a bug in PS backend exposed by?:
+ â¢ Fix CAIRO_EXTEND_REFLECT in pixman and remove the current hack
+ â¢ Fix disabled show-glyphs-many case in cairo test suite
-This needs a new testcase.
+ â¢ Get pixman merged up with X server fb implementation
+ â¢ Possibly remove pdiff (slows down the test suite with little
-This puts the cairo_t in an error state:
-cairo_scale (cr, 0, 0);
+ â¢ 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?).
-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
+ â¢ The new tessellator has greatly improved performance, robustness,
+ and code readability, but may still suffer from "missed
+ intersections" as described here:
-Text transformations is a mess in PS/PDF backends. Many combinations of
-rotated/scaled ctm, rotated/scaled font_matrix, and subsetting code used
-(Type1/Type3/TrueType) are broken.
+ [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.
-Move docs inline. see
+ â¢ 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.
+ â¢ Make image fallbacks finer-grained than a whole page (most of the
+ This is work to be done in the cairo-analysis-surface layer
+ and will benefit ps, pdf, svg, and any other
+ analysis-surface-using backends.
+ Win32 backend
+ â¢ Fix self-copy test
+ â¢ Fix trap-clip test
-Look into the glyph cache. Moreover, make sure we are reusing scaled fonts
+ PS/PDF improvements
+ â¢ Fix extend modes in PDF
+ â¢ Fix encoding "issues" reported here:
+ â¢ 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
+ â¢ Switch to server-side gradients
+ â¢ Switch to using XRenderAddTraps rather than XRenderCompositeTrapezoids
+ â¢ Use XlibRectStretch for nearest-neighbor image scaling.
More information about the cairo-commit