Commit 555e6c96863d62f5e94a0a52287d02e8d8cc850c

Magnus Bjerke Vik 2016-10-01T14:18:29

Fix SDL not resizing window when Android screen resolution changes

diff --git a/src/video/android/SDL_androidvideo.c b/src/video/android/SDL_androidvideo.c
index 0e24a3d..05a07f6 100644
--- a/src/video/android/SDL_androidvideo.c
+++ b/src/video/android/SDL_androidvideo.c
@@ -194,7 +194,6 @@ Android_VideoQuit(_THIS)
     Android_QuitTouch();
 }
 
-/* This function gets called before VideoInit() */
 void
 Android_SetScreenResolution(int width, int height, Uint32 format, float rate)
 {
@@ -203,6 +202,22 @@ Android_SetScreenResolution(int width, int height, Uint32 format, float rate)
     Android_ScreenFormat = format;
     Android_ScreenRate = rate;
 
+    /*
+      Update the resolution of the desktop mode, so that the window
+      can be properly resized. The screen resolution change can for
+      example happen when the Activity enters or exists immersive mode,
+      which can happen after VideoInit().
+    */
+    SDL_VideoDevice* device = SDL_GetVideoDevice();
+    if (device && device->num_displays > 0)
+    {
+        SDL_VideoDisplay* display = &device->displays[0];
+        display->desktop_mode.format = Android_ScreenFormat;
+        display->desktop_mode.w = Android_ScreenWidth;
+        display->desktop_mode.h = Android_ScreenHeight;
+        display->desktop_mode.refresh_rate  = Android_ScreenRate;
+    }
+
     if (Android_Window) {
         SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESIZED, width, height);
     }