[API review]Move drawing logic to drawers

Close #1106.
ideally, we wont need a `paint` method at all - it will just fall thru to subclass implementation.