Commit 018af55e authored by Sam Lantinga's avatar Sam Lantinga

Window coordinates are in the global space and windows are not tied to a particular display.

Also added Ctrl-Enter keybinding to the test code to toggle fullscreen mode for testing.
parent 2c021d9b
...@@ -113,12 +113,20 @@ typedef enum ...@@ -113,12 +113,20 @@ typedef enum
/** /**
* \brief Used to indicate that you don't care what the window position is. * \brief Used to indicate that you don't care what the window position is.
*/ */
#define SDL_WINDOWPOS_UNDEFINED 0x7FFFFFF #define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000
#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X))
#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0)
#define SDL_WINDOWPOS_ISUNDEFINED(X) \
(((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK)
/** /**
* \brief Used to indicate that the window position should be centered. * \brief Used to indicate that the window position should be centered.
*/ */
#define SDL_WINDOWPOS_CENTERED 0x7FFFFFE #define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000
#define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X))
#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0)
#define SDL_WINDOWPOS_ISCENTERED(X) \
(((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK)
/** /**
* \brief Event subtype for window events * \brief Event subtype for window events
...@@ -303,6 +311,14 @@ extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_Disp ...@@ -303,6 +311,14 @@ extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_Disp
*/ */
extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest);
/**
* \brief Get the display index associated with a window.
*
* \return the display index of the display containing the center of the
* window, or -1 on error.
*/
extern DECLSPEC int SDLCALL SDL_GetWindowDisplay(SDL_Window * window);
/** /**
* \brief Set the display mode used when a fullscreen window is visible. * \brief Set the display mode used when a fullscreen window is visible.
* *
...@@ -531,7 +547,7 @@ extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); ...@@ -531,7 +547,7 @@ extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window);
* \sa SDL_GetWindowDisplayMode() * \sa SDL_GetWindowDisplayMode()
*/ */
extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window, extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window,
int fullscreen); SDL_bool fullscreen);
/** /**
* \brief Get an SDL surface associated with the window. * \brief Get an SDL surface associated with the window.
......
...@@ -35,7 +35,7 @@ SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned ...@@ -35,7 +35,7 @@ SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned
SDL_Window *result = NULL; SDL_Window *result = NULL;
result = SDL_CreateWindow(title,-1000,-1000,w,h,(flags | SDL_WINDOW_BORDERLESS) & (~SDL_WINDOW_FULLSCREEN) & (~SDL_WINDOW_RESIZABLE) /*& (~SDL_WINDOW_SHOWN)*/); result = SDL_CreateWindow(title,-1000,-1000,w,h,(flags | SDL_WINDOW_BORDERLESS) & (~SDL_WINDOW_FULLSCREEN) & (~SDL_WINDOW_RESIZABLE) /*& (~SDL_WINDOW_SHOWN)*/);
if(result != NULL) { if(result != NULL) {
result->shaper = result->display->device->shape_driver.CreateShaper(result); result->shaper = SDL_GetVideoDevice()->shape_driver.CreateShaper(result);
if(result->shaper != NULL) { if(result->shaper != NULL) {
result->shaper->userx = x; result->shaper->userx = x;
result->shaper->usery = y; result->shaper->usery = y;
...@@ -240,7 +240,7 @@ SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *sh ...@@ -240,7 +240,7 @@ SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *sh
if(shape_mode != NULL) if(shape_mode != NULL)
window->shaper->mode = *shape_mode; window->shaper->mode = *shape_mode;
result = window->display->device->shape_driver.SetWindowShape(window->shaper,shape,shape_mode); result = SDL_GetVideoDevice()->shape_driver.SetWindowShape(window->shaper,shape,shape_mode);
window->shaper->hasshape = SDL_TRUE; window->shaper->hasshape = SDL_TRUE;
if(window->shaper->userx != 0 && window->shaper->usery != 0) { if(window->shaper->userx != 0 && window->shaper->usery != 0) {
SDL_SetWindowPosition(window,window->shaper->userx,window->shaper->usery); SDL_SetWindowPosition(window,window->shaper->userx,window->shaper->usery);
......
...@@ -76,8 +76,6 @@ struct SDL_Window ...@@ -76,8 +76,6 @@ struct SDL_Window
int w, h; int w, h;
Uint32 flags; Uint32 flags;
SDL_VideoDisplay *display;
SDL_DisplayMode fullscreen_mode; SDL_DisplayMode fullscreen_mode;
SDL_Surface *surface; SDL_Surface *surface;
...@@ -110,7 +108,6 @@ struct SDL_VideoDisplay ...@@ -110,7 +108,6 @@ struct SDL_VideoDisplay
SDL_DisplayMode current_mode; SDL_DisplayMode current_mode;
SDL_bool updating_fullscreen; SDL_bool updating_fullscreen;
SDL_Window *windows;
SDL_Window *fullscreen_window; SDL_Window *fullscreen_window;
SDL_VideoDevice *device; SDL_VideoDevice *device;
...@@ -153,8 +150,7 @@ struct SDL_VideoDevice ...@@ -153,8 +150,7 @@ struct SDL_VideoDevice
int (*GetDisplayBounds) (_THIS, SDL_VideoDisplay * display, SDL_Rect * rect); int (*GetDisplayBounds) (_THIS, SDL_VideoDisplay * display, SDL_Rect * rect);
/* /*
* Get a list of the available display modes. e.g. * Get a list of the available display modes for a display.
* SDL_AddDisplayMode(_this->current_display, mode)
*/ */
void (*GetDisplayModes) (_THIS, SDL_VideoDisplay * display); void (*GetDisplayModes) (_THIS, SDL_VideoDisplay * display);
...@@ -236,7 +232,7 @@ struct SDL_VideoDevice ...@@ -236,7 +232,7 @@ struct SDL_VideoDevice
SDL_bool suspend_screensaver; SDL_bool suspend_screensaver;
int num_displays; int num_displays;
SDL_VideoDisplay *displays; SDL_VideoDisplay *displays;
int current_display; SDL_Window *windows;
Uint8 window_magic; Uint8 window_magic;
Uint32 next_object_id; Uint32 next_object_id;
char * clipboard_text; char * clipboard_text;
...@@ -326,6 +322,7 @@ extern SDL_VideoDevice *SDL_GetVideoDevice(void); ...@@ -326,6 +322,7 @@ extern SDL_VideoDevice *SDL_GetVideoDevice(void);
extern int SDL_AddBasicVideoDisplay(const SDL_DisplayMode * desktop_mode); extern int SDL_AddBasicVideoDisplay(const SDL_DisplayMode * desktop_mode);
extern int SDL_AddVideoDisplay(const SDL_VideoDisplay * display); extern int SDL_AddVideoDisplay(const SDL_VideoDisplay * display);
extern SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode * mode); extern SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay *display, const SDL_DisplayMode * mode);
extern SDL_VideoDisplay *SDL_GetDisplayForWindow(SDL_Window *window);
extern int SDL_RecreateWindow(SDL_Window * window, Uint32 flags); extern int SDL_RecreateWindow(SDL_Window * window, Uint32 flags);
......
This diff is collapsed.
...@@ -72,7 +72,7 @@ SDL_GLContext ...@@ -72,7 +72,7 @@ SDL_GLContext
Cocoa_GL_CreateContext(_THIS, SDL_Window * window) Cocoa_GL_CreateContext(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool; NSAutoreleasePool *pool;
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
SDL_DisplayData *displaydata = (SDL_DisplayData *)display->driverdata; SDL_DisplayData *displaydata = (SDL_DisplayData *)display->driverdata;
NSOpenGLPixelFormatAttribute attr[32]; NSOpenGLPixelFormatAttribute attr[32];
NSOpenGLPixelFormat *fmt; NSOpenGLPixelFormat *fmt;
......
...@@ -86,7 +86,6 @@ struct SDL_WindowData ...@@ -86,7 +86,6 @@ struct SDL_WindowData
SDL_Window *window; SDL_Window *window;
NSWindow *nswindow; NSWindow *nswindow;
SDL_bool created; SDL_bool created;
CGDirectDisplayID display;
Cocoa_WindowListener *listener; Cocoa_WindowListener *listener;
struct SDL_VideoData *videodata; struct SDL_VideoData *videodata;
}; };
......
...@@ -403,8 +403,6 @@ SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created ...@@ -403,8 +403,6 @@ SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created
{ {
NSAutoreleasePool *pool; NSAutoreleasePool *pool;
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata; SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
SDL_VideoDisplay *display = window->display;
SDL_DisplayData *displaydata = (SDL_DisplayData *) display->driverdata;
SDL_WindowData *data; SDL_WindowData *data;
/* Allocate the window data */ /* Allocate the window data */
...@@ -416,7 +414,6 @@ SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created ...@@ -416,7 +414,6 @@ SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created
data->window = window; data->window = window;
data->nswindow = nswindow; data->nswindow = nswindow;
data->created = created; data->created = created;
data->display = displaydata->display;
data->videodata = videodata; data->videodata = videodata;
pool = [[NSAutoreleasePool alloc] init]; pool = [[NSAutoreleasePool alloc] init];
...@@ -438,9 +435,8 @@ SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created ...@@ -438,9 +435,8 @@ SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created
[contentView release]; [contentView release];
ConvertNSRect(&rect); ConvertNSRect(&rect);
Cocoa_GetDisplayBounds(_this, display, &bounds); window->x = (int)rect.origin.x;
window->x = (int)rect.origin.x - bounds.x; window->y = (int)rect.origin.y;
window->y = (int)rect.origin.y - bounds.y;
window->w = (int)rect.size.width; window->w = (int)rect.size.width;
window->h = (int)rect.size.height; window->h = (int)rect.size.height;
} }
...@@ -493,27 +489,27 @@ Cocoa_CreateWindow(_THIS, SDL_Window * window) ...@@ -493,27 +489,27 @@ Cocoa_CreateWindow(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow; NSWindow *nswindow;
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
NSRect rect; NSRect rect;
SDL_Rect bounds; SDL_Rect bounds;
unsigned int style; unsigned int style;
Cocoa_GetDisplayBounds(_this, display, &bounds); Cocoa_GetDisplayBounds(_this, display, &bounds);
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->x == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->x)) {
rect.origin.x = bounds.x + (bounds.w - window->w) / 2; rect.origin.x = bounds.x + (bounds.w - window->w) / 2;
} else if (window->x == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->x)) {
rect.origin.x = bounds.x; rect.origin.x = bounds.x;
} else { } else {
rect.origin.x = bounds.x + window->x; rect.origin.x = window->x;
} }
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->y == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->y)) {
rect.origin.y = bounds.y + (bounds.h - window->h) / 2; rect.origin.y = bounds.y + (bounds.h - window->h) / 2;
} else if (window->x == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->y)) {
rect.origin.y = bounds.y; rect.origin.y = bounds.y;
} else { } else {
rect.origin.y = bounds.y + window->y; rect.origin.y = window->y;
} }
rect.size.width = window->w; rect.size.width = window->w;
rect.size.height = window->h; rect.size.height = window->h;
...@@ -599,22 +595,22 @@ Cocoa_SetWindowPosition(_THIS, SDL_Window * window) ...@@ -599,22 +595,22 @@ Cocoa_SetWindowPosition(_THIS, SDL_Window * window)
{ {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow;
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
NSRect rect; NSRect rect;
SDL_Rect bounds; SDL_Rect bounds;
Cocoa_GetDisplayBounds(_this, display, &bounds); Cocoa_GetDisplayBounds(_this, display, &bounds);
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->x == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->x)) {
rect.origin.x = bounds.x + (bounds.w - window->w) / 2; rect.origin.x = bounds.x + (bounds.w - window->w) / 2;
} else { } else {
rect.origin.x = bounds.x + window->x; rect.origin.x = window->x;
} }
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->y == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->y)) {
rect.origin.y = bounds.y + (bounds.h - window->h) / 2; rect.origin.y = bounds.y + (bounds.h - window->h) / 2;
} else { } else {
rect.origin.y = bounds.y + window->y; rect.origin.y = window->y;
} }
rect.size.width = window->w; rect.size.width = window->w;
rect.size.height = window->h; rect.size.height = window->h;
......
...@@ -135,7 +135,7 @@ DirectFB_SetContext(_THIS, SDL_Window *window) ...@@ -135,7 +135,7 @@ DirectFB_SetContext(_THIS, SDL_Window *window)
* This has simply no effect. * This has simply no effect.
*/ */
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata; DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata;
/* FIXME: should we handle the error */ /* FIXME: should we handle the error */
......
...@@ -170,7 +170,7 @@ DirectFB_ShowCursor(SDL_Cursor * cursor) ...@@ -170,7 +170,7 @@ DirectFB_ShowCursor(SDL_Cursor * cursor)
if (!window) if (!window)
return -1; return -1;
else { else {
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
if (display) { if (display) {
DFB_DisplayData *dispdata = DFB_DisplayData *dispdata =
...@@ -222,7 +222,7 @@ DirectFB_FreeCursor(SDL_Cursor * cursor) ...@@ -222,7 +222,7 @@ DirectFB_FreeCursor(SDL_Cursor * cursor)
static void static void
DirectFB_WarpMouse(SDL_Mouse * mouse, SDL_Window * window, int x, int y) DirectFB_WarpMouse(SDL_Mouse * mouse, SDL_Window * window, int x, int y)
{ {
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata; DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata;
DFB_WindowData *windata = (DFB_WindowData *) window->driverdata; DFB_WindowData *windata = (DFB_WindowData *) window->driverdata;
DFBResult ret; DFBResult ret;
......
...@@ -301,7 +301,7 @@ SDL_Renderer * ...@@ -301,7 +301,7 @@ SDL_Renderer *
DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags) DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags)
{ {
SDL_DFB_WINDOWDATA(window); SDL_DFB_WINDOWDATA(window);
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
SDL_Renderer *renderer = NULL; SDL_Renderer *renderer = NULL;
DirectFB_RenderData *data = NULL; DirectFB_RenderData *data = NULL;
DFBSurfaceCapabilities scaps; DFBSurfaceCapabilities scaps;
...@@ -409,7 +409,7 @@ DirectFB_AcquireVidLayer(SDL_Renderer * renderer, SDL_Texture * texture) ...@@ -409,7 +409,7 @@ DirectFB_AcquireVidLayer(SDL_Renderer * renderer, SDL_Texture * texture)
{ {
//SDL_DFB_RENDERERDATA(renderer); //SDL_DFB_RENDERERDATA(renderer);
SDL_Window *window = renderer->window; SDL_Window *window = renderer->window;
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
SDL_DFB_DEVICEDATA(display->device); SDL_DFB_DEVICEDATA(display->device);
DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata; DFB_DisplayData *dispdata = (DFB_DisplayData *) display->driverdata;
DirectFB_TextureData *data = texture->driverdata; DirectFB_TextureData *data = texture->driverdata;
...@@ -465,7 +465,7 @@ static int ...@@ -465,7 +465,7 @@ static int
DirectFB_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) DirectFB_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
{ {
SDL_Window *window = renderer->window; SDL_Window *window = renderer->window;
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
SDL_DFB_DEVICEDATA(display->device); SDL_DFB_DEVICEDATA(display->device);
DirectFB_TextureData *data; DirectFB_TextureData *data;
DFBSurfaceDescription dsc; DFBSurfaceDescription dsc;
...@@ -1129,7 +1129,7 @@ static void ...@@ -1129,7 +1129,7 @@ static void
DirectFB_DestroyRenderer(SDL_Renderer * renderer) DirectFB_DestroyRenderer(SDL_Renderer * renderer)
{ {
DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata; DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata;
SDL_VideoDisplay *display = renderer->window->display; SDL_VideoDisplay *display = renderer->SDL_GetDisplayForWindow(window);
#if 0 #if 0
if (display->palette) { if (display->palette) {
......
...@@ -62,17 +62,17 @@ DirectFB_CreateWindow(_THIS, SDL_Window * window) ...@@ -62,17 +62,17 @@ DirectFB_CreateWindow(_THIS, SDL_Window * window)
bshaped = 1; bshaped = 1;
/* Fill the window description. */ /* Fill the window description. */
if (window->x == SDL_WINDOWPOS_CENTERED) { if (SDL_WINDOWPOS_ISCENTERED(window->x)) {
x = (dispdata->cw - window->w) / 2; x = (dispdata->cw - window->w) / 2;
} else if (window->x == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->x)) {
x = 0; x = 0;
} else { } else {
x = window->x; x = window->x;
} }
if (window->y == SDL_WINDOWPOS_CENTERED) { if (SDL_WINDOWPOS_ISCENTERED(window->y)) {
y = (dispdata->ch - window->h) / 2; y = (dispdata->ch - window->h) / 2;
} else if (window->y == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->y)) {
y = 0; y = 0;
} else { } else {
y = window->y; y = window->y;
...@@ -264,17 +264,17 @@ DirectFB_SetWindowPosition(_THIS, SDL_Window * window) ...@@ -264,17 +264,17 @@ DirectFB_SetWindowPosition(_THIS, SDL_Window * window)
SDL_DFB_DISPLAYDATA(window); SDL_DFB_DISPLAYDATA(window);
int x, y; int x, y;
if (window->x == SDL_WINDOWPOS_CENTERED) { if (SDL_WINDOWPOS_ISCENTERED(window->x)) {
x = (dispdata->cw - window->w) / 2; x = (dispdata->cw - window->w) / 2;
} else if (window->x == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->x)) {
x = 0; x = 0;
} else { } else {
x = window->x; x = window->x;
} }
if (window->y == SDL_WINDOWPOS_CENTERED) { if (SDL_WINDOWPOS_ISCENTERED(window->y)) {
y = (dispdata->ch - window->h) / 2; y = (dispdata->ch - window->h) / 2;
} else if (window->y == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->y)) {
y = 0; y = 0;
} else { } else {
y = window->y; y = window->y;
...@@ -358,7 +358,7 @@ void ...@@ -358,7 +358,7 @@ void
DirectFB_MaximizeWindow(_THIS, SDL_Window * window) DirectFB_MaximizeWindow(_THIS, SDL_Window * window)
{ {
SDL_DFB_WINDOWDATA(window); SDL_DFB_WINDOWDATA(window);
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
DFBWindowOptions wopts; DFBWindowOptions wopts;
SDL_DFB_CHECK(windata->dfbwin->GetPosition(windata->dfbwin, SDL_DFB_CHECK(windata->dfbwin->GetPosition(windata->dfbwin,
...@@ -526,7 +526,7 @@ DirectFB_AdjustWindowSurface(SDL_Window * window) ...@@ -526,7 +526,7 @@ DirectFB_AdjustWindowSurface(SDL_Window * window)
if (adjust) { if (adjust) {
#if SDL_DIRECTFB_OPENGL #if SDL_DIRECTFB_OPENGL
DirectFB_GL_FreeWindowContexts(window->display->device, window); DirectFB_GL_FreeWindowContexts(SDL_GetVideoDevice(), window);
#endif #endif
#if (DFB_VERSION_ATLEAST(1,2,1)) #if (DFB_VERSION_ATLEAST(1,2,1))
...@@ -552,10 +552,10 @@ DirectFB_AdjustWindowSurface(SDL_Window * window) ...@@ -552,10 +552,10 @@ DirectFB_AdjustWindowSurface(SDL_Window * window)
GetSubSurface(windata->window_surface, GetSubSurface(windata->window_surface,
&windata->client, &windata->surface)); &windata->client, &windata->surface));
#endif #endif
DirectFB_WM_RedrawLayout(window->display->device, window); DirectFB_WM_RedrawLayout(SDL_GetVideoDevice(), window);
#if SDL_DIRECTFB_OPENGL #if SDL_DIRECTFB_OPENGL
DirectFB_GL_ReAllocWindowContexts(window->display->device, window); DirectFB_GL_ReAllocWindowContexts(SDL_GetVideoDevice(), window);
#endif #endif
} }
error: error:
......
...@@ -107,7 +107,7 @@ typedef struct ...@@ -107,7 +107,7 @@ typedef struct
SDL_Renderer * SDL_Renderer *
NDS_CreateRenderer(SDL_Window * window, Uint32 flags) NDS_CreateRenderer(SDL_Window * window, Uint32 flags)
{ {
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
SDL_DisplayMode *displayMode = &display->current_mode; SDL_DisplayMode *displayMode = &display->current_mode;
SDL_Renderer *renderer; SDL_Renderer *renderer;
NDS_RenderData *data; NDS_RenderData *data;
...@@ -462,7 +462,7 @@ NDS_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -462,7 +462,7 @@ NDS_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
NDS_RenderData *data = (NDS_RenderData *) renderer->driverdata; NDS_RenderData *data = (NDS_RenderData *) renderer->driverdata;
NDS_TextureData *txdat = (NDS_TextureData *) texture->driverdata; NDS_TextureData *txdat = (NDS_TextureData *) texture->driverdata;
SDL_Window *window = renderer->window; SDL_Window *window = renderer->window;
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
int Bpp = SDL_BYTESPERPIXEL(texture->format); int Bpp = SDL_BYTESPERPIXEL(texture->format);
if (txdat->type == NDSTX_BG) { if (txdat->type == NDSTX_BG) {
...@@ -487,7 +487,7 @@ NDS_RenderPresent(SDL_Renderer * renderer) ...@@ -487,7 +487,7 @@ NDS_RenderPresent(SDL_Renderer * renderer)
{ {
NDS_RenderData *data = (NDS_RenderData *) renderer->driverdata; NDS_RenderData *data = (NDS_RenderData *) renderer->driverdata;
SDL_Window *window = renderer->window; SDL_Window *window = renderer->window;
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
/* update sprites */ /* update sprites */
// NDS_OAM_Update(&(data->oam_copy), data->sub); // NDS_OAM_Update(&(data->oam_copy), data->sub);
......
...@@ -417,7 +417,7 @@ PND_gl_createcontext(_THIS, SDL_Window * window) ...@@ -417,7 +417,7 @@ PND_gl_createcontext(_THIS, SDL_Window * window)
SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata;
SDL_DisplayData *didata = SDL_DisplayData *didata =
(SDL_DisplayData *) window->display->driverdata; (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
EGLBoolean status; EGLBoolean status;
int32_t gfstatus; int32_t gfstatus;
EGLint configs; EGLint configs;
...@@ -816,7 +816,7 @@ PND_gl_swapwindow(_THIS, SDL_Window * window) ...@@ -816,7 +816,7 @@ PND_gl_swapwindow(_THIS, SDL_Window * window)
SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata;
SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata; SDL_WindowData *wdata = (SDL_WindowData *) window->driverdata;
SDL_DisplayData *didata = SDL_DisplayData *didata =
(SDL_DisplayData *) window->display->driverdata; (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
if (phdata->egl_initialized != SDL_TRUE) { if (phdata->egl_initialized != SDL_TRUE) {
......
...@@ -103,7 +103,7 @@ SDL_GLContext UIKit_GL_CreateContext(_THIS, SDL_Window * window) ...@@ -103,7 +103,7 @@ SDL_GLContext UIKit_GL_CreateContext(_THIS, SDL_Window * window)
{ {
SDL_uikitopenglview *view; SDL_uikitopenglview *view;
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
UIScreen *uiscreen = (UIScreen *) window->display->driverdata; UIScreen *uiscreen = (UIScreen *) SDL_GetDisplayForWindow(window)->driverdata;
UIWindow *uiwindow = data->uiwindow; UIWindow *uiwindow = data->uiwindow;
/* construct our view, passing in SDL's OpenGL configuration data */ /* construct our view, passing in SDL's OpenGL configuration data */
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bool created) static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bool created)
{ {
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
UIScreen *uiscreen = (UIScreen *) display->driverdata; UIScreen *uiscreen = (UIScreen *) display->driverdata;
SDL_WindowData *data; SDL_WindowData *data;
...@@ -85,9 +85,9 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo ...@@ -85,9 +85,9 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo
} }
int int
UIKit_CreateWindow(_THIS, SDL_Window *window) { UIKit_CreateWindow(_THIS, SDL_Window *window)
{
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
UIScreen *uiscreen = (UIScreen *) display->driverdata; UIScreen *uiscreen = (UIScreen *) display->driverdata;
// SDL currently puts this window at the start of display's linked list. We rely on this. // SDL currently puts this window at the start of display's linked list. We rely on this.
......
...@@ -46,7 +46,7 @@ static int ...@@ -46,7 +46,7 @@ static int
SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created)
{ {
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata; SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
SDL_WindowData *data; SDL_WindowData *data;
/* Allocate the window data */ /* Allocate the window data */
...@@ -93,10 +93,8 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) ...@@ -93,10 +93,8 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created)
point.x = 0; point.x = 0;
point.y = 0; point.y = 0;
if (ClientToScreen(hwnd, &point)) { if (ClientToScreen(hwnd, &point)) {
SDL_Rect bounds; window->x = point.x;
WIN_GetDisplayBounds(_this, display, &bounds); window->y = point.y;
window->x = point.x - bounds.x;
window->y = point.y - bounds.y;
} }
} }
{ {
...@@ -166,7 +164,7 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) ...@@ -166,7 +164,7 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created)
int int
WIN_CreateWindow(_THIS, SDL_Window * window) WIN_CreateWindow(_THIS, SDL_Window * window)
{ {
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
HWND hwnd; HWND hwnd;
RECT rect; RECT rect;
SDL_Rect bounds; SDL_Rect bounds;
...@@ -203,28 +201,28 @@ WIN_CreateWindow(_THIS, SDL_Window * window) ...@@ -203,28 +201,28 @@ WIN_CreateWindow(_THIS, SDL_Window * window)
} }
} }
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->x == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->x)) {
x = bounds.x + (bounds.w - w) / 2; x = bounds.x + (bounds.w - w) / 2;
} else if (window->x == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->x)) {
if (bounds.x == 0) { if (bounds.x == 0) {
x = CW_USEDEFAULT; x = CW_USEDEFAULT;
} else { } else {
x = bounds.x; x = bounds.x;
} }
} else { } else {
x = bounds.x + window->x + rect.left; x = window->x + rect.left;
} }
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->y == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->y)) {
y = bounds.y + (bounds.h - h) / 2; y = bounds.y + (bounds.h - h) / 2;
} else if (window->x == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->x)) {
if (bounds.x == 0) { if (bounds.x == 0) {
y = CW_USEDEFAULT; y = CW_USEDEFAULT;
} else { } else {
y = bounds.y; y = bounds.y;
} }
} else { } else {
y = bounds.y + window->y + rect.top; y = window->y + rect.top;
} }
hwnd = hwnd =
...@@ -366,7 +364,7 @@ WIN_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon) ...@@ -366,7 +364,7 @@ WIN_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon)
void void
WIN_SetWindowPosition(_THIS, SDL_Window * window) WIN_SetWindowPosition(_THIS, SDL_Window * window)
{ {
SDL_VideoDisplay *display = window->display; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
RECT rect; RECT rect;
SDL_Rect bounds; SDL_Rect bounds;
...@@ -406,16 +404,16 @@ WIN_SetWindowPosition(_THIS, SDL_Window * window) ...@@ -406,16 +404,16 @@ WIN_SetWindowPosition(_THIS, SDL_Window * window)
} }
} }
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->x == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->x)) {
x = bounds.x + (bounds.w - w) / 2; x = bounds.x + (bounds.w - w) / 2;
} else { } else {
x = bounds.x + window->x + rect.left; x = window->x + rect.left;
} }
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->y == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->y)) {
y = bounds.y + (bounds.h - h) / 2; y = bounds.y + (bounds.h - h) / 2;
} else { } else {
y = bounds.y + window->y + rect.top; y = window->y + rect.top;
} }
SetWindowPos(hwnd, top, x, y, 0, 0, (SWP_NOCOPYBITS | SWP_NOSIZE)); SetWindowPos(hwnd, top, x, y, 0, 0, (SWP_NOCOPYBITS | SWP_NOSIZE));
......
...@@ -38,16 +38,12 @@ ...@@ -38,16 +38,12 @@
static Window static Window
GetWindow(_THIS) GetWindow(_THIS)
{ {
SDL_VideoDisplay *display;
SDL_Window *window; SDL_Window *window;
display = _this->displays; window = _this->windows;
if (display) {
window = display->windows;
if (window) { if (window) {
return ((SDL_WindowData *) window->driverdata)->xwindow; return ((SDL_WindowData *) window->driverdata)->xwindow;
} }
}
return None; return None;
} }
......
...@@ -380,7 +380,7 @@ X11_GL_CreateContext(_THIS, SDL_Window * window) ...@@ -380,7 +380,7 @@ X11_GL_CreateContext(_THIS, SDL_Window * window)
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
Display *display = data->videodata->display; Display *display = data->videodata->display;
int screen = int screen =
((SDL_DisplayData *) window->display->driverdata)->screen; ((SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata)->screen;
XWindowAttributes xattr; XWindowAttributes xattr;
XVisualInfo v, *vinfo; XVisualInfo v, *vinfo;
int n; int n;
......
...@@ -90,7 +90,7 @@ X11_GetDisplaySize(_THIS, SDL_Window * window, int *w, int *h) ...@@ -90,7 +90,7 @@ X11_GetDisplaySize(_THIS, SDL_Window * window, int *w, int *h)
{ {
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
SDL_DisplayData *displaydata = SDL_DisplayData *displaydata =
(SDL_DisplayData *) window->display->driverdata; (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
XWindowAttributes attr; XWindowAttributes attr;
XGetWindowAttributes(data->display, RootWindow(data->display, displaydata->screen), &attr); XGetWindowAttributes(data->display, RootWindow(data->display, displaydata->screen), &attr);
...@@ -259,7 +259,7 @@ X11_CreateWindow(_THIS, SDL_Window * window) ...@@ -259,7 +259,7 @@ X11_CreateWindow(_THIS, SDL_Window * window)
{ {
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
SDL_DisplayData *displaydata = SDL_DisplayData *displaydata =
(SDL_DisplayData *) window->display->driverdata; (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
Display *display = data->display; Display *display = data->display;
int screen = displaydata->screen; int screen = displaydata->screen;
Visual *visual; Visual *visual;
...@@ -328,19 +328,19 @@ X11_CreateWindow(_THIS, SDL_Window * window) ...@@ -328,19 +328,19 @@ X11_CreateWindow(_THIS, SDL_Window * window)
xattr.colormap = XCreateColormap(display, RootWindow(display, screen), visual, AllocNone); xattr.colormap = XCreateColormap(display, RootWindow(display, screen), visual, AllocNone);
if (oldstyle_fullscreen if (oldstyle_fullscreen
|| window->x == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->x)) {
X11_GetDisplaySize(_this, window, &x, NULL); X11_GetDisplaySize(_this, window, &x, NULL);
x = (x - window->w) / 2; x = (x - window->w) / 2;
} else if (window->x == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->x)) {
x = 0; x = 0;
} else { } else {
x = window->x; x = window->x;
} }
if (oldstyle_fullscreen if (oldstyle_fullscreen
|| window->y == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->y)) {
X11_GetDisplaySize(_this, window, NULL, &y); X11_GetDisplaySize(_this, window, NULL, &y);
y = (y - window->h) / 2; y = (y - window->h) / 2;
} else if (window->y == SDL_WINDOWPOS_UNDEFINED) { } else if (SDL_WINDOWPOS_ISUNDEFINED(window->y)) {
y = 0; y = 0;
} else { } else {
y = window->y; y = window->y;
...@@ -377,8 +377,8 @@ X11_CreateWindow(_THIS, SDL_Window * window) ...@@ -377,8 +377,8 @@ X11_CreateWindow(_THIS, SDL_Window * window)
sizehints->flags = PMaxSize | PMinSize; sizehints->flags = PMaxSize | PMinSize;
} }
if (!oldstyle_fullscreen if (!oldstyle_fullscreen
&& window->x != SDL_WINDOWPOS_UNDEFINED && !SDL_WINDOWPOS_ISUNDEFINED(window->x)
&& window->y != SDL_WINDOWPOS_UNDEFINED) { && !SDL_WINDOWPOS_ISUNDEFINED(window->y)) {
sizehints->x = x; sizehints->x = x;
sizehints->y = y; sizehints->y = y;
sizehints->flags |= USPosition; sizehints->flags |= USPosition;
...@@ -713,14 +713,14 @@ X11_SetWindowPosition(_THIS, SDL_Window * window) ...@@ -713,14 +713,14 @@ X11_SetWindowPosition(_THIS, SDL_Window * window)
oldstyle_fullscreen = X11_IsWindowOldFullscreen(_this, window); oldstyle_fullscreen = X11_IsWindowOldFullscreen(_this, window);
if (oldstyle_fullscreen if (oldstyle_fullscreen
|| window->x == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->x)) {
X11_GetDisplaySize(_this, window, &x, NULL); X11_GetDisplaySize(_this, window, &x, NULL);
x = (x - window->w) / 2; x = (x - window->w) / 2;
} else { } else {
x = window->x; x = window->x;
} }
if (oldstyle_fullscreen if (oldstyle_fullscreen
|| window->y == SDL_WINDOWPOS_CENTERED) { || SDL_WINDOWPOS_ISCENTERED(window->y)) {
X11_GetDisplaySize(_this, window, NULL, &y); X11_GetDisplaySize(_this, window, NULL, &y);
y = (y - window->h) / 2; y = (y - window->h) / 2;
} else { } else {
...@@ -777,7 +777,7 @@ X11_SetWindowMaximized(_THIS, SDL_Window * window, SDL_bool maximized) ...@@ -777,7 +777,7 @@ X11_SetWindowMaximized(_THIS, SDL_Window * window, SDL_bool maximized)
{ {
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
SDL_DisplayData *displaydata = SDL_DisplayData *displaydata =
(SDL_DisplayData *) window->display->driverdata; (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
Display *display = data->videodata->display; Display *display = data->videodata->display;
Atom _NET_WM_STATE = data->videodata->_NET_WM_STATE; Atom _NET_WM_STATE = data->videodata->_NET_WM_STATE;
Atom _NET_WM_STATE_MAXIMIZED_VERT = data->videodata->_NET_WM_STATE_MAXIMIZED_VERT; Atom _NET_WM_STATE_MAXIMIZED_VERT = data->videodata->_NET_WM_STATE_MAXIMIZED_VERT;
...@@ -832,7 +832,7 @@ X11_MinimizeWindow(_THIS, SDL_Window * window) ...@@ -832,7 +832,7 @@ X11_MinimizeWindow(_THIS, SDL_Window * window)
{ {
SDL_WindowData *data = (SDL_WindowData *) window->driverdata; SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
SDL_DisplayData *displaydata = SDL_DisplayData *displaydata =
(SDL_DisplayData *) window->display->driverdata; (SDL_DisplayData *) SDL_GetDisplayForWindow(window)->driverdata;
Display *display = data->videodata->display; Display *display = data->videodata->display;
XIconifyWindow(display, data->xwindow, displaydata->screen); XIconifyWindow(display, data->xwindow, displaydata->screen);
......
...@@ -1015,24 +1015,43 @@ CommonEvent(CommonState * state, SDL_Event * event, int *done) ...@@ -1015,24 +1015,43 @@ CommonEvent(CommonState * state, SDL_Event * event, int *done)
case SDLK_m: case SDLK_m:
if (event->key.keysym.mod & KMOD_CTRL) { if (event->key.keysym.mod & KMOD_CTRL) {
/* Ctrl-M maximize */ /* Ctrl-M maximize */
/* FIXME: Which window has focus for this keyboard? */
for (i = 0; i < state->num_windows; ++i) { for (i = 0; i < state->num_windows; ++i) {
if (SDL_GetWindowFlags(state->windows[i]) & SDL_WINDOW_MAXIMIZED) { Uint32 flags = SDL_GetWindowFlags(state->windows[i]);
if (flags & SDL_WINDOW_INPUT_FOCUS) {
if (flags & SDL_WINDOW_MAXIMIZED) {
SDL_RestoreWindow(state->windows[i]); SDL_RestoreWindow(state->windows[i]);
} else { } else {
SDL_MaximizeWindow(state->windows[i]); SDL_MaximizeWindow(state->windows[i]);
} }
} }
} }
}
break; break;
case SDLK_z: case SDLK_z:
if (event->key.keysym.mod & KMOD_CTRL) { if (event->key.keysym.mod & KMOD_CTRL) {
/* Ctrl-Z minimize */ /* Ctrl-Z minimize */
/* FIXME: Which window has focus for this keyboard? */
for (i = 0; i < state->num_windows; ++i) { for (i = 0; i < state->num_windows; ++i) {
Uint32 flags = SDL_GetWindowFlags(state->windows[i]);
if (flags & SDL_WINDOW_INPUT_FOCUS) {
SDL_MinimizeWindow(state->windows[i]); SDL_MinimizeWindow(state->windows[i]);
} }
} }
}
break;
case SDLK_RETURN:
if (event->key.keysym.mod & KMOD_CTRL) {
/* Ctrl-Enter toggle fullscreen */
for (i = 0; i < state->num_windows; ++i) {
Uint32 flags = SDL_GetWindowFlags(state->windows[i]);
if (flags & SDL_WINDOW_INPUT_FOCUS) {
if (flags & SDL_WINDOW_FULLSCREEN) {
SDL_SetWindowFullscreen(state->windows[i], SDL_FALSE);
} else {
SDL_SetWindowFullscreen(state->windows[i], SDL_TRUE);
}
}
}
}
break; break;
case SDLK_ESCAPE: case SDLK_ESCAPE:
*done = 1; *done = 1;
......
...@@ -49,6 +49,19 @@ main(int argc, char *argv[]) ...@@ -49,6 +49,19 @@ main(int argc, char *argv[])
/* Check for events */ /* Check for events */
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
CommonEvent(state, &event, &done); CommonEvent(state, &event, &done);
if (event.type == SDL_WINDOWEVENT) {
if (event.window.event == SDL_WINDOWEVENT_MOVED) {
SDL_Window *window = SDL_GetWindowFromID(event.window.windowID);
if (window) {
printf("Window %d moved to %d,%d (display %d)\n",
event.window.windowID,
event.window.data1,
event.window.data2,
SDL_GetWindowDisplay(window));
}
}
}
} }
} }
quit(0); quit(0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment