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.40 is now out.

This release is the first alpha version. At this point I’m mainly concerned with bugfixing and tidying up than adding significant new features.

Big changes this time around include the removal of PALib support and a directory restructure. This is the first release of Woopsi that ships as a proper library. Installation instructions are included in the zip file, but it’s essentially a matter of just copying the libwoopsi folder to the devkitpro folder.

Additionally, there are a lot of improvements to the graphics API, are a few new example and test projects, and a sizeable number of bugfixes.

Download from SourceForge as usual:


– PALib support removed.
– Pointer to selected day button in calendar resets to NULL when new month selected; prevents day button incorrectly popping up if same button is clicked in new month.
– Calendar::getPreferredSize() returns valid values.
– Label text is greyed out when disabled.
– Huge speed increase in Calendar::resize().
– Calendar’s child controls correctly fill entire available space.
– Calendar correctly selects date if new day is the same as old day but in a different month.
– Gadget drag event only raised if stylus is actually moved whilst dragging mode active.
– ScrollingPanel drag and scroll events only raised if stylus is actually moved whilst dragging mode active.
– MultiLineTextBox greys out text when disabled.
– MultiLineTextBox::removeText() correctly repositions cursor.
– TextBox greys out text when disabled.
– Scrolltest compiles correctly.
– SimpleScreen and SimpleWindow helper gadgets removed.
– Renamed LinkedList to WoopsiLinkedList and LinkedListIterator to WoopsiLinkedListIterator to avoid type clashing with LinkedList in devkit.
– Tidied up woopsifuncs.h.
– SuperBitmap::getBitmap() returns a pointer to the Bitmap object instead of the Bitmap object’s raw pixel data.
– Moved skinned gadgets out of main library and into bonus folder.
– Removed fatInitDefault() stub method for SDL out of individual .cpp files and into nds.h.
– dimmedscreen.h includes woopsi.h.
– Graphics::drawBitmap() clips correctly if bitmap destination co-ords are greater than the size of the destination bitmap.
– GraphicsPort::drawPixel() clips correctly.
– GraphicsPort::drawXORPixel() clips correctly.
– Replaced DMA_Force and DMA_Copy with woopsiDmaForce() and woopsiDmaCopy() to fix ancient problems with DMA not seeing latest RAM state.

New Features:
– Calendar test added.
– MultiLineTextBox test added.
– TextBox test added.
– Added an overload to GraphicsPort to print a length of a string in a specific colour.
– Restructured directories into traditional library layout.
– Upgraded main project to VC++ 2008.
– Added libwoopsi.a to SVN.
– Added template example that uses libwoopsi.
– Reorganised demo code into new demo directory.
– BitmapIO class can load 16-bit BMP images with any pixel encoding.
– BitmapIO class can load V3, V4 and V5 DIB headers.
– BitmapLoader example illustrates loading of most supported BMP types.
– Added skinned gadget example.
– Added SkinIO class to bonus folder – loads skins from disk.
– Added BitmapBase class to define basic interface for a bitmap.
– Added BitmapWrapper to enable included (not loaded) bitmap data to be used as a read-only Bitmap object.
– Moved drawing code out of Bitmap class into new Graphics class.
– Added MutableBitmapBase class to define basic interface for an editable bitmap.
– Added FrameBuffer class to wrap framebuffer inside a bitmap class.
– All references to DrawBg array now work with frameBuffer array.
– Added GraphicsUnclipped to perform raw unclipped bitmap drawing.
– GraphicsPort inherits from GraphicsUnclipped in order to reduce code repetition.
– Font system uses new Bitmap object hierarchy.
– System fonts available as global objects.
– Rewritten clipping routine in Font and MonoFont.
– Reorganised VC++ project with more filters.
– Rect struct moved out of Gadget class and into separate header.
– SuperBitmap no longer includes drawing functions; instead it exposes a non-const pointer to its bitmap and a non-const pointer to a Graphics object that can draw to the bitmap.
– Added bitmapdrawing example.
– Added gadgetdrawing example.
– Added blit() and blitFill() methods to Bitmap and FrameBuffer, and signatures to MutableBitmapBase.
– Added getData(x, y) method to all bitmap classes.