Thursday, January 22, 2009

GUI plans

This week Pedro Est├ębanez wrote what he claims will be the last entry in his Okiwi blog. It's a shame that there'll be no more updates to Okiwi, but I think we all new that this was the case after the quiet period following his initial release. A web browser is a lot of work.

I've looked at Okiwi's code and, apart from some monster thousand-line functions, it looked OK. The quad-tree rendering algorithms are certainly miles better than Bunjalloo's naive approach to showing words and images on the screen. But what counts is releasing stuff that's useful too. Okiwi didn't have all the minimal extras to get some websites to work (I'm thinking cookies and forms here) and these things need to be thought about from the start. I'll admit that I'm not the best at getting new releases out, especially now with a 1-year-old running about the house, but I've managed a few releases over the last year or so.

So what does this mean? Well with DSOrganize also abandoned, it looks like I've succeeding in boring the competition into early retirement! Go me! Heh. Now I just have to keep going. Since I wrote about abandoning Bunjallo a few weeks back, I've received quite a few emails and comments saying "don't give up dude!". And I can't really give up, I'm a code addict. Not everything I hack on gets released of course, there are many false starts and dead ends before I get something that's worth releasing.

My current way of wasting time is trying to integrate, or to port (or whatever), Bunjalloo to the Woopsi GUI library. There are a couple of problems with this, but it would have its advantages too. First off, the bad news. Woopsi is ASCII only. That's a really big stumbling block, but I think I'll be able to fix it given my experience writing UTF-8 decoders already. The other problem is that I'll have to rewrite the current rendering "engine" to this new Woopsi API. I have no idea if this'll go well or if it'll annoy me to such a degree that I'll throw the whole attempt in the bin.

The advantages of using Woopsi are that I'll get this widget toolkit that was designed specifically for the DS for free. The current widgets are OK, but there are some design issues and writing multi-window style configuration screens more difficult than it ought to be. Writing the configuration screens has been the most irritating and dull part of the whole Bunjalloo experience so far. A couple of core classes were getting ugly and it was clear to me that I'd got something wrong in the design. A change of tack will get things rolling again hopefully, while making it easier to add new features. If I rewrite the lot in Woopsi, then changing to an options screen wouldn't hide the current web page, for example. And I could even add multi-tab browsing (well, multi-window but it boils down to the same thing). This would be my killer feature of a Woopsi port.

The current progress on the port is not very impressive, sadly. I can show the start page, without images or links. Hmph. But the command line version can connect and show web pages (albeit just as crudely). This isn't starting from scratch you see - I have all the back end stuff still in place, and the design has been improved to allow multi-tab/window to be possible, memory permitting. The biggest UI shock is that each web page would be rendered on only one screen, rather than across both. I don't know if Woopsi allows windows to span both screens, but the fact is that I never really find myself looking at the top screen when browsing pages anyway. It just feels like dead space. Perhaps I'll be able to add the controls to a window on the top screen, since swapping screens is very easy with Woopsi - you just click a little icon in the top right and the screens switch places. This way the current controls for stop, forward, back, etc., could be moved out of the way when browsing. We'll see how it goes.

So what do you think? A crazy idea? Or a flash of brilliance? (Clue: it's a crazy idea). I'd recommend downloading the latest Woopsi demo, play around with it a bit, then try to imagine what a mini web browser with that kind of "feel" would be like. I think it'd be pretty cool.