SDL  2.0
SDL_mouse_c.h File Reference
#include "../SDL_internal.h"
#include "SDL_mouse.h"
+ Include dependency graph for SDL_mouse_c.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  SDL_Cursor
 
struct  SDL_MouseClickState
 
struct  SDL_Mouse
 

Typedefs

typedef Uint32 SDL_MouseID
 

Functions

int SDL_MouseInit (void)
 
SDL_MouseSDL_GetMouse (void)
 
void SDL_SetDefaultCursor (SDL_Cursor *cursor)
 
void SDL_SetMouseFocus (SDL_Window *window)
 
int SDL_SendMouseMotion (SDL_Window *window, SDL_MouseID mouseID, int relative, int x, int y)
 
int SDL_SendMouseButton (SDL_Window *window, SDL_MouseID mouseID, Uint8 state, Uint8 button)
 
int SDL_SendMouseButtonClicks (SDL_Window *window, SDL_MouseID mouseID, Uint8 state, Uint8 button, int clicks)
 
int SDL_SendMouseWheel (SDL_Window *window, SDL_MouseID mouseID, float x, float y, SDL_MouseWheelDirection direction)
 
void SDL_MouseQuit (void)
 

Typedef Documentation

◆ SDL_MouseID

Definition at line 28 of file SDL_mouse_c.h.

Function Documentation

◆ SDL_GetMouse()

◆ SDL_MouseInit()

int SDL_MouseInit ( void  )

Definition at line 132 of file SDL_mouse.c.

133 {
134  SDL_Mouse *mouse = SDL_GetMouse();
135 
136  SDL_zerop(mouse);
137 
140 
143 
146 
149 
152 
155 
156  mouse->was_touch_mouse_events = SDL_FALSE; /* no touch to mouse movement event pending */
157 
158  mouse->cursor_shown = SDL_TRUE;
159 
160  return (0);
161 }
#define SDL_AddHintCallback
#define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE
A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in rela...
Definition: SDL_hints.h:310
#define SDL_HINT_MOUSE_TOUCH_EVENTS
A variable controlling whether mouse events should generate synthetic touch events.
Definition: SDL_hints.h:369
#define SDL_HINT_TOUCH_MOUSE_EVENTS
A variable controlling whether touch events should generate synthetic mouse events.
Definition: SDL_hints.h:359
#define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME
A variable setting the double click time, in milliseconds.
Definition: SDL_hints.h:300
#define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS
A variable setting the double click radius, in pixels.
Definition: SDL_hints.h:305
#define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE
A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode.
Definition: SDL_hints.h:315
static void SDL_MouseDoubleClickTimeChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:51
static void SDL_MouseTouchEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:113
static void SDL_TouchMouseEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:105
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:175
static void SDL_MouseRelativeSpeedScaleChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:93
static void SDL_MouseNormalSpeedScaleChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:81
static void SDL_MouseDoubleClickRadiusChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:69
@ SDL_TRUE
Definition: SDL_stdinc.h:170
@ SDL_FALSE
Definition: SDL_stdinc.h:169
#define SDL_zerop(x)
Definition: SDL_stdinc.h:427
SDL_bool cursor_shown
Definition: SDL_mouse_c.h:106
SDL_bool was_touch_mouse_events
Definition: SDL_mouse_c.h:97

References SDL_Mouse::cursor_shown, SDL_AddHintCallback, SDL_FALSE, SDL_GetMouse(), SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS, SDL_HINT_MOUSE_DOUBLE_CLICK_TIME, SDL_HINT_MOUSE_NORMAL_SPEED_SCALE, SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE, SDL_HINT_MOUSE_TOUCH_EVENTS, SDL_HINT_TOUCH_MOUSE_EVENTS, SDL_MouseDoubleClickRadiusChanged(), SDL_MouseDoubleClickTimeChanged(), SDL_MouseNormalSpeedScaleChanged(), SDL_MouseRelativeSpeedScaleChanged(), SDL_MouseTouchEventsChanged(), SDL_TouchMouseEventsChanged(), SDL_TRUE, SDL_zerop, and SDL_Mouse::was_touch_mouse_events.

