I had a lot of problems with touch events. However, they weren't GWT's fault, just different browsers doing different things.
// Listen for the screen touch start
mainPanel.addDomHandler(event -> {
handleScreenTouches(event.getChangedTouches(), true);
}, TouchStartEvent.getType());
// Listen for the screen touch move
mainPanel.addDomHandler(event -> {
handleScreenTouches(event.getChangedTouches(), true);
}, TouchMoveEvent.getType());
// Listen for the screen touch end
mainPanel.addDomHandler(event -> {
handleScreenTouches(event.getChangedTouches(), false);
}, TouchEndEvent.getType());
And then kept my own array of what touches are occurring.
I'm not sure if it works fine with a surface pro. You can try if you like
https://drift.team/ if the game controls work fine (especially with multi touch), then all good.