Listen to the window, not the canvas, for now.
Create Renderable type to avoid poly/megamorphic call site in the render loop. Use it in Text2D and Quad2D.