diff options
Diffstat (limited to 'src/libui_sdl/DlgInputConfig.cpp')
-rw-r--r-- | src/libui_sdl/DlgInputConfig.cpp | 70 |
1 files changed, 55 insertions, 15 deletions
diff --git a/src/libui_sdl/DlgInputConfig.cpp b/src/libui_sdl/DlgInputConfig.cpp index 98cdf8c..392eb44 100644 --- a/src/libui_sdl/DlgInputConfig.cpp +++ b/src/libui_sdl/DlgInputConfig.cpp @@ -49,6 +49,7 @@ typedef struct int pollid; uiButton* pollbtn; + SDL_TimerID timer; } InputDlgData; @@ -58,12 +59,27 @@ char dskeylabels[12][8] = {"A:", "B:", "Select:", "Start:", "Right:", "Left:", " int identity[32] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}; -char hotkeylabels[HK_MAX][32] = {"Close/open lid:", "Microphone:"}; +char hotkeylabels[HK_MAX][32] = {"Close/open lid:", "Microphone:", "Fast forward:", "Fast forward (toggle):"}; int openedmask; InputDlgData inputdlg[2]; +void KeyMappingName(int id, char* str) +{ + if (id < 0) + { + strcpy(str, "None"); + return; + } + + char* keyname = uiKeyName(id); + strncpy(str, keyname, 31); + uiFreeText(keyname); + + str[31] = '\0'; +} + void JoyMappingName(int id, char* str) { if (id < 0) @@ -134,7 +150,7 @@ int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt) return 1; } - char keyname[16]; + char keyname[32]; JoyMappingName(dlg->joymap[id], keyname); uiButtonSetText(dlg->pollbtn, keyname); uiControlEnable(uiControl(dlg->pollbtn)); @@ -150,12 +166,17 @@ int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt) { // set key. if (evt->Scancode != 0x1) // ESC - dlg->keymap[dlg->pollid] = evt->Scancode; + { + if (evt->Scancode == 0xE) // backspace + dlg->keymap[dlg->pollid] = -1; + else + dlg->keymap[dlg->pollid] = evt->Scancode; + } - char* keyname = uiKeyName(dlg->keymap[dlg->pollid]); + char keyname[32]; + KeyMappingName(dlg->keymap[dlg->pollid], keyname); uiButtonSetText(dlg->pollbtn, keyname); uiControlEnable(uiControl(dlg->pollbtn)); - uiFreeText(keyname); dlg->pollid = -1; @@ -170,7 +191,7 @@ void FinishJoyMapping(void* param) InputDlgData* dlg = (InputDlgData*)param; int id = dlg->pollid & 0xFF; - char keyname[16]; + char keyname[32]; JoyMappingName(dlg->joymap[id], keyname); uiButtonSetText(dlg->pollbtn, keyname); uiControlEnable(uiControl(dlg->pollbtn)); @@ -184,14 +205,27 @@ Uint32 JoyPoll(Uint32 interval, void* param) { InputDlgData* dlg = (InputDlgData*)param; - if (dlg->pollid < 0x100) return 0; + if (dlg->pollid < 0x100) + { + dlg->timer = 0; + return 0; + } + int id = dlg->pollid & 0xFF; - if (id > 12) return 0; + if (id > 12) + { + dlg->timer = 0; + return 0; + } SDL_JoystickUpdate(); SDL_Joystick* joy = Joystick; - if (!joy) return 0; + if (!joy) + { + dlg->timer = 0; + return 0; + } int nbuttons = SDL_JoystickNumButtons(joy); for (int i = 0; i < nbuttons; i++) @@ -200,6 +234,7 @@ Uint32 JoyPoll(Uint32 interval, void* param) { dlg->joymap[id] = i; uiQueueMain(FinishJoyMapping, dlg); + dlg->timer = 0; return 0; } } @@ -214,10 +249,11 @@ Uint32 JoyPoll(Uint32 interval, void* param) dlg->joymap[id] = 0x100 | blackhat; uiQueueMain(FinishJoyMapping, dlg); + dlg->timer = 0; return 0; } - return 100; + return interval; } @@ -262,7 +298,7 @@ void OnJoyStartConfig(uiButton* btn, void* data) uiButtonSetText(btn, "[press button]"); uiControlDisable(uiControl(btn)); - SDL_AddTimer(100, JoyPoll, dlg); + dlg->timer = SDL_AddTimer(100, JoyPoll, dlg); uiControlSetFocus(uiControl(dlg->keypresscatcher)); } @@ -271,6 +307,7 @@ int OnCloseWindow(uiWindow* window, void* blarg) { InputDlgData* dlg = (InputDlgData*)(uiControl(window)->UserData); openedmask &= ~(1 << dlg->type); + if (dlg->timer) SDL_RemoveTimer(dlg->timer); return 1; } @@ -292,6 +329,7 @@ void OnCancel(uiButton* btn, void* data) uiControlDestroy(uiControl(dlg->win)); openedmask &= ~(1 << dlg->type); + if (dlg->timer) SDL_RemoveTimer(dlg->timer); } void OnOk(uiButton* btn, void* data) @@ -313,6 +351,7 @@ void OnOk(uiButton* btn, void* data) uiControlDestroy(uiControl(dlg->win)); openedmask &= ~(1 << dlg->type); + if (dlg->timer) SDL_RemoveTimer(dlg->timer); } void Open(int type) @@ -330,6 +369,7 @@ void Open(int type) dlg->type = type; dlg->pollid = -1; + dlg->timer = 0; if (type == 0) { @@ -386,15 +426,14 @@ void Open(int type) uiGridAppend(b_key, uiControl(label), 0, i, 1, 1, 1, uiAlignStart, 1, uiAlignCenter); uiControlSetMinSize(uiControl(label), width, 1); - char* keyname = uiKeyName(dlg->keymap[j]); + char keyname[32]; + KeyMappingName(dlg->keymap[j], keyname); uiButton* btn = uiNewButton(keyname); uiControl(btn)->UserData = dlg; uiGridAppend(b_key, uiControl(btn), 1, i, 1, 1, 1, uiAlignFill, 1, uiAlignCenter); uiButtonOnClicked(btn, OnKeyStartConfig, (type==0) ? &dskeyorder[i] : &identity[i]); uiControlSetMinSize(uiControl(btn), width, 1); - - uiFreeText(keyname); } uiGroup* g_joy = uiNewGroup("Joystick"); @@ -410,7 +449,7 @@ void Open(int type) uiGridAppend(b_joy, uiControl(label), 0, i, 1, 1, 1, uiAlignStart, 1, uiAlignCenter); uiControlSetMinSize(uiControl(label), width, 1); - char keyname[16]; + char keyname[32]; JoyMappingName(dlg->joymap[j], keyname); uiButton* btn = uiNewButton(keyname); @@ -456,6 +495,7 @@ void Close(int type) uiControlDestroy(uiControl(inputdlg[type].win)); openedmask &= ~(1<<type); + if (inputdlg[type].timer) SDL_RemoveTimer(inputdlg[type].timer); } } |