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

Release notes:

This release adds system-wide support for unicode (UTF-8). Virtually all of the new features are related to text storage, manipulation or display.

In addition to that, the FileRequester is now an official part of libwoopsi and there are dozens of fixes and improvements.

It is worth noting that this release does *not* include any font classes that can render text beyond the standard ASCII set. This will come in a future release – TrueType support is in the works. Alternatively, you can roll your own font class.

– Moved fatInitDefault() SDL function into woopsifuncs.cpp (Quirky).
– ScrollingPanel::raiseScrollEvent() only fires if events are enabled.
– Gadget::raisesEvents() retrieves its value from the GadgetEventHandlerList object.
– Gadget::setRaisesEvents() alters the GadgetEventHandlerList object.
– Removed the raisesEvents flag from the Gadget class.
– Bmp2Font produces working Font classes.
– Deleted badly-converted fonts:
– Latha;
– Lucida10;
– Roman 10;
– Trebuchet8.
– FileRequester no longer has transparent regions.
– FileRequester sorts correctly.
– FileRequester does not attempt to draw when drawing is disabled.
– FilePath uses WoopsiString::lastIndexOf() to change to parse path string.
– Dragging a screen that isn’t the top screen so that it is not visible no longer causes a crash.
– Removed glyphs from NewTopaz and Topaz fonts.
– Changed NewTopaz font to PackedFont1 from PackedFont16.
– Changed Topaz font to MonoFont from Font.
– Fixed memory leak when enumerating directories in FileListBox.
– FileListBox shows dummy file list when in SDL mode.
– Graphical corruption in GraphicsPort::clipScroll() fixed.
– Fixed FileRequester layout.
– Replaced magic number double click time with define in woopsifuncs.cpp.
– TestPanel class in scrolltest example draws its border correctly.
– Fixed a crash in GraphicsPort::drawText() when trying to draw text outside the clipRect with a PackedFont1 font; should provide a minor speedup.
– ScrollingPanel draws its border correctly.
– Removed Text::getLinePointer().
– MultiLineTextBox::drawCursor() uses a StringIterator to locate the cursor position.
– MultiLineTextBox::drawCursor() does not read past the end of the string when the cursor is positioned beyond the string.
– Text::wrap() does not perform an invalid comparison between line index and char index when truncating the line positions array.
– Text::wrap() correctly appends the string end position in all scenarios.
– Text::wrap() always assumes text height is at least one row.
– Text::getLineContainingCharIndex() returns the correct value if the character is in the last row.
– WoopsiString::insert() explicitly calls its own setText() and append() methods to prevent the Text class from wrapping twice.
– Added WoopsiString::encodeCodePoint().
– PackedFontBase::isCharBlank() returns correct value if character not present in font (fixes horizontal alignment in MulitLineTextBox).
– Key repeat values stored in defines.h.
– FileListBox does not show “.” directory.
– Minor optimisation when building the FileListBox contents.
– Split Label::calculateTextPosition() split into horizontal and vertical methods.
– TextBox switches to left-aligned automatically if contents exceeds size of box.
– Fixed memory leak and logic problems when deleting gadgets.

New Features:
– Added FontBase::getCharHeight().
– WoopsiString supports UTF-8 (Lakedaemon).
– Split glyphs into separate GlyphFont.
– GadgetStyle includes a glyph font.
– All gadgets converted to use WoopsiStrings instead of raw chars/char arrays, meaning they support UTF-8.
– Various changes in Text class to support UTF-8.
– Changed parameters to GraphicsUnclipped::drawText() (and subclasses).
– Added StringIterator class, for efficient iteration over a UTF-8 string.
– Removed dependence on WoopsiString::getCharArray().
– Promoted FileRequester gadget from bonus folder to main library.
– libfat enabled by default in test projects and template.
– Added WoopsiString::lastIndexOf().
– Added WoopsiString::subString().
– Added WoopsiString::indexOf().
– TextBox implements key repeats when left or right d-pad is held down; cursor moves repeatedly until end of string reached or d-pad released.
– MultiLineTextBox implements key repeats when left or right d-pad is held down; cursor moves repeatedly until end of string reached or d-pad released.
– Textbox contents scrolls horizontally as cursor is moved.
– Added key repeat event handling to the entire system.