Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
in_mouse.cpp File Reference
#include "vegastrike.h"
#include "in_handler.h"
#include "in_mouse.h"
#include <deque>
#include "vs_globals.h"
#include "config_xml.h"
#include "in_joystick.h"
#include "gldrv/winsys.h"

Go to the source code of this file.

Classes

struct  MouseEvent
 

Macros

#define NUM_BUTTONS   15
 

Functions

int getMouseDrawFunc ()
 
void GetMouseXY (int &mx, int &my)
 
int getMouseButtonStatus ()
 
void mouseClickQueue (int button, int state, int x, int y)
 
void AddDelta (int dx, int dy)
 
void DealWithWarp (int x, int y)
 
void mouseDragQueue (int x, int y)
 
void mouseMotionQueue (int x, int y)
 
int lookupMouseButton (int b)
 
void mouseClick0 (int button, int state, int mod, int x, int y)
 
void SetDelta (int dx, int dy)
 
void GetMouseDelta (int &dx, int &dy)
 
void mouseDrag (int x, int y)
 
void mouseMotion (int x, int y)
 
static void DefaultMouseHandler (KBSTATE, int x, int y, int delx, int dely, int mod)
 
void UnbindMouse (int key)
 
void BindKey (int key, MouseHandler handler)
 
void RestoreMouse ()
 
void InitMouse ()
 
void ProcessMouse ()
 

Variables

KBSTATE MouseState [NUM_BUTTONS+1] = {RELEASE}
 
static MouseHandler mouseBindings [NUM_BUTTONS+1]
 
int mousex = 0
 
int mousey = 0
 
static deque< MouseEventeventQueue
 
int delx = 0
 
int dely = 0
 
int warpallowage = 2
 

Macro Definition Documentation

#define NUM_BUTTONS   15

Function Documentation

void AddDelta ( int  dx,
int  dy 
)

Definition at line 80 of file in_mouse.cpp.

References delx, and dely.

Referenced by mouseClick0(), mouseDrag(), and mouseMotion().

81 {
82  delx += dx;
83  dely += dy;
84 }
void BindKey ( int  key,
MouseHandler  handler 
)

Definition at line 197 of file in_mouse.cpp.

References mouseBindings, mousex, mousey, and RESET.

198 {
199  mouseBindings[key] = handler;
200  handler( RESET, mousex, mousey, 0, 0, 0 );
201 }
void DealWithWarp ( int  x,
int  y 
)

Definition at line 86 of file in_mouse.cpp.

References delx, dely, eventQueue, g_game, VegaConfig::getVariable(), i, joystick, MOUSE_JOYSTICK, mousex, mousey, XMLSupport::parse_bool(), XMLSupport::parse_int(), vs_config, warpallowage, winsys_warp_pointer(), game_data_t::x_resolution, and game_data_t::y_resolution.

Referenced by mouseDragQueue(), and mouseMotionQueue().

87 {
88  static bool warp_pointer = XMLSupport::parse_bool( vs_config->getVariable( "joystick", "warp_mouse", "false" ) );
89  static int mouse_warp_zone = XMLSupport::parse_int( vs_config->getVariable( "joystick", "warp_mouse_zone", "100" ) );
90  if (warp_pointer) {
91  if ( joystick[MOUSE_JOYSTICK]->player < _Universe->numPlayers() ) {
92  if (x < mouse_warp_zone || y < mouse_warp_zone || x > g_game.x_resolution-mouse_warp_zone || y
93  > g_game.y_resolution-mouse_warp_zone) {
94 
95  int delx = -x+g_game.x_resolution/2;
96  int dely = -y+g_game.y_resolution/2;
97  mousex += delx;
98  mousey += dely;
99  deque< MouseEvent >::iterator i;
100  for (i = eventQueue.begin(); i != eventQueue.end(); i++) {
101  i->x += delx;
102  i->y += dely;
103  }
104  if (warpallowage-- >= 0)
106  }
107  }
108  }
109 }
static void DefaultMouseHandler ( KBSTATE  ,
int  x,
int  y,
int  delx,
int  dely,
int  mod 
)
static

