Initial commit.
This commit is contained in:
212
code/mac/mac_input.c
Normal file
212
code/mac/mac_input.c
Normal file
@@ -0,0 +1,212 @@
|
||||
|
||||
#include "../client/client.h"
|
||||
#include "mac_local.h"
|
||||
#include "InputSprocket.h"
|
||||
|
||||
qboolean inputActive;
|
||||
qboolean inputSuspended;
|
||||
|
||||
#define MAX_DEVICES 100
|
||||
ISpDeviceReference devices[MAX_DEVICES];
|
||||
ISpElementListReference elementList;
|
||||
|
||||
#define MAX_ELEMENTS 512
|
||||
#define MAX_MOUSE_DEVICES 2
|
||||
UInt32 numDevices;
|
||||
UInt32 numElements[MAX_MOUSE_DEVICES];
|
||||
ISpElementReference elements[MAX_MOUSE_DEVICES][MAX_ELEMENTS];
|
||||
|
||||
cvar_t *in_nomouse;
|
||||
|
||||
void Input_Init(void);
|
||||
void Input_GetState( void );
|
||||
|
||||
/*
|
||||
=================
|
||||
Sys_InitInput
|
||||
=================
|
||||
*/
|
||||
void Sys_InitInput( void ) {
|
||||
NumVersion ver;
|
||||
ISpElementInfo info;
|
||||
int i, j;
|
||||
OSStatus err;
|
||||
|
||||
// no input with dedicated servers
|
||||
if ( com_dedicated->integer ) {
|
||||
return;
|
||||
}
|
||||
|
||||
Com_Printf( "------- Input Initialization -------\n" );
|
||||
in_nomouse = Cvar_Get( "in_nomouse", "0", 0 );
|
||||
if ( in_nomouse->integer != 0 ) {
|
||||
Com_Printf( "in_nomouse is set, skipping.\n" );
|
||||
Com_Printf( "------------------------------------\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
ver = ISpGetVersion();
|
||||
Com_Printf( "InputSprocket version: 0x%x\n", ver );
|
||||
|
||||
err = ISpStartup();
|
||||
if ( err ) {
|
||||
Com_Printf( "ISpStartup failed: %i\n", err );
|
||||
Com_Printf( "------------------------------------\n" );
|
||||
return;
|
||||
}
|
||||
|
||||
// disable everything
|
||||
ISpDevices_Extract( MAX_DEVICES, &numDevices, devices );
|
||||
Com_Printf("%i total devices\n", numDevices);
|
||||
if (numDevices > MAX_DEVICES) {
|
||||
numDevices = MAX_DEVICES;
|
||||
}
|
||||
err = ISpDevices_Deactivate(
|
||||
numDevices,
|
||||
devices);
|
||||
|
||||
// enable mouse
|
||||
err = ISpDevices_ExtractByClass(
|
||||
kISpDeviceClass_Mouse,
|
||||
MAX_DEVICES,
|
||||
&numDevices,
|
||||
devices);
|
||||
Com_Printf("%i mouse devices\n", numDevices);
|
||||
if (numDevices > MAX_MOUSE_DEVICES) {
|
||||
numDevices = MAX_MOUSE_DEVICES;
|
||||
}
|
||||
|
||||
err = ISpDevices_Activate( numDevices, devices);
|
||||
for ( i = 0 ; i < numDevices ; i++ ) {
|
||||
ISpDevice_GetElementList( devices[i], &elementList );
|
||||
|
||||
// ISpGetGlobalElementList( &elementList );
|
||||
|
||||
// go through all the elements and asign them Quake key codes
|
||||
ISpElementList_Extract( elementList, MAX_ELEMENTS, &numElements[i], elements[i] );
|
||||
Com_Printf("%i elements in list\n", numElements[i] );
|
||||
|
||||
for ( j = 0 ; j < numElements[i] ; j++ ) {
|
||||
ISpElement_GetInfo( elements[i][j], &info );
|
||||
PStringToCString( (char *)info.theString );
|
||||
Com_Printf( "%i : %s\n", i, info.theString );
|
||||
}
|
||||
}
|
||||
|
||||
inputActive = true;
|
||||
|
||||
HideCursor();
|
||||
|
||||
Com_Printf( "------------------------------------\n" );
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
Sys_ShutdownInput
|
||||
=================
|
||||
*/
|
||||
void Sys_ShutdownInput( void ) {
|
||||
if ( !inputActive ) {
|
||||
return;
|
||||
}
|
||||
ShowCursor();
|
||||
ISpShutdown();
|
||||
inputActive = qfalse;
|
||||
}
|
||||
|
||||
void Sys_SuspendInput( void ) {
|
||||
if ( inputSuspended ) {
|
||||
return;
|
||||
}
|
||||
inputSuspended = true;
|
||||
ShowCursor();
|
||||
ISpSuspend();
|
||||
}
|
||||
|
||||
void Sys_ResumeInput( void ) {
|
||||
if ( !inputSuspended ) {
|
||||
return;
|
||||
}
|
||||
inputSuspended = false;
|
||||
HideCursor();
|
||||
ISpResume();
|
||||
}
|
||||
|
||||
/*
|
||||
=================
|
||||
Sys_Input
|
||||
=================
|
||||
*/
|
||||
void Sys_Input( void ) {
|
||||
ISpElementEvent event;
|
||||
Boolean wasEvent;
|
||||
UInt32 state, state2;
|
||||
int xmove, ymove;
|
||||
int button;
|
||||
static int xtotal, ytotal;
|
||||
int device;
|
||||
|
||||
if ( !inputActive ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// during debugging it is sometimes usefull to be able to kill mouse support
|
||||
if ( in_nomouse->integer ) {
|
||||
Com_Printf( "Shutting down input.\n");
|
||||
Sys_ShutdownInput();
|
||||
return;
|
||||
}
|
||||
|
||||
// always suspend for dedicated
|
||||
if ( com_dedicated->integer ) {
|
||||
Sys_SuspendInput();
|
||||
return;
|
||||
}
|
||||
|
||||
// temporarily deactivate if not in the game and
|
||||
if ( cls.keyCatchers || cls.state != CA_ACTIVE ) {
|
||||
if ( !glConfig.isFullscreen ) {
|
||||
Sys_SuspendInput();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Sys_ResumeInput();
|
||||
|
||||
// send all button events
|
||||
for ( device = 0 ; device < numDevices ; device++ ) {
|
||||
// mouse buttons
|
||||
|
||||
for ( button = 2 ; button < numElements[device] ; button++ ) {
|
||||
while ( 1 ) {
|
||||
ISpElement_GetNextEvent( elements[device][button], sizeof( event ), &event, &wasEvent );
|
||||
if ( !wasEvent ) {
|
||||
break;
|
||||
}
|
||||
if ( event.data ) {
|
||||
Sys_QueEvent( 0, SE_KEY, K_MOUSE1 + button - 2, 1, 0, NULL );
|
||||
} else {
|
||||
Sys_QueEvent( 0, SE_KEY, K_MOUSE1 + button - 2, 0, 0, NULL );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// mouse movement
|
||||
|
||||
#define MAC_MOUSE_SCALE 163 // why this constant?
|
||||
// send mouse event
|
||||
ISpElement_GetSimpleState( elements[device][0], &state );
|
||||
xmove = (int)state / MAC_MOUSE_SCALE;
|
||||
|
||||
ISpElement_GetSimpleState( elements[device][1], &state2 );
|
||||
ymove = (int)state2 / -MAC_MOUSE_SCALE;
|
||||
|
||||
if ( xmove || ymove ) {
|
||||
xtotal += xmove;
|
||||
ytotal += ymove;
|
||||
//Com_Printf("%i %i = %i %i\n", state, state2, xtotal, ytotal );
|
||||
Sys_QueEvent( 0, SE_MOUSE, xmove, ymove, 0, NULL );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user