26 #define Z_SENSITIVITY 100
36 static struct mouseinfo {
37 struct mousebutton buttons[MOUSE_MAX_BUTTONS];
38 int delta_x, delta_y, delta_z;
42 void d_mouse_init(void)
44 memset(&Mouse,0,sizeof(Mouse));
47 void mouse_button_handler(SDL_MouseButtonEvent *mbe)
49 // to bad, SDL buttons use a different mapping as descent expects,
50 // this is at least true and tested for the first three buttons
51 int button_remap[11] = {
65 int button = button_remap[mbe->button - 1]; // -1 since SDL seems to start counting at 1
67 vkey_handler(KEY_MB1 + button, mbe->state == SDL_PRESSED);
69 if (mbe->state == SDL_PRESSED) {
70 Mouse.buttons[button].pressed = 1;
71 Mouse.buttons[button].time_went_down = timer_get_fixed_seconds();
72 Mouse.buttons[button].num_downs++;
74 if (button == MB_Z_UP) {
75 Mouse.delta_z += Z_SENSITIVITY;
76 Mouse.z += Z_SENSITIVITY;
77 } else if (button == MB_Z_DOWN) {
78 Mouse.delta_z -= Z_SENSITIVITY;
79 Mouse.z -= Z_SENSITIVITY;
82 Mouse.buttons[button].pressed = 0;
83 Mouse.buttons[button].time_held_down += timer_get_fixed_seconds() - Mouse.buttons[button].time_went_down;
84 Mouse.buttons[button].num_ups++;
88 void mouse_motion_handler(SDL_MouseMotionEvent *mme)
91 Mouse.delta_y += mme->xrel;
92 Mouse.delta_x += mme->yrel;
96 Mouse.delta_x += mme->xrel;
97 Mouse.delta_y += mme->yrel;
103 void mouse_flush() // clears all mice events...
110 current_time = timer_get_fixed_seconds();
111 for (i=0; i<MOUSE_MAX_BUTTONS; i++) {
112 Mouse.buttons[i].pressed=0;
113 Mouse.buttons[i].time_went_down=current_time;
114 Mouse.buttons[i].time_held_down=0;
115 Mouse.buttons[i].num_ups=0;
116 Mouse.buttons[i].num_downs=0;
124 SDL_GetMouseState(&Mouse.x, &Mouse.y); // necessary because polling only gives us the delta.
127 //========================================================================
128 void mouse_get_pos( int *x, int *y )
131 #ifdef _WIN32_WCE // needed here only for touchpens?
133 SDL_GetMouseState(&Mouse.y, &Mouse.x);
135 SDL_GetMouseState(&Mouse.x, &Mouse.y);
142 void mouse_get_delta( int *dx, int *dy )
151 void mouse_get_pos_z( int *x, int *y, int *z )
159 void mouse_get_delta_z( int *dx, int *dy, int *dz )
178 for (i=0; i<MOUSE_MAX_BUTTONS; i++ ) {
179 if (Mouse.buttons[i].pressed)
187 void mouse_get_cyberman_pos( int *x, int *y )
191 // Returns how long this button has been down since last call.
192 fix mouse_button_down_time(int button)
198 if (!Mouse.buttons[button].pressed) {
199 time_down = Mouse.buttons[button].time_held_down;
200 Mouse.buttons[button].time_held_down = 0;
202 time = timer_get_fixed_seconds();
203 time_down = time - Mouse.buttons[button].time_held_down;
204 Mouse.buttons[button].time_held_down = time;
209 // Returns how many times this button has went down since last call
210 int mouse_button_down_count(int button)
216 count = Mouse.buttons[button].num_downs;
217 Mouse.buttons[button].num_downs = 0;
222 // Returns 1 if this button is currently down
223 int mouse_button_state(int button)
226 return Mouse.buttons[button].pressed;