Improved handling for multiple mice, handles properly if 3+ mice installed, and hands off data correctly.
This commit is contained in:
@@ -451,7 +451,6 @@ int Mouse1MoveX = 0;
|
||||
int Mouse2MoveX = 0;
|
||||
int Mouse1MoveY = 0;
|
||||
int Mouse2MoveY = 0;
|
||||
int MousePoll = 0;
|
||||
|
||||
void MultiMouseShutdown()
|
||||
{
|
||||
@@ -467,23 +466,78 @@ void MultiMouseInit()
|
||||
if (MouseCount) multiMouseMode = 1;
|
||||
}
|
||||
|
||||
void MultiMouseProcess()
|
||||
bool Mouse1Waiting = false, Mouse2Waiting = false;
|
||||
ManyMouseEvent Mouse1Event,Mouse2Event;
|
||||
|
||||
|
||||
void MultiMouseProcess(unsigned int mouse)
|
||||
{
|
||||
ManyMouseEvent event;
|
||||
event.device = ~0;
|
||||
|
||||
Mouse1MoveX = Mouse1MoveY = Mouse2MoveX = Mouse2MoveY = 0;
|
||||
MousePoll ^= 1;
|
||||
if (MousePoll)
|
||||
if ((mouse == 1) && Mouse1Waiting)
|
||||
{
|
||||
ManyMouse_PollEvent(&event);
|
||||
Mouse1MoveX = Mouse1MoveY = 0;
|
||||
if (Mouse1Event.type == MANYMOUSE_EVENT_RELMOTION)
|
||||
{
|
||||
if (Mouse1Event.item == 0) { Mouse1MoveX = Mouse1Event.value; } else { Mouse1MoveY = Mouse1Event.value; }
|
||||
}
|
||||
Mouse1Waiting = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if ((mouse == 2) && Mouse2Waiting)
|
||||
{
|
||||
Mouse2MoveX = Mouse2MoveY = 0;
|
||||
if (Mouse2Event.type == MANYMOUSE_EVENT_RELMOTION)
|
||||
{
|
||||
if (Mouse2Event.item == 1) { Mouse2MoveX = Mouse2Event.value; } else { Mouse2MoveY = Mouse2Event.value; }
|
||||
}
|
||||
Mouse2Waiting = false;
|
||||
return;
|
||||
}
|
||||
|
||||
while ((event.device != 0) && (event.device != 1))
|
||||
{
|
||||
if (!ManyMouse_PollEvent(&event))
|
||||
{
|
||||
if (mouse == 1)
|
||||
{
|
||||
Mouse1MoveX = Mouse1MoveY = 0;
|
||||
}
|
||||
if (mouse == 2)
|
||||
{
|
||||
Mouse2MoveX = Mouse2MoveY = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if ((mouse == 1) && event.device == 1)
|
||||
{
|
||||
Mouse2Event = event;
|
||||
Mouse2Waiting = true;
|
||||
event.device = ~0;
|
||||
}
|
||||
if ((mouse == 2) && event.device == 0)
|
||||
{
|
||||
Mouse1Event = event;
|
||||
Mouse1Waiting = true;
|
||||
event.device = ~0;
|
||||
}
|
||||
}
|
||||
|
||||
if (event.type == MANYMOUSE_EVENT_RELMOTION)
|
||||
{
|
||||
if (event.device == 0)
|
||||
{
|
||||
Mouse1MoveX = Mouse1MoveY = 0;
|
||||
if (event.item == 0) { Mouse1MoveX = event.value; } else { Mouse1MoveY = event.value; }
|
||||
else
|
||||
return;
|
||||
}
|
||||
if (event.device == 1)
|
||||
{
|
||||
Mouse2MoveX = Mouse2MoveY = 0;
|
||||
if (event.item == 0) { Mouse2MoveX = event.value; } else { Mouse2MoveY = event.value; }
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,6 +158,7 @@ NEWSYM processmouse1
|
||||
cmp byte[MouseCount],1
|
||||
jle .nomultimouse
|
||||
pushad
|
||||
mov eax,1
|
||||
call MultiMouseProcess
|
||||
popad
|
||||
mov cx,[Mouse1MoveX]
|
||||
@@ -224,6 +225,7 @@ NEWSYM processmouse2
|
||||
cmp byte[MouseCount],1
|
||||
jle .nomultimouse
|
||||
pushad
|
||||
mov eax,2
|
||||
call MultiMouseProcess
|
||||
popad
|
||||
mov cx,[Mouse2MoveX]
|
||||
|
||||
Reference in New Issue
Block a user