Skip to content

Commit

Permalink
Fix controller mapper not recognizing certain buttons
Browse files Browse the repository at this point in the history
closes #540
  • Loading branch information
streetpea committed Feb 2, 2025
1 parent b54fe66 commit c758c0b
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 318 deletions.
2 changes: 1 addition & 1 deletion gui/include/qmlbackend.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ class QmlBackend : public QObject
void currentControllerTypeChanged();
void controllerMappingInProgressChanged();
void controllerMappingDefaultMappingChanged();
void controllerMappingButtonSelected(QStringList original_button_map, int chiaki_button_value, QString chiaki_button_name);
void controllerMappingButtonSelected(QString button);
void controllerMappingAlteredChanged();
void controllerMappingSteamControllerSelected();
void enableAnalogStickMappingChanged();
Expand Down
178 changes: 41 additions & 137 deletions gui/src/controllermanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,10 @@ void ControllerManager::HandleEvents()
case SDL_JOYDEVICEREMOVED:
UpdateAvailableControllers();
break;
case SDL_JOYAXISMOTION:
case SDL_JOYBUTTONDOWN:
case SDL_JOYBUTTONUP:
case SDL_JOYHATMOTION:
case SDL_CONTROLLERBUTTONUP:
case SDL_CONTROLLERBUTTONDOWN:
case SDL_CONTROLLERAXISMOTION:
Expand All @@ -254,7 +258,6 @@ void ControllerManager::ControllerEvent(SDL_Event event)
switch(event.type)
{
case SDL_CONTROLLERBUTTONDOWN:
start_updating_mapping = true;
device_id = event.cbutton.which;
break;
case SDL_CONTROLLERBUTTONUP:
Expand All @@ -268,14 +271,27 @@ void ControllerManager::ControllerEvent(SDL_Event event)
device_id = event.csensor.which;
break;
case SDL_CONTROLLERTOUCHPADDOWN:
start_updating_mapping = true;
device_id = event.ctouchpad.which;
break;
case SDL_CONTROLLERTOUCHPADMOTION:
case SDL_CONTROLLERTOUCHPADUP:
device_id = event.ctouchpad.which;
break;
#endif
case SDL_JOYAXISMOTION:
device_id = event.jaxis.which;
break;
case SDL_JOYBUTTONDOWN:
start_updating_mapping = true;
device_id = event.jbutton.which;
break;
case SDL_JOYBUTTONUP:
device_id = event.jbutton.which;
break;
case SDL_JOYHATMOTION:
start_updating_mapping = true;
device_id = event.jhat.which;
break;
default:
return;
}
Expand Down Expand Up @@ -399,6 +415,29 @@ void Controller::UpdateState(SDL_Event event)
{
switch(event.type)
{
case SDL_JOYAXISMOTION:
if(updating_mapping_button && enable_analog_stick_mapping)
{
emit NewButtonMapping(QString("a%1").arg(QString::number(event.jaxis.axis)));
updating_mapping_button = false;
}
return;
case SDL_JOYBUTTONDOWN:
if(updating_mapping_button)
{
emit NewButtonMapping(QString("b%1").arg(QString::number(event.jbutton.button)));
updating_mapping_button = false;
}
return;
case SDL_JOYBUTTONUP:
return;
case SDL_JOYHATMOTION:
if(updating_mapping_button)
{
emit NewButtonMapping(QString("h%1.%2").arg(QString::number(event.jhat.hat)).arg(QString::number(event.jhat.value)));
updating_mapping_button = false;
}
return;
case SDL_CONTROLLERBUTTONDOWN:
case SDL_CONTROLLERBUTTONUP:
if(!HandleButtonEvent(event.cbutton))
Expand Down Expand Up @@ -432,168 +471,63 @@ inline bool Controller::HandleButtonEvent(SDL_ControllerButtonEvent event) {
switch(event.button)
{
case SDL_CONTROLLER_BUTTON_A:
if(updating_mapping_button)
{
emit NewButtonMapping("a");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_CROSS;
break;
case SDL_CONTROLLER_BUTTON_B:
if(updating_mapping_button)
{
emit NewButtonMapping("b");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_MOON;
break;
case SDL_CONTROLLER_BUTTON_X:
if(updating_mapping_button)
{
emit NewButtonMapping("x");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_BOX;
break;
case SDL_CONTROLLER_BUTTON_Y:
if(updating_mapping_button)
{
emit NewButtonMapping("y");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_PYRAMID;
break;
case SDL_CONTROLLER_BUTTON_DPAD_LEFT:
if(updating_mapping_button)
{
emit NewButtonMapping("dpleft");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_DPAD_LEFT;
break;
case SDL_CONTROLLER_BUTTON_DPAD_RIGHT:
if(updating_mapping_button)
{
emit NewButtonMapping("dpright");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_DPAD_RIGHT;
break;
case SDL_CONTROLLER_BUTTON_DPAD_UP:
if(updating_mapping_button)
{
emit NewButtonMapping("dpup");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_DPAD_UP;
break;
case SDL_CONTROLLER_BUTTON_DPAD_DOWN:
if(updating_mapping_button)
{
emit NewButtonMapping("dpdown");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_DPAD_DOWN;
break;
case SDL_CONTROLLER_BUTTON_LEFTSHOULDER:
if(updating_mapping_button)
{
emit NewButtonMapping("leftshoulder");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_L1;
break;
case SDL_CONTROLLER_BUTTON_RIGHTSHOULDER:
if(updating_mapping_button)
{
emit NewButtonMapping("rightshoulder");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_R1;
break;
case SDL_CONTROLLER_BUTTON_LEFTSTICK:
if(updating_mapping_button)
{
emit NewButtonMapping("leftstick");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_L3;
break;
case SDL_CONTROLLER_BUTTON_RIGHTSTICK:
if(updating_mapping_button)
{
emit NewButtonMapping("rightstick");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_R3;
break;
case SDL_CONTROLLER_BUTTON_START:
if(updating_mapping_button)
{
emit NewButtonMapping("start");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_OPTIONS;
break;
case SDL_CONTROLLER_BUTTON_BACK:
if(updating_mapping_button)
{
emit NewButtonMapping("back");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_SHARE;
break;
case SDL_CONTROLLER_BUTTON_GUIDE:
if(updating_mapping_button)
{
emit NewButtonMapping("guide");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_PS;
break;
case SDL_CONTROLLER_BUTTON_MISC1:
if(updating_mapping_button)
{
emit NewButtonMapping("misc1");
updating_mapping_button = false;
}
micbutton_push = true;
break;
case SDL_CONTROLLER_BUTTON_PADDLE1:
if(updating_mapping_button)
{
emit NewButtonMapping("paddle1");
updating_mapping_button = false;
}
return false;
case SDL_CONTROLLER_BUTTON_PADDLE2:
if(updating_mapping_button)
{
emit NewButtonMapping("paddle2");
updating_mapping_button = false;
}
return false;
case SDL_CONTROLLER_BUTTON_PADDLE3:
if(updating_mapping_button)
{
emit NewButtonMapping("paddle3");
updating_mapping_button = false;
}
return false;
case SDL_CONTROLLER_BUTTON_PADDLE4:
if(updating_mapping_button)
{
emit NewButtonMapping("paddle4");
updating_mapping_button = false;
}
return false;
#if SDL_VERSION_ATLEAST(2, 0, 14)
case SDL_CONTROLLER_BUTTON_TOUCHPAD:
if(updating_mapping_button)
{
emit NewButtonMapping("touchpad");
updating_mapping_button = false;
}
ps_btn = CHIAKI_CONTROLLER_BUTTON_TOUCHPAD;
break;
#endif
Expand Down Expand Up @@ -623,51 +557,21 @@ inline bool Controller::HandleAxisEvent(SDL_ControllerAxisEvent event) {
switch(event.axis)
{
case SDL_CONTROLLER_AXIS_TRIGGERLEFT:
if(updating_mapping_button)
{
emit NewButtonMapping("lefttrigger");
updating_mapping_button = false;
}
state.l2_state = (uint8_t)(event.value >> 7);
break;
case SDL_CONTROLLER_AXIS_TRIGGERRIGHT:
if(updating_mapping_button)
{
emit NewButtonMapping("righttrigger");
updating_mapping_button = false;
}
state.r2_state = (uint8_t)(event.value >> 7);
break;
case SDL_CONTROLLER_AXIS_LEFTX:
if(updating_mapping_button && enable_analog_stick_mapping)
{
emit NewButtonMapping("leftx");
updating_mapping_button = false;
}
state.left_x = event.value;
break;
case SDL_CONTROLLER_AXIS_LEFTY:
if(updating_mapping_button && enable_analog_stick_mapping)
{
emit NewButtonMapping("lefty");
updating_mapping_button = false;
}
state.left_y = event.value;
break;
case SDL_CONTROLLER_AXIS_RIGHTX:
if(updating_mapping_button && enable_analog_stick_mapping)
{
emit NewButtonMapping("rightx");
updating_mapping_button = false;
}
state.right_x = event.value;
break;
case SDL_CONTROLLER_AXIS_RIGHTY:
if(updating_mapping_button && enable_analog_stick_mapping)
{
emit NewButtonMapping("righty");
updating_mapping_button = false;
}
state.right_y = event.value;
break;
default:
Expand Down
Loading

0 comments on commit c758c0b

Please sign in to comment.