2 * $Source: /cvs/cvsroot/d2x/input/sdl_mouse.c,v $
5 * $Date: 2001-01-29 14:03:57 $
9 * $Log: not supported by cvs2svn $
23 #define MOUSE_MAX_BUTTONS 8
33 static struct mouseinfo {
34 struct mousebutton buttons[MOUSE_MAX_BUTTONS];
35 //added on 10/17/98 by Hans de Goede for mouse functionality
40 //end this section addition - Hans
43 //added on 10/17/98 by Hans de Goede for mouse functionality
44 void d_mouse_init(void)
46 memset(&Mouse,0,sizeof(Mouse));
49 //added/changed on 10/17/98 by Hans de Goede for mouse functionality
50 //void mouse_handler(SDL_MouseButtonEvent *mbe)
51 void mouse_button_handler(SDL_MouseButtonEvent *mbe)
53 // to bad, SDL buttons use a different mapping as descent expects,
54 // this is atleast true and tested for the first three buttons
55 int button_remap[11] = {
68 int button = button_remap[mbe->button - 1]; // -1 since SDL seems to start counting at 1
70 if (mbe->state == SDL_PRESSED) {
71 // Mouse.buttons[mbe->button].pressed = 1;
72 // Mouse.buttons[mbe->button].time_went_down = timer_get_fixed_seconds();
73 // Mouse.buttons[mbe->button].num_downs++;
74 Mouse.buttons[button].pressed = 1;
75 Mouse.buttons[button].time_went_down = timer_get_fixed_seconds();
76 Mouse.buttons[button].num_downs++;
78 // Mouse.buttons[mbe->button].pressed = 0;
79 // Mouse.buttons[mbe->button].time_held_down += timer_get_fixed_seconds() - Mouse.buttons[mbe->button].time_went_down;
80 // Mouse.buttons[mbe->button].num_ups++;
81 Mouse.buttons[button].pressed = 0;
82 Mouse.buttons[button].time_held_down += timer_get_fixed_seconds() - Mouse.buttons[mbe->button].time_went_down;
83 Mouse.buttons[button].num_ups++;
84 //end this section addition/change - Hans
88 //added on 10/17/98 by Hans de Goede for mouse functionality
89 void mouse_motion_handler(SDL_MouseMotionEvent *mme)
91 Mouse.delta_x += mme->xrel;
92 Mouse.delta_y += mme->yrel;
95 if (Mouse.x > Mouse.max_x) Mouse.x = Mouse.max_x;
96 else if (Mouse.x < Mouse.min_x) Mouse.x = Mouse.min_x;
97 if (Mouse.y > Mouse.max_y) Mouse.y = Mouse.max_y;
98 else if (Mouse.y < Mouse.min_y) Mouse.y = Mouse.min_y;
100 //end this section addition - Hans
103 mouse_set_limits( int x1, int y1, int x2, int y2 )
105 //added on 10/17/98 by Hans de Goede for mouse functionality
106 //-killed- // Shrug...
107 //-killed- event_poll();
112 //end this section addition - Hans
115 void mouse_flush() // clears all mice events...
122 current_time = timer_get_fixed_seconds();
123 for (i=0; i<MOUSE_MAX_BUTTONS; i++)
125 Mouse.buttons[i].pressed=0;
126 Mouse.buttons[i].time_went_down=current_time;
127 Mouse.buttons[i].time_held_down=0;
128 Mouse.buttons[i].num_ups=0;
129 Mouse.buttons[i].num_downs=0;
131 //added on 10/17/98 by Hans de Goede for mouse functionality
136 //end this section addition - Hans
139 //========================================================================
140 void mouse_get_pos( int *x, int *y)
142 //added/changed on 10/17/98 by Hans de Goede for mouse functionality
143 //-killed- Uint16 lx,ly;
145 //-killed- SDL_GetMouseState(&lx,&ly);
146 //-killed- *x=(int)lx;
147 //-killed- *y=(int)ly;
150 //end this section change - Hans
153 void mouse_get_delta( int *dx, int *dy )
155 //added/changed on 10/17/98 by Hans de Goede for mouse functionality
156 //-killed- static int lastx, lasty;
160 //-killed- mouse_get_pos(&x,&y);
161 //-killed- *dx = x - lastx;
162 //-killed- *dy = y - lasty;
163 //-killed- lastx = x;
164 //-killed- lasty = y;
169 //end this section change - Hans
180 for (i=0; i<MOUSE_MAX_BUTTONS; i++ )
182 if (Mouse.buttons[i].pressed)
189 void mouse_set_pos( int x, int y)
192 //added/changed on 10/17/98 by Hans de Goede for mouse functionality
193 //-killed- SDL_WarpMouse(x,y);
196 if (Mouse.x > Mouse.max_x) Mouse.x = Mouse.max_x;
197 else if (Mouse.x < Mouse.min_x) Mouse.x = Mouse.min_x;
198 if (Mouse.y > Mouse.max_y) Mouse.y = Mouse.max_y;
199 else if (Mouse.y < Mouse.min_y) Mouse.y = Mouse.min_y;
200 //end this section change - Hans
203 void mouse_get_cyberman_pos( int *x, int *y )
209 // Returns how long this button has been down since last call.
210 fix mouse_button_down_time(int button)
216 if (!Mouse.buttons[button].pressed) {
217 time_down = Mouse.buttons[button].time_held_down;
218 Mouse.buttons[button].time_held_down = 0;
220 time = timer_get_fixed_seconds();
221 time_down = time - Mouse.buttons[button].time_held_down;
222 Mouse.buttons[button].time_held_down = time;
227 // Returns how many times this button has went down since last call
228 int mouse_button_down_count(int button)
234 count = Mouse.buttons[button].num_downs;
235 Mouse.buttons[button].num_downs = 0;
240 // Returns 1 if this button is currently down
241 int mouse_button_state(int button)
244 return Mouse.buttons[button].pressed;