Move drawing logic to drawers

Close #1106.
the fact that other drawers always eventually call `AbstractDrawer._enterData(data)` via super and this one might not seems like a potential issue. as below (with setup) please call directly into `AbstractDrawer` if you arent calling `super`