Undo is a double-linked list of undo/redo actions attached to each buffer. Hopefully it’s efficient and robust. I need a way for functions to tell the method calling them to stop without returning a value and without being passed a function to call. Oh, and without using globals. Easy, huh? 🙂
Transformations I’m going to cheat and use OpenGL transformation matrices for: other renderers and the export filters can interpret calls to push and pop the transformation stack and do whatever they need to.
Pan & Zoom use transformations, and have their own buffer at the bottom of the buffer stack. The current Pan & Zoom data is stored in buffer variables and the buffer is regenerated as needed. This is a nice example of how Minara’s design philosophy gets a simple, transparent implementation of something that would otherwise be entangled with the guts of the system, hidden away from the user.
I think I’m going to use FLTK for the UI basics. It’s too much effort for too little reward to write anything myself at the moment. File load/save and CMYK colour dialogs will help make Minara feel much more usable.
One this round of development is done, next it’s picking and copy/paste. Then a decent pen tool and Minara is ready for 0.1!