]> git.sesse.net Git - vlc/blob - include/vlc_mouse.h
Remove useless mouse buttons table
[vlc] / include / vlc_mouse.h
1 /*****************************************************************************
2  * vlc_mouse.h: mouse related structures and functions
3  *****************************************************************************
4  * Copyright (C) 2009 Laurent Aimar
5  * $Id$
6  *
7  * Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23
24 #ifndef _VLC_MOUSE_H
25 #define _VLC_MOUSE_H 1
26
27 /**
28  * Mouse buttons
29  */
30 enum
31 {
32     MOUSE_BUTTON_LEFT=0,
33     MOUSE_BUTTON_CENTER,
34     MOUSE_BUTTON_RIGHT,
35     MOUSE_BUTTON_WHEEL_UP,
36     MOUSE_BUTTON_WHEEL_DOWN,
37     MOUSE_BUTTON_MAX
38 };
39
40 /**
41  * Mouse state
42  */
43 typedef struct
44 {
45     /* Coordinate */
46     int i_x;
47     int i_y;
48     /* Mask of pressed button */
49     int i_pressed;
50     /* Is double clicked */
51     bool b_double_click;
52 } vlc_mouse_t;
53
54 static inline void vlc_mouse_Init( vlc_mouse_t *p_mouse )
55 {
56     p_mouse->i_x = 0;
57     p_mouse->i_y = 0;
58     p_mouse->i_pressed = 0;
59     p_mouse->b_double_click = false;
60 }
61
62 /* */
63 static inline void vlc_mouse_SetPressed( vlc_mouse_t *p_mouse,
64                                          int i_button )
65 {
66     p_mouse->i_pressed |= 1 << i_button;
67 }
68 static inline void vlc_mouse_SetReleased( vlc_mouse_t *p_mouse,
69                                           int i_button )
70 {
71     p_mouse->i_pressed &= ~(1 << i_button);
72 }
73 static inline void vlc_mouse_SetPosition( vlc_mouse_t *p_mouse,
74                                           int i_x, int i_y )
75 {
76     p_mouse->i_x = i_x;
77     p_mouse->i_y = i_y;
78 }
79
80 /* */
81 static inline bool vlc_mouse_IsPressed( const vlc_mouse_t *p_mouse,
82                                         int i_button )
83 {
84     return ( p_mouse->i_pressed & (1 << i_button) ) != 0;
85 }
86 static inline bool vlc_mouse_IsLeftPressed( const vlc_mouse_t *p_mouse )
87 {
88     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_LEFT );
89 }
90 static inline bool vlc_mouse_IsCenterPressed( const vlc_mouse_t *p_mouse )
91 {
92     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_CENTER );
93 }
94 static inline bool vlc_mouse_IsRightPressed( const vlc_mouse_t *p_mouse )
95 {
96     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_RIGHT );
97 }
98 static inline bool vlc_mouse_IsWheelUpPressed( const vlc_mouse_t *p_mouse )
99 {
100     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_WHEEL_UP );
101 }
102 static inline bool vlc_mouse_IsWheelDownPressed( const vlc_mouse_t *p_mouse )
103 {
104     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_WHEEL_DOWN );
105 }
106 static inline void vlc_mouse_GetMotion( int *pi_x, int *pi_y,
107                                         const vlc_mouse_t *p_old,
108                                         const vlc_mouse_t *p_new )
109 {
110     *pi_x = p_new->i_x - p_old->i_x;
111     *pi_y = p_new->i_y - p_old->i_y;
112 }
113
114 /* */
115 static inline bool vlc_mouse_HasChanged( const vlc_mouse_t *p_old,
116                                          const vlc_mouse_t *p_new )
117 {
118     return p_old->i_x != p_new->i_x || p_old->i_x != p_new->i_x ||
119            p_old->i_pressed != p_new->i_pressed;
120 }
121 static inline bool vlc_mouse_HasMoved( const vlc_mouse_t *p_old,
122                                        const vlc_mouse_t *p_new )
123 {
124     return p_old->i_x != p_new->i_x || p_old->i_y != p_new->i_y;
125 }
126 static inline bool vlc_mouse_HasButton( const vlc_mouse_t *p_old,
127                                         const vlc_mouse_t *p_new )
128 {
129     return p_old->i_pressed != p_new->i_pressed;
130 }
131 static inline bool vlc_mouse_HasPressed( const vlc_mouse_t *p_old,
132                                          const vlc_mouse_t *p_new,
133                                          int i_button )
134 {
135     const int i_mask = 1 << i_button;
136     return (p_old->i_pressed & i_mask) == 0 && (p_new->i_pressed & i_mask);
137 }
138 static inline bool vlc_mouse_HasReleased( const vlc_mouse_t *p_old,
139                                           const vlc_mouse_t *p_new,
140                                           int i_button )
141 {
142     const int i_mask = 1 << i_button;
143     return (p_old->i_pressed & i_mask) && (p_new->i_pressed & i_mask) == 0;
144 }
145 #endif /* _VLC_MOUSE_H */
146