diff options
author | StapleButter <thetotalworm@gmail.com> | 2017-03-24 20:53:01 +0100 |
---|---|---|
committer | StapleButter <thetotalworm@gmail.com> | 2017-03-24 20:53:01 +0100 |
commit | 68eb4f6caf56295b3825ee9cb263dc09718d58c9 (patch) | |
tree | d20011d28fd78be000d5a76115f73be1ad7f1d0e /src/wx | |
parent | f7ac0090f0a9252e539c61c4fd9beff0b247658c (diff) |
* implement missing graphics (affine BG, rotscaled bitmap sprite)
* fix potential crash upon exit
* more work on the input config UI
* misc fixes
Diffstat (limited to 'src/wx')
-rw-r--r-- | src/wx/InputConfig.cpp | 153 | ||||
-rw-r--r-- | src/wx/InputConfig.h | 20 | ||||
-rw-r--r-- | src/wx/main.cpp | 16 |
3 files changed, 179 insertions, 10 deletions
diff --git a/src/wx/InputConfig.cpp b/src/wx/InputConfig.cpp index ea5f1c8..b4785fe 100644 --- a/src/wx/InputConfig.cpp +++ b/src/wx/InputConfig.cpp @@ -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"); } diff --git a/src/wx/InputConfig.h b/src/wx/InputConfig.h index c0a60e7..c1bc64b 100644 --- a/src/wx/InputConfig.h +++ b/src/wx/InputConfig.h @@ -30,9 +30,29 @@ class InputConfigDialog : public wxDialog { public: InputConfigDialog(wxWindow* parent); + ~InputConfigDialog(); private: wxDECLARE_EVENT_TABLE(); + + void OnDerp(wxCommandEvent& event); + + void OnConfigureKey(wxCommandEvent& event); + void OnConfigureJoy(wxCommandEvent& event); + + void OnPoll(wxTimerEvent& event); + + void OnKeyDown(wxKeyEvent& event); + + const u8* keystate; + int nkeys; + + wxTimer* polltimer; + int pollid; + wxButton* pollbtn; + + int keymapping[12]; + int joymapping[12]; }; #endif // WX_INPUTCONFIG_H diff --git a/src/wx/main.cpp b/src/wx/main.cpp index 058808f..a5fd725 100644 --- a/src/wx/main.cpp +++ b/src/wx/main.cpp @@ -130,10 +130,18 @@ MainFrame::MainFrame() void MainFrame::OnClose(wxCloseEvent& event) { - emustatus = 0; - emustatuschangemutex->Lock(); - emustatuschange->Signal(); - emustatuschangemutex->Unlock(); + if (emustatus == 1) + { + emustatus = 0; + emustop->Wait(); + } + else + { + emustatus = 0; + emustatuschangemutex->Lock(); + emustatuschange->Signal(); + emustatuschangemutex->Unlock(); + } emuthread->Wait(); delete emuthread; |