From: Ilmari Heikkinen Date: 2006-05-26T00:33:23+09:00 Subject: Re: [ANN] Recipients of Google Summer of Code awards On 5/24/06, Victor Shepelev 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: http://www.mike-austin.com/inertia/index.html