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

Go to the source code of this file.

Data Structures

struct  SDL_WindowShaper
 
struct  SDL_ShapeDriver
 
struct  SDL_WindowUserData
 
struct  SDL_Window
 The type used to identify a window. More...
 
struct  SDL_VideoDisplay
 
struct  SDL_VideoDevice
 
struct  VideoBootStrap
 

Macros

#define FULLSCREEN_VISIBLE(W)
 
#define _THIS   SDL_VideoDevice *_this
 

Functions

SDL_VideoDeviceSDL_GetVideoDevice (void)
 
int SDL_AddBasicVideoDisplay (const SDL_DisplayMode *desktop_mode)
 
int SDL_AddVideoDisplay (const SDL_VideoDisplay *display)
 
SDL_bool SDL_AddDisplayMode (SDL_VideoDisplay *display, const SDL_DisplayMode *mode)
 
SDL_VideoDisplaySDL_GetDisplayForWindow (SDL_Window *window)
 
voidSDL_GetDisplayDriverData (int displayIndex)
 
int SDL_RecreateWindow (SDL_Window *window, Uint32 flags)
 
void SDL_OnWindowShown (SDL_Window *window)
 
void SDL_OnWindowHidden (SDL_Window *window)
 
void SDL_OnWindowResized (SDL_Window *window)
 
void SDL_OnWindowMinimized (SDL_Window *window)
 
void SDL_OnWindowRestored (SDL_Window *window)
 
void SDL_OnWindowEnter (SDL_Window *window)
 
void SDL_OnWindowLeave (SDL_Window *window)
 
void SDL_OnWindowFocusGained (SDL_Window *window)
 
void SDL_OnWindowFocusLost (SDL_Window *window)
 
void SDL_UpdateWindowGrab (SDL_Window *window)
 
SDL_WindowSDL_GetFocusWindow (void)
 
SDL_bool SDL_ShouldAllowTopmost (void)
 
float SDL_ComputeDiagonalDPI (int hpix, int vpix, float hinches, float vinches)
 

Macro Definition Documentation

§ _THIS

#define _THIS   SDL_VideoDevice *_this

Definition at line 143 of file SDL_sysvideo.h.

§ FULLSCREEN_VISIBLE

Function Documentation

§ SDL_AddBasicVideoDisplay()

int SDL_AddBasicVideoDisplay ( const SDL_DisplayMode desktop_mode)

Definition at line 577 of file SDL_video.c.

References SDL_VideoDisplay::current_mode, SDL_VideoDisplay::desktop_mode, SDL_AddVideoDisplay(), and SDL_zero.

578 {
579  SDL_VideoDisplay display;
580 
581  SDL_zero(display);
582  if (desktop_mode) {
583  display.desktop_mode = *desktop_mode;
584  }
585  display.current_mode = display.desktop_mode;
586 
587  return SDL_AddVideoDisplay(&display);
588 }
SDL_DisplayMode current_mode
Definition: SDL_sysvideo.h:130
#define SDL_zero(x)
Definition: SDL_stdinc.h:359
int SDL_AddVideoDisplay(const SDL_VideoDisplay *display)
Definition: SDL_video.c:591
SDL_DisplayMode desktop_mode
Definition: SDL_sysvideo.h:129

§ SDL_AddDisplayMode()

SDL_bool SDL_AddDisplayMode ( SDL_VideoDisplay display,
const SDL_DisplayMode mode 
)

Definition at line 728 of file SDL_video.c.

References cmpmodes(), SDL_VideoDisplay::display_modes, i, SDL_VideoDisplay::max_display_modes, SDL_VideoDisplay::num_display_modes, SDL_FALSE, SDL_qsort, SDL_realloc, and SDL_TRUE.

