2 * $Source: /cvs/cvsroot/d2x/arch/sdl/mouse.c,v $
5 * $Date: 2001-10-24 09:25:05 $
9 * $Log: not supported by cvs2svn $
10 * Revision 1.3 2001/01/29 14:03:57 bradleyb
11 * Fixed build, minor fixes
26 #define MOUSE_MAX_BUTTONS 8
36 static struct mouseinfo {
37 struct mousebutton buttons[MOUSE_MAX_BUTTONS];
38 //added on 10/17/98 by Hans de Goede for mouse functionality
43 //end this section addition - Hans
46 //added on 10/17/98 by Hans de Goede for mouse functionality
47 void d_mouse_init(void)
49 memset(&Mouse,0,sizeof(Mouse));
52 //added/changed on 10/17/98 by Hans de Goede for mouse functionality
53 //void mouse_handler(SDL_MouseButtonEvent *mbe)
54 void mouse_button_handler(SDL_MouseButtonEvent *mbe)
56 // to bad, SDL buttons use a different mapping as descent expects,
57 // this is atleast true and tested for the first three buttons
58 int button_remap[11] = {
71 int button = button_remap[mbe->button - 1]; // -1 since SDL seems to start counting at 1
73 if (mbe->state == SDL_PRESSED) {
74 // Mouse.buttons[mbe->button].pressed = 1;
75 // Mouse.buttons[mbe->button].time_went_down = timer_get_fixed_seconds();
76 // Mouse.buttons[mbe->button].num_downs++;
77 Mouse.buttons[button].pressed = 1;
78 Mouse.buttons[button].time_went_down = timer_get_fixed_seconds();
79 Mouse.buttons[button].num_downs++;
81 // Mouse.buttons[mbe->button].pressed = 0;
82 // Mouse.buttons[mbe->button].time_held_down += timer_get_fixed_seconds() - Mouse.buttons[mbe->button].time_went_down;
83 // Mouse.buttons[mbe->button].num_ups++;
84 Mouse.buttons[button].pressed = 0;
85 Mouse.buttons[button].time_held_down += timer_get_fixed_seconds() - Mouse.buttons[mbe->button].time_went_down;
86 Mouse.buttons[button].num_ups++;
87 //end this section addition/change - Hans
91 //added on 10/17/98 by Hans de Goede for mouse functionality
92 void mouse_motion_handler(SDL_MouseMotionEvent *mme)
94 Mouse.delta_x += mme->xrel;
95 Mouse.delta_y += mme->yrel;
98 if (Mouse.x > Mouse.max_x) Mouse.x = Mouse.max_x;
99 else if (Mouse.x < Mouse.min_x) Mouse.x = Mouse.min_x;
100 if (Mouse.y > Mouse.max_y) Mouse.y = Mouse.max_y;
101 else if (Mouse.y < Mouse.min_y) Mouse.y = Mouse.min_y;
103 //end this section addition - Hans
106 mouse_set_limits( int x1, int y1, int x2, int y2 )
108 //added on 10/17/98 by Hans de Goede for mouse functionality
109 //-killed- // Shrug...
110 //-killed- event_poll();
115 //end this section addition - Hans
118 void mouse_flush() // clears all mice events...
125 current_time = timer_get_fixed_seconds();
126 for (i=0; i<MOUSE_MAX_BUTTONS; i++)
128 Mouse.buttons[i].pressed=0;
129 Mouse.buttons[i].time_went_down=current_time;
130 Mouse.buttons[i].time_held_down=0;
131 Mouse.buttons[i].num_ups=0;
132 Mouse.buttons[i].num_downs=0;
134 //added on 10/17/98 by Hans de Goede for mouse functionality
139 //end this section addition - Hans
142 //========================================================================
143 void mouse_get_pos( int *x, int *y)
145 //added/changed on 10/17/98 by Hans de Goede for mouse functionality
146 //-killed- Uint16 lx,ly;
148 //-killed- SDL_GetMouseState(&lx,&ly);
149 //-killed- *x=(int)lx;
150 //-killed- *y=(int)ly;
153 //end this section change - Hans
156 void mouse_get_delta( int *dx, int *dy )
158 //added/changed on 10/17/98 by Hans de Goede for mouse functionality
159 //-killed- static int lastx, lasty;
163 //-killed- mouse_get_pos(&x,&y);
164 //-killed- *dx = x - lastx;
165 //-killed- *dy = y - lasty;
166 //-killed- lastx = x;
167 //-killed- lasty = y;
172 //end this section change - Hans
183 for (i=0; i<MOUSE_MAX_BUTTONS; i++ )
185 if (Mouse.buttons[i].pressed)
192 void mouse_set_pos( int x, int y)
195 //added/changed on 10/17/98 by Hans de Goede for mouse functionality
196 //-killed- SDL_WarpMouse(x,y);
199 if (Mouse.x > Mouse.max_x) Mouse.x = Mouse.max_x;
200 else if (Mouse.x < Mouse.min_x) Mouse.x = Mouse.min_x;
201 if (Mouse.y > Mouse.max_y) Mouse.y = Mouse.max_y;
202 else if (Mouse.y < Mouse.min_y) Mouse.y = Mouse.min_y;
203 //end this section change - Hans
206 void mouse_get_cyberman_pos( int *x, int *y )
212 // Returns how long this button has been down since last call.
213 fix mouse_button_down_time(int button)
219 if (!Mouse.buttons[button].pressed) {
220 time_down = Mouse.buttons[button].time_held_down;
221 Mouse.buttons[button].time_held_down = 0;
223 time = timer_get_fixed_seconds();
224 time_down = time - Mouse.buttons[button].time_held_down;
225 Mouse.buttons[button].time_held_down = time;
230 // Returns how many times this button has went down since last call
231 int mouse_button_down_count(int button)
237 count = Mouse.buttons[button].num_downs;
238 Mouse.buttons[button].num_downs = 0;
243 // Returns 1 if this button is currently down
244 int mouse_button_state(int button)
247 return Mouse.buttons[button].pressed;