Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Added the hint SDL_HINT_GAMECONTROLLERCONFIG_FILE to specify a file t…
…o load at initialization containing SDL game controller mappings
- Loading branch information
Showing
with
18 additions
and
6 deletions.
-
+10
−0
include/SDL_hints.h
-
+8
−6
src/joystick/SDL_gamecontroller.c
|
@@ -436,6 +436,16 @@ extern "C" { |
|
|
*/ |
|
|
#define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" |
|
|
|
|
|
/** |
|
|
* \brief A variable that lets you provide a file with extra gamecontroller db entries. |
|
|
* |
|
|
* The file should contain lines of gamecontroller config data, see SDL_gamecontroller.h |
|
|
* |
|
|
* This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) |
|
|
* You can update mappings after the system is initialized with SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() |
|
|
*/ |
|
|
#define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE" |
|
|
|
|
|
/** |
|
|
* \brief A variable containing a list of devices to skip when scanning for game controllers. |
|
|
* |
|
|
|
@@ -1308,15 +1308,17 @@ SDL_GameControllerLoadHints() |
|
|
|
|
|
/* |
|
|
* Fill the given buffer with the expected controller mapping filepath. |
|
|
* Usually this will just be CONTROLLER_MAPPING_FILE, but for Android, |
|
|
* we want to get the internal storage path. |
|
|
* Usually this will just be SDL_HINT_GAMECONTROLLERCONFIG_FILE, but for |
|
|
* Android, we want to get the internal storage path. |
|
|
*/ |
|
|
static SDL_bool SDL_GetControllerMappingFilePath(char *path, size_t size) |
|
|
{ |
|
|
#ifdef CONTROLLER_MAPPING_FILE |
|
|
#define STRING(X) SDL_STRINGIFY_ARG(X) |
|
|
return SDL_strlcpy(path, STRING(CONTROLLER_MAPPING_FILE), size) < size; |
|
|
#elif defined(__ANDROID__) |
|
|
const char *hint = SDL_GetHint(SDL_HINT_GAMECONTROLLERCONFIG_FILE); |
|
|
if (hint && *hint) { |
|
|
return SDL_strlcpy(path, hint, size) < size; |
|
|
} |
|
|
|
|
|
#if defined(__ANDROID__) |
|
|
return SDL_snprintf(path, size, "%s/controller_map.txt", SDL_AndroidGetInternalStoragePath()) < size; |
|
|
#else |
|
|
return SDL_FALSE; |
|
|