729 {
730  SDL_DisplayMode *modes;
731  int i, nmodes;
732 
733  /* Make sure we don't already have the mode in the list */
734  modes = display->display_modes;
735  nmodes = display->num_display_modes;
736  for (i = 0; i < nmodes; ++i) {
737  if (cmpmodes(mode, &modes[i]) == 0) {
738  return SDL_FALSE;
739  }
740  }
741 
742  /* Go ahead and add the new mode */
743  if (nmodes == display->max_display_modes) {
744  modes =
745  SDL_realloc(modes,
746  (display->max_display_modes + 32) * sizeof(*modes));
747  if (!modes) {
748  return SDL_FALSE;
749  }
750  display->display_modes = modes;
751  display->max_display_modes += 32;
752  }
753  modes[nmodes] = *mode;
754  display->num_display_modes++;
755 
756  /* Re-sort video modes */
757  SDL_qsort(display->display_modes, display->num_display_modes,
758  sizeof(SDL_DisplayMode), cmpmodes);
759 
760  return SDL_TRUE;
761 }
#define SDL_qsort
The structure that defines a display mode.
Definition: SDL_video.h:53
#define SDL_realloc
static int cmpmodes(const void *A, const void *B)
Definition: SDL_video.c:404
SDL_DisplayMode * display_modes
Definition: SDL_sysvideo.h:128
GLenum mode
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50

§ SDL_AddVideoDisplay()

int SDL_AddVideoDisplay ( const SDL_VideoDisplay display)

Definition at line 591 of file SDL_video.c.

References _this, SDL_VideoDisplay::device, SDL_VideoDevice::displays, SDL_VideoDisplay::name, SDL_VideoDevice::num_displays, SDL_itoa, SDL_OutOfMemory, SDL_realloc, and SDL_strdup.

Referenced by SDL_AddBasicVideoDisplay().

592 {
593  SDL_VideoDisplay *displays;
594  int index = -1;
595 
596  displays =
598  (_this->num_displays + 1) * sizeof(*displays));
599  if (displays) {
600  index = _this->num_displays++;
601  displays[index] = *display;
602  displays[index].device = _this;
603  _this->displays = displays;
604 
605  if (display->name) {
606  displays[index].name = SDL_strdup(display->name);
607  } else {
608  char name[32];
609 
610  SDL_itoa(index, name, 10);
611  displays[index].name = SDL_strdup(name);
612  }
613  } else {
614  SDL_OutOfMemory();
615  }
616  return index;
617 }
#define SDL_itoa
GLuint const GLchar * name
#define SDL_realloc
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
SDL_VideoDevice * device
Definition: SDL_sysvideo.h:134
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:293
GLuint index
#define SDL_OutOfMemory()
Definition: SDL_error.h:52
#define SDL_strdup

§ SDL_ComputeDiagonalDPI()

float SDL_ComputeDiagonalDPI ( int  hpix,
int  vpix,
float  hinches,
float  vinches 
)

Definition at line 3783 of file SDL_video.c.

References SDL_sqrt.

3784 {
3785  float den2 = hinches * hinches + vinches * vinches;
3786  if ( den2 <= 0.0f ) {
3787  return 0.0f;
3788  }
3789 
3790  return (float)(SDL_sqrt((double)hpix * (double)hpix + (double)vpix * (double)vpix) /
3791  SDL_sqrt((double)den2));
3792 }
GLfloat f
#define SDL_sqrt

§ SDL_GetDisplayDriverData()

void* SDL_GetDisplayDriverData ( int  displayIndex)

Definition at line 645 of file SDL_video.c.

References CHECK_DISPLAY_INDEX, SDL_VideoDevice::displays, SDL_VideoDisplay::driverdata, and NULL.

646 {
647  CHECK_DISPLAY_INDEX(displayIndex, NULL);
648 
649  return _this->displays[displayIndex].driverdata;
650 }
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:293
#define NULL
Definition: begin_code.h:143
#define CHECK_DISPLAY_INDEX(displayIndex, retval)
Definition: SDL_video.c:130

§ SDL_GetDisplayForWindow()

SDL_VideoDisplay* SDL_GetDisplayForWindow ( SDL_Window window)

Definition at line 1058 of file SDL_video.c.

References SDL_VideoDevice::displays, NULL, and SDL_GetWindowDisplayIndex().

Referenced by SDL_CreateWindow(), SDL_DestroyWindow(), SDL_GetWindowDisplayMode(), SDL_GetWindowPixelFormat(), SDL_SetWindowDisplayMode(), and SDL_UpdateFullscreenMode().