Referenced by SDL_VideoInit().

◆ SDL_MouseQuit()

void SDL_MouseQuit ( void  )

Definition at line 659 of file SDL_mouse.c.

660 {
661  SDL_Cursor *cursor, *next;
662  SDL_Mouse *mouse = SDL_GetMouse();
663 
664  if (mouse->CaptureMouse) {
666  }
668  SDL_ShowCursor(1);
669 
670  cursor = mouse->cursors;
671  while (cursor) {
672  next = cursor->next;
674  cursor = next;
675  }
676  mouse->cursors = NULL;
677  mouse->cur_cursor = NULL;
678 
679  if (mouse->def_cursor && mouse->FreeCursor) {
680  mouse->FreeCursor(mouse->def_cursor);
681  mouse->def_cursor = NULL;
682  }
683 
684  if (mouse->clickstate) {
685  SDL_free(mouse->clickstate);
686  mouse->clickstate = NULL;
687  }
688 
691 
694 }
#define SDL_DelHintCallback
#define SDL_free
void SDL_FreeCursor(SDL_Cursor *cursor)
Frees a cursor created with SDL_CreateCursor() or similar functions.
Definition: SDL_mouse.c:1069
int SDL_ShowCursor(int toggle)
Toggle whether or not the cursor is shown.
Definition: SDL_mouse.c:1103
int SDL_CaptureMouse(SDL_bool enabled)
Capture the mouse, to track input outside an SDL window.
Definition: SDL_mouse.c:856
int SDL_SetRelativeMouseMode(SDL_bool enabled)
Set relative mouse mode.
Definition: SDL_mouse.c:794
#define NULL
Definition: begin_code.h:163
struct SDL_Cursor * next
Definition: SDL_mouse_c.h:32
SDL_Cursor * cur_cursor
Definition: SDL_mouse_c.h:105
void(* FreeCursor)(SDL_Cursor *cursor)
Definition: SDL_mouse_c.h:58
SDL_MouseClickState * clickstate
Definition: SDL_mouse_c.h:101
SDL_Cursor * def_cursor
Definition: SDL_mouse_c.h:104
int(* CaptureMouse)(SDL_Window *window)
Definition: SDL_mouse_c.h:70
SDL_Cursor * cursors
Definition: SDL_mouse_c.h:103
SDL_Cursor * cursor
Definition: testwm2.c:40

References SDL_Mouse::CaptureMouse, SDL_Mouse::clickstate, SDL_Mouse::cur_cursor, cursor, SDL_Mouse::cursors, SDL_Mouse::def_cursor, SDL_Mouse::FreeCursor, SDL_Cursor::next, NULL, SDL_CaptureMouse(), SDL_DelHintCallback, SDL_FALSE, SDL_free, SDL_FreeCursor(), SDL_GetMouse(), SDL_HINT_MOUSE_NORMAL_SPEED_SCALE, SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE, SDL_MouseNormalSpeedScaleChanged(), SDL_MouseRelativeSpeedScaleChanged(), SDL_SetRelativeMouseMode(), and SDL_ShowCursor().

Referenced by SDL_VideoQuit().

◆ SDL_SendMouseButton()

int SDL_SendMouseButton ( SDL_Window window,
SDL_MouseID  mouseID,
Uint8  state,
Uint8  button 
)

Definition at line 599 of file SDL_mouse.c.

600 {
601  return SDL_PrivateSendMouseButton(window, mouseID, state, button, -1);
602 }
static int SDL_PrivateSendMouseButton(SDL_Window *window, SDL_MouseID mouseID, Uint8 state, Uint8 button, int clicks)
Definition: SDL_mouse.c:488
struct xkb_state * state
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025
SDL_Texture * button

References button, SDL_PrivateSendMouseButton(), and state.

Referenced by SDL_BApp::_HandleMouseButton(), and SDL_SendTouch().

◆ SDL_SendMouseButtonClicks()

