diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp index 229fac6bd2..8152d70f65 100644 --- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp @@ -621,6 +621,9 @@ int64 getMouseEventTime() return eventTimeOffset + thisMessageTime; } +Point juce_lastTouchPos; +static JUCE_CONSTEXPR Point juce_invalidTouchPos { -10.0f, -10.0f }; + //============================================================================== const int extendedKeyModifier = 0x10000; @@ -2439,6 +2442,8 @@ private: //============================================================================== void doMouseEvent (Point position, float pressure, float orientation = 0.0f, ModifierKeys mods = ModifierKeys::currentModifiers) { + juce_lastTouchPos = juce_invalidTouchPos; + handleMouseEvent (MouseInputSource::InputSourceType::mouse, position, mods, pressure, orientation, getMouseEventTime()); } @@ -2767,6 +2772,8 @@ private: const auto pressure = touchPressure; auto modsToSend = ModifierKeys::currentModifiers; + juce_lastTouchPos = pos; + if (isDown) { ModifierKeys::currentModifiers = ModifierKeys::currentModifiers.withoutMouseButtons().withFlags (ModifierKeys::leftButtonModifier); @@ -2801,7 +2808,7 @@ private: if (isUp) { - handleMouseEvent (MouseInputSource::InputSourceType::touch, { -10.0f, -10.0f }, ModifierKeys::currentModifiers.withoutMouseButtons(), + handleMouseEvent (MouseInputSource::InputSourceType::touch, juce_invalidTouchPos, ModifierKeys::currentModifiers.withoutMouseButtons(), pressure, orientation, time, {}, touchIndex); if (! isValidPeer (this)) @@ -2914,7 +2921,7 @@ private: if (isUp) { - handleMouseEvent (MouseInputSource::InputSourceType::pen, { -10.0f, -10.0f }, ModifierKeys::currentModifiers, + handleMouseEvent (MouseInputSource::InputSourceType::pen, juce_invalidTouchPos, ModifierKeys::currentModifiers, pressure, MouseInputSource::invalidOrientation, time, penDetails); if (! isValidPeer (this)) @@ -4281,6 +4288,9 @@ bool MouseInputSource::SourceList::canUseTouch() Point MouseInputSource::getCurrentRawMousePosition() { + if (juce_lastTouchPos != juce_invalidTouchPos) + return juce_lastTouchPos; + POINT mousePos; GetCursorPos (&mousePos);