From ca9c8f22d792efe01c8d00913432f25aa5b0ad4b Mon Sep 17 00:00:00 2001 From: ed Date: Thu, 15 Jun 2017 17:20:55 +0100 Subject: [PATCH] Windows: Removed Desktop::clearAllTouchSources() method and cleaned up some Windows touch input code --- .../components/juce_Desktop.cpp | 1 - .../juce_gui_basics/components/juce_Desktop.h | 2 - .../mouse/juce_MouseInputSource.cpp | 15 ------- .../native/juce_win32_Windowing.cpp | 39 ++++++++++--------- 4 files changed, 20 insertions(+), 37 deletions(-) diff --git a/modules/juce_gui_basics/components/juce_Desktop.cpp b/modules/juce_gui_basics/components/juce_Desktop.cpp index 8fe1dafb83..9317213fe2 100644 --- a/modules/juce_gui_basics/components/juce_Desktop.cpp +++ b/modules/juce_gui_basics/components/juce_Desktop.cpp @@ -183,7 +183,6 @@ MouseInputSource* Desktop::getMouseSource (int index) const noexcept MouseInputSource* Desktop::getDraggingMouseSource (int index) const noexcept { return mouseSources->getDraggingMouseSource (index); } MouseInputSource Desktop::getMainMouseSource() const noexcept { return MouseInputSource (mouseSources->sources.getUnchecked(0)); } void Desktop::beginDragAutoRepeat (int interval) { mouseSources->beginDragAutoRepeat (interval); } -void Desktop::clearAllTouchSources() { mouseSources->clearTouches(); } //============================================================================== void Desktop::addFocusChangeListener (FocusChangeListener* const listener) { focusListeners.add (listener); } diff --git a/modules/juce_gui_basics/components/juce_Desktop.h b/modules/juce_gui_basics/components/juce_Desktop.h index ec7367eb00..3677263296 100644 --- a/modules/juce_gui_basics/components/juce_Desktop.h +++ b/modules/juce_gui_basics/components/juce_Desktop.h @@ -288,8 +288,6 @@ public: */ void beginDragAutoRepeat (int millisecondsBetweenCallbacks); - /** Removes all touch input sources from the mouse sources array. */ - void clearAllTouchSources(); //============================================================================== /** In a tablet device which can be turned around, this is used to inidicate the orientation. */ enum DisplayOrientation diff --git a/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp b/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp index 658d8caf95..13b8d9d461 100644 --- a/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp +++ b/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp @@ -684,21 +684,6 @@ struct MouseInputSource::SourceList : public Timer return nullptr; } - void clearTouches() - { - for (auto i = sourceArray.size(); --i >= 0;) - { - if (sourceArray.getUnchecked (i).getType() == MouseInputSource::InputSourceType::touch) - sourceArray.remove (i); - } - - for (auto i = sources.size(); --i >= 0;) - { - if (sources.getUnchecked (i)->inputType == MouseInputSource::InputSourceType::touch) - sources.remove (i); - } - } - int getNumDraggingMouseSources() const noexcept { int num = 0; diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp index e52eceaed0..14b25ade21 100644 --- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp @@ -2290,14 +2290,13 @@ private: const float touchPressure = MouseInputSource::invalidPressure, const float orientation = 0.0f) { - bool isCancel = false; + auto isCancel = false; - const int touchIndex = currentTouches.getIndexOfTouch (touch.dwID); - auto time = getMouseEventTime(); - auto pos = globalToLocal (Point (touch.x / 100.0f, - touch.y / 100.0f)); - const float pressure = touchPressure; - ModifierKeys modsToSend (currentModifiers); + const auto touchIndex = currentTouches.getIndexOfTouch (touch.dwID); + const auto time = getMouseEventTime(); + const auto pos = globalToLocal ({ touch.x / 100.0f, touch.y / 100.0f }); + const auto pressure = touchPressure; + auto modsToSend = currentModifiers; if (isDown) { @@ -2305,7 +2304,8 @@ private: modsToSend = currentModifiers; // this forces a mouse-enter/up event, in case for some reason we didn't get a mouse-up before. - handleMouseEvent (MouseInputSource::InputSourceType::touch, pos, modsToSend.withoutMouseButtons(), pressure, orientation, time, PenDetails(), touchIndex); + handleMouseEvent (MouseInputSource::InputSourceType::touch, pos, modsToSend.withoutMouseButtons(), + pressure, orientation, time, {}, touchIndex); if (! isValidPeer (this)) // (in case this component was deleted by the event) return false; @@ -2323,24 +2323,25 @@ private: modsToSend = currentModifiers.withoutMouseButtons().withFlags (ModifierKeys::leftButtonModifier); } - handleMouseEvent (MouseInputSource::InputSourceType::touch, pos, modsToSend, pressure, orientation, time, PenDetails(), touchIndex); - - if (isCancel) - { - currentTouches.clear(); - Desktop::getInstance().clearAllTouchSources(); - currentModifiers = currentModifiers.withoutMouseButtons(); - } + handleMouseEvent (MouseInputSource::InputSourceType::touch, pos, modsToSend, + pressure, orientation, time, {}, touchIndex); - if (! isValidPeer (this)) // (in case this component was deleted by the event) + if (! isValidPeer (this)) return false; - if (isUp || isCancel) + if (isUp) { - handleMouseEvent (MouseInputSource::InputSourceType::touch, Point (-10.0f, -10.0f), currentModifiers, pressure, orientation, time, PenDetails(), touchIndex); + handleMouseEvent (MouseInputSource::InputSourceType::touch, { -10.0f, -10.0f }, currentModifiers.withoutMouseButtons(), + pressure, orientation, time, {}, touchIndex); if (! isValidPeer (this)) return false; + + if (isCancel) + { + currentTouches.clear(); + currentModifiers = currentModifiers.withoutMouseButtons(); + } } return true;