From 7fad50948347a9f996e625b2a77db03625f67685 Mon Sep 17 00:00:00 2001 From: ed Date: Tue, 12 Mar 2019 16:23:54 +0000 Subject: [PATCH] Windows: Store the last valid touch input position and return it from MouseInputSource::getCurrentRawMousePosition() --- .../native/juce_win32_Windowing.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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);