26 #define Z_SENSITIVITY 100
28 static struct mouseinfo {
29 int delta_x, delta_y, delta_z;
34 cvar_t mouse_axes[3] = {
35 { "mouse_axisx", "4", CVAR_ARCHIVE },
36 { "mouse_axisy", "2", CVAR_ARCHIVE },
37 { "mouse_axisz", "0", CVAR_ARCHIVE },
40 cvar_t mouse_invert[] = {
41 { "mouse_invertx", "0", CVAR_ARCHIVE },
42 { "mouse_inverty", "0", CVAR_ARCHIVE },
43 { "mouse_invertz", "0", CVAR_ARCHIVE },
47 void d_mouse_init(void)
51 memset(&Mouse,0,sizeof(Mouse));
53 for (i = 0; i < 3; i++) {
54 cvar_registervariable(&mouse_axes[i]);
55 cvar_registervariable(&mouse_invert[i]);
59 void mouse_button_handler(SDL_MouseButtonEvent *mbe)
61 // to bad, SDL buttons use a different mapping as descent expects,
62 // this is at least true and tested for the first three buttons
63 int button_remap[11] = {
77 int button = button_remap[mbe->button - 1]; // -1 since SDL seems to start counting at 1
79 vkey_handler(KEY_MB1 + button, mbe->state == SDL_PRESSED);
81 if (mbe->state == SDL_PRESSED) {
82 if (button == MBTN_Z_UP) {
83 Mouse.delta_z += Z_SENSITIVITY;
84 Mouse.z += Z_SENSITIVITY;
85 } else if (button == MBTN_Z_DOWN) {
86 Mouse.delta_z -= Z_SENSITIVITY;
87 Mouse.z -= Z_SENSITIVITY;
92 void mouse_motion_handler(SDL_MouseMotionEvent *mme)
95 Mouse.delta_y += mme->xrel;
96 Mouse.delta_x += mme->yrel;
100 Mouse.delta_x += mme->xrel;
101 Mouse.delta_y += mme->yrel;
102 Mouse.x += mme->xrel;
103 Mouse.y += mme->yrel;
107 void mouse_flush() // clears all mice events...
117 SDL_GetMouseState(&Mouse.x, &Mouse.y); // necessary because polling only gives us the delta.
120 //========================================================================
121 void mouse_get_pos( int *x, int *y )
124 #ifdef _WIN32_WCE // needed here only for touchpens?
126 SDL_GetMouseState(&Mouse.y, &Mouse.x);
128 SDL_GetMouseState(&Mouse.x, &Mouse.y);
135 void mouse_get_delta( int *dx, int *dy, int *dz )
154 for (i=0; i<MOUSE_MAX_BUTTONS; i++ ) {
155 if (keyd_pressed[KEY_MB1 + i])
164 // Returns 1 if this button is currently down
165 int mouse_button_state(int button)
168 return keyd_pressed[KEY_MB1 + button];
172 int mouse_set_mode(int i)
176 old = SDL_WM_GrabInput(SDL_GRAB_QUERY);
178 SDL_WM_GrabInput(SDL_GRAB_ON);
180 SDL_WM_GrabInput(SDL_GRAB_OFF);
182 return (old == SDL_GRAB_ON);