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