Browse Source

Removed restriction on number of touches in iOS/Android.

tags/2021-05-28
jules 12 years ago
parent
commit
960e604baa
9 changed files with 59 additions and 28 deletions
  1. +1
    -1
      modules/juce_gui_basics/components/juce_Desktop.cpp
  2. +3
    -2
      modules/juce_gui_basics/components/juce_Desktop.h
  3. +3
    -5
      modules/juce_gui_basics/native/juce_android_Windowing.cpp
  4. +3
    -3
      modules/juce_gui_basics/native/juce_ios_Windowing.mm
  5. +8
    -2
      modules/juce_gui_basics/native/juce_linux_Windowing.cpp
  6. +8
    -2
      modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm
  7. +9
    -5
      modules/juce_gui_basics/native/juce_win32_Windowing.cpp
  8. +23
    -8
      modules/juce_gui_basics/windows/juce_ComponentPeer.cpp
  9. +1
    -0
      modules/juce_gui_basics/windows/juce_ComponentPeer.h

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

@@ -28,7 +28,7 @@ Desktop::Desktop()
kioskModeComponent (nullptr), kioskModeComponent (nullptr),
allowedOrientations (allOrientations) allowedOrientations (allOrientations)
{ {
createMouseInputSources();
addMouseInputSource();
} }
Desktop::~Desktop() Desktop::~Desktop()


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

@@ -235,7 +235,8 @@ public:
//============================================================================== //==============================================================================
/** Returns the number of MouseInputSource objects the system has at its disposal. /** Returns the number of MouseInputSource objects the system has at its disposal.
In a traditional single-mouse system, there might be only one object. On a multi-touch In a traditional single-mouse system, there might be only one object. On a multi-touch
system, there could be one input source per potential finger.
system, there could be one input source per potential finger. The number of mouse
sources returned here may increase dynamically as the program runs.
To find out how many mouse events are currently happening, use getNumDraggingMouseSources(). To find out how many mouse events are currently happening, use getNumDraggingMouseSources().
@see getMouseSource @see getMouseSource
*/ */
@@ -383,7 +384,7 @@ private:
friend class TopLevelWindowManager; friend class TopLevelWindowManager;
OwnedArray <MouseInputSource> mouseSources; OwnedArray <MouseInputSource> mouseSources;
void createMouseInputSources();
bool addMouseInputSource();
ListenerList <MouseListener> mouseListeners; ListenerList <MouseListener> mouseListeners;
ListenerList <FocusChangeListener> focusListeners; ListenerList <FocusChangeListener> focusListeners;


+ 3
- 5
modules/juce_gui_basics/native/juce_android_Windowing.cpp View File

@@ -600,12 +600,10 @@ Desktop::DisplayOrientation Desktop::getCurrentOrientation() const
return upright; return upright;
} }
void Desktop::createMouseInputSources()
bool Desktop::addMouseInputSource()
{ {
// This creates a mouse input source for each possible finger
for (int i = 0; i < 10; ++i)
mouseSources.add (new MouseInputSource (i, false));
mouseSources.add (new MouseInputSource (mouseSources.size(), false));
return true;
} }
Point<int> MouseInputSource::getCurrentMousePosition() Point<int> MouseInputSource::getCurrentMousePosition()


+ 3
- 3
modules/juce_gui_basics/native/juce_ios_Windowing.mm View File

@@ -273,10 +273,10 @@ String SystemClipboard::getTextFromClipboard()
} }
//============================================================================== //==============================================================================
void Desktop::createMouseInputSources()
bool Desktop::addMouseInputSource()
{ {
for (int i = 0; i < 10; ++i)
mouseSources.add (new MouseInputSource (i, false));
mouseSources.add (new MouseInputSource (mouseSources.size(), false));
return true;
} }
bool Desktop::canUseSemiTransparentWindows() noexcept bool Desktop::canUseSemiTransparentWindows() noexcept


+ 8
- 2
modules/juce_gui_basics/native/juce_linux_Windowing.cpp View File

@@ -3086,9 +3086,15 @@ void Desktop::Displays::findDisplays()
} }
//============================================================================== //==============================================================================
void Desktop::createMouseInputSources()
bool Desktop::addMouseInputSource()
{ {
mouseSources.add (new MouseInputSource (0, true));
if (mouseSources.size() == 0)
{
mouseSources.add (new MouseInputSource (0, true));
return true;
}
return false;
} }
bool Desktop::canUseSemiTransparentWindows() noexcept bool Desktop::canUseSemiTransparentWindows() noexcept


