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 127 of file SDL_mouse.c.

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  )

◆ SDL_SendMouseButton()

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

Definition at line 594 of file SDL_mouse.c.

595 {
596  return SDL_PrivateSendMouseButton(window, mouseID, state, button, -1);
597 }

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 587 of file SDL_mouse.c.

588 {
589  clicks = SDL_max(clicks, 0);
590  return SDL_PrivateSendMouseButton(window, mouseID, state, button, clicks);
591 }

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 293 of file SDL_mouse.c.

294 {
295  if (window && !relative) {
296  SDL_Mouse *mouse = SDL_GetMouse();
297  if (!SDL_UpdateMouseFocus(window, x, y, mouse->buttonstate, (mouseID == SDL_TOUCH_MOUSEID) ? SDL_FALSE : SDL_TRUE)) {
298  return 0;
299  }
300  }
301 
302  return SDL_PrivateSendMouseMotion(window, mouseID, relative, x, y);
303 }

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 600 of file SDL_mouse.c.

601 {
602  SDL_Mouse *mouse = SDL_GetMouse();
603  int posted;
604  int integral_x, integral_y;
605 
606  if (window) {
608  }
609 
610  if (x == 0.0f && y == 0.0f) {
611  return 0;
612  }
613 
614  mouse->accumulated_wheel_x += x;
615  if (mouse->accumulated_wheel_x > 0) {
616  integral_x = (int)SDL_floor(mouse->accumulated_wheel_x);
617  } else if (mouse->accumulated_wheel_x < 0) {
618  integral_x = (int)SDL_ceil(mouse->accumulated_wheel_x);
619  } else {
620  integral_x = 0;
621  }
622  mouse->accumulated_wheel_x -= integral_x;
623 
624  mouse->accumulated_wheel_y += y;
625  if (mouse->accumulated_wheel_y > 0) {
626  integral_y = (int)SDL_floor(mouse->accumulated_wheel_y);
627  } else if (mouse->accumulated_wheel_y < 0) {
628  integral_y = (int)SDL_ceil(mouse->accumulated_wheel_y);
629  } else {
630  integral_y = 0;
631  }
632  mouse->accumulated_wheel_y -= integral_y;
633 
634  /* Post the event, if desired */
635  posted = 0;
638  event.type = SDL_MOUSEWHEEL;
639  event.wheel.windowID = mouse->focus ? mouse->focus->id : 0;
640  event.wheel.which = mouseID;
641 #if 0 /* Uncomment this when it goes in for SDL 2.1 */
642  event.wheel.preciseX = x;
643  event.wheel.preciseY = y;
644 #endif
645  event.wheel.x = integral_x;
646  event.wheel.y = integral_y;
647  event.wheel.direction = (Uint32)direction;
648  posted = (SDL_PushEvent(&event) > 0);
649  }
650  return posted;
651 }

References SDL_Mouse::accumulated_wheel_x, SDL_Mouse::accumulated_wheel_y, SDL_Mouse::focus, SDL_Window::id, 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 159 of file SDL_mouse.c.

160 {
161  SDL_Mouse *mouse = SDL_GetMouse();
162 
163  mouse->def_cursor = cursor;
164  if (!mouse->cur_cursor) {
166  }
167 }

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 203 of file SDL_mouse.c.

204 {
205  SDL_Mouse *mouse = SDL_GetMouse();
206 
207  if (mouse->focus == window) {
208  return;
209  }
210 
211  /* Actually, this ends up being a bad idea, because most operating
212  systems have an implicit grab when you press the mouse button down
213  so you can drag things out of the window and then get the mouse up
214  when it happens. So, #if 0...
215  */
216 #if 0
217  if (mouse->focus && !window) {
218  /* We won't get anymore mouse messages, so reset mouse state */
219  SDL_ResetMouse();
220  }
221 #endif
222 
223  /* See if the current window has lost focus */
224  if (mouse->focus) {
226  }
227 
228  mouse->focus = window;
229  mouse->has_position = SDL_FALSE;
230 
231  if (mouse->focus) {
233  }
234 
235  /* Update cursor visibility */
237 }

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().

