On 5/24/06, Victor S. [email protected] wrote:
Are somewhere detailed description for all those projects?
Here’s my project description:
What am I proposing?
Writing a pure-Ruby GUI widget system using OpenGL with the
following goals:
- usable on its own (using GLUT or SDL to create windows)
- embeddable in other OpenGL applications written in Ruby (e.g.
games)
- cross-platform
- extendable using Ruby
- usable API
- themeable
The widget system would be usually used as an overlay layer, drawn
on top of the underlying frame[1].
Why do I feel this is important?
Problems this project aims to solve:
- There is no Ruby widget set that would work inside your OpenGL
application and provide decent building blocks for writing GUIs.
- Writing new widgets usually requires hacking in C, and you don’t
get the graphics power of OpenGL.
- If you want to add a menu or a couple of options checkboxes and
tabs to an OpenGL game written in Ruby, you either need to write
your own widgets, embed your game engine into a system like GTK,
or create bindings to a GUI library like CEGUI[2].
So, in a nutshell, this project would:
- create a vehicle for GUI research
- provide a simple cross-platform GUI toolkit
- speed up game development with Ruby
What am I going to deliver?
A documented set of basic widgets, a layout manager and a theming
system. The widget set would be tested to work on Linux, Windows and
Mac OS X, and packaged as a gem.
The basic widget set would include windows, text inputs, scroll
bars, menus, lists, checkboxes, radio buttons and pushbuttons.
The layout manager would have an absolute positioning mode, and
horizontal and vertical layouts.
Themes would be done by changing the bitmap images of the theme,
with more extensive customization if there is time. To test the
theming functionality, there is need to make a couple of themes.
How am I planning to do this?
If this proposal is accepted, I’m going to work full-time on it for
the full duration of Summer of Code.
I’m planning to extract the basic rendering bits from my librend[3]
rendering library, then create scenegraph nodes for doing the layout
and widget drawing. This should take roughly 2-3 weeks, including
tests and documentation. By the end of the first week, I should have
the simplest widgets together (toggles, buttons, labels, lists.) The
second week would be doing a simple text editing widget, scroll
bars, and windows. Third week or the end of the second week would go
to extracting the functionality from librend and making it into a
stand-alone system.
After having the functionality nailed down, the next phase would be
making it portable, which will likely take a week or two. This would
include testing the library on Windows and Mac OS X, and working
around the inevitable differences in their preferred ways of getting
texture data.
Creating a gem and making it install correctly on the different
platforms should take from a day to a week. Since I haven’t created
gems before, this phase may well gravitate towards the one week
mark.
The remaining time would go to some combination of: making up for
delays in the previous phases (most likely), making the API
friendly, writing better documentation, polishing the test themes,
optimizing the slowest parts of the rendering path (e.g. redraw only
when changed, cache windows to textures), and extending the
functionality (one can always hope).
Time permitting, I would also like to explore automatically
generating GUI forms for objects and method calls, perhaps aiding
efforts to create a Morphic-like GUI in Ruby[4,5]. This will have to
wait until completing the widget set project, though.
References:
[1] Overlay GUI:
http://librend.rubyforge.org/screenshots/prelim_widgets.png
[2] CEGUI: http://www.cegui.org.uk/
[3] Librend: http://librend.rubyforge.org/
[4] Morphic: http://minnow.cc.gatech.edu/squeak/30
[5] The Inertia project: Inertia User Interface Environment