Hi,
Well, talk is cheap and code is good, so I've implemented a really
simple and silly theme bundle. There's a screenshot:
http://w1.423.telia.com/~u42308495/alex/sillytheme1.png
and the source:
http://w1.423.telia.com/~u42308495/alex/sillytheme-0.0.tar.gz
There's a theme.patch that should be applied (to NSApplication.m). It
adds a bit of code to the backend bundle initialization that loads any
additional bundles specified in the defaults key 'GUIThemeBundles' (full
paths only; it currently only works if the backend is a bundle). The
stuff in the theme-test/ directory is the actual bundle. Compile it and
point 'GUIThemeBundles' at it and start your favorite app, eg.:
defaults write NSGlobalDomain GUIThemeBundles /foo/theme-test.bundle/
openapp foo.app
To stop using it, just delete the defaults key, eg.:
defaults delete NSGlobalDomain GUIThemeBundles
Anyway, this is how I think that themes should work. A generic
bundle-loading mechanism in gui would be nice, and is really all that is
needed, although a clean separation of rendering and everything else in
the code would make it easier to write theme bundles.
There are a bunch of interesting ideas for bundles, eg. change NSMenu et
al to use some different method of displaying menus, like horizontal
menus or using windowmaker's menu support.
- Alexander Malmberg