
ROADMAP
=======

0.1 "Infrastructure"
--------------------

* Matching (descendant and child).
* Background color.
* Basic border styles, also through the `color' property.
* Single background image.

0.2 "Correctness"
-----------------

* Border images, c.f. http://ejohn.org/blog/border-image-in-firefox/
* Border radius.
* Background image: repeating, tiling.
* Unit tests.
* Test using the theme torturer.
* Test using valgrind.
* Gilouche-CSS theme pretty much matches the original.
* Bugzilla module.

Code review:
  + Check all list iterators for const-ness.
  + Make all string comparisons case insensitive?
  + Get rid of the _match() functions all toghether?
  + Check 80 column code width.

0.3 "Features"
--------------

* Multiple background images.
* Additional border features, e.g. `collapsed', `none'.
* Implement `inherit' as per CSS spec. Do we need our own set of attributed 
  inherited by default?
* Support per-object style attributes in libccd (and maybe also the engine, but how?).
  The node-class interface would have to be extended to support a `get_style()'
  method.
* Application-specific theming, someting like "@import "gimp.css" gimp;", 
  maybe support wildcards like "gimp*" to match things like "gimp-1.2".
* Match properties against properties, including namespaces:
  e.g. "GtkVScrollbar[adjustment:value=attribute(adjustment:lower)]".
  Can be used to implement custom inactive scrollbars, c.f. 
  http://mail.gnome.org/archives/usability/2008-August/msg00037.html
* Animated images APNG, MNG, animated GIF, whatever gdk-pixbuf supports.

0.4 "Performance"
-----------------

* Profile using the theme torturer.
* Can selectors and blocks be merged at theme load time?
* Can computed styles be attached to widgets using g_object_set_data()?
* Use a string pool for the lookup tables?
* Can we use binary search in the lookup tables?
* Cache the type name inside the node?

0.5 "Compliance"
----------------

* Support widget mimicking by creating Gtk[Rc]Style style information and
  feeding it back into gtk, e.g. using gtk_rc_parse(). Maybe we would end up
  with two drawing modes, the `normal' one and the GtkStyle based one. In any
  case gtk_rc_get_style_by_paths() should work. This is very apparent e.g. with
  the empty treeview in TWF. Maybe need to fix this earlier, at least partially.

More 0. releases go here if needed ...

1.0 "Rejoicing"
---------------

* Implement additional CSS pseudo classes like ":first-element",
  ":last-element", maybe custom ones for GtkTable, HippoCanvas.
  Those will be queried on the container and can e.g. be used to
  make the outer corners of buttons in a button box rounded.

  GtkHButtonBox GtkButton:first-element {
    border-top-left-radius: 3px;
    border-bottom-left-radius: 3px;
  }
  GtkHButtonBox GtkButton:last-element {
    border-top-right-radius: 3px;
    border-bottom-right-radius: 3px;
  }

1.2 "Fonts"
-----------

* Implement font effects.

2.0 "Canvas"
------------

* Implement a WHATWG canvas and let the theme draw on it using ECMAScript.

Out of band
-----------

* Create a spiffy website, possibly on http://gnome.org/projects. 
  Any volunteers?
* Evaluate alternative SVG renderers as they become available.

