moved most code from Controller::renderLoop out into private event methods, which are called and returned as needed