From 7ff4f34a4881c1fa65e3ea428e7cc985ae4e6818 Mon Sep 17 00:00:00 2001 From: oioitff Date: Thu, 18 Apr 2013 17:13:00 +0800 Subject: [PATCH] Add an UI for modifying controls for PC --- Windows/KeyboardDevice.cpp | 140 ++++++++++++++++++++++++++++++- Windows/WndMainWindow.cpp | 163 ++++++++++++++++++++++++++++++------- Windows/ppsspp.rc | 77 +++++++++--------- Windows/psp.jpg | Bin 0 -> 30651 bytes Windows/resource.h | 18 ++++ 5 files changed, 330 insertions(+), 68 deletions(-) create mode 100644 Windows/psp.jpg diff --git a/Windows/KeyboardDevice.cpp b/Windows/KeyboardDevice.cpp index c8e2811016..807c346614 100644 --- a/Windows/KeyboardDevice.cpp +++ b/Windows/KeyboardDevice.cpp @@ -67,4 +67,142 @@ int KeyboardDevice::UpdateState(InputState &input_state) { input_state.pad_lstick_x += analogX; input_state.pad_lstick_y += analogY; return 0; -} \ No newline at end of file +} + +struct key_name { + unsigned char key; + char name[10]; +}; + +const key_name key_name_map[] = { + {'A', "A"}, + {'B', "B"}, + {'C', "C"}, + {'D', "D"}, + {'E', "E"}, + {'F', "F"}, + {'G', "G"}, + {'H', "H"}, + {'I', "I"}, + {'J', "J"}, + {'K', "K"}, + {'L', "L"}, + {'M', "M"}, + {'N', "N"}, + {'O', "O"}, + {'P', "P"}, + {'Q', "Q"}, + {'R', "R"}, + {'S', "S"}, + {'T', "T"}, + {'U', "U"}, + {'V', "V"}, + {'W', "W"}, + {'X', "X"}, + {'Y', "Y"}, + {'Z', "Z"}, + {'1', "1"}, + {'2', "2"}, + {'3', "3"}, + {'4', "4"}, + {'5', "5"}, + {'6', "6"}, + {'7', "7"}, + {'8', "8"}, + {'9', "9"}, + {'0', "0"}, + {VK_BACK, "Backspace"}, + {VK_TAB, "Tab"}, + {VK_CLEAR, "Clear"}, + {VK_RETURN, "Return"}, + {VK_SHIFT, "Shift"}, + {VK_CONTROL, "Ctrl"}, + {VK_MENU, "Alt"}, + {VK_PAUSE, "Pause"}, + {VK_CAPITAL, "Caps"}, + {VK_ESCAPE, "Esc"}, + {VK_SPACE, "Space"}, + {VK_PRIOR, "PgUp"}, + {VK_NEXT, "PgDown"}, + {VK_END, "End"}, + {VK_HOME, "Home"}, + {VK_LEFT, "Left"}, + {VK_UP, "Up"}, + {VK_RIGHT, "Right"}, + {VK_DOWN, "Down"}, + {VK_SELECT, "Select"}, + {VK_INSERT, "Insert"}, + {VK_DELETE, "Delete"}, + {VK_HELP, "Help"}, + {VK_NUMPAD0, "Num 0"}, + {VK_NUMPAD1, "Num 1"}, + {VK_NUMPAD2, "Num 2"}, + {VK_NUMPAD3, "Num 3"}, + {VK_NUMPAD4, "Num 4"}, + {VK_NUMPAD5, "Num 5"}, + {VK_NUMPAD6, "Num 6"}, + {VK_NUMPAD7, "Num 7"}, + {VK_NUMPAD8, "Num 8"}, + {VK_NUMPAD9, "Num 9"}, + {VK_MULTIPLY, "Num *"}, + {VK_ADD, "Num +"}, + {VK_SEPARATOR, "Num Sep"}, + {VK_SUBTRACT, "Num -"}, + {VK_DECIMAL, "Num ."}, + {VK_DIVIDE, "Num /"}, + {VK_F1, "F1"}, + {VK_F2, "F2"}, + {VK_F3, "F3"}, + {VK_F4, "F4"}, + {VK_F5, "F5"}, + {VK_F6, "F6"}, + {VK_F7, "F7"}, + {VK_F8, "F8"}, + {VK_F9, "F9"}, + {VK_F10, "F10"}, + {VK_F11, "F11"}, + {VK_F12, "F12"}, + {VK_OEM_NEC_EQUAL, "Num ="}, + {VK_OEM_1, ";"}, + {VK_OEM_PLUS, "+"}, + {VK_OEM_COMMA, ","}, + {VK_OEM_MINUS, "-"}, + {VK_OEM_PERIOD, "."}, + {VK_OEM_2, "?"}, + {VK_OEM_3, "~"}, + {VK_OEM_4, "["}, + {VK_OEM_5, "|"}, + {VK_OEM_6, "]"}, + {VK_OEM_7, "'"} +}; + +const int key_name_map_size = sizeof(key_name_map) / sizeof(key_name); + +const char * getVirtualKeyName(unsigned char key) +{ + for (int i = 0; i < key_name_map_size; i++) { + if (key_name_map[i].key == key) + return key_name_map[i].name; + } + return 0; +} + +bool saveControlsToFile() { + FILE *wfp = fopen("PPSSPPControls.dat", "wb"); + if (!wfp) + return false; + fwrite(key_pad_map, 1, sizeof(key_pad_map), wfp); + fwrite(analog_ctrl_map, 1, sizeof(analog_ctrl_map), wfp); + fclose(wfp); + return true; +} + +bool loadControlsFromFile() { + FILE *rfp = fopen("PPSSPPControls.dat", "rb"); + if (!rfp) + return false; + fread(key_pad_map, 1, sizeof(key_pad_map), rfp); + fread(analog_ctrl_map, 1, sizeof(analog_ctrl_map), rfp); + fclose(rfp); + return true; +} diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 81881d958a..886ab7bb84 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -2,6 +2,7 @@ #include #include +#include #include "base/NativeApp.h" #include "Globals.h" @@ -45,6 +46,12 @@ static RECT g_normalRC = {0}; extern InputState input_state; +extern unsigned short analog_ctrl_map[]; +extern unsigned int key_pad_map[]; +extern const char * getVirtualKeyName(unsigned char key); +extern bool saveControlsToFile(); +extern bool loadControlsFromFile(); + namespace MainWindow { HWND hwndMain; @@ -358,6 +365,7 @@ namespace MainWindow switch (message) { case WM_CREATE: + loadControlsFromFile(); break; case WM_MOVE: @@ -822,47 +830,144 @@ namespace MainWindow "Rapid Fire\tShift", }; - // Message handler for controls box. + static HHOOK pKeydownHook; + static const int control_map_size = IDC_EDIT_KEY_ANALOG_RIGHT - IDC_EDIT_KEY_TURBO + 1; + static u8 control_map[control_map_size]; + RECT getRedrawRect(HWND hWnd) { + RECT rc; + HWND hDlg = GetParent(hWnd); + GetWindowRect(hWnd, &rc); + POINT pt = {0, 0}; + ScreenToClient(hDlg, &pt); + rc.left += pt.x; + rc.right += pt.x; + rc.top += pt.y; + rc.bottom += pt.y; + + return rc; + } + + LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) + { + HWND hEdit = GetFocus(); + UINT nCtrlID = GetDlgCtrlID(hEdit); + if (nCtrlID < IDC_EDIT_KEY_TURBO || nCtrlID > IDC_EDIT_KEY_ANALOG_RIGHT) { + return CallNextHookEx(pKeydownHook, nCode, wParam, lParam); + } + if (!(lParam&(1<<31))) { + // key down + HWND hDlg = GetParent(hEdit); + const char *str = getVirtualKeyName(wParam); + if (str) { + control_map[nCtrlID - IDC_EDIT_KEY_TURBO] = wParam; + SetWindowTextA(hEdit, str); + RECT rc = getRedrawRect(hEdit); + InvalidateRect(hDlg, &rc, false); + } + else + MessageBoxA(hDlg, "Not supported!", "controller", MB_OK); + } + return 1; + } + + BOOL LoadImageFromResource(CImage *image, HINSTANCE hInstance, LPCTSTR pszResourceName, LPCTSTR lpType) + { + HRSRC hrsrc = FindResource(hInstance, pszResourceName, lpType); + if (!hrsrc) + return FALSE; + DWORD dwlen = SizeofResource(hInstance, hrsrc); + BYTE *lpRsrc = (BYTE*)LoadResource(hInstance, hrsrc); + if (!lpRsrc) + return FALSE; + HGLOBAL hMem = GlobalAlloc(GMEM_FIXED, dwlen); + BYTE* pmem = (BYTE*)GlobalLock(hMem); + memcpy(pmem, lpRsrc, dwlen); + GlobalUnlock(hMem); + IStream* pstm; + CreateStreamOnHGlobal(hMem, FALSE, &pstm); + BOOL bResult = (image->Load(pstm) == S_OK); + pstm->Release(); + GlobalFree(hMem); + FreeResource(lpRsrc); + return bResult; + } + + // Message handler for control box. LRESULT CALLBACK Controls(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { + static CImage image; switch (message) { case WM_INITDIALOG: W32Util::CenterWindow(hDlg); { // TODO: connect to keyboard device instead - HWND list = GetDlgItem(hDlg, IDC_LISTCONTROLS); - int stops[1] = {80}; - SendMessage(list, LB_SETTABSTOPS, 1, (LPARAM)stops); - for (int i = 0; i < sizeof(controllist)/sizeof(controllist[0]); i++) { - SendMessage(list, LB_INSERTSTRING, -1, (LPARAM)controllist[i]); - } - - ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "None"); - ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "XInput"); - ComboBox_AddString(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), "DirectInput"); - if ((g_Config.iForceInputDevice < 0) || (g_Config.iForceInputDevice > 1)) - { - ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), 0); - } - else - { - ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE), (g_Config.iForceInputDevice + 1)); + if (image.IsNull()) + LoadImageFromResource(&image, hInst, MAKEINTRESOURCE(IDB_IMAGE_PSP), "JPG"); + int key_pad_size = (IDC_EDIT_KEYRIGHT - IDC_EDIT_KEY_TURBO + 1); + for (u32 i = 0; i <= IDC_EDIT_KEY_ANALOG_RIGHT - IDC_EDIT_KEY_TURBO; i++) { + HWND hEdit = GetDlgItem(hDlg, IDC_EDIT_KEY_TURBO + i); + if (IDC_EDIT_KEY_TURBO + i <= IDC_EDIT_KEYRIGHT) + control_map[i] = key_pad_map[i * 2]; + else + control_map[i] = analog_ctrl_map[(i - key_pad_size) * 2]; + SetWindowTextA(hEdit, getVirtualKeyName(control_map[i])); } + DWORD dwThreadID = GetWindowThreadProcessId(hDlg,NULL); + pKeydownHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc, NULL, dwThreadID); } return TRUE; - - case WM_COMMAND: - switch (LOWORD(wParam)) + case WM_PAINT: { - case IDOK: - g_Config.iForceInputDevice = (ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_FORCE_INPUT_DEVICE)) - 1); - EndDialog(hDlg, IDOK); - return TRUE; - - case IDCANCEL: - EndDialog(hDlg, IDCANCEL); - return TRUE; + PAINTSTRUCT pst; + HDC hdc = BeginPaint(hDlg, &pst); + int width = image.GetWidth(); + int height = image.GetHeight(); + image.BitBlt(hdc, 0, 0, width, height, 0 , 100); + EndPaint(hDlg, &pst); + return TRUE; + } + case WM_CTLCOLORSTATIC: + { + HDC hdc=(HDC)wParam; + SetBkMode(hdc, TRANSPARENT); + return (LRESULT)GetStockObject(NULL_BRUSH); + } + case WM_CTLCOLOREDIT: + { + HDC hdc = (HDC)wParam; + SetBkMode(hdc, TRANSPARENT); + SetTextColor(hdc, RGB(255, 0, 0)); + HWND hEdit = (HWND)lParam; + RECT rc = getRedrawRect(hEdit); + RECT clientrc; + GetClientRect(hEdit, &clientrc); + image.BitBlt(hdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, rc.left, rc.top + 100); + char str[11]; + clientrc.left += 1; + clientrc.right += 1; + clientrc.top += 1; + clientrc.bottom += 1; + GetWindowTextA(hEdit, str, 10); + DrawTextA(hdc, str, strlen(str), &clientrc, DT_CENTER|DT_SINGLELINE); + return (LRESULT)GetStockObject(NULL_BRUSH); + } + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + if (LOWORD(wParam) == IDOK) { + int key_pad_size = (IDC_EDIT_KEYRIGHT - IDC_EDIT_KEY_TURBO + 1); + for (u32 i = 0; i <= IDC_EDIT_KEY_ANALOG_RIGHT - IDC_EDIT_KEY_TURBO; i++) { + if (IDC_EDIT_KEY_TURBO + i <= IDC_EDIT_KEYRIGHT) + key_pad_map[i * 2] = control_map[i]; + else + analog_ctrl_map[(i - key_pad_size) * 2] = control_map[i]; + } + saveControlsToFile(); + } + UnhookWindowsHookEx(pKeydownHook); + EndDialog(hDlg, LOWORD(wParam)); + return TRUE; } break; } diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index dff741a5fb..3d428ef5aa 100644 --- a/Windows/ppsspp.rc +++ b/Windows/ppsspp.rc @@ -94,6 +94,33 @@ BEGIN CONTROL "",IDC_TABDATATYPE,"SysTabControl32",TCS_BUTTONS,0,1,205,15 END +IDD_CONTROLS DIALOGEX 0, 0, 443, 234 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Controls" +FONT 9, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,176,217,50,14 + PUSHBUTTON "Cancel",IDCANCEL,230,217,50,14 + LTEXT "Xbox 360 controllers are supported! Just plug one in and use it!",IDC_STATIC,14,6,201,8 + LTEXT "Turbo Mode:",IDC_STATIC,339,203,42,8 + EDITTEXT IDC_EDIT_KEYUP,52,73,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEYLEFT,30,91,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEYRIGHT,72,91,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEYDOWN,52,112,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_TRIANGLE,362,67,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_RECTANGLE,339,91,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_CIRCLE,386,91,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_CROSS,364,114,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_LEFT_THUMB,49,26,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_RIGHT_THUMB,361,25,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_SELECT,289,161,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_START,323,161,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_ANALOG_UP,54,130,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_ANALOG_LEFT,38,145,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_ANALOG_RIGHT,71,145,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_ANALOG_DOWN,54,159,33,14,ES_CENTER | ES_AUTOHSCROLL + EDITTEXT IDC_EDIT_KEY_TURBO,382,200,33,14,ES_CENTER | ES_AUTOHSCROLL +END ///////////////////////////////////////////////////////////////////////////// // @@ -143,6 +170,12 @@ BEGIN RIGHTMARGIN, 247 BOTTOMMARGIN, 413 END + + IDD_CONTROLS, DIALOG + BEGIN + MOCKUP, 1, 100, 0, -100, ".\psp.jpg" + RIGHTMARGIN, 440 + END END #endif // APSTUDIO_INVOKED @@ -158,44 +191,6 @@ IDI_PPSSPP ICON "ppsspp.ico" IDI_STOP ICON "icon1.ico" IDI_STOPDISABLE ICON "stop1.ico" -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_CONTROLS DIALOGEX 0, 0, 287, 238 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Controls" -FONT 8, "MS Shell Dlg", 400, 0, 0x1 -BEGIN - DEFPUSHBUTTON "OK",IDOK,176,217,50,14 - PUSHBUTTON "Cancel",IDCANCEL,230,217,50,14 - LTEXT "NOTE: Currently controls are NOT configurable.\nHowever: Xbox 360 controllers are supported! Just plug one in and use it!",IDC_STATIC,7,7,188,30 - LISTBOX IDC_LISTCONTROLS,7,39,273,176,LBS_SORT | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - LTEXT "Force device:",IDC_STATIC,10,220,45,11 - COMBOBOX IDC_FORCE_INPUT_DEVICE,59,219,84,140,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP -END - - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO -BEGIN - IDD_CONTROLS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 280 - TOPMARGIN, 7 - BOTTOMMARGIN, 231 - END -END -#endif // APSTUDIO_INVOKED - - ///////////////////////////////////////////////////////////////////////////// // // Menu @@ -353,6 +348,12 @@ END #endif // APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// JPG +// + +IDB_IMAGE_PSP JPG "psp.jpg" ///////////////////////////////////////////////////////////////////////////// // diff --git a/Windows/psp.jpg b/Windows/psp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d96900753d1b6024089708d7fa8a1717d4faa949 GIT binary patch literal 30651 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 Ze(uwn6ey`ZPZCd$PzmU}Ippuk{{h?yEL{Kq literal 0 HcmV?d00001 diff --git a/Windows/resource.h b/Windows/resource.h index c460f728f4..7a9c57097f 100644 --- a/Windows/resource.h +++ b/Windows/resource.h @@ -224,6 +224,24 @@ #define ID_FILE_LOAD_MEMSTICK 40143 #define ID_EMULATION_SOUND 40144 #define ID_OPTIONS_MIPMAP 40145 +#define IDB_IMAGE_PSP 40146 +#define IDC_EDIT_KEY_TURBO 40147 +#define IDC_EDIT_KEY_START 40148 +#define IDC_EDIT_KEY_SELECT 40149 +#define IDC_EDIT_KEY_RECTANGLE 40150 +#define IDC_EDIT_KEY_TRIANGLE 40151 +#define IDC_EDIT_KEY_CIRCLE 40152 +#define IDC_EDIT_KEY_CROSS 40153 +#define IDC_EDIT_KEY_LEFT_THUMB 40154 +#define IDC_EDIT_KEY_RIGHT_THUMB 40155 +#define IDC_EDIT_KEYUP 40156 +#define IDC_EDIT_KEYDOWN 40157 +#define IDC_EDIT_KEYLEFT 40158 +#define IDC_EDIT_KEYRIGHT 40159 +#define IDC_EDIT_KEY_ANALOG_UP 40160 +#define IDC_EDIT_KEY_ANALOG_DOWN 40161 +#define IDC_EDIT_KEY_ANALOG_LEFT 40162 +#define IDC_EDIT_KEY_ANALOG_RIGHT 40163 #define IDC_STATIC -1 // Next default values for new objects