| @@ -544,6 +544,13 @@ public: | |||||
| sendMouseEvent (ev); | sendMouseEvent (ev); | ||||
| } | } | ||||
| static float checkDeviceDeltaReturnValue (float v) noexcept | |||||
| { | |||||
| // (deviceDeltaX can fail and return NaN, so need to sanity-check the result) | |||||
| v *= 0.5f / 256.0f; | |||||
| return (v > -1000.0f && v < 1000.0f) ? v : 0.0f; | |||||
| } | |||||
| void redirectMouseWheel (NSEvent* ev) | void redirectMouseWheel (NSEvent* ev) | ||||
| { | { | ||||
| updateModifiers (ev); | updateModifiers (ev); | ||||
| @@ -575,9 +582,8 @@ public: | |||||
| #endif | #endif | ||||
| if ([ev respondsToSelector: @selector (deviceDeltaX)]) | if ([ev respondsToSelector: @selector (deviceDeltaX)]) | ||||
| { | { | ||||
| const float scale = 0.5f / 256.0f; | |||||
| wheel.deltaX = scale * (float) objc_msgSend_fpret (ev, @selector (deviceDeltaX)); | |||||
| wheel.deltaY = scale * (float) objc_msgSend_fpret (ev, @selector (deviceDeltaY)); | |||||
| wheel.deltaX = checkDeviceDeltaReturnValue ((float) objc_msgSend_fpret (ev, @selector (deviceDeltaX))); | |||||
| wheel.deltaY = checkDeviceDeltaReturnValue ((float) objc_msgSend_fpret (ev, @selector (deviceDeltaY))); | |||||
| } | } | ||||
| } | } | ||||
| @catch (...) | @catch (...) | ||||