1059 {
1060  int displayIndex = SDL_GetWindowDisplayIndex(window);
1061  if (displayIndex >= 0) {
1062  return &_this->displays[displayIndex];
1063  } else {
1064  return NULL;
1065  }
1066 }
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
SDL_VideoDisplay * displays
Definition: SDL_sysvideo.h:293
#define NULL
Definition: begin_code.h:143
int SDL_GetWindowDisplayIndex(SDL_Window *window)
Get the display index associated with a window.
Definition: SDL_video.c:998

§ SDL_GetFocusWindow()

SDL_Window* SDL_GetFocusWindow ( void  )

Definition at line 2534 of file SDL_video.c.

References SDL_Window::flags, SDL_Window::next, NULL, SDL_WINDOW_INPUT_FOCUS, window, and SDL_VideoDevice::windows.

Referenced by SDL_PromptAssertion(), SDL_StartTextInput(), and SDL_StopTextInput().

2535 {
2536  SDL_Window *window;
2537 
2538  if (!_this) {
2539  return NULL;
2540  }
2541  for (window = _this->windows; window; window = window->next) {
2542  if (window->flags & SDL_WINDOW_INPUT_FOCUS) {
2543  return window;
2544  }
2545  }
2546  return NULL;
2547 }
SDL_Window * next
Definition: SDL_sysvideo.h:112
static SDL_Window * window
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
SDL_Window * windows
Definition: SDL_sysvideo.h:294
#define NULL
Definition: begin_code.h:143
The type used to identify a window.
Definition: SDL_sysvideo.h:71
Uint32 flags
Definition: SDL_sysvideo.h:81

§ SDL_GetVideoDevice()

SDL_VideoDevice* SDL_GetVideoDevice ( void  )

Definition at line 571 of file SDL_video.c.

References _this.

Referenced by SDL_CreateShapedWindow(), SDL_GetClipboardText(), SDL_HasClipboardText(), SDL_PumpEvents(), SDL_SetClipboardText(), SDL_SetKeyboardFocus(), and SDL_SetWindowShape().

572 {
573  return _this;
574 }
static SDL_VideoDevice * _this
Definition: SDL_video.c:118

§ SDL_OnWindowEnter()

void SDL_OnWindowEnter ( SDL_Window window)

Definition at line 2472 of file SDL_video.c.

References SDL_VideoDevice::OnWindowEnter.

Referenced by SDL_SendWindowEvent().

2473 {
2474  if (_this->OnWindowEnter) {
2475  _this->OnWindowEnter(_this, window);
2476  }
2477 }
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
void(* OnWindowEnter)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:231

§ SDL_OnWindowFocusGained()

void SDL_OnWindowFocusGained ( SDL_Window window)

Definition at line 2485 of file SDL_video.c.

References SDL_Window::gamma, SDL_Window::h, SDL_Mouse::relative_mode, SDL_GetMouse(), SDL_SetMouseFocus(), SDL_UpdateWindowGrab(), SDL_WarpMouseInWindow, SDL_VideoDevice::SetWindowGammaRamp, and SDL_Window::w.

Referenced by SDL_SendWindowEvent().

2486 {
2487  SDL_Mouse *mouse = SDL_GetMouse();
2488 
2489  if (window->gamma && _this->SetWindowGammaRamp) {
2490  _this->SetWindowGammaRamp(_this, window, window->gamma);
2491  }
2492 
2493  if (mouse && mouse->relative_mode) {
2494  SDL_SetMouseFocus(window);
2495  SDL_WarpMouseInWindow(window, window->w/2, window->h/2);
2496  }
2497 
2498  SDL_UpdateWindowGrab(window);
2499 }
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:66
void SDL_SetMouseFocus(SDL_Window *window)
Definition: SDL_mouse.c:103
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
SDL_bool relative_mode
Definition: SDL_mouse_c.h:84
void SDL_UpdateWindowGrab(SDL_Window *window)
Definition: SDL_video.c:2369
#define SDL_WarpMouseInWindow
Uint16 * gamma
Definition: SDL_sysvideo.h:92
int(* SetWindowGammaRamp)(_THIS, SDL_Window *window, const Uint16 *ramp)
Definition: SDL_sysvideo.h:224

§ SDL_OnWindowFocusLost()

void SDL_OnWindowFocusLost ( SDL_Window window)

Definition at line 2518 of file SDL_video.c.

