Reimplement as a Canvas, to fix an issue on Linux.