add open functionality
use double-buffering to allow drawing off the edge