Tuesday, November 08, 2005

IFS Designer Update and Tutorial

I've made some more updates to my IFS Designer. I think it's actually quite usable now as most of the changes are GUI changes. The main window is still just a mess of buttons but I'm just waiting until I've got enough functions to warant a menu. If I made one now it'd be save, load, exit and draw and that's just not worth my trouble putting a menu together and it's not worth your trouble to make the extra click. Anyway, here's the list of changes I did make:
  • There is now a README that contains a short tutorial. If you don't know what an IFS fractal is this won't tell you but it will tell you how to make one and a pretty one too!
  • Added a CHANGELOG, mostly to prevent me from claiming non-new features as new, also there's a (mercifully short) bug list.
  • Integrated the event loops for Ltk and cl-sdl to allow live update of IFS display. This was simply a case of telling the cl-sdl event loop to run ltk:process-events when it's idling. I initially felt a bit wrong about this. I thought Ltk should be in charge, not some subsidiary window that's only there to show the pretties. I like cl-sdl too but I wouldn't want to build a GUI with it! I got over myself when I realised that not only was it the path of least resistance but that the cl-sdl event loop spent most of it's time idling anway.
  • Separated the cl-sdl display window from the IFS class hierarchy so now it displays a given IFS rather than displaying itself. This is a bit of a no-brainer, the interface is not that which it controls/displays. Sometimes it's just easier (to start with) to lump it all together and then seperate it out once you've decided which bits should go where. I guess this design method is similar to the oft cited optimisation analogy of crystalisation. You start out using lists and no type information at all. Then as you find the optimisation bottlenecks you add the necessary declarations that allow a fast program to crystalize out of the mailliable, but slower un-typed lisp. Similarly with design you start out with lots of interconnected objects then as the desired functionality becomes clearer you can start to pull them appart until you have a nice clean, modular design.
  • Made cl-sdl display window exitable by changing a slot value. Now who's in control! :)
  • Closed windows now re-open automatically. When you close an Ltk window it is just hidden by default so it only needs to be made visible again not re-created; which is nice.
There's lots of extra code in the archive that's getting ready to implement exciting new features but not yet. It will give you an idea of what's on my mind though.

There's a new version of the matrix library that you'll also have to get for this new version to work.

No comments: