X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FInput%2Finput.hxx;h=2ea4217e922a66fc13894244f66b298638120eba;hb=72fbb0f3f55570b07c4f2f322a5274d76c0318ee;hp=46d8c6c2c2305d52f46239d4890981c2776dd55b;hpb=876e9c60fdbbbfbdb9b7de0f08673bf17c4a1666;p=flightgear.git
diff --git a/src/Input/input.hxx b/src/Input/input.hxx
index 46d8c6c2c..2ea4217e9 100644
--- a/src/Input/input.hxx
+++ b/src/Input/input.hxx
@@ -28,8 +28,11 @@
# error This library requires C++
#endif
+#include
This method fires an action triggered by a key or button - * press, with no additional quantity information.
+ * Handle a mouse click event. * - * @param binding The property node with the binding. + * @param button The mouse button selected. + * @param updown Button status. + * @param x The X position of the mouse event, in screen coordinates. + * @param y The Y position of the mouse event, in screen coordinates. */ - virtual void action (const SGPropertyNode * binding); + virtual void doMouseClick (int button, int updown, int x, int y); /** - * Fire off a quantity action. + * Handle mouse motion. * - *This method fires an action triggered by a change in value, - * such as a slider or axis.
- * - * @param action The property node with the binding. - * @param value The new value. + * @param x The new mouse x position, in screen coordinates. + * @param y The new mouse y position, in screen coordinates. + */ + virtual void doMouseMotion (int x, int y); + + +private: + // Constants + enum + { + MAX_KEYS = 1024, + + #ifdef WIN32 + MAX_JOYSTICKS = 2, + #else + MAX_JOYSTICKS = 10, + #endif + MAX_JOYSTICK_AXES = _JS_MAX_AXES, + MAX_JOYSTICK_BUTTONS = 32, + + MAX_MICE = 1, + MAX_MOUSE_BUTTONS = 8 + }; + struct mouse; + friend struct mouse; + + typedef vectorThis method fires an action triggered by relative movement - * rather than an absolute value; it is especially applicable to - * mouse-movement bindings.
- * - * @param binding The property node containing the binding. - * @param xdelta The amount of X movement. - * @param ydelta The amount of Y movement. + * Settings for a single joystick axis. */ -// virtual void action (const SGPropertyNode * binding, int xdelta, int ydelta); + struct axis { + axis (); + virtual ~axis (); + float last_value; + float tolerance; + binding_list_t bindings[FG_MOD_MAX]; + float low_threshold; + float high_threshold; + struct button low; + struct button high; + }; + + + /** + * Settings for a joystick. + */ + struct joystick { + joystick (); + virtual ~joystick (); + int jsnum; + jsJoystick * js; + int naxes; + int nbuttons; + axis * axes; + button * buttons; + }; -private: + + /** + * Settings for a mouse mode. + */ + struct mouse_mode { + mouse_mode (); + virtual ~mouse_mode (); + int cursor; + bool constrained; + bool pass_through; + button * buttons; + binding_list_t x_bindings[FG_MOD_MAX]; + binding_list_t y_bindings[FG_MOD_MAX]; + }; + + + /** + * Settings for a mouse. + */ + struct mouse { + mouse (); + virtual ~mouse (); + int x; + int y; + SGPropertyNode * mode_node; + SGPropertyNode * mouse_button_nodes[MAX_MOUSE_BUTTONS]; + int nModes; + int current_mode; + mouse_mode * modes; + }; + + + /** + * Initialize key bindings. + */ + void _init_keyboard (); + + + /** + * Initialize joystick bindings. + */ + void _init_joystick (); + + + /** + * Initialize mouse bindings. + */ + void _init_mouse (); + + + /** + * Initialize a single button. + */ + inline void _init_button (const SGPropertyNode * node, + button &b, + const string name); + + + /** + * Update the keyboard. + */ + void _update_keyboard (); + + + /** + * Update the joystick. + */ + void _update_joystick (); + + + /** + * Update the mouse. + */ + void _update_mouse (); + + + /** + * Update a single button. + */ + inline void _update_button (button &b, int modifiers, bool pressed, + int x, int y); + + + /** + * Read bindings and modifiers. + */ + void _read_bindings (const SGPropertyNode * node, + binding_list_t * binding_list, + int modifiers); /** * Look up the bindings for a key code. */ - const vectorPass the value on to the FGInput module unless PUI wants it.
+ * + * @param k The integer value for the key pressed. + * @param x (unused) + * @param y (unused) + */ +void GLUTkey (unsigned char k, int x, int y); + + +/** + * Key-up event handler for GLUT. + * + *PUI doesn't use this, so always pass it to the input manager.
+ * + * @param k The integer value for the key pressed. + * @param x (unused) + * @param y (unused) + */ +void GLUTkeyup (unsigned char k, int x, int y); + + +/** + * Special key-down handler for Glut. + * + *Pass the value on to the FGInput module unless PUI wants it. + * The key value will have 256 added to it.
+ * + * @param k The integer value for the key pressed (will have 256 added + * to it). + * @param x (unused) + * @param y (unused) + */ +void GLUTspecialkey (int k, int x, int y); + + +/** + * Special key-up handler for Glut. + * + * @param k The integer value for the key pressed (will have 256 added + * to it). + * @param x (unused) + * @param y (unused) + */ +void GLUTspecialkeyup (int k, int x, int y); + + +/** + * Mouse click handler for Glut. + * + * @param button The mouse button pressed. + * @param updown Press or release flag. + * @param x The x-location of the click. + * @param y The y-location of the click. + */ +void GLUTmouse (int button, int updown, int x, int y); + + +/** + * Mouse motion handler for Glut. + * + * @param x The new x-location of the mouse. + * @param y The new y-location of the mouse. + */ +void GLUTmotion (int x, int y); + +} // extern "C" + +#endif // _INPUT_HXX