diff --git a/CMakeLists.txt b/CMakeLists.txt index c0d3c8f03..3cd9a147c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,10 +62,6 @@ if (NOT ANDROID) ADD_DEFINITIONS(-DNOT_ANDROID) endif() -if (ANDROID) -ADD_DEFINITIONS(-DBUILD_ANDROID) -endif() - # doxygen main page @@ -248,10 +244,10 @@ if(OGRE_STATIC) if (ANDROID) add_static_ogre_plugin(RenderSystem_GLES2) -endif (ANDROID) -if (NOT ANDROID) +else () add_static_ogre_plugin(RenderSystem_GL) endif () + if(WIN32) add_static_ogre_plugin(RenderSystem_Direct3D9) endif(WIN32) diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 2fb4f793f..7bb9da63b 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -1,30 +1,18 @@ # local files -if (ANDROID) -set(GAME - main.cpp - SDL_android_main.c - engine.cpp -) -endif (ANDROID) -if (NOT ANDROID) set(GAME main.cpp +#ifdef ANDROID +android_main.c +#endif engine.cpp ) -endif () -if(NOT WIN32 AND NOT ANDROID) - set(GAME ${GAME} crashcatcher.cpp) -endif() -if (NOT ANDROID) -ADD_DEFINITIONS(-DNOT_ANDROID) -endif() -if (ANDROID) -ADD_DEFINITIONS(-DBUILD_ANDROID) +if(NOT WIN32 OR NOT ANDROID) + set(GAME ${GAME} crashcatcher.cpp) endif() @@ -106,8 +94,7 @@ add_openmw_dir (mwbase # Main executable if (ANDROID) set(BOOST_COMPONENTS system filesystem program_options thread wave atomic) -endif (ANDROID) -if (NOT ANDROID) +else () set(BOOST_COMPONENTS system filesystem program_options thread wave) endif () if(WIN32) @@ -123,9 +110,8 @@ add_executable(openmw ${GAME} ${GAME_HEADER} ${APPLE_BUNDLE_RESOURCES} ) -endif () +else () -if (ANDROID) add_library(openmw SHARED ${OPENMW_LIBS} ${OPENMW_LIBS_HEADER} ${OPENMW_FILES} @@ -133,7 +119,7 @@ add_library(openmw SHARED ${APPLE_BUNDLE_RESOURCES} ) -endif (ANDROID) +endif () # Sound stuff - here so CMake doesn't stupidly recompile EVERYTHING # when we change the backend. @@ -156,36 +142,14 @@ target_link_libraries(openmw ) if (ANDROID) -target_link_libraries(openmw -${OGRE_STATIC_PLUGINS} -) + target_link_libraries(openmw +${OGRE_STATIC_PLUGINS} EGL android log dl -) -target_link_libraries(openmw -boost_atomic -boost_chrono -boost_date_time -boost_filesystem -boost_program_options -boost_system -boost_thread -boost_wave -) -target_link_libraries(openmw -FreeImage -freetype -) - -target_link_libraries(openmw -OgreMainStatic -) - -target_link_libraries(openmw MyGUI.OgrePlatform MyGUIEngineStatic Plugin_StrangeButtonStatic @@ -194,6 +158,7 @@ BulletCollision BulletDynamics LinearMath ) + endif (ANDROID) if (USE_SYSTEM_TINYXML) diff --git a/apps/openmw/SDL_android_main.c b/apps/openmw/android_main.c similarity index 62% rename from apps/openmw/SDL_android_main.c rename to apps/openmw/android_main.c index 5586512dc..76da91c4f 100644 --- a/apps/openmw/SDL_android_main.c +++ b/apps/openmw/android_main.c @@ -1,11 +1,7 @@ -/* - SDL_android_main.c, placed in the public domain by Sam Lantinga 3/13/14 -*/ + #include "../../SDL_internal.h" #ifdef __ANDROID__ - -/* Include the SDL main definition header */ #include "SDL_main.h" @@ -14,24 +10,19 @@ *******************************************************************************/ #include -/* Called before SDL_main() to initialize JNI bindings in SDL library */ +/* Called before to initialize JNI bindings */ -//extern void SDL_Android_Init(JNIEnv* env, jclass cls); extern void SDL_Android_Init(JNIEnv* env, jclass cls); -/* Start up the SDL app */ + int Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject obj) { - /* This interface could expand with ABI negotiation, calbacks, etc. */ + SDL_Android_Init(env, cls); SDL_SetMainReady(); - - //DL_SetHint(SDL_HINT_RENDER_DRIVER, "software"); - - // SDL_SetHint(SDL_HINT_SIMULATE_INPUT_EVENTS, "0"); /* Run the application code! */ @@ -50,4 +41,3 @@ int Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject #endif /* __ANDROID__ */ -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/apps/openmw/engine.cpp b/apps/openmw/engine.cpp index 66eae5f5d..731efaa6b 100644 --- a/apps/openmw/engine.cpp +++ b/apps/openmw/engine.cpp @@ -192,7 +192,9 @@ OMW::Engine::Engine(Files::ConfigurationManager& configurationManager) //kindly ask SDL not to trash our OGL context //might this be related to http://bugzilla.libsdl.org/show_bug.cgi?id=748 ? SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software"); + SDL_SetMainReady(); + if(SDL_Init(flags) != 0) { throw std::runtime_error("Could not initialize SDL! " + std::string(SDL_GetError())); @@ -576,4 +578,4 @@ void OMW::Engine::setScriptBlacklist (const std::vector& list) void OMW::Engine::setScriptBlacklistUse (bool use) { mScriptBlacklistUse = use; -} \ No newline at end of file +} diff --git a/apps/openmw/main.cpp b/apps/openmw/main.cpp index 6c699bed1..fb26612df 100644 --- a/apps/openmw/main.cpp +++ b/apps/openmw/main.cpp @@ -21,6 +21,7 @@ #endif + #if OGRE_PLATFORM == OGRE_PLATFORM_LINUX || OGRE_PLATFORM == OGRE_PLATFORM_APPLE #include extern int cc_install_handlers(int argc, char **argv, int num_signals, int *sigs, const char *logfile, int (*user_info)(char*, char*)); @@ -405,3 +406,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine return main(__argc, __argv); } #endif + + + + diff --git a/cmake/FindOGRE.cmake b/cmake/FindOGRE.cmake index 844ee09a3..b065fff89 100644 --- a/cmake/FindOGRE.cmake +++ b/cmake/FindOGRE.cmake @@ -263,14 +263,14 @@ if (ANDROID) ${FreeImage_LIBRARIES} ${FREETYPE_LIBRARIES} ${Cocoa_LIBRARIES} ${Carbon_LIBRARIES}) -endif (ANDROID) -if (NOT ANDROID) +else () set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${OGRE_LIBRARY_FWK} ${ZZip_LIBRARIES} ${ZLIB_LIBRARIES} ${FreeImage_LIBRARIES} ${FREETYPE_LIBRARIES} ${X11_LIBRARIES} ${X11_Xt_LIBRARIES} ${XAW_LIBRARY} ${X11_Xrandr_LIB} ${Cocoa_LIBRARIES} ${Carbon_LIBRARIES}) endif() + if (NOT ZLIB_FOUND OR NOT ZZip_FOUND) set(OGRE_DEPS_FOUND FALSE) endif () diff --git a/components/CMakeLists.txt b/components/CMakeLists.txt index efe432227..e47fbce7d 100644 --- a/components/CMakeLists.txt +++ b/components/CMakeLists.txt @@ -50,7 +50,7 @@ add_component_dir (misc ) add_component_dir (files - linuxpath windowspath macospath fixedpath multidircollection collections configurationmanager + linuxpath androidpath windowspath macospath fixedpath multidircollection collections configurationmanager constrainedfiledatastream lowlevelfile ) diff --git a/components/files/androidpath.cpp b/components/files/androidpath.cpp new file mode 100644 index 000000000..e1443342e --- /dev/null +++ b/components/files/androidpath.cpp @@ -0,0 +1,170 @@ +#include "androidpath.hpp" + +#if defined(__ANDROID__) + +#include +#include +#include +#include +#include + + +namespace +{ + boost::filesystem::path getUserHome() + { + const char* dir = getenv("HOME"); + if (dir == NULL) + { + struct passwd* pwd = getpwuid(getuid()); + if (pwd != NULL) + { + dir = pwd->pw_dir; + } + } + if (dir == NULL) + return boost::filesystem::path(); + else + return boost::filesystem::path(dir); + } + + boost::filesystem::path getEnv(const std::string& envVariable, const boost::filesystem::path& fallback) + { + const char* result = getenv(envVariable.c_str()); + if (!result) + return fallback; + boost::filesystem::path dir(result); + if (dir.empty()) + return fallback; + else + return dir; + } +} + +/** + * \namespace Files + */ +namespace Files +{ + +AndroidPath::AndroidPath(const std::string& application_name) + : mName(application_name) +{ +} + +boost::filesystem::path AndroidPath::getUserConfigPath() const +{ + + return getEnv("XDG_CONFIG_HOME", "/sdcard/morrowind/config") / mName; + +} + +boost::filesystem::path AndroidPath::getUserDataPath() const +{ + + + return getEnv("XDG_DATA_HOME", "/sdcard/morrowind/share") / mName; + +} + +boost::filesystem::path AndroidPath::getCachePath() const +{ + + return getEnv("XDG_CACHE_HOME", "/sdcard/morrowind/cache") / mName; + +} + +boost::filesystem::path AndroidPath::getGlobalConfigPath() const +{ + boost::filesystem::path globalPath("/sdcard/morrowind/"); + +return globalPath / mName; +} + +boost::filesystem::path AndroidPath::getLocalPath() const +{ + return boost::filesystem::path("./"); +} + +boost::filesystem::path AndroidPath::getGlobalDataPath() const +{ + + boost::filesystem::path globalDataPath("/sdcard/morrowind/data"); + +return globalDataPath / mName; +} + +boost::filesystem::path AndroidPath::getInstallPath() const +{ + boost::filesystem::path installPath; + + boost::filesystem::path homePath = getUserHome(); + + if (!homePath.empty()) + { + boost::filesystem::path wineDefaultRegistry(homePath); + wineDefaultRegistry /= ".wine/system.reg"; + + if (boost::filesystem::is_regular_file(wineDefaultRegistry)) + { + boost::filesystem::ifstream file(wineDefaultRegistry); + bool isRegEntry = false; + std::string line; + std::string mwpath; + + while (std::getline(file, line)) + { + if (line[0] == '[') // we found an entry + { + if (isRegEntry) + { + break; + } + + isRegEntry = (line.find("Softworks\\\\Morrowind]") != std::string::npos); + } + else if (isRegEntry) + { + if (line[0] == '"') // empty line means new registry key + { + std::string key = line.substr(1, line.find('"', 1) - 1); + if (strcasecmp(key.c_str(), "Installed Path") == 0) + { + std::string::size_type valuePos = line.find('=') + 2; + mwpath = line.substr(valuePos, line.rfind('"') - valuePos); + + std::string::size_type pos = mwpath.find("\\"); + while (pos != std::string::npos) + { + mwpath.replace(pos, 2, "/"); + pos = mwpath.find("\\", pos + 1); + } + break; + } + } + } + } + + if (!mwpath.empty()) + { + // Change drive letter to lowercase, so we could use + // ~/.wine/dosdevices symlinks + mwpath[0] = tolower(mwpath[0]); + installPath /= homePath; + installPath /= ".wine/dosdevices/"; + installPath /= mwpath; + + if (!boost::filesystem::is_directory(installPath)) + { + installPath.clear(); + } + } + } + } + + return installPath; +} + +} /* namespace Files */ + +#endif /* defined(__linux__) || defined(__FreeBSD__) */ diff --git a/components/files/androidpath.hpp b/components/files/androidpath.hpp new file mode 100644 index 000000000..cee1cc0a6 --- /dev/null +++ b/components/files/androidpath.hpp @@ -0,0 +1,57 @@ +#ifndef COMPONENTS_FILES_LINUXPATH_H +#define COMPONENTS_FILES_LINUXPATH_H + +#if defined(__ANDROID__) + +#include +/** + * \namespace Files + */ +namespace Files +{ + +struct AndroidPath +{ + AndroidPath(const std::string& application_name); + + /** + * \brief Return path to the user directory. + */ + boost::filesystem::path getUserConfigPath() const; + + boost::filesystem::path getUserDataPath() const; + + /** + * \brief Return path to the global (system) directory where config files can be placed. + */ + boost::filesystem::path getGlobalConfigPath() const; + + /** + * \brief Return path to the runtime configuration directory which is the + * place where an application was started. + */ + boost::filesystem::path getLocalPath() const; + + /** + * \brief Return path to the global (system) directory where game files can be placed. + */ + boost::filesystem::path getGlobalDataPath() const; + + /** + * \brief + */ + boost::filesystem::path getCachePath() const; + + /** + * \brief Gets the path of the installed Morrowind version if there is one. + */ + boost::filesystem::path getInstallPath() const; + + std::string mName; +}; + +} /* namespace Files */ + +#endif /* defined(__linux__) || defined(__FreeBSD__) */ + +#endif /* COMPONENTS_FILES_LINUXPATH_H */ diff --git a/components/files/fixedpath.hpp b/components/files/fixedpath.hpp index cfd3458ce..45ad3238f 100644 --- a/components/files/fixedpath.hpp +++ b/components/files/fixedpath.hpp @@ -4,10 +4,12 @@ #include #include -#if defined(__linux__) || defined(__FreeBSD__) +#if defined(__UNIX__) || defined(__FreeBSD__) #include namespace Files { typedef LinuxPath TargetPathType; } - +#elif defined (__ANDROID__) + #include + namespace Files { typedef AndroidPath TargetPathType; } #elif defined(__WIN32) || defined(__WINDOWS__) || defined(_WIN32) #include namespace Files { typedef WindowsPath TargetPathType; } diff --git a/components/files/linuxpath.cpp b/components/files/linuxpath.cpp index c59f4065d..151b0a695 100644 --- a/components/files/linuxpath.cpp +++ b/components/files/linuxpath.cpp @@ -58,51 +58,33 @@ LinuxPath::LinuxPath(const std::string& application_name) boost::filesystem::path LinuxPath::getUserConfigPath() const { -#ifdef NOT_ANDROID + return getEnv("XDG_CONFIG_HOME", getUserHome() / ".config") / mName; -#endif -//else -#ifdef BUILD_ANDROID - return getEnv("XDG_CONFIG_HOME", "/sdcard/morrowind/config") / mName; -#endif + + + } boost::filesystem::path LinuxPath::getUserDataPath() const { -//if (flag==false) -#ifdef NOT_ANDROID + return getEnv("XDG_DATA_HOME", getUserHome() / ".local/share") / mName; -#endif -//else -#ifdef BUILD_ANDROID - return getEnv("XDG_DATA_HOME", "/sdcard/morrowind/share") / mName; -#endif + } boost::filesystem::path LinuxPath::getCachePath() const { -//if (flag==false) -#ifdef NOT_ANDROID + return getEnv("XDG_CACHE_HOME", getUserHome() / ".cache") / mName; -#endif -//else -#ifdef BUILD_ANDROID - return getEnv("XDG_CACHE_HOME", "/sdcard/morrowind/cache") / mName; -#endif } boost::filesystem::path LinuxPath::getGlobalConfigPath() const { -//if (flag==false) -#ifdef NOT_ANDROID + boost::filesystem::path globalPath("/etc/"); -#endif -//else -#ifdef BUILD_ANDROID - boost::filesystem::path globalPath("/sdcard/morrowind/"); -#endif + return globalPath / mName; } @@ -113,15 +95,9 @@ boost::filesystem::path LinuxPath::getLocalPath() const boost::filesystem::path LinuxPath::getGlobalDataPath() const { -//if (flag==false) -#ifdef NOT_ANDROID - + boost::filesystem::path globalDataPath("/usr/share/games/"); -#endif -//else -#ifdef BUILD_ANDROID - boost::filesystem::path globalDataPath("/sdcard/morrowind/data"); -#endif + return globalDataPath / mName; } diff --git a/components/ogreinit/ogreinit.cpp b/components/ogreinit/ogreinit.cpp index 8d316468e..cbf8a9b0b 100644 --- a/components/ogreinit/ogreinit.cpp +++ b/components/ogreinit/ogreinit.cpp @@ -95,7 +95,7 @@ namespace OgreInit Ogre::Root* OgreInit::init(const std::string &logPath) { - #ifdef NOT_ANDROID + #ifdef NOT ANDROID // Set up logging first new Ogre::LogManager; diff --git a/eclipse-project/.classpath b/eclipse-project/.classpath deleted file mode 100644 index 51769745b..000000000 --- a/eclipse-project/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/eclipse-project/AndroidManifest.xml b/eclipse-project/AndroidManifest.xml deleted file mode 100644 index 834995717..000000000 --- a/eclipse-project/AndroidManifest.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-project/ant.properties b/eclipse-project/ant.properties deleted file mode 100644 index b0971e891..000000000 --- a/eclipse-project/ant.properties +++ /dev/null @@ -1,17 +0,0 @@ -# This file is used to override default values used by the Ant build system. -# -# This file must be checked into Version Control Systems, as it is -# integral to the build system of your project. - -# This file is only used by the Ant script. - -# You can use this to override default values such as -# 'source.dir' for the location of your java source folder and -# 'out.dir' for the location of your output folder. - -# You can also use it define how the release builds are signed by declaring -# the following properties: -# 'key.store' for the location of your keystore and -# 'key.alias' for the name of the key to use. -# The password will be asked during the build when you use the 'release' target. - diff --git a/eclipse-project/bin/AndroidManifest.xml b/eclipse-project/bin/AndroidManifest.xml deleted file mode 100644 index 834995717..000000000 --- a/eclipse-project/bin/AndroidManifest.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-project/bin/classes.dex b/eclipse-project/bin/classes.dex deleted file mode 100644 index 37732412a..000000000 Binary files a/eclipse-project/bin/classes.dex and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/BuildConfig.class b/eclipse-project/bin/classes/org/libsdl/app/BuildConfig.class deleted file mode 100644 index c2d3001d0..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/BuildConfig.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/DummyEdit.class b/eclipse-project/bin/classes/org/libsdl/app/DummyEdit.class deleted file mode 100644 index 510766fcc..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/DummyEdit.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/R$attr.class b/eclipse-project/bin/classes/org/libsdl/app/R$attr.class deleted file mode 100644 index 937f7ac43..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/R$attr.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/R$drawable.class b/eclipse-project/bin/classes/org/libsdl/app/R$drawable.class deleted file mode 100644 index fc0bd0e07..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/R$drawable.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/R$layout.class b/eclipse-project/bin/classes/org/libsdl/app/R$layout.class deleted file mode 100644 index 2b842be48..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/R$layout.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/R$string.class b/eclipse-project/bin/classes/org/libsdl/app/R$string.class deleted file mode 100644 index 4c00d04aa..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/R$string.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/R.class b/eclipse-project/bin/classes/org/libsdl/app/R.class deleted file mode 100644 index 953e3910a..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/R.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLActivity$1.class b/eclipse-project/bin/classes/org/libsdl/app/SDLActivity$1.class deleted file mode 100644 index 1f8366f5c..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLActivity$1.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLActivity$SDLCommandHandler.class b/eclipse-project/bin/classes/org/libsdl/app/SDLActivity$SDLCommandHandler.class deleted file mode 100644 index 65cd4fcf1..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLActivity$SDLCommandHandler.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLActivity$ShowTextInputTask.class b/eclipse-project/bin/classes/org/libsdl/app/SDLActivity$ShowTextInputTask.class deleted file mode 100644 index 626241c96..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLActivity$ShowTextInputTask.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLActivity.class b/eclipse-project/bin/classes/org/libsdl/app/SDLActivity.class deleted file mode 100644 index 17d2160ba..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLActivity.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLGenericMotionListener_API12.class b/eclipse-project/bin/classes/org/libsdl/app/SDLGenericMotionListener_API12.class deleted file mode 100644 index aa9350194..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLGenericMotionListener_API12.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLInputConnection.class b/eclipse-project/bin/classes/org/libsdl/app/SDLInputConnection.class deleted file mode 100644 index fc9929a0e..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLInputConnection.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler.class b/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler.class deleted file mode 100644 index 4aaf73430..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler_API12$RangeComparator.class b/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler_API12$RangeComparator.class deleted file mode 100644 index d41939564..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler_API12$RangeComparator.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler_API12$SDLJoystick.class b/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler_API12$SDLJoystick.class deleted file mode 100644 index 0a2faabd2..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler_API12$SDLJoystick.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler_API12.class b/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler_API12.class deleted file mode 100644 index 14e0070b2..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLJoystickHandler_API12.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLMain.class b/eclipse-project/bin/classes/org/libsdl/app/SDLMain.class deleted file mode 100644 index 15be793ff..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLMain.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLSurface$1.class b/eclipse-project/bin/classes/org/libsdl/app/SDLSurface$1.class deleted file mode 100644 index a1cb221d7..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLSurface$1.class and /dev/null differ diff --git a/eclipse-project/bin/classes/org/libsdl/app/SDLSurface.class b/eclipse-project/bin/classes/org/libsdl/app/SDLSurface.class deleted file mode 100644 index 520704618..000000000 Binary files a/eclipse-project/bin/classes/org/libsdl/app/SDLSurface.class and /dev/null differ diff --git a/eclipse-project/bin/dexedLibs/annotations-2ba65cb4f94dbc226915dbfb39e51358.jar b/eclipse-project/bin/dexedLibs/annotations-2ba65cb4f94dbc226915dbfb39e51358.jar deleted file mode 100644 index 23385bbba..000000000 Binary files a/eclipse-project/bin/dexedLibs/annotations-2ba65cb4f94dbc226915dbfb39e51358.jar and /dev/null differ diff --git a/eclipse-project/bin/jarlist.cache b/eclipse-project/bin/jarlist.cache deleted file mode 100644 index 0565465f2..000000000 --- a/eclipse-project/bin/jarlist.cache +++ /dev/null @@ -1,3 +0,0 @@ -# cache for current jar dependency. DO NOT EDIT. -# format is -# Encoding is UTF-8 diff --git a/eclipse-project/bin/res/crunch/drawable-hdpi/ic_launcher1.png b/eclipse-project/bin/res/crunch/drawable-hdpi/ic_launcher1.png deleted file mode 100644 index 8711c59c8..000000000 Binary files a/eclipse-project/bin/res/crunch/drawable-hdpi/ic_launcher1.png and /dev/null differ diff --git a/eclipse-project/bin/res/crunch/drawable-mdpi/ic_launcher1.png b/eclipse-project/bin/res/crunch/drawable-mdpi/ic_launcher1.png deleted file mode 100644 index 1562aa388..000000000 Binary files a/eclipse-project/bin/res/crunch/drawable-mdpi/ic_launcher1.png and /dev/null differ diff --git a/eclipse-project/bin/res/crunch/drawable-xhdpi/ic_launcher1.png b/eclipse-project/bin/res/crunch/drawable-xhdpi/ic_launcher1.png deleted file mode 100644 index b086cf710..000000000 Binary files a/eclipse-project/bin/res/crunch/drawable-xhdpi/ic_launcher1.png and /dev/null differ diff --git a/eclipse-project/bin/res/crunch/drawable-xxhdpi/ic_launcher1.png b/eclipse-project/bin/res/crunch/drawable-xxhdpi/ic_launcher1.png deleted file mode 100644 index 56b4e40ce..000000000 Binary files a/eclipse-project/bin/res/crunch/drawable-xxhdpi/ic_launcher1.png and /dev/null differ diff --git a/eclipse-project/bin/resources.ap_ b/eclipse-project/bin/resources.ap_ deleted file mode 100644 index 641e35283..000000000 Binary files a/eclipse-project/bin/resources.ap_ and /dev/null differ diff --git a/eclipse-project/build.properties b/eclipse-project/build.properties deleted file mode 100644 index edc7f2305..000000000 --- a/eclipse-project/build.properties +++ /dev/null @@ -1,17 +0,0 @@ -# This file is used to override default values used by the Ant build system. -# -# This file must be checked in Version Control Systems, as it is -# integral to the build system of your project. - -# This file is only used by the Ant script. - -# You can use this to override default values such as -# 'source.dir' for the location of your java source folder and -# 'out.dir' for the location of your output folder. - -# You can also use it define how the release builds are signed by declaring -# the following properties: -# 'key.store' for the location of your keystore and -# 'key.alias' for the name of the key to use. -# The password will be asked during the build when you use the 'release' target. - diff --git a/eclipse-project/build.xml b/eclipse-project/build.xml deleted file mode 100644 index 9f19a077b..000000000 --- a/eclipse-project/build.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/eclipse-project/default.properties b/eclipse-project/default.properties deleted file mode 100644 index 0cdab9561..000000000 --- a/eclipse-project/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=android-12 diff --git a/eclipse-project/gen/org/libsdl/app/BuildConfig.java b/eclipse-project/gen/org/libsdl/app/BuildConfig.java deleted file mode 100644 index 397b993f1..000000000 --- a/eclipse-project/gen/org/libsdl/app/BuildConfig.java +++ /dev/null @@ -1,6 +0,0 @@ -/** Automatically generated file. DO NOT MODIFY */ -package org.libsdl.app; - -public final class BuildConfig { - public final static boolean DEBUG = true; -} \ No newline at end of file diff --git a/eclipse-project/gen/org/libsdl/app/R.java b/eclipse-project/gen/org/libsdl/app/R.java deleted file mode 100644 index 02e05052f..000000000 --- a/eclipse-project/gen/org/libsdl/app/R.java +++ /dev/null @@ -1,22 +0,0 @@ -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * aapt tool from the resource data it found. It - * should not be modified by hand. - */ - -package org.libsdl.app; - -public final class R { - public static final class attr { - } - public static final class drawable { - public static final int ic_launcher1=0x7f020000; - } - public static final class layout { - public static final int main=0x7f030000; - } - public static final class string { - public static final int app_name=0x7f040000; - } -} diff --git a/eclipse-project/jni/Android.mk b/eclipse-project/jni/Android.mk deleted file mode 100644 index 5053e7d64..000000000 --- a/eclipse-project/jni/Android.mk +++ /dev/null @@ -1 +0,0 @@ -include $(call all-subdir-makefiles) diff --git a/eclipse-project/jni/Application.mk b/eclipse-project/jni/Application.mk deleted file mode 100644 index e5b50793b..000000000 --- a/eclipse-project/jni/Application.mk +++ /dev/null @@ -1,6 +0,0 @@ - -# Uncomment this if you're using STL in your project -# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information -# APP_STL := stlport_static - -APP_ABI := armeabi armeabi-v7a x86 diff --git a/eclipse-project/jni/src/Android.mk b/eclipse-project/jni/src/Android.mk deleted file mode 100644 index 943a8cdbe..000000000 --- a/eclipse-project/jni/src/Android.mk +++ /dev/null @@ -1,19 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := main - -SDL_PATH := ../SDL - -LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include - -# Add your application source files here... -LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \ - YourSourceHere.c - -LOCAL_SHARED_LIBRARIES := SDL2 - -LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog - -include $(BUILD_SHARED_LIBRARY) diff --git a/eclipse-project/jni/src/Android_static.mk b/eclipse-project/jni/src/Android_static.mk deleted file mode 100644 index faed669c0..000000000 --- a/eclipse-project/jni/src/Android_static.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := main - -LOCAL_SRC_FILES := YourSourceHere.c - -LOCAL_STATIC_LIBRARIES := SDL2_static - -include $(BUILD_SHARED_LIBRARY) -$(call import-module,SDL)LOCAL_PATH := $(call my-dir) diff --git a/eclipse-project/proguard-project.txt b/eclipse-project/proguard-project.txt deleted file mode 100644 index f2fe1559a..000000000 --- a/eclipse-project/proguard-project.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/eclipse-project/project.properties b/eclipse-project/project.properties deleted file mode 100644 index 8937e94b9..000000000 --- a/eclipse-project/project.properties +++ /dev/null @@ -1,14 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-14 diff --git a/eclipse-project/res/drawable-hdpi/ic_launcher1.png b/eclipse-project/res/drawable-hdpi/ic_launcher1.png deleted file mode 100644 index 60f09b475..000000000 Binary files a/eclipse-project/res/drawable-hdpi/ic_launcher1.png and /dev/null differ diff --git a/eclipse-project/res/drawable-mdpi/ic_launcher1.png b/eclipse-project/res/drawable-mdpi/ic_launcher1.png deleted file mode 100644 index ed27dce19..000000000 Binary files a/eclipse-project/res/drawable-mdpi/ic_launcher1.png and /dev/null differ diff --git a/eclipse-project/res/drawable-xhdpi/ic_launcher1.png b/eclipse-project/res/drawable-xhdpi/ic_launcher1.png deleted file mode 100644 index 8e59b1fce..000000000 Binary files a/eclipse-project/res/drawable-xhdpi/ic_launcher1.png and /dev/null differ diff --git a/eclipse-project/res/drawable-xxhdpi/ic_launcher1.png b/eclipse-project/res/drawable-xxhdpi/ic_launcher1.png deleted file mode 100644 index 0791e6b36..000000000 Binary files a/eclipse-project/res/drawable-xxhdpi/ic_launcher1.png and /dev/null differ diff --git a/eclipse-project/res/layout/main.xml b/eclipse-project/res/layout/main.xml deleted file mode 100644 index 123c4b6ea..000000000 --- a/eclipse-project/res/layout/main.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/eclipse-project/res/values/strings.xml b/eclipse-project/res/values/strings.xml deleted file mode 100644 index 0ec895d1b..000000000 --- a/eclipse-project/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - Openmw - diff --git a/eclipse-project/src/org/libsdl/app/SDLActivity.java b/eclipse-project/src/org/libsdl/app/SDLActivity.java deleted file mode 100644 index 2ec638821..000000000 --- a/eclipse-project/src/org/libsdl/app/SDLActivity.java +++ /dev/null @@ -1,1211 +0,0 @@ -package org.libsdl.app; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -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.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.os.*; -import android.os.Process; -import android.util.Log; -import android.graphics.*; -import android.media.*; -import android.hardware.*; - - - - -/** - SDL Activity -*/ -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 mExitCalledFromJava; - - public static final boolean mAccelerometerEnabled = true; - // Main components - protected static SDLActivity mSingleton; - protected static SDLSurface mSurface; - protected static View mTextEdit; - protected static ViewGroup mLayout; - protected static SDLJoystickHandler mJoystickHandler; - - // This is what SDL runs in. It invokes SDL_main(), eventually - protected static Thread mSDLThread; - - // Audio - protected static AudioTrack mAudioTrack; - - // Load the .so - static { - System.loadLibrary("SDL2"); - System.loadLibrary("openal"); - - - - - - System.loadLibrary("avutil-52"); - System.loadLibrary("avcodec-54"); - System.loadLibrary("avformat-54"); - - System.loadLibrary("swresample-0"); - System.loadLibrary("swscale-2"); - - System.loadLibrary("avfilter-3"); - System.loadLibrary("avdevice-54"); - - - // System.loadLibrary("bullet"); - // System.loadLibrary("SDL2"); - System.loadLibrary("openmw"); - - //System.loadLibrary("SDL2_image"); - //System.loadLibrary("SDL2_mixer"); - //System.loadLibrary("SDL2_net"); - //System.loadLibrary("SDL2_ttf"); - // System.loadLibrary("main"); - } - - - 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 - mSingleton = null; - mSurface = null; - mTextEdit = null; - mLayout = null; - mJoystickHandler = null; - mSDLThread = null; - mAudioTrack = null; - mExitCalledFromJava = false; - mIsPaused = false; - mIsSurfaceReady = false; - mHasFocus = true; - } - - // Setup - @Override - protected void onCreate(Bundle savedInstanceState) { - Log.v("SDL", "onCreate():" + mSingleton); - super.onCreate(savedInstanceState); - - SDLActivity.initialize(); - // So we can call stuff from static callbacks - mSingleton = this; - - // 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.addView(mSurface); - - setContentView(mLayout); - } - - // Events - @Override - protected void onPause() { - Log.v("SDL", "onPause()"); - super.onPause(); - SDLActivity.handlePause(); - } - - @Override - protected void onResume() { - Log.v("SDL", "onResume()"); - super.onResume(); - SDLActivity.handleResume(); - } - - - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - Log.v("SDL", "onWindowFocusChanged(): " + hasFocus); - - SDLActivity.mHasFocus = hasFocus; - if (hasFocus) { - SDLActivity.handleResume(); - } - } - - @Override - public void onLowMemory() { - Log.v("SDL", "onLowMemory()"); - super.onLowMemory(); - SDLActivity.nativeLowMemory(); - } - - @Override - protected void onDestroy() { - Log.v("SDL", "onDestroy()"); - // Send a quit message to the application - SDLActivity.mExitCalledFromJava = true; - SDLActivity.nativeQuit(); - - // Now wait for the SDL thread to quit - if (SDLActivity.mSDLThread != null) { - try { - SDLActivity.mSDLThread.join(); - } catch(Exception e) { - Log.v("SDL", "Problem stopping thread: " + e); - } - SDLActivity.mSDLThread = null; - - //Log.v("SDL", "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) { - 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 */ - ) { - 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); - } - } - - /** 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.handleResume(); - } - } - - /* The native thread has finished */ - public static void handleNativeExit() { - SDLActivity.mSDLThread = null; - mSingleton.finish(); - } - - - // Messages from the SDLMain thread - static final int COMMAND_CHANGE_TITLE = 1; - static final int COMMAND_UNUSED = 2; - static final int COMMAND_TEXTEDIT_HIDE = 3; - - protected static final int COMMAND_USER = 0x8000; - - /** - * This method is called by SDL if SDL did not handle a message itself. - * This happens if a received message contains an unsupported command. - * Method can be overwritten to handle Messages in a different class. - * @param command the command of the message. - * @param param the parameter of the message. May be null. - * @return if the message was handled in overridden method. - */ - protected boolean onUnhandledMessage(int command, Object param) { - return false; - } - - /** - * A Handler class for Messages from native SDL applications. - * It uses current Activities as target (e.g. for the title). - * static to prevent implicit references to enclosing object. - */ - protected static class SDLCommandHandler extends Handler { - @Override - public void handleMessage(Message msg) { - Context context = getContext(); - if (context == null) { - Log.e(TAG, "error handling message, getContext() returned null"); - return; - } - switch (msg.arg1) { - case COMMAND_CHANGE_TITLE: - if (context instanceof Activity) { - ((Activity) context).setTitle((String)msg.obj); - } else { - Log.e(TAG, "error handling message, getContext() returned no Activity"); - } - break; - case COMMAND_TEXTEDIT_HIDE: - if (mTextEdit != null) { - mTextEdit.setVisibility(View.GONE); - - InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0); - } - break; - - default: - if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) { - Log.e(TAG, "error handling message, command is " + msg.arg1); - } - } - } - } - - // Handler for the messages - Handler commandHandler = new SDLCommandHandler(); - - // Send a message from the SDLMain thread - boolean sendCommand(int command, Object data) { - Message msg = commandHandler.obtainMessage(); - msg.arg1 = command; - msg.obj = data; - return commandHandler.sendMessage(msg); - } - - // C functions we call - public static native int nativeInit(); - 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 onNativeKeyDown(int keycode); - public static native void onNativeKeyUp(int keycode); - public static native void onNativeKeyboardFocusLost(); - public static native void onNativeTouch(int touchDevId, int pointerFingerId, - int action, float x, - float y, float p); - public static native void onNativeAccel(float x, float y, float z); - 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 native String nativeGetHint(String name); - - /** - * This method is called by SDL using JNI. - */ - public static void flipBuffers() { - SDLActivity.nativeFlipBuffers(); - } - - /** - * 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); - } - - /** - * This method is called by SDL using JNI. - */ - public static boolean sendMessage(int command, int param) { - return mSingleton.sendCommand(command, Integer.valueOf(param)); - } - - /** - * This method is called by SDL using JNI. - */ - public static Context getContext() { - return mSingleton; - } - - /** - * This method is called by SDL using JNI. - * @return result of getSystemService(name) but executed on UI thread. - */ - 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(); - } - } - } - return results[0]; - } - - static class ShowTextInputTask implements Runnable { - /* - * This is used to regulate the pan&scan method to have some offset from - * the bottom edge of the input region and the top edge of an input - * method (soft keyboard) - */ - static final int HEIGHT_PADDING = 15; - - public int x, y, w, h; - - public ShowTextInputTask(int x, int y, int w, int h) { - this.x = x; - this.y = y; - this.w = w; - this.h = h; - } - - @Override - public void run() { - AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams( - w, h + HEIGHT_PADDING, x, y); - - if (mTextEdit == null) { - mTextEdit = new DummyEdit(getContext()); - - mLayout.addView(mTextEdit, params); - } else { - mTextEdit.setLayoutParams(params); - } - - mTextEdit.setVisibility(View.VISIBLE); - mTextEdit.requestFocus(); - - InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(mTextEdit, 0); - } - } - - /** - * 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)); - } - - /** - * This method is called by SDL using JNI. - */ - public static Surface getNativeSurface() { - 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) { - int[] ids = InputDevice.getDeviceIds(); - int[] filtered = new int[ids.length]; - int used = 0; - for (int i = 0; i < ids.length; ++i) { - InputDevice device = InputDevice.getDevice(ids[i]); - if ((device != null) && ((device.getSources() & sources) != 0)) { - filtered[used++] = device.getId(); - } - } - 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); - } - - /** - * This method is called by SDL using JNI. - */ - public static void pollInputDevices() { - if (SDLActivity.mSDLThread != null) { - mJoystickHandler.pollInputDevices(); - } - } - - // APK extension files support - - /** com.android.vending.expansion.zipfile.ZipResourceFile object or null. */ - private Object expansionFile; - - /** com.android.vending.expansion.zipfile.ZipResourceFile's getInputStream() or null. */ - private Method expansionFileMethod; - - public InputStream openAPKExtensionInputStream(String fileName) throws IOException { - // Get a ZipResourceFile representing a merger of both the main and patch files - if (expansionFile == null) { - Integer mainVersion = Integer.parseInt(nativeGetHint("SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION")); - Integer patchVersion = Integer.parseInt(nativeGetHint("SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION")); - - try { - // To avoid direct dependency on Google APK extension 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, this, mainVersion, patchVersion); - - expansionFileMethod = expansionFile.getClass() - .getMethod("getInputStream", String.class); - } catch (Exception ex) { - ex.printStackTrace(); - expansionFile = null; - expansionFileMethod = null; - } - } - - // 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) { - ex.printStackTrace(); - fileStream = null; - } - - if (fileStream == null) { - throw new IOException(); - } - - return fileStream; - } -} - -/** - Simple nativeInit() runnable -*/ -class SDLMain implements Runnable { - @Override - public void run() { - // Runs SDL_main() - try { - java.lang.Process p = Runtime.getRuntime().exec("su"); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - SDLActivity.nativeInit(); - - //Log.v("SDL", "SDL thread terminated"); - } -} - - -/** - SDLSurface. This is what we draw on, so we need to know when it's created - in order to do anything useful. - - Because of this, that's where we set up the SDL thread -*/ -class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, - View.OnKeyListener, View.OnTouchListener, SensorEventListener { - - // Sensors - protected static SensorManager mSensorManager; - protected static Display mDisplay; - - // Keep track of the surface size to normalize touch events - protected static float mWidth, mHeight; - - // Startup - public SDLSurface(Context context) { - super(context); - getHolder().addCallback(this); - - setFocusable(true); - setFocusableInTouchMode(true); - requestFocus(); - setOnKeyListener(this); - setOnTouchListener(this); - - mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); - mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE); - - if(Build.VERSION.SDK_INT >= 12) { - setOnGenericMotionListener(new SDLGenericMotionListener_API12()); - } - - // Some arbitrary defaults to avoid a potential division by zero - mWidth = 1.0f; - mHeight = 1.0f; - } - - public void handleResume() { - setFocusable(true); - setFocusableInTouchMode(true); - requestFocus(); - setOnKeyListener(this); - setOnTouchListener(this); - enableSensor(Sensor.TYPE_ACCELEROMETER, true); - } - - public Surface getNativeSurface() { - return getHolder().getSurface(); - } - - // Called when we have a valid drawing surface - @Override - public void surfaceCreated(SurfaceHolder holder) { - Log.v("SDL", "surfaceCreated()"); - holder.setType(SurfaceHolder.SURFACE_TYPE_GPU); - } - - // Called when we lose the surface - @Override - public void surfaceDestroyed(SurfaceHolder holder) { - Log.v("SDL", "surfaceDestroyed()"); - // Call this *before* setting mIsSurfaceReady to 'false' - SDLActivity.handlePause(); - SDLActivity.mIsSurfaceReady = false; - SDLActivity.onNativeSurfaceDestroyed(); - } - - // Called when the surface is resized - @Override - public void surfaceChanged(SurfaceHolder holder, - int format, int width, int height) { - Log.v("SDL", "surfaceChanged()"); - - int sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565 by default - switch (format) { - case PixelFormat.A_8: - Log.v("SDL", "pixel format A_8"); - break; - case PixelFormat.LA_88: - Log.v("SDL", "pixel format LA_88"); - break; - case PixelFormat.L_8: - Log.v("SDL", "pixel format L_8"); - break; - case PixelFormat.RGBA_4444: - Log.v("SDL", "pixel format RGBA_4444"); - sdlFormat = 0x15421002; // SDL_PIXELFORMAT_RGBA4444 - break; - case PixelFormat.RGBA_5551: - Log.v("SDL", "pixel format RGBA_5551"); - sdlFormat = 0x15441002; // SDL_PIXELFORMAT_RGBA5551 - break; - case PixelFormat.RGBA_8888: - Log.v("SDL", "pixel format RGBA_8888"); - sdlFormat = 0x16462004; // SDL_PIXELFORMAT_RGBA8888 - break; - case PixelFormat.RGBX_8888: - Log.v("SDL", "pixel format RGBX_8888"); - sdlFormat = 0x16261804; // SDL_PIXELFORMAT_RGBX8888 - break; - case PixelFormat.RGB_332: - Log.v("SDL", "pixel format RGB_332"); - sdlFormat = 0x14110801; // SDL_PIXELFORMAT_RGB332 - break; - case PixelFormat.RGB_565: - Log.v("SDL", "pixel format RGB_565"); - sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565 - break; - case PixelFormat.RGB_888: - Log.v("SDL", "pixel format RGB_888"); - // Not sure this is right, maybe SDL_PIXELFORMAT_RGB24 instead? - sdlFormat = 0x16161804; // SDL_PIXELFORMAT_RGB888 - break; - default: - Log.v("SDL", "pixel format unknown " + format); - break; - } - - mWidth = width; - mHeight = height; - SDLActivity.onNativeResize(width, height, sdlFormat); - Log.v("SDL", "Window size:" + width + "x"+height); - - // Set mIsSurfaceReady to 'true' *before* making a call to handleResume - SDLActivity.mIsSurfaceReady = true; - SDLActivity.onNativeSurfaceChanged(); - - - if (SDLActivity.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 - - SDLActivity.mSDLThread = new Thread(new SDLMain(), "SDLThread"); - enableSensor(Sensor.TYPE_ACCELEROMETER, true); - SDLActivity.mSDLThread.start(); - - // Set up a listener thread to catch when the native thread ends - new Thread(new Runnable(){ - @Override - public void run(){ - try { - SDLActivity.mSDLThread.join(); - } - catch(Exception e){} - finally{ - // Native thread has finished - if (! SDLActivity.mExitCalledFromJava) { - SDLActivity.handleNativeExit(); - } - } - } - }).start(); - } - } - - // unused - @Override - public void onDraw(Canvas canvas) {} - - - // Key events - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - // Dispatch the different events depending on where they come from - // Some SOURCE_DPAD or SOURCE_GAMEPAD are also SOURCE_KEYBOARD - // So, we try to process them as DPAD or GAMEPAD events first, if that fails we try them as KEYBOARD - - if ( (event.getSource() & 0x00000401) != 0 || /* API 12: SOURCE_GAMEPAD */ - (event.getSource() & InputDevice.SOURCE_DPAD) != 0 ) { - if (event.getAction() == KeyEvent.ACTION_DOWN) { - if (SDLActivity.onNativePadDown(event.getDeviceId(), keyCode) == 0) { - return true; - } - } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (SDLActivity.onNativePadUp(event.getDeviceId(), keyCode) == 0) { - return true; - } - } - } - - if( (event.getSource() & InputDevice.SOURCE_KEYBOARD) != 0) { - if (event.getAction() == KeyEvent.ACTION_DOWN) { - //Log.v("SDL", "key down: " + keyCode); - SDLActivity.onNativeKeyDown(keyCode); - return true; - } - else if (event.getAction() == KeyEvent.ACTION_UP) { - //Log.v("SDL", "key up: " + keyCode); - SDLActivity.onNativeKeyUp(keyCode); - return true; - } - } - - return false; - } - - // Touch events - @Override - public boolean onTouch(View v, MotionEvent event) { - /* Ref: http://developer.android.com/training/gestures/multi.html */ - final int touchDevId = event.getDeviceId(); - final int pointerCount = event.getPointerCount(); - int action = event.getActionMasked(); - int pointerFingerId; - int i = -1; - float x,y,p; - - switch(action) { - case MotionEvent.ACTION_MOVE: - for (i = 0; i < pointerCount; i++) { - pointerFingerId = event.getPointerId(i); - x = event.getX(i) / mWidth; - y = event.getY(i) / mHeight; - p = event.getPressure(i); - SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); - } - break; - - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_DOWN: - // Primary pointer up/down, the index is always zero - i = 0; - case MotionEvent.ACTION_POINTER_UP: - case MotionEvent.ACTION_POINTER_DOWN: - // Non primary pointer up/down - if (i == -1) { - i = event.getActionIndex(); - } - - pointerFingerId = event.getPointerId(i); - x = event.getX(i) / mWidth; - y = event.getY(i) / mHeight; - p = event.getPressure(i); - SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); - break; - - case MotionEvent.ACTION_CANCEL: - for (i = 0; i < pointerCount; i++) { - pointerFingerId = event.getPointerId(i); - x = event.getX(i) / mWidth; - y = event.getY(i) / mHeight; - p = event.getPressure(i); - SDLActivity.onNativeTouch(touchDevId, pointerFingerId, MotionEvent.ACTION_UP, x, y, p); - } - break; - - default: - break; - } - - return true; - } - - // Sensor events - public void enableSensor(int sensortype, boolean enabled) { - // TODO: This uses getDefaultSensor - what if we have >1 accels? - if (!SDLActivity.mAccelerometerEnabled) { - return; - } - if (enabled) { - mSensorManager.registerListener(this, - mSensorManager.getDefaultSensor(sensortype), - SensorManager.SENSOR_DELAY_GAME, null); - } else { - mSensorManager.unregisterListener(this, - mSensorManager.getDefaultSensor(sensortype)); - } - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - // TODO - } - - @Override - public void onSensorChanged(SensorEvent event) { - if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { - float x, y; - switch (mDisplay.getRotation()) { - case Surface.ROTATION_90: - x = -event.values[1]; - y = event.values[0]; - break; - case Surface.ROTATION_270: - x = event.values[1]; - y = -event.values[0]; - break; - case Surface.ROTATION_180: - x = -event.values[1]; - y = -event.values[0]; - break; - default: - x = event.values[0]; - y = event.values[1]; - break; - } - SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH, - y / SensorManager.GRAVITY_EARTH, - event.values[2] / SensorManager.GRAVITY_EARTH - 1); - } - } -} - -/* This is a fake invisible editor view that receives the input and defines the - * pan&scan region - */ -class DummyEdit extends View implements View.OnKeyListener { - InputConnection ic; - - public DummyEdit(Context context) { - super(context); - setFocusableInTouchMode(true); - setFocusable(true); - setOnKeyListener(this); - } - - @Override - public boolean onCheckIsTextEditor() { - return true; - } - - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - - // This handles the hardware keyboard input - if (event.isPrintingKey()) { - if (event.getAction() == KeyEvent.ACTION_DOWN) { - ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1); - } - return true; - } - - if (event.getAction() == KeyEvent.ACTION_DOWN) { - SDLActivity.onNativeKeyDown(keyCode); - return true; - } else if (event.getAction() == KeyEvent.ACTION_UP) { - SDLActivity.onNativeKeyUp(keyCode); - return true; - } - - return false; - } - - // - @Override - public boolean onKeyPreIme (int keyCode, KeyEvent event) { - // As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event - // FIXME: Discussion at http://bugzilla.libsdl.org/show_bug.cgi?id=1639 - // FIXME: This is not a 100% effective solution to the problem of detecting if the keyboard is showing or not - // FIXME: A more effective solution would be to change our Layout from AbsoluteLayout to Relative or Linear - // FIXME: And determine the keyboard presence doing this: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android - // FIXME: An even more effective way would be if Android provided this out of the box, but where would the fun be in that :) - if (event.getAction()==KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { - if (SDLActivity.mTextEdit != null && SDLActivity.mTextEdit.getVisibility() == View.VISIBLE) { - SDLActivity.onNativeKeyboardFocusLost(); - } - } - return super.onKeyPreIme(keyCode, event); - } - - @Override - public InputConnection onCreateInputConnection(EditorInfo outAttrs) { - ic = new SDLInputConnection(this, true); - - outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI - | 33554432 /* API 11: EditorInfo.IME_FLAG_NO_FULLSCREEN */; - - return ic; - } -} - -class SDLInputConnection extends BaseInputConnection { - - public SDLInputConnection(View targetView, boolean fullEditor) { - super(targetView, fullEditor); - - } - - @Override - public boolean sendKeyEvent(KeyEvent event) { - - /* - * This handles the keycodes from soft keyboard (and IME-translated - * input from hardkeyboard) - */ - int keyCode = event.getKeyCode(); - if (event.getAction() == KeyEvent.ACTION_DOWN) { - if (event.isPrintingKey()) { - commitText(String.valueOf((char) event.getUnicodeChar()), 1); - } - SDLActivity.onNativeKeyDown(keyCode); - return true; - } else if (event.getAction() == KeyEvent.ACTION_UP) { - - SDLActivity.onNativeKeyUp(keyCode); - return true; - } - return super.sendKeyEvent(event); - } - - @Override - public boolean commitText(CharSequence text, int newCursorPosition) { - - nativeCommitText(text.toString(), newCursorPosition); - - return super.commitText(text, newCursorPosition); - } - - @Override - public boolean setComposingText(CharSequence text, int newCursorPosition) { - - nativeSetComposingText(text.toString(), newCursorPosition); - - return super.setComposingText(text, newCursorPosition); - } - - public native void nativeCommitText(String text, int newCursorPosition); - - public native void nativeSetComposingText(String text, int newCursorPosition); - - @Override - public boolean deleteSurroundingText(int beforeLength, int afterLength) { - // Workaround to capture backspace key. Ref: http://stackoverflow.com/questions/14560344/android-backspace-in-webview-baseinputconnection - if (beforeLength == 1 && afterLength == 0) { - // backspace - return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)) - && super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL)); - } - - return super.deleteSurroundingText(beforeLength, afterLength); - } -} - -/* A null joystick handler for API level < 12 devices (the accelerometer is handled separately) */ -class SDLJoystickHandler { - - /** - * Handles given MotionEvent. - * @param event the event to be handled. - * @return if given event was processed. - */ - public boolean handleMotionEvent(MotionEvent event) { - return false; - } - - /** - * Handles adding and removing of input devices. - */ - public void pollInputDevices() { - } -} - -/* Actual joystick functionality available for API >= 12 devices */ -class SDLJoystickHandler_API12 extends SDLJoystickHandler { - - static class SDLJoystick { - public int device_id; - public String name; - public ArrayList axes; - public ArrayList hats; - } - static class RangeComparator implements Comparator { - @Override - public int compare(InputDevice.MotionRange arg0, InputDevice.MotionRange arg1) { - return arg0.getAxis() - arg1.getAxis(); - } - } - - private ArrayList mJoysticks; - - public SDLJoystickHandler_API12() { - - mJoysticks = new ArrayList(); - } - - @Override - public void pollInputDevices() { - int[] deviceIds = InputDevice.getDeviceIds(); - // It helps processing the device ids in reverse order - // For example, in the case of the XBox 360 wireless dongle, - // so the first controller seen by SDL matches what the receiver - // considers to be the first controller - - for(int i=deviceIds.length-1; i>-1; i--) { - SDLJoystick joystick = getJoystick(deviceIds[i]); - if (joystick == null) { - joystick = new SDLJoystick(); - InputDevice joystickDevice = InputDevice.getDevice(deviceIds[i]); - if( (joystickDevice.getSources() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) { - joystick.device_id = deviceIds[i]; - joystick.name = joystickDevice.getName(); - joystick.axes = new ArrayList(); - joystick.hats = new ArrayList(); - - List ranges = joystickDevice.getMotionRanges(); - Collections.sort(ranges, new RangeComparator()); - for (InputDevice.MotionRange range : ranges ) { - if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0 ) { - if (range.getAxis() == MotionEvent.AXIS_HAT_X || - range.getAxis() == MotionEvent.AXIS_HAT_Y) { - joystick.hats.add(range); - } - else { - joystick.axes.add(range); - } - } - } - - mJoysticks.add(joystick); - SDLActivity.nativeAddJoystick(joystick.device_id, joystick.name, 0, -1, - joystick.axes.size(), joystick.hats.size()/2, 0); - } - } - } - - /* Check removed devices */ - ArrayList removedDevices = new ArrayList(); - for(int i=0; i < mJoysticks.size(); i++) { - int device_id = mJoysticks.get(i).device_id; - int j; - for (j=0; j < deviceIds.length; j++) { - if (device_id == deviceIds[j]) break; - } - if (j == deviceIds.length) { - removedDevices.add(Integer.valueOf(device_id)); - } - } - - for(int i=0; i < removedDevices.size(); i++) { - int device_id = removedDevices.get(i).intValue(); - SDLActivity.nativeRemoveJoystick(device_id); - for (int j=0; j < mJoysticks.size(); j++) { - if (mJoysticks.get(j).device_id == device_id) { - mJoysticks.remove(j); - break; - } - } - } - } - - protected SDLJoystick getJoystick(int device_id) { - for(int i=0; i < mJoysticks.size(); i++) { - if (mJoysticks.get(i).device_id == device_id) { - return mJoysticks.get(i); - } - } - return null; - } - - @Override - public boolean handleMotionEvent(MotionEvent event) { - if ( (event.getSource() & InputDevice.SOURCE_JOYSTICK) != 0) { - int actionPointerIndex = event.getActionIndex(); - int action = event.getActionMasked(); - switch(action) { - case MotionEvent.ACTION_MOVE: - SDLJoystick joystick = getJoystick(event.getDeviceId()); - if ( joystick != null ) { - for (int i = 0; i < joystick.axes.size(); i++) { - InputDevice.MotionRange range = joystick.axes.get(i); - /* Normalize the value to -1...1 */ - float value = ( event.getAxisValue( range.getAxis(), actionPointerIndex) - range.getMin() ) / range.getRange() * 2.0f - 1.0f; - SDLActivity.onNativeJoy(joystick.device_id, i, value ); - } - for (int i = 0; i < joystick.hats.size(); i+=2) { - int hatX = Math.round(event.getAxisValue( joystick.hats.get(i).getAxis(), actionPointerIndex ) ); - int hatY = Math.round(event.getAxisValue( joystick.hats.get(i+1).getAxis(), actionPointerIndex ) ); - SDLActivity.onNativeHat(joystick.device_id, i/2, hatX, hatY ); - } - } - break; - default: - break; - } - } - return true; - } -} - -class SDLGenericMotionListener_API12 implements View.OnGenericMotionListener { - // Generic Motion (mouse hover, joystick...) events go here - // We only have joysticks yet - @Override - public boolean onGenericMotion(View v, MotionEvent event) { - return SDLActivity.handleJoystickMotionEvent(event); - } -} diff --git a/extern/sdl4ogre/sdlwindowhelper.cpp b/extern/sdl4ogre/sdlwindowhelper.cpp index 224321914..7592afbec 100644 --- a/extern/sdl4ogre/sdlwindowhelper.cpp +++ b/extern/sdl4ogre/sdlwindowhelper.cpp @@ -45,14 +45,14 @@ SDLWindowHelper::SDLWindowHelper (SDL_Window* window, int w, int h, winHandle = Ogre::StringConverter::toString(WindowContentViewHandle(wmInfo)); break; -#elif BUILD_ANDROID +#elif ANDROID case SDL_SYSWM_ANDROID: winHandle = Ogre::StringConverter::toString((unsigned long)wmInfo.info.android.window); winHandleSurface = Ogre::StringConverter::toString((unsigned long)wmInfo.info.android.surface); - // flag1=true; + break; - #elif NOT_ANDROID + #else case SDL_SYSWM_X11: winHandle = Ogre::StringConverter::toString((unsigned long)wmInfo.info.x11.window); @@ -70,12 +70,10 @@ SDLWindowHelper::SDLWindowHelper (SDL_Window* window, int w, int h, /// \todo externalWindowHandle is deprecated according to the source code. Figure out a way to get parentWindowHandle /// to work properly. On Linux/X11 it causes an occasional GLXBadDrawable error. -#ifdef BUILD_ANDROID -params.insert(std::make_pair("externalWindowHandle", winHandle)); +#ifdef ANDROID params.insert(std::make_pair("externalSurface", winHandleSurface)); -#else -params.insert(std::make_pair("externalWindowHandle", winHandle)); #endif +params.insert(std::make_pair("externalWindowHandle", winHandle)); mWindow = Ogre::Root::getSingleton().createRenderWindow(title, w, h, fullscreen, ¶ms); }