Definition at line 191 of file in_mouse.cpp.

Referenced by UnbindMouse().

191 {}
int getMouseButtonStatus ( )

Definition at line 48 of file in_mouse.cpp.

References DOWN, i, MouseState, NUM_BUTTONS, and PRESS.

49 {
50  int ret = 0;
51  for (int i = 0; i < NUM_BUTTONS; i++)
52  ret |= (MouseState[i] == PRESS || MouseState[i] == DOWN) ? (1<<i) : 0;
53  return ret;
54 }
void GetMouseDelta ( int dx,
int dy 
)

Definition at line 166 of file in_mouse.cpp.

References delx, and dely.

167 {
168  dx = delx;
169  dy = dely;
170  delx = dely = 0;
171 }
int getMouseDrawFunc ( )

Gets the button number of the function used to draw the mouse

Definition at line 34 of file in_mouse.cpp.

References NUM_BUTTONS.

35 {
36  return NUM_BUTTONS;
37 }
void GetMouseXY ( int mx,
int my 
)

Definition at line 43 of file in_mouse.cpp.

References mousex, and mousey.

44 {
45  mx = mousex;
46  my = mousey;
47 }
void InitMouse ( )

Definition at line 209 of file in_mouse.cpp.

References a, NUM_BUTTONS, RestoreMouse(), and UnbindMouse().

Referenced by InitInput().

210 {
211  for (int a = 0; a < NUM_BUTTONS+1; a++)
212  UnbindMouse( a );
213  RestoreMouse();
214 }
int lookupMouseButton ( int  b)

Definition at line 123 of file in_mouse.cpp.

References b, NUM_BUTTONS, WS_LEFT_BUTTON, WS_MIDDLE_BUTTON, WS_RIGHT_BUTTON, WS_WHEEL_DOWN, and WS_WHEEL_UP.

Referenced by NavigationSystem::mouseClick(), and mouseClick0().

124 {
125  static int adj = 0;
126  if (b+adj < WS_LEFT_BUTTON)
127  adj = WS_LEFT_BUTTON-b;
128  b += adj;
129  switch (b)
130  {
131  case WS_LEFT_BUTTON:
132  return 0;
133 
134  case WS_RIGHT_BUTTON:
135  return 2;
136 
137  case WS_MIDDLE_BUTTON:
138  return 1;
139 
140  case WS_WHEEL_UP:
141  return 3;
142 
143  case WS_WHEEL_DOWN:
144  return 4;
145 
146  default:
147  return ( (b-WS_LEFT_BUTTON) >= NUM_BUTTONS ) ? NUM_BUTTONS-1 : b-WS_LEFT_BUTTON;
148  }
149  return 0;
150 }
void mouseClick0 ( int  button,
int  state,
int  mod,
int  x,
int  y 
)

Definition at line 151 of file in_mouse.cpp.

References AddDelta(), DOWN, lookupMouseButton(), mouseBindings, MouseState, mousex, mousey, NUM_BUTTONS, PRESS, RELEASE, UP, WS_MOUSE_DOWN, x, and y.

Referenced by ProcessMouse().

152 {
153  button = lookupMouseButton( button );
154  if (button >= NUM_BUTTONS) return;
155  AddDelta( x-mousex, y-mousey );
156  mousex = x;
157  mousey = y;
158  mouseBindings[button] ( state == WS_MOUSE_DOWN ? PRESS : RELEASE, x, y, 0, 0, mod );
159  MouseState[button] = (state == WS_MOUSE_DOWN) ? DOWN : UP;
160 }
void mouseClickQueue ( int  button,
int  state,
int  x,
int  y 
)

Definition at line 73 of file in_mouse.cpp.

References MouseEvent::CLICK, and eventQueue.

Referenced by RestoreMouse().

74 {
75  int mod = 0;
76  eventQueue.push_back( MouseEvent( MouseEvent::CLICK, button, state, mod, x, y ) );
77 }
void mouseDrag ( int  x,
int  y 
)

Definition at line 173 of file in_mouse.cpp.

