Cairo's TODO list

The TODO list for cairo is separated into things to improve this website and things to improve the cairo library itself.

Website improvements

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)

Further comparison of cairo with other vector graphics languages, and in particular features that cairo lacks, can be found in missing.

Performance improvements

To quote Carl, "We can take the maximum single length from the dash sequence, (either drawn or not), and compute its maximum size in device space. (We should have code for that part in cairo_pen.c).

Then if that length is less than the tolerance, multiplying the current alpha by the percentage of the dash sequence that's lit, then stroking a solid line should be sufficient."

An incomplete patch can be found here:

A remaining task is "One approach that would work is a sliding integral over the pattern with a 1-pixel-wide window, checking for a constant value at every position, (after rounding based on the maximum 8-bit alpha depth)."

Again profiling, and a perf-case showing the improvements are also necessary.

A list of pixman projects (a core component for Cairo) is available here.

Other fixes

Backend-specific improvements

Implement a fully hardware accelerated backend. Glitz is only designed to be an implementation of XRender on top of OpenGL, and therefore only provides accelerated composition. The goal of a future OpenGL backend would be to investigate offloading more computation, such as rasterization, to the GPU. There have been a number of experiments along this direction - see drm, opengl, gl and gral. They each have their own limitations...

Instead of adding an OpenGL backend, an alternative would to write a cairo state tracker for gallium.

New backend to output Printer Command Language.

Cross-platform backend to generate Windows Meta Files.

Mozilla wrote a backend to interface with QT so that they could port their applications to Qtopia.

The implementation is here: mozilla-central updates, an old patch for cairo.

Outstanding issues: * No test suite integration. * Use of C++ badly breaks autotools when linking without it included.

Test-suite improvements

Integration improvements

Not strictly in cairo-land, but noted lest we forget.

Student Projects

The following list of ideas was from Cairo's participation in the Google Summer of Code 2008, which saw Joonas Pihlaja undertake a Scan converting rasteriser project.

Each idea below is given a difficulty estimate, (Easy, Medium, or Hard), determined by one of the potential mentors. Please use these ratings to help choose an appropriate project. If a project description uses terms you've never heard of and is also rated Hard, then you can know that that's a project that will provide plenty of learning experiences for you. If a project is rated as Easy, then maybe it won't keep your interest and give you the intellectual challenge you're looking for.