Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Deal with fullscreen limitations under windowed Android environments …
…(Chromebook, DeX, etc.) (Thanks Rachel!)
  • Loading branch information
slouken committed Jun 12, 2018
1 parent 41da7b7 commit 4a4bac9
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/video/SDL_video.c
Expand Up @@ -1289,8 +1289,15 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen)

/* Generate a mode change event here */
if (resized) {
#ifndef ANDROID
// Android may not resize the window to exactly what our fullscreen mode is, especially on
// windowed Android environments like the Chromebook or Samsung DeX. Given this, we shouldn't
// use fullscreen_mode.w and fullscreen_mode.h, but rather get our current native size. As such,
// Android's SetWindowFullscreen will generate the window event for us with the proper final size.

SDL_SendWindowEvent(other, SDL_WINDOWEVENT_RESIZED,
fullscreen_mode.w, fullscreen_mode.h);
#endif
} else {
SDL_OnWindowResized(other);
}
Expand Down
23 changes: 23 additions & 0 deletions src/video/android/SDL_androidwindow.c
Expand Up @@ -26,6 +26,7 @@
#include "../SDL_sysvideo.h"
#include "../../events/SDL_keyboard_c.h"
#include "../../events/SDL_mouse_c.h"
#include "../../events/SDL_windowevents_c.h"

#include "SDL_androidvideo.h"
#include "SDL_androidwindow.h"
Expand Down Expand Up @@ -101,6 +102,28 @@ void
Android_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen)
{
Android_JNI_SetWindowStyle(fullscreen);

// Ensure our size matches reality after we've executed the window style change.
//
// It is possible that we've set width and height to the full-size display, but on
// Samsung DeX or Chromebooks or other windowed Android environemtns, our window may
// still not be the full display size.
//
SDL_WindowData * data = (SDL_WindowData *)window->driverdata;

if (!data || !data->native_window) {
return;
}

int old_w = window->w;
int old_h = window->h;

int new_w = ANativeWindow_getWidth(data->native_window);
int new_h = ANativeWindow_getHeight(data->native_window);

if (old_w != new_w || old_h != new_h) {
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, new_w, new_h);
}
}

void
Expand Down

0 comments on commit 4a4bac9

Please sign in to comment.