References AddDelta(), i, mouseBindings, MouseState, mousex, mousey, NUM_BUTTONS, x, and y.

Referenced by ProcessMouse().

174 {
175  for (int i = 0; i < NUM_BUTTONS+1; i++)
176  mouseBindings[i] ( MouseState[i], x, y, x-mousex, y-mousey, 0 );
177  AddDelta( x-mousex, y-mousey );
178  mousex = x;
179  mousey = y;
180 }
void mouseDragQueue ( int  x,
int  y 
)

Definition at line 111 of file in_mouse.cpp.

References DealWithWarp(), MouseEvent::DRAG, and eventQueue.

Referenced by RestoreMouse().

112 {
113  eventQueue.push_back( MouseEvent( MouseEvent::DRAG, -1, -1, -1, x, y ) );
114  DealWithWarp( x, y );
115 }
void mouseMotion ( int  x,
int  y 
)

Definition at line 182 of file in_mouse.cpp.

References AddDelta(), i, mouseBindings, MouseState, mousex, mousey, NUM_BUTTONS, x, and y.

Referenced by ProcessMouse().

183 {
184  for (int i = 0; i < NUM_BUTTONS+1; i++)
185  mouseBindings[i] ( MouseState[i], x, y, x-mousex, y-mousey, 0 );
186  AddDelta( x-mousex, y-mousey );
187  mousex = x;
188  mousey = y;
189 }
void mouseMotionQueue ( int  x,
int  y 
)

Definition at line 117 of file in_mouse.cpp.

References DealWithWarp(), eventQueue, and MouseEvent::MOTION.

Referenced by RestoreMouse().

118 {
119  eventQueue.push_back( MouseEvent( MouseEvent::MOTION, -1, -1, -1, x, y ) );
120  DealWithWarp( x, y );
121 }
void ProcessMouse ( )

Definition at line 216 of file in_mouse.cpp.

References MouseEvent::button, MouseEvent::CLICK, MouseEvent::DRAG, e, eventQueue, MouseEvent::mod, MouseEvent::MOTION, mouseClick0(), mouseDrag(), mouseMotion(), MouseEvent::state, MouseEvent::type, warpallowage, MouseEvent::x, and MouseEvent::y.

Referenced by ProcessInput().

217 {
218  warpallowage = 2;
219  while ( eventQueue.size() ) {
220  MouseEvent e = eventQueue.front();
221  switch (e.type)
222  {
223  case MouseEvent::CLICK:
224  mouseClick0( e.button, e.state, e.mod, e.x, e.y );
225  break;
226  case MouseEvent::DRAG:
227  mouseDrag( e.x, e.y );
228  break;
229  case MouseEvent::MOTION:
230  mouseMotion( e.x, e.y );
231  break;
232  }
233  eventQueue.pop_front();
234  }
235 }
void SetDelta ( int  dx,
int  dy 
)

Definition at line 161 of file in_mouse.cpp.

References delx, and dely.

162 {
163  delx = dx;
164  dely = dy;
165 }
void UnbindMouse ( int  key)

Definition at line 193 of file in_mouse.cpp.

References DefaultMouseHandler(), and mouseBindings.

Referenced by InitMouse(), and LocationSelect::~LocationSelect().

194 {
196 }

Variable Documentation

int delx = 0

Definition at line 78 of file in_mouse.cpp.

Referenced by AddDelta(), DealWithWarp(), GetMouseDelta(), and SetDelta().

int dely = 0
deque< MouseEvent > eventQueue
static
MouseHandler mouseBindings[NUM_BUTTONS+1]
static

Definition at line 39 of file in_mouse.cpp.

Referenced by BindKey(), mouseClick0(), mouseDrag(), mouseMotion(), and UnbindMouse().

KBSTATE MouseState[NUM_BUTTONS+1] = {RELEASE}

Definition at line 38 of file in_mouse.cpp.

Referenced by getMouseButtonStatus(), mouseClick0(), mouseDrag(), and mouseMotion().

int warpallowage = 2

Definition at line 85 of file in_mouse.cpp.

Referenced by DealWithWarp(), and ProcessMouse().