Rouge Project Page
Rouge is to be the Ultimate Ruby User
Interface. This is a Grand Goal and the path will be long.
Discussion about Rouge is held on a mailinglist, kindly hosted by
germane-software. [not sure, can I put the address here openly?]
Results are put on the FreeRide
WiKi, but let's recoup some of the results here:
- Ease of Use Using Ruby's unique language expressiveness
and readability, programming your UI should be simple and efficient. Rouge
should let you do the easy/default things in short code, while allowing the
- Consistency Straight from the above, Rouge's API and
naming conventions should be consistent with Ruby standard modules.
- Attractiveness Any UI should be pleasing for the
eye. Simple widgets where that suffices, elaborate graphics and images when
- Native Look and Feel Partially overlapping with
attractiveness, a user expects his UI to blend into the OS where the
application is run. This can be done by using native toolkits. We wish to be
able to run one Ruby/Rouge application on all Ruby-supported OSs, such that it
blends in everywhere, without any changes in the code.
- Complete Functionality Some toolkits lack certain
widgets, though. So Rouge must provide the missing ones itselves. To take this
to the extreme, Ruby will also provide a pure Ruby implementation, that does
not use a native toolkit, but lower level interfaces.
- Internationalization Ruby is from Japan. Of course
Rouge needs to support more than just plain ASCII. Expect i18n and such.
As a result from those requirements, Rouge has a tentative architecture (from
top to bottom):
Note that it is possible to put layers on top of alpha (GUI builders, like
glade, should use alpha). Also, there will be layers below gamma, like
- ALPHA The API that the programmer will use. This should
hide all implementation details, difficulties and differences. It will provide
the Ease of Use criterium.
- DELTA The layer that determines the OS, available
toolkits and decides which to use. Since it is quite possible that parts of
gamma and omega are combined in one session, this layer must also provide
things like layout managers.
- OMEGA The bindings to all native toolkits.
- GAMMA The Pure-Ruby toolkit, built on lower level
For now, Rouge ignores higher layers and is non-specific about lower layers.
A good place to start in the architecture, because it allows you to see the
results immediately. For now, it is Ruby-Wise by Kero
and implements more than just Gamma elements. It uses Xlib and provides some
basic widgets. Some small applets are implemented with it, that dock into
Window Managers that support this.
An extra requirement for Ruby-Wise is that it must run on an iPAQ with
Obtain Ruby-Wise with:
cvs -d:pserver:email@example.com:/cvsroot/rouge login
cvs -z3 -d:pserver:firstname.lastname@example.org:/cvsroot/rouge co rubywise
What must be tackled first? What can be done later?