UI Invalidation

Save CPU usage by marking widgets to selectively recalculate and repaint when changes happen.