Save/restore state instead translating twice.

That's exactly the sort of situation where floating
point imprecision likes to bite you.
(and the other draw() already does it the Right Way)
Unused imports
Prune some never-used bits.
Generics