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

You can find a complete changelog in ant512’s Blog here or directly here:

– Screen flipping/ordering does not occur if only one screen is visible.
– Removed ability to set font draw colour/monochrome from font classes; replaced with explicit “colour” parameter to all draw methods.
– Removed height member from FontBase and transplanted all methods to PackedFontBase, making FontBase data free.
– Minor tidying in gadget.cpp.
– Removed width and height members from BitmapBase and transplanted to BitmapWrapper, FrameBuffer and Bitmap.
– Removed constructor from FontBase.
– Gadget::checkCollision(Gadget*) will ignore collisions with hidden gadgets.
– Gadget::checkCollision(Gadget*) now accepts a const Gadget*.
– Replaced Gadget::swapGadgetDepth() with Gadget::changeGadgetDepth().
– Rewrote Gadget::swapDepth() to be more intelligent.
– The index to which Gadget::swapDepth() moves the gadget is now determined by swapDepth() instead of the parent’s swapGadgetDepth() method.
– Clicking the depth button in an AmigaWindow no longer results in graphical corruption.
– Removed Screen::swapGadgetDepth().
– Removed Woopsi::swapGadgetDepth().
– Minor tidying and optimisations.
– Gadget::_decorationCount is an s32 instead of a u8.
– Fixed array index confusion in RectCache::markRectDamaged().
– Fixed bugs in Graphics::floodFill().
– Stack methods in Graphics class expect a reference to a stack as a parameter instead of pointer.
– Removed static variables from Woopsi class.
– Gadget::checkCollision(Gadget*) shortcuts if a gadget is being compared with itself.
– Removed unused Gadget::GADGET_NO_RAISE_EVENTS flag.
– Removed redundant Woopsi::goModal() method.
– Replaced AmigaScreen-specific flags with extra constructor parameters.
– Replaced AmigaWindow-specific flags with extra constructor parameters.
– Woopsi::handleClick() correctly interprets clicks on children of the context menu.
– Sliders choose a more appropriate size when max value == min value; fixes scrollbars in empty ScrollingListBoxes.
– AmigaScreen doesn’t lose focus when depth gadget is clicked if it is not lowered to the bottom of the screen stack (ie. only one screen).
– Removed concept of “close type” from Gadget.
– ListBox::onClick() won’t crash if the area clicked doesn’t contain an option.
– Woopsi gadget passes its style object to the two background screens it creates.
– ProgressBar accepts a style object in its constructor.
– Removed GadgetFlagTypes from Gadget class.
– Removed flags from all gadget constructors.
– Changing label borderless state correctly repositions text.
– Gadget::setBorderless() is virtual.
– Label redraws minimal amount when text is changed.
– TextBox redraws minimal amount when cursor moves.
– Gadget::raiseGadgetToTop() parameter name in header file agrees with source file.
– Fixed consistency of Gadget method names:
– moveChildToDeleteQueue() renamed to moveGadgetToDeleteQueue().
– moveChildToShelvedList() renamed to moveGadgetToShelvedList().
– moveShelvedToChildList() renamed to moveShelvedToGadgetList().
– removeChild() renamed to removeGadget().
– getChild() renamed to getGadget().
– getChildCount() renamed to getGadgetCount().
– closeChild() renamed to closeGadget().
– shelveChild() renamed to shelveGadget().

New Features:
– Added Gadget::getHighestCollidingGadgetIndex().
– Added Gadget::getLowestCollidingGadgetIndex().
– Added text member to GadgetColours class – text colour can be defined individually.
– Added Gadget::getTextColor().
– Added Gadget::setTextColour().
– Added Gadget::setDecoration().
– Added Label::setBorderless().
– Added Label::markTextRectDamaged().
– Added Bitmap::setDimensions().
– Added Bitmap copy constructor.