Woopsi 0.46 Beta Released

Yet another release. This one is special as it marks Woopsi’s transition from alpha to beta. Woopsi is now in beta, which means that the feature set is frozen and I’m going to concentrate on documentation and bug fixing.

Woopsi is the poster child for the dangers of feature creep. I started it back in September 2007 with the idea that I’d support screens, windows, buttons and a textbox, and get the whole thing written in a month. Two and a half years later, Woopsi has evolved into a fairly complete windowing system with scrollers, listboxes, UTF-8 encoded unicode strings, TrueType font support, a suite of clipped 2D drawing tools, etc. A full SVN repository checkout consumes over 500MB of disk space.

I’m finally happy with the feature set. There are, of course, more features I’d like to add, such as skinning and bitmap loading, but it’s reached the point that I’d prefer to stop adding to the code and document what I’ve got so far.

I’m also very interested in feedback about the library. If you’ve been tempted to use Woopsi but have been put off by the ever-changing API, now is a good time to get started with it. The more feedback I get, the more bugs I’ll be able to fix.

Once all of the documentation is done and I hit version 1.0, I’m considering talking to some of the homebrew websites to see if they’d be interested in running a Woopsi-based competition. Just an idea at the moment, and I’m not sure how practical it will be or if they will be interested. Still, worth a try.

This latest release includes the last set of new features. MultiLineTextBoxes implement the cursor fully. The cursor can be moved up, down, left or right with the d-pad. It moves to the cursor’s position when the textbox is tapped with the stylus. The textbox scrolls to follow the cursor when it is moved. The MultiLineTextBox has been significantly refactored. All of its alignment options finally work, and it even shows the keyboard when it is double-clicked (though this behaviour can be disabled via a new disableKeyboardPopup() method).

I’ve added a few base classes that define the interface for some of the gadgets, enabling composite gadgets that mimic their behaviour to present a more consistent set of methods.

There are a few other bugfixes and improvements; they are all listed in the changelog, as usual.

Download the new release from SourceForge:


Chase-san on 2010-03-20 at 14:40 said:

That really is what put me off for the most part. As far as skinning support goes, I would be happy with come color select and the ability to overlay the window’s with my own image.

Ant on 2010-03-21 at 12:33 said:

For colour selection, you can create a custom GadgetStyle struct, change the colours, and pass it as the final parameter for most - if not all - gadgets. For changing the windows, just subclass the Window class and override its drawContents() method.

Part of the problem with the skinning system is that it adds a huge amount of complexity (something like a dozen classes, I/O, text file parsing, etc) to solve a problem that can be dealt with far more simply by just subclassing and overriding drawContents().

Mbmax on 2010-04-06 at 13:20 said:

Hi Ant512. I follow your project since the beginning now and i have to admit woopsi remind me so much my favorite old computer Amiga (workbench). Sometimes i wish to be a coder just to be able to use your libs ! :)

So this comment, just to wish you that more and more coders use your great Woopsi !


karagh on 2010-04-12 at 21:47 said:

I’m glad to see Woopsi reaches a beta stage. Congratulations!

Antoine on 2010-04-16 at 23:03 said:

I just discovered this library. I have been doing some development for the NDS but using the bare libnds is painful, and PALib seems to create more problems than it solves.

I was able to get started using Woopsi in no time. The library and the samples compile out of the box, and my existing code that uses wifi still works. Now I can concentrate on my project instead of having to develop the UI from scratch.

Thanks a lot and congratulations for such a useful library!