The conversion from pointercancel to pointerup bothers me, but we can address this with a separate PR I guess.