1
0
Fork 0
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:
jules 2013-02-03 12:29:03 +00:00
parent 70ab8a2e8b
commit 960e604baa
9 changed files with 59 additions and 28 deletions

View file

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

View file

@ -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;

View file

@ -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()

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

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

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;
}
//==============================================================================

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()

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,
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);
}
//==============================================================================

View file

@ -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)
};