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),
allowedOrientations (allOrientations)
{
createMouseInputSources();
addMouseInputSource();
}
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.
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;


+ 3
- 5
modules/juce_gui_basics/native/juce_android_Windowing.cpp 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()


+ 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


+ 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


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


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


+ 1
- 0
modules/juce_gui_basics/windows/juce_ComponentPeer.h 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)
};


Loading…
Cancel
Save