The DoubleBufferedCanvas class provides double buffering functionality.
Painting events simply cause the offscreen buffer to be painted.
It is the responsibility of sub-classes to explicitly update the offscreen buffer.
The offscreen buffer can be updated in two ways.