1 /** \file mouse.h 2 * \brief Header: Hight-level mouse API. 3 * 4 * This is a thin layer over the low-level mouse protocol in lib/tty/mouse.h. 5 * The latter is oblivious to the regions on the screen and is therefore a 6 * bit hard to use in widgets. This layer translates the low level Gpm_Event 7 * into something that's easy to work with in widgets. 8 */ 9 10 #ifndef MC__WIDGET_MOUSE_H 11 #define MC__WIDGET_MOUSE_H 12 13 #include "lib/tty/mouse.h" // Gpm_Event 14 15 /*** enums ***************************************************************************************/ 16 17 /* Mouse messages */ 18 typedef enum 19 { 20 /* 21 * Notes: 22 * (1) "anywhere" means "inside or outside the widget". 23 * (2) the mouse wheel is not considered "mouse button". 24 */ 25 MSG_MOUSE_NONE = 0, 26 MSG_MOUSE_DOWN = 1, // When mouse button is pressed down inside the widget. 27 MSG_MOUSE_UP, // When mouse button, previously pressed inside the widget, is released anywhere. 28 MSG_MOUSE_CLICK, // When mouse button, previously pressed inside the widget, is released inside 29 // the widget. 30 MSG_MOUSE_DRAG, // When a drag, initiated by button press inside the widget, occurs anywhere. 31 MSG_MOUSE_MOVE, // (Not currently implemented in MC.) 32 MSG_MOUSE_SCROLL_UP, // When mouse wheel is rotated away from the user. 33 MSG_MOUSE_SCROLL_DOWN // When mouse wheel is rotated towards the user. 34 } mouse_msg_t; 35 36 /*** structures declarations (and typedefs of structures)*****************************************/ 37 38 /* Mouse event structure. */ 39 typedef struct 40 { 41 mouse_msg_t msg; 42 43 int x, y; // Local to the widget. 44 int buttons; // Bitwise-or of: GPM_B_LEFT, GPM_B_MIDDLE, GPM_B_RIGHT 45 int count; // One of: GPM_SINGLE, GPM_DOUBLE, GPM_TRIPLE 46 47 // A mechanism for the callback to report back: 48 struct 49 { 50 gboolean abort; 51 gboolean repeat; 52 } result; 53 } mouse_event_t; 54 55 /*** typedefs(not structures) and defined constants **********************************************/ 56 57 /*** global variables defined in .c file *********************************************************/ 58 59 /*** declarations of public functions ************************************************************/ 60 61 /* Translate GPM event to high-level event and process it */ 62 int mouse_handle_event (Widget *w, Gpm_Event *event); 63 64 /*** inline functions ****************************************************************************/ 65 66 #endif