
ROADMAP
=======

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

### Features ###
* Improve gtkrc export.
* Add a fixup stage when the stylesheet is loaded, handle things like 
  single `background-size: <length>;` there.
* Background attachment.
* Store type-name, type-id and selector-group in the GtkStyle and use that
  information if no widget is passed.
* Border images, c.f. [border-image in Firefox](http://ejohn.org/blog/border-image-in-firefox/).
* [Box-shadow](http://www.w3.org/TR/css3-background/#box-shadow).
* 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 libccss (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. 
  [Link](http://mail.gnome.org/archives/usability/2008-August/msg00037.html).
* Animated images APNG, MNG, animated GIF, whatever gdk-pixbuf supports.
* Support system gtk system colors.
* [CSS Transitions](http://webkit.org/specs/CSSVisualEffects/CSSTransitions.html)

### Internals ###
* Embed the "property" struct in all properties, implement `ccss_selector_apply()`
  in a generic manner.
* 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.
* Use `for` to iterate over `GSList`, e.g 
  `for (GSList const *iter = list; iter != NULL; iter = iter->next) { ... }`

### Theme ###
* Make theme active (use pseudo-classes).
* Set text color.
* Ready for desktop-wide use.

0.4 "Correctness"
-----------------

* Unit tests.
* Test using the theme torturer.
* Test using valgrind.
* Investigate splitting out `ccss_css2_style_t` from `ccss_style_t` making it
  an opaque `unsigned char[x]`. Install only a minimal number of of required
  headers (ccss, stylesheet, selector-group, style*, node).
* Think about per-stylesheet node-class and functions interface.
* Bugzilla module.

0.5 "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.6 "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
-----------

* Libcroco: fix `#foo` and `.bar` global selectors.
* Investigate libcroco CSS3 compliance: sequences, tuples (see background-image)
* Create a spiffy website, possibly on [GNOME Projects](http://gnome.org/projects). 
  Any volunteers?
* Evaluate alternative SVG renderers as they become available.
* Investigate a helper app for widget matching, like what's in 
  [GLE](http://testbit.eu/~timj/historic/gle/).

### Inspirations for themes ###
* [Mockscape](http://www.flickr.com/photos/andyfitz/2706976226/).
* [Garrett](http://ux.suse.de/~garrett/public/hackweek/oneclick/mockups/oneclick-mockup-trust%20and%20install.png).
* [cypohirogen](http://cypohirogen.deviantart.com/art/Mail-Scrollbar-for-Leopard-79257200).
* [Jimmac](http://jimmac.musichall.cz/guimockups.php?mockup=xgl)
