It occurs to me that this could cause infinite recursion in some cases, since `invisible_canvas` uses `preserve_current_canvas`.. I don't understand how my quick tests of this were able to pass..