zoom around cursor + lot of other stuff

I spent way too much time on this ;)