This one requires drawing to the canvas, so it doesn't make so much sense to move the implementation over.