int SDL_SendMouseButtonClicks ( SDL_Window window,
SDL_MouseID  mouseID,
Uint8  state,
Uint8  button,
int  clicks 
)

Definition at line 592 of file SDL_mouse.c.

593 {
594  clicks = SDL_max(clicks, 0);
595  return SDL_PrivateSendMouseButton(window, mouseID, state, button, clicks);
596 }
#define SDL_max(x, y)
Definition: SDL_stdinc.h:413

References button, SDL_max, SDL_PrivateSendMouseButton(), and state.

◆ SDL_SendMouseMotion()

int SDL_SendMouseMotion ( SDL_Window window,
SDL_MouseID  mouseID,
int  relative,
int  x,
int  y 
)

Definition at line 298 of file SDL_mouse.c.

299 {
300  if (window && !relative) {
301  SDL_Mouse *mouse = SDL_GetMouse();
302  if (!SDL_UpdateMouseFocus(window, x, y, mouse->buttonstate, (mouseID == SDL_TOUCH_MOUSEID) ? SDL_FALSE : SDL_TRUE)) {
303  return 0;
304  }
305  }
306 
307  return SDL_PrivateSendMouseMotion(window, mouseID, relative, x, y);
308 }
static SDL_bool SDL_UpdateMouseFocus(SDL_Window *window, int x, int y, Uint32 buttonstate, SDL_bool send_mouse_motion)
Definition: SDL_mouse.c:246
static int SDL_PrivateSendMouseMotion(SDL_Window *window, SDL_MouseID mouseID, int relative, int x, int y)
Definition: SDL_mouse.c:326
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1574
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1574
#define SDL_TOUCH_MOUSEID
Definition: SDL_touch.h:61
Uint32 buttonstate
Definition: SDL_mouse_c.h:85

References SDL_Mouse::buttonstate, SDL_FALSE, SDL_GetMouse(), SDL_PrivateSendMouseMotion(), SDL_TOUCH_MOUSEID, SDL_TRUE, and SDL_UpdateMouseFocus().

Referenced by SDL_BApp::_HandleMouseMove(), SDL_SendTouch(), SDL_SendTouchMotion(), and SDL_WarpMouseInWindow().

◆ SDL_SendMouseWheel()

int SDL_SendMouseWheel ( SDL_Window window,
SDL_MouseID  mouseID,
float  x,
float  y,
SDL_MouseWheelDirection  direction 
)

Definition at line 605 of file SDL_mouse.c.

606 {
607  SDL_Mouse *mouse = SDL_GetMouse();
608  int posted;
609  int integral_x, integral_y;
610 
611  if (window) {
613  }
614 
615  if (x == 0.0f && y == 0.0f) {
616  return 0;
617  }
618 
619  mouse->accumulated_wheel_x += x;
620  if (mouse->accumulated_wheel_x > 0) {
621  integral_x = (int)SDL_floor(mouse->accumulated_wheel_x);
622  } else if (mouse->accumulated_wheel_x < 0) {
623  integral_x = (int)SDL_ceil(mouse->accumulated_wheel_x);
624  } else {
625  integral_x = 0;
626  }
627  mouse->accumulated_wheel_x -= integral_x;
628 
629  mouse->accumulated_wheel_y += y;
630  if (mouse->accumulated_wheel_y > 0) {
631  integral_y = (int)SDL_floor(mouse->accumulated_wheel_y);
632  } else if (mouse->accumulated_wheel_y < 0) {
633  integral_y = (int)SDL_ceil(mouse->accumulated_wheel_y);
634  } else {
635  integral_y = 0;
636  }
637  mouse->accumulated_wheel_y -= integral_y;
638 
639  /* Post the event, if desired */
640  posted = 0;
643  event.type = SDL_MOUSEWHEEL;
644  event.wheel.windowID = mouse->focus ? mouse->focus->id : 0;
645  event.wheel.which = mouseID;
646 #if 0 /* Uncomment this when it goes in for SDL 2.1 */
647  event.wheel.preciseX = x;
648  event.wheel.preciseY = y;
649 #endif
650  event.wheel.x = integral_x;
651  event.wheel.y = integral_y;
652  event.wheel.direction = (Uint32)direction;
653  posted = (SDL_PushEvent(&event) > 0);
654  }
655  return posted;
656 }
#define SDL_PushEvent
#define SDL_floor
#define SDL_ceil
@ SDL_MOUSEWHEEL
Definition: SDL_events.h:110
#define SDL_GetEventState(type)
Definition: SDL_events.h:808
#define SDL_ENABLE
Definition: SDL_events.h:795
void SDL_SetMouseFocus(SDL_Window *window)
Definition: SDL_mouse.c:208
struct _cl_event * event
uint32_t Uint32
Definition: SDL_stdinc.h:209
float accumulated_wheel_x
Definition: SDL_mouse_c.h:83
SDL_Window * focus
Definition: SDL_mouse_c.h:77
float accumulated_wheel_y
Definition: SDL_mouse_c.h:84
Uint32 id
Definition: SDL_sysvideo.h:77
General event structure.
Definition: SDL_events.h:592
typedef int(__stdcall *FARPROC)()

