Commit bfbe8d84 authored by Sam Lantinga's avatar Sam Lantinga

Date: Mon, 29 Dec 2008 23:29:52 +0100

From: Couriersud
Subject: SDL1.3: Some X11 diffs

The attached diff fixes the following issues in the X11 backend:

a) When calling resize, actually a move was performed. This has been
corrected.

b) DisplayHeight and DisplayWidth do not return up-to-date information
after a modeswitch using the xrandr code, which I enabled in
x11_modes.c
Height and width are now queried from the root window and all
occurrences of DisplayHeight and DisplayWidth changed.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%403393
parent 14ddac64
...@@ -28,6 +28,25 @@ ...@@ -28,6 +28,25 @@
#include "SDL_x11video.h" #include "SDL_x11video.h"
#include "../Xext/extensions/StdCmap.h" #include "../Xext/extensions/StdCmap.h"
static void
X11_GetDisplaySize(_THIS, SDL_Window * window, int *w, int *h)
{
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
SDL_DisplayData *displaydata =
(SDL_DisplayData *) SDL_GetDisplayFromWindow(window)->driverdata;
XWindowAttributes attr;
XGetWindowAttributes(data->display, RootWindow(data->display,
displaydata->screen),
&attr);
if (w) {
*w = attr.width;
}
if (h) {
*h = attr.height;
}
}
static int static int
SetupWindowData(_THIS, SDL_Window * window, Window w, BOOL created) SetupWindowData(_THIS, SDL_Window * window, Window w, BOOL created)
{ {
...@@ -289,8 +308,8 @@ X11_CreateWindow(_THIS, SDL_Window * window) ...@@ -289,8 +308,8 @@ X11_CreateWindow(_THIS, SDL_Window * window)
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->x == SDL_WINDOWPOS_CENTERED) { || window->x == SDL_WINDOWPOS_CENTERED) {
x = (DisplayWidth(data->display, displaydata->screen) - X11_GetDisplaySize(_this, window, &x, NULL);
window->w) / 2; x = (x - window->w) / 2;
} else if (window->x == SDL_WINDOWPOS_UNDEFINED) { } else if (window->x == SDL_WINDOWPOS_UNDEFINED) {
x = 0; x = 0;
} else { } else {
...@@ -298,8 +317,8 @@ X11_CreateWindow(_THIS, SDL_Window * window) ...@@ -298,8 +317,8 @@ X11_CreateWindow(_THIS, SDL_Window * window)
} }
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->y == SDL_WINDOWPOS_CENTERED) { || window->y == SDL_WINDOWPOS_CENTERED) {
y = (DisplayHeight(data->display, displaydata->screen) - X11_GetDisplaySize(_this, window, NULL, &y);
window->h) / 2; y = (y - window->h) / 2;
} else if (window->y == SDL_WINDOWPOS_UNDEFINED) { } else if (window->y == SDL_WINDOWPOS_UNDEFINED) {
y = 0; y = 0;
} else { } else {
...@@ -608,13 +627,15 @@ X11_SetWindowPosition(_THIS, SDL_Window * window) ...@@ -608,13 +627,15 @@ X11_SetWindowPosition(_THIS, SDL_Window * window)
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->x == SDL_WINDOWPOS_CENTERED) { || window->x == SDL_WINDOWPOS_CENTERED) {
x = (DisplayWidth(display, displaydata->screen) - window->w) / 2; X11_GetDisplaySize(_this, window, &x, NULL);
x = (x - window->w) / 2;
} else { } else {
x = window->x; x = window->x;
} }
if ((window->flags & SDL_WINDOW_FULLSCREEN) if ((window->flags & SDL_WINDOW_FULLSCREEN)
|| window->y == SDL_WINDOWPOS_CENTERED) { || window->y == SDL_WINDOWPOS_CENTERED) {
y = (DisplayHeight(display, displaydata->screen) - window->h) / 2; X11_GetDisplaySize(_this, window, NULL, &y);
y = (y - window->h) / 2;
} else { } else {
y = window->y; y = window->y;
} }
...@@ -627,7 +648,7 @@ X11_SetWindowSize(_THIS, SDL_Window * window) ...@@ -627,7 +648,7 @@ X11_SetWindowSize(_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;
XMoveWindow(display, data->window, window->w, window->h); XResizeWindow(display, data->window, window->w, window->h);
} }
void void
......
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