nit: if async pam zoom is enabled, touchmove events are captured by the child widget and the main process only receive touchstart/touchend. So don't forget to update the deltas based on touchend,