123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- /*
- Simple DirectMedia Layer
- Copyright (C) 1997-2022 Sam Lantinga <[email protected]>
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
- #include "../SDL_internal.h"
- #ifndef SDL_mouse_c_h_
- #define SDL_mouse_c_h_
- #include "SDL_mouse.h"
- typedef Uint32 SDL_MouseID;
- struct SDL_Cursor
- {
- struct SDL_Cursor *next;
- void *driverdata;
- };
- typedef struct
- {
- SDL_MouseID mouseID;
- Uint32 buttonstate;
- } SDL_MouseInputSource;
- typedef struct
- {
- int last_x, last_y;
- Uint32 last_timestamp;
- Uint8 click_count;
- } SDL_MouseClickState;
- typedef struct
- {
- /* Create a cursor from a surface */
- SDL_Cursor *(*CreateCursor) (SDL_Surface * surface, int hot_x, int hot_y);
- /* Create a system cursor */
- SDL_Cursor *(*CreateSystemCursor) (SDL_SystemCursor id);
- /* Show the specified cursor, or hide if cursor is NULL */
- int (*ShowCursor) (SDL_Cursor * cursor);
- /* This is called when a mouse motion event occurs */
- void (*MoveCursor) (SDL_Cursor * cursor);
- /* Free a window manager cursor */
- void (*FreeCursor) (SDL_Cursor * cursor);
- /* Warp the mouse to (x,y) within a window */
- void (*WarpMouse) (SDL_Window * window, int x, int y);
- /* Warp the mouse to (x,y) in screen space */
- int (*WarpMouseGlobal) (int x, int y);
- /* Set relative mode */
- int (*SetRelativeMouseMode) (SDL_bool enabled);
- /* Set mouse capture */
- int (*CaptureMouse) (SDL_Window * window);
- /* Get absolute mouse coordinates. (x) and (y) are never NULL and set to zero before call. */
- Uint32 (*GetGlobalMouseState) (int *x, int *y);
- /* Data common to all mice */
- SDL_MouseID mouseID;
- SDL_Window *focus;
- int x;
- int y;
- int xdelta;
- int ydelta;
- int last_x, last_y; /* the last reported x and y coordinates */
- float accumulated_wheel_x;
- float accumulated_wheel_y;
- SDL_bool has_position;
- SDL_bool relative_mode;
- SDL_bool relative_mode_warp;
- float normal_speed_scale;
- float relative_speed_scale;
- float scale_accum_x;
- float scale_accum_y;
- Uint32 double_click_time;
- int double_click_radius;
- SDL_bool touch_mouse_events;
- SDL_bool mouse_touch_events;
- SDL_bool was_touch_mouse_events; /* Was a touch-mouse event pending? */
- #if defined(__vita__)
- Uint8 vita_touch_mouse_device;
- #endif
- SDL_bool auto_capture;
- SDL_bool capture_desired;
- SDL_Window *capture_window;
- /* Data for input source state */
- int num_sources;
- SDL_MouseInputSource *sources;
- /* Data for double-click tracking */
- int num_clickstates;
- SDL_MouseClickState *clickstate;
- SDL_Cursor *cursors;
- SDL_Cursor *def_cursor;
- SDL_Cursor *cur_cursor;
- SDL_bool cursor_shown;
- /* Driver-dependent data. */
- void *driverdata;
- } SDL_Mouse;
- /* Initialize the mouse subsystem */
- extern int SDL_MouseInit(void);
- /* Get the mouse state structure */
- SDL_Mouse *SDL_GetMouse(void);
- /* Set the default mouse cursor */
- extern void SDL_SetDefaultCursor(SDL_Cursor * cursor);
- /* Set the mouse focus window */
- extern void SDL_SetMouseFocus(SDL_Window * window);
- /* Update the mouse capture window */
- extern int SDL_UpdateMouseCapture(SDL_bool force_release);
- /* Send a mouse motion event */
- extern int SDL_SendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int relative, int x, int y);
- /* Send a mouse button event */
- extern int SDL_SendMouseButton(SDL_Window * window, SDL_MouseID mouseID, Uint8 state, Uint8 button);
- /* Send a mouse button event with a click count */
- extern int SDL_SendMouseButtonClicks(SDL_Window * window, SDL_MouseID mouseID, Uint8 state, Uint8 button, int clicks);
- /* Send a mouse wheel event */
- extern int SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, float x, float y, SDL_MouseWheelDirection direction);
- /* Warp the mouse within the window, potentially overriding relative mode */
- extern void SDL_PerformWarpMouseInWindow(SDL_Window *window, int x, int y, SDL_bool ignore_relative_mode);
- /* Shutdown the mouse subsystem */
- extern void SDL_MouseQuit(void);
- #endif /* SDL_mouse_c_h_ */
- /* vi: set ts=4 sw=4 expandtab: */
|