Move drawing logic to drawers

Close #1106.
i notice that _paint is only used in base class and never overwritten. this is great. can we just make it `private` then?