Improved handling for multiple mice, handles properly if 3+ mice installed, and hands off data correctly.

This commit is contained in:
n-a-c-h
2006-03-24 01:51:27 +00:00
parent 560b4c58b0
commit 5d18705b94
2 changed files with 72 additions and 16 deletions

View File

@@ -451,7 +451,6 @@ int Mouse1MoveX = 0;
int Mouse2MoveX = 0; int Mouse2MoveX = 0;
int Mouse1MoveY = 0; int Mouse1MoveY = 0;
int Mouse2MoveY = 0; int Mouse2MoveY = 0;
int MousePoll = 0;
void MultiMouseShutdown() void MultiMouseShutdown()
{ {
@@ -467,23 +466,78 @@ void MultiMouseInit()
if (MouseCount) multiMouseMode = 1; if (MouseCount) multiMouseMode = 1;
} }
void MultiMouseProcess() bool Mouse1Waiting = false, Mouse2Waiting = false;
ManyMouseEvent Mouse1Event,Mouse2Event;
void MultiMouseProcess(unsigned int mouse)
{ {
ManyMouseEvent event; ManyMouseEvent event;
event.device = ~0;
Mouse1MoveX = Mouse1MoveY = Mouse2MoveX = Mouse2MoveY = 0; if ((mouse == 1) && Mouse1Waiting)
MousePoll ^= 1; {
if (MousePoll) Mouse1MoveX = Mouse1MoveY = 0;
{ if (Mouse1Event.type == MANYMOUSE_EVENT_RELMOTION)
ManyMouse_PollEvent(&event); {
if (Mouse1Event.item == 0) { Mouse1MoveX = Mouse1Event.value; } else { Mouse1MoveY = Mouse1Event.value; }
}
Mouse1Waiting = false;
return;
}
if (event.type == MANYMOUSE_EVENT_RELMOTION) if ((mouse == 2) && Mouse2Waiting)
{ {
if (event.device == 0) Mouse2MoveX = Mouse2MoveY = 0;
if (event.item == 0) { Mouse1MoveX = event.value; } else { Mouse1MoveY = event.value; } if (Mouse2Event.type == MANYMOUSE_EVENT_RELMOTION)
else {
if (event.item == 0) { Mouse2MoveX = event.value; } else { Mouse2MoveY = event.value; } 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; }
return;
}
if (event.device == 1)
{
Mouse2MoveX = Mouse2MoveY = 0;
if (event.item == 0) { Mouse2MoveX = event.value; } else { Mouse2MoveY = event.value; }
}
}
} }

View File

@@ -158,6 +158,7 @@ NEWSYM processmouse1
cmp byte[MouseCount],1 cmp byte[MouseCount],1
jle .nomultimouse jle .nomultimouse
pushad pushad
mov eax,1
call MultiMouseProcess call MultiMouseProcess
popad popad
mov cx,[Mouse1MoveX] mov cx,[Mouse1MoveX]
@@ -224,6 +225,7 @@ NEWSYM processmouse2
cmp byte[MouseCount],1 cmp byte[MouseCount],1
jle .nomultimouse jle .nomultimouse
pushad pushad
mov eax,2
call MultiMouseProcess call MultiMouseProcess
popad popad
mov cx,[Mouse2MoveX] mov cx,[Mouse2MoveX]