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_SetDoubleClickTime (Uint32 interval)
 
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 80 of file SDL_mouse.c.

References SDL_Mouse::cursor_shown, SDL_AddHintCallback, SDL_GetMouse(), SDL_HINT_MOUSE_NORMAL_SPEED_SCALE, SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE, SDL_HINT_TOUCH_MOUSE_EVENTS, SDL_MouseNormalSpeedScaleChanged(), SDL_MouseRelativeSpeedScaleChanged(), SDL_TouchMouseEventsChanged(), SDL_TRUE, and SDL_zerop.

Referenced by SDL_VideoInit().

81 {
82  SDL_Mouse *mouse = SDL_GetMouse();
83 
84  SDL_zerop(mouse);
85 
88 
91 
94 
95  mouse->cursor_shown = SDL_TRUE;
96 
97  return (0);
98 }
#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:273
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:112
#define SDL_HINT_TOUCH_MOUSE_EVENTS
A variable controlling whether touch events should generate synthetic mouse events.
Definition: SDL_hints.h:306
static void SDL_TouchMouseEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:67
static void SDL_MouseNormalSpeedScaleChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:43
#define SDL_zerop(x)
Definition: SDL_stdinc.h:417
SDL_bool cursor_shown
Definition: SDL_mouse_c.h:102
static void SDL_MouseRelativeSpeedScaleChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:55
#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:268
#define SDL_AddHintCallback

◆ SDL_MouseQuit()

void SDL_MouseQuit ( void  )

Definition at line 566 of file SDL_mouse.c.

References SDL_Mouse::CaptureMouse, SDL_Mouse::clickstate, 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().

567 {
568  SDL_Cursor *cursor, *next;
569  SDL_Mouse *mouse = SDL_GetMouse();
570 
571  if (mouse->CaptureMouse) {
573  }
575  SDL_ShowCursor(1);
576 
577  cursor = mouse->cursors;
578  while (cursor) {
579  next = cursor->next;
580  SDL_FreeCursor(cursor);
581  cursor = next;
582  }
583  mouse->cursors = NULL;
584 
585  if (mouse->def_cursor && mouse->FreeCursor) {
586  mouse->FreeCursor(mouse->def_cursor);
587  mouse->def_cursor = NULL;
588  }
589 
590  if (mouse->clickstate) {
591  SDL_free(mouse->clickstate);
592  mouse->clickstate = NULL;
593  }
594 
597 
600 }
#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:273
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:112
SDL_MouseClickState * clickstate
Definition: SDL_mouse_c.h:97
static void SDL_MouseNormalSpeedScaleChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:43
int SDL_ShowCursor(int toggle)
Toggle whether or not the cursor is shown.
Definition: SDL_mouse.c:1004
SDL_Cursor * cursors
Definition: SDL_mouse_c.h:99
int SDL_CaptureMouse(SDL_bool enabled)
Capture the mouse, to track input outside an SDL window.
Definition: SDL_mouse.c:757
int(* CaptureMouse)(SDL_Window *window)
Definition: SDL_mouse_c.h:70
#define SDL_free
SDL_Cursor * cursor
static void SDL_MouseRelativeSpeedScaleChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
Definition: SDL_mouse.c:55
void(* FreeCursor)(SDL_Cursor *cursor)
Definition: SDL_mouse_c.h:58
#define NULL
Definition: begin_code.h:164
struct SDL_Cursor * next
Definition: SDL_mouse_c.h:32
#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:268
int SDL_SetRelativeMouseMode(SDL_bool enabled)
Set relative mouse mode.
Definition: SDL_mouse.c:698
#define SDL_DelHintCallback
void SDL_FreeCursor(SDL_Cursor *cursor)
Frees a cursor created with SDL_CreateCursor() or similar functions.
Definition: SDL_mouse.c:970
SDL_Cursor * def_cursor
Definition: SDL_mouse_c.h:100

◆ SDL_SendMouseButton()

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

Definition at line 506 of file SDL_mouse.c.

References SDL_PrivateSendMouseButton().

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

507 {
508  return SDL_PrivateSendMouseButton(window, mouseID, state, button, -1);
509 }
static int SDL_PrivateSendMouseButton(SDL_Window *window, SDL_MouseID mouseID, Uint8 state, Uint8 button, int clicks)
Definition: SDL_mouse.c:414
SDL_Texture * button
struct xkb_state * state

◆ SDL_SendMouseButtonClicks()

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

Definition at line 499 of file SDL_mouse.c.

References SDL_max, and SDL_PrivateSendMouseButton().

500 {
501  clicks = SDL_max(clicks, 0);
502  return SDL_PrivateSendMouseButton(window, mouseID, state, button, clicks);
503 }
static int SDL_PrivateSendMouseButton(SDL_Window *window, SDL_MouseID mouseID, Uint8 state, Uint8 button, int clicks)
Definition: SDL_mouse.c:414
SDL_Texture * button
struct xkb_state * state
#define SDL_max(x, y)
Definition: SDL_stdinc.h:407

◆ SDL_SendMouseMotion()

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

Definition at line 237 of file SDL_mouse.c.

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

Referenced by SDL_BApp::_HandleMouseMove(), IsSDLWindowEventPending(), and SDL_WarpMouseInWindow().

