diff options
Diffstat (limited to 'src/libui_sdl/DlgInputConfig.cpp')
| -rw-r--r-- | src/libui_sdl/DlgInputConfig.cpp | 116 | 
1 files changed, 114 insertions, 2 deletions
| diff --git a/src/libui_sdl/DlgInputConfig.cpp b/src/libui_sdl/DlgInputConfig.cpp index 910486b..a60a0f9 100644 --- a/src/libui_sdl/DlgInputConfig.cpp +++ b/src/libui_sdl/DlgInputConfig.cpp @@ -20,6 +20,7 @@  #include <stdio.h>  #include <string.h> +#include <SDL2/SDL.h>  #include "libui/ui.h"  #include "../types.h" @@ -28,6 +29,9 @@  #include "DlgInputConfig.h" +extern SDL_Joystick* Joystick; + +  namespace DlgInputConfig  { @@ -89,7 +93,7 @@ void OnAreaDragBroken(uiAreaHandler* handler, uiArea* area)  int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt)  { -    if (pollid < 0 || pollid > 12) +    if (pollid < 0)          return 0;      if (evt->Scancode == 0x38) // ALT @@ -97,6 +101,25 @@ int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt)      if (evt->Modifiers == 0x2) // ALT+key          return 0; +    if (pollid > 12) +    { +        if (pollid < 0x100) return 0; +        int id = pollid & 0xFF; +        if (id > 12) return 0; +        if (evt->Scancode != 0x1) return 0; // ESC + +        char keyname[16]; +        JoyMappingName(joymap[id], keyname); +        uiButtonSetText(pollbtn, keyname); +        uiControlEnable(uiControl(pollbtn)); + +        pollid = -1; + +        uiControlSetFocus(uiControl(pollbtn)); + +        return 1; +    } +      if (!evt->Up)      {          // set key. @@ -116,13 +139,68 @@ int OnAreaKeyEvent(uiAreaHandler* handler, uiArea* area, uiAreaKeyEvent* evt)      return 1;  } +Uint32 JoyPoll(Uint32 interval, void* param) +{ +    if (pollid < 0x100) return 0; +    int id = pollid & 0xFF; +    if (id > 12) return 0; + +    SDL_JoystickUpdate(); + +    SDL_Joystick* joy = Joystick; +    if (!joy) return 0; + +    int nbuttons = SDL_JoystickNumButtons(joy); +    for (int i = 0; i < nbuttons; i++) +    { +        if (SDL_JoystickGetButton(joy, i)) +        { +            joymap[id] = i; + +            char keyname[16]; +            JoyMappingName(joymap[id], keyname); +            uiButtonSetText(pollbtn, keyname); +            uiControlEnable(uiControl(pollbtn)); + +            pollid = -1; + +            uiControlSetFocus(uiControl(pollbtn)); +            return 0; +        } +    } + +    u8 blackhat = SDL_JoystickGetHat(joy, 0); +    if (blackhat) +    { +        if      (blackhat & 0x1) blackhat = 0x1; +        else if (blackhat & 0x2) blackhat = 0x2; +        else if (blackhat & 0x4) blackhat = 0x4; +        else                     blackhat = 0x8; + +        joymap[id] = 0x100 | blackhat; + +        char keyname[16]; +        JoyMappingName(joymap[id], keyname); +        uiButtonSetText(pollbtn, keyname); +        uiControlEnable(uiControl(pollbtn)); + +        pollid = -1; + +        uiControlSetFocus(uiControl(pollbtn)); +        return 0; +    } + +    return 100; +} +  void OnKeyStartConfig(uiButton* btn, void* data)  {      if (pollid != -1)      {          // TODO: handle this better? -        uiControlSetFocus(uiControl(keypresscatcher)); +        if (pollid <= 12) +            uiControlSetFocus(uiControl(keypresscatcher));          return;      } @@ -136,12 +214,43 @@ void OnKeyStartConfig(uiButton* btn, void* data)      uiControlSetFocus(uiControl(keypresscatcher));  } +void OnJoyStartConfig(uiButton* btn, void* data) +{ +    if (pollid != -1) +    { +        // TODO: handle this better? +        if (pollid <= 12) +            uiControlSetFocus(uiControl(keypresscatcher)); +        return; +    } + +    int id = *(int*)data; +    pollid = id | 0x100; +    pollbtn = btn; + +    uiButtonSetText(btn, "[press button]"); +    uiControlDisable(uiControl(btn)); + +    SDL_AddTimer(100, JoyPoll, NULL); +    uiControlSetFocus(uiControl(keypresscatcher)); +} +  int OnCloseWindow(uiWindow* window, void* blarg)  {      return 1;  } +void OnGetFocus(uiWindow* window, void* blarg) +{ +    if (pollid >= 0) +        uiControlSetFocus(uiControl(keypresscatcher)); +} + +void OnLoseFocus(uiWindow* window, void* blarg) +{ +} +  void OnCancel(uiButton* btn, void* blarg)  {      uiControlDestroy(uiControl(win)); @@ -167,6 +276,8 @@ void Open()      win = uiNewWindow("Input config - melonDS", 600, 400, 0);      uiWindowSetMargined(win, 1);      uiWindowOnClosing(win, OnCloseWindow, NULL); +    uiWindowOnGetFocus(win, OnGetFocus, NULL); +    uiWindowOnLoseFocus(win, OnLoseFocus, NULL);      areahandler.Draw = OnAreaDraw;      areahandler.MouseEvent = OnAreaMouseEvent; @@ -227,6 +338,7 @@ void Open()              uiButton* btn = uiNewButton(keyname);              uiBoxAppend(box, uiControl(btn), 1); +            uiButtonOnClicked(btn, OnJoyStartConfig, &keyorder[i]);          }      } |