Merge 79dc510366
into e099cfdc5a
This commit is contained in:
commit
c32ce66ebf
|
@ -103,6 +103,7 @@ DefaultList<bool> DefaultBools =
|
||||||
{"Emu.DirectBoot", true},
|
{"Emu.DirectBoot", true},
|
||||||
{"Instance*.DS.Battery.LevelOkay", true},
|
{"Instance*.DS.Battery.LevelOkay", true},
|
||||||
{"Instance*.DSi.Battery.Charging", true},
|
{"Instance*.DSi.Battery.Charging", true},
|
||||||
|
{"Instance*.Joystick.AutoMap", true},
|
||||||
#ifdef JIT_ENABLED
|
#ifdef JIT_ENABLED
|
||||||
{"JIT.BranchOptimisations", true},
|
{"JIT.BranchOptimisations", true},
|
||||||
{"JIT.LiteralOptimisations", true},
|
{"JIT.LiteralOptimisations", true},
|
||||||
|
|
|
@ -155,6 +155,7 @@ public:
|
||||||
void setJoystick(int id);
|
void setJoystick(int id);
|
||||||
int getJoystickID() { return joystickID; }
|
int getJoystickID() { return joystickID; }
|
||||||
SDL_Joystick* getJoystick() { return joystick; }
|
SDL_Joystick* getJoystick() { return joystick; }
|
||||||
|
bool autoJoystickMapping;
|
||||||
|
|
||||||
void touchScreen(int x, int y);
|
void touchScreen(int x, int y);
|
||||||
void releaseScreen();
|
void releaseScreen();
|
||||||
|
|
|
@ -43,6 +43,24 @@ const char* EmuInstance::buttonNames[12] =
|
||||||
"Y"
|
"Y"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SDL_GameControllerButton sdlButtons[12] =
|
||||||
|
{
|
||||||
|
// SDL uses A/B for south/east, X/Y for west/north, opposite of the DS
|
||||||
|
// so we swap the buttons so they map to where they are on the DS positionally
|
||||||
|
SDL_CONTROLLER_BUTTON_B,
|
||||||
|
SDL_CONTROLLER_BUTTON_A,
|
||||||
|
SDL_CONTROLLER_BUTTON_BACK,
|
||||||
|
SDL_CONTROLLER_BUTTON_START,
|
||||||
|
SDL_CONTROLLER_BUTTON_DPAD_RIGHT,
|
||||||
|
SDL_CONTROLLER_BUTTON_DPAD_LEFT,
|
||||||
|
SDL_CONTROLLER_BUTTON_DPAD_UP,
|
||||||
|
SDL_CONTROLLER_BUTTON_DPAD_DOWN,
|
||||||
|
SDL_CONTROLLER_BUTTON_RIGHTSHOULDER,
|
||||||
|
SDL_CONTROLLER_BUTTON_LEFTSHOULDER,
|
||||||
|
SDL_CONTROLLER_BUTTON_Y,
|
||||||
|
SDL_CONTROLLER_BUTTON_X
|
||||||
|
};
|
||||||
|
|
||||||
const char* EmuInstance::hotkeyNames[HK_MAX] =
|
const char* EmuInstance::hotkeyNames[HK_MAX] =
|
||||||
{
|
{
|
||||||
"HK_Lid",
|
"HK_Lid",
|
||||||
|
@ -116,6 +134,8 @@ void EmuInstance::inputLoadConfig()
|
||||||
hkJoyMapping[i] = joycfg.GetInt(hotkeyNames[i]);
|
hkJoyMapping[i] = joycfg.GetInt(hotkeyNames[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
autoJoystickMapping = joycfg.GetBool("AutoMap");
|
||||||
|
|
||||||
setJoystick(localCfg.GetInt("JoystickID"));
|
setJoystick(localCfg.GetInt("JoystickID"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,7 +417,14 @@ void EmuInstance::inputProcess()
|
||||||
}
|
}
|
||||||
|
|
||||||
joyInputMask = 0xFFF;
|
joyInputMask = 0xFFF;
|
||||||
if (joystick)
|
|
||||||
|
if (autoJoystickMapping && controller != nullptr)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 12; i++)
|
||||||
|
if (SDL_GameControllerGetButton(controller, sdlButtons[i]))
|
||||||
|
joyInputMask &= ~(1 << i);
|
||||||
|
}
|
||||||
|
else if (joystick)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 12; i++)
|
for (int i = 0; i < 12; i++)
|
||||||
if (joystickButtonDown(joyMapping[i]))
|
if (joystickButtonDown(joyMapping[i]))
|
||||||
|
|
|
@ -94,6 +94,8 @@ InputConfigDialog::InputConfigDialog(QWidget* parent) : QDialog(parent), ui(new
|
||||||
ui->cbxJoystick->setEnabled(false);
|
ui->cbxJoystick->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ui->cbAutoMap->setChecked(joycfg.GetBool("AutoMap"));
|
||||||
|
|
||||||
setupKeypadPage();
|
setupKeypadPage();
|
||||||
|
|
||||||
int inst = emuInstance->getInstanceID();
|
int inst = emuInstance->getInstanceID();
|
||||||
|
@ -124,7 +126,7 @@ void InputConfigDialog::setupKeypadPage()
|
||||||
delete pushButtonKey;
|
delete pushButtonKey;
|
||||||
delete pushButtonJoy;
|
delete pushButtonJoy;
|
||||||
|
|
||||||
if (ui->cbxJoystick->isEnabled())
|
if (ui->cbxJoystick->isEnabled() && !ui->cbAutoMap->isChecked())
|
||||||
{
|
{
|
||||||
ui->stackMapping->setCurrentIndex(1);
|
ui->stackMapping->setCurrentIndex(1);
|
||||||
}
|
}
|
||||||
|
@ -214,6 +216,7 @@ void InputConfigDialog::on_InputConfigDialog_accepted()
|
||||||
}
|
}
|
||||||
|
|
||||||
instcfg.SetInt("JoystickID", joystickID);
|
instcfg.SetInt("JoystickID", joystickID);
|
||||||
|
joycfg.SetBool("AutoMap", ui->cbAutoMap->isChecked());
|
||||||
Config::Save();
|
Config::Save();
|
||||||
|
|
||||||
emuInstance->inputLoadConfig();
|
emuInstance->inputLoadConfig();
|
||||||
|
@ -246,6 +249,25 @@ void InputConfigDialog::on_cbxJoystick_currentIndexChanged(int id)
|
||||||
|
|
||||||
joystickID = id;
|
joystickID = id;
|
||||||
emuInstance->setJoystick(id);
|
emuInstance->setJoystick(id);
|
||||||
|
setJoyMappingEnabled(ui->cbAutoMap->isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
void InputConfigDialog::on_cbAutoMap_checkStateChanged(Qt::CheckState state)
|
||||||
|
{
|
||||||
|
setJoyMappingEnabled(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InputConfigDialog::setJoyMappingEnabled(bool enable)
|
||||||
|
{
|
||||||
|
if (enable && SDL_IsGameController(emuInstance->getJoystickID()))
|
||||||
|
{
|
||||||
|
ui->stackMapping->setCurrentIndex(0);
|
||||||
|
ui->btnJoyMapSwitch->setEnabled(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->btnJoyMapSwitch->setEnabled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_Joystick* InputConfigDialog::getJoystick()
|
SDL_Joystick* InputConfigDialog::getJoystick()
|
||||||
|
|
|
@ -131,6 +131,7 @@ private slots:
|
||||||
void on_btnKeyMapSwitch_clicked();
|
void on_btnKeyMapSwitch_clicked();
|
||||||
void on_btnJoyMapSwitch_clicked();
|
void on_btnJoyMapSwitch_clicked();
|
||||||
void on_cbxJoystick_currentIndexChanged(int id);
|
void on_cbxJoystick_currentIndexChanged(int id);
|
||||||
|
void on_cbAutoMap_checkStateChanged(Qt::CheckState state);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void populatePage(QWidget* page,
|
void populatePage(QWidget* page,
|
||||||
|
@ -138,6 +139,8 @@ private:
|
||||||
int* keymap, int* joymap);
|
int* keymap, int* joymap);
|
||||||
void setupKeypadPage();
|
void setupKeypadPage();
|
||||||
|
|
||||||
|
void setJoyMappingEnabled(bool enabled);
|
||||||
|
|
||||||
Ui::InputConfigDialog* ui;
|
Ui::InputConfigDialog* ui;
|
||||||
|
|
||||||
EmuInstance* emuInstance;
|
EmuInstance* emuInstance;
|
||||||
|
|
|
@ -2280,7 +2280,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="0" colspan="2">
|
<item row="7" column="0" colspan="2">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QGridLayout" name="gridLayout_5">
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
|
@ -2293,7 +2293,20 @@
|
||||||
<property name="bottomMargin">
|
<property name="bottomMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item row="0" column="2">
|
||||||
|
<widget class="QComboBox" name="cbxJoystick">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="whatsThis">
|
||||||
|
<string><html><head/><body><p>Selects which joystick will be used for joystick input, if any is present.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
|
@ -2306,16 +2319,13 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="1" column="2">
|
||||||
<widget class="QComboBox" name="cbxJoystick">
|
<widget class="QCheckBox" name="cbAutoMap">
|
||||||
<property name="sizePolicy">
|
<property name="toolTip">
|
||||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
<string><html><head/><body><p>Automatically map joystick buttons to their closest equivalents on the DS for controllers that are known to SDL's game controller database.</p><p>The joystick mappings page will be disabled when automatic mapping is in effect.</p></body></html></string>
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
</property>
|
||||||
<property name="whatsThis">
|
<property name="text">
|
||||||
<string><html><head/><body><p>Selects which joystick will be used for joystick input, if any is present.</p></body></html></string>
|
<string>Automatically map joystick buttons</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
|
@ -298,6 +298,9 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
// http://stackoverflow.com/questions/14543333/joystick-wont-work-using-sdl
|
// http://stackoverflow.com/questions/14543333/joystick-wont-work-using-sdl
|
||||||
SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
|
SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
|
||||||
|
// Use position-based button mapping instead of label-based
|
||||||
|
// Needed to make auto mapping map the face buttons correctly regardless of layout
|
||||||
|
SDL_SetHint(SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS, "0");
|
||||||
|
|
||||||
SDL_SetHint(SDL_HINT_APP_NAME, "melonDS");
|
SDL_SetHint(SDL_HINT_APP_NAME, "melonDS");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue