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.
This commit is contained in:
parent
2c021d9b34
commit
018af55e16
21 changed files with 300 additions and 190 deletions
|
@ -46,7 +46,7 @@ static int
|
|||
SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created)
|
||||
{
|
||||
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
|
||||
SDL_VideoDisplay *display = window->display;
|
||||
SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
|
||||
SDL_WindowData *data;
|
||||
|
||||
/* Allocate the window data */
|
||||
|
@ -93,10 +93,8 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created)
|
|||
point.x = 0;
|
||||
point.y = 0;
|
||||
if (ClientToScreen(hwnd, &point)) {
|
||||
SDL_Rect bounds;
|
||||
WIN_GetDisplayBounds(_this, display, &bounds);
|
||||
window->x = point.x - bounds.x;
|
||||
window->y = point.y - bounds.y;
|
||||
window->x = point.x;
|
||||
window->y = point.y;
|
||||
}
|
||||
}
|
||||
{
|
||||
|
@ -166,7 +164,7 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created)
|
|||
int
|
||||
WIN_CreateWindow(_THIS, SDL_Window * window)
|
||||
{
|
||||
SDL_VideoDisplay *display = window->display;
|
||||
SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
|
||||
HWND hwnd;
|
||||
RECT rect;
|
||||
SDL_Rect bounds;
|
||||
|
@ -203,28 +201,28 @@ WIN_CreateWindow(_THIS, SDL_Window * window)
|
|||
}
|
||||
}
|
||||
if ((window->flags & SDL_WINDOW_FULLSCREEN)
|
||||
|| window->x == SDL_WINDOWPOS_CENTERED) {
|
||||
|| SDL_WINDOWPOS_ISCENTERED(window->x)) {
|
||||
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) {
|
||||
x = CW_USEDEFAULT;
|
||||
} else {
|
||||
x = bounds.x;
|
||||
}
|
||||
} else {
|
||||
x = bounds.x + window->x + rect.left;
|
||||
x = window->x + rect.left;
|
||||
}
|
||||
if ((window->flags & SDL_WINDOW_FULLSCREEN)
|
||||
|| window->y == SDL_WINDOWPOS_CENTERED) {
|
||||
|| SDL_WINDOWPOS_ISCENTERED(window->y)) {
|
||||
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) {
|
||||
y = CW_USEDEFAULT;
|
||||
} else {
|
||||
y = bounds.y;
|
||||
}
|
||||
} else {
|
||||
y = bounds.y + window->y + rect.top;
|
||||
y = window->y + rect.top;
|
||||
}
|
||||
|
||||
hwnd =
|
||||
|
@ -366,7 +364,7 @@ WIN_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon)
|
|||
void
|
||||
WIN_SetWindowPosition(_THIS, SDL_Window * window)
|
||||
{
|
||||
SDL_VideoDisplay *display = window->display;
|
||||
SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
|
||||
HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
|
||||
RECT rect;
|
||||
SDL_Rect bounds;
|
||||
|
@ -406,16 +404,16 @@ WIN_SetWindowPosition(_THIS, SDL_Window * window)
|
|||
}
|
||||
}
|
||||
if ((window->flags & SDL_WINDOW_FULLSCREEN)
|
||||
|| window->x == SDL_WINDOWPOS_CENTERED) {
|
||||
|| SDL_WINDOWPOS_ISCENTERED(window->x)) {
|
||||
x = bounds.x + (bounds.w - w) / 2;
|
||||
} else {
|
||||
x = bounds.x + window->x + rect.left;
|
||||
x = window->x + rect.left;
|
||||
}
|
||||
if ((window->flags & SDL_WINDOW_FULLSCREEN)
|
||||
|| window->y == SDL_WINDOWPOS_CENTERED) {
|
||||
|| SDL_WINDOWPOS_ISCENTERED(window->y)) {
|
||||
y = bounds.y + (bounds.h - h) / 2;
|
||||
} else {
|
||||
y = bounds.y + window->y + rect.top;
|
||||
y = window->y + rect.top;
|
||||
}
|
||||
|
||||
SetWindowPos(hwnd, top, x, y, 0, 0, (SWP_NOCOPYBITS | SWP_NOSIZE));
|
||||
|
@ -452,35 +450,35 @@ WIN_SetWindowSize(_THIS, SDL_Window * window)
|
|||
h = (rect.bottom - rect.top);
|
||||
|
||||
SetWindowPos(hwnd, top, 0, 0, w, h, (SWP_NOCOPYBITS | SWP_NOMOVE));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _WIN32_WCE
|
||||
void WINCE_ShowWindow(_THIS, SDL_Window* window, int visible)
|
||||
{
|
||||
SDL_WindowData* windowdata = (SDL_WindowData*) window->driverdata;
|
||||
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
|
||||
|
||||
if(visible) {
|
||||
if(window->flags & SDL_WINDOW_FULLSCREEN) {
|
||||
if(videodata->SHFullScreen)
|
||||
videodata->SHFullScreen(windowdata->hwnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON);
|
||||
|
||||
ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_HIDE);
|
||||
}
|
||||
|
||||
ShowWindow(windowdata->hwnd, SW_SHOW);
|
||||
SetForegroundWindow(windowdata->hwnd);
|
||||
} else {
|
||||
ShowWindow(windowdata->hwnd, SW_HIDE);
|
||||
|
||||
if(window->flags & SDL_WINDOW_FULLSCREEN) {
|
||||
if(videodata->SHFullScreen)
|
||||
videodata->SHFullScreen(windowdata->hwnd, SHFS_SHOWTASKBAR | SHFS_SHOWSTARTICON | SHFS_SHOWSIPBUTTON);
|
||||
|
||||
ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_SHOW);
|
||||
|
||||
}
|
||||
}
|
||||
#ifdef _WIN32_WCE
|
||||
void WINCE_ShowWindow(_THIS, SDL_Window* window, int visible)
|
||||
{
|
||||
SDL_WindowData* windowdata = (SDL_WindowData*) window->driverdata;
|
||||
SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata;
|
||||
|
||||
if(visible) {
|
||||
if(window->flags & SDL_WINDOW_FULLSCREEN) {
|
||||
if(videodata->SHFullScreen)
|
||||
videodata->SHFullScreen(windowdata->hwnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON);
|
||||
|
||||
ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_HIDE);
|
||||
}
|
||||
|
||||
ShowWindow(windowdata->hwnd, SW_SHOW);
|
||||
SetForegroundWindow(windowdata->hwnd);
|
||||
} else {
|
||||
ShowWindow(windowdata->hwnd, SW_HIDE);
|
||||
|
||||
if(window->flags & SDL_WINDOW_FULLSCREEN) {
|
||||
if(videodata->SHFullScreen)
|
||||
videodata->SHFullScreen(windowdata->hwnd, SHFS_SHOWTASKBAR | SHFS_SHOWSTARTICON | SHFS_SHOWSIPBUTTON);
|
||||
|
||||
ShowWindow(FindWindow(TEXT("HHTaskBar"), NULL), SW_SHOW);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* _WIN32_WCE */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue