Woopsi 0.99 Released

Woopsi 0.99 is now available from the usual place:


This version has had a significant version bump because it is considered complete. I’m holding off from releasing a “version 1.0” to allow more time for any bug reports and for me to finish writing the documentation.

Changes in this version include some minor cosmetic improvements to the ProgressBar, bugfixes to the slider gadgets, and some more gadget test projects. I’ve added in the compiled libfreetype.a file that was missing from all previous releases.

Some preliminary documentation can be found here:

Woopsi Docs 20100520 (PDF)

One of the ongoing problems I’ve had with Woopsi’s documentation is that it becomes obsolete as soon as it is written. Before I wrote this document, for example, I hadn’t added UTF-8 support to the WoopsiString class. Nor had I decided that WoopsiStrings, not char arrays, would be the official way of working with string data. I set about documenting Woopsi’s string support assuming that they were too fundamental to change, and then had to re-write the entire string chapter once the UTF-8 changes were in place.

The document above is at a very early stage. Comments and criticisms are welcome. Once the documentation is finished, it should hopefully be both a complete guide to developing with Woopsi and a description of how the library works:

  • What to install to get it running, ie. devKitARM, etc (installation instructions for 3rd-party components will just include links back to their sites);
  • How to create user interfaces;
  • How to create new gadgets;
  • The internal workings of Woopsi (co-ordinate systems, gadget painting algorithms, etc).

Now that Woopsi is essentially finished, here are some interesting Woopsi stats:

  • Over 91,000 lines of code;
  • 600MB for a full repository checkout;
  • Source distribution is 37MB when unarchived;
  • 5 other contributors;
  • 9MB of Doxygen-generated documentation;
  • 399KB for a “Hello World” app (twice the size I’d hoped for, but WPaint - a simple paint program - is only 397KB);
  • Development spanned 2 years 8 months, though for at least half of that time no development was undertaken;
  • 5 released projects using Woopsi:
  • 2 unreleased projects that may be using Woopsi:

Judging by the Google search terms collected by this blog, I know that there are many more projects out there using Woopsi. At the very least, there are plenty of people who try to use Woopsi but balk at the lack of documentation. Strangely, they don’t post on the forum for assistance.

Whilst on the subject of stats, here are some from the blog itself:

  • 367 posts;
  • 132171 words in posts;
  • 100834 words in comments;
  • 37 months blogging.

That works out as roughly 120 words a day for 3 years.


Modal Windows and Documentation

Had a go at trying to make modal gadgets yesterday. Not going to happen. Not in a clean way, anyhow. There are just too many problems. If I moved a lot of the physical event handling into the Gadget class out of the Woopsi class, I’m still left with a lot of problems:

  • How can I increase the VBL count?
  • How can I manage the context menu?
  • How can I manage the deletion queue?

There are plenty of other questions along the same lines. It’s possible, but the solutions would be very ugly. For the most part, Woopsi’s code is quite tidy at the moment and I don’t want to start kludging it up.

Instead, I’ve implemented a “ModalScreen” class, which consists of about 2 lines of code. It’s just a Screen class that calls “erase()” in its draw function, making it transparent. Since it fills the entire screen, it blocks access to any gadgets in lower screens and thus makes its own children modal. No kludges, one (tiny) extra class. Neat!

There are now “shelved” and “unshelved” events, which get triggered when gadgets are shelved or unshelved. The hide() and show() methods now trigger the hidden/shown events properly.

Lastly, I’ve made some updates to the documentation. The calculator tutorial should now work, as should the “hello world” tutorial. I’ve tidied up a few other things. Whilst I’m on the docs topic, I’ve switched the Woopsi web link on the SourceForge site to this blog. It should get me a bit more traffic and reduce the negative impact of the out-of-date documentation.

Oh, one last thing. There’s a new version of DeSmuME out (0.8) for Windows, OSX and Linux. This version works with Leopard.