shithub: choc

Download patch

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)