SDL_GetMouse
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:170
Uint32
uint32_t Uint32
Definition: SDL_stdinc.h:203
SDL_Mouse::CaptureMouse
int(* CaptureMouse)(SDL_Window *window)
Definition: SDL_mouse_c.h:70
SDL_Mouse::buttonstate
Uint32 buttonstate
Definition: SDL_mouse_c.h:85
SDL_Cursor
Definition: SDL_mouse_c.h:30
SDL_HINT_TOUCH_MOUSE_EVENTS
#define SDL_HINT_TOUCH_MOUSE_EVENTS
A variable controlling whether touch events should generate synthetic mouse events.
Definition: SDL_hints.h:348
SDL_Mouse::cursors
SDL_Cursor * cursors
Definition: SDL_mouse_c.h:103
SDL_ceil
#define SDL_ceil
Definition: SDL_dynapi_overrides.h:426
NULL
#define NULL
Definition: begin_code.h:167
SDL_TouchMouseEventsChanged
static void SDL_TouchMouseEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:100
SDL_PrivateSendMouseMotion
static int SDL_PrivateSendMouseMotion(SDL_Window *window, SDL_MouseID mouseID, int relative, int x, int y)
Definition: SDL_mouse.c:321
SDL_zerop
#define SDL_zerop(x)
Definition: SDL_stdinc.h:419
SDL_MouseDoubleClickTimeChanged
static void SDL_MouseDoubleClickTimeChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:48
SDL_WINDOWEVENT_ENTER
@ SDL_WINDOWEVENT_ENTER
Definition: SDL_video.h:162
SDL_MouseNormalSpeedScaleChanged
static void SDL_MouseNormalSpeedScaleChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:76
SDL_Mouse::accumulated_wheel_x
float accumulated_wheel_x
Definition: SDL_mouse_c.h:83
SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS
#define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS
A variable setting the double click radius, in pixels.
Definition: SDL_hints.h:305
SDL_SetCursor
void SDL_SetCursor(SDL_Cursor *cursor)
Set the active cursor.
Definition: SDL_mouse.c:1001
SDL_floor
#define SDL_floor
Definition: SDL_dynapi_overrides.h:431
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:760
SDL_SetMouseFocus
void SDL_SetMouseFocus(SDL_Window *window)
Definition: SDL_mouse.c:203
SDL_ShowCursor
int SDL_ShowCursor(int toggle)
Toggle whether or not the cursor is shown.
Definition: SDL_mouse.c:1097
SDL_MouseTouchEventsChanged
static void SDL_MouseTouchEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:108
SDL_TOUCH_MOUSEID
#define SDL_TOUCH_MOUSEID
Definition: SDL_touch.h:61
SDL_Mouse::was_touch_mouse_events
SDL_bool was_touch_mouse_events
Definition: SDL_mouse_c.h:97
SDL_CaptureMouse
int SDL_CaptureMouse(SDL_bool enabled)
Capture the mouse, to track input outside an SDL window.
Definition: SDL_mouse.c:850
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2652
SDL_FALSE
@ SDL_FALSE
Definition: SDL_stdinc.h:163
x
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1574
SDL_UpdateMouseFocus
static SDL_bool SDL_UpdateMouseFocus(SDL_Window *window, int x, int y, Uint32 buttonstate, SDL_bool send_mouse_motion)
Definition: SDL_mouse.c:241
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:773
window
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025
SDL_free
#define SDL_free
Definition: SDL_dynapi_overrides.h:377
f
GLfloat f
Definition: SDL_opengl_glext.h:1873
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
SDL_max
#define SDL_max(x, y)
Definition: SDL_stdinc.h:407
SDL_mouse
static SDL_Mouse SDL_mouse
Definition: SDL_mouse.c:39
SDL_Mouse::def_cursor
SDL_Cursor * def_cursor
Definition: SDL_mouse_c.h:104
SDL_MOUSEWHEEL
@ SDL_MOUSEWHEEL
Definition: SDL_events.h:108
SDL_Cursor::next
struct SDL_Cursor * next
Definition: SDL_mouse_c.h:32
SDL_Mouse
Definition: SDL_mouse_c.h:43
SDL_MouseDoubleClickRadiusChanged
static void SDL_MouseDoubleClickRadiusChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:64
SDL_Mouse::focus
SDL_Window * focus
Definition: SDL_mouse_c.h:77
SDL_Mouse::accumulated_wheel_y
float accumulated_wheel_y
Definition: SDL_mouse_c.h:84
cursor
SDL_Cursor * cursor
Definition: testwm2.c:40
y
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1574
SDL_SetRelativeMouseMode
int SDL_SetRelativeMouseMode(SDL_bool enabled)
Set relative mouse mode.
Definition: SDL_mouse.c:788
SDL_HINT_MOUSE_DOUBLE_CLICK_TIME
#define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME
A variable setting the double click time, in milliseconds.
Definition: SDL_hints.h:300
SDL_MouseRelativeSpeedScaleChanged
static void SDL_MouseRelativeSpeedScaleChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:88
SDL_TRUE
@ SDL_TRUE
Definition: SDL_stdinc.h:164
SDL_AddHintCallback
#define SDL_AddHintCallback
Definition: SDL_dynapi_overrides.h:192
SDL_Mouse::clickstate
SDL_MouseClickState * clickstate
Definition: SDL_mouse_c.h:101
SDL_Window::id
Uint32 id
Definition: SDL_sysvideo.h:77
SDL_HINT_MOUSE_TOUCH_EVENTS
#define SDL_HINT_MOUSE_TOUCH_EVENTS
A variable controlling whether mouse events should generate synthetic touch events.
Definition: SDL_hints.h:358
SDL_Mouse::has_position
SDL_bool has_position
Definition: SDL_mouse_c.h:86
SDL_Mouse::FreeCursor
void(* FreeCursor)(SDL_Cursor *cursor)
Definition: SDL_mouse_c.h:58
SDL_HINT_MOUSE_NORMAL_SPEED_SCALE
#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
SDL_SendWindowEvent
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
Definition: SDL_windowevents.c:74
SDL_FreeCursor
void SDL_FreeCursor(SDL_Cursor *cursor)
Frees a cursor created with SDL_CreateCursor() or similar functions.
Definition: SDL_mouse.c:1063
SDL_Event
General event structure.
Definition: SDL_events.h:558
SDL_DelHintCallback
#define SDL_DelHintCallback
Definition: SDL_dynapi_overrides.h:193
state
struct xkb_state * state
Definition: SDL_waylandsym.h:114
button
SDL_Texture * button
Definition: testgamecontroller.c:67
SDL_Mouse::cur_cursor
SDL_Cursor * cur_cursor
Definition: SDL_mouse_c.h:105
SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE
#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
SDL_WINDOWEVENT_LEAVE
@ SDL_WINDOWEVENT_LEAVE
Definition: SDL_video.h:163
SDL_Mouse::cursor_shown
SDL_bool cursor_shown
Definition: SDL_mouse_c.h:106
SDL_PrivateSendMouseButton
static int SDL_PrivateSendMouseButton(SDL_Window *window, SDL_MouseID mouseID, Uint8 state, Uint8 button, int clicks)
Definition: SDL_mouse.c:483