tool-image: invalidate on demand instead of constantly redrawing