#5648 Fixed mouse drift by switching from int to float
This commit is contained in:
parent
0e7fef7ceb
commit
2bbfe450ae
|
@ -118,7 +118,7 @@ private:
|
||||||
void sendClipboardEvent(Event::Type type, ClipboardID id) const;
|
void sendClipboardEvent(Event::Type type, ClipboardID id) const;
|
||||||
|
|
||||||
// message handlers
|
// message handlers
|
||||||
bool onMouseMove(SInt32 mx, SInt32 my);
|
bool onMouseMove(CGFloat mx, CGFloat my);
|
||||||
// mouse button handler. pressed is true if this is a mousedown
|
// mouse button handler. pressed is true if this is a mousedown
|
||||||
// event, false if it is a mouseup event. macButton is the index
|
// event, false if it is a mouseup event. macButton is the index
|
||||||
// of the button pressed using the mac button mapping.
|
// of the button pressed using the mac button mapping.
|
||||||
|
|
|
@ -1080,20 +1080,20 @@ OSXScreen::handleSystemEvent(const Event& event, void*)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
OSXScreen::onMouseMove(SInt32 mx, SInt32 my)
|
OSXScreen::onMouseMove(CGFloat mx, CGFloat my)
|
||||||
{
|
{
|
||||||
LOG((CLOG_DEBUG2 "mouse move %+d,%+d", mx, my));
|
LOG((CLOG_DEBUG2 "mouse move %+f,%+f", mx, my));
|
||||||
|
|
||||||
SInt32 x = mx - m_xCursor;
|
CGFloat x = mx - m_xCursor;
|
||||||
SInt32 y = my - m_yCursor;
|
CGFloat y = my - m_yCursor;
|
||||||
|
|
||||||
if ((x == 0 && y == 0) || (mx == m_xCenter && mx == m_yCenter)) {
|
if ((x == 0 && y == 0) || (mx == m_xCenter && mx == m_yCenter)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// save position to compute delta of next motion
|
// save position to compute delta of next motion
|
||||||
m_xCursor = mx;
|
m_xCursor = (SInt32)mx;
|
||||||
m_yCursor = my;
|
m_yCursor = (SInt32)my;
|
||||||
|
|
||||||
if (m_isOnScreen) {
|
if (m_isOnScreen) {
|
||||||
// motion on primary screen
|
// motion on primary screen
|
||||||
|
@ -1122,7 +1122,21 @@ OSXScreen::onMouseMove(SInt32 mx, SInt32 my)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// send motion
|
// send motion
|
||||||
sendEvent(m_events->forIPrimaryScreen().motionOnSecondary(), MotionInfo::alloc(x, y));
|
// Accumulate together the move into the running total
|
||||||
|
static CGFloat m_xFractionalMove = 0;
|
||||||
|
static CGFloat m_yFractionalMove = 0;
|
||||||
|
|
||||||
|
m_xFractionalMove += x;
|
||||||
|
m_yFractionalMove += y;
|
||||||
|
|
||||||
|
// Return the integer part
|
||||||
|
SInt32 intX = (SInt32)m_xFractionalMove;
|
||||||
|
SInt32 intY = (SInt32)m_yFractionalMove;
|
||||||
|
|
||||||
|
// And keep only the fractional part
|
||||||
|
m_xFractionalMove -= intX;
|
||||||
|
m_yFractionalMove -= intY;
|
||||||
|
sendEvent(m_events->forIPrimaryScreen().motionOnSecondary(), MotionInfo::alloc(intX, intY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue