only recompute colors and highlights once per mode change, not every
draw cycle