mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-25 23:29:55 -06:00
* implement missing graphics (affine BG, rotscaled bitmap sprite)
* fix potential crash upon exit * more work on the input config UI * misc fixes
This commit is contained in:
@ -22,6 +22,37 @@
|
||||
|
||||
|
||||
wxBEGIN_EVENT_TABLE(InputConfigDialog, wxDialog)
|
||||
EVT_COMMAND(1001, wxEVT_BUTTON, InputConfigDialog::OnDerp)
|
||||
|
||||
EVT_COMMAND(100, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(101, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(102, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(103, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(104, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(105, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(106, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(107, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(108, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(109, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(110, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
EVT_COMMAND(111, wxEVT_BUTTON, InputConfigDialog::OnConfigureKey)
|
||||
|
||||
EVT_COMMAND(200, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(201, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(202, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(203, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(204, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(205, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(206, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(207, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(208, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(209, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(210, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
EVT_COMMAND(211, wxEVT_BUTTON, InputConfigDialog::OnConfigureJoy)
|
||||
|
||||
EVT_TIMER(wxID_ANY, InputConfigDialog::OnPoll)
|
||||
|
||||
EVT_KEY_DOWN(InputConfigDialog::OnKeyDown)
|
||||
wxEND_EVENT_TABLE()
|
||||
|
||||
|
||||
@ -31,6 +62,9 @@ InputConfigDialog::InputConfigDialog(wxWindow* parent)
|
||||
int keyorder[12] = {0, 1, 10, 11, 5, 4, 6, 7, 9, 8, 3, 2};
|
||||
char keylabels[12][8] = {"A:", "B:", "Select:", "Start:", "Right:", "Left:", "Up:", "Down:", "R:", "L:", "X:", "Y:"};
|
||||
|
||||
memcpy(keymapping, Config::KeyMapping, 12*sizeof(int));
|
||||
memcpy(joymapping, Config::JoyMapping, 12*sizeof(int));
|
||||
|
||||
wxBoxSizer* vboxmain = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
{
|
||||
@ -39,24 +73,52 @@ InputConfigDialog::InputConfigDialog(wxWindow* parent)
|
||||
|
||||
wxStaticBox* kbdside = new wxStaticBox(p, wxID_ANY, "Keyboard");
|
||||
{
|
||||
wxGridSizer* grid = new wxGridSizer(2, 3, 0);
|
||||
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
|
||||
wxPanel* p = new wxPanel(kbdside);
|
||||
wxFlexGridSizer* grid = new wxFlexGridSizer(2, 3, 8);
|
||||
|
||||
for (int i = 0; i < 12; i++)
|
||||
{
|
||||
int j = keyorder[i];
|
||||
|
||||
wxStaticText* label = new wxStaticText(kbdside, wxID_ANY, keylabels[j]);
|
||||
grid->Add(label);
|
||||
wxStaticText* label = new wxStaticText(p, wxID_ANY, keylabels[j]);
|
||||
grid->Add(label, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL);
|
||||
|
||||
const char* keyname = SDL_GetKeyName(SDL_GetKeyFromScancode((SDL_Scancode)Config::KeyMapping[j]));
|
||||
wxButton* btn = new wxButton(kbdside, 100+i, keyname);
|
||||
const char* keyname = SDL_GetScancodeName((SDL_Scancode)Config::KeyMapping[j]);
|
||||
wxButton* btn = new wxButton(p, 100+j, keyname);
|
||||
grid->Add(btn);
|
||||
}
|
||||
|
||||
kbdside->SetSizer(grid);
|
||||
p->SetSizer(grid);
|
||||
sizer->Add(p, 0, wxALL, 15);
|
||||
kbdside->SetSizer(sizer);
|
||||
}
|
||||
sizer->Add(kbdside);
|
||||
|
||||
wxStaticBox* joyside = new wxStaticBox(p, wxID_ANY, "Joystick");
|
||||
{
|
||||
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
|
||||
wxPanel* p = new wxPanel(joyside);
|
||||
wxFlexGridSizer* grid = new wxFlexGridSizer(2, 3, 8);
|
||||
|
||||
for (int i = 0; i < 12; i++)
|
||||
{
|
||||
int j = keyorder[i];
|
||||
|
||||
wxStaticText* label = new wxStaticText(p, wxID_ANY, keylabels[j]);
|
||||
grid->Add(label, 0, wxALIGN_RIGHT|wxALIGN_CENTRE_VERTICAL);
|
||||
|
||||
const char* keyname = "zorp";//SDL_GetKeyName(SDL_GetKeyFromScancode((SDL_Scancode)Config::KeyMapping[j]));
|
||||
wxButton* btn = new wxButton(p, 200+j, keyname);
|
||||
grid->Add(btn);
|
||||
}
|
||||
|
||||
p->SetSizer(grid);
|
||||
sizer->Add(p, 0, wxALL, 15);
|
||||
joyside->SetSizer(sizer);
|
||||
}
|
||||
sizer->Add(joyside);
|
||||
|
||||
p->SetSizer(sizer);
|
||||
vboxmain->Add(p, 0, wxALL&(~wxBOTTOM), 15);
|
||||
}
|
||||
@ -78,4 +140,83 @@ InputConfigDialog::InputConfigDialog(wxWindow* parent)
|
||||
|
||||
SetSizer(vboxmain);
|
||||
Fit();
|
||||
|
||||
polltimer = new wxTimer(this);
|
||||
pollid = 0;
|
||||
|
||||
keystate = SDL_GetKeyboardState(&nkeys);
|
||||
}
|
||||
|
||||
InputConfigDialog::~InputConfigDialog()
|
||||
{
|
||||
delete polltimer;
|
||||
}
|
||||
|
||||
void InputConfigDialog::OnDerp(wxCommandEvent& event)
|
||||
{
|
||||
printf("OnDerp %d\n", event.GetId());
|
||||
}
|
||||
|
||||
void InputConfigDialog::OnConfigureKey(wxCommandEvent& event)
|
||||
{
|
||||
pollid = event.GetId();
|
||||
//pollbtn = (wxButton*)event.GetOwner();
|
||||
polltimer->Start(100);
|
||||
}
|
||||
|
||||
void InputConfigDialog::OnConfigureJoy(wxCommandEvent& event)
|
||||
{
|
||||
pollid = event.GetId();
|
||||
//pollbtn = (wxButton*)event.GetSource();
|
||||
polltimer->Start(100);
|
||||
}
|
||||
|
||||
void InputConfigDialog::OnPoll(wxTimerEvent& event)
|
||||
{
|
||||
if (pollid < 100) return;
|
||||
|
||||
SDL_PumpEvents();
|
||||
keystate = SDL_GetKeyboardState(&nkeys);
|
||||
|
||||
if (keystate[SDL_SCANCODE_ESCAPE])
|
||||
{
|
||||
polltimer->Stop();
|
||||
//pollbtn->Enable(true);
|
||||
pollid = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (pollid >= 200)
|
||||
{
|
||||
//
|
||||
}
|
||||
else
|
||||
{printf("poll kbd %d, %d, %d\n", pollid, nkeys, keystate[SDL_SCANCODE_A]);
|
||||
int id = pollid - 100;
|
||||
if (id >= 12) return;
|
||||
|
||||
for (int i = 0; i < nkeys; i++)
|
||||
{
|
||||
if (keystate[i])
|
||||
{
|
||||
keymapping[id] = i;
|
||||
|
||||
//pollbtn->Enable(true);
|
||||
|
||||
const char* keyname = SDL_GetScancodeName((SDL_Scancode)i);
|
||||
//pollbtn->SetText(keyname);
|
||||
printf("%s\n", keyname);
|
||||
|
||||
polltimer->Stop();
|
||||
pollid = 0;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void InputConfigDialog::OnKeyDown(wxKeyEvent& event)
|
||||
{
|
||||
printf("!!\n");
|
||||
}
|
||||
|
Reference in New Issue
Block a user