mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Mouse: Added MouseListener::mouseMagnify and cleaned up some mouse event handler code
This commit is contained in:
parent
dbaca088b3
commit
266beb22b2
4 changed files with 46 additions and 53 deletions
|
|
@ -65,8 +65,9 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
template <typename ...Params>
|
||||
static void sendMouseEvent (Component& comp, Component::BailOutChecker& checker,
|
||||
void (MouseListener::*eventMethod) (const MouseEvent&), const MouseEvent& e)
|
||||
void (MouseListener::*eventMethod) (Params...), Params... params)
|
||||
{
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
|
@ -75,7 +76,7 @@ public:
|
|||
{
|
||||
for (int i = list->listeners.size(); --i >= 0;)
|
||||
{
|
||||
(list->listeners.getUnchecked(i)->*eventMethod) (e);
|
||||
(list->listeners.getUnchecked(i)->*eventMethod) (params...);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
|
@ -94,45 +95,7 @@ public:
|
|||
|
||||
for (int i = list->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
(list->listeners.getUnchecked(i)->*eventMethod) (e);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->numDeepMouseListeners);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sendWheelEvent (Component& comp, Component::BailOutChecker& checker,
|
||||
const MouseEvent& e, const MouseWheelDetails& wheel)
|
||||
{
|
||||
if (auto* list = comp.mouseListeners.get())
|
||||
{
|
||||
for (int i = list->listeners.size(); --i >= 0;)
|
||||
{
|
||||
list->listeners.getUnchecked(i)->mouseWheelMove (e, wheel);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
i = jmin (i, list->listeners.size());
|
||||
}
|
||||
}
|
||||
|
||||
for (Component* p = comp.parentComponent; p != nullptr; p = p->parentComponent)
|
||||
{
|
||||
if (auto* list = p->mouseListeners.get())
|
||||
{
|
||||
if (list->numDeepMouseListeners > 0)
|
||||
{
|
||||
BailOutChecker2 checker2 (checker, p);
|
||||
|
||||
for (int i = list->numDeepMouseListeners; --i >= 0;)
|
||||
{
|
||||
list->listeners.getUnchecked(i)->mouseWheelMove (e, wheel);
|
||||
(list->listeners.getUnchecked(i)->*eventMethod) (params...);
|
||||
|
||||
if (checker2.shouldBailOut())
|
||||
return;
|
||||
|
|
@ -2303,7 +2266,7 @@ void Component::internalMouseEnter (MouseInputSource source, Point<float> relati
|
|||
|
||||
Desktop::getInstance().getMouseListeners().callChecked (checker, [&] (MouseListener& l) { l.mouseEnter (me); });
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseEnter, me);
|
||||
MouseListenerList::template sendMouseEvent<const MouseEvent&> (*this, checker, &MouseListener::mouseEnter, me);
|
||||
}
|
||||
|
||||
void Component::internalMouseExit (MouseInputSource source, Point<float> relativePos, Time time)
|
||||
|
|
@ -2332,7 +2295,7 @@ void Component::internalMouseExit (MouseInputSource source, Point<float> relativ
|
|||
|
||||
Desktop::getInstance().getMouseListeners().callChecked (checker, [&] (MouseListener& l) { l.mouseExit (me); });
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseExit, me);
|
||||
MouseListenerList::template sendMouseEvent<const MouseEvent&> (*this, checker, &MouseListener::mouseExit, me);
|
||||
}
|
||||
|
||||
void Component::internalMouseDown (MouseInputSource source, Point<float> relativePos, Time time,
|
||||
|
|
@ -2397,7 +2360,7 @@ void Component::internalMouseDown (MouseInputSource source, Point<float> relativ
|
|||
|
||||
desktop.getMouseListeners().callChecked (checker, [&] (MouseListener& l) { l.mouseDown (me); });
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDown, me);
|
||||
MouseListenerList::template sendMouseEvent<const MouseEvent&> (*this, checker, &MouseListener::mouseDown, me);
|
||||
}
|
||||
|
||||
void Component::internalMouseUp (MouseInputSource source, Point<float> relativePos, Time time,
|
||||
|
|
@ -2425,7 +2388,7 @@ void Component::internalMouseUp (MouseInputSource source, Point<float> relativeP
|
|||
auto& desktop = Desktop::getInstance();
|
||||
desktop.getMouseListeners().callChecked (checker, [&] (MouseListener& l) { l.mouseUp (me); });
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseUp, me);
|
||||
MouseListenerList::template sendMouseEvent<const MouseEvent&> (*this, checker, &MouseListener::mouseUp, me);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
|
@ -2439,7 +2402,7 @@ void Component::internalMouseUp (MouseInputSource source, Point<float> relativeP
|
|||
return;
|
||||
|
||||
desktop.mouseListeners.callChecked (checker, [&] (MouseListener& l) { l.mouseDoubleClick (me); });
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDoubleClick, me);
|
||||
MouseListenerList::template sendMouseEvent<const MouseEvent&> (*this, checker, &MouseListener::mouseDoubleClick, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2463,7 +2426,7 @@ void Component::internalMouseDrag (MouseInputSource source, Point<float> relativ
|
|||
|
||||
Desktop::getInstance().getMouseListeners().callChecked (checker, [&] (MouseListener& l) { l.mouseDrag (me); });
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDrag, me);
|
||||
MouseListenerList::template sendMouseEvent<const MouseEvent&> (*this, checker, &MouseListener::mouseDrag, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2491,7 +2454,7 @@ void Component::internalMouseMove (MouseInputSource source, Point<float> relativ
|
|||
|
||||
desktop.getMouseListeners().callChecked (checker, [&] (MouseListener& l) { l.mouseMove (me); });
|
||||
|
||||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseMove, me);
|
||||
MouseListenerList::template sendMouseEvent<const MouseEvent&> (*this, checker, &MouseListener::mouseMove, me);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2521,21 +2484,37 @@ void Component::internalMouseWheel (MouseInputSource source, Point<float> relati
|
|||
desktop.mouseListeners.callChecked (checker, [&] (MouseListener& l) { l.mouseWheelMove (me, wheel); });
|
||||
|
||||
if (! checker.shouldBailOut())
|
||||
MouseListenerList::sendWheelEvent (*this, checker, me, wheel);
|
||||
MouseListenerList::template sendMouseEvent<const MouseEvent&, const MouseWheelDetails&> (*this, checker, &MouseListener::mouseWheelMove, me, wheel);
|
||||
}
|
||||
}
|
||||
|
||||
void Component::internalMagnifyGesture (MouseInputSource source, Point<float> relativePos,
|
||||
Time time, float amount)
|
||||
{
|
||||
if (! isCurrentlyBlockedByAnotherModalComponent())
|
||||
{
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(), MouseInputSource::invalidPressure,
|
||||
auto& desktop = Desktop::getInstance();
|
||||
BailOutChecker checker (this);
|
||||
|
||||
const MouseEvent me (source, relativePos, source.getCurrentModifiers(), MouseInputSource::invalidPressure,
|
||||
MouseInputSource::invalidOrientation, MouseInputSource::invalidRotation,
|
||||
MouseInputSource::invalidTiltX, MouseInputSource::invalidTiltY,
|
||||
this, this, time, relativePos, time, 0, false);
|
||||
|
||||
if (isCurrentlyBlockedByAnotherModalComponent())
|
||||
{
|
||||
// allow blocked mouse-events to go to global listeners..
|
||||
desktop.mouseListeners.callChecked (checker, [&] (MouseListener& l) { l.mouseMagnify (me, amount); });
|
||||
}
|
||||
else
|
||||
{
|
||||
mouseMagnify (me, amount);
|
||||
|
||||
if (checker.shouldBailOut())
|
||||
return;
|
||||
|
||||
desktop.mouseListeners.callChecked (checker, [&] (MouseListener& l) { l.mouseMagnify (me, amount); });
|
||||
|
||||
if (! checker.shouldBailOut())
|
||||
MouseListenerList::template sendMouseEvent<const MouseEvent&, float> (*this, checker, &MouseListener::mouseMagnify, me, amount);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1596,7 +1596,7 @@ public:
|
|||
should be changed. A value of 1.0 would indicate no change,
|
||||
values greater than 1.0 mean it should be enlarged.
|
||||
*/
|
||||
virtual void mouseMagnify (const MouseEvent& event, float scaleFactor);
|
||||
virtual void mouseMagnify (const MouseEvent& event, float scaleFactor) override;
|
||||
|
||||
//==============================================================================
|
||||
/** Ensures that a non-stop stream of mouse-drag events will be sent during the
|
||||
|
|
|
|||
|
|
@ -35,5 +35,6 @@ void MouseListener::mouseDrag (const MouseEvent&) {}
|
|||
void MouseListener::mouseMove (const MouseEvent&) {}
|
||||
void MouseListener::mouseDoubleClick (const MouseEvent&) {}
|
||||
void MouseListener::mouseWheelMove (const MouseEvent&, const MouseWheelDetails&) {}
|
||||
void MouseListener::mouseMagnify (const MouseEvent&, float) {}
|
||||
|
||||
} // namespace juce
|
||||
|
|
|
|||
|
|
@ -155,6 +155,19 @@ public:
|
|||
virtual void mouseWheelMove (const MouseEvent& event,
|
||||
const MouseWheelDetails& wheel);
|
||||
|
||||
/** Called when a pinch-to-zoom mouse-gesture is used.
|
||||
|
||||
If not overridden, a component will forward this message to its parent, so
|
||||
that parent components can collect gesture messages that are unused by child
|
||||
components.
|
||||
|
||||
@param event details about the mouse event
|
||||
@param scaleFactor a multiplier to indicate by how much the size of the target
|
||||
should be changed. A value of 1.0 would indicate no change,
|
||||
values greater than 1.0 mean it should be enlarged.
|
||||
*/
|
||||
virtual void mouseMagnify (const MouseEvent& event, float scaleFactor);
|
||||
|
||||
|
||||
private:
|
||||
#if JUCE_CATCH_DEPRECATED_CODE_MISUSE
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue