Monday 3 May 2010

Another year...

More than a year since the last post, where does the time go? I put DUIM down for a while whilst a few other things took my interest, but after a bit of a break I'm back to hacking it again.

Things appear to be coming together a little more:-


Finally colours are working, as is (the easy bit) of text rendering. Quite a few of the gadgets that didn't used to work properly have been fixed, and I've added code for image drawing / double buffering / bitblting etc.

I've decided not to write native (= GTK+) toolkit wrappers for the remaining pane types. There are still several things that aren't working properly (most notably scrollers and graph panes) and I suspect the easiest way to get them going will be to just wrap as many native panes as possible -- but if I can't get user-defined panes working on top of DUIM, what hope does any other unfortunate who uses it got? This is the main reason I went with the DUIM-supplied spin-box pane (visible as the "thickness" control on the random rectangles test in the screenshot above) is the DUIM-supplied pane rather than a GtkSpinButton.

Once everything works "as it should" I intend to migrate the few remaining non-native widgets over to wrapped GTK+ widgets.

Fixes since last year include:

  • A bunch of gadgets have been "GTK-ified": list controls, option + combo boxes, sliders.
  • Use bordeaux-threads for threading primitives rather than hand-rolling a generic interface + implementations for different CL implementations.
  • Fixes for a couple of layout issues for top-level sheets, menu-bars, text-editor gadgets, others.
  • Drawing implementations for basic text drawing, drawing in colour, images + pixmaps, clipping regions.
  • Support for key events -- basic ascii generates sensible keysyms (although the keysyms for Unicode chars etc. is likely to be ugly for the time being).
  • Support added for setting and changing the input focus.
  • Fixed radio buttons so that setting their state computationally doesn't lose. A bunch of work on (DUIM-provided) table controls.
  • Command tables now seem to work after fixing a couple of bugs in my macros.
The todo list still contains (major issues, there are many minor issues too):-
  • Resizing one of the DUIM frames doesn't lead to relayout; minimize + restore after resizing doesn't lead to redrawing.
  • When the last active DUIM frame is closed, the event loop is not exited (to be honest I'm not sure it should be, or if the user should just be prevented from closing the last frame).
  • No support for path drawing (this is likely to remain unsupported until some Cairo support is added to the back end).
  • Popup menu + dialog modality needs investigating.
  • Mouse motion event support.
  • Scrolling.
  • Mnemonics + accelerator support.
  • Clipboard handling.
I'll add the usual promise to update this blog more regularly (which I'm bound to break, so don't hold your breath waiting for it to actually happen ;)

3 comments:

  1. Interesting! Is there any public repository? It would be nice to take a look to the code. :-)

    ReplyDelete
  2. This is a very intriguing development, thanks a lot for your efforts!

    ReplyDelete
  3. There's no public repository yet. I've said it before, but it seems I might be right to say it this time -- I *think* I'm pretty close to being in a position where I'm happy with the code I've got and there's sufficient functionality that people other than me might be interested to play with the port (for a very long time nothing really worked) that it's going to be worthwhile to make everything available as a common-lisp.net project.

    ReplyDelete

Followers