References SDL_Window::gamma, SDL_Window::saved_gamma, SDL_MinimizeWindow(), SDL_UpdateWindowGrab(), SDL_VideoDevice::SetWindowGammaRamp, and ShouldMinimizeOnFocusLoss().

Referenced by SDL_SendWindowEvent().

2519 {
2520  if (window->gamma && _this->SetWindowGammaRamp) {
2521  _this->SetWindowGammaRamp(_this, window, window->saved_gamma);
2522  }
2523 
2524  SDL_UpdateWindowGrab(window);
2525 
2526  if (ShouldMinimizeOnFocusLoss(window)) {
2527  SDL_MinimizeWindow(window);
2528  }
2529 }
Uint16 * saved_gamma
Definition: SDL_sysvideo.h:93
void SDL_MinimizeWindow(SDL_Window *window)
Minimize a window to an iconic representation.
Definition: SDL_video.c:2078
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
void SDL_UpdateWindowGrab(SDL_Window *window)
Definition: SDL_video.c:2369
Uint16 * gamma
Definition: SDL_sysvideo.h:92
int(* SetWindowGammaRamp)(_THIS, SDL_Window *window, const Uint16 *ramp)
Definition: SDL_sysvideo.h:224
static SDL_bool ShouldMinimizeOnFocusLoss(SDL_Window *window)
Definition: SDL_video.c:2502

§ SDL_OnWindowHidden()

void SDL_OnWindowHidden ( SDL_Window window)

Definition at line 2437 of file SDL_video.c.

References SDL_FALSE, and SDL_UpdateFullscreenMode().

Referenced by SDL_SendWindowEvent().

2438 {
2440 }
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1152

§ SDL_OnWindowLeave()

void SDL_OnWindowLeave ( SDL_Window window)

Definition at line 2480 of file SDL_video.c.

Referenced by SDL_SendWindowEvent().

2481 {
2482 }

§ SDL_OnWindowMinimized()

void SDL_OnWindowMinimized ( SDL_Window window)

Definition at line 2450 of file SDL_video.c.

References SDL_FALSE, and SDL_UpdateFullscreenMode().

Referenced by SDL_SendWindowEvent().

2451 {
2453 }
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1152

§ SDL_OnWindowResized()

void SDL_OnWindowResized ( SDL_Window window)

Definition at line 2443 of file SDL_video.c.

References SDL_Window::h, SDL_FALSE, SDL_SendWindowEvent(), SDL_WINDOWEVENT_SIZE_CHANGED, SDL_Window::surface_valid, and SDL_Window::w.

Referenced by SDL_SendWindowEvent(), SDL_SetWindowSize(), and SDL_UpdateFullscreenMode().

2444 {
2445  window->surface_valid = SDL_FALSE;
2446  SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SIZE_CHANGED, window->w, window->h);
2447 }
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
SDL_bool surface_valid
Definition: SDL_sysvideo.h:96

§ SDL_OnWindowRestored()

void SDL_OnWindowRestored ( SDL_Window window)

Definition at line 2456 of file SDL_video.c.

References FULLSCREEN_VISIBLE, SDL_TRUE, and SDL_UpdateFullscreenMode().

Referenced by SDL_OnWindowShown(), and SDL_SendWindowEvent().

2457 {
2458  /*
2459  * FIXME: Is this fine to just remove this, or should it be preserved just
2460  * for the fullscreen case? In principle it seems like just hiding/showing
2461  * windows shouldn't affect the stacking order; maybe the right fix is to
2462  * re-decouple OnWindowShown and OnWindowRestored.
2463  */
2464  /*SDL_RaiseWindow(window);*/
2465 
2466  if (FULLSCREEN_VISIBLE(window)) {
2468  }
2469 }
#define FULLSCREEN_VISIBLE(W)
Definition: SDL_sysvideo.h:114
static int SDL_UpdateFullscreenMode(SDL_Window *window, SDL_bool fullscreen)
Definition: SDL_video.c:1152

§ SDL_OnWindowShown()

void SDL_OnWindowShown ( SDL_Window window)

Definition at line 2431 of file SDL_video.c.

References SDL_OnWindowRestored().

Referenced by SDL_SendWindowEvent().

