Taking suggestions from the last post, I rewrote the keyboard-driven block movement code so that callbacks were reduced by a factor of 16. This allows for smoother animation and a continuous ligature of the blocks so that they are never more than 60 ms away from their final resting place. This makes the UI much more responsive to user input and should make hardcore players very pleased.
I got rid of the spinning preview (yes, it's still off-center) and replaced it with a one-time pulse effect. I agree it's less annoying. Looking for opinions on the new effect.
I was able to reduce the number of callbacks throughout the code by a huge amount. This makes the animation much snappier as frames are not dropped while duplicate callbacks are dispatched.
The underlying code has lots of room for improvement. I need to think a little more about the location of the data structures in the code. I think it can be simplified significantly. There are a few leaks here and there but nothing major.
One caveat in all this: I uncovered two major bugs in Clutter. The first one has already been fixed by Emmanuele Bassi in Clutter 0.8.7 (Thank you! Sorry I keep pestering you!)--which hasn't been released yet. The second I reported just a few hours ago so we'll have to see what happens with that. The upshot is that you cannot run Gnometris with --enable-clutter from trunk right now unless you use git clutter-0-8 HEAD and you revert commit ce584541f113d4b5a4b5823b31f45e52f2da0da2.
I will update this post tomorrow morning with the Flash version once the Vimeo upload has gotten through their two hour long wait queue.