238 {
239  if (window && !relative) {
240  SDL_Mouse *mouse = SDL_GetMouse();
241  if (!SDL_UpdateMouseFocus(window, x, y, mouse->buttonstate)) {
242  return 0;
243  }
244  }
245 
246  return SDL_PrivateSendMouseMotion(window, mouseID, relative, x, y);
247 }
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:112
static int SDL_PrivateSendMouseMotion(SDL_Window *window, SDL_MouseID mouseID, int relative, int x, int y)
Definition: SDL_mouse.c:265
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1574
Uint32 buttonstate
Definition: SDL_mouse_c.h:85
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1574
static SDL_bool SDL_UpdateMouseFocus(SDL_Window *window, int x, int y, Uint32 buttonstate)
Definition: SDL_mouse.c:189

◆ SDL_SendMouseWheel()

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

Definition at line 512 of file SDL_mouse.c.

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

513 {
514  SDL_Mouse *mouse = SDL_GetMouse();
515  int posted;
516  int integral_x, integral_y;
517 
518  if (window) {
519  SDL_SetMouseFocus(window);
520  }
521 
522  if (!x && !y) {
523  return 0;
524  }
525 
526  mouse->accumulated_wheel_x += x;
527  if (mouse->accumulated_wheel_x > 0) {
528  integral_x = (int)SDL_floor(mouse->accumulated_wheel_x);
529  } else if (mouse->accumulated_wheel_x < 0) {
530  integral_x = (int)SDL_ceil(mouse->accumulated_wheel_x);
531  } else {
532  integral_x = 0;
533  }
534  mouse->accumulated_wheel_x -= integral_x;
535 
536  mouse->accumulated_wheel_y += y;
537  if (mouse->accumulated_wheel_y > 0) {
538  integral_y = (int)SDL_floor(mouse->accumulated_wheel_y);
539  } else if (mouse->accumulated_wheel_y < 0) {
540  integral_y = (int)SDL_ceil(mouse->accumulated_wheel_y);
541  } else {
542  integral_y = 0;
543  }
544  mouse->accumulated_wheel_y -= integral_y;
545 
546  /* Post the event, if desired */
547  posted = 0;
550  event.type = SDL_MOUSEWHEEL;
551  event.wheel.windowID = mouse->focus ? mouse->focus->id : 0;
552  event.wheel.which = mouseID;
553 #if 0 /* Uncomment this when it goes in for SDL 2.1 */
554  event.wheel.preciseX = x;
555  event.wheel.preciseY = y;
556 #endif
557  event.wheel.x = integral_x;
558  event.wheel.y = integral_y;
559  event.wheel.direction = (Uint32)direction;
560  posted = (SDL_PushEvent(&event) > 0);
561  }
562  return posted;
563 }
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:112
#define SDL_ceil
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1574
SDL_Window * focus
Definition: SDL_mouse_c.h:77
#define SDL_ENABLE
Definition: SDL_events.h:722
void SDL_SetMouseFocus(SDL_Window *window)
Definition: SDL_mouse.c:151
uint32_t Uint32
Definition: SDL_stdinc.h:181
#define SDL_floor
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
struct _cl_event * event
float accumulated_wheel_y
Definition: SDL_mouse_c.h:84
#define SDL_PushEvent
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1574
Uint32 id
Definition: SDL_sysvideo.h:76
General event structure.
Definition: SDL_events.h:525
float accumulated_wheel_x
Definition: SDL_mouse_c.h:83

◆ SDL_SetDefaultCursor()

void SDL_SetDefaultCursor ( SDL_Cursor cursor)

Definition at line 101 of file SDL_mouse.c.

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

102 {
103  SDL_Mouse *mouse = SDL_GetMouse();
104 
105  mouse->def_cursor = cursor;
106  if (!mouse->cur_cursor) {
107  SDL_SetCursor(cursor);
108  }
109 }
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:112
void SDL_SetCursor(SDL_Cursor *cursor)
Set the active cursor.
Definition: SDL_mouse.c:908
SDL_Cursor * cursor
SDL_Cursor * cur_cursor
Definition: SDL_mouse_c.h:101
SDL_Cursor * def_cursor
Definition: SDL_mouse_c.h:100

◆ SDL_SetDoubleClickTime()

void SDL_SetDoubleClickTime ( Uint32  interval)

Definition at line 118 of file SDL_mouse.c.

References SDL_double_click_time.

119 {
120  SDL_double_click_time = interval;
121 }
static Uint32 SDL_double_click_time
Definition: SDL_mouse.c:36

◆ SDL_SetMouseFocus()

void SDL_SetMouseFocus ( SDL_Window window)

Definition at line 151 of file SDL_mouse.c.

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

152 {
153  SDL_Mouse *mouse = SDL_GetMouse();
154 
155  if (mouse->focus == window) {
156  return;
157  }
158 
159  /* Actually, this ends up being a bad idea, because most operating
160  systems have an implicit grab when you press the mouse button down
161  so you can drag things out of the window and then get the mouse up
162  when it happens. So, #if 0...
163  */
164 #if 0
165  if (mouse->focus && !window) {
166  /* We won't get anymore mouse messages, so reset mouse state */
167  SDL_ResetMouse();
168  }
169 #endif
170 
171  /* See if the current window has lost focus */
172  if (mouse->focus) {
174  }
175 
176  mouse->focus = window;
177  mouse->has_position = SDL_FALSE;
178 
179  if (mouse->focus) {
181  }
182 
183  /* Update cursor visibility */
185 }
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:112
SDL_bool has_position
Definition: SDL_mouse_c.h:86
SDL_Window * focus
Definition: SDL_mouse_c.h:77
void SDL_SetCursor(SDL_Cursor *cursor)
Set the active cursor.
Definition: SDL_mouse.c:908
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
#define NULL
Definition: begin_code.h:164
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025