diff --git a/include/SDL_gamecontroller.h b/include/SDL_gamecontroller.h index 9ca41bd1e..324b113a1 100644 --- a/include/SDL_gamecontroller.h +++ b/include/SDL_gamecontroller.h @@ -936,7 +936,11 @@ extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecon * * \param gamecontroller the controller to query * \param button a button on the game controller + * \returns the sfSymbolsName or NULL if the name can't be found * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForAxis */ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); @@ -945,12 +949,15 @@ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForBu * * \param gamecontroller the controller to query * \param button an axis on the game controller + * \returns the sfSymbolsName or NULL if the name can't be found * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForButton */ extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); - /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h index 24975f756..657bfee26 100644 --- a/src/dynapi/SDL_dynapi_overrides.h +++ b/src/dynapi/SDL_dynapi_overrides.h @@ -825,3 +825,5 @@ #define SDL_GetWindowICCProfile SDL_GetWindowICCProfile_REAL #define SDL_GetTicks64 SDL_GetTicks64_REAL #define SDL_LinuxSetThreadPriorityAndPolicy SDL_LinuxSetThreadPriorityAndPolicy_REAL +#define SDL_GameControllerGetAppleSFSymbolsNameForButton SDL_GameControllerGetAppleSFSymbolsNameForButton_REAL +#define SDL_GameControllerGetAppleSFSymbolsNameForAxis SDL_GameControllerGetAppleSFSymbolsNameForAxis_REAL diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index c7f7f4837..0ac166994 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -894,3 +894,5 @@ SDL_DYNAPI_PROC(Uint64,SDL_GetTicks64,(void),(),return) #ifdef __LINUX__ SDL_DYNAPI_PROC(int,SDL_LinuxSetThreadPriorityAndPolicy,(Sint64 a, int b, int c),(a,b,c),return) #endif +SDL_DYNAPI_PROC(const char*,SDL_GameControllerGetAppleSFSymbolsNameForButton,(SDL_GameController *a, SDL_GameControllerButton b),(a,b),return) +SDL_DYNAPI_PROC(const char*,SDL_GameControllerGetAppleSFSymbolsNameForAxis,(SDL_GameController *a, SDL_GameControllerAxis b),(a,b),return) diff --git a/src/joystick/iphoneos/SDL_mfijoystick.m b/src/joystick/iphoneos/SDL_mfijoystick.m index 0bfa69209..e657829d6 100644 --- a/src/joystick/iphoneos/SDL_mfijoystick.m +++ b/src/joystick/iphoneos/SDL_mfijoystick.m @@ -652,7 +652,7 @@ IOS_JoystickSetDevicePlayerIndex(int device_index, int player_index) } static SDL_JoystickGUID -IOS_JoystickGetDeviceGUID( int device_index ) +IOS_JoystickGetDeviceGUID(int device_index) { SDL_JoystickDeviceItem *device = GetDeviceForIndex(device_index); SDL_JoystickGUID guid; @@ -1576,8 +1576,7 @@ GetDirectionalPadForController(GCController *controller) return nil; } -#endif - +#endif /* SDL_JOYSTICK_MFI && ENABLE_PHYSICAL_INPUT_PROFILE */ static char elementName[256]; @@ -1585,153 +1584,106 @@ const char * SDL_GameControllerGetAppleSFSymbolsNameForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button) { elementName[0] = '\0'; - if (!gamecontroller) { - return elementName; - } - if (SDL_GameControllerGetJoystick(gamecontroller)->driver != &SDL_IOS_JoystickDriver) { - return elementName; - } #if defined(SDL_JOYSTICK_MFI) && defined(ENABLE_PHYSICAL_INPUT_PROFILE) - if (@available(iOS 14.0, tvOS 14.0, macOS 11.0, *)) { - GCController *controller = SDL_GameControllerGetJoystick(gamecontroller)->hwdata->controller; - if ([controller respondsToSelector:@selector(physicalInputProfile)]) { - NSDictionary *elements = controller.physicalInputProfile.elements; - switch (button) - { - case SDL_CONTROLLER_BUTTON_INVALID: { - break; - } - - case SDL_CONTROLLER_BUTTON_A: { + if (gamecontroller && SDL_GameControllerGetJoystick(gamecontroller)->driver == &SDL_IOS_JoystickDriver) { + if (@available(iOS 14.0, tvOS 14.0, macOS 11.0, *)) { + GCController *controller = SDL_GameControllerGetJoystick(gamecontroller)->hwdata->controller; + if ([controller respondsToSelector:@selector(physicalInputProfile)]) { + NSDictionary *elements = controller.physicalInputProfile.elements; + switch (button) + { + case SDL_CONTROLLER_BUTTON_A: GetAppleSFSymbolsNameForElement(elements[GCInputButtonA], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_B: { + case SDL_CONTROLLER_BUTTON_B: GetAppleSFSymbolsNameForElement(elements[GCInputButtonB], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_X: { + case SDL_CONTROLLER_BUTTON_X: GetAppleSFSymbolsNameForElement(elements[GCInputButtonX], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_Y: { + case SDL_CONTROLLER_BUTTON_Y: GetAppleSFSymbolsNameForElement(elements[GCInputButtonY], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_BACK: { + case SDL_CONTROLLER_BUTTON_BACK: GetAppleSFSymbolsNameForElement(elements[GCInputButtonOptions], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_GUIDE: { + case SDL_CONTROLLER_BUTTON_GUIDE: GetAppleSFSymbolsNameForElement(elements[GCInputButtonHome], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_START: { + case SDL_CONTROLLER_BUTTON_START: GetAppleSFSymbolsNameForElement(elements[GCInputButtonMenu], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_LEFTSTICK: { + case SDL_CONTROLLER_BUTTON_LEFTSTICK: GetAppleSFSymbolsNameForElement(elements[GCInputLeftThumbstickButton], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_RIGHTSTICK: { + case SDL_CONTROLLER_BUTTON_RIGHTSTICK: GetAppleSFSymbolsNameForElement(elements[GCInputRightThumbstickButton], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_LEFTSHOULDER: { + case SDL_CONTROLLER_BUTTON_LEFTSHOULDER: GetAppleSFSymbolsNameForElement(elements[GCInputLeftShoulder], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: { + case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: GetAppleSFSymbolsNameForElement(elements[GCInputRightShoulder], elementName); break; - } - case SDL_CONTROLLER_BUTTON_DPAD_UP: { GCControllerDirectionPad * dpad = GetDirectionalPadForController(controller); if (dpad) { GetAppleSFSymbolsNameForElement(dpad.up, elementName); if (SDL_strlen(elementName) == 0) { - SDL_strlcpy( elementName, "dpad.up.fill", 255 ); + SDL_strlcpy(elementName, "dpad.up.fill", sizeof(elementName)); } } break; } - case SDL_CONTROLLER_BUTTON_DPAD_DOWN: { GCControllerDirectionPad * dpad = GetDirectionalPadForController(controller); if (dpad) { GetAppleSFSymbolsNameForElement(dpad.down, elementName); if (SDL_strlen(elementName) == 0) { - SDL_strlcpy( elementName, "dpad.down.fill", 255 ); + SDL_strlcpy(elementName, "dpad.down.fill", sizeof(elementName)); } } break; } - case SDL_CONTROLLER_BUTTON_DPAD_LEFT: { GCControllerDirectionPad * dpad = GetDirectionalPadForController(controller); if (dpad) { GetAppleSFSymbolsNameForElement(dpad.left, elementName); if (SDL_strlen(elementName) == 0) { - SDL_strlcpy( elementName, "dpad.left.fill", 255 ); + SDL_strlcpy(elementName, "dpad.left.fill", sizeof(elementName)); } } break; } - case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: { GCControllerDirectionPad * dpad = GetDirectionalPadForController(controller); if (dpad) { GetAppleSFSymbolsNameForElement(dpad.right, elementName); if (SDL_strlen(elementName) == 0) { - SDL_strlcpy( elementName, "dpad.right.fill", 255 ); + SDL_strlcpy(elementName, "dpad.right.fill", sizeof(elementName)); } } break; } - - case SDL_CONTROLLER_BUTTON_MISC1: { + case SDL_CONTROLLER_BUTTON_MISC1: GetAppleSFSymbolsNameForElement(elements[GCInputDualShockTouchpadButton], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_PADDLE1: { + case SDL_CONTROLLER_BUTTON_PADDLE1: GetAppleSFSymbolsNameForElement(elements[GCInputXboxPaddleOne], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_PADDLE2: { + case SDL_CONTROLLER_BUTTON_PADDLE2: GetAppleSFSymbolsNameForElement(elements[GCInputXboxPaddleTwo], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_PADDLE3: { + case SDL_CONTROLLER_BUTTON_PADDLE3: GetAppleSFSymbolsNameForElement(elements[GCInputXboxPaddleThree], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_PADDLE4: { + case SDL_CONTROLLER_BUTTON_PADDLE4: GetAppleSFSymbolsNameForElement(elements[GCInputXboxPaddleFour], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_TOUCHPAD: { + case SDL_CONTROLLER_BUTTON_TOUCHPAD: GetAppleSFSymbolsNameForElement(elements[GCInputDualShockTouchpadButton], elementName); break; - } - - case SDL_CONTROLLER_BUTTON_MAX: { + default: break; } } @@ -1746,61 +1698,40 @@ const char * SDL_GameControllerGetAppleSFSymbolsNameForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis) { elementName[0] = '\0'; - if (!gamecontroller) { - return elementName; - } - if (SDL_GameControllerGetJoystick(gamecontroller)->driver != &SDL_IOS_JoystickDriver) { - return elementName; - } #if defined(SDL_JOYSTICK_MFI) && defined(ENABLE_PHYSICAL_INPUT_PROFILE) - if (@available(iOS 14.0, tvOS 14.0, macOS 11.0, *)) { - GCController *controller = SDL_GameControllerGetJoystick(gamecontroller)->hwdata->controller; - if ([controller respondsToSelector:@selector(physicalInputProfile)]) { - NSDictionary *elements = controller.physicalInputProfile.elements; - switch (axis) - { - - case SDL_CONTROLLER_AXIS_INVALID: - break; - - case SDL_CONTROLLER_AXIS_LEFTX:{ + if (gamecontroller && SDL_GameControllerGetJoystick(gamecontroller)->driver == &SDL_IOS_JoystickDriver) { + if (@available(iOS 14.0, tvOS 14.0, macOS 11.0, *)) { + GCController *controller = SDL_GameControllerGetJoystick(gamecontroller)->hwdata->controller; + if ([controller respondsToSelector:@selector(physicalInputProfile)]) { + NSDictionary *elements = controller.physicalInputProfile.elements; + switch (axis) + { + case SDL_CONTROLLER_AXIS_LEFTX: GetAppleSFSymbolsNameForElement(elements[GCInputLeftThumbstick], elementName); break; - } - - case SDL_CONTROLLER_AXIS_LEFTY: { + case SDL_CONTROLLER_AXIS_LEFTY: GetAppleSFSymbolsNameForElement(elements[GCInputLeftThumbstick], elementName); break; - } - - case SDL_CONTROLLER_AXIS_RIGHTX: { + case SDL_CONTROLLER_AXIS_RIGHTX: GetAppleSFSymbolsNameForElement(elements[GCInputRightThumbstick], elementName); break; - } - - case SDL_CONTROLLER_AXIS_RIGHTY: { + case SDL_CONTROLLER_AXIS_RIGHTY: GetAppleSFSymbolsNameForElement(elements[GCInputRightThumbstick], elementName); break; - } - - case SDL_CONTROLLER_AXIS_TRIGGERLEFT: { + case SDL_CONTROLLER_AXIS_TRIGGERLEFT: GetAppleSFSymbolsNameForElement(elements[GCInputLeftTrigger], elementName); break; - } - - case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: { + case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: GetAppleSFSymbolsNameForElement(elements[GCInputRightTrigger], elementName); break; - } - - case SDL_CONTROLLER_AXIS_MAX: { + default: break; } } } } #endif - return elementName; + return *elementName ? elementName : NULL; }