home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / vlc-2-0-5-win32.exe / sdk / include / vlc / plugins / vlc_mouse.h < prev    next >
C/C++ Source or Header  |  2012-12-12  |  5KB  |  149 lines

  1. /*****************************************************************************
  2.  * vlc_mouse.h: mouse related structures and functions
  3.  *****************************************************************************
  4.  * Copyright (C) 2009 Laurent Aimar
  5.  * $Id: b48853570a09ad1d77cc95cda0c5b04b5028ee80 $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify it
  10.  * under the terms of the GNU Lesser General Public License as published by
  11.  * the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU Lesser General Public License
  20.  * along with this program; if not, write to the Free Software Foundation,
  21.  * 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_WHEEL_LEFT,
  38.     MOUSE_BUTTON_WHEEL_RIGHT,
  39.     MOUSE_BUTTON_MAX
  40. };
  41.  
  42. /**
  43.  * Mouse state
  44.  */
  45. typedef struct
  46. {
  47.     /* Coordinate */
  48.     int i_x;
  49.     int i_y;
  50.     /* Mask of pressed button */
  51.     int i_pressed;
  52.     /* Is double clicked */
  53.     bool b_double_click;
  54. } vlc_mouse_t;
  55.  
  56. static inline void vlc_mouse_Init( vlc_mouse_t *p_mouse )
  57. {
  58.     p_mouse->i_x = 0;
  59.     p_mouse->i_y = 0;
  60.     p_mouse->i_pressed = 0;
  61.     p_mouse->b_double_click = false;
  62. }
  63.  
  64. /* */
  65. static inline void vlc_mouse_SetPressed( vlc_mouse_t *p_mouse,
  66.                                          int i_button )
  67. {
  68.     p_mouse->i_pressed |= 1 << i_button;
  69. }
  70. static inline void vlc_mouse_SetReleased( vlc_mouse_t *p_mouse,
  71.                                           int i_button )
  72. {
  73.     p_mouse->i_pressed &= ~(1 << i_button);
  74. }
  75. static inline void vlc_mouse_SetPosition( vlc_mouse_t *p_mouse,
  76.                                           int i_x, int i_y )
  77. {
  78.     p_mouse->i_x = i_x;
  79.     p_mouse->i_y = i_y;
  80. }
  81.  
  82. /* */
  83. static inline bool vlc_mouse_IsPressed( const vlc_mouse_t *p_mouse,
  84.                                         int i_button )
  85. {
  86.     return ( p_mouse->i_pressed & (1 << i_button) ) != 0;
  87. }
  88. static inline bool vlc_mouse_IsLeftPressed( const vlc_mouse_t *p_mouse )
  89. {
  90.     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_LEFT );
  91. }
  92. static inline bool vlc_mouse_IsCenterPressed( const vlc_mouse_t *p_mouse )
  93. {
  94.     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_CENTER );
  95. }
  96. static inline bool vlc_mouse_IsRightPressed( const vlc_mouse_t *p_mouse )
  97. {
  98.     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_RIGHT );
  99. }
  100. static inline bool vlc_mouse_IsWheelUpPressed( const vlc_mouse_t *p_mouse )
  101. {
  102.     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_WHEEL_UP );
  103. }
  104. static inline bool vlc_mouse_IsWheelDownPressed( const vlc_mouse_t *p_mouse )
  105. {
  106.     return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_WHEEL_DOWN );
  107. }
  108. static inline void vlc_mouse_GetMotion( int *pi_x, int *pi_y,
  109.                                         const vlc_mouse_t *p_old,
  110.                                         const vlc_mouse_t *p_new )
  111. {
  112.     *pi_x = p_new->i_x - p_old->i_x;
  113.     *pi_y = p_new->i_y - p_old->i_y;
  114. }
  115.  
  116. /* */
  117. static inline bool vlc_mouse_HasChanged( const vlc_mouse_t *p_old,
  118.                                          const vlc_mouse_t *p_new )
  119. {
  120.     return p_old->i_x != p_new->i_x || p_old->i_y != p_new->i_y ||
  121.            p_old->i_pressed != p_new->i_pressed;
  122. }
  123. static inline bool vlc_mouse_HasMoved( const vlc_mouse_t *p_old,
  124.                                        const vlc_mouse_t *p_new )
  125. {
  126.     return p_old->i_x != p_new->i_x || p_old->i_y != p_new->i_y;
  127. }
  128. static inline bool vlc_mouse_HasButton( const vlc_mouse_t *p_old,
  129.                                         const vlc_mouse_t *p_new )
  130. {
  131.     return p_old->i_pressed != p_new->i_pressed;
  132. }
  133. static inline bool vlc_mouse_HasPressed( const vlc_mouse_t *p_old,
  134.                                          const vlc_mouse_t *p_new,
  135.                                          int i_button )
  136. {
  137.     const int i_mask = 1 << i_button;
  138.     return (p_old->i_pressed & i_mask) == 0 && (p_new->i_pressed & i_mask);
  139. }
  140. static inline bool vlc_mouse_HasReleased( const vlc_mouse_t *p_old,
  141.                                           const vlc_mouse_t *p_new,
  142.                                           int i_button )
  143. {
  144.     const int i_mask = 1 << i_button;
  145.     return (p_old->i_pressed & i_mask) && (p_new->i_pressed & i_mask) == 0;
  146. }
  147. #endif /* _VLC_MOUSE_H */
  148.  
  149.