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

Release notes:

– Removed PALib dependency from filerequester example.
– FileRequester gadget fixed for devKitARM r24 (Quirky).
– ListBox redraws correctly when an option is selected in single selection mode.
– Fixed crash in SliderVertical when trying to set value if max and min values are the same (Quirky).
– Fixed crash in SliderHorizontal when trying to set value if max and min values are the same.
– Fixed FileRequester crash when path has trailing slash (Quirky).
– Fixed double-click in SDL (Quirky).
– FileRequester fixed for SDL (Quirky).
– SDL path fixes (Quirky).
– Escape key to quit in SDL mode (Quirky).
– WindowBorderTop and SkinnedWindowBorderTop no longer have pointers to freed memory if window title changes (Quirky).
– ScreenTitle and SkinnedScreenTitle no longer have pointers to freed memory if screen title changes (Quirky).
– Flipping window depth with depth gadget no longer results in corrupted window contents.
– Fixed const-correctness of various Text class methods.
– SDL framebuffers initialised to black.
– More doxygen fixes.
– Removed WoopsiArray::begin().
– Removed LinkedList::begin().
– Renamed Gadget::draw() to Gadget::redraw() and removed unnecessary overloads from all classes.
– Const correctness fixes in Gadget class.
– ScrollingTextbox adjusts scrollbar grip position correctly when first initialised.
– Alert box draws XOR rect correctly when released.
– Requester draws XOR rect correctly when released.
– WoopsiKeyboard no longer adds itself as the decoration event handler twice; fixes XOR rect drawing when clicked/released.

New Features:
– Added Gadget::getChild() and Gadget::getChildCount() (for leonelhs).
– Added context menu example (for leonelhs).
– ListData class raises events to ListDataEventHandler objects.
– ListBox listens for ListData events.
– Added base template class for event args passing.
– Refactored gadget event system:
– Replaced EventArgs struct with GadgetEventArgs class.
– Renamed EventHandler to GadgetEventHandler.
– Gadgets can now have multiple event handlers.
– Replaced handleEvent() method with multiple methods.
– Removed EventType enum from GadgetEventHandler.
– ListData events passed by references instead of pointers.
– WoopsiKeyboard includes a set of new events:
– Press
– Release
– Repeat
– WoopsiKeyboard no longer stores the last key clicked.
– WoopsiKeyboard has set of event-related classes:
– KeyboardEventHandler
– KeyboardEventArgs
– Refactored context menu event system:
– Added ContextMenuEventArgs class;
– Removed “_value” from ContextMenu;
– Removed “getContextMenuValue()” from Woopsi;
– Selected context menu item now accessible via ContextMenuEventArgs::getItem().
– Slider grip automatically resizes; no need to call resizeGrip().
– End point rects now cached (sans child rects) for extra speed.
– Gadget rect caching moved into separate RectCache class.
– RectCache::removeOverlappedRects made non-recursive.
– Gadget::clipRectToHierarchy made non-recursive.
– Added GraphicsPort::copy() to copy regions of the framebuffer around.
– Screen dragging code improved; uses new GraphicsPort::copy() method.
– Added GraphicsPort::scroll() to scroll regions of gadgets.
– Removed scrolling code from ScrollingPanel and rely on new scroll() method instead.
– Added GraphicsPort::dim() function to add DimmedScreen functionality to all gadgets.