+ 8
- 2
modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm View File

@@ -1811,9 +1811,15 @@ void ModifierKeys::updateCurrentModifiers() noexcept
//============================================================================== //==============================================================================
void Desktop::createMouseInputSources()
bool Desktop::addMouseInputSource()
{ {
mouseSources.add (new MouseInputSource (0, true));
if (mouseSources.size() == 0)
{
mouseSources.add (new MouseInputSource (0, true));
return true;
}
return false;
} }
//============================================================================== //==============================================================================


+ 9
- 5
modules/juce_gui_basics/native/juce_win32_Windowing.cpp View File

@@ -2915,13 +2915,17 @@ int JUCE_CALLTYPE NativeMessageBox::showYesNoCancelBox (AlertWindow::AlertIconTy
} }
//============================================================================== //==============================================================================
void Desktop::createMouseInputSources()
bool Desktop::addMouseInputSource()
{ {
mouseSources.add (new MouseInputSource (0, true));
const int numSources = mouseSources.size();
if (canUseMultiTouch())
for (int i = 1; i <= 10; ++i)
mouseSources.add (new MouseInputSource (i, false));
if (numSources == 0 || canUseMultiTouch())
{
mouseSources.add (new MouseInputSource (numSources, numSources == 0));
return true;
}
return false;
} }
Point<int> MouseInputSource::getCurrentMousePosition() Point<int> MouseInputSource::getCurrentMousePosition()


+ 23
- 8
modules/juce_gui_basics/windows/juce_ComponentPeer.cpp View File

@@ -80,22 +80,37 @@ void ComponentPeer::updateCurrentModifiers() noexcept
} }
//============================================================================== //==============================================================================
MouseInputSource* ComponentPeer::getOrCreateMouseInputSource (int touchIndex)
{
jassert (touchIndex >= 0 && touchIndex < 100); // sanity-check on number of fingers
Desktop& desktop = Desktop::getInstance();
for (;;)
{
if (MouseInputSource* mouse = desktop.getMouseSource (touchIndex))
return mouse;
if (! desktop.addMouseInputSource())
{
jassertfalse; // not enough mouse sources!
return nullptr;
}
}
}
void ComponentPeer::handleMouseEvent (const int touchIndex, const Point<int>& positionWithinPeer, void ComponentPeer::handleMouseEvent (const int touchIndex, const Point<int>& positionWithinPeer,
const ModifierKeys& newMods, const int64 time) const ModifierKeys& newMods, const int64 time)
{ {
MouseInputSource* const mouse = Desktop::getInstance().getMouseSource (touchIndex);
jassert (mouse != nullptr); // not enough sources!
mouse->handleEvent (this, positionWithinPeer, time, newMods);
if (MouseInputSource* mouse = getOrCreateMouseInputSource (touchIndex))
mouse->handleEvent (this, positionWithinPeer, time, newMods);
} }
void ComponentPeer::handleMouseWheel (const int touchIndex, const Point<int>& positionWithinPeer, void ComponentPeer::handleMouseWheel (const int touchIndex, const Point<int>& positionWithinPeer,
const int64 time, const MouseWheelDetails& wheel) const int64 time, const MouseWheelDetails& wheel)
{ {
MouseInputSource* const mouse = Desktop::getInstance().getMouseSource (touchIndex);
jassert (mouse != nullptr); // not enough sources!
mouse->handleWheel (this, positionWithinPeer, time, wheel);
if (MouseInputSource* mouse = getOrCreateMouseInputSource (touchIndex))
mouse->handleWheel (this, positionWithinPeer, time, wheel);
} }
//============================================================================== //==============================================================================


+ 1
- 0
modules/juce_gui_basics/windows/juce_ComponentPeer.h View File

@@ -384,6 +384,7 @@ private:
const uint32 uniqueID; const uint32 uniqueID;
bool fakeMouseMessageSent, isWindowMinimised; bool fakeMouseMessageSent, isWindowMinimised;
Component* getTargetForKeyPress(); Component* getTargetForKeyPress();
static MouseInputSource* getOrCreateMouseInputSource (int);
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ComponentPeer) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ComponentPeer)
}; };


Loading…
Cancel
Save