Mac and Linux SDL2 binary snapshots
Edward Rudd
2019-04-09 9cd2e9ec8fc0127393dfce9c0359d500c8c238be
source/src/video/android/SDL_androidwindow.c
@@ -1,6 +1,6 @@
/*
  Simple DirectMedia Layer
  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
  Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
@@ -26,9 +26,12 @@
#include "../SDL_sysvideo.h"
#include "../../events/SDL_keyboard_c.h"
#include "../../events/SDL_mouse_c.h"
#include "../../events/SDL_windowevents_c.h"
#include "../../core/android/SDL_android.h"
#include "SDL_androidvideo.h"
#include "SDL_androidwindow.h"
#include "SDL_hints.h"
int
Android_CreateWindow(_THIS, SDL_Window * window)
@@ -42,14 +45,16 @@
    Android_PauseSem = SDL_CreateSemaphore(0);
    Android_ResumeSem = SDL_CreateSemaphore(0);
    /* Set orientation */
    Android_JNI_SetOrientation(window->w, window->h, window->flags & SDL_WINDOW_RESIZABLE, SDL_GetHint(SDL_HINT_ORIENTATIONS));
    /* Adjust the window data to match the screen */
    window->x = 0;
    window->y = 0;
    window->w = Android_ScreenWidth;
    window->h = Android_ScreenHeight;
    window->w = Android_SurfaceWidth;
    window->h = Android_SurfaceHeight;
    window->flags &= ~SDL_WINDOW_RESIZABLE;     /* window is NEVER resizeable */
    window->flags |= SDL_WINDOW_FULLSCREEN;     /* window is always fullscreen */
    window->flags &= ~SDL_WINDOW_HIDDEN;
    window->flags |= SDL_WINDOW_SHOWN;          /* only one window on Android */
    window->flags |= SDL_WINDOW_INPUT_FOCUS;    /* always has input focus */
@@ -69,13 +74,17 @@
        SDL_free(data);
        return SDL_SetError("Could not fetch native window");
    }
    data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) data->native_window);
    if (data->egl_surface == EGL_NO_SURFACE) {
        ANativeWindow_release(data->native_window);
        SDL_free(data);
        return SDL_SetError("Could not create GLES window surface");
    /* Do not create EGLSurface for Vulkan window since it will then make the window
       incompatible with vkCreateAndroidSurfaceKHR */
    if ((window->flags & SDL_WINDOW_VULKAN) == 0) {
        data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) data->native_window);
        if (data->egl_surface == EGL_NO_SURFACE) {
            ANativeWindow_release(data->native_window);
            SDL_free(data);
            return SDL_SetError("Could not create GLES window surface");
        }
    }
    window->driverdata = data;
@@ -88,6 +97,41 @@
Android_SetWindowTitle(_THIS, SDL_Window * window)
{
    Android_JNI_SetActivityTitle(window->title);
}
void
Android_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen)
{
    /* If the window is being destroyed don't change visible state */
    if (!window->is_destroying) {
        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.
     */
    if (!SDL_IsDeXMode() && !SDL_IsChromebook()) {
        return;
    }
    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
@@ -128,7 +172,7 @@
        info->info.android.surface = data->egl_surface;
        return SDL_TRUE;
    } else {
        SDL_SetError("Application not compiled with SDL %d.%d\n",
        SDL_SetError("Application not compiled with SDL %d.%d",
                     SDL_MAJOR_VERSION, SDL_MINOR_VERSION);
        return SDL_FALSE;
    }