1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2004 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Library General Public 7 License as published by the Free Software Foundation; either 8 version 2 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Library General Public License for more details. 14 15 You should have received a copy of the GNU Library General Public 16 License along with this library; if not, write to the Free 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 19 Sam Lantinga 20 slouken (at) libsdl.org 21 */ 22 23 #ifdef SAVE_RCSID 24 static char rcsid = 25 "@(#) $Id: SDL_mouse.h,v 1.8 2004/07/18 22:57:40 slouken Exp $"; 26 #endif 27 28 /* Include file for SDL mouse event handling */ 29 30 #ifndef _SDL_mouse_h 31 #define _SDL_mouse_h 32 33 #include "SDL_types.h" 34 #include "SDL_video.h" 35 36 #include "begin_code.h" 37 /* Set up for C function definitions, even when using C++ */ 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 typedef struct WMcursor WMcursor; /* Implementation dependent */ 43 typedef struct SDL_Cursor { 44 SDL_Rect area; /* The area of the mouse cursor */ 45 Sint16 hot_x, hot_y; /* The "tip" of the cursor */ 46 Uint8 *data; /* B/W cursor data */ 47 Uint8 *mask; /* B/W cursor mask */ 48 Uint8 *save[2]; /* Place to save cursor area */ 49 WMcursor *wm_cursor; /* Window-manager cursor */ 50 } SDL_Cursor; 51 52 /* Function prototypes */ 53 /* 54 * Retrieve the current state of the mouse. 55 * The current button state is returned as a button bitmask, which can 56 * be tested using the SDL_BUTTON(X) macros, and x and y are set to the 57 * current mouse cursor position. You can pass NULL for either x or y. 58 */ 59 extern DECLSPEC Uint8 SDLCALL SDL_GetMouseState(int *x, int *y); 60 61 /* 62 * Retrieve the current state of the mouse. 63 * The current button state is returned as a button bitmask, which can 64 * be tested using the SDL_BUTTON(X) macros, and x and y are set to the 65 * mouse deltas since the last call to SDL_GetRelativeMouseState(). 66 */ 67 extern DECLSPEC Uint8 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); 68 69 /* 70 * Set the position of the mouse cursor (generates a mouse motion event) 71 */ 72 extern DECLSPEC void SDLCALL SDL_WarpMouse(Uint16 x, Uint16 y); 73 74 /* 75 * Create a cursor using the specified data and mask (in MSB format). 76 * The cursor width must be a multiple of 8 bits. 77 * 78 * The cursor is created in black and white according to the following: 79 * data mask resulting pixel on screen 80 * 0 1 White 81 * 1 1 Black 82 * 0 0 Transparent 83 * 1 0 Inverted color if possible, black if not. 84 * 85 * Cursors created with this function must be freed with SDL_FreeCursor(). 86 */ 87 extern DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor 88 (Uint8 *data, Uint8 *mask, int w, int h, int hot_x, int hot_y); 89 90 /* 91 * Set the currently active cursor to the specified one. 92 * If the cursor is currently visible, the change will be immediately 93 * represented on the display. 94 */ 95 extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor *cursor); 96 97 /* 98 * Returns the currently active cursor. 99 */ 100 extern DECLSPEC SDL_Cursor * SDLCALL SDL_GetCursor(void); 101 102 /* 103 * Deallocates a cursor created with SDL_CreateCursor(). 104 */ 105 extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor *cursor); 106 107 /* 108 * Toggle whether or not the cursor is shown on the screen. 109 * The cursor start off displayed, but can be turned off. 110 * SDL_ShowCursor() returns 1 if the cursor was being displayed 111 * before the call, or 0 if it was not. You can query the current 112 * state by passing a 'toggle' value of -1. 113 */ 114 extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); 115 116 /* Used as a mask when testing buttons in buttonstate 117 Button 1: Left mouse button 118 Button 2: Middle mouse button 119 Button 3: Right mouse button 120 Button 4: Mouse wheel up (may also be a real button) 121 Button 5: Mouse wheel down (may also be a real button) 122 */ 123 #define SDL_BUTTON(X) (SDL_PRESSED<<(X-1)) 124 #define SDL_BUTTON_LEFT 1 125 #define SDL_BUTTON_MIDDLE 2 126 #define SDL_BUTTON_RIGHT 3 127 #define SDL_BUTTON_WHEELUP 4 128 #define SDL_BUTTON_WHEELDOWN 5 129 #define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) 130 #define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) 131 #define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) 132 133 134 /* Ends C function definitions when using C++ */ 135 #ifdef __cplusplus 136 } 137 #endif 138 #include "close_code.h" 139 140 #endif /* _SDL_mouse_h */ 141