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 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; }
}
}
}

View File

@@ -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]