References SDL_Mouse::accumulated_wheel_x, SDL_Mouse::accumulated_wheel_y, SDL_Mouse::focus, SDL_Window::id, int(), SDL_ceil, SDL_ENABLE, SDL_floor, SDL_GetEventState, SDL_GetMouse(), SDL_MOUSEWHEEL, SDL_PushEvent, and SDL_SetMouseFocus().

Referenced by SDL_BApp::_HandleMouseWheel().

◆ SDL_SetDefaultCursor()

void SDL_SetDefaultCursor ( SDL_Cursor cursor)

Definition at line 164 of file SDL_mouse.c.

165 {
166  SDL_Mouse *mouse = SDL_GetMouse();
167 
168  mouse->def_cursor = cursor;
169  if (!mouse->cur_cursor) {
171  }
172 }
void SDL_SetCursor(SDL_Cursor *cursor)
Set the active cursor.
Definition: SDL_mouse.c:1007

References SDL_Mouse::cur_cursor, cursor, SDL_Mouse::def_cursor, SDL_GetMouse(), and SDL_SetCursor().

◆ SDL_SetMouseFocus()

void SDL_SetMouseFocus ( SDL_Window window)

Definition at line 208 of file SDL_mouse.c.

209 {
210  SDL_Mouse *mouse = SDL_GetMouse();
211 
212  if (mouse->focus == window) {
213  return;
214  }
215 
216  /* Actually, this ends up being a bad idea, because most operating
217  systems have an implicit grab when you press the mouse button down
218  so you can drag things out of the window and then get the mouse up
219  when it happens. So, #if 0...
220  */
221 #if 0
222  if (mouse->focus && !window) {
223  /* We won't get anymore mouse messages, so reset mouse state */
224  SDL_ResetMouse();
225  }
226 #endif
227 
228  /* See if the current window has lost focus */
229  if (mouse->focus) {
231  }
232 
233  mouse->focus = window;
234  mouse->has_position = SDL_FALSE;
235 
236  if (mouse->focus) {
238  }
239 
240  /* Update cursor visibility */
242 }
@ SDL_WINDOWEVENT_LEAVE
Definition: SDL_video.h:164
@ SDL_WINDOWEVENT_ENTER
Definition: SDL_video.h:163
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
SDL_bool has_position
Definition: SDL_mouse_c.h:86

References SDL_Mouse::focus, SDL_Mouse::has_position, NULL, SDL_FALSE, SDL_GetMouse(), SDL_SendWindowEvent(), SDL_SetCursor(), SDL_WINDOWEVENT_ENTER, and SDL_WINDOWEVENT_LEAVE.

Referenced by SDL_BApp::_HandleMouseFocus(), SDL_DestroyWindow(), SDL_OnWindowFocusGained(), SDL_SendMouseWheel(), SDL_SetRelativeMouseMode(), and SDL_UpdateMouseFocus().