Woopsi is a BSD-licenced windowing system for the Nintendo DS, written in C++. The aim of the project is to create a simple windowing system that programmers can use for their applications, decreasing the tedious amount of GUI code that people have to write.

The system itself is loosely based on the Commodore Amiga’s “Intuition” windowing system. Everything in the system is treated as a “gadget” (in the same way that Windows treats everything as a sub-class of a window), everything takes place within a “screen” environment, and the look-and-feel of the system intentionally resembles the old Amiga system.

The windowing system is *not* intended to be a complete desktop environment. It is *not* going to be a DS version of GNOME, KDE or Windows Explorer. It will simply provide a system for rapidly building window and gadget-based interfaces.

– Fixes:
– Renamed “font” to “sysfont”.
– Moved font includes out of “all_gfx.h”.
– Removed font inheritance (problematic with many gadgets).
– Made font an optional parameter in all gadget constructors.
– Removed font from constructors of window border gadgets that do not use a font.
– Woopsi height based on top screen offset instead of an arbitrary number.
– Private class members set to protected where appropriate.
– “Gadget::setBorderless()” now invalidates rect cache.
– Removed “Gadget::removeGadget()” function (request 1846590).
– “Window::createBorder()” sets border focus correctly.
– Window border gadgets base their colour on the parent’s active flag rather than by abusing the focus system and their own active flags.
– GraphicsPort was using SCREEN_WIDTH instead of _bitmapWidth when blitting bitmaps.
– Fonts work with const u16* bitmap data instead of plain u16*.
– Woopsi clears its background correctly when a screen closes.
– Gadgets draw only those regions not obscured by children (previously broken by switch to region caching).
– Gradient cache uses new instead of malloc.
– Removed support for external bitmaps from SuperBitmap.
– Renamed Gadget::getRectClippedToParent to Gadget::getRectClippedToHierarchy.
– Making a gadget invisible makes its children invisible.
– Fixed off-by-one error in Gadget::checkCollision() functions.
– Fixed gadget-space to display-space co-ordinate problem in GraphicsPort clipping routines.
– Removed GraphicsPort::clipXORRect() and replaced with bugfixed alternative.
– Various functions in Gadget class now check isVisible() instead of _flags.visible.
– focus() functions ignore the call unless the gadget is not active.
– GraphicsPort will no longer draw to deleted/invisible gadgets.
– Tidied up ambiguities in Gadget::closeChild().
– Gadget::closeChild() function setting the active gadget pointer to top gadget in the stack, but the top gadget could have been the gadget being closed.
– Fixed same problem in Gadget::hideChild().

– New Features:
– Added static system font routines to Woopsi class.
– Gadgets automatically use system font if no font specified (bug 1846003).
– Added “floodFill()” function to SuperBitmap (request 1816931).
– Added “drawBitmap()” function to SuperBitmap (request 1813792).
– Added “newBitmapGraphicsPort()” function to SuperBitmap.
– Added “setFont()” function to Text.
– Split Screen class into ScreenBase, AmigaScreen and SimpleScreen classes.
– Added “permeable” flag to gadgets – if set to “true”, child gadgets can be dragged to exceed the borders of their parents (ie. windows can be dragged off-screen).
– Gadget::getRectClippedToHierarchy clips to entire ancestor tree.
– Gadget::moveTo() enforces permeability of parent gadgets.
– Gadget::resize() enforces permeability of parent gadgets.
– Window::resize() enforces permeability of parent gadgets.
– Changed VBL events so gadgets must register with Woopsi to receive them (request 1847147).
– Centralised gadget deletion queue handling into static Woopsi functions.
– Added Gadget::hideChild() function.
– Added VBL counting and static getVBLCount() function to Woopsi class (request 1847147).
– Split Window class into WindowBase, AmigaWindow and SimpleWindow classes.
– Added text output methods with colour parameter to GraphicsPort and SuperBitmap classes.