Browse Source

Windows: Fixed a bug where multi-touch inputs weren't being cleared correctly

tags/2021-05-28
ed 8 years ago
parent
commit
9d294970d7
4 changed files with 19 additions and 0 deletions
  1. +1
    -0
      modules/juce_gui_basics/components/juce_Desktop.cpp
  2. +2
    -0
      modules/juce_gui_basics/components/juce_Desktop.h
  3. +15
    -0
      modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp
  4. +1
    -0
      modules/juce_gui_basics/native/juce_win32_Windowing.cpp

+ 1
- 0
modules/juce_gui_basics/components/juce_Desktop.cpp View File

@@ -183,6 +183,7 @@ 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); }


+ 2
- 0
modules/juce_gui_basics/components/juce_Desktop.h View File

@@ -288,6 +288,8 @@ 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


+ 15
- 0
modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp View File

@@ -684,6 +684,21 @@ 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;


+ 1
- 0
modules/juce_gui_basics/native/juce_win32_Windowing.cpp View File

@@ -2326,6 +2326,7 @@ private:
if (isCancel)
{
currentTouches.clear();
Desktop::getInstance().clearAllTouchSources();
currentModifiers = currentModifiers.withoutMouseButtons();
}


Loading…
Cancel
Save