ref: a283f1edd26aca2b93854a1a40d15af4eb929d07
parent: 6bce0530dd5b3315d68b5298748cf0e0d494e796
author: Simon Howard <[email protected]>
date: Fri Nov 28 16:00:04 EST 2014
Fix window resizing. Window resizing is also possible under OS X now, as the handle is no longer shown on resizable windows.
--- a/src/i_video.c
+++ b/src/i_video.c
@@ -688,6 +688,32 @@
}
}
+static void HandleWindowEvent(SDL_WindowEvent *event)
+{
+ switch (event->event)
+ {
+#if 0 // SDL2-TODO
+ case SDL_ACTIVEEVENT:
+ // need to update our focus state
+ UpdateFocus();
+ break;
+#endif
+ case SDL_WINDOWEVENT_EXPOSED:
+ palette_to_set = true;
+ break;
+
+ case SDL_WINDOWEVENT_RESIZED:
+ need_resize = true;
+ resize_w = event->data1;
+ resize_h = event->data2;
+ last_resize_time = SDL_GetTicks();
+ break;
+
+ default:
+ break;
+ }
+}
+
void I_GetEvent(void)
{
SDL_Event sdlevent;
@@ -782,24 +808,13 @@
D_PostEvent(&event);
break;
-#if 0 // SDL2-TODO
- case SDL_ACTIVEEVENT:
- // need to update our focus state
- UpdateFocus();
+ case SDL_WINDOWEVENT:
+ if (sdlevent.window.windowID == SDL_GetWindowID(screen))
+ {
+ HandleWindowEvent(&sdlevent.window);
+ }
break;
- case SDL_VIDEOEXPOSE:
- palette_to_set = true;
- break;
-
- case SDL_RESIZABLE:
- need_resize = true;
- resize_w = sdlevent.resize.w;
- resize_h = sdlevent.resize.h;
- last_resize_time = SDL_GetTicks();
- break;
-#endif
-
default:
break;
}
@@ -1760,8 +1775,17 @@
if (screenbuffer != NULL)
{
SDL_FreeSurface(screenbuffer);
+ screenbuffer = NULL;
}
+ // Close the current window.
+
+ if (screen != NULL)
+ {
+ SDL_DestroyWindow(screen);
+ screen = NULL;
+ }
+
// Generate lookup tables before setting the video mode.
if (mode != NULL && mode->InitMode != NULL)
@@ -1783,9 +1807,7 @@
// running. This feature is disabled on OS X, as it adds an ugly
// scroll handle to the corner of the screen.
-#ifndef __MACOSX__
flags |= SDL_WINDOW_RESIZABLE;
-#endif
}
screen = SDL_CreateWindow(
@@ -1799,6 +1821,9 @@
w, h, SDL_GetError());
}
+ I_InitWindowTitle();
+ I_InitWindowIcon();
+
// Blank out the full screen area in case there is any junk in
// the borders that won't otherwise be overwritten.
@@ -1946,9 +1971,6 @@
SetVideoMode(screen_mode, w, h);
}
-
- I_InitWindowTitle();
- I_InitWindowIcon();
// Start with a clear black screen
// (screen will be flipped after we set the palette)