2432 {
2433  SDL_OnWindowRestored(window);
2434 }
void SDL_OnWindowRestored(SDL_Window *window)
Definition: SDL_video.c:2456

§ SDL_RecreateWindow()

int SDL_RecreateWindow ( SDL_Window window,
Uint32  flags 
)

Definition at line 1509 of file SDL_video.c.

References CREATE_FLAGS, SDL_VideoDevice::CreateWindow, SDL_VideoDevice::DestroyWindow, SDL_VideoDevice::DestroyWindowFramebuffer, SDL_Surface::flags, SDL_Window::flags, SDL_VideoDevice::GL_CreateContext, SDL_Window::hit_test, SDL_Window::icon, SDL_Window::is_destroying, SDL_Window::last_fullscreen_flags, NULL, SDL_DONTFREE, SDL_FALSE, SDL_FinishWindowCreation(), SDL_FreeSurface, SDL_GL_LoadLibrary(), SDL_GL_UnloadLibrary(), SDL_HideWindow(), SDL_SetError, SDL_TRUE, SDL_WINDOW_FOREIGN, SDL_WINDOW_HIDDEN, SDL_WINDOW_OPENGL, SDL_VideoDevice::SetWindowHitTest, SDL_VideoDevice::SetWindowIcon, SDL_VideoDevice::SetWindowTitle, SDL_Window::surface, and SDL_Window::title.

1510 {
1511  SDL_bool loaded_opengl = SDL_FALSE;
1512 
1514  return SDL_SetError("No OpenGL support in video driver");
1515  }
1516 
1517  if (window->flags & SDL_WINDOW_FOREIGN) {
1518  /* Can't destroy and re-create foreign windows, hrm */
1520  } else {
1522  }
1523 
1524  /* Restore video mode, etc. */
1525  SDL_HideWindow(window);
1526 
1527  /* Tear down the old native window */
1528  if (window->surface) {
1529  window->surface->flags &= ~SDL_DONTFREE;
1530  SDL_FreeSurface(window->surface);
1531  window->surface = NULL;
1532  }
1535  }
1537  _this->DestroyWindow(_this, window);
1538  }
1539 
1540  if ((window->flags & SDL_WINDOW_OPENGL) != (flags & SDL_WINDOW_OPENGL)) {
1541  if (flags & SDL_WINDOW_OPENGL) {
1542  if (SDL_GL_LoadLibrary(NULL) < 0) {
1543  return -1;
1544  }
1545  loaded_opengl = SDL_TRUE;
1546  } else {
1548  }
1549  }
1550 
1551  window->flags = ((flags & CREATE_FLAGS) | SDL_WINDOW_HIDDEN);
1552  window->last_fullscreen_flags = window->flags;
1553  window->is_destroying = SDL_FALSE;
1554 
1555  if (_this->CreateWindow && !(flags & SDL_WINDOW_FOREIGN)) {
1556  if (_this->CreateWindow(_this, window) < 0) {
1557  if (loaded_opengl) {
1559  window->flags &= ~SDL_WINDOW_OPENGL;
1560  }
1561  return -1;
1562  }
1563  }
1564 
1565  if (flags & SDL_WINDOW_FOREIGN) {
1566  window->flags |= SDL_WINDOW_FOREIGN;
1567  }
1568 
1569  if (_this->SetWindowTitle && window->title) {
1570  _this->SetWindowTitle(_this, window);
1571  }
1572 
1573  if (_this->SetWindowIcon && window->icon) {
1574  _this->SetWindowIcon(_this, window, window->icon);
1575  }
1576 
1577  if (window->hit_test) {
1578  _this->SetWindowHitTest(window, SDL_TRUE);
1579  }
1580 
1582 
1583  return 0;
1584 }
int(* SetWindowHitTest)(SDL_Window *window, SDL_bool enabled)
Definition: SDL_sysvideo.h:287
int SDL_GL_LoadLibrary(const char *path)
Dynamically load an OpenGL library.
Definition: SDL_video.c:2713
#define SDL_DONTFREE
Definition: SDL_surface.h:55
SDL_bool is_destroying
Definition: SDL_sysvideo.h:99
void SDL_HideWindow(SDL_Window *window)
Hide a window.
Definition: SDL_video.c:2030
Uint32 flags
Definition: SDL_surface.h:71
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
#define CREATE_FLAGS
Definition: SDL_video.c:1306
SDL_GLContext(* GL_CreateContext)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:250
#define SDL_FreeSurface
void SDL_GL_UnloadLibrary(void)
Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
Definition: SDL_video.c:2764
void(* DestroyWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:227
void(* SetWindowIcon)(_THIS, SDL_Window *window, SDL_Surface *icon)
Definition: SDL_sysvideo.h:206
char * title
Definition: SDL_sysvideo.h:75
void(* DestroyWindowFramebuffer)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:230
#define NULL
Definition: begin_code.h:143
SDL_bool
Definition: SDL_stdinc.h:130
SDL_HitTest hit_test
Definition: SDL_sysvideo.h:104
Uint32 last_fullscreen_flags
Definition: SDL_sysvideo.h:82
#define SDL_SetError
SDL_Surface * icon
Definition: SDL_sysvideo.h:76
int(* CreateWindow)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:203
static void SDL_FinishWindowCreation(SDL_Window *window, Uint32 flags)
Definition: SDL_video.c:1310
GLbitfield flags
void(* SetWindowTitle)(_THIS, SDL_Window *window)
Definition: SDL_sysvideo.h:205
Uint32 flags
Definition: SDL_sysvideo.h:81
SDL_Surface * surface
Definition: SDL_sysvideo.h:95

§ SDL_ShouldAllowTopmost()

SDL_bool SDL_ShouldAllowTopmost ( void  )

Definition at line 3761 of file SDL_video.c.

References SDL_GetHintBoolean, SDL_HINT_ALLOW_TOPMOST, and SDL_TRUE.

3762 {
3764 }
#define SDL_GetHintBoolean
#define SDL_HINT_ALLOW_TOPMOST
If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it...
Definition: SDL_hints.h:384

§ SDL_UpdateWindowGrab()

void SDL_UpdateWindowGrab ( SDL_Window window)

Definition at line 2369 of file SDL_video.c.

References SDL_Window::flags, SDL_VideoDevice::grabbed_window, NULL, SDL_FALSE, SDL_GetMouse(), SDL_TRUE, SDL_WINDOW_INPUT_FOCUS, SDL_WINDOW_INPUT_GRABBED, SDL_VideoDevice::SetWindowGrab, and window.

Referenced by SDL_OnWindowFocusGained(), SDL_OnWindowFocusLost(), SDL_SetRelativeMouseMode(), and SDL_SetWindowGrab().

2370 {
2371  SDL_Window *grabbed_window;
2372  SDL_bool grabbed;
2373  if ((SDL_GetMouse()->relative_mode || (window->flags & SDL_WINDOW_INPUT_GRABBED)) &&
2374  (window->flags & SDL_WINDOW_INPUT_FOCUS)) {
2375  grabbed = SDL_TRUE;
2376  } else {
2377  grabbed = SDL_FALSE;
2378  }
2379 
2380  grabbed_window = _this->grabbed_window;
2381  if (grabbed) {
2382  if (grabbed_window && (grabbed_window != window)) {
2383  /* stealing a grab from another window! */
2384  grabbed_window->flags &= ~SDL_WINDOW_INPUT_GRABBED;
2385  if (_this->SetWindowGrab) {
2386  _this->SetWindowGrab(_this, grabbed_window, SDL_FALSE);
2387  }
2388  }
2390  } else if (grabbed_window == window) {
2391  _this->grabbed_window = NULL; /* ungrabbing. */
2392  }
2393 
2394  if (_this->SetWindowGrab) {
2395  _this->SetWindowGrab(_this, window, grabbed);
2396  }
2397 }
SDL_Mouse * SDL_GetMouse(void)
Definition: SDL_mouse.c:66
static SDL_Window * window
static SDL_VideoDevice * _this
Definition: SDL_video.c:118
#define NULL
Definition: begin_code.h:143
SDL_bool
Definition: SDL_stdinc.h:130
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_Window * grabbed_window
Definition: SDL_sysvideo.h:295
Uint32 flags
Definition: SDL_sysvideo.h:81
void(* SetWindowGrab)(_THIS, SDL_Window *window, SDL_bool grabbed)
Definition: SDL_sysvideo.h:226