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 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)
|
|
||||||
{
|
{
|
||||||
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.type == MANYMOUSE_EVENT_RELMOTION)
|
||||||
{
|
{
|
||||||
if (event.device == 0)
|
if (event.device == 0)
|
||||||
|
{
|
||||||
|
Mouse1MoveX = Mouse1MoveY = 0;
|
||||||
if (event.item == 0) { Mouse1MoveX = event.value; } else { Mouse1MoveY = event.value; }
|
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; }
|
if (event.item == 0) { Mouse2MoveX = event.value; } else { Mouse2MoveY = event.value; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
Reference in New Issue
Block a user