The current model for input is now like this:
Gosu::Input::currentTouches returns a vector of the touches currently on the surface.
Gosu::Window::touchBegan/touchMoved/touchEnded(Gosu::Touch touch) are the callback functions where you can handle touches. They are like buttonDown and buttonUp, except they don't take a Gosu::Button but a Gosu::Touch.
Gosu::Touch contains coordinates and a "void* id" flag. This is used to identify touches while they last, i.e. the same finger will get the same "id" until it is released. Use this to remember which touch started when and where if you need it.
For example, a use case might be writing a button. The button has a boost::optional<Gosu::Touch> member variable.
• In touchBegan, if there is no current touch, you check if the touch is over the button. If so, the button remembers it by copying the Gosu::Touch into the member.
• In touchMoved, you check if the id of the touch is the same as the remembered one. If so, you update the stored Touch.
• In touchEnded, you compare the id against that of the remembered touch. If it is the same, you clear out the member variable. If the touch was close enough to the button when releasing, you trigger an event.
• In the button's rendering code, you can check if there is a touch and it is still close enough to determine whether the button should be drawn pressed down.
Gosu::Input::setMouseFactors (actually undocumented) sets two factors that will also be applied to all touches. You can use this, and the similarly undocumented Gosu::Graphics::setResolution to virtually scale and existing game down to iPhone size. They both might be replaced by matrices soon, though.