Woopsi is a Nintendo DS GUI library for rapidly creating user interfaces for homebrew software. Modelled after the AmigaOS windowing system.

Release notes:

Version 0.35 is now out. Changes are listed below. The most significant changes this time around include the addition of a keyboard gadget for text input, cursor support in the TextBox gadget and re-written VBL integration to use a much simpler timer gadget for VBL-based code.

I’ve attached a screenshot of the keyboard. It has shift, caps lock and control modifier keys, and the full 7-bit ASCII set of symbols (ie. a fairly standard American keyboard layout).

There are two new example projects. One illustrates how to use the new timer, whilst the other shows how to use the keyboard.

– Fixes:
– Renamed “Textbox” to “TextBox”.
– Corrected case of “PackedFontBase.h” include in “packedfontbase.cpp” (thanks Gattman, bug 2101099).
– Removed offcolour pixels from around @ symbol in sysfont bitmap.
– Moved @ symbol in tinyfont.bmp to correct ASCII location.
– SkinnedWindows move to front when clicked.
– Renamed TextBox::TextPositionXXX to TextAlignmentXXX, along with all related functions and similar in MultiLineTextBox and ScrollingTextBox.
– TextBox::addText() was allocating one byte too many when concatenating strings.
– Renamed addText() to appendText() in TextBox, MultiLineTextBox and ScrollingTextBox classes.
– Text::wrap() correctly wraps text rows with no break points.
– Fixed const-correctness of some Font (and subclass) methods.

– New Features:
– Button has different appearance when disabled.
– CheckBox has different appearance when disabled.
– ContextMenuItem has different appearance when disabled.
– CycleButton has different appearance when disabled.
– RadioButton has different appearance when disabled.
– Added WoopsiKeyboard gadget.
– Added all missing 7-bit ASCII glyphs to sysfont.
– Added keyboard example.
– Added TextBox::appendText(char).
– Added TextBox::setText(char).
– Added MultiLineTextBox::appendText(char).
– Added MultiLineTextBox::setText(char).
– Added ScrollingTextBox::addText(char).
– Added ScrollingTextBox::setText(char).
– Added WoopsiTimer gadget.
– Woopsi::registerForVBL() and Woopsi::unregisterFromVBL() now only work with timers; all VBL code now is handled with timer gadgets.
– Removed EVENT_VBL event.
– Removed Gadget::vbl().
– AnimButton automatically animates as it has as built-in timer gadget.
– Added missing glyphs to tinyfont.bmp.
– Added timer example.
– Added cursor functionality to TextBox.
– Added GraphicsPort::drawFilledXORRect().
– Added GraphicsPort::drawLine() and associated clipping functions.
– Added WoopsiString class and replaced string handling code in TextBox.
– Added Label gadget as a base class for TextBox and Button; can be used as a read-only, borderless text display gadget.
– Text inherits from WoopsiString class.
– Added MultiLineTextBox::removeText() methods.
– TextBox border bevelled both out and in.