Next I implemented a text box complete with mouse interaction. I made sure to get all the expected things working: double click, triple click, dragging, ctrl+backspace, etc.
I implemented a file finder widget using rucksack for image assets.
I used libav to open an audio file and display the waveforms.
I implemented ability to delete a selection, save, and playback audio with PortAudio.
At this point I had been using the default Unity Ubuntu user interface. I noticed that when vsync is on, switching to another window or switching back was really laggy. This sucks. I filed a bug for that, and then switched to XFCE where I am now much happier, and the lag is gone.
I have some complaints about PortAudio. First of all, it spits out a bunch of garbage to stderr that you can't do anything about. So I'm already biased against it. Secondly it does not give you the low level control that you need for a DAW application. For example it doesn't have PulseAudio support so I'm accessing the sound driver via Genesis to PortAudio to PulseAudio ALSA Wrapper to PulseAudio to ALSA. And finally, I'm getting some crashes, and my favorite way to fix crashes is to delete code.
So I'm turning to the PulseAudio API directly. This means that when I want to support OSX I need to create a CoreAudio backend, and when I want to support Windows I need to create an ASIO or DirectSound backend. I might also want to create an ALSA backend for Linux installations that don't have PulseAudio. I haven't yet investigated what the audio situation is for the various BSDs.
Oh yeah and a lot of linux audio community members say I should only support JACK because PulseAudio will have too high of a latency. JACK support is planned but one of my design philosophies is that Genesis should be easy to install and run right off the bat without having to separately set up and run a JACK server. So the final strategy will be: try JACK, and then fall back to PulseAudio.
But for now, PulseAudio is a build requirement.
After I got zooming and scrolling to work, I decided that it was time to create the core audio pipeline and start working on something that lets us create music rather than just edit audio files.
git checkout -b audio-pipeline