From dba5418a53687c52568c10c1355c8f666dbd0c3d Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 16 Aug 2012 13:55:41 +0100 Subject: [PATCH] OSX mouse wheels in 10.6 - check for device returning NaNs. --- .../native/juce_mac_NSViewComponentPeer.mm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index 1ef2f203f5..7d4de31ad8 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -544,6 +544,13 @@ public: 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) { updateModifiers (ev); @@ -575,9 +582,8 @@ public: #endif 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 (...)