Skip to content
Browse files

Fixed bug 2808 - Fix SDL reporting wrong window size on resume

Jonas Kulla

At startup time, the single android window is assigned a "windowed" (window->windowed.{w,h}) size based on the current orientation of the mobile device; this size is never updated throughout the lifetime of the app.

This becomes problematic when the app is paused and then resumed in an orientation that it did not start up in. Eventually, 'SDL_OnWindowRestored()' is called, which calls 'SDL_UpdateFullscreenMode()'. This function is very problematic because it is written with a desktop monitor in mind: it tries to find a matching display mode for the windowed size, doesn't find any, and finally applies the windowed size as the fullscreen one. In the end, the windowed size is reported in a RESIZED event, which doesn't correspond to the actual surface size.

To see this in action: Start an orientation aware SDL app in eg. portrait mode, suspend the app, put the device into landscape orientation and resume the app. It will erroneously render in portrait mode (until the device is rotated again).
  • Loading branch information
slouken committed Oct 7, 2016
1 parent 5c1ab40 commit f674f2311ac22f817f18409bbf685185cec95ac8
Showing with 9 additions and 0 deletions.
  1. +9 −0 src/video/android/SDL_androidvideo.c
@@ -220,6 +220,15 @@ Android_SetScreenResolution(int width, int height, Uint32 format, float rate)

if (Android_Window) {
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESIZED, width, height);

/* Force the current mode to match the resize otherwise the SDL_WINDOWEVENT_RESTORED event
* will fall back to the old mode */
SDL_VideoDisplay *display = SDL_GetDisplayForWindow(Android_Window);

display->current_mode.format = format;
display->current_mode.w = width;
display->current_mode.h = height;
display->current_mode.refresh_rate = rate;

0 comments on commit f674f23

Please sign in to comment.