From d4e5d84631fa184dbbd34d079ccf5853cbebc74c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=ADn=20Lucas=20Golini?= Date: Fri, 26 Jan 2018 01:25:11 -0300 Subject: [PATCH] Fixed Android build. Updated SDL2 to SDL 2.0.8 (current dev). --HG-- branch : dev-2.1 --- include/eepp/ui/actions/delay.hpp | 4 +- include/eepp/ui/actions/fade.hpp | 8 +- include/eepp/ui/actions/marginmove.hpp | 8 +- include/eepp/ui/actions/move.hpp | 8 +- include/eepp/ui/actions/rotate.hpp | 8 +- include/eepp/ui/actions/scale.hpp | 8 +- include/eepp/ui/actions/sequence.hpp | 4 +- include/eepp/ui/actions/spawn.hpp | 4 +- projects/android-project-ant/jni/eepp.mk | 12 +- projects/android-project/app/jni/eepp.mk | 12 +- .../app/src/main/AndroidManifest.xml | 5 +- .../app/src/main/java/org/libsdl/app/SDL.java | 37 + .../main/java/org/libsdl/app/SDLActivity.java | 1517 +- .../java/org/libsdl/app/SDLAudioManager.java | 178 + .../org/libsdl/app/SDLControllerManager.java | 435 + projects/linux/ee.files | 2 + src/eepp/graphics/renderer/renderergl3cp.cpp | 9 +- .../renderer/shaders/basegl3cp.gles2.frag.h | 30 + .../renderer/shaders/basegl3cp.gles2.vert.h | 31 + src/thirdparty/SDL2/include/SDL.h | 70 +- src/thirdparty/SDL2/include/SDL_assert.h | 59 +- src/thirdparty/SDL2/include/SDL_atomic.h | 35 +- src/thirdparty/SDL2/include/SDL_audio.h | 347 +- src/thirdparty/SDL2/include/SDL_bits.h | 25 +- src/thirdparty/SDL2/include/SDL_blendmode.h | 67 +- src/thirdparty/SDL2/include/SDL_clipboard.h | 8 +- src/thirdparty/SDL2/include/SDL_config.h | 12 +- .../SDL2/include/SDL_config.h.cmake | 153 +- src/thirdparty/SDL2/include/SDL_config.h.in | 144 +- .../SDL2/include/SDL_config_android.h | 65 +- .../SDL2/include/SDL_config_iphoneos.h | 80 +- .../SDL2/include/SDL_config_macosx.h | 78 +- .../SDL2/include/SDL_config_minimal.h | 9 +- .../SDL2/include/SDL_config_pandora.h | 39 +- src/thirdparty/SDL2/include/SDL_config_psp.h | 43 +- .../SDL2/include/SDL_config_windows.h | 90 +- .../SDL2/include/SDL_config_winrt.h | 112 +- src/thirdparty/SDL2/include/SDL_config_wiz.h | 78 +- src/thirdparty/SDL2/include/SDL_copying.h | 2 +- src/thirdparty/SDL2/include/SDL_cpuinfo.h | 47 +- src/thirdparty/SDL2/include/SDL_egl.h | 1913 +- src/thirdparty/SDL2/include/SDL_endian.h | 33 +- src/thirdparty/SDL2/include/SDL_error.h | 10 +- src/thirdparty/SDL2/include/SDL_events.h | 109 +- src/thirdparty/SDL2/include/SDL_filesystem.h | 8 +- .../SDL2/include/SDL_gamecontroller.h | 86 +- src/thirdparty/SDL2/include/SDL_gesture.h | 8 +- src/thirdparty/SDL2/include/SDL_haptic.h | 108 +- src/thirdparty/SDL2/include/SDL_hints.h | 555 +- src/thirdparty/SDL2/include/SDL_joystick.h | 161 +- src/thirdparty/SDL2/include/SDL_keyboard.h | 10 +- src/thirdparty/SDL2/include/SDL_keycode.h | 18 +- src/thirdparty/SDL2/include/SDL_loadso.h | 8 +- src/thirdparty/SDL2/include/SDL_log.h | 26 +- src/thirdparty/SDL2/include/SDL_main.h | 37 +- src/thirdparty/SDL2/include/SDL_messagebox.h | 8 +- src/thirdparty/SDL2/include/SDL_mouse.h | 92 +- src/thirdparty/SDL2/include/SDL_mutex.h | 8 +- src/thirdparty/SDL2/include/SDL_name.h | 8 +- src/thirdparty/SDL2/include/SDL_opengl.h | 13067 ++---------- .../SDL2/include/SDL_opengl_glext.h | 11177 +++++++++++ src/thirdparty/SDL2/include/SDL_opengles.h | 3 +- src/thirdparty/SDL2/include/SDL_opengles2.h | 2758 +-- .../SDL2/include/SDL_opengles2_gl2.h | 621 + .../SDL2/include/SDL_opengles2_gl2ext.h | 2050 ++ .../SDL2/include/SDL_opengles2_gl2platform.h | 30 + .../SDL2/include/SDL_opengles2_khrplatform.h | 282 + src/thirdparty/SDL2/include/SDL_pixels.h | 55 +- src/thirdparty/SDL2/include/SDL_platform.h | 80 +- src/thirdparty/SDL2/include/SDL_power.h | 8 +- src/thirdparty/SDL2/include/SDL_quit.h | 8 +- src/thirdparty/SDL2/include/SDL_rect.h | 18 +- src/thirdparty/SDL2/include/SDL_render.h | 89 +- src/thirdparty/SDL2/include/SDL_revision.h | 4 +- src/thirdparty/SDL2/include/SDL_rwops.h | 46 +- src/thirdparty/SDL2/include/SDL_scancode.h | 22 +- src/thirdparty/SDL2/include/SDL_shape.h | 17 +- src/thirdparty/SDL2/include/SDL_stdinc.h | 256 +- src/thirdparty/SDL2/include/SDL_surface.h | 55 +- src/thirdparty/SDL2/include/SDL_system.h | 97 +- src/thirdparty/SDL2/include/SDL_syswm.h | 78 +- src/thirdparty/SDL2/include/SDL_test.h | 27 +- src/thirdparty/SDL2/include/SDL_test_assert.h | 22 +- src/thirdparty/SDL2/include/SDL_test_common.h | 8 +- .../SDL2/include/SDL_test_compare.h | 12 +- src/thirdparty/SDL2/include/SDL_test_crc32.h | 34 +- src/thirdparty/SDL2/include/SDL_test_font.h | 17 +- src/thirdparty/SDL2/include/SDL_test_fuzzer.h | 40 +- .../SDL2/include/SDL_test_harness.h | 19 +- src/thirdparty/SDL2/include/SDL_test_images.h | 30 +- src/thirdparty/SDL2/include/SDL_test_log.h | 12 +- src/thirdparty/SDL2/include/SDL_test_md5.h | 26 +- src/thirdparty/SDL2/include/SDL_test_memory.h | 63 + src/thirdparty/SDL2/include/SDL_test_random.h | 8 +- src/thirdparty/SDL2/include/SDL_thread.h | 55 +- src/thirdparty/SDL2/include/SDL_timer.h | 10 +- src/thirdparty/SDL2/include/SDL_touch.h | 8 +- src/thirdparty/SDL2/include/SDL_types.h | 2 +- src/thirdparty/SDL2/include/SDL_version.h | 10 +- src/thirdparty/SDL2/include/SDL_video.h | 342 +- src/thirdparty/SDL2/include/SDL_vulkan.h | 257 + src/thirdparty/SDL2/include/begin_code.h | 35 +- src/thirdparty/SDL2/include/close_code.h | 4 +- src/thirdparty/SDL2/include/doxyfile | 1555 -- .../java/src/org/libsdl/app/SDLActivity.java | 1074 - src/thirdparty/SDL2/src/SDL.c | 39 +- src/thirdparty/SDL2/src/SDL_assert.c | 85 +- src/thirdparty/SDL2/src/SDL_assert_c.h | 2 +- src/thirdparty/SDL2/src/SDL_dataqueue.c | 339 + src/thirdparty/SDL2/src/SDL_dataqueue.h | 55 + src/thirdparty/SDL2/src/SDL_error.c | 212 +- src/thirdparty/SDL2/src/SDL_error_c.h | 8 +- src/thirdparty/SDL2/src/SDL_hints.c | 21 +- src/thirdparty/SDL2/src/SDL_internal.h | 22 +- src/thirdparty/SDL2/src/SDL_log.c | 65 +- src/thirdparty/SDL2/src/atomic/SDL_atomic.c | 126 +- src/thirdparty/SDL2/src/atomic/SDL_spinlock.c | 38 +- src/thirdparty/SDL2/src/audio/SDL_audio.c | 1352 +- src/thirdparty/SDL2/src/audio/SDL_audio_c.h | 66 +- src/thirdparty/SDL2/src/audio/SDL_audiocvt.c | 2308 ++- src/thirdparty/SDL2/src/audio/SDL_audiodev.c | 41 +- .../SDL2/src/audio/SDL_audiodev_c.h | 5 +- .../SDL2/src/audio/SDL_audiotypecvt.c | 16416 +--------------- src/thirdparty/SDL2/src/audio/SDL_mixer.c | 52 +- src/thirdparty/SDL2/src/audio/SDL_sysaudio.h | 145 +- src/thirdparty/SDL2/src/audio/SDL_wave.c | 89 +- src/thirdparty/SDL2/src/audio/SDL_wave.h | 14 +- .../SDL2/src/audio/alsa/SDL_alsa_audio.c | 523 +- .../SDL2/src/audio/alsa/SDL_alsa_audio.h | 11 +- .../SDL2/src/audio/android/SDL_androidaudio.c | 139 +- .../SDL2/src/audio/android/SDL_androidaudio.h | 13 +- .../SDL2/src/audio/arts/SDL_artsaudio.c | 41 +- .../SDL2/src/audio/arts/SDL_artsaudio.h | 11 +- .../SDL2/src/audio/coreaudio/SDL_coreaudio.h | 25 +- .../SDL2/src/audio/coreaudio/SDL_coreaudio.m | 891 + .../src/audio/directsound/SDL_directsound.c | 338 +- .../src/audio/directsound/SDL_directsound.h | 13 +- .../SDL2/src/audio/disk/SDL_diskaudio.c | 174 +- .../SDL2/src/audio/disk/SDL_diskaudio.h | 13 +- .../SDL2/src/audio/dsp/SDL_dspaudio.c | 86 +- .../SDL2/src/audio/dsp/SDL_dspaudio.h | 8 +- .../SDL2/src/audio/dummy/SDL_dummyaudio.c | 29 +- .../SDL2/src/audio/dummy/SDL_dummyaudio.h | 8 +- .../audio/emscripten/SDL_emscriptenaudio.c | 379 + .../audio/emscripten/SDL_emscriptenaudio.h | 38 + .../SDL2/src/audio/esd/SDL_esdaudio.c | 30 +- .../SDL2/src/audio/esd/SDL_esdaudio.h | 9 +- .../SDL2/src/audio/fusionsound/SDL_fsaudio.c | 45 +- .../SDL2/src/audio/fusionsound/SDL_fsaudio.h | 9 +- .../SDL2/src/audio/haiku/SDL_haikuaudio.cc | 70 +- .../SDL2/src/audio/haiku/SDL_haikuaudio.h | 8 +- .../SDL2/src/audio/jack/SDL_jackaudio.c | 429 + .../SDL2/src/audio/jack/SDL_jackaudio.h | 42 + .../SDL2/src/audio/nacl/SDL_naclaudio.c | 165 + .../SDL2/src/audio/nacl/SDL_naclaudio.h | 43 + .../SDL2/src/audio/nas/SDL_nasaudio.c | 172 +- .../SDL2/src/audio/nas/SDL_nasaudio.h | 8 +- .../SDL2/src/audio/netbsd/SDL_netbsdaudio.c | 412 + .../SDL2/src/audio/netbsd/SDL_netbsdaudio.h | 48 + .../SDL2/src/audio/paudio/SDL_paudio.c | 75 +- .../SDL2/src/audio/paudio/SDL_paudio.h | 11 +- .../SDL2/src/audio/psp/SDL_pspaudio.c | 72 +- .../SDL2/src/audio/psp/SDL_pspaudio.h | 14 +- .../src/audio/pulseaudio/SDL_pulseaudio.c | 575 +- .../src/audio/pulseaudio/SDL_pulseaudio.h | 14 +- .../SDL2/src/audio/qsa/SDL_qsa_audio.c | 357 +- .../SDL2/src/audio/qsa/SDL_qsa_audio.h | 4 +- .../SDL2/src/audio/sndio/SDL_sndioaudio.c | 141 +- .../SDL2/src/audio/sndio/SDL_sndioaudio.h | 12 +- .../SDL2/src/audio/sun/SDL_sunaudio.c | 51 +- .../SDL2/src/audio/sun/SDL_sunaudio.h | 8 +- .../SDL2/src/audio/wasapi/SDL_wasapi.c | 761 + .../SDL2/src/audio/wasapi/SDL_wasapi.h | 85 + .../SDL2/src/audio/wasapi/SDL_wasapi_win32.c | 417 + .../src/audio/wasapi/SDL_wasapi_winrt.cpp | 276 + .../SDL2/src/audio/winmm/SDL_winmm.c | 291 +- .../SDL2/src/audio/winmm/SDL_winmm.h | 8 +- .../SDL2/src/core/android/SDL_android.c | 1272 +- .../SDL2/src/core/android/SDL_android.h | 49 +- .../SDL2/src/core/android/keyinfotable.h | 175 + src/thirdparty/SDL2/src/core/linux/SDL_dbus.c | 330 + src/thirdparty/SDL2/src/core/linux/SDL_dbus.h | 97 + .../SDL2/src/core/linux/SDL_evdev.c | 923 +- .../SDL2/src/core/linux/SDL_evdev.h | 28 +- .../SDL2/src/core/linux/SDL_evdev_kbd.c | 677 + .../SDL2/src/core/linux/SDL_evdev_kbd.h | 29 + .../linux/SDL_evdev_kbd_default_accents.h | 284 + .../core/linux/SDL_evdev_kbd_default_keymap.h | 4763 +++++ .../SDL2/src/core/linux/SDL_fcitx.c | 373 + .../SDL2/src/core/linux/SDL_fcitx.h | 40 + src/thirdparty/SDL2/src/core/linux/SDL_ibus.c | 583 + src/thirdparty/SDL2/src/core/linux/SDL_ibus.h | 58 + src/thirdparty/SDL2/src/core/linux/SDL_ime.c | 152 + src/thirdparty/SDL2/src/core/linux/SDL_ime.h | 40 + src/thirdparty/SDL2/src/core/linux/SDL_udev.c | 191 +- src/thirdparty/SDL2/src/core/linux/SDL_udev.h | 18 +- src/thirdparty/SDL2/src/core/unix/SDL_poll.c | 87 + src/thirdparty/SDL2/src/core/unix/SDL_poll.h | 34 + .../SDL2/src/core/windows/SDL_directx.h | 111 + .../SDL2/src/core/windows/SDL_windows.c | 134 +- .../SDL2/src/core/windows/SDL_windows.h | 13 +- .../SDL2/src/core/windows/SDL_xinput.c | 139 + .../SDL2/src/core/windows/SDL_xinput.h | 177 + .../src/core/winrt/SDL_winrtapp_common.cpp | 31 +- .../SDL2/src/core/winrt/SDL_winrtapp_common.h | 8 +- .../src/core/winrt/SDL_winrtapp_direct3d.cpp | 546 +- .../src/core/winrt/SDL_winrtapp_direct3d.h | 22 +- .../SDL2/src/core/winrt/SDL_winrtapp_xaml.cpp | 2 +- .../SDL2/src/core/winrt/SDL_winrtapp_xaml.h | 10 +- src/thirdparty/SDL2/src/cpuinfo/SDL_cpuinfo.c | 360 +- src/thirdparty/SDL2/src/dynapi/SDL_dynapi.c | 83 +- src/thirdparty/SDL2/src/dynapi/SDL_dynapi.h | 23 +- .../SDL2/src/dynapi/SDL_dynapi_overrides.h | 104 +- .../SDL2/src/dynapi/SDL_dynapi_procs.h | 149 +- src/thirdparty/SDL2/src/dynapi/gendynapi.pl | 2 +- .../SDL2/src/events/SDL_clipboardevents.c | 2 +- .../SDL2/src/events/SDL_clipboardevents_c.h | 8 +- .../SDL2/src/events/SDL_dropevents.c | 70 +- .../SDL2/src/events/SDL_dropevents_c.h | 12 +- src/thirdparty/SDL2/src/events/SDL_events.c | 558 +- src/thirdparty/SDL2/src/events/SDL_events_c.h | 7 +- src/thirdparty/SDL2/src/events/SDL_gesture.c | 119 +- .../SDL2/src/events/SDL_gesture_c.h | 11 +- src/thirdparty/SDL2/src/events/SDL_keyboard.c | 192 +- .../SDL2/src/events/SDL_keyboard_c.h | 11 +- src/thirdparty/SDL2/src/events/SDL_mouse.c | 365 +- src/thirdparty/SDL2/src/events/SDL_mouse_c.h | 32 +- src/thirdparty/SDL2/src/events/SDL_quit.c | 48 +- .../SDL2/src/events/SDL_sysevents.h | 2 +- src/thirdparty/SDL2/src/events/SDL_touch.c | 23 +- src/thirdparty/SDL2/src/events/SDL_touch_c.h | 8 +- .../SDL2/src/events/SDL_windowevents.c | 28 +- .../SDL2/src/events/SDL_windowevents_c.h | 8 +- src/thirdparty/SDL2/src/events/blank_cursor.h | 2 +- .../SDL2/src/events/default_cursor.h | 4 +- .../SDL2/src/events/scancodes_darwin.h | 2 +- .../SDL2/src/events/scancodes_linux.h | 20 +- .../SDL2/src/events/scancodes_windows.h | 6 +- .../SDL2/src/events/scancodes_xfree86.h | 105 +- src/thirdparty/SDL2/src/file/SDL_rwops.c | 138 +- .../src/file/cocoa/SDL_rwopsbundlesupport.h | 2 +- .../src/file/cocoa/SDL_rwopsbundlesupport.m | 22 +- .../filesystem/android/SDL_sysfilesystem.c | 62 + .../src/filesystem/cocoa/SDL_sysfilesystem.m | 30 +- .../src/filesystem/dummy/SDL_sysfilesystem.c | 6 +- .../filesystem/emscripten/SDL_sysfilesystem.c | 81 + .../src/filesystem/haiku/SDL_sysfilesystem.cc | 33 +- .../src/filesystem/nacl/SDL_sysfilesystem.c | 43 + .../src/filesystem/unix/SDL_sysfilesystem.c | 54 +- .../filesystem/windows/SDL_sysfilesystem.c | 68 +- .../filesystem/winrt/SDL_sysfilesystem.cpp | 99 +- src/thirdparty/SDL2/src/haptic/SDL_haptic.c | 8 +- src/thirdparty/SDL2/src/haptic/SDL_haptic_c.h | 2 +- .../SDL2/src/haptic/SDL_syshaptic.h | 16 +- .../SDL2/src/haptic/android/SDL_syshaptic.c | 357 + .../SDL2/src/haptic/android/SDL_syshaptic_c.h | 12 + .../SDL2/src/haptic/darwin/SDL_syshaptic.c | 174 +- .../SDL2/src/haptic/darwin/SDL_syshaptic_c.h | 2 +- .../SDL2/src/haptic/dummy/SDL_syshaptic.c | 4 +- .../SDL2/src/haptic/linux/SDL_syshaptic.c | 128 +- .../src/haptic/windows/SDL_dinputhaptic.c | 1305 ++ .../src/haptic/windows/SDL_dinputhaptic_c.h | 47 + .../src/haptic/windows/SDL_windowshaptic.c | 449 + .../src/haptic/windows/SDL_windowshaptic_c.h | 88 + .../src/haptic/windows/SDL_xinputhaptic.c | 487 + .../src/haptic/windows/SDL_xinputhaptic_c.h | 47 + .../SDL2/src/joystick/SDL_gamecontroller.c | 1662 +- .../SDL2/src/joystick/SDL_gamecontrollerdb.h | 213 +- .../SDL2/src/joystick/SDL_joystick.c | 700 +- .../SDL2/src/joystick/SDL_joystick_c.h | 19 +- .../SDL2/src/joystick/SDL_sysjoystick.h | 49 +- .../src/joystick/android/SDL_sysjoystick.c | 227 +- .../src/joystick/android/SDL_sysjoystick_c.h | 51 +- .../SDL2/src/joystick/bsd/SDL_sysjoystick.c | 89 +- .../src/joystick/darwin/SDL_sysjoystick.c | 309 +- .../src/joystick/darwin/SDL_sysjoystick_c.h | 10 +- .../SDL2/src/joystick/dummy/SDL_sysjoystick.c | 22 +- .../src/joystick/emscripten/SDL_sysjoystick.c | 403 + .../joystick/emscripten/SDL_sysjoystick_c.h | 52 + .../src/joystick/haiku/SDL_haikujoystick.cc | 47 +- .../src/joystick/iphoneos/SDL_sysjoystick.m | 730 +- .../src/joystick/iphoneos/SDL_sysjoystick_c.h | 58 + .../SDL2/src/joystick/linux/SDL_sysjoystick.c | 381 +- .../src/joystick/linux/SDL_sysjoystick_c.h | 7 +- .../SDL2/src/joystick/psp/SDL_sysjoystick.c | 32 +- .../SDL2/src/joystick/sort_controllers.py | 17 +- .../src/joystick/steam/SDL_steamcontroller.c | 52 + .../src/joystick/steam/SDL_steamcontroller.h | 33 + .../src/joystick/windows/SDL_dinputjoystick.c | 992 + .../joystick/windows/SDL_dinputjoystick_c.h | 30 + .../src/joystick/windows/SDL_mmjoystick.c | 72 +- .../joystick/windows/SDL_windowsjoystick.c | 548 + .../joystick/windows/SDL_windowsjoystick_c.h | 93 + .../src/joystick/windows/SDL_xinputjoystick.c | 521 + .../joystick/windows/SDL_xinputjoystick_c.h | 33 + src/thirdparty/SDL2/src/libm/e_atan2.c | 22 +- src/thirdparty/SDL2/src/libm/e_fmod.c | 144 + src/thirdparty/SDL2/src/libm/e_log.c | 171 +- src/thirdparty/SDL2/src/libm/e_pow.c | 593 +- src/thirdparty/SDL2/src/libm/e_rem_pio2.c | 270 +- src/thirdparty/SDL2/src/libm/e_sqrt.c | 209 +- src/thirdparty/SDL2/src/libm/k_cos.c | 76 +- src/thirdparty/SDL2/src/libm/k_rem_pio2.c | 334 +- src/thirdparty/SDL2/src/libm/k_sin.c | 60 +- src/thirdparty/SDL2/src/libm/k_tan.c | 118 + src/thirdparty/SDL2/src/libm/math_libm.h | 4 +- src/thirdparty/SDL2/src/libm/math_private.h | 5 + src/thirdparty/SDL2/src/libm/s_atan.c | 1 - src/thirdparty/SDL2/src/libm/s_copysign.c | 25 +- src/thirdparty/SDL2/src/libm/s_cos.c | 52 +- src/thirdparty/SDL2/src/libm/s_fabs.c | 26 +- src/thirdparty/SDL2/src/libm/s_floor.c | 113 +- src/thirdparty/SDL2/src/libm/s_scalbn.c | 102 +- src/thirdparty/SDL2/src/libm/s_sin.c | 52 +- src/thirdparty/SDL2/src/libm/s_tan.c | 67 + .../SDL2/src/loadso/dlopen/SDL_sysloadso.c | 20 +- .../SDL2/src/loadso/dummy/SDL_sysloadso.c | 2 +- .../SDL2/src/loadso/windows/SDL_sysloadso.c | 2 +- .../SDL2/src/main/android/SDL_android_main.c | 37 +- src/thirdparty/SDL2/src/main/haiku/SDL_BApp.h | 29 +- .../SDL2/src/main/haiku/SDL_BeApp.cc | 31 +- .../SDL2/src/main/haiku/SDL_BeApp.h | 4 +- .../SDL2/src/main/nacl/SDL_nacl_main.c | 93 + .../SDL2/src/main/psp/SDL_psp_main.c | 7 + .../SDL2/src/main/windows/SDL_windows_main.c | 96 +- .../SDL2/src/main/windows/version.rc | 10 +- .../winrt/SDL2-WinRTResource_BlankCursor.cur | Bin 0 -> 326 bytes .../src/main/winrt/SDL2-WinRTResources.rc | 3 + .../src/main/winrt/SDL_winrt_main_NonXAML.cpp | 7 +- src/thirdparty/SDL2/src/power/SDL_power.c | 22 +- src/thirdparty/SDL2/src/power/SDL_syspower.h | 47 + .../SDL2/src/power/android/SDL_syspower.c | 3 +- .../SDL2/src/power/emscripten/SDL_syspower.c | 62 + .../SDL2/src/power/haiku/SDL_syspower.c | 4 +- .../SDL2/src/power/linux/SDL_syspower.c | 229 +- .../SDL2/src/power/macosx/SDL_syspower.c | 6 +- .../SDL2/src/power/psp/SDL_syspower.c | 2 +- .../SDL2/src/power/uikit/SDL_syspower.h | 2 +- .../SDL2/src/power/uikit/SDL_syspower.m | 54 +- .../SDL2/src/power/windows/SDL_syspower.c | 2 +- .../SDL2/src/power/winrt/SDL_syspower.cpp | 2 +- src/thirdparty/SDL2/src/render/SDL_d3dmath.c | 105 +- src/thirdparty/SDL2/src/render/SDL_d3dmath.h | 7 +- src/thirdparty/SDL2/src/render/SDL_render.c | 537 +- .../SDL2/src/render/SDL_sysrender.h | 48 +- src/thirdparty/SDL2/src/render/SDL_yuv_sw.c | 1230 +- src/thirdparty/SDL2/src/render/SDL_yuv_sw_c.h | 17 +- .../SDL2/src/render/direct3d/SDL_render_d3d.c | 986 +- .../src/render/direct3d/SDL_shaders_d3d.c | 274 + .../src/render/direct3d/SDL_shaders_d3d.h | 34 + .../src/render/direct3d11/SDL_render_d3d11.c | 1365 +- .../render/direct3d11/SDL_render_winrt.cpp | 9 +- .../src/render/direct3d11/SDL_render_winrt.h | 2 +- .../src/render/direct3d11/SDL_shaders_d3d11.c | 1957 ++ .../src/render/direct3d11/SDL_shaders_d3d11.h | 43 + .../SDL2/src/render/metal/SDL_render_metal.m | 1429 ++ .../src/render/metal/SDL_shaders_metal.metal | 109 + .../src/render/metal/SDL_shaders_metal_ios.h | 1899 ++ .../src/render/metal/SDL_shaders_metal_osx.h | 1903 ++ .../src/render/metal/build-metal-shaders.sh | 18 + .../SDL2/src/render/opengl/SDL_glfuncs.h | 5 +- .../SDL2/src/render/opengl/SDL_render_gl.c | 443 +- .../SDL2/src/render/opengl/SDL_shaders_gl.c | 302 +- .../SDL2/src/render/opengl/SDL_shaders_gl.h | 14 +- .../SDL2/src/render/opengles/SDL_glesfuncs.h | 4 +- .../src/render/opengles/SDL_render_gles.c | 440 +- .../src/render/opengles2/SDL_gles2funcs.h | 15 +- .../src/render/opengles2/SDL_render_gles2.c | 1200 +- .../src/render/opengles2/SDL_shaders_gles2.c | 814 +- .../src/render/opengles2/SDL_shaders_gles2.h | 26 +- .../SDL2/src/render/psp/SDL_render_psp.c | 18 +- .../src/render/software/SDL_blendfillrect.c | 4 +- .../src/render/software/SDL_blendfillrect.h | 2 +- .../SDL2/src/render/software/SDL_blendline.c | 4 +- .../SDL2/src/render/software/SDL_blendline.h | 2 +- .../SDL2/src/render/software/SDL_blendpoint.c | 10 +- .../SDL2/src/render/software/SDL_blendpoint.h | 2 +- .../SDL2/src/render/software/SDL_draw.h | 13 +- .../SDL2/src/render/software/SDL_drawline.c | 2 +- .../SDL2/src/render/software/SDL_drawline.h | 2 +- .../SDL2/src/render/software/SDL_drawpoint.c | 2 +- .../SDL2/src/render/software/SDL_drawpoint.h | 2 +- .../SDL2/src/render/software/SDL_render_sw.c | 329 +- .../src/render/software/SDL_render_sw_c.h | 2 +- .../SDL2/src/render/software/SDL_rotate.c | 367 +- .../SDL2/src/render/software/SDL_rotate.h | 2 +- src/thirdparty/SDL2/src/stdlib/SDL_getenv.c | 55 +- src/thirdparty/SDL2/src/stdlib/SDL_iconv.c | 16 +- src/thirdparty/SDL2/src/stdlib/SDL_malloc.c | 178 +- src/thirdparty/SDL2/src/stdlib/SDL_qsort.c | 484 +- src/thirdparty/SDL2/src/stdlib/SDL_stdlib.c | 268 +- src/thirdparty/SDL2/src/stdlib/SDL_string.c | 200 +- .../SDL2/src/test/SDL_test_assert.c | 28 +- .../SDL2/src/test/SDL_test_common.c | 477 +- .../SDL2/src/test/SDL_test_compare.c | 12 +- src/thirdparty/SDL2/src/test/SDL_test_crc32.c | 5 +- src/thirdparty/SDL2/src/test/SDL_test_font.c | 54 +- .../SDL2/src/test/SDL_test_fuzzer.c | 28 +- .../SDL2/src/test/SDL_test_harness.c | 117 +- .../SDL2/src/test/SDL_test_imageBlit.c | 10 +- .../SDL2/src/test/SDL_test_imageBlitBlend.c | 14 +- .../SDL2/src/test/SDL_test_imageFace.c | 5 +- .../SDL2/src/test/SDL_test_imagePrimitives.c | 6 +- .../src/test/SDL_test_imagePrimitivesBlend.c | 6 +- src/thirdparty/SDL2/src/test/SDL_test_log.c | 30 +- src/thirdparty/SDL2/src/test/SDL_test_md5.c | 4 +- .../SDL2/src/test/SDL_test_memory.c | 274 + .../SDL2/src/test/SDL_test_random.c | 6 +- .../SDL2/src/thread/SDL_systhread.h | 15 +- src/thirdparty/SDL2/src/thread/SDL_thread.c | 71 +- src/thirdparty/SDL2/src/thread/SDL_thread_c.h | 13 +- .../SDL2/src/thread/generic/SDL_syscond.c | 2 +- .../SDL2/src/thread/generic/SDL_sysmutex.c | 2 +- .../SDL2/src/thread/generic/SDL_sysmutex_c.h | 2 +- .../SDL2/src/thread/generic/SDL_syssem.c | 2 +- .../SDL2/src/thread/generic/SDL_systhread.c | 2 +- .../SDL2/src/thread/generic/SDL_systhread_c.h | 2 +- .../SDL2/src/thread/generic/SDL_systls.c | 4 +- .../SDL2/src/thread/psp/SDL_syscond.c | 6 +- .../SDL2/src/thread/psp/SDL_sysmutex.c | 6 +- .../SDL2/src/thread/psp/SDL_sysmutex_c.h | 2 +- .../SDL2/src/thread/psp/SDL_syssem.c | 11 +- .../SDL2/src/thread/psp/SDL_systhread.c | 10 +- .../SDL2/src/thread/psp/SDL_systhread_c.h | 2 +- .../SDL2/src/thread/pthread/SDL_syscond.c | 14 +- .../SDL2/src/thread/pthread/SDL_sysmutex.c | 7 +- .../SDL2/src/thread/pthread/SDL_sysmutex_c.h | 8 +- .../SDL2/src/thread/pthread/SDL_syssem.c | 29 +- .../SDL2/src/thread/pthread/SDL_systhread.c | 30 +- .../SDL2/src/thread/pthread/SDL_systhread_c.h | 2 +- .../SDL2/src/thread/pthread/SDL_systls.c | 5 +- .../SDL2/src/thread/stdcpp/SDL_syscond.cpp | 4 +- .../SDL2/src/thread/stdcpp/SDL_sysmutex.cpp | 2 +- .../SDL2/src/thread/stdcpp/SDL_sysmutex_c.h | 2 +- .../SDL2/src/thread/stdcpp/SDL_systhread.cpp | 5 +- .../SDL2/src/thread/stdcpp/SDL_systhread_c.h | 2 +- .../SDL2/src/thread/windows/SDL_sysmutex.c | 6 +- .../SDL2/src/thread/windows/SDL_syssem.c | 8 +- .../SDL2/src/thread/windows/SDL_systhread.c | 97 +- .../SDL2/src/thread/windows/SDL_systhread_c.h | 8 +- .../SDL2/src/thread/windows/SDL_systls.c | 4 +- src/thirdparty/SDL2/src/timer/SDL_timer.c | 64 +- src/thirdparty/SDL2/src/timer/SDL_timer_c.h | 2 +- .../SDL2/src/timer/dummy/SDL_systimer.c | 2 +- .../SDL2/src/timer/haiku/SDL_systimer.c | 4 +- .../SDL2/src/timer/psp/SDL_systimer.c | 7 +- .../SDL2/src/timer/unix/SDL_systimer.c | 31 +- .../SDL2/src/timer/windows/SDL_systimer.c | 96 +- src/thirdparty/SDL2/src/video/SDL_RLEaccel.c | 601 +- .../SDL2/src/video/SDL_RLEaccel_c.h | 10 +- src/thirdparty/SDL2/src/video/SDL_blit.c | 14 +- src/thirdparty/SDL2/src/video/SDL_blit.h | 67 +- src/thirdparty/SDL2/src/video/SDL_blit_0.c | 2 +- src/thirdparty/SDL2/src/video/SDL_blit_1.c | 16 +- src/thirdparty/SDL2/src/video/SDL_blit_A.c | 12 +- src/thirdparty/SDL2/src/video/SDL_blit_N.c | 76 +- src/thirdparty/SDL2/src/video/SDL_blit_auto.c | 580 +- src/thirdparty/SDL2/src/video/SDL_blit_auto.h | 2 +- src/thirdparty/SDL2/src/video/SDL_blit_copy.c | 20 +- src/thirdparty/SDL2/src/video/SDL_blit_copy.h | 2 +- src/thirdparty/SDL2/src/video/SDL_blit_slow.c | 7 +- src/thirdparty/SDL2/src/video/SDL_blit_slow.h | 2 +- src/thirdparty/SDL2/src/video/SDL_bmp.c | 226 +- src/thirdparty/SDL2/src/video/SDL_clipboard.c | 16 +- src/thirdparty/SDL2/src/video/SDL_egl.c | 502 +- src/thirdparty/SDL2/src/video/SDL_egl_c.h | 35 +- src/thirdparty/SDL2/src/video/SDL_fillrect.c | 42 +- src/thirdparty/SDL2/src/video/SDL_pixels.c | 43 +- src/thirdparty/SDL2/src/video/SDL_pixels_c.h | 3 +- src/thirdparty/SDL2/src/video/SDL_rect.c | 10 +- src/thirdparty/SDL2/src/video/SDL_rect_c.h | 2 +- src/thirdparty/SDL2/src/video/SDL_shape.c | 59 +- .../SDL2/src/video/SDL_shape_internals.h | 6 +- src/thirdparty/SDL2/src/video/SDL_stretch.c | 10 +- src/thirdparty/SDL2/src/video/SDL_surface.c | 452 +- src/thirdparty/SDL2/src/video/SDL_sysvideo.h | 125 +- src/thirdparty/SDL2/src/video/SDL_video.c | 1175 +- .../SDL2/src/video/SDL_vulkan_internal.h | 88 + .../SDL2/src/video/SDL_vulkan_utils.c | 172 + src/thirdparty/SDL2/src/video/SDL_yuv.c | 1834 ++ src/thirdparty/SDL2/src/video/SDL_yuv_c.h | 30 + .../src/video/android/SDL_androidclipboard.c | 4 +- .../src/video/android/SDL_androidclipboard.h | 8 +- .../src/video/android/SDL_androidevents.c | 20 +- .../src/video/android/SDL_androidevents.h | 2 +- .../SDL2/src/video/android/SDL_androidgl.c | 19 +- .../SDL2/src/video/android/SDL_androidgl.h | 34 + .../src/video/android/SDL_androidkeyboard.c | 69 +- .../src/video/android/SDL_androidkeyboard.h | 2 +- .../src/video/android/SDL_androidmessagebox.c | 37 + .../src/video/android/SDL_androidmessagebox.h | 29 + .../SDL2/src/video/android/SDL_androidmouse.c | 117 + .../SDL2/src/video/android/SDL_androidmouse.h | 32 + .../SDL2/src/video/android/SDL_androidtouch.c | 66 +- .../SDL2/src/video/android/SDL_androidtouch.h | 3 +- .../SDL2/src/video/android/SDL_androidvideo.c | 79 +- .../SDL2/src/video/android/SDL_androidvideo.h | 10 +- .../src/video/android/SDL_androidvulkan.c | 174 + .../src/video/android/SDL_androidvulkan.h | 52 + .../src/video/android/SDL_androidwindow.c | 43 +- .../src/video/android/SDL_androidwindow.h | 9 +- .../SDL2/src/video/cocoa/SDL_cocoaclipboard.h | 8 +- .../SDL2/src/video/cocoa/SDL_cocoaclipboard.m | 46 +- .../SDL2/src/video/cocoa/SDL_cocoaevents.h | 9 +- .../SDL2/src/video/cocoa/SDL_cocoaevents.m | 290 +- .../SDL2/src/video/cocoa/SDL_cocoakeyboard.h | 8 +- .../SDL2/src/video/cocoa/SDL_cocoakeyboard.m | 300 +- .../src/video/cocoa/SDL_cocoamessagebox.h | 2 +- .../src/video/cocoa/SDL_cocoamessagebox.m | 46 +- .../SDL2/src/video/cocoa/SDL_cocoametalview.h | 64 + .../SDL2/src/video/cocoa/SDL_cocoametalview.m | 127 + .../SDL2/src/video/cocoa/SDL_cocoamodes.h | 12 +- .../SDL2/src/video/cocoa/SDL_cocoamodes.m | 285 +- .../SDL2/src/video/cocoa/SDL_cocoamouse.h | 8 +- .../SDL2/src/video/cocoa/SDL_cocoamouse.m | 204 +- .../SDL2/src/video/cocoa/SDL_cocoamousetap.h | 9 +- .../SDL2/src/video/cocoa/SDL_cocoamousetap.m | 64 +- .../SDL2/src/video/cocoa/SDL_cocoaopengl.h | 10 +- .../SDL2/src/video/cocoa/SDL_cocoaopengl.m | 92 +- .../SDL2/src/video/cocoa/SDL_cocoaopengles.h | 49 + .../SDL2/src/video/cocoa/SDL_cocoaopengles.m | 132 + .../SDL2/src/video/cocoa/SDL_cocoashape.h | 10 +- .../SDL2/src/video/cocoa/SDL_cocoashape.m | 26 +- .../SDL2/src/video/cocoa/SDL_cocoavideo.h | 66 +- .../SDL2/src/video/cocoa/SDL_cocoavideo.m | 55 +- .../SDL2/src/video/cocoa/SDL_cocoavulkan.h | 55 + .../SDL2/src/video/cocoa/SDL_cocoavulkan.m | 209 + .../SDL2/src/video/cocoa/SDL_cocoawindow.h | 34 +- .../SDL2/src/video/cocoa/SDL_cocoawindow.m | 849 +- .../SDL2/src/video/directfb/SDL_DirectFB_WM.c | 4 +- .../SDL2/src/video/directfb/SDL_DirectFB_WM.h | 8 +- .../src/video/directfb/SDL_DirectFB_dyn.c | 2 +- .../src/video/directfb/SDL_DirectFB_dyn.h | 10 +- .../src/video/directfb/SDL_DirectFB_events.c | 5 +- .../src/video/directfb/SDL_DirectFB_events.h | 10 +- .../src/video/directfb/SDL_DirectFB_modes.c | 2 +- .../src/video/directfb/SDL_DirectFB_modes.h | 8 +- .../src/video/directfb/SDL_DirectFB_mouse.c | 11 +- .../src/video/directfb/SDL_DirectFB_mouse.h | 8 +- .../src/video/directfb/SDL_DirectFB_opengl.c | 33 +- .../src/video/directfb/SDL_DirectFB_opengl.h | 10 +- .../src/video/directfb/SDL_DirectFB_render.c | 25 +- .../src/video/directfb/SDL_DirectFB_render.h | 2 +- .../src/video/directfb/SDL_DirectFB_shape.c | 13 +- .../src/video/directfb/SDL_DirectFB_shape.h | 9 +- .../src/video/directfb/SDL_DirectFB_video.c | 22 +- .../src/video/directfb/SDL_DirectFB_video.h | 8 +- .../src/video/directfb/SDL_DirectFB_window.c | 39 +- .../src/video/directfb/SDL_DirectFB_window.h | 9 +- .../SDL2/src/video/dummy/SDL_nullevents.c | 2 +- .../SDL2/src/video/dummy/SDL_nullevents_c.h | 2 +- .../src/video/dummy/SDL_nullframebuffer.c | 2 +- .../src/video/dummy/SDL_nullframebuffer_c.h | 2 +- .../SDL2/src/video/dummy/SDL_nullvideo.c | 4 +- .../SDL2/src/video/dummy/SDL_nullvideo.h | 8 +- .../video/emscripten/SDL_emscriptenevents.c | 716 + .../video/emscripten/SDL_emscriptenevents.h | 40 + .../emscripten/SDL_emscriptenframebuffer.c | 178 + .../emscripten/SDL_emscriptenframebuffer.h | 32 + .../video/emscripten/SDL_emscriptenmouse.c | 274 + .../video/emscripten/SDL_emscriptenmouse.h | 42 + .../video/emscripten/SDL_emscriptenopengles.c | 119 + .../video/emscripten/SDL_emscriptenopengles.h | 49 + .../video/emscripten/SDL_emscriptenvideo.c | 354 + .../video/emscripten/SDL_emscriptenvideo.h | 58 + .../SDL2/src/video/haiku/SDL_BWin.h | 63 +- .../SDL2/src/video/haiku/SDL_bclipboard.cc | 14 +- .../SDL2/src/video/haiku/SDL_bclipboard.h | 4 +- .../SDL2/src/video/haiku/SDL_bevents.cc | 4 +- .../SDL2/src/video/haiku/SDL_bevents.h | 4 +- .../SDL2/src/video/haiku/SDL_bframebuffer.cc | 17 +- .../SDL2/src/video/haiku/SDL_bframebuffer.h | 4 +- .../SDL2/src/video/haiku/SDL_bkeyboard.cc | 6 +- .../SDL2/src/video/haiku/SDL_bkeyboard.h | 6 +- .../SDL2/src/video/haiku/SDL_bmodes.cc | 8 +- .../SDL2/src/video/haiku/SDL_bmodes.h | 4 +- .../SDL2/src/video/haiku/SDL_bopengl.cc | 197 +- .../SDL2/src/video/haiku/SDL_bopengl.h | 10 +- .../SDL2/src/video/haiku/SDL_bvideo.cc | 12 +- .../SDL2/src/video/haiku/SDL_bvideo.h | 4 +- .../SDL2/src/video/haiku/SDL_bwindow.cc | 24 +- .../SDL2/src/video/haiku/SDL_bwindow.h | 4 +- .../SDL2/src/video/khronos/EGL/egl.h | 303 + .../SDL2/src/video/khronos/EGL/eglext.h | 1241 ++ .../SDL2/src/video/khronos/EGL/eglplatform.h | 132 + .../SDL2/src/video/khronos/GLES2/gl2.h | 675 + .../SDL2/src/video/khronos/GLES2/gl2ext.h | 3505 ++++ .../src/video/khronos/GLES2/gl2platform.h | 38 + .../SDL2/src/video/khronos/KHR/khrplatform.h | 284 + .../src/video/khronos/vulkan/vk_platform.h | 120 + .../SDL2/src/video/khronos/vulkan/vulkan.h | 6458 ++++++ .../SDL2/src/video/kmsdrm/SDL_kmsdrmdyn.c | 171 + .../SDL2/src/video/kmsdrm/SDL_kmsdrmdyn.h | 53 + .../SDL2/src/video/kmsdrm/SDL_kmsdrmevents.c | 42 + .../SDL2/src/video/kmsdrm/SDL_kmsdrmevents.h | 31 + .../SDL2/src/video/kmsdrm/SDL_kmsdrmmouse.c | 501 + .../SDL2/src/video/kmsdrm/SDL_kmsdrmmouse.h | 45 + .../src/video/kmsdrm/SDL_kmsdrmopengles.c | 189 + .../src/video/kmsdrm/SDL_kmsdrmopengles.h | 48 + .../SDL2/src/video/kmsdrm/SDL_kmsdrmsym.h | 99 + .../SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c | 664 + .../SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.h | 124 + .../SDL2/src/video/mir/SDL_mirdyn.c | 17 +- .../SDL2/src/video/mir/SDL_mirdyn.h | 14 +- .../SDL2/src/video/mir/SDL_mirevents.c | 279 +- .../SDL2/src/video/mir/SDL_mirevents.h | 10 +- .../SDL2/src/video/mir/SDL_mirframebuffer.c | 43 +- .../SDL2/src/video/mir/SDL_mirframebuffer.h | 8 +- .../SDL2/src/video/mir/SDL_mirmouse.c | 180 +- .../SDL2/src/video/mir/SDL_mirmouse.h | 8 +- .../SDL2/src/video/mir/SDL_miropengl.c | 26 +- .../SDL2/src/video/mir/SDL_miropengl.h | 19 +- .../SDL2/src/video/mir/SDL_mirsym.h | 123 +- .../SDL2/src/video/mir/SDL_mirvideo.c | 257 +- .../SDL2/src/video/mir/SDL_mirvideo.h | 20 +- .../SDL2/src/video/mir/SDL_mirvulkan.c | 175 + .../SDL2/src/video/mir/SDL_mirvulkan.h | 52 + .../SDL2/src/video/mir/SDL_mirwindow.c | 261 +- .../SDL2/src/video/mir/SDL_mirwindow.h | 42 +- .../SDL2/src/video/nacl/SDL_naclevents.c | 438 + .../SDL2/src/video/nacl/SDL_naclevents_c.h | 30 + .../SDL2/src/video/nacl/SDL_naclglue.c | 24 + .../SDL2/src/video/nacl/SDL_naclopengles.c | 174 + .../SDL2/src/video/nacl/SDL_naclopengles.h | 38 + .../SDL2/src/video/nacl/SDL_naclvideo.c | 183 + .../SDL2/src/video/nacl/SDL_naclvideo.h | 67 + .../SDL2/src/video/nacl/SDL_naclwindow.c | 79 + .../SDL2/src/video/nacl/SDL_naclwindow.h | 32 + .../SDL2/src/video/pandora/SDL_pandora.c | 52 +- .../SDL2/src/video/pandora/SDL_pandora.h | 6 +- .../src/video/pandora/SDL_pandora_events.c | 2 +- .../src/video/pandora/SDL_pandora_events.h | 2 +- .../SDL2/src/video/psp/SDL_pspevents.c | 20 +- .../SDL2/src/video/psp/SDL_pspevents_c.h | 2 +- src/thirdparty/SDL2/src/video/psp/SDL_pspgl.c | 19 +- .../SDL2/src/video/psp/SDL_pspgl_c.h | 12 +- .../SDL2/src/video/psp/SDL_pspmouse.c | 8 +- .../SDL2/src/video/psp/SDL_pspmouse_c.h | 2 +- .../SDL2/src/video/psp/SDL_pspvideo.c | 21 +- .../SDL2/src/video/psp/SDL_pspvideo.h | 10 +- src/thirdparty/SDL2/src/video/qnx/gl.c | 285 + src/thirdparty/SDL2/src/video/qnx/keyboard.c | 133 + src/thirdparty/SDL2/src/video/qnx/sdl_qnx.h | 48 + src/thirdparty/SDL2/src/video/qnx/video.c | 364 + .../SDL2/src/video/raspberry/SDL_rpievents.c | 2 +- .../src/video/raspberry/SDL_rpievents_c.h | 8 +- .../SDL2/src/video/raspberry/SDL_rpimouse.c | 217 +- .../SDL2/src/video/raspberry/SDL_rpimouse.h | 8 +- .../src/video/raspberry/SDL_rpiopengles.c | 35 +- .../src/video/raspberry/SDL_rpiopengles.h | 11 +- .../SDL2/src/video/raspberry/SDL_rpivideo.c | 94 +- .../SDL2/src/video/raspberry/SDL_rpivideo.h | 12 +- src/thirdparty/SDL2/src/video/sdlgenblit.pl | 79 +- .../src/video/uikit/SDL_uikitappdelegate.h | 23 +- .../src/video/uikit/SDL_uikitappdelegate.m | 513 +- .../SDL2/src/video/uikit/SDL_uikitclipboard.h | 35 + .../SDL2/src/video/uikit/SDL_uikitclipboard.m | 111 + .../SDL2/src/video/uikit/SDL_uikitevents.h | 8 +- .../SDL2/src/video/uikit/SDL_uikitevents.m | 9 +- .../src/video/uikit/SDL_uikitmessagebox.h | 4 +- .../src/video/uikit/SDL_uikitmessagebox.m | 188 +- .../SDL2/src/video/uikit/SDL_uikitmetalview.h | 59 + .../SDL2/src/video/uikit/SDL_uikitmetalview.m | 136 + .../SDL2/src/video/uikit/SDL_uikitmodes.h | 29 +- .../SDL2/src/video/uikit/SDL_uikitmodes.m | 282 +- .../SDL2/src/video/uikit/SDL_uikitopengles.h | 14 +- .../SDL2/src/video/uikit/SDL_uikitopengles.m | 281 +- .../src/video/uikit/SDL_uikitopenglview.h | 74 +- .../src/video/uikit/SDL_uikitopenglview.m | 402 +- .../SDL2/src/video/uikit/SDL_uikitvideo.h | 39 +- .../SDL2/src/video/uikit/SDL_uikitvideo.m | 170 +- .../SDL2/src/video/uikit/SDL_uikitview.h | 49 +- .../SDL2/src/video/uikit/SDL_uikitview.m | 587 +- .../src/video/uikit/SDL_uikitviewcontroller.h | 93 +- .../src/video/uikit/SDL_uikitviewcontroller.m | 474 +- .../SDL2/src/video/uikit/SDL_uikitvulkan.h | 54 + .../SDL2/src/video/uikit/SDL_uikitvulkan.m | 222 + .../SDL2/src/video/uikit/SDL_uikitwindow.h | 31 +- .../SDL2/src/video/uikit/SDL_uikitwindow.m | 496 +- .../SDL2/src/video/uikit/keyinfotable.h | 4 +- .../src/video/vivante/SDL_vivanteopengles.c | 47 + .../src/video/vivante/SDL_vivanteopengles.h | 48 + .../src/video/vivante/SDL_vivanteplatform.c | 54 + .../src/video/vivante/SDL_vivanteplatform.h | 47 + .../SDL2/src/video/vivante/SDL_vivantevideo.c | 409 + .../SDL2/src/video/vivante/SDL_vivantevideo.h | 91 + .../src/video/wayland/SDL_waylandclipboard.c | 123 + .../src/video/wayland/SDL_waylandclipboard.h | 32 + .../video/wayland/SDL_waylanddatamanager.c | 468 + .../video/wayland/SDL_waylanddatamanager.h | 103 + .../SDL2/src/video/wayland/SDL_waylanddyn.c | 19 +- .../SDL2/src/video/wayland/SDL_waylanddyn.h | 21 +- .../src/video/wayland/SDL_waylandevents.c | 789 +- .../src/video/wayland/SDL_waylandevents_c.h | 22 +- .../SDL2/src/video/wayland/SDL_waylandmouse.c | 116 +- .../SDL2/src/video/wayland/SDL_waylandmouse.h | 2 +- .../src/video/wayland/SDL_waylandopengles.c | 12 +- .../src/video/wayland/SDL_waylandopengles.h | 12 +- .../SDL2/src/video/wayland/SDL_waylandsym.h | 25 +- .../SDL2/src/video/wayland/SDL_waylandtouch.c | 23 +- .../SDL2/src/video/wayland/SDL_waylandtouch.h | 8 +- .../SDL2/src/video/wayland/SDL_waylandvideo.c | 305 +- .../SDL2/src/video/wayland/SDL_waylandvideo.h | 27 +- .../src/video/wayland/SDL_waylandvulkan.c | 175 + .../src/video/wayland/SDL_waylandvulkan.h | 52 + .../src/video/wayland/SDL_waylandwindow.c | 195 +- .../src/video/wayland/SDL_waylandwindow.h | 13 +- .../SDL2/src/video/windows/SDL_msctf.h | 8 +- .../SDL2/src/video/windows/SDL_vkeys.h | 2 +- .../src/video/windows/SDL_windowsclipboard.c | 2 +- .../src/video/windows/SDL_windowsclipboard.h | 8 +- .../src/video/windows/SDL_windowsevents.c | 827 +- .../src/video/windows/SDL_windowsevents.h | 8 +- .../video/windows/SDL_windowsframebuffer.c | 5 +- .../video/windows/SDL_windowsframebuffer.h | 2 +- .../src/video/windows/SDL_windowskeyboard.c | 137 +- .../src/video/windows/SDL_windowskeyboard.h | 10 +- .../src/video/windows/SDL_windowsmessagebox.c | 45 +- .../src/video/windows/SDL_windowsmessagebox.h | 2 +- .../SDL2/src/video/windows/SDL_windowsmodes.c | 301 +- .../SDL2/src/video/windows/SDL_windowsmodes.h | 13 +- .../SDL2/src/video/windows/SDL_windowsmouse.c | 110 +- .../SDL2/src/video/windows/SDL_windowsmouse.h | 8 +- .../src/video/windows/SDL_windowsopengl.c | 159 +- .../src/video/windows/SDL_windowsopengl.h | 26 +- .../src/video/windows/SDL_windowsopengles.c | 20 +- .../src/video/windows/SDL_windowsopengles.h | 14 +- .../SDL2/src/video/windows/SDL_windowsshape.c | 4 +- .../SDL2/src/video/windows/SDL_windowsshape.h | 8 +- .../SDL2/src/video/windows/SDL_windowsvideo.c | 350 +- .../SDL2/src/video/windows/SDL_windowsvideo.h | 29 +- .../src/video/windows/SDL_windowsvulkan.c | 176 + .../src/video/windows/SDL_windowsvulkan.h | 52 + .../src/video/windows/SDL_windowswindow.c | 420 +- .../src/video/windows/SDL_windowswindow.h | 22 +- src/thirdparty/SDL2/src/video/windows/wmmsg.h | 12 +- .../SDL2/src/video/winrt/SDL_winrtevents.cpp | 7 +- .../SDL2/src/video/winrt/SDL_winrtevents_c.h | 14 +- .../SDL2/src/video/winrt/SDL_winrtgamebar.cpp | 196 + .../src/video/winrt/SDL_winrtgamebar_cpp.h | 35 + .../src/video/winrt/SDL_winrtkeyboard.cpp | 517 +- .../src/video/winrt/SDL_winrtmessagebox.cpp | 112 + .../src/video/winrt/SDL_winrtmessagebox.h | 29 + .../SDL2/src/video/winrt/SDL_winrtmouse.cpp | 65 +- .../SDL2/src/video/winrt/SDL_winrtmouse_c.h | 8 +- .../src/video/winrt/SDL_winrtopengles.cpp | 165 +- .../SDL2/src/video/winrt/SDL_winrtopengles.h | 34 +- .../src/video/winrt/SDL_winrtpointerinput.cpp | 47 +- .../SDL2/src/video/winrt/SDL_winrtvideo.cpp | 697 +- .../SDL2/src/video/winrt/SDL_winrtvideo_cpp.h | 67 +- .../SDL2/src/video/x11/SDL_x11clipboard.c | 39 +- .../SDL2/src/video/x11/SDL_x11clipboard.h | 9 +- .../SDL2/src/video/x11/SDL_x11dyn.c | 19 +- .../SDL2/src/video/x11/SDL_x11dyn.h | 17 +- .../SDL2/src/video/x11/SDL_x11events.c | 940 +- .../SDL2/src/video/x11/SDL_x11events.h | 8 +- .../SDL2/src/video/x11/SDL_x11framebuffer.c | 4 +- .../SDL2/src/video/x11/SDL_x11framebuffer.h | 2 +- .../SDL2/src/video/x11/SDL_x11keyboard.c | 314 +- .../SDL2/src/video/x11/SDL_x11keyboard.h | 12 +- .../SDL2/src/video/x11/SDL_x11messagebox.c | 115 +- .../SDL2/src/video/x11/SDL_x11messagebox.h | 2 +- .../SDL2/src/video/x11/SDL_x11modes.c | 539 +- .../SDL2/src/video/x11/SDL_x11modes.h | 13 +- .../SDL2/src/video/x11/SDL_x11mouse.c | 100 +- .../SDL2/src/video/x11/SDL_x11mouse.h | 8 +- .../SDL2/src/video/x11/SDL_x11opengl.c | 387 +- .../SDL2/src/video/x11/SDL_x11opengl.h | 26 +- .../SDL2/src/video/x11/SDL_x11opengles.c | 8 +- .../SDL2/src/video/x11/SDL_x11opengles.h | 13 +- .../SDL2/src/video/x11/SDL_x11shape.c | 8 +- .../SDL2/src/video/x11/SDL_x11shape.h | 9 +- .../SDL2/src/video/x11/SDL_x11sym.h | 44 +- .../SDL2/src/video/x11/SDL_x11touch.c | 9 +- .../SDL2/src/video/x11/SDL_x11touch.h | 9 +- .../SDL2/src/video/x11/SDL_x11video.c | 276 +- .../SDL2/src/video/x11/SDL_x11video.h | 53 +- .../SDL2/src/video/x11/SDL_x11vulkan.c | 241 + .../SDL2/src/video/x11/SDL_x11vulkan.h | 48 + .../SDL2/src/video/x11/SDL_x11window.c | 362 +- .../SDL2/src/video/x11/SDL_x11window.h | 23 +- .../SDL2/src/video/x11/SDL_x11xinput2.c | 81 +- .../SDL2/src/video/x11/SDL_x11xinput2.h | 8 +- .../SDL2/src/video/x11/edid-parse.c | 98 +- src/thirdparty/SDL2/src/video/x11/edid.h | 4 +- src/thirdparty/SDL2/src/video/x11/imKStoUCS.c | 496 +- src/thirdparty/SDL2/src/video/x11/imKStoUCS.h | 39 +- src/thirdparty/SDL2/src/video/yuv2rgb/LICENSE | 27 + .../SDL2/src/video/yuv2rgb/README.md | 63 + .../SDL2/src/video/yuv2rgb/yuv_rgb.c | 687 + .../SDL2/src/video/yuv2rgb/yuv_rgb.h | 381 + .../SDL2/src/video/yuv2rgb/yuv_rgb_sse_func.h | 498 + .../SDL2/src/video/yuv2rgb/yuv_rgb_std_func.h | 220 + 793 files changed, 112836 insertions(+), 54763 deletions(-) create mode 100644 projects/android-project/app/src/main/java/org/libsdl/app/SDL.java create mode 100644 projects/android-project/app/src/main/java/org/libsdl/app/SDLAudioManager.java create mode 100644 projects/android-project/app/src/main/java/org/libsdl/app/SDLControllerManager.java create mode 100644 src/eepp/graphics/renderer/shaders/basegl3cp.gles2.frag.h create mode 100644 src/eepp/graphics/renderer/shaders/basegl3cp.gles2.vert.h create mode 100644 src/thirdparty/SDL2/include/SDL_opengl_glext.h create mode 100644 src/thirdparty/SDL2/include/SDL_opengles2_gl2.h create mode 100644 src/thirdparty/SDL2/include/SDL_opengles2_gl2ext.h create mode 100644 src/thirdparty/SDL2/include/SDL_opengles2_gl2platform.h create mode 100644 src/thirdparty/SDL2/include/SDL_opengles2_khrplatform.h create mode 100644 src/thirdparty/SDL2/include/SDL_test_memory.h create mode 100644 src/thirdparty/SDL2/include/SDL_vulkan.h delete mode 100644 src/thirdparty/SDL2/include/doxyfile delete mode 100644 src/thirdparty/SDL2/java/src/org/libsdl/app/SDLActivity.java create mode 100644 src/thirdparty/SDL2/src/SDL_dataqueue.c create mode 100644 src/thirdparty/SDL2/src/SDL_dataqueue.h create mode 100644 src/thirdparty/SDL2/src/audio/coreaudio/SDL_coreaudio.m create mode 100644 src/thirdparty/SDL2/src/audio/emscripten/SDL_emscriptenaudio.c create mode 100644 src/thirdparty/SDL2/src/audio/emscripten/SDL_emscriptenaudio.h create mode 100644 src/thirdparty/SDL2/src/audio/jack/SDL_jackaudio.c create mode 100644 src/thirdparty/SDL2/src/audio/jack/SDL_jackaudio.h create mode 100644 src/thirdparty/SDL2/src/audio/nacl/SDL_naclaudio.c create mode 100644 src/thirdparty/SDL2/src/audio/nacl/SDL_naclaudio.h create mode 100644 src/thirdparty/SDL2/src/audio/netbsd/SDL_netbsdaudio.c create mode 100644 src/thirdparty/SDL2/src/audio/netbsd/SDL_netbsdaudio.h create mode 100644 src/thirdparty/SDL2/src/audio/wasapi/SDL_wasapi.c create mode 100644 src/thirdparty/SDL2/src/audio/wasapi/SDL_wasapi.h create mode 100644 src/thirdparty/SDL2/src/audio/wasapi/SDL_wasapi_win32.c create mode 100644 src/thirdparty/SDL2/src/audio/wasapi/SDL_wasapi_winrt.cpp create mode 100644 src/thirdparty/SDL2/src/core/android/keyinfotable.h create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_dbus.c create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_dbus.h create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_evdev_kbd.c create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_evdev_kbd.h create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_evdev_kbd_default_accents.h create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_evdev_kbd_default_keymap.h create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_fcitx.c create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_fcitx.h create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_ibus.c create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_ibus.h create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_ime.c create mode 100644 src/thirdparty/SDL2/src/core/linux/SDL_ime.h create mode 100644 src/thirdparty/SDL2/src/core/unix/SDL_poll.c create mode 100644 src/thirdparty/SDL2/src/core/unix/SDL_poll.h create mode 100644 src/thirdparty/SDL2/src/core/windows/SDL_directx.h create mode 100644 src/thirdparty/SDL2/src/core/windows/SDL_xinput.c create mode 100644 src/thirdparty/SDL2/src/core/windows/SDL_xinput.h create mode 100644 src/thirdparty/SDL2/src/filesystem/android/SDL_sysfilesystem.c create mode 100644 src/thirdparty/SDL2/src/filesystem/emscripten/SDL_sysfilesystem.c create mode 100644 src/thirdparty/SDL2/src/filesystem/nacl/SDL_sysfilesystem.c create mode 100644 src/thirdparty/SDL2/src/haptic/android/SDL_syshaptic.c create mode 100644 src/thirdparty/SDL2/src/haptic/android/SDL_syshaptic_c.h create mode 100644 src/thirdparty/SDL2/src/haptic/windows/SDL_dinputhaptic.c create mode 100644 src/thirdparty/SDL2/src/haptic/windows/SDL_dinputhaptic_c.h create mode 100644 src/thirdparty/SDL2/src/haptic/windows/SDL_windowshaptic.c create mode 100644 src/thirdparty/SDL2/src/haptic/windows/SDL_windowshaptic_c.h create mode 100644 src/thirdparty/SDL2/src/haptic/windows/SDL_xinputhaptic.c create mode 100644 src/thirdparty/SDL2/src/haptic/windows/SDL_xinputhaptic_c.h create mode 100644 src/thirdparty/SDL2/src/joystick/emscripten/SDL_sysjoystick.c create mode 100644 src/thirdparty/SDL2/src/joystick/emscripten/SDL_sysjoystick_c.h create mode 100644 src/thirdparty/SDL2/src/joystick/iphoneos/SDL_sysjoystick_c.h create mode 100644 src/thirdparty/SDL2/src/joystick/steam/SDL_steamcontroller.c create mode 100644 src/thirdparty/SDL2/src/joystick/steam/SDL_steamcontroller.h create mode 100644 src/thirdparty/SDL2/src/joystick/windows/SDL_dinputjoystick.c create mode 100644 src/thirdparty/SDL2/src/joystick/windows/SDL_dinputjoystick_c.h create mode 100644 src/thirdparty/SDL2/src/joystick/windows/SDL_windowsjoystick.c create mode 100644 src/thirdparty/SDL2/src/joystick/windows/SDL_windowsjoystick_c.h create mode 100644 src/thirdparty/SDL2/src/joystick/windows/SDL_xinputjoystick.c create mode 100644 src/thirdparty/SDL2/src/joystick/windows/SDL_xinputjoystick_c.h create mode 100644 src/thirdparty/SDL2/src/libm/e_fmod.c create mode 100644 src/thirdparty/SDL2/src/libm/k_tan.c create mode 100644 src/thirdparty/SDL2/src/libm/s_tan.c create mode 100644 src/thirdparty/SDL2/src/main/nacl/SDL_nacl_main.c create mode 100644 src/thirdparty/SDL2/src/main/winrt/SDL2-WinRTResource_BlankCursor.cur create mode 100644 src/thirdparty/SDL2/src/main/winrt/SDL2-WinRTResources.rc create mode 100644 src/thirdparty/SDL2/src/power/SDL_syspower.h create mode 100644 src/thirdparty/SDL2/src/power/emscripten/SDL_syspower.c create mode 100644 src/thirdparty/SDL2/src/render/direct3d/SDL_shaders_d3d.c create mode 100644 src/thirdparty/SDL2/src/render/direct3d/SDL_shaders_d3d.h create mode 100644 src/thirdparty/SDL2/src/render/direct3d11/SDL_shaders_d3d11.c create mode 100644 src/thirdparty/SDL2/src/render/direct3d11/SDL_shaders_d3d11.h create mode 100644 src/thirdparty/SDL2/src/render/metal/SDL_render_metal.m create mode 100644 src/thirdparty/SDL2/src/render/metal/SDL_shaders_metal.metal create mode 100644 src/thirdparty/SDL2/src/render/metal/SDL_shaders_metal_ios.h create mode 100644 src/thirdparty/SDL2/src/render/metal/SDL_shaders_metal_osx.h create mode 100755 src/thirdparty/SDL2/src/render/metal/build-metal-shaders.sh create mode 100644 src/thirdparty/SDL2/src/test/SDL_test_memory.c create mode 100644 src/thirdparty/SDL2/src/video/SDL_vulkan_internal.h create mode 100644 src/thirdparty/SDL2/src/video/SDL_vulkan_utils.c create mode 100644 src/thirdparty/SDL2/src/video/SDL_yuv.c create mode 100644 src/thirdparty/SDL2/src/video/SDL_yuv_c.h create mode 100644 src/thirdparty/SDL2/src/video/android/SDL_androidgl.h create mode 100644 src/thirdparty/SDL2/src/video/android/SDL_androidmessagebox.c create mode 100644 src/thirdparty/SDL2/src/video/android/SDL_androidmessagebox.h create mode 100644 src/thirdparty/SDL2/src/video/android/SDL_androidmouse.c create mode 100644 src/thirdparty/SDL2/src/video/android/SDL_androidmouse.h create mode 100644 src/thirdparty/SDL2/src/video/android/SDL_androidvulkan.c create mode 100644 src/thirdparty/SDL2/src/video/android/SDL_androidvulkan.h create mode 100644 src/thirdparty/SDL2/src/video/cocoa/SDL_cocoametalview.h create mode 100644 src/thirdparty/SDL2/src/video/cocoa/SDL_cocoametalview.m create mode 100644 src/thirdparty/SDL2/src/video/cocoa/SDL_cocoaopengles.h create mode 100644 src/thirdparty/SDL2/src/video/cocoa/SDL_cocoaopengles.m create mode 100644 src/thirdparty/SDL2/src/video/cocoa/SDL_cocoavulkan.h create mode 100644 src/thirdparty/SDL2/src/video/cocoa/SDL_cocoavulkan.m create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenevents.c create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenevents.h create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenframebuffer.c create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenframebuffer.h create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenmouse.c create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenmouse.h create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenopengles.c create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenopengles.h create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenvideo.c create mode 100644 src/thirdparty/SDL2/src/video/emscripten/SDL_emscriptenvideo.h create mode 100644 src/thirdparty/SDL2/src/video/khronos/EGL/egl.h create mode 100644 src/thirdparty/SDL2/src/video/khronos/EGL/eglext.h create mode 100644 src/thirdparty/SDL2/src/video/khronos/EGL/eglplatform.h create mode 100644 src/thirdparty/SDL2/src/video/khronos/GLES2/gl2.h create mode 100644 src/thirdparty/SDL2/src/video/khronos/GLES2/gl2ext.h create mode 100644 src/thirdparty/SDL2/src/video/khronos/GLES2/gl2platform.h create mode 100644 src/thirdparty/SDL2/src/video/khronos/KHR/khrplatform.h create mode 100644 src/thirdparty/SDL2/src/video/khronos/vulkan/vk_platform.h create mode 100644 src/thirdparty/SDL2/src/video/khronos/vulkan/vulkan.h create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmdyn.c create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmdyn.h create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmevents.c create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmevents.h create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmmouse.c create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmmouse.h create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmopengles.c create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmopengles.h create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmsym.h create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.c create mode 100644 src/thirdparty/SDL2/src/video/kmsdrm/SDL_kmsdrmvideo.h create mode 100644 src/thirdparty/SDL2/src/video/mir/SDL_mirvulkan.c create mode 100644 src/thirdparty/SDL2/src/video/mir/SDL_mirvulkan.h create mode 100644 src/thirdparty/SDL2/src/video/nacl/SDL_naclevents.c create mode 100644 src/thirdparty/SDL2/src/video/nacl/SDL_naclevents_c.h create mode 100644 src/thirdparty/SDL2/src/video/nacl/SDL_naclglue.c create mode 100644 src/thirdparty/SDL2/src/video/nacl/SDL_naclopengles.c create mode 100644 src/thirdparty/SDL2/src/video/nacl/SDL_naclopengles.h create mode 100644 src/thirdparty/SDL2/src/video/nacl/SDL_naclvideo.c create mode 100644 src/thirdparty/SDL2/src/video/nacl/SDL_naclvideo.h create mode 100644 src/thirdparty/SDL2/src/video/nacl/SDL_naclwindow.c create mode 100644 src/thirdparty/SDL2/src/video/nacl/SDL_naclwindow.h create mode 100644 src/thirdparty/SDL2/src/video/qnx/gl.c create mode 100644 src/thirdparty/SDL2/src/video/qnx/keyboard.c create mode 100644 src/thirdparty/SDL2/src/video/qnx/sdl_qnx.h create mode 100644 src/thirdparty/SDL2/src/video/qnx/video.c create mode 100644 src/thirdparty/SDL2/src/video/uikit/SDL_uikitclipboard.h create mode 100644 src/thirdparty/SDL2/src/video/uikit/SDL_uikitclipboard.m create mode 100644 src/thirdparty/SDL2/src/video/uikit/SDL_uikitmetalview.h create mode 100644 src/thirdparty/SDL2/src/video/uikit/SDL_uikitmetalview.m create mode 100644 src/thirdparty/SDL2/src/video/uikit/SDL_uikitvulkan.h create mode 100644 src/thirdparty/SDL2/src/video/uikit/SDL_uikitvulkan.m create mode 100644 src/thirdparty/SDL2/src/video/vivante/SDL_vivanteopengles.c create mode 100644 src/thirdparty/SDL2/src/video/vivante/SDL_vivanteopengles.h create mode 100644 src/thirdparty/SDL2/src/video/vivante/SDL_vivanteplatform.c create mode 100644 src/thirdparty/SDL2/src/video/vivante/SDL_vivanteplatform.h create mode 100644 src/thirdparty/SDL2/src/video/vivante/SDL_vivantevideo.c create mode 100644 src/thirdparty/SDL2/src/video/vivante/SDL_vivantevideo.h create mode 100644 src/thirdparty/SDL2/src/video/wayland/SDL_waylandclipboard.c create mode 100644 src/thirdparty/SDL2/src/video/wayland/SDL_waylandclipboard.h create mode 100644 src/thirdparty/SDL2/src/video/wayland/SDL_waylanddatamanager.c create mode 100644 src/thirdparty/SDL2/src/video/wayland/SDL_waylanddatamanager.h create mode 100644 src/thirdparty/SDL2/src/video/wayland/SDL_waylandvulkan.c create mode 100644 src/thirdparty/SDL2/src/video/wayland/SDL_waylandvulkan.h create mode 100644 src/thirdparty/SDL2/src/video/windows/SDL_windowsvulkan.c create mode 100644 src/thirdparty/SDL2/src/video/windows/SDL_windowsvulkan.h create mode 100644 src/thirdparty/SDL2/src/video/winrt/SDL_winrtgamebar.cpp create mode 100644 src/thirdparty/SDL2/src/video/winrt/SDL_winrtgamebar_cpp.h create mode 100644 src/thirdparty/SDL2/src/video/winrt/SDL_winrtmessagebox.cpp create mode 100644 src/thirdparty/SDL2/src/video/winrt/SDL_winrtmessagebox.h create mode 100644 src/thirdparty/SDL2/src/video/x11/SDL_x11vulkan.c create mode 100644 src/thirdparty/SDL2/src/video/x11/SDL_x11vulkan.h create mode 100644 src/thirdparty/SDL2/src/video/yuv2rgb/LICENSE create mode 100644 src/thirdparty/SDL2/src/video/yuv2rgb/README.md create mode 100644 src/thirdparty/SDL2/src/video/yuv2rgb/yuv_rgb.c create mode 100644 src/thirdparty/SDL2/src/video/yuv2rgb/yuv_rgb.h create mode 100644 src/thirdparty/SDL2/src/video/yuv2rgb/yuv_rgb_sse_func.h create mode 100644 src/thirdparty/SDL2/src/video/yuv2rgb/yuv_rgb_std_func.h diff --git a/include/eepp/ui/actions/delay.hpp b/include/eepp/ui/actions/delay.hpp index e128b3f0f..4b3b8d12f 100644 --- a/include/eepp/ui/actions/delay.hpp +++ b/include/eepp/ui/actions/delay.hpp @@ -19,9 +19,9 @@ class EE_API Delay : public UIAction { bool isDone() override; - UIAction * clone() const; + UIAction * clone() const override; - UIAction * reverse() const; + UIAction * reverse() const override; protected: Clock mClock; diff --git a/include/eepp/ui/actions/fade.hpp b/include/eepp/ui/actions/fade.hpp index 49760a132..a634ccdf2 100644 --- a/include/eepp/ui/actions/fade.hpp +++ b/include/eepp/ui/actions/fade.hpp @@ -10,15 +10,15 @@ class EE_API Fade : public ActionInterpolation1d { public: static Fade * New( const Float& start, const Float& end, const Time& duration, const Ease::Interpolation& type = Ease::Linear, const bool& alphaChilds = true ); - UIAction * clone() const; + UIAction * clone() const override; - UIAction * reverse() const; + UIAction * reverse() const override; protected: Fade( const Float & start, const Float & end, const Time & duration, const Ease::Interpolation & type, const bool& alphaChilds ); - void onStart(); + void onStart() override; - void onUpdate( const Time& time ); + void onUpdate( const Time& time ) override; bool mAffectChilds; private: diff --git a/include/eepp/ui/actions/marginmove.hpp b/include/eepp/ui/actions/marginmove.hpp index 62c17fa19..1b5648f43 100644 --- a/include/eepp/ui/actions/marginmove.hpp +++ b/include/eepp/ui/actions/marginmove.hpp @@ -21,9 +21,9 @@ class EE_API MarginMove : public UIAction { bool isDone() override; - UIAction * clone() const; + UIAction * clone() const override; - UIAction * reverse() const; + UIAction * reverse() const override; Interpolation1d getInterpolationLeft() const; @@ -44,9 +44,9 @@ class EE_API MarginMove : public UIAction { protected: MarginMove( const Rect & start, const Rect & end, const Time & duration, const Ease::Interpolation & type ); - void onStart(); + void onStart() override; - void onUpdate( const Time& time ); + void onUpdate( const Time& time ) override; private: MarginMove(); diff --git a/include/eepp/ui/actions/move.hpp b/include/eepp/ui/actions/move.hpp index b13fb6526..cc580f13c 100644 --- a/include/eepp/ui/actions/move.hpp +++ b/include/eepp/ui/actions/move.hpp @@ -10,15 +10,15 @@ class EE_API Move : public ActionInterpolation2d { public: static Move * New( const Vector2f& start, const Vector2f& end, const Time& duration, const Ease::Interpolation& type = Ease::Linear ); - UIAction * clone() const; + UIAction * clone() const override; - UIAction * reverse() const; + UIAction * reverse() const override; protected: Move( const Vector2f& start, const Vector2f& end, const Time& duration, const Ease::Interpolation& type ); - void onStart(); + void onStart() override; - void onUpdate( const Time& time ); + void onUpdate( const Time& time ) override; private: Move(); }; diff --git a/include/eepp/ui/actions/rotate.hpp b/include/eepp/ui/actions/rotate.hpp index 691ecd77d..617d9be6d 100644 --- a/include/eepp/ui/actions/rotate.hpp +++ b/include/eepp/ui/actions/rotate.hpp @@ -10,15 +10,15 @@ class EE_API Rotate : public ActionInterpolation1d { public: static Rotate * New( const Float& start, const Float& end, const Time& duration, const Ease::Interpolation& type = Ease::Linear ); - UIAction * clone() const; + UIAction * clone() const override; - UIAction * reverse() const; + UIAction * reverse() const override; protected: Rotate( const Float & start, const Float & end, const Time & duration, const Ease::Interpolation & type ); - void onStart(); + void onStart() override; - void onUpdate( const Time& time ); + void onUpdate( const Time& time ) override; private: Rotate(); }; diff --git a/include/eepp/ui/actions/scale.hpp b/include/eepp/ui/actions/scale.hpp index 1606102ad..fe917863d 100644 --- a/include/eepp/ui/actions/scale.hpp +++ b/include/eepp/ui/actions/scale.hpp @@ -10,15 +10,15 @@ class EE_API Scale : public ActionInterpolation2d { public: static Scale * New( const Vector2f& start, const Vector2f& end, const Time& duration, const Ease::Interpolation& type = Ease::Linear ); - UIAction * clone() const; + UIAction * clone() const override; - UIAction * reverse() const; + UIAction * reverse() const override; protected: Scale( const Vector2f& start, const Vector2f& end, const Time& duration, const Ease::Interpolation& type ); - void onStart(); + void onStart() override; - void onUpdate( const Time& time ); + void onUpdate( const Time& time ) override; private: Scale(); }; diff --git a/include/eepp/ui/actions/sequence.hpp b/include/eepp/ui/actions/sequence.hpp index 7cdbb60ed..c7980c703 100644 --- a/include/eepp/ui/actions/sequence.hpp +++ b/include/eepp/ui/actions/sequence.hpp @@ -25,9 +25,9 @@ class EE_API Sequence : public UIAction { bool isDone() override; - UIAction * clone() const; + UIAction * clone() const override; - UIAction * reverse() const; + UIAction * reverse() const override; virtual ~Sequence(); diff --git a/include/eepp/ui/actions/spawn.hpp b/include/eepp/ui/actions/spawn.hpp index 10ed69668..ae1f733be 100644 --- a/include/eepp/ui/actions/spawn.hpp +++ b/include/eepp/ui/actions/spawn.hpp @@ -25,9 +25,9 @@ class EE_API Spawn : public UIAction { bool isDone() override; - UIAction * clone() const; + UIAction * clone() const override; - UIAction * reverse() const; + UIAction * reverse() const override; virtual ~Spawn(); protected: diff --git a/projects/android-project-ant/jni/eepp.mk b/projects/android-project-ant/jni/eepp.mk index d7b36b9a4..5f9a20dcb 100644 --- a/projects/android-project-ant/jni/eepp.mk +++ b/projects/android-project-ant/jni/eepp.mk @@ -168,13 +168,13 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_CFLAGS := -D__ANDROID__ -DANDROID -DGL_GLEXT_PROTOTYPES $(EE_GLES_VERSION) -LOCAL_SRC_FILES := \ +LOCAL_SRC_FILES := \ $(subst $(LOCAL_PATH)/,, \ $(wildcard $(LOCAL_PATH)/src/*.c) \ $(wildcard $(LOCAL_PATH)/src/audio/*.c) \ $(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \ - $(LOCAL_PATH)/src/atomic/SDL_atomic.c \ + $(LOCAL_PATH)/src/atomic/SDL_atomic.c.arm \ $(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm \ $(wildcard $(LOCAL_PATH)/src/core/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \ @@ -182,13 +182,14 @@ LOCAL_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/src/events/*.c) \ $(wildcard $(LOCAL_PATH)/src/file/*.c) \ $(wildcard $(LOCAL_PATH)/src/haptic/*.c) \ - $(wildcard $(LOCAL_PATH)/src/haptic/dummy/*.c) \ + $(wildcard $(LOCAL_PATH)/src/haptic/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/joystick/*.c) \ $(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \ + $(LOCAL_PATH)/src/joystick/steam/SDL_steamcontroller.c \ $(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \ $(wildcard $(LOCAL_PATH)/src/power/*.c) \ $(wildcard $(LOCAL_PATH)/src/power/android/*.c) \ - $(wildcard $(LOCAL_PATH)/src/filesystem/dummy/*.c) \ + $(wildcard $(LOCAL_PATH)/src/filesystem/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/render/*.c) \ $(wildcard $(LOCAL_PATH)/src/render/*/*.c) \ $(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \ @@ -198,7 +199,8 @@ LOCAL_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \ $(wildcard $(LOCAL_PATH)/src/video/*.c) \ $(wildcard $(LOCAL_PATH)/src/video/android/*.c) \ - $(wildcard $(LOCAL_PATH)/src/test/*.c)) + $(wildcard $(LOCAL_PATH)/src/video/yuv2rgb/*.c) \ + $(wildcard $(LOCAL_PATH)/src/test/*.c)) include $(BUILD_STATIC_LIBRARY) #**************** SDL 2 *************** diff --git a/projects/android-project/app/jni/eepp.mk b/projects/android-project/app/jni/eepp.mk index 34102efd5..96ae935ed 100644 --- a/projects/android-project/app/jni/eepp.mk +++ b/projects/android-project/app/jni/eepp.mk @@ -168,13 +168,13 @@ LOCAL_C_INCLUDES := $(LOCAL_PATH)/include LOCAL_CFLAGS := -D__ANDROID__ -DANDROID -DGL_GLEXT_PROTOTYPES $(EE_GLES_VERSION) -LOCAL_SRC_FILES := \ +LOCAL_SRC_FILES := \ $(subst $(LOCAL_PATH)/,, \ $(wildcard $(LOCAL_PATH)/src/*.c) \ $(wildcard $(LOCAL_PATH)/src/audio/*.c) \ $(wildcard $(LOCAL_PATH)/src/audio/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/audio/dummy/*.c) \ - $(LOCAL_PATH)/src/atomic/SDL_atomic.c \ + $(LOCAL_PATH)/src/atomic/SDL_atomic.c.arm \ $(LOCAL_PATH)/src/atomic/SDL_spinlock.c.arm \ $(wildcard $(LOCAL_PATH)/src/core/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/cpuinfo/*.c) \ @@ -182,13 +182,14 @@ LOCAL_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/src/events/*.c) \ $(wildcard $(LOCAL_PATH)/src/file/*.c) \ $(wildcard $(LOCAL_PATH)/src/haptic/*.c) \ - $(wildcard $(LOCAL_PATH)/src/haptic/dummy/*.c) \ + $(wildcard $(LOCAL_PATH)/src/haptic/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/joystick/*.c) \ $(wildcard $(LOCAL_PATH)/src/joystick/android/*.c) \ + $(LOCAL_PATH)/src/joystick/steam/SDL_steamcontroller.c \ $(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \ $(wildcard $(LOCAL_PATH)/src/power/*.c) \ $(wildcard $(LOCAL_PATH)/src/power/android/*.c) \ - $(wildcard $(LOCAL_PATH)/src/filesystem/dummy/*.c) \ + $(wildcard $(LOCAL_PATH)/src/filesystem/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/render/*.c) \ $(wildcard $(LOCAL_PATH)/src/render/*/*.c) \ $(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \ @@ -198,7 +199,8 @@ LOCAL_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \ $(wildcard $(LOCAL_PATH)/src/video/*.c) \ $(wildcard $(LOCAL_PATH)/src/video/android/*.c) \ - $(wildcard $(LOCAL_PATH)/src/test/*.c)) + $(wildcard $(LOCAL_PATH)/src/video/yuv2rgb/*.c) \ + $(wildcard $(LOCAL_PATH)/src/test/*.c)) include $(BUILD_STATIC_LIBRARY) #**************** SDL 2 *************** diff --git a/projects/android-project/app/src/main/AndroidManifest.xml b/projects/android-project/app/src/main/AndroidManifest.xml index 4c9aa7dd7..7b405c81e 100644 --- a/projects/android-project/app/src/main/AndroidManifest.xml +++ b/projects/android-project/app/src/main/AndroidManifest.xml @@ -2,7 +2,8 @@ + android:versionName="1.0" + android:installLocation="auto"> + + diff --git a/projects/android-project/app/src/main/java/org/libsdl/app/SDL.java b/projects/android-project/app/src/main/java/org/libsdl/app/SDL.java new file mode 100644 index 000000000..cfe483094 --- /dev/null +++ b/projects/android-project/app/src/main/java/org/libsdl/app/SDL.java @@ -0,0 +1,37 @@ +package org.libsdl.app; + +import android.content.Context; + +/** + SDL library initialization +*/ +public class SDL { + + // This function should be called first and sets up the native code + // so it can call into the Java classes + public static void setupJNI() { + SDLActivity.nativeSetupJNI(); + SDLAudioManager.nativeSetupJNI(); + SDLControllerManager.nativeSetupJNI(); + } + + // This function should be called each time the activity is started + public static void initialize() { + setContext(null); + + SDLActivity.initialize(); + SDLAudioManager.initialize(); + SDLControllerManager.initialize(); + } + + // This function stores the current activity (SDL or not) + public static void setContext(Context context) { + mContext = context; + } + + public static Context getContext() { + return mContext; + } + + protected static Context mContext; +} diff --git a/projects/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/projects/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index d81b397a4..6c0a29436 100644 --- a/projects/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/projects/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -1,25 +1,32 @@ package org.libsdl.app; -import java.util.ArrayList; +import java.io.IOException; +import java.io.InputStream; import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; +import java.lang.reflect.Method; import android.app.*; import android.content.*; +import android.text.InputType; import android.view.*; import android.view.inputmethod.BaseInputConnection; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; -import android.widget.AbsoluteLayout; +import android.widget.RelativeLayout; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.TextView; import android.os.*; +import android.util.DisplayMetrics; import android.util.Log; +import android.util.SparseArray; import android.graphics.*; -import android.media.*; +import android.graphics.drawable.Drawable; import android.hardware.*; -import android.os.PowerManager; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; +import android.content.pm.ApplicationInfo; /** SDL Activity @@ -27,31 +34,92 @@ import android.os.PowerManager; public class SDLActivity extends Activity { private static final String TAG = "SDL"; - // Keep track of the paused state - public static boolean mIsPaused, mIsSurfaceReady, mHasFocus; + public static boolean mIsResumedCalled, mIsSurfaceReady, mHasFocus; + + // Handle the state of the native layer + public enum NativeState { + INIT, RESUMED, PAUSED + } + + public static NativeState mNextNativeState; + public static NativeState mCurrentNativeState; + public static boolean mExitCalledFromJava; + /** If shared libraries (e.g. SDL or the native application) could not be loaded. */ + public static boolean mBrokenLibraries; + + // If we want to separate mouse and touch events. + // This is only toggled in native code when a hint is set! + public static boolean mSeparateMouseAndTouch; + // Main components protected static SDLActivity mSingleton; protected static SDLSurface mSurface; protected static View mTextEdit; + protected static boolean mScreenKeyboardShown; protected static ViewGroup mLayout; - protected static SDLJoystickHandler mJoystickHandler; + protected static SDLClipboardHandler mClipboardHandler; + // This is what SDL runs in. It invokes SDL_main(), eventually protected static Thread mSDLThread; - - // Audio - protected static AudioTrack mAudioTrack; - protected static PowerManager.WakeLock mWakeLock; + + /** + * This method returns the name of the shared object with the application entry point + * It can be overridden by derived classes. + */ + protected String getMainSharedObject() { + String library; + String[] libraries = SDLActivity.mSingleton.getLibraries(); + if (libraries.length > 0) { + library = "lib" + libraries[libraries.length - 1] + ".so"; + } else { + library = "libmain.so"; + } + return library; + } + + /** + * This method returns the name of the application entry point + * It can be overridden by derived classes. + */ + protected String getMainFunction() { + return "SDL_main"; + } + + /** + * This method is called by SDL before loading the native shared libraries. + * It can be overridden to provide names of shared libraries to be loaded. + * The default implementation returns the defaults. It never returns null. + * An array returned by a new implementation must at least contain "SDL2". + * Also keep in mind that the order the libraries are loaded may matter. + * @return names of shared libraries to be loaded (e.g. "SDL2", "main"). + */ + protected String[] getLibraries() { + return new String[] { + "openal", + "main" + }; + } // Load the .so - static { - System.loadLibrary("openal"); - System.loadLibrary("main"); + public void loadLibraries() { + for (String lib : getLibraries()) { + System.loadLibrary(lib); + } } - - + + /** + * This method is called by SDL before starting the native application thread. + * It can be overridden to provide the arguments after the application name. + * The default implementation returns an empty array. It never returns null. + * @return arguments for the native application. + */ + protected String[] getArguments() { + return new String[0]; + } + public static void initialize() { // The static nature of the singleton and Android quirkyness force us to initialize everything here // Otherwise, when exiting the app and returning to it, these variables *keep* their pre exit values @@ -59,84 +127,187 @@ public class SDLActivity extends Activity { mSurface = null; mTextEdit = null; mLayout = null; - mJoystickHandler = null; + mClipboardHandler = null; mSDLThread = null; - mAudioTrack = null; mExitCalledFromJava = false; - mIsPaused = false; + mBrokenLibraries = false; + mIsResumedCalled = false; mIsSurfaceReady = false; mHasFocus = true; + mNextNativeState = NativeState.INIT; + mCurrentNativeState = NativeState.INIT; } // Setup @Override protected void onCreate(Bundle savedInstanceState) { - Log.v("SDL", "onCreate():" + mSingleton); + Log.v(TAG, "Device: " + android.os.Build.DEVICE); + Log.v(TAG, "Model: " + android.os.Build.MODEL); + Log.v(TAG, "onCreate()"); super.onCreate(savedInstanceState); - - SDLActivity.initialize(); + + // Load shared libraries + String errorMsgBrokenLib = ""; + try { + loadLibraries(); + } catch(UnsatisfiedLinkError e) { + System.err.println(e.getMessage()); + mBrokenLibraries = true; + errorMsgBrokenLib = e.getMessage(); + } catch(Exception e) { + System.err.println(e.getMessage()); + mBrokenLibraries = true; + errorMsgBrokenLib = e.getMessage(); + } + + if (mBrokenLibraries) + { + mSingleton = this; + AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); + dlgAlert.setMessage("An error occurred while trying to start the application. Please try again and/or reinstall." + + System.getProperty("line.separator") + + System.getProperty("line.separator") + + "Error: " + errorMsgBrokenLib); + dlgAlert.setTitle("SDL Error"); + dlgAlert.setPositiveButton("Exit", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog,int id) { + // if this button is clicked, close current activity + SDLActivity.mSingleton.finish(); + } + }); + dlgAlert.setCancelable(false); + dlgAlert.create().show(); + + return; + } + + // Set up JNI + SDL.setupJNI(); + + // Initialize state + SDL.initialize(); + // So we can call stuff from static callbacks mSingleton = this; + SDL.setContext(this); + + if (Build.VERSION.SDK_INT >= 11) { + mClipboardHandler = new SDLClipboardHandler_API11(); + } else { + /* Before API 11, no clipboard notification (eg no SDL_CLIPBOARDUPDATE) */ + mClipboardHandler = new SDLClipboardHandler_Old(); + } // Set up the surface mSurface = new SDLSurface(getApplication()); - - if(Build.VERSION.SDK_INT >= 12) { - mJoystickHandler = new SDLJoystickHandler_API12(); - } - else { - mJoystickHandler = new SDLJoystickHandler(); - } - mLayout = new AbsoluteLayout(this); + mLayout = new RelativeLayout(this); mLayout.addView(mSurface); setContentView(mLayout); - - final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); - mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag"); - mWakeLock.acquire(); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + /* + * Per SDL_androidwindow.c, Android will only ever have one window, and that window + * is always flagged SDL_WINDOW_FULLSCREEN. Let's treat it as an immersive fullscreen + * window for Android UI purposes, as a result. + */ + int iFlags = + //View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | // Only available since API 19 + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | + View.SYSTEM_UI_FLAG_FULLSCREEN; + + getWindow().getDecorView().setSystemUiVisibility(iFlags); + + // Get filename from "Open with" of another application + Intent intent = getIntent(); + if (intent != null && intent.getData() != null) { + String filename = intent.getData().getPath(); + if (filename != null) { + Log.v(TAG, "Got filename: " + filename); + SDLActivity.onNativeDropFile(filename); + } + } } // Events @Override protected void onPause() { - Log.v("SDL", "onPause()"); + Log.v(TAG, "onPause()"); super.onPause(); - SDLActivity.handlePause(); + mNextNativeState = NativeState.PAUSED; + mIsResumedCalled = false; + + if (SDLActivity.mBrokenLibraries) { + return; + } + + SDLActivity.handleNativeState(); } @Override protected void onResume() { - Log.v("SDL", "onResume()"); + Log.v(TAG, "onResume()"); super.onResume(); - SDLActivity.handleResume(); + mNextNativeState = NativeState.RESUMED; + mIsResumedCalled = true; + + if (SDLActivity.mBrokenLibraries) { + return; + } + + SDLActivity.handleNativeState(); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); - Log.v("SDL", "onWindowFocusChanged(): " + hasFocus); + Log.v(TAG, "onWindowFocusChanged(): " + hasFocus); + + if (SDLActivity.mBrokenLibraries) { + return; + } SDLActivity.mHasFocus = hasFocus; if (hasFocus) { - SDLActivity.handleResume(); + mNextNativeState = NativeState.RESUMED; + } else { + mNextNativeState = NativeState.PAUSED; } + + SDLActivity.handleNativeState(); } @Override public void onLowMemory() { - Log.v("SDL", "onLowMemory()"); + Log.v(TAG, "onLowMemory()"); super.onLowMemory(); + + if (SDLActivity.mBrokenLibraries) { + return; + } + SDLActivity.nativeLowMemory(); } @Override protected void onDestroy() { - Log.v("SDL", "onDestroy()"); + Log.v(TAG, "onDestroy()"); + + if (SDLActivity.mBrokenLibraries) { + super.onDestroy(); + // Reset everything in case the user re opens the app + SDLActivity.initialize(); + return; + } + + mNextNativeState = NativeState.PAUSED; + SDLActivity.handleNativeState(); + // Send a quit message to the application SDLActivity.mExitCalledFromJava = true; SDLActivity.nativeQuit(); @@ -146,62 +317,87 @@ public class SDLActivity extends Activity { try { SDLActivity.mSDLThread.join(); } catch(Exception e) { - Log.v("SDL", "Problem stopping thread: " + e); + Log.v(TAG, "Problem stopping thread: " + e); } SDLActivity.mSDLThread = null; - //Log.v("SDL", "Finished waiting for SDL thread"); + //Log.v(TAG, "Finished waiting for SDL thread"); } - + super.onDestroy(); + // Reset everything in case the user re opens the app SDLActivity.initialize(); } @Override public boolean dispatchKeyEvent(KeyEvent event) { + + if (SDLActivity.mBrokenLibraries) { + return false; + } + int keyCode = event.getKeyCode(); // Ignore certain special keys so they're handled by Android if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP || keyCode == KeyEvent.KEYCODE_CAMERA || - keyCode == 168 || /* API 11: KeyEvent.KEYCODE_ZOOM_IN */ - keyCode == 169 /* API 11: KeyEvent.KEYCODE_ZOOM_OUT */ + keyCode == KeyEvent.KEYCODE_ZOOM_IN || /* API 11 */ + keyCode == KeyEvent.KEYCODE_ZOOM_OUT /* API 11 */ ) { return false; } return super.dispatchKeyEvent(event); } - /** Called by onPause or surfaceDestroyed. Even if surfaceDestroyed - * is the first to be called, mIsSurfaceReady should still be set - * to 'true' during the call to onPause (in a usual scenario). - */ - public static void handlePause() { - if (!SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady) { - SDLActivity.mIsPaused = true; - SDLActivity.nativePause(); - mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, false); + /* Transition to next state */ + public static void handleNativeState() { + + if (mNextNativeState == mCurrentNativeState) { + // Already in same state, discard. + return; + } + + // Try a transition to init state + if (mNextNativeState == NativeState.INIT) { + + mCurrentNativeState = mNextNativeState; + return; + } + + // Try a transition to paused state + if (mNextNativeState == NativeState.PAUSED) { + nativePause(); + if (mSurface != null) + mSurface.handlePause(); + mCurrentNativeState = mNextNativeState; + return; + } + + // Try a transition to resumed state + if (mNextNativeState == NativeState.RESUMED) { + if (mIsSurfaceReady && mHasFocus && mIsResumedCalled) { + if (mSDLThread == null) { + // This is the entry point to the C app. + // Start up the C app thread and enable sensor input for the first time + // FIXME: Why aren't we enabling sensor input at start? + + mSDLThread = new Thread(new SDLMain(), "SDLThread"); + mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true); + mSDLThread.start(); + } + + nativeResume(); + mSurface.handleResume(); + mCurrentNativeState = mNextNativeState; + } } } - /** Called by onResume or surfaceCreated. An actual resume should be done only when the surface is ready. - * Note: Some Android variants may send multiple surfaceChanged events, so we don't need to resume - * every time we get one of those events, only if it comes after surfaceDestroyed - */ - public static void handleResume() { - if (SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady && SDLActivity.mHasFocus) { - SDLActivity.mIsPaused = false; - SDLActivity.nativeResume(); - mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true); - } - } - /* The native thread has finished */ public static void handleNativeExit() { SDLActivity.mSDLThread = null; - if ( null != mSingleton ) - mSingleton.finish(); + mSingleton.finish(); } @@ -209,6 +405,7 @@ public class SDLActivity extends Activity { static final int COMMAND_CHANGE_TITLE = 1; static final int COMMAND_UNUSED = 2; static final int COMMAND_TEXTEDIT_HIDE = 3; + static final int COMMAND_SET_KEEP_SCREEN_ON = 5; protected static final int COMMAND_USER = 0x8000; @@ -232,7 +429,7 @@ public class SDLActivity extends Activity { protected static class SDLCommandHandler extends Handler { @Override public void handleMessage(Message msg) { - Context context = getContext(); + Context context = SDL.getContext(); if (context == null) { Log.e(TAG, "error handling message, getContext() returned null"); return; @@ -247,13 +444,31 @@ public class SDLActivity extends Activity { break; case COMMAND_TEXTEDIT_HIDE: if (mTextEdit != null) { - mTextEdit.setVisibility(View.GONE); + // Note: On some devices setting view to GONE creates a flicker in landscape. + // Setting the View's sizes to 0 is similar to GONE but without the flicker. + // The sizes will be set to useful values when the keyboard is shown again. + mTextEdit.setLayoutParams(new RelativeLayout.LayoutParams(0, 0)); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0); + + mScreenKeyboardShown = false; } break; - + case COMMAND_SET_KEEP_SCREEN_ON: + { + if (context instanceof Activity) { + Window window = ((Activity) context).getWindow(); + if (window != null) { + if ((msg.obj instanceof Integer) && (((Integer) msg.obj).intValue() != 0)) { + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } else { + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + } + } + break; + } default: if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) { Log.e(TAG, "error handling message, command is " + msg.arg1); @@ -274,76 +489,153 @@ public class SDLActivity extends Activity { } // C functions we call - public static native void nativeInit(); + public static native int nativeSetupJNI(); + public static native int nativeRunMain(String library, String function, Object arguments); public static native void nativeLowMemory(); public static native void nativeQuit(); public static native void nativePause(); public static native void nativeResume(); - public static native void onNativeResize(int x, int y, int format); - public static native int onNativePadDown(int device_id, int keycode); - public static native int onNativePadUp(int device_id, int keycode); - public static native void onNativeJoy(int device_id, int axis, - float value); - public static native void onNativeHat(int device_id, int hat_id, - int x, int y); + public static native void onNativeDropFile(String filename); + public static native void onNativeResize(int x, int y, int format, float rate); public static native void onNativeKeyDown(int keycode); public static native void onNativeKeyUp(int keycode); public static native void onNativeKeyboardFocusLost(); + public static native void onNativeMouse(int button, int action, float x, float y); public static native void onNativeTouch(int touchDevId, int pointerFingerId, - int action, float x, + int action, float x, float y, float p); public static native void onNativeAccel(float x, float y, float z); + public static native void onNativeClipboardChanged(); public static native void onNativeSurfaceChanged(); public static native void onNativeSurfaceDestroyed(); - public static native void nativeFlipBuffers(); - public static native int nativeAddJoystick(int device_id, String name, - int is_accelerometer, int nbuttons, - int naxes, int nhats, int nballs); - public static native int nativeRemoveJoystick(int device_id); - - public static void flipBuffers() { - SDLActivity.nativeFlipBuffers(); - } + public static native String nativeGetHint(String name); + public static native void nativeSetenv(String name, String value); + /** + * This method is called by SDL using JNI. + */ public static boolean setActivityTitle(String title) { // Called from SDLMain() thread and can't directly affect the view return mSingleton.sendCommand(COMMAND_CHANGE_TITLE, title); } - public static boolean sendMessage(int command, int param) { - return mSingleton.sendCommand(command, Integer.valueOf(param)); - } - - public static Context getContext() { - return mSingleton; - } - /** - * @return result of getSystemService(name) but executed on UI thread. + * This method is called by SDL using JNI. + * This is a static method for JNI convenience, it calls a non-static method + * so that is can be overridden */ - public Object getSystemServiceFromUiThread(final String name) { - final Object lock = new Object(); - final Object[] results = new Object[2]; // array for writable variables - synchronized (lock) { - runOnUiThread(new Runnable() { - @Override - public void run() { - synchronized (lock) { - results[0] = getSystemService(name); - results[1] = Boolean.TRUE; - lock.notify(); - } - } - }); - if (results[1] == null) { - try { - lock.wait(); - } catch (InterruptedException ex) { - ex.printStackTrace(); + public static void setOrientation(int w, int h, boolean resizable, String hint) + { + if (mSingleton != null) { + mSingleton.setOrientationBis(w, h, resizable, hint); + } + } + + /** + * This can be overridden + */ + public void setOrientationBis(int w, int h, boolean resizable, String hint) + { + int orientation = -1; + + if (hint.contains("LandscapeRight") && hint.contains("LandscapeLeft")) { + orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; + } else if (hint.contains("LandscapeRight")) { + orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; + } else if (hint.contains("LandscapeLeft")) { + orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE; + } else if (hint.contains("Portrait") && hint.contains("PortraitUpsideDown")) { + orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT; + } else if (hint.contains("Portrait")) { + orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; + } else if (hint.contains("PortraitUpsideDown")) { + orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT; + } + + /* no valid hint */ + if (orientation == -1) { + if (resizable) { + /* no fixed orientation */ + } else { + if (w > h) { + orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE; + } else { + orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT; } } } - return results[0]; + + Log.v("SDL", "setOrientation() orientation=" + orientation + " width=" + w +" height="+ h +" resizable=" + resizable + " hint=" + hint); + if (orientation != -1) { + mSingleton.setRequestedOrientation(orientation); + } + } + + + /** + * This method is called by SDL using JNI. + */ + public static boolean isScreenKeyboardShown() + { + if (mTextEdit == null) { + return false; + } + + if (!mScreenKeyboardShown) { + return false; + } + + InputMethodManager imm = (InputMethodManager) SDL.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + return imm.isAcceptingText(); + + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean sendMessage(int command, int param) { + if (mSingleton == null) { + return false; + } + return mSingleton.sendCommand(command, Integer.valueOf(param)); + } + + /** + * This method is called by SDL using JNI. + */ + public static Context getContext() { + return SDL.getContext(); + } + + public static DisplayMetrics getDisplayDPI() { + return getContext().getResources().getDisplayMetrics(); + } + + /** + * This method is called by SDL using JNI. + */ + public static boolean getManifestEnvironmentVariables() { + try { + ApplicationInfo applicationInfo = getContext().getPackageManager().getApplicationInfo(getContext().getPackageName(), PackageManager.GET_META_DATA); + Bundle bundle = applicationInfo.metaData; + if (bundle == null) { + return false; + } + String prefix = "SDL_ENV."; + final int trimLength = prefix.length(); + for (String key : bundle.keySet()) { + if (key.startsWith(prefix)) { + String name = key.substring(trimLength); + String value = bundle.get(key).toString(); + nativeSetenv(name, value); + } + } + /* environment variables set! */ + return true; + } catch (Exception e) { + Log.v("SDL", "exception " + e.toString()); + } + return false; } static class ShowTextInputTask implements Runnable { @@ -365,11 +657,12 @@ public class SDLActivity extends Activity { @Override public void run() { - AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams( - w, h + HEIGHT_PADDING, x, y); + RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(w, h + HEIGHT_PADDING); + params.leftMargin = x; + params.topMargin = y; if (mTextEdit == null) { - mTextEdit = new DummyEdit(getContext()); + mTextEdit = new DummyEdit(SDL.getContext()); mLayout.addView(mTextEdit, params); } else { @@ -379,101 +672,47 @@ public class SDLActivity extends Activity { mTextEdit.setVisibility(View.VISIBLE); mTextEdit.requestFocus(); - InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + InputMethodManager imm = (InputMethodManager) SDL.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mTextEdit, 0); + + mScreenKeyboardShown = true; } } + /** + * This method is called by SDL using JNI. + */ public static boolean showTextInput(int x, int y, int w, int h) { // Transfer the task to the main thread as a Runnable return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h)); } - + + public static boolean isTextInputEvent(KeyEvent event) { + + // Key pressed with Ctrl should be sent as SDL_KEYDOWN/SDL_KEYUP and not SDL_TEXTINPUT + if (android.os.Build.VERSION.SDK_INT >= 11) { + if (event.isCtrlPressed()) { + return false; + } + } + + return event.isPrintingKey() || event.getKeyCode() == KeyEvent.KEYCODE_SPACE; + } + + /** + * This method is called by SDL using JNI. + */ public static Surface getNativeSurface() { + if (SDLActivity.mSurface == null) { + return null; + } return SDLActivity.mSurface.getNativeSurface(); } - // Audio - public static int audioInit(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) { - int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO; - int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT; - int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1); - - Log.v("SDL", "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + (sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer"); - - // Let the user pick a larger buffer if they really want -- but ye - // gods they probably shouldn't, the minimums are horrifyingly high - // latency already - desiredFrames = Math.max(desiredFrames, (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize); - - if (mAudioTrack == null) { - mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, - channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM); - - // Instantiating AudioTrack can "succeed" without an exception and the track may still be invalid - // Ref: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/AudioTrack.java - // Ref: http://developer.android.com/reference/android/media/AudioTrack.html#getState() - - if (mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) { - Log.e("SDL", "Failed during initialization of Audio Track"); - mAudioTrack = null; - return -1; - } - - mAudioTrack.play(); - } - - Log.v("SDL", "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + (mAudioTrack.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer"); - - return 0; - } - - public static void audioWriteShortBuffer(short[] buffer) { - for (int i = 0; i < buffer.length; ) { - int result = mAudioTrack.write(buffer, i, buffer.length - i); - if (result > 0) { - i += result; - } else if (result == 0) { - try { - Thread.sleep(1); - } catch(InterruptedException e) { - // Nom nom - } - } else { - Log.w("SDL", "SDL audio: error return from write(short)"); - return; - } - } - } - - public static void audioWriteByteBuffer(byte[] buffer) { - for (int i = 0; i < buffer.length; ) { - int result = mAudioTrack.write(buffer, i, buffer.length - i); - if (result > 0) { - i += result; - } else if (result == 0) { - try { - Thread.sleep(1); - } catch(InterruptedException e) { - // Nom nom - } - } else { - Log.w("SDL", "SDL audio: error return from write(byte)"); - return; - } - } - } - - public static void audioQuit() { - if (mAudioTrack != null) { - mAudioTrack.stop(); - mAudioTrack = null; - } - } - // Input /** + * This method is called by SDL using JNI. * @return an array which may be empty but is never null. */ public static int[] inputGetInputDeviceIds(int sources) { @@ -488,41 +727,336 @@ public class SDLActivity extends Activity { } return Arrays.copyOf(filtered, used); } - - // Joystick glue code, just a series of stubs that redirect to the SDLJoystickHandler instance - public static boolean handleJoystickMotionEvent(MotionEvent event) { - return mJoystickHandler.handleMotionEvent(event); - } - - public static void pollInputDevices() { - if (SDLActivity.mSDLThread != null) { - mJoystickHandler.pollInputDevices(); + + // APK expansion files support + + /** com.android.vending.expansion.zipfile.ZipResourceFile object or null. */ + private static Object expansionFile; + + /** com.android.vending.expansion.zipfile.ZipResourceFile's getInputStream() or null. */ + private static Method expansionFileMethod; + + /** + * This method is called by SDL using JNI. + * @return an InputStream on success or null if no expansion file was used. + * @throws IOException on errors. Message is set for the SDL error message. + */ + public static InputStream openAPKExpansionInputStream(String fileName) throws IOException { + // Get a ZipResourceFile representing a merger of both the main and patch files + if (expansionFile == null) { + String mainHint = nativeGetHint("SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION"); + if (mainHint == null) { + return null; // no expansion use if no main version was set + } + String patchHint = nativeGetHint("SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION"); + if (patchHint == null) { + return null; // no expansion use if no patch version was set + } + + Integer mainVersion; + Integer patchVersion; + try { + mainVersion = Integer.valueOf(mainHint); + patchVersion = Integer.valueOf(patchHint); + } catch (NumberFormatException ex) { + ex.printStackTrace(); + throw new IOException("No valid file versions set for APK expansion files", ex); + } + + try { + // To avoid direct dependency on Google APK expansion library that is + // not a part of Android SDK we access it using reflection + expansionFile = Class.forName("com.android.vending.expansion.zipfile.APKExpansionSupport") + .getMethod("getAPKExpansionZipFile", Context.class, int.class, int.class) + .invoke(null, SDL.getContext(), mainVersion, patchVersion); + + expansionFileMethod = expansionFile.getClass() + .getMethod("getInputStream", String.class); + } catch (Exception ex) { + ex.printStackTrace(); + expansionFile = null; + expansionFileMethod = null; + throw new IOException("Could not access APK expansion support library", ex); + } } + + // Get an input stream for a known file inside the expansion file ZIPs + InputStream fileStream; + try { + fileStream = (InputStream)expansionFileMethod.invoke(expansionFile, fileName); + } catch (Exception ex) { + // calling "getInputStream" failed + ex.printStackTrace(); + throw new IOException("Could not open stream from APK expansion file", ex); + } + + if (fileStream == null) { + // calling "getInputStream" was successful but null was returned + throw new IOException("Could not find path in APK expansion file"); + } + + return fileStream; + } + + // Messagebox + + /** Result of current messagebox. Also used for blocking the calling thread. */ + protected final int[] messageboxSelection = new int[1]; + + /** Id of current dialog. */ + protected int dialogs = 0; + + /** + * This method is called by SDL using JNI. + * Shows the messagebox from UI thread and block calling thread. + * buttonFlags, buttonIds and buttonTexts must have same length. + * @param buttonFlags array containing flags for every button. + * @param buttonIds array containing id for every button. + * @param buttonTexts array containing text for every button. + * @param colors null for default or array of length 5 containing colors. + * @return button id or -1. + */ + public int messageboxShowMessageBox( + final int flags, + final String title, + final String message, + final int[] buttonFlags, + final int[] buttonIds, + final String[] buttonTexts, + final int[] colors) { + + messageboxSelection[0] = -1; + + // sanity checks + + if ((buttonFlags.length != buttonIds.length) && (buttonIds.length != buttonTexts.length)) { + return -1; // implementation broken + } + + // collect arguments for Dialog + + final Bundle args = new Bundle(); + args.putInt("flags", flags); + args.putString("title", title); + args.putString("message", message); + args.putIntArray("buttonFlags", buttonFlags); + args.putIntArray("buttonIds", buttonIds); + args.putStringArray("buttonTexts", buttonTexts); + args.putIntArray("colors", colors); + + // trigger Dialog creation on UI thread + + runOnUiThread(new Runnable() { + @Override + public void run() { + showDialog(dialogs++, args); + } + }); + + // block the calling thread + + synchronized (messageboxSelection) { + try { + messageboxSelection.wait(); + } catch (InterruptedException ex) { + ex.printStackTrace(); + return -1; + } + } + + // return selected value + + return messageboxSelection[0]; + } + + @Override + protected Dialog onCreateDialog(int ignore, Bundle args) { + + // TODO set values from "flags" to messagebox dialog + + // get colors + + int[] colors = args.getIntArray("colors"); + int backgroundColor; + int textColor; + int buttonBorderColor; + int buttonBackgroundColor; + int buttonSelectedColor; + if (colors != null) { + int i = -1; + backgroundColor = colors[++i]; + textColor = colors[++i]; + buttonBorderColor = colors[++i]; + buttonBackgroundColor = colors[++i]; + buttonSelectedColor = colors[++i]; + } else { + backgroundColor = Color.TRANSPARENT; + textColor = Color.TRANSPARENT; + buttonBorderColor = Color.TRANSPARENT; + buttonBackgroundColor = Color.TRANSPARENT; + buttonSelectedColor = Color.TRANSPARENT; + } + + // create dialog with title and a listener to wake up calling thread + + final Dialog dialog = new Dialog(this); + dialog.setTitle(args.getString("title")); + dialog.setCancelable(false); + dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface unused) { + synchronized (messageboxSelection) { + messageboxSelection.notify(); + } + } + }); + + // create text + + TextView message = new TextView(this); + message.setGravity(Gravity.CENTER); + message.setText(args.getString("message")); + if (textColor != Color.TRANSPARENT) { + message.setTextColor(textColor); + } + + // create buttons + + int[] buttonFlags = args.getIntArray("buttonFlags"); + int[] buttonIds = args.getIntArray("buttonIds"); + String[] buttonTexts = args.getStringArray("buttonTexts"); + + final SparseArray