mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Removed restriction on number of touches in iOS/Android.
This commit is contained in:
parent
70ab8a2e8b
commit
960e604baa
9 changed files with 59 additions and 28 deletions
|
|
@ -28,7 +28,7 @@ Desktop::Desktop()
|
|||
kioskModeComponent (nullptr),
|
||||
allowedOrientations (allOrientations)
|
||||
{
|
||||
createMouseInputSources();
|
||||
addMouseInputSource();
|
||||
}
|
||||
|
||||
Desktop::~Desktop()
|
||||
|
|
|
|||
|
|
@ -235,7 +235,8 @@ public:
|
|||
//==============================================================================
|
||||
/** 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
|
||||
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().
|
||||
@see getMouseSource
|
||||
*/
|
||||
|
|
@ -383,7 +384,7 @@ private:
|
|||
friend class TopLevelWindowManager;
|
||||
|
||||
OwnedArray <MouseInputSource> mouseSources;
|
||||
void createMouseInputSources();
|
||||
bool addMouseInputSource();
|
||||
|
||||
ListenerList <MouseListener> mouseListeners;
|
||||
ListenerList <FocusChangeListener> focusListeners;
|
||||
|
|
|
|||
|
|
@ -600,12 +600,10 @@ Desktop::DisplayOrientation Desktop::getCurrentOrientation() const
|
|||
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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
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,
|
||||
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);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -384,6 +384,7 @@ private:
|
|||
const uint32 uniqueID;
|
||||
bool fakeMouseMessageSent, isWindowMinimised;
|
||||
Component* getTargetForKeyPress();
|
||||
static MouseInputSource* getOrCreateMouseInputSource (int);
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ComponentPeer)
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue