mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Refactored the internal mouse-handling code to use floating point coords. This shouldn't affect much user code, but a few methods in MouseInputSource have now changed to use Point<float> rather than Point<int>.
This commit is contained in:
parent
590cca9776
commit
6c61dbb68e
30 changed files with 348 additions and 276 deletions
|
|
@ -55,11 +55,11 @@ public:
|
|||
if (t == nullptr)
|
||||
{
|
||||
t = new Trail (e.source);
|
||||
t->path.startNewSubPath (e.getPosition().toFloat());
|
||||
t->path.startNewSubPath (e.position);
|
||||
trails.add (t);
|
||||
}
|
||||
|
||||
t->pushPoint (e.getPosition().toFloat(), e.mods);
|
||||
t->pushPoint (e.position, e.mods);
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ public:
|
|||
if (Component* const comp = Desktop::getInstance().findComponentAt (screenPos))
|
||||
if (ComponentPeer* const peer = comp->getPeer())
|
||||
if (! peer->isFocused())
|
||||
peer->handleMouseEvent (0, peer->globalToLocal (screenPos), mods, Time::currentTimeMillis());
|
||||
peer->handleMouseEvent (0, peer->globalToLocal (screenPos.toFloat()), mods, Time::currentTimeMillis());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -816,7 +816,7 @@ void MidiKeyboardComponent::timerCallback()
|
|||
const Array<MouseInputSource>& mouseSources = Desktop::getInstance().getMouseSources();
|
||||
|
||||
for (MouseInputSource* mi = mouseSources.begin(), * const e = mouseSources.end(); mi != e; ++mi)
|
||||
updateNoteUnderMouse (getLocalPoint (nullptr, mi->getScreenPosition()), mi->isDragging(), mi->getIndex());
|
||||
updateNoteUnderMouse (getLocalPoint (nullptr, mi->getScreenPosition()).roundToInt(), mi->isDragging(), mi->getIndex());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -239,6 +239,15 @@ struct ScalingHelpers
|
|||
{
|
||||
return scaledScreenPosToUnscaled (comp.getDesktopScaleFactor(), pos);
|
||||
}
|
||||
|
||||
static Point<int> addPosition (Point<int> p, const Component& c) noexcept { return p + c.getPosition(); }
|
||||
static Rectangle<int> addPosition (Rectangle<int> p, const Component& c) noexcept { return p + c.getPosition(); }
|
||||
static Point<float> addPosition (Point<float> p, const Component& c) noexcept { return p + c.getPosition().toFloat(); }
|
||||
static Rectangle<float> addPosition (Rectangle<float> p, const Component& c) noexcept { return p + c.getPosition().toFloat(); }
|
||||
static Point<int> subtractPosition (Point<int> p, const Component& c) noexcept { return p - c.getPosition(); }
|
||||
static Rectangle<int> subtractPosition (Rectangle<int> p, const Component& c) noexcept { return p - c.getPosition(); }
|
||||
static Point<float> subtractPosition (Point<float> p, const Component& c) noexcept { return p - c.getPosition().toFloat(); }
|
||||
static Rectangle<float> subtractPosition (Rectangle<float> p, const Component& c) noexcept { return p - c.getPosition().toFloat(); }
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -321,7 +330,7 @@ struct Component::ComponentHelpers
|
|||
}
|
||||
else
|
||||
{
|
||||
pointInParentSpace -= comp.getPosition();
|
||||
pointInParentSpace = ScalingHelpers::subtractPosition (pointInParentSpace, comp);
|
||||
}
|
||||
|
||||
return pointInParentSpace;
|
||||
|
|
@ -340,7 +349,7 @@ struct Component::ComponentHelpers
|
|||
}
|
||||
else
|
||||
{
|
||||
pointInLocalSpace += comp.getPosition();
|
||||
pointInLocalSpace = ScalingHelpers::addPosition (pointInLocalSpace, comp);
|
||||
}
|
||||
|
||||
if (comp.affineTransform != nullptr)
|
||||
|
|
@ -1086,6 +1095,11 @@ Point<int> Component::getLocalPoint (const Component* source, Point<int> point)
|
|||
return ComponentHelpers::convertCoordinate (this, source, point);
|
||||
}
|
||||
|
||||
Point<float> Component::getLocalPoint (const Component* source, Point<float> point) const
|
||||
{
|
||||
return ComponentHelpers::convertCoordinate (this, source, point);
|
||||
}
|
||||
|
||||
Rectangle<int> Component::getLocalArea (const Component* source, const Rectangle<int>& area) const
|
||||
{
|
||||
return ComponentHelpers::convertCoordinate (this, source, area);
|
||||
|
|
@ -1096,6 +1110,11 @@ Point<int> Component::localPointToGlobal (Point<int> point) const
|
|||
return ComponentHelpers::convertCoordinate (nullptr, this, point);
|
||||
}
|
||||
|
||||
Point<float> Component::localPointToGlobal (Point<float> point) const
|
||||
{
|
||||
return ComponentHelpers::convertCoordinate (nullptr, this, point);
|
||||
}
|
||||
|
||||
Rectangle<int> Component::localAreaToGlobal (const Rectangle<int>& area) const
|
||||
{
|
||||
return ComponentHelpers::convertCoordinate (nullptr, this, area);
|
||||
|
|
@ -2386,7 +2405,7 @@ void Component::removeMouseListener (MouseListener* const listenerToRemove)
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
void Component::internalMouseEnter (MouseInputSource source, Point<int> relativePos, Time time)
|
||||
void Component::internalMouseEnter (MouseInputSource source, Point<float> relativePos, Time time)
|
||||
{
|
||||
if (isCurrentlyBlockedByAnotherModalComponent())
|
||||
{
|
||||
|
|
@ -2412,7 +2431,7 @@ void Component::internalMouseEnter (MouseInputSource source, Point<int> relative
|
|||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseEnter, me);
|
||||
}
|
||||
|
||||
void Component::internalMouseExit (MouseInputSource source, Point<int> relativePos, Time time)
|
||||
void Component::internalMouseExit (MouseInputSource source, Point<float> relativePos, Time time)
|
||||
{
|
||||
if (flags.repaintOnMouseActivityFlag)
|
||||
repaint();
|
||||
|
|
@ -2432,7 +2451,7 @@ void Component::internalMouseExit (MouseInputSource source, Point<int> relativeP
|
|||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseExit, me);
|
||||
}
|
||||
|
||||
void Component::internalMouseDown (MouseInputSource source, Point<int> relativePos, Time time)
|
||||
void Component::internalMouseDown (MouseInputSource source, Point<float> relativePos, Time time)
|
||||
{
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
BailOutChecker checker (this);
|
||||
|
|
@ -2496,7 +2515,7 @@ void Component::internalMouseDown (MouseInputSource source, Point<int> relativeP
|
|||
MouseListenerList::sendMouseEvent (*this, checker, &MouseListener::mouseDown, me);
|
||||
}
|
||||
|
||||
void Component::internalMouseUp (MouseInputSource source, Point<int> relativePos,
|
||||
void Component::internalMouseUp (MouseInputSource source, Point<float> relativePos,
|
||||
Time time, const ModifierKeys oldModifiers)
|
||||
{
|
||||
if (flags.mouseDownWasBlocked && isCurrentlyBlockedByAnotherModalComponent())
|
||||
|
|
@ -2539,7 +2558,7 @@ void Component::internalMouseUp (MouseInputSource source, Point<int> relativePos
|
|||
}
|
||||
}
|
||||
|
||||
void Component::internalMouseDrag (MouseInputSource source, Point<int> relativePos, Time time)
|
||||
void Component::internalMouseDrag (MouseInputSource source, Point<float> relativePos, Time time)
|
||||
{
|
||||
if (! isCurrentlyBlockedByAnotherModalComponent())
|
||||
{
|
||||
|
|
@ -2562,7 +2581,7 @@ void Component::internalMouseDrag (MouseInputSource source, Point<int> relativeP
|
|||
}
|
||||
}
|
||||
|
||||
void Component::internalMouseMove (MouseInputSource source, Point<int> relativePos, Time time)
|
||||
void Component::internalMouseMove (MouseInputSource source, Point<float> relativePos, Time time)
|
||||
{
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
|
||||
|
|
@ -2588,7 +2607,7 @@ void Component::internalMouseMove (MouseInputSource source, Point<int> relativeP
|
|||
}
|
||||
}
|
||||
|
||||
void Component::internalMouseWheel (MouseInputSource source, Point<int> relativePos,
|
||||
void Component::internalMouseWheel (MouseInputSource source, Point<float> relativePos,
|
||||
Time time, const MouseWheelDetails& wheel)
|
||||
{
|
||||
Desktop& desktop = Desktop::getInstance();
|
||||
|
|
@ -2616,7 +2635,7 @@ void Component::internalMouseWheel (MouseInputSource source, Point<int> relative
|
|||
}
|
||||
}
|
||||
|
||||
void Component::internalMagnifyGesture (MouseInputSource source, Point<int> relativePos,
|
||||
void Component::internalMagnifyGesture (MouseInputSource source, Point<float> relativePos,
|
||||
Time time, float amount)
|
||||
{
|
||||
if (! isCurrentlyBlockedByAnotherModalComponent())
|
||||
|
|
@ -2966,7 +2985,7 @@ bool Component::isMouseOver (const bool includeChildren) const
|
|||
Component* const c = mi->getComponentUnderMouse();
|
||||
|
||||
if ((c == this || (includeChildren && isParentOf (c)))
|
||||
&& c->reallyContains (c->getLocalPoint (nullptr, mi->getScreenPosition()), false)
|
||||
&& c->reallyContains (c->getLocalPoint (nullptr, mi->getScreenPosition()).roundToInt(), false)
|
||||
&& (mi->isMouse() || mi->isDragging()))
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -355,6 +355,15 @@ public:
|
|||
Point<int> getLocalPoint (const Component* sourceComponent,
|
||||
Point<int> pointRelativeToSourceComponent) const;
|
||||
|
||||
/** Converts a point to be relative to this component's coordinate space.
|
||||
|
||||
This takes a point relative to a different component, and returns its position relative to this
|
||||
component. If the sourceComponent parameter is null, the source point is assumed to be a global
|
||||
screen coordinate.
|
||||
*/
|
||||
Point<float> getLocalPoint (const Component* sourceComponent,
|
||||
Point<float> pointRelativeToSourceComponent) const;
|
||||
|
||||
/** Converts a rectangle to be relative to this component's coordinate space.
|
||||
|
||||
This takes a rectangle that is relative to a different component, and returns its position relative
|
||||
|
|
@ -373,6 +382,11 @@ public:
|
|||
*/
|
||||
Point<int> localPointToGlobal (Point<int> localPoint) const;
|
||||
|
||||
/** Converts a point relative to this component's top-left into a screen coordinate.
|
||||
@see getLocalPoint, localAreaToGlobal
|
||||
*/
|
||||
Point<float> localPointToGlobal (Point<float> localPoint) const;
|
||||
|
||||
/** Converts a rectangle from this component's coordinate space to a screen coordinate.
|
||||
|
||||
If you've used setTransform() to apply one or more transforms to components, then the source rectangle
|
||||
|
|
@ -2306,18 +2320,18 @@ private:
|
|||
uint8 componentTransparency;
|
||||
|
||||
//==============================================================================
|
||||
void internalMouseEnter (MouseInputSource, Point<int>, Time);
|
||||
void internalMouseExit (MouseInputSource, Point<int>, Time);
|
||||
void internalMouseDown (MouseInputSource, Point<int>, Time);
|
||||
void internalMouseUp (MouseInputSource, Point<int>, Time, const ModifierKeys oldModifiers);
|
||||
void internalMouseDrag (MouseInputSource, Point<int>, Time);
|
||||
void internalMouseMove (MouseInputSource, Point<int>, Time);
|
||||
void internalMouseWheel (MouseInputSource, Point<int>, Time, const MouseWheelDetails&);
|
||||
void internalMagnifyGesture (MouseInputSource, Point<int>, Time, float);
|
||||
void internalMouseEnter (MouseInputSource, Point<float>, Time);
|
||||
void internalMouseExit (MouseInputSource, Point<float>, Time);
|
||||
void internalMouseDown (MouseInputSource, Point<float>, Time);
|
||||
void internalMouseUp (MouseInputSource, Point<float>, Time, const ModifierKeys oldModifiers);
|
||||
void internalMouseDrag (MouseInputSource, Point<float>, Time);
|
||||
void internalMouseMove (MouseInputSource, Point<float>, Time);
|
||||
void internalMouseWheel (MouseInputSource, Point<float>, Time, const MouseWheelDetails&);
|
||||
void internalMagnifyGesture (MouseInputSource, Point<float>, Time, float);
|
||||
void internalBroughtToFront();
|
||||
void internalFocusGain (const FocusChangeType, const WeakReference<Component>&);
|
||||
void internalFocusGain (const FocusChangeType);
|
||||
void internalFocusLoss (const FocusChangeType);
|
||||
void internalFocusGain (FocusChangeType, const WeakReference<Component>&);
|
||||
void internalFocusGain (FocusChangeType);
|
||||
void internalFocusLoss (FocusChangeType);
|
||||
void internalChildFocusChange (FocusChangeType, const WeakReference<Component>&);
|
||||
void internalModalInputAttempt();
|
||||
void internalModifierKeysChanged();
|
||||
|
|
|
|||
|
|
@ -148,18 +148,23 @@ void Desktop::componentBroughtToFront (Component* const c)
|
|||
|
||||
//==============================================================================
|
||||
Point<int> Desktop::getMousePosition()
|
||||
{
|
||||
return getMousePositionFloat().roundToInt();
|
||||
}
|
||||
|
||||
Point<float> Desktop::getMousePositionFloat()
|
||||
{
|
||||
return getInstance().getMainMouseSource().getScreenPosition();
|
||||
}
|
||||
|
||||
void Desktop::setMousePosition (Point<int> newPosition)
|
||||
{
|
||||
getInstance().getMainMouseSource().setScreenPosition (newPosition);
|
||||
getInstance().getMainMouseSource().setScreenPosition (newPosition.toFloat());
|
||||
}
|
||||
|
||||
Point<int> Desktop::getLastMouseDownPosition()
|
||||
{
|
||||
return getInstance().getMainMouseSource().getLastMouseDownPosition();
|
||||
return getInstance().getMainMouseSource().getLastMouseDownPosition().roundToInt();
|
||||
}
|
||||
|
||||
int Desktop::getMouseButtonClickCounter() const noexcept { return mouseClickCounter; }
|
||||
|
|
@ -197,7 +202,7 @@ void Desktop::resetTimer()
|
|||
else
|
||||
startTimer (100);
|
||||
|
||||
lastFakeMouseMove = getMousePosition();
|
||||
lastFakeMouseMove = getMousePositionFloat();
|
||||
}
|
||||
|
||||
ListenerList<MouseListener>& Desktop::getMouseListeners()
|
||||
|
|
@ -222,7 +227,7 @@ void Desktop::removeGlobalMouseListener (MouseListener* const listener)
|
|||
|
||||
void Desktop::timerCallback()
|
||||
{
|
||||
if (lastFakeMouseMove != getMousePosition())
|
||||
if (lastFakeMouseMove != getMousePositionFloat())
|
||||
sendMouseMove();
|
||||
}
|
||||
|
||||
|
|
@ -232,12 +237,12 @@ void Desktop::sendMouseMove()
|
|||
{
|
||||
startTimer (20);
|
||||
|
||||
lastFakeMouseMove = getMousePosition();
|
||||
lastFakeMouseMove = getMousePositionFloat();
|
||||
|
||||
if (Component* const target = findComponentAt (lastFakeMouseMove))
|
||||
if (Component* const target = findComponentAt (lastFakeMouseMove.roundToInt()))
|
||||
{
|
||||
Component::BailOutChecker checker (target);
|
||||
const Point<int> pos (target->getLocalPoint (nullptr, lastFakeMouseMove));
|
||||
const Point<float> pos (target->getLocalPoint (nullptr, lastFakeMouseMove));
|
||||
const Time now (Time::getCurrentTime());
|
||||
|
||||
const MouseEvent me (getMainMouseSource(), pos, ModifierKeys::getCurrentModifiers(),
|
||||
|
|
|
|||
|
|
@ -414,7 +414,7 @@ private:
|
|||
|
||||
ScopedPointer<Displays> displays;
|
||||
|
||||
Point<int> lastFakeMouseMove;
|
||||
Point<float> lastFakeMouseMove;
|
||||
void sendMouseMove();
|
||||
|
||||
int mouseClickCounter, mouseWheelCounter;
|
||||
|
|
@ -446,6 +446,8 @@ private:
|
|||
void triggerFocusCallback();
|
||||
void handleAsyncUpdate() override;
|
||||
|
||||
static Point<float> getMousePositionFloat();
|
||||
|
||||
static double getDefaultMasterScale();
|
||||
|
||||
Desktop();
|
||||
|
|
|
|||
|
|
@ -980,12 +980,12 @@ public:
|
|||
void timerCallback() override
|
||||
{
|
||||
if (window.windowIsStillValid())
|
||||
handleMousePosition (source.getScreenPosition());
|
||||
handleMousePosition (source.getScreenPosition().roundToInt());
|
||||
}
|
||||
|
||||
bool isOver() const
|
||||
{
|
||||
return window.reallyContains (window.getLocalPoint (nullptr, source.getScreenPosition()), true);
|
||||
return window.reallyContains (window.getLocalPoint (nullptr, source.getScreenPosition()).roundToInt(), true);
|
||||
}
|
||||
|
||||
MenuWindow& window;
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ void ComponentDragger::dragComponent (Component* const componentToDrag, const Mo
|
|||
// so their coordinates become wrong after the first one moves the window, so in that case, we'll use
|
||||
// the current mouse position instead of the one that the event contains...
|
||||
if (componentToDrag->isOnDesktop())
|
||||
bounds += componentToDrag->getLocalPoint (nullptr, e.source.getScreenPosition()) - mouseDownWithinTarget;
|
||||
bounds += componentToDrag->getLocalPoint (nullptr, e.source.getScreenPosition()).roundToInt() - mouseDownWithinTarget;
|
||||
else
|
||||
bounds += e.getEventRelativeTo (componentToDrag).getPosition() - mouseDownWithinTarget;
|
||||
|
||||
|
|
|
|||
|
|
@ -353,7 +353,7 @@ void DragAndDropContainer::startDragging (const var& sourceDescription,
|
|||
return;
|
||||
}
|
||||
|
||||
const Point<int> lastMouseDown (draggingSource->getLastMouseDownPosition());
|
||||
const Point<int> lastMouseDown (draggingSource->getLastMouseDownPosition().roundToInt());
|
||||
Point<int> imageOffset;
|
||||
|
||||
if (dragImage.isNull())
|
||||
|
|
|
|||
|
|
@ -23,17 +23,18 @@
|
|||
*/
|
||||
|
||||
MouseEvent::MouseEvent (MouseInputSource inputSource,
|
||||
Point<int> position,
|
||||
Point<float> pos,
|
||||
ModifierKeys modKeys,
|
||||
Component* const eventComp,
|
||||
Component* const originator,
|
||||
Time time,
|
||||
Point<int> downPos,
|
||||
Point<float> downPos,
|
||||
Time downTime,
|
||||
const int numClicks,
|
||||
const bool mouseWasDragged) noexcept
|
||||
: x (position.x),
|
||||
y (position.y),
|
||||
: position (pos),
|
||||
x (roundToInt (pos.x)),
|
||||
y (roundToInt (pos.y)),
|
||||
mods (modKeys),
|
||||
eventComponent (eventComp),
|
||||
originalComponent (originator),
|
||||
|
|
@ -55,19 +56,26 @@ MouseEvent MouseEvent::getEventRelativeTo (Component* const otherComponent) cons
|
|||
{
|
||||
jassert (otherComponent != nullptr);
|
||||
|
||||
return MouseEvent (source, otherComponent->getLocalPoint (eventComponent, getPosition()),
|
||||
return MouseEvent (source, otherComponent->getLocalPoint (eventComponent, position),
|
||||
mods, otherComponent, originalComponent, eventTime,
|
||||
otherComponent->getLocalPoint (eventComponent, mouseDownPos),
|
||||
mouseDownTime, numberOfClicks, wasMovedSinceMouseDown != 0);
|
||||
}
|
||||
|
||||
MouseEvent MouseEvent::withNewPosition (Point<int> newPosition) const noexcept
|
||||
MouseEvent MouseEvent::withNewPosition (Point<float> newPosition) const noexcept
|
||||
{
|
||||
return MouseEvent (source, newPosition, mods, eventComponent, originalComponent,
|
||||
eventTime, mouseDownPos, mouseDownTime,
|
||||
numberOfClicks, wasMovedSinceMouseDown != 0);
|
||||
}
|
||||
|
||||
MouseEvent MouseEvent::withNewPosition (Point<int> newPosition) const noexcept
|
||||
{
|
||||
return MouseEvent (source, newPosition.toFloat(), mods, eventComponent, originalComponent,
|
||||
eventTime, mouseDownPos, mouseDownTime,
|
||||
numberOfClicks, wasMovedSinceMouseDown != 0);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
bool MouseEvent::mouseWasClicked() const noexcept
|
||||
{
|
||||
|
|
@ -86,17 +94,17 @@ int MouseEvent::getLengthOfMousePress() const noexcept
|
|||
Point<int> MouseEvent::getPosition() const noexcept { return Point<int> (x, y); }
|
||||
Point<int> MouseEvent::getScreenPosition() const { return eventComponent->localPointToGlobal (getPosition()); }
|
||||
|
||||
Point<int> MouseEvent::getMouseDownPosition() const noexcept { return mouseDownPos; }
|
||||
Point<int> MouseEvent::getMouseDownScreenPosition() const { return eventComponent->localPointToGlobal (mouseDownPos); }
|
||||
Point<int> MouseEvent::getMouseDownPosition() const noexcept { return mouseDownPos.roundToInt(); }
|
||||
Point<int> MouseEvent::getMouseDownScreenPosition() const { return eventComponent->localPointToGlobal (mouseDownPos).roundToInt(); }
|
||||
|
||||
Point<int> MouseEvent::getOffsetFromDragStart() const noexcept { return getPosition() - mouseDownPos; }
|
||||
int MouseEvent::getDistanceFromDragStart() const noexcept { return mouseDownPos.getDistanceFrom (getPosition()); }
|
||||
Point<int> MouseEvent::getOffsetFromDragStart() const noexcept { return (position - mouseDownPos).roundToInt(); }
|
||||
int MouseEvent::getDistanceFromDragStart() const noexcept { return roundToInt (mouseDownPos.getDistanceFrom (position)); }
|
||||
|
||||
int MouseEvent::getMouseDownX() const noexcept { return mouseDownPos.x; }
|
||||
int MouseEvent::getMouseDownY() const noexcept { return mouseDownPos.y; }
|
||||
int MouseEvent::getMouseDownX() const noexcept { return roundToInt (mouseDownPos.x); }
|
||||
int MouseEvent::getMouseDownY() const noexcept { return roundToInt (mouseDownPos.y); }
|
||||
|
||||
int MouseEvent::getDistanceFromDragStartX() const noexcept { return x - mouseDownPos.x; }
|
||||
int MouseEvent::getDistanceFromDragStartY() const noexcept { return y - mouseDownPos.y; }
|
||||
int MouseEvent::getDistanceFromDragStartX() const noexcept { return getOffsetFromDragStart().x; }
|
||||
int MouseEvent::getDistanceFromDragStartY() const noexcept { return getOffsetFromDragStart().y; }
|
||||
|
||||
int MouseEvent::getScreenX() const { return getScreenPosition().x; }
|
||||
int MouseEvent::getScreenY() const { return getScreenPosition().y; }
|
||||
|
|
|
|||
|
|
@ -57,12 +57,12 @@ public:
|
|||
@param mouseWasDragged whether the mouse has been dragged significantly since the previous mouse-down
|
||||
*/
|
||||
MouseEvent (MouseInputSource source,
|
||||
Point<int> position,
|
||||
Point<float> position,
|
||||
ModifierKeys modifiers,
|
||||
Component* eventComponent,
|
||||
Component* originator,
|
||||
Time eventTime,
|
||||
Point<int> mouseDownPos,
|
||||
Point<float> mouseDownPos,
|
||||
Time mouseDownTime,
|
||||
int numberOfClicks,
|
||||
bool mouseWasDragged) noexcept;
|
||||
|
|
@ -71,10 +71,22 @@ public:
|
|||
~MouseEvent() noexcept;
|
||||
|
||||
//==============================================================================
|
||||
/** The position of the mouse when the event occurred.
|
||||
|
||||
This value is relative to the top-left of the component to which the
|
||||
event applies (as indicated by the MouseEvent::eventComponent field).
|
||||
|
||||
This is a more accurate floating-point version of the position returned by
|
||||
getPosition() and the integer x and y member variables.
|
||||
*/
|
||||
const Point<float> position;
|
||||
|
||||
/** The x-position of the mouse when the event occurred.
|
||||
|
||||
This value is relative to the top-left of the component to which the
|
||||
event applies (as indicated by the MouseEvent::eventComponent field).
|
||||
|
||||
For a floating-point coordinate, see MouseEvent::position
|
||||
*/
|
||||
const int x;
|
||||
|
||||
|
|
@ -82,6 +94,8 @@ public:
|
|||
|
||||
This value is relative to the top-left of the component to which the
|
||||
event applies (as indicated by the MouseEvent::eventComponent field).
|
||||
|
||||
For a floating-point coordinate, see MouseEvent::position
|
||||
*/
|
||||
const int y;
|
||||
|
||||
|
|
@ -130,25 +144,19 @@ public:
|
|||
|
||||
//==============================================================================
|
||||
/** Returns the x coordinate of the last place that a mouse was pressed.
|
||||
|
||||
The coordinate is relative to the component specified in MouseEvent::component.
|
||||
|
||||
@see getDistanceFromDragStart, getDistanceFromDragStartX, mouseWasClicked
|
||||
*/
|
||||
int getMouseDownX() const noexcept;
|
||||
|
||||
/** Returns the y coordinate of the last place that a mouse was pressed.
|
||||
|
||||
The coordinate is relative to the component specified in MouseEvent::component.
|
||||
|
||||
@see getDistanceFromDragStart, getDistanceFromDragStartX, mouseWasClicked
|
||||
*/
|
||||
int getMouseDownY() const noexcept;
|
||||
|
||||
/** Returns the coordinates of the last place that a mouse was pressed.
|
||||
|
||||
The coordinates are relative to the component specified in MouseEvent::component.
|
||||
|
||||
@see getDistanceFromDragStart, getDistanceFromDragStartX, mouseWasClicked
|
||||
*/
|
||||
Point<int> getMouseDownPosition() const noexcept;
|
||||
|
|
@ -221,6 +229,8 @@ public:
|
|||
|
||||
This position is relative to the top-left of the component to which the
|
||||
event applies (as indicated by the MouseEvent::eventComponent field).
|
||||
|
||||
For a floating-point position, see MouseEvent::position
|
||||
*/
|
||||
Point<int> getPosition() const noexcept;
|
||||
|
||||
|
|
@ -269,6 +279,12 @@ public:
|
|||
*/
|
||||
MouseEvent getEventRelativeTo (Component* newComponent) const noexcept;
|
||||
|
||||
/** Creates a copy of this event with a different position.
|
||||
All other members of the event object are the same, but the x and y are
|
||||
replaced with these new values.
|
||||
*/
|
||||
MouseEvent withNewPosition (Point<float> newPosition) const noexcept;
|
||||
|
||||
/** Creates a copy of this event with a different position.
|
||||
All other members of the event object are the same, but the x and y are
|
||||
replaced with these new values.
|
||||
|
|
@ -297,7 +313,7 @@ public:
|
|||
|
||||
private:
|
||||
//==============================================================================
|
||||
const Point<int> mouseDownPos;
|
||||
const Point<float> mouseDownPos;
|
||||
const uint8 numberOfClicks, wasMovedSinceMouseDown;
|
||||
|
||||
MouseEvent& operator= (const MouseEvent&);
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ public:
|
|||
return lastPeer;
|
||||
}
|
||||
|
||||
static Point<int> screenPosToLocalPos (Component& comp, Point<int> pos)
|
||||
static Point<float> screenPosToLocalPos (Component& comp, Point<float> pos)
|
||||
{
|
||||
if (ComponentPeer* const peer = comp.getPeer())
|
||||
{
|
||||
|
|
@ -70,23 +70,25 @@ public:
|
|||
return comp.getLocalPoint (nullptr, ScalingHelpers::unscaledScreenPosToScaled (comp, pos));
|
||||
}
|
||||
|
||||
Component* findComponentAt (Point<int> screenPos)
|
||||
Component* findComponentAt (Point<float> screenPos)
|
||||
{
|
||||
if (ComponentPeer* const peer = getPeer())
|
||||
{
|
||||
Point<int> relativePos (ScalingHelpers::unscaledScreenPosToScaled (peer->getComponent(),
|
||||
peer->globalToLocal (screenPos)));
|
||||
Point<float> relativePos (ScalingHelpers::unscaledScreenPosToScaled (peer->getComponent(),
|
||||
peer->globalToLocal (screenPos)));
|
||||
Component& comp = peer->getComponent();
|
||||
|
||||
const Point<int> pos (relativePos.roundToInt());
|
||||
|
||||
// (the contains() call is needed to test for overlapping desktop windows)
|
||||
if (comp.contains (relativePos))
|
||||
return comp.getComponentAt (relativePos);
|
||||
if (comp.contains (pos))
|
||||
return comp.getComponentAt (pos);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Point<int> getScreenPosition() const
|
||||
Point<float> getScreenPosition() const
|
||||
{
|
||||
// This needs to return the live position if possible, but it mustn't update the lastScreenPos
|
||||
// value, because that can cause continuity problems.
|
||||
|
|
@ -95,7 +97,7 @@ public:
|
|||
: lastScreenPos));
|
||||
}
|
||||
|
||||
void setScreenPosition (Point<int> p)
|
||||
void setScreenPosition (Point<float> p)
|
||||
{
|
||||
MouseInputSource::setRawMousePosition (ScalingHelpers::scaledScreenPosToUnscaled (p));
|
||||
}
|
||||
|
|
@ -109,49 +111,49 @@ public:
|
|||
#define JUCE_MOUSE_EVENT_DBG(desc)
|
||||
#endif
|
||||
|
||||
void sendMouseEnter (Component& comp, Point<int> screenPos, Time time)
|
||||
void sendMouseEnter (Component& comp, Point<float> screenPos, Time time)
|
||||
{
|
||||
JUCE_MOUSE_EVENT_DBG ("enter")
|
||||
comp.internalMouseEnter (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time);
|
||||
}
|
||||
|
||||
void sendMouseExit (Component& comp, Point<int> screenPos, Time time)
|
||||
void sendMouseExit (Component& comp, Point<float> screenPos, Time time)
|
||||
{
|
||||
JUCE_MOUSE_EVENT_DBG ("exit")
|
||||
comp.internalMouseExit (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time);
|
||||
}
|
||||
|
||||
void sendMouseMove (Component& comp, Point<int> screenPos, Time time)
|
||||
void sendMouseMove (Component& comp, Point<float> screenPos, Time time)
|
||||
{
|
||||
JUCE_MOUSE_EVENT_DBG ("move")
|
||||
comp.internalMouseMove (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time);
|
||||
}
|
||||
|
||||
void sendMouseDown (Component& comp, Point<int> screenPos, Time time)
|
||||
void sendMouseDown (Component& comp, Point<float> screenPos, Time time)
|
||||
{
|
||||
JUCE_MOUSE_EVENT_DBG ("down")
|
||||
comp.internalMouseDown (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time);
|
||||
}
|
||||
|
||||
void sendMouseDrag (Component& comp, Point<int> screenPos, Time time)
|
||||
void sendMouseDrag (Component& comp, Point<float> screenPos, Time time)
|
||||
{
|
||||
JUCE_MOUSE_EVENT_DBG ("drag")
|
||||
comp.internalMouseDrag (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time);
|
||||
}
|
||||
|
||||
void sendMouseUp (Component& comp, Point<int> screenPos, Time time, const ModifierKeys oldMods)
|
||||
void sendMouseUp (Component& comp, Point<float> screenPos, Time time, const ModifierKeys oldMods)
|
||||
{
|
||||
JUCE_MOUSE_EVENT_DBG ("up")
|
||||
comp.internalMouseUp (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time, oldMods);
|
||||
}
|
||||
|
||||
void sendMouseWheel (Component& comp, Point<int> screenPos, Time time, const MouseWheelDetails& wheel)
|
||||
void sendMouseWheel (Component& comp, Point<float> screenPos, Time time, const MouseWheelDetails& wheel)
|
||||
{
|
||||
JUCE_MOUSE_EVENT_DBG ("wheel")
|
||||
comp.internalMouseWheel (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time, wheel);
|
||||
}
|
||||
|
||||
void sendMagnifyGesture (Component& comp, Point<int> screenPos, Time time, const float amount)
|
||||
void sendMagnifyGesture (Component& comp, Point<float> screenPos, Time time, const float amount)
|
||||
{
|
||||
JUCE_MOUSE_EVENT_DBG ("magnify")
|
||||
comp.internalMagnifyGesture (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time, amount);
|
||||
|
|
@ -159,7 +161,7 @@ public:
|
|||
|
||||
//==============================================================================
|
||||
// (returns true if the button change caused a modal event loop)
|
||||
bool setButtons (Point<int> screenPos, Time time, const ModifierKeys newButtonState)
|
||||
bool setButtons (Point<float> screenPos, Time time, const ModifierKeys newButtonState)
|
||||
{
|
||||
if (buttonState == newButtonState)
|
||||
return false;
|
||||
|
|
@ -209,7 +211,7 @@ public:
|
|||
return lastCounter != mouseEventCounter;
|
||||
}
|
||||
|
||||
void setComponentUnderMouse (Component* const newComponent, Point<int> screenPos, Time time)
|
||||
void setComponentUnderMouse (Component* const newComponent, Point<float> screenPos, Time time)
|
||||
{
|
||||
Component* current = getComponentUnderMouse();
|
||||
|
||||
|
|
@ -242,7 +244,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void setPeer (ComponentPeer& newPeer, Point<int> screenPos, Time time)
|
||||
void setPeer (ComponentPeer& newPeer, Point<float> screenPos, Time time)
|
||||
{
|
||||
ModifierKeys::updateCurrentModifiers();
|
||||
|
||||
|
|
@ -254,7 +256,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
void setScreenPos (Point<int> newScreenPos, Time time, const bool forceUpdate)
|
||||
void setScreenPos (Point<float> newScreenPos, Time time, const bool forceUpdate)
|
||||
{
|
||||
if (! isDragging())
|
||||
setComponentUnderMouse (findComponentAt (newScreenPos), newScreenPos, time);
|
||||
|
|
@ -285,11 +287,11 @@ public:
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
void handleEvent (ComponentPeer& newPeer, Point<int> positionWithinPeer, Time time, const ModifierKeys newMods)
|
||||
void handleEvent (ComponentPeer& newPeer, Point<float> positionWithinPeer, Time time, const ModifierKeys newMods)
|
||||
{
|
||||
lastTime = time;
|
||||
++mouseEventCounter;
|
||||
const Point<int> screenPos (newPeer.localToGlobal (positionWithinPeer));
|
||||
const Point<float> screenPos (newPeer.localToGlobal (positionWithinPeer));
|
||||
|
||||
if (isDragging() && newMods.isAnyMouseButtonDown())
|
||||
{
|
||||
|
|
@ -311,8 +313,8 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
Component* getTargetForGesture (ComponentPeer& peer, Point<int> positionWithinPeer,
|
||||
Time time, Point<int>& screenPos)
|
||||
Component* getTargetForGesture (ComponentPeer& peer, Point<float> positionWithinPeer,
|
||||
Time time, Point<float>& screenPos)
|
||||
{
|
||||
lastTime = time;
|
||||
++mouseEventCounter;
|
||||
|
|
@ -325,27 +327,27 @@ public:
|
|||
return isDragging() ? nullptr : getComponentUnderMouse();
|
||||
}
|
||||
|
||||
void handleWheel (ComponentPeer& peer, Point<int> positionWithinPeer,
|
||||
void handleWheel (ComponentPeer& peer, Point<float> positionWithinPeer,
|
||||
Time time, const MouseWheelDetails& wheel)
|
||||
{
|
||||
Desktop::getInstance().incrementMouseWheelCounter();
|
||||
|
||||
Point<int> screenPos;
|
||||
Point<float> screenPos;
|
||||
if (Component* current = getTargetForGesture (peer, positionWithinPeer, time, screenPos))
|
||||
sendMouseWheel (*current, screenPos, time, wheel);
|
||||
}
|
||||
|
||||
void handleMagnifyGesture (ComponentPeer& peer, Point<int> positionWithinPeer,
|
||||
void handleMagnifyGesture (ComponentPeer& peer, Point<float> positionWithinPeer,
|
||||
Time time, const float scaleFactor)
|
||||
{
|
||||
Point<int> screenPos;
|
||||
Point<float> screenPos;
|
||||
if (Component* current = getTargetForGesture (peer, positionWithinPeer, time, screenPos))
|
||||
sendMagnifyGesture (*current, screenPos, time, scaleFactor);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
Time getLastMouseDownTime() const noexcept { return mouseDowns[0].time; }
|
||||
Point<int> getLastMouseDownPosition() const noexcept { return ScalingHelpers::unscaledScreenPosToScaled (mouseDowns[0].position); }
|
||||
Point<float> getLastMouseDownPosition() const noexcept { return ScalingHelpers::unscaledScreenPosToScaled (mouseDowns[0].position); }
|
||||
|
||||
int getNumberOfMultipleClicks() const noexcept
|
||||
{
|
||||
|
|
@ -397,12 +399,11 @@ public:
|
|||
{
|
||||
// when released, return the mouse to within the component's bounds
|
||||
if (Component* current = getComponentUnderMouse())
|
||||
Desktop::setMousePosition (current->getScreenBounds()
|
||||
.getConstrainedPoint (lastScreenPos));
|
||||
setScreenPosition (current->getScreenBounds().toFloat().getConstrainedPoint (lastScreenPos));
|
||||
}
|
||||
|
||||
isUnboundedMouseModeOn = enable;
|
||||
unboundedMouseOffset = Point<int>();
|
||||
unboundedMouseOffset = Point<float>();
|
||||
|
||||
revealCursor (true);
|
||||
}
|
||||
|
|
@ -410,20 +411,20 @@ public:
|
|||
|
||||
void handleUnboundedDrag (Component* current)
|
||||
{
|
||||
const Rectangle<int> screenArea (current->getParentMonitorArea().expanded (-2, -2));
|
||||
const Rectangle<float> screenArea (current->getParentMonitorArea().expanded (-2, -2).toFloat());
|
||||
|
||||
if (! screenArea.contains (lastScreenPos))
|
||||
{
|
||||
const Point<int> componentCentre (current->getScreenBounds().getCentre());
|
||||
const Point<float> componentCentre (current->getScreenBounds().toFloat().getCentre());
|
||||
unboundedMouseOffset += (lastScreenPos - componentCentre);
|
||||
Desktop::setMousePosition (componentCentre);
|
||||
setScreenPosition (componentCentre);
|
||||
}
|
||||
else if (isCursorVisibleUntilOffscreen
|
||||
&& (! unboundedMouseOffset.isOrigin())
|
||||
&& screenArea.contains (lastScreenPos + unboundedMouseOffset))
|
||||
{
|
||||
Desktop::setMousePosition (lastScreenPos + unboundedMouseOffset);
|
||||
unboundedMouseOffset = Point<int>();
|
||||
setScreenPosition (lastScreenPos + unboundedMouseOffset);
|
||||
unboundedMouseOffset = Point<float>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -461,10 +462,10 @@ public:
|
|||
//==============================================================================
|
||||
const int index;
|
||||
const bool isMouseDevice;
|
||||
Point<int> lastScreenPos;
|
||||
Point<float> lastScreenPos;
|
||||
ModifierKeys buttonState;
|
||||
|
||||
Point<int> unboundedMouseOffset;
|
||||
Point<float> unboundedMouseOffset;
|
||||
bool isUnboundedMouseModeOn, isCursorVisibleUntilOffscreen;
|
||||
|
||||
private:
|
||||
|
|
@ -478,7 +479,7 @@ private:
|
|||
{
|
||||
RecentMouseDown() noexcept : peerID (0) {}
|
||||
|
||||
Point<int> position;
|
||||
Point<float> position;
|
||||
Time time;
|
||||
ModifierKeys buttons;
|
||||
uint32 peerID;
|
||||
|
|
@ -497,7 +498,7 @@ private:
|
|||
Time lastTime;
|
||||
bool mouseMovedSignificantlySincePressed;
|
||||
|
||||
void registerMouseDown (Point<int> screenPos, Time time,
|
||||
void registerMouseDown (Point<float> screenPos, Time time,
|
||||
Component& component, const ModifierKeys modifiers) noexcept
|
||||
{
|
||||
for (int i = numElementsInArray (mouseDowns); --i > 0;)
|
||||
|
|
@ -515,7 +516,7 @@ private:
|
|||
mouseMovedSignificantlySincePressed = false;
|
||||
}
|
||||
|
||||
void registerMouseDrag (Point<int> screenPos) noexcept
|
||||
void registerMouseDrag (Point<float> screenPos) noexcept
|
||||
{
|
||||
mouseMovedSignificantlySincePressed = mouseMovedSignificantlySincePressed
|
||||
|| mouseDowns[0].position.getDistanceFrom (screenPos) >= 4;
|
||||
|
|
@ -535,47 +536,44 @@ MouseInputSource& MouseInputSource::operator= (const MouseInputSource& other) no
|
|||
return *this;
|
||||
}
|
||||
|
||||
bool MouseInputSource::isMouse() const { return pimpl->isMouseDevice; }
|
||||
bool MouseInputSource::isTouch() const { return ! isMouse(); }
|
||||
bool MouseInputSource::canHover() const { return isMouse(); }
|
||||
bool MouseInputSource::hasMouseWheel() const { return isMouse(); }
|
||||
int MouseInputSource::getIndex() const { return pimpl->index; }
|
||||
bool MouseInputSource::isDragging() const { return pimpl->isDragging(); }
|
||||
Point<int> MouseInputSource::getScreenPosition() const { return pimpl->getScreenPosition(); }
|
||||
ModifierKeys MouseInputSource::getCurrentModifiers() const { return pimpl->getCurrentModifiers(); }
|
||||
Component* MouseInputSource::getComponentUnderMouse() const { return pimpl->getComponentUnderMouse(); }
|
||||
void MouseInputSource::triggerFakeMove() const { pimpl->triggerFakeMove(); }
|
||||
int MouseInputSource::getNumberOfMultipleClicks() const noexcept { return pimpl->getNumberOfMultipleClicks(); }
|
||||
Time MouseInputSource::getLastMouseDownTime() const noexcept { return pimpl->getLastMouseDownTime(); }
|
||||
Point<int> MouseInputSource::getLastMouseDownPosition() const noexcept { return pimpl->getLastMouseDownPosition(); }
|
||||
bool MouseInputSource::isMouse() const { return pimpl->isMouseDevice; }
|
||||
bool MouseInputSource::isTouch() const { return ! isMouse(); }
|
||||
bool MouseInputSource::canHover() const { return isMouse(); }
|
||||
bool MouseInputSource::hasMouseWheel() const { return isMouse(); }
|
||||
int MouseInputSource::getIndex() const { return pimpl->index; }
|
||||
bool MouseInputSource::isDragging() const { return pimpl->isDragging(); }
|
||||
Point<float> MouseInputSource::getScreenPosition() const { return pimpl->getScreenPosition(); }
|
||||
ModifierKeys MouseInputSource::getCurrentModifiers() const { return pimpl->getCurrentModifiers(); }
|
||||
Component* MouseInputSource::getComponentUnderMouse() const { return pimpl->getComponentUnderMouse(); }
|
||||
void MouseInputSource::triggerFakeMove() const { pimpl->triggerFakeMove(); }
|
||||
int MouseInputSource::getNumberOfMultipleClicks() const noexcept { return pimpl->getNumberOfMultipleClicks(); }
|
||||
Time MouseInputSource::getLastMouseDownTime() const noexcept { return pimpl->getLastMouseDownTime(); }
|
||||
Point<float> MouseInputSource::getLastMouseDownPosition() const noexcept { return pimpl->getLastMouseDownPosition(); }
|
||||
bool MouseInputSource::hasMouseMovedSignificantlySincePressed() const noexcept { return pimpl->hasMouseMovedSignificantlySincePressed(); }
|
||||
bool MouseInputSource::canDoUnboundedMovement() const noexcept { return isMouse(); }
|
||||
bool MouseInputSource::canDoUnboundedMovement() const noexcept { return isMouse(); }
|
||||
void MouseInputSource::enableUnboundedMouseMovement (bool isEnabled, bool keepCursorVisibleUntilOffscreen) const
|
||||
{ pimpl->enableUnboundedMouseMovement (isEnabled, keepCursorVisibleUntilOffscreen); }
|
||||
bool MouseInputSource::isUnboundedMouseMovementEnabled() const { return pimpl->isUnboundedMouseModeOn; }
|
||||
bool MouseInputSource::hasMouseCursor() const noexcept { return isMouse(); }
|
||||
void MouseInputSource::showMouseCursor (const MouseCursor& cursor) { pimpl->showMouseCursor (cursor, false); }
|
||||
void MouseInputSource::hideCursor() { pimpl->hideCursor(); }
|
||||
void MouseInputSource::revealCursor() { pimpl->revealCursor (false); }
|
||||
void MouseInputSource::forceMouseCursorUpdate() { pimpl->revealCursor (true); }
|
||||
void MouseInputSource::setScreenPosition (Point<int> p) { pimpl->setScreenPosition (p); }
|
||||
{ pimpl->enableUnboundedMouseMovement (isEnabled, keepCursorVisibleUntilOffscreen); }
|
||||
bool MouseInputSource::isUnboundedMouseMovementEnabled() const { return pimpl->isUnboundedMouseModeOn; }
|
||||
bool MouseInputSource::hasMouseCursor() const noexcept { return isMouse(); }
|
||||
void MouseInputSource::showMouseCursor (const MouseCursor& cursor) { pimpl->showMouseCursor (cursor, false); }
|
||||
void MouseInputSource::hideCursor() { pimpl->hideCursor(); }
|
||||
void MouseInputSource::revealCursor() { pimpl->revealCursor (false); }
|
||||
void MouseInputSource::forceMouseCursorUpdate() { pimpl->revealCursor (true); }
|
||||
void MouseInputSource::setScreenPosition (Point<float> p) { pimpl->setScreenPosition (p); }
|
||||
|
||||
void MouseInputSource::handleEvent (ComponentPeer& peer, Point<int> positionWithinPeer,
|
||||
const int64 time, const ModifierKeys mods)
|
||||
void MouseInputSource::handleEvent (ComponentPeer& peer, Point<float> pos, int64 time, ModifierKeys mods)
|
||||
{
|
||||
pimpl->handleEvent (peer, positionWithinPeer, Time (time), mods.withOnlyMouseButtons());
|
||||
pimpl->handleEvent (peer, pos, Time (time), mods.withOnlyMouseButtons());
|
||||
}
|
||||
|
||||
void MouseInputSource::handleWheel (ComponentPeer& peer, Point<int> positionWithinPeer,
|
||||
const int64 time, const MouseWheelDetails& wheel)
|
||||
void MouseInputSource::handleWheel (ComponentPeer& peer, Point<float> pos, int64 time, const MouseWheelDetails& wheel)
|
||||
{
|
||||
pimpl->handleWheel (peer, positionWithinPeer, Time (time), wheel);
|
||||
pimpl->handleWheel (peer, pos, Time (time), wheel);
|
||||
}
|
||||
|
||||
void MouseInputSource::handleMagnifyGesture (ComponentPeer& peer, Point<int> positionWithinPeer,
|
||||
const int64 time, const float scaleFactor)
|
||||
void MouseInputSource::handleMagnifyGesture (ComponentPeer& peer, Point<float> pos, int64 time, float scaleFactor)
|
||||
{
|
||||
pimpl->handleMagnifyGesture (peer, positionWithinPeer, Time (time), scaleFactor);
|
||||
pimpl->handleMagnifyGesture (peer, pos, Time (time), scaleFactor);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ public:
|
|||
bool isDragging() const;
|
||||
|
||||
/** Returns the last-known screen position of this source. */
|
||||
Point<int> getScreenPosition() const;
|
||||
Point<float> getScreenPosition() const;
|
||||
|
||||
/** Returns a set of modifiers that indicate which buttons are currently
|
||||
held down on this device.
|
||||
|
|
@ -114,7 +114,7 @@ public:
|
|||
Time getLastMouseDownTime() const noexcept;
|
||||
|
||||
/** Returns the screen position at which the last mouse-down occurred. */
|
||||
Point<int> getLastMouseDownPosition() const noexcept;
|
||||
Point<float> getLastMouseDownPosition() const noexcept;
|
||||
|
||||
/** Returns true if this mouse is currently down, and if it has been dragged more
|
||||
than a couple of pixels from the place it was pressed.
|
||||
|
|
@ -162,7 +162,7 @@ public:
|
|||
bool isUnboundedMouseMovementEnabled() const;
|
||||
|
||||
/** Attempts to set this mouse pointer's screen position. */
|
||||
void setScreenPosition (Point<int> newPosition);
|
||||
void setScreenPosition (Point<float> newPosition);
|
||||
|
||||
private:
|
||||
//==============================================================================
|
||||
|
|
@ -174,12 +174,12 @@ private:
|
|||
struct SourceList;
|
||||
|
||||
explicit MouseInputSource (MouseInputSourceInternal*) noexcept;
|
||||
void handleEvent (ComponentPeer&, Point<int>, int64 time, const ModifierKeys);
|
||||
void handleWheel (ComponentPeer&, Point<int>, int64 time, const MouseWheelDetails&);
|
||||
void handleMagnifyGesture (ComponentPeer&, Point<int>, int64 time, float scaleFactor);
|
||||
void handleEvent (ComponentPeer&, Point<float>, int64 time, ModifierKeys);
|
||||
void handleWheel (ComponentPeer&, Point<float>, int64 time, const MouseWheelDetails&);
|
||||
void handleMagnifyGesture (ComponentPeer&, Point<float>, int64 time, float scaleFactor);
|
||||
|
||||
static Point<int> getCurrentRawMousePosition();
|
||||
static void setRawMousePosition (Point<int>);
|
||||
static Point<float> getCurrentRawMousePosition();
|
||||
static void setRawMousePosition (Point<float>);
|
||||
|
||||
JUCE_LEAK_DETECTOR (MouseInputSource)
|
||||
};
|
||||
|
|
|
|||
|
|
@ -234,14 +234,14 @@ public:
|
|||
view.callIntMethod (ComponentPeerView.getTop));
|
||||
}
|
||||
|
||||
Point<int> localToGlobal (Point<int> relativePosition) override
|
||||
Point<float> localToGlobal (Point<float> relativePosition) override
|
||||
{
|
||||
return relativePosition + getScreenPosition();
|
||||
return relativePosition + getScreenPosition().toFloat();
|
||||
}
|
||||
|
||||
Point<int> globalToLocal (Point<int> screenPosition) override
|
||||
Point<float> globalToLocal (Point<float> screenPosition) override
|
||||
{
|
||||
return screenPosition - getScreenPosition();
|
||||
return screenPosition - getScreenPosition().toFloat();
|
||||
}
|
||||
|
||||
void setMinimised (bool shouldBeMinimised) override
|
||||
|
|
@ -320,7 +320,7 @@ public:
|
|||
lastMousePos = pos;
|
||||
|
||||
// this forces a mouse-enter/up event, in case for some reason we didn't get a mouse-up before.
|
||||
handleMouseEvent (index, pos.toInt(), currentModifiers.withoutMouseButtons(), time);
|
||||
handleMouseEvent (index, pos, currentModifiers.withoutMouseButtons(), time);
|
||||
|
||||
if (isValidPeer (this))
|
||||
handleMouseDragCallback (index, pos, time);
|
||||
|
|
@ -333,8 +333,8 @@ public:
|
|||
jassert (index < 64);
|
||||
touchesDown = (touchesDown | (1 << (index & 63)));
|
||||
currentModifiers = currentModifiers.withoutMouseButtons().withFlags (ModifierKeys::leftButtonModifier);
|
||||
handleMouseEvent (index, pos.toInt(), currentModifiers.withoutMouseButtons()
|
||||
.withFlags (ModifierKeys::leftButtonModifier), time);
|
||||
handleMouseEvent (index, pos, currentModifiers.withoutMouseButtons()
|
||||
.withFlags (ModifierKeys::leftButtonModifier), time);
|
||||
}
|
||||
|
||||
void handleMouseUpCallback (int index, Point<float> pos, int64 time)
|
||||
|
|
@ -347,7 +347,7 @@ public:
|
|||
if (touchesDown == 0)
|
||||
currentModifiers = currentModifiers.withoutMouseButtons();
|
||||
|
||||
handleMouseEvent (index, pos.toInt(), currentModifiers.withoutMouseButtons(), time);
|
||||
handleMouseEvent (index, pos, currentModifiers.withoutMouseButtons(), time);
|
||||
}
|
||||
|
||||
void handleKeyDownCallback (int k, int kc)
|
||||
|
|
@ -611,12 +611,12 @@ bool MouseInputSource::SourceList::addSource()
|
|||
return true;
|
||||
}
|
||||
|
||||
Point<int> MouseInputSource::getCurrentRawMousePosition()
|
||||
Point<float> MouseInputSource::getCurrentRawMousePosition()
|
||||
{
|
||||
return AndroidComponentPeer::lastMousePos.toInt();
|
||||
return AndroidComponentPeer::lastMousePos;
|
||||
}
|
||||
|
||||
void MouseInputSource::setRawMousePosition (Point<int>)
|
||||
void MouseInputSource::setRawMousePosition (Point<float>)
|
||||
{
|
||||
// not needed
|
||||
}
|
||||
|
|
|
|||
|
|
@ -145,8 +145,8 @@ public:
|
|||
|
||||
Rectangle<int> getBounds() const override { return getBounds (! isSharedWindow); }
|
||||
Rectangle<int> getBounds (bool global) const;
|
||||
Point<int> localToGlobal (Point<int> relativePosition) override;
|
||||
Point<int> globalToLocal (Point<int> screenPosition) override;
|
||||
Point<float> localToGlobal (Point<float> relativePosition) override;
|
||||
Point<float> globalToLocal (Point<float> screenPosition) override;
|
||||
void setAlpha (float newAlpha) override;
|
||||
void setMinimised (bool) override {}
|
||||
bool isMinimised() const override { return false; }
|
||||
|
|
@ -477,7 +477,7 @@ void ModifierKeys::updateCurrentModifiers() noexcept
|
|||
currentModifiers = UIViewComponentPeer::currentModifiers;
|
||||
}
|
||||
|
||||
Point<int> juce_lastMousePos;
|
||||
Point<float> juce_lastMousePos;
|
||||
|
||||
//==============================================================================
|
||||
UIViewComponentPeer::UIViewComponentPeer (Component& comp, const int windowStyleFlags, UIView* viewToAttachTo)
|
||||
|
|
@ -603,14 +603,14 @@ Rectangle<int> UIViewComponentPeer::getBounds (const bool global) const
|
|||
return convertToRectInt (r);
|
||||
}
|
||||
|
||||
Point<int> UIViewComponentPeer::localToGlobal (Point<int> relativePosition)
|
||||
Point<float> UIViewComponentPeer::localToGlobal (Point<float> relativePosition)
|
||||
{
|
||||
return relativePosition + getBounds (true).getPosition();
|
||||
return relativePosition + getBounds (true).getPosition().toFloat();
|
||||
}
|
||||
|
||||
Point<int> UIViewComponentPeer::globalToLocal (Point<int> screenPosition)
|
||||
Point<float> UIViewComponentPeer::globalToLocal (Point<float> screenPosition)
|
||||
{
|
||||
return screenPosition - getBounds (true).getPosition();
|
||||
return screenPosition - getBounds (true).getPosition().toFloat();
|
||||
}
|
||||
|
||||
void UIViewComponentPeer::setAlpha (float newAlpha)
|
||||
|
|
@ -737,8 +737,8 @@ void UIViewComponentPeer::handleTouches (UIEvent* event, const bool isDown, cons
|
|||
continue;
|
||||
|
||||
CGPoint p = [touch locationInView: view];
|
||||
const Point<int> pos ((int) p.x, (int) p.y);
|
||||
juce_lastMousePos = pos + getBounds (true).getPosition();
|
||||
const Point<float> pos (p.x, p.y);
|
||||
juce_lastMousePos = pos + getBounds (true).getPosition().toFloat();
|
||||
|
||||
const int64 time = getMouseTime (event);
|
||||
const int touchIndex = currentTouches.getIndexOfTouch (touch);
|
||||
|
|
@ -782,7 +782,7 @@ void UIViewComponentPeer::handleTouches (UIEvent* event, const bool isDown, cons
|
|||
|
||||
if (isUp || isCancel)
|
||||
{
|
||||
handleMouseEvent (touchIndex, Point<int> (-1, -1), modsToSend, time);
|
||||
handleMouseEvent (touchIndex, Point<float> (-1.0f, -1.0f), modsToSend, time);
|
||||
if (! isValidPeer (this))
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -312,12 +312,12 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
|
|||
return true;
|
||||
}
|
||||
|
||||
Point<int> MouseInputSource::getCurrentRawMousePosition()
|
||||
Point<float> MouseInputSource::getCurrentRawMousePosition()
|
||||
{
|
||||
return juce_lastMousePos;
|
||||
}
|
||||
|
||||
void MouseInputSource::setRawMousePosition (Point<int>)
|
||||
void MouseInputSource::setRawMousePosition (Point<float>)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -971,14 +971,14 @@ public:
|
|||
|
||||
Rectangle<int> getBounds() const override { return bounds; }
|
||||
|
||||
Point<int> localToGlobal (Point<int> relativePosition) override
|
||||
Point<float> localToGlobal (Point<float> relativePosition) override
|
||||
{
|
||||
return relativePosition + bounds.getPosition();
|
||||
return relativePosition + bounds.getPosition().toFloat();
|
||||
}
|
||||
|
||||
Point<int> globalToLocal (Point<int> screenPosition) override
|
||||
Point<float> globalToLocal (Point<float> screenPosition) override
|
||||
{
|
||||
return screenPosition - bounds.getPosition();
|
||||
return screenPosition - bounds.getPosition().toFloat();
|
||||
}
|
||||
|
||||
void setAlpha (float /* newAlpha */) override
|
||||
|
|
@ -1491,9 +1491,9 @@ public:
|
|||
}
|
||||
|
||||
template <typename EventType>
|
||||
static Point<int> getMousePos (const EventType& e) noexcept
|
||||
static Point<float> getMousePos (const EventType& e) noexcept
|
||||
{
|
||||
return Point<int> (e.x, e.y);
|
||||
return Point<float> ((float) e.x, (float) e.y);
|
||||
}
|
||||
|
||||
void handleWheelEvent (const XButtonPressedEvent& buttonPressEvent, const float amount)
|
||||
|
|
@ -3123,7 +3123,7 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
|
|||
&& (matchedDepth == desiredDepth);
|
||||
}
|
||||
|
||||
Point<int> MouseInputSource::getCurrentRawMousePosition()
|
||||
Point<float> MouseInputSource::getCurrentRawMousePosition()
|
||||
{
|
||||
Window root, child;
|
||||
int x, y, winx, winy;
|
||||
|
|
@ -3140,14 +3140,14 @@ Point<int> MouseInputSource::getCurrentRawMousePosition()
|
|||
x = y = -1;
|
||||
}
|
||||
|
||||
return Point<int> (x, y);
|
||||
return Point<float> ((float) x, (float) y);
|
||||
}
|
||||
|
||||
void MouseInputSource::setRawMousePosition (Point<int> newPosition)
|
||||
void MouseInputSource::setRawMousePosition (Point<float> newPosition)
|
||||
{
|
||||
ScopedXLock xlock;
|
||||
Window root = RootWindow (display, DefaultScreen (display));
|
||||
XWarpPointer (display, None, root, 0, 0, 0, 0, newPosition.getX(), newPosition.getY());
|
||||
XWarpPointer (display, None, root, 0, 0, 0, 0, roundToInt (newPosition.getX()), roundToInt (newPosition.getY()));
|
||||
}
|
||||
|
||||
double Desktop::getDefaultMasterScale()
|
||||
|
|
|
|||
|
|
@ -295,14 +295,14 @@ public:
|
|||
return getBounds (! isSharedWindow);
|
||||
}
|
||||
|
||||
Point<int> localToGlobal (Point<int> relativePosition) override
|
||||
Point<float> localToGlobal (Point<float> relativePosition) override
|
||||
{
|
||||
return relativePosition + getBounds (true).getPosition();
|
||||
return relativePosition + getBounds (true).getPosition().toFloat();
|
||||
}
|
||||
|
||||
Point<int> globalToLocal (Point<int> screenPosition) override
|
||||
Point<float> globalToLocal (Point<float> screenPosition) override
|
||||
{
|
||||
return screenPosition - getBounds (true).getPosition();
|
||||
return screenPosition - getBounds (true).getPosition().toFloat();
|
||||
}
|
||||
|
||||
void setAlpha (float newAlpha) override
|
||||
|
|
@ -559,7 +559,7 @@ public:
|
|||
belowWindowWithWindowNumber: 0] != [window windowNumber])
|
||||
{
|
||||
// moved into another window which overlaps this one, so trigger an exit
|
||||
handleMouseEvent (0, Point<int> (-1, -1), currentModifiers, getMouseTime (ev));
|
||||
handleMouseEvent (0, Point<float> (-1.0f, -1.0f), currentModifiers, getMouseTime (ev));
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
|
@ -936,7 +936,7 @@ public:
|
|||
MouseInputSource mouse = desktop.getMainMouseSource();
|
||||
|
||||
if (mouse.getComponentUnderMouse() == nullptr
|
||||
&& desktop.findComponentAt (mouse.getScreenPosition()) == nullptr)
|
||||
&& desktop.findComponentAt (mouse.getScreenPosition().roundToInt()) == nullptr)
|
||||
{
|
||||
[[NSCursor arrowCursor] set];
|
||||
}
|
||||
|
|
@ -1010,10 +1010,10 @@ public:
|
|||
+ (int64) ([e timestamp] * 1000.0);
|
||||
}
|
||||
|
||||
static Point<int> getMousePos (NSEvent* e, NSView* view)
|
||||
static Point<float> getMousePos (NSEvent* e, NSView* view)
|
||||
{
|
||||
NSPoint p = [view convertPoint: [e locationInWindow] fromView: nil];
|
||||
return Point<int> ((int) p.x, (int) ([view frame].size.height - p.y));
|
||||
return Point<float> (p.x, [view frame].size.height - p.y);
|
||||
}
|
||||
|
||||
static int getModifierForButtonNumber (const NSInteger num)
|
||||
|
|
|
|||
|
|
@ -209,16 +209,16 @@ bool Desktop::canUseSemiTransparentWindows() noexcept
|
|||
return true;
|
||||
}
|
||||
|
||||
Point<int> MouseInputSource::getCurrentRawMousePosition()
|
||||
Point<float> MouseInputSource::getCurrentRawMousePosition()
|
||||
{
|
||||
JUCE_AUTORELEASEPOOL
|
||||
{
|
||||
const NSPoint p ([NSEvent mouseLocation]);
|
||||
return Point<int> (roundToInt (p.x), roundToInt (getMainScreenHeight() - p.y));
|
||||
return Point<float> (p.x, getMainScreenHeight() - p.y);
|
||||
}
|
||||
}
|
||||
|
||||
void MouseInputSource::setRawMousePosition (Point<int> newPosition)
|
||||
void MouseInputSource::setRawMousePosition (Point<float> newPosition)
|
||||
{
|
||||
// this rubbish needs to be done around the warp call, to avoid causing a
|
||||
// bizarre glitch..
|
||||
|
|
|
|||
|
|
@ -704,8 +704,8 @@ public:
|
|||
r.top + windowBorder.getTop());
|
||||
}
|
||||
|
||||
Point<int> localToGlobal (Point<int> relativePosition) override { return relativePosition + getScreenPosition(); }
|
||||
Point<int> globalToLocal (Point<int> screenPosition) override { return screenPosition - getScreenPosition(); }
|
||||
Point<float> localToGlobal (Point<float> relativePosition) override { return relativePosition + getScreenPosition().toFloat(); }
|
||||
Point<float> globalToLocal (Point<float> screenPosition) override { return screenPosition - getScreenPosition().toFloat(); }
|
||||
|
||||
void setAlpha (float newAlpha) override
|
||||
{
|
||||
|
|
@ -993,7 +993,7 @@ public:
|
|||
if (ownerInfo == nullptr)
|
||||
return S_FALSE;
|
||||
|
||||
ownerInfo->dragInfo.position = ownerInfo->getMousePos (mousePos);
|
||||
ownerInfo->dragInfo.position = ownerInfo->getMousePos (mousePos).roundToInt();
|
||||
const bool wasWanted = ownerInfo->owner.handleDragMove (ownerInfo->dragInfo);
|
||||
*pdwEffect = wasWanted ? (DWORD) DROPEFFECT_COPY : (DWORD) DROPEFFECT_NONE;
|
||||
return S_OK;
|
||||
|
|
@ -1004,7 +1004,7 @@ public:
|
|||
HRESULT hr = updateFileList (pDataObject);
|
||||
if (SUCCEEDED (hr))
|
||||
{
|
||||
ownerInfo->dragInfo.position = ownerInfo->getMousePos (mousePos);
|
||||
ownerInfo->dragInfo.position = ownerInfo->getMousePos (mousePos).roundToInt();
|
||||
const bool wasWanted = ownerInfo->owner.handleDragDrop (ownerInfo->dragInfo);
|
||||
*pdwEffect = wasWanted ? (DWORD) DROPEFFECT_COPY : (DWORD) DROPEFFECT_NONE;
|
||||
hr = S_OK;
|
||||
|
|
@ -1018,9 +1018,10 @@ public:
|
|||
{
|
||||
OwnerInfo (HWNDComponentPeer& p) : owner (p) {}
|
||||
|
||||
Point<int> getMousePos (const POINTL& mousePos) const
|
||||
Point<float> getMousePos (const POINTL& mousePos) const
|
||||
{
|
||||
return owner.globalToLocal (Point<int> (mousePos.x, mousePos.y));
|
||||
return owner.globalToLocal (Point<float> (static_cast<float> (mousePos.x),
|
||||
static_cast<float> (mousePos.y)));
|
||||
}
|
||||
|
||||
template <typename CharType>
|
||||
|
|
@ -1648,7 +1649,7 @@ private:
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
void doMouseEvent (Point<int> position)
|
||||
void doMouseEvent (Point<float> position)
|
||||
{
|
||||
handleMouseEvent (0, position, currentModifiers, getMouseEventTime());
|
||||
}
|
||||
|
|
@ -1699,7 +1700,7 @@ private:
|
|||
return 1000 / 60; // Throttling the incoming mouse-events seems to still be needed in XP..
|
||||
}
|
||||
|
||||
void doMouseMove (Point<int> position)
|
||||
void doMouseMove (Point<float> position)
|
||||
{
|
||||
if (! isMouseOver)
|
||||
{
|
||||
|
|
@ -1720,7 +1721,7 @@ private:
|
|||
}
|
||||
else if (! isDragging)
|
||||
{
|
||||
if (! contains (position, false))
|
||||
if (! contains (position.roundToInt(), false))
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1735,7 +1736,7 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
void doMouseDown (Point<int> position, const WPARAM wParam)
|
||||
void doMouseDown (Point<float> position, const WPARAM wParam)
|
||||
{
|
||||
if (GetCapture() != hwnd)
|
||||
SetCapture (hwnd);
|
||||
|
|
@ -1748,7 +1749,7 @@ private:
|
|||
doMouseEvent (position);
|
||||
}
|
||||
|
||||
void doMouseUp (Point<int> position, const WPARAM wParam)
|
||||
void doMouseUp (Point<float> position, const WPARAM wParam)
|
||||
{
|
||||
updateModifiersFromWParam (wParam);
|
||||
const bool wasDragging = isDragging;
|
||||
|
|
@ -1784,9 +1785,9 @@ private:
|
|||
doMouseEvent (getCurrentMousePos());
|
||||
}
|
||||
|
||||
ComponentPeer* findPeerUnderMouse (Point<int>& localPos)
|
||||
ComponentPeer* findPeerUnderMouse (Point<float>& localPos)
|
||||
{
|
||||
const Point<int> globalPos (getCurrentMousePosGlobal());
|
||||
const Point<int> globalPos (getCurrentMousePosGlobal().roundToInt());
|
||||
|
||||
// Because Windows stupidly sends all wheel events to the window with the keyboard
|
||||
// focus, we have to redirect them here according to the mouse pos..
|
||||
|
|
@ -1796,7 +1797,7 @@ private:
|
|||
if (peer == nullptr)
|
||||
peer = this;
|
||||
|
||||
localPos = peer->globalToLocal (globalPos);
|
||||
localPos = peer->globalToLocal (globalPos.toFloat());
|
||||
return peer;
|
||||
}
|
||||
|
||||
|
|
@ -1811,7 +1812,7 @@ private:
|
|||
wheel.isReversed = false;
|
||||
wheel.isSmooth = false;
|
||||
|
||||
Point<int> localPos;
|
||||
Point<float> localPos;
|
||||
if (ComponentPeer* const peer = findPeerUnderMouse (localPos))
|
||||
peer->handleMouseWheel (0, localPos, getMouseEventTime(), wheel);
|
||||
}
|
||||
|
|
@ -1825,7 +1826,7 @@ private:
|
|||
if (getGestureInfo != nullptr && getGestureInfo ((HGESTUREINFO) lParam, &gi))
|
||||
{
|
||||
updateKeyModifiers();
|
||||
Point<int> localPos;
|
||||
Point<float> localPos;
|
||||
|
||||
if (ComponentPeer* const peer = findPeerUnderMouse (localPos))
|
||||
{
|
||||
|
|
@ -1883,8 +1884,8 @@ private:
|
|||
bool isCancel = false;
|
||||
const int touchIndex = currentTouches.getIndexOfTouch (touch.dwID);
|
||||
const int64 time = getMouseEventTime();
|
||||
const Point<int> pos (globalToLocal (Point<int> ((int) TOUCH_COORD_TO_PIXEL (touch.x),
|
||||
(int) TOUCH_COORD_TO_PIXEL (touch.y))));
|
||||
const Point<float> pos (globalToLocal (Point<float> (static_cast<float> (TOUCH_COORD_TO_PIXEL (touch.x)),
|
||||
static_cast<float> (TOUCH_COORD_TO_PIXEL (touch.y)))));
|
||||
ModifierKeys modsToSend (currentModifiers);
|
||||
|
||||
if (isDown)
|
||||
|
|
@ -1895,7 +1896,7 @@ private:
|
|||
if (! isPrimary)
|
||||
{
|
||||
// this forces a mouse-enter/up event, in case for some reason we didn't get a mouse-up before.
|
||||
handleMouseEvent (touchIndex, pos, modsToSend.withoutMouseButtons(), time);
|
||||
handleMouseEvent (touchIndex, pos.toFloat(), modsToSend.withoutMouseButtons(), time);
|
||||
if (! isValidPeer (this)) // (in case this component was deleted by the event)
|
||||
return false;
|
||||
}
|
||||
|
|
@ -1921,14 +1922,14 @@ private:
|
|||
|
||||
if (! isPrimary)
|
||||
{
|
||||
handleMouseEvent (touchIndex, pos, modsToSend, time);
|
||||
handleMouseEvent (touchIndex, pos.toFloat(), modsToSend, time);
|
||||
if (! isValidPeer (this)) // (in case this component was deleted by the event)
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((isUp || isCancel) && ! isPrimary)
|
||||
{
|
||||
handleMouseEvent (touchIndex, Point<int> (-10, -10), currentModifiers, time);
|
||||
handleMouseEvent (touchIndex, Point<float> (-10.0f, -10.0f), currentModifiers, time);
|
||||
if (! isValidPeer (this))
|
||||
return false;
|
||||
}
|
||||
|
|
@ -2326,17 +2327,18 @@ private:
|
|||
return MessageManager::getInstance()->callFunctionOnMessageThread (callback, userData);
|
||||
}
|
||||
|
||||
static Point<int> getPointFromLParam (LPARAM lParam) noexcept
|
||||
static Point<float> getPointFromLParam (LPARAM lParam) noexcept
|
||||
{
|
||||
return Point<int> (GET_X_LPARAM (lParam), GET_Y_LPARAM (lParam));
|
||||
return Point<float> (static_cast<float> (GET_X_LPARAM (lParam)),
|
||||
static_cast<float> (GET_Y_LPARAM (lParam)));
|
||||
}
|
||||
|
||||
static Point<int> getCurrentMousePosGlobal() noexcept
|
||||
static Point<float> getCurrentMousePosGlobal() noexcept
|
||||
{
|
||||
return getPointFromLParam (GetMessagePos());
|
||||
}
|
||||
|
||||
Point<int> getCurrentMousePos() noexcept
|
||||
Point<float> getCurrentMousePos() noexcept
|
||||
{
|
||||
return globalToLocal (getCurrentMousePosGlobal());
|
||||
}
|
||||
|
|
@ -2417,8 +2419,8 @@ private:
|
|||
|
||||
case WM_WINDOWPOSCHANGED:
|
||||
{
|
||||
const Point<int> pos (getCurrentMousePos());
|
||||
if (contains (pos, false))
|
||||
const Point<float> pos (getCurrentMousePos());
|
||||
if (contains (pos.roundToInt(), false))
|
||||
doMouseEvent (pos);
|
||||
}
|
||||
|
||||
|
|
@ -3131,16 +3133,17 @@ bool MouseInputSource::SourceList::addSource()
|
|||
return false;
|
||||
}
|
||||
|
||||
Point<int> MouseInputSource::getCurrentRawMousePosition()
|
||||
Point<float> MouseInputSource::getCurrentRawMousePosition()
|
||||
{
|
||||
POINT mousePos;
|
||||
GetCursorPos (&mousePos);
|
||||
return Point<int> (mousePos.x, mousePos.y);
|
||||
return Point<float> ((float) mousePos.x, (float) mousePos.y);
|
||||
}
|
||||
|
||||
void MouseInputSource::setRawMousePosition (Point<int> newPosition)
|
||||
void MouseInputSource::setRawMousePosition (Point<float> newPosition)
|
||||
{
|
||||
SetCursorPos (newPosition.x, newPosition.y);
|
||||
SetCursorPos (roundToInt (newPosition.x),
|
||||
roundToInt (newPosition.y));
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -745,12 +745,12 @@ public:
|
|||
|| ((style == LinearHorizontal || style == LinearVertical || style == LinearBar || style == LinearBarVertical)
|
||||
&& ! snapsToMousePos))
|
||||
{
|
||||
const int mouseDiff = (style == RotaryHorizontalDrag
|
||||
|| style == LinearHorizontal
|
||||
|| style == LinearBar
|
||||
|| (style == IncDecButtons && incDecDragDirectionIsHorizontal()))
|
||||
? e.x - mouseDragStartPos.x
|
||||
: mouseDragStartPos.y - e.y;
|
||||
const float mouseDiff = (style == RotaryHorizontalDrag
|
||||
|| style == LinearHorizontal
|
||||
|| style == LinearBar
|
||||
|| (style == IncDecButtons && incDecDragDirectionIsHorizontal()))
|
||||
? e.position.x - mouseDragStartPos.x
|
||||
: mouseDragStartPos.y - e.position.y;
|
||||
|
||||
newPos = owner.valueToProportionOfLength (valueOnMouseDown)
|
||||
+ mouseDiff * (1.0 / pixelsForFullDragExtent);
|
||||
|
|
@ -763,7 +763,8 @@ public:
|
|||
}
|
||||
else if (style == RotaryHorizontalVerticalDrag)
|
||||
{
|
||||
const int mouseDiff = (e.x - mouseDragStartPos.x) + (mouseDragStartPos.y - e.y);
|
||||
const float mouseDiff = (e.position.x - mouseDragStartPos.x)
|
||||
+ (mouseDragStartPos.y - e.position.y);
|
||||
|
||||
newPos = owner.valueToProportionOfLength (valueOnMouseDown)
|
||||
+ mouseDiff * (1.0 / pixelsForFullDragExtent);
|
||||
|
|
@ -779,13 +780,13 @@ public:
|
|||
|
||||
void handleVelocityDrag (const MouseEvent& e)
|
||||
{
|
||||
const int mouseDiff = style == RotaryHorizontalVerticalDrag
|
||||
? (e.x - mousePosWhenLastDragged.x) + (mousePosWhenLastDragged.y - e.y)
|
||||
: (isHorizontal()
|
||||
|| style == RotaryHorizontalDrag
|
||||
|| (style == IncDecButtons && incDecDragDirectionIsHorizontal()))
|
||||
? e.x - mousePosWhenLastDragged.x
|
||||
: e.y - mousePosWhenLastDragged.y;
|
||||
const float mouseDiff = style == RotaryHorizontalVerticalDrag
|
||||
? (e.x - mousePosWhenLastDragged.x) + (mousePosWhenLastDragged.y - e.y)
|
||||
: (isHorizontal()
|
||||
|| style == RotaryHorizontalDrag
|
||||
|| (style == IncDecButtons && incDecDragDirectionIsHorizontal()))
|
||||
? e.position.x - mousePosWhenLastDragged.x
|
||||
: e.position.y - mousePosWhenLastDragged.y;
|
||||
|
||||
const double maxSpeed = jmax (200, sliderRegionSize);
|
||||
double speed = jlimit (0.0, maxSpeed, (double) abs (mouseDiff));
|
||||
|
|
@ -816,7 +817,7 @@ public:
|
|||
{
|
||||
incDecDragged = false;
|
||||
useDragEvents = false;
|
||||
mouseDragStartPos = mousePosWhenLastDragged = e.getPosition();
|
||||
mouseDragStartPos = mousePosWhenLastDragged = e.position;
|
||||
currentDrag = nullptr;
|
||||
|
||||
if (owner.isEnabled())
|
||||
|
|
@ -887,7 +888,7 @@ public:
|
|||
return;
|
||||
|
||||
incDecDragged = true;
|
||||
mouseDragStartPos = e.getPosition();
|
||||
mouseDragStartPos = e.position;
|
||||
}
|
||||
|
||||
if (isAbsoluteDragMode (e.mods) || (maximum - minimum) / sliderRegionSize < interval)
|
||||
|
|
@ -930,7 +931,7 @@ public:
|
|||
minMaxDiff = (double) valueMax.getValue() - (double) valueMin.getValue();
|
||||
}
|
||||
|
||||
mousePosWhenLastDragged = e.getPosition();
|
||||
mousePosWhenLastDragged = e.position;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1036,29 +1037,29 @@ public:
|
|||
const double pos = sliderBeingDragged == 2 ? getMaxValue()
|
||||
: (sliderBeingDragged == 1 ? getMinValue()
|
||||
: (double) currentValue.getValue());
|
||||
Point<int> mousePos;
|
||||
Point<float> mousePos;
|
||||
|
||||
if (isRotary())
|
||||
{
|
||||
mousePos = mi->getLastMouseDownPosition();
|
||||
|
||||
const int delta = roundToInt (pixelsForFullDragExtent * (owner.valueToProportionOfLength (valueOnMouseDown)
|
||||
- owner.valueToProportionOfLength (pos)));
|
||||
const float delta = (float) (pixelsForFullDragExtent * (owner.valueToProportionOfLength (valueOnMouseDown)
|
||||
- owner.valueToProportionOfLength (pos)));
|
||||
|
||||
if (style == RotaryHorizontalDrag) mousePos += Point<int> (-delta, 0);
|
||||
else if (style == RotaryVerticalDrag) mousePos += Point<int> (0, delta);
|
||||
else mousePos += Point<int> (delta / -2, delta / 2);
|
||||
if (style == RotaryHorizontalDrag) mousePos += Point<float> (-delta, 0.0f);
|
||||
else if (style == RotaryVerticalDrag) mousePos += Point<float> (0.0f, delta);
|
||||
else mousePos += Point<float> (delta / -2.0f, delta / 2.0f);
|
||||
|
||||
mousePos = owner.getScreenBounds().reduced (4).getConstrainedPoint (mousePos);
|
||||
mousePos = owner.getScreenBounds().reduced (4).toFloat().getConstrainedPoint (mousePos);
|
||||
mouseDragStartPos = mousePosWhenLastDragged = owner.getLocalPoint (nullptr, mousePos);
|
||||
valueOnMouseDown = valueWhenLastDragged;
|
||||
}
|
||||
else
|
||||
{
|
||||
const int pixelPos = (int) getLinearSliderPos (pos);
|
||||
const float pixelPos = (float) getLinearSliderPos (pos);
|
||||
|
||||
mousePos = owner.localPointToGlobal (Point<int> (isHorizontal() ? pixelPos : (owner.getWidth() / 2),
|
||||
isVertical() ? pixelPos : (owner.getHeight() / 2)));
|
||||
mousePos = owner.localPointToGlobal (Point<float> (isHorizontal() ? pixelPos : (owner.getWidth() / 2.0f),
|
||||
isVertical() ? pixelPos : (owner.getHeight() / 2.0f)));
|
||||
}
|
||||
|
||||
mi->setScreenPosition (mousePos);
|
||||
|
|
@ -1231,7 +1232,7 @@ public:
|
|||
double velocityModeSensitivity, velocityModeOffset, minMaxDiff;
|
||||
int velocityModeThreshold;
|
||||
float rotaryStart, rotaryEnd;
|
||||
Point<int> mouseDragStartPos, mousePosWhenLastDragged;
|
||||
Point<float> mouseDragStartPos, mousePosWhenLastDragged;
|
||||
int sliderRegionStart, sliderRegionSize;
|
||||
int sliderBeingDragged;
|
||||
int pixelsForFullDragExtent;
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ public:
|
|||
selectBasedOnModifiers (item, e.mods);
|
||||
|
||||
if (e.x >= pos.getX())
|
||||
item->itemClicked (e.withNewPosition (e.getPosition() - pos.getPosition()));
|
||||
item->itemClicked (e.withNewPosition (e.position - pos.getPosition().toFloat()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -92,7 +92,7 @@ public:
|
|||
Rectangle<int> pos;
|
||||
if (TreeViewItem* const item = findItemAt (e.y, pos))
|
||||
if (e.x >= pos.getX() || ! owner.openCloseButtonsVisible)
|
||||
item->itemDoubleClicked (e.withNewPosition (e.getPosition() - pos.getPosition()));
|
||||
item->itemDoubleClicked (e.withNewPosition (e.position - pos.getPosition().toFloat()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -85,25 +85,22 @@ bool ComponentPeer::isKioskMode() const
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
void ComponentPeer::handleMouseEvent (const int touchIndex, const Point<int> positionWithinPeer,
|
||||
const ModifierKeys newMods, const int64 time)
|
||||
void ComponentPeer::handleMouseEvent (int touchIndex, Point<float> pos, ModifierKeys newMods, int64 time)
|
||||
{
|
||||
if (MouseInputSource* mouse = Desktop::getInstance().mouseSources->getOrCreateMouseInputSource (touchIndex))
|
||||
MouseInputSource (*mouse).handleEvent (*this, positionWithinPeer, time, newMods);
|
||||
MouseInputSource (*mouse).handleEvent (*this, pos, time, newMods);
|
||||
}
|
||||
|
||||
void ComponentPeer::handleMouseWheel (const int touchIndex, const Point<int> positionWithinPeer,
|
||||
const int64 time, const MouseWheelDetails& wheel)
|
||||
void ComponentPeer::handleMouseWheel (int touchIndex, Point<float> pos, int64 time, const MouseWheelDetails& wheel)
|
||||
{
|
||||
if (MouseInputSource* mouse = Desktop::getInstance().mouseSources->getOrCreateMouseInputSource (touchIndex))
|
||||
MouseInputSource (*mouse).handleWheel (*this, positionWithinPeer, time, wheel);
|
||||
MouseInputSource (*mouse).handleWheel (*this, pos, time, wheel);
|
||||
}
|
||||
|
||||
void ComponentPeer::handleMagnifyGesture (const int touchIndex, const Point<int> positionWithinPeer,
|
||||
const int64 time, const float scaleFactor)
|
||||
void ComponentPeer::handleMagnifyGesture (int touchIndex, Point<float> pos, int64 time, float scaleFactor)
|
||||
{
|
||||
if (MouseInputSource* mouse = Desktop::getInstance().mouseSources->getOrCreateMouseInputSource (touchIndex))
|
||||
MouseInputSource (*mouse).handleMagnifyGesture (*this, positionWithinPeer, time, scaleFactor);
|
||||
MouseInputSource (*mouse).handleMagnifyGesture (*this, pos, time, scaleFactor);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -402,6 +399,9 @@ const Rectangle<int>& ComponentPeer::getNonFullScreenBounds() const noexcept
|
|||
return lastNonFullscreenBounds;
|
||||
}
|
||||
|
||||
Point<int> ComponentPeer::localToGlobal (Point<int> p) { return localToGlobal (p.toFloat()).roundToInt(); }
|
||||
Point<int> ComponentPeer::globalToLocal (Point<int> p) { return globalToLocal (p.toFloat()).roundToInt(); }
|
||||
|
||||
Rectangle<int> ComponentPeer::localToGlobal (const Rectangle<int>& relativePosition)
|
||||
{
|
||||
return relativePosition.withPosition (localToGlobal (relativePosition.getPosition()));
|
||||
|
|
|
|||
|
|
@ -148,14 +148,20 @@ public:
|
|||
virtual Rectangle<int> getBounds() const = 0;
|
||||
|
||||
/** Converts a position relative to the top-left of this component to screen coordinates. */
|
||||
virtual Point<int> localToGlobal (Point<int> relativePosition) = 0;
|
||||
virtual Point<float> localToGlobal (Point<float> relativePosition) = 0;
|
||||
|
||||
/** Converts a screen coordinate to a position relative to the top-left of this component. */
|
||||
virtual Point<float> globalToLocal (Point<float> screenPosition) = 0;
|
||||
|
||||
/** Converts a position relative to the top-left of this component to screen coordinates. */
|
||||
Point<int> localToGlobal (Point<int> relativePosition);
|
||||
|
||||
/** Converts a screen coordinate to a position relative to the top-left of this component. */
|
||||
Point<int> globalToLocal (Point<int> screenPosition);
|
||||
|
||||
/** Converts a rectangle relative to the top-left of this component to screen coordinates. */
|
||||
virtual Rectangle<int> localToGlobal (const Rectangle<int>& relativePosition);
|
||||
|
||||
/** Converts a screen coordinate to a position relative to the top-left of this component. */
|
||||
virtual Point<int> globalToLocal (Point<int> screenPosition) = 0;
|
||||
|
||||
/** Converts a screen area to a position relative to the top-left of this component. */
|
||||
virtual Rectangle<int> globalToLocal (const Rectangle<int>& screenPosition);
|
||||
|
||||
|
|
@ -300,9 +306,9 @@ public:
|
|||
virtual void setAlpha (float newAlpha) = 0;
|
||||
|
||||
//==============================================================================
|
||||
void handleMouseEvent (int touchIndex, const Point<int> positionWithinPeer, const ModifierKeys newMods, int64 time);
|
||||
void handleMouseWheel (int touchIndex, const Point<int> positionWithinPeer, int64 time, const MouseWheelDetails&);
|
||||
void handleMagnifyGesture (int touchIndex, const Point<int> positionWithinPeer, int64 time, float scaleFactor);
|
||||
void handleMouseEvent (int touchIndex, Point<float> positionWithinPeer, ModifierKeys newMods, int64 time);
|
||||
void handleMouseWheel (int touchIndex, Point<float> positionWithinPeer, int64 time, const MouseWheelDetails&);
|
||||
void handleMagnifyGesture (int touchIndex, Point<float> positionWithinPeer, int64 time, float scaleFactor);
|
||||
|
||||
void handleUserClosingWindow();
|
||||
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ void TooltipWindow::timerCallback()
|
|||
mouseClicks = clickCount;
|
||||
mouseWheelMoves = wheelCount;
|
||||
|
||||
const Point<int> mousePos (mouseSource.getScreenPosition());
|
||||
const Point<float> mousePos (mouseSource.getScreenPosition());
|
||||
const bool mouseMovedQuickly = mousePos.getDistanceFrom (lastMousePos) > 12;
|
||||
lastMousePos = mousePos;
|
||||
|
||||
|
|
@ -159,7 +159,7 @@ void TooltipWindow::timerCallback()
|
|||
}
|
||||
else if (tipChanged)
|
||||
{
|
||||
displayTip (mousePos, newTip);
|
||||
displayTip (mousePos.roundToInt(), newTip);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -170,7 +170,7 @@ void TooltipWindow::timerCallback()
|
|||
&& newTip != tipShowing
|
||||
&& now > lastCompChangeTime + (unsigned int) millisecondsBeforeTipAppears)
|
||||
{
|
||||
displayTip (mousePos, newTip);
|
||||
displayTip (mousePos.roundToInt(), newTip);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ public:
|
|||
private:
|
||||
//==============================================================================
|
||||
int millisecondsBeforeTipAppears;
|
||||
Point<int> lastMousePos;
|
||||
Point<float> lastMousePos;
|
||||
int mouseClicks, mouseWheelMoves;
|
||||
unsigned int lastCompChangeTime, lastHideTime;
|
||||
Component* lastComponentUnderMouse;
|
||||
|
|
|
|||
|
|
@ -99,21 +99,21 @@ public:
|
|||
|
||||
if (isLeft || isRight) // Only mouse up is sent by the OS, so simulate a down/up
|
||||
{
|
||||
owner.mouseDown (MouseEvent (mouseSource, Point<int>(),
|
||||
owner.mouseDown (MouseEvent (mouseSource, Point<float>(),
|
||||
eventMods.withFlags (isLeft ? ModifierKeys::leftButtonModifier
|
||||
: ModifierKeys::rightButtonModifier),
|
||||
&owner, &owner, now,
|
||||
Point<int>(), now, 1, false));
|
||||
Point<float>(), now, 1, false));
|
||||
|
||||
owner.mouseUp (MouseEvent (mouseSource, Point<int>(), eventMods.withoutMouseButtons(),
|
||||
owner.mouseUp (MouseEvent (mouseSource, Point<float>(), eventMods.withoutMouseButtons(),
|
||||
&owner, &owner, now,
|
||||
Point<int>(), now, 1, false));
|
||||
Point<float>(), now, 1, false));
|
||||
}
|
||||
else if (type == NSMouseMoved)
|
||||
{
|
||||
owner.mouseMove (MouseEvent (mouseSource, Point<int>(), eventMods,
|
||||
owner.mouseMove (MouseEvent (mouseSource, Point<float>(), eventMods,
|
||||
&owner, &owner, now,
|
||||
Point<int>(), now, 1, false));
|
||||
Point<float>(), now, 1, false));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ namespace ActiveXHelpers
|
|||
case WM_MBUTTONUP:
|
||||
case WM_RBUTTONUP:
|
||||
peer->handleMouseEvent (0, Point<int> (GET_X_LPARAM (lParam) + activeXRect.left - peerRect.left,
|
||||
GET_Y_LPARAM (lParam) + activeXRect.top - peerRect.top),
|
||||
GET_Y_LPARAM (lParam) + activeXRect.top - peerRect.top).toFloat(),
|
||||
ModifierKeys::getCurrentModifiersRealtime(),
|
||||
getMouseEventTime());
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -111,8 +111,8 @@ public:
|
|||
const Time eventTime (getMouseEventTime());
|
||||
|
||||
const MouseEvent e (Desktop::getInstance().getMainMouseSource(),
|
||||
Point<int>(), eventMods, &owner, &owner, eventTime,
|
||||
Point<int>(), eventTime, 1, false);
|
||||
Point<float>(), eventMods, &owner, &owner, eventTime,
|
||||
Point<float>(), eventTime, 1, false);
|
||||
|
||||
if (lParam == WM_LBUTTONDOWN || lParam == WM_RBUTTONDOWN)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue