A canvas is how a widget displays contents
you can create a mutable canvas with a certain size and position
relative to the parent, and then tell a widget to draw to that canvas
via a mutable reference
Trait for backends, implementing this trait on a datatype
means you can use it as a backend for the context!
backends are responsible for everything regarding the terminal.
This means you could actually implement a backend that talks to
a GUI written in GTK, QT, Iced, or anything else!