From 2f2c313b549e0c3b494de8bbf63cc9aa355ecf62 Mon Sep 17 00:00:00 2001 From: The Dax Date: Thu, 29 Aug 2013 16:13:22 -0400 Subject: [PATCH 1/6] Make Win32 UI translatable. Remove all ampersand accelerators; they're not really needed, however, some can of course be added back in. --- Windows/WndMainWindow.cpp | 169 +++++++++++++++++++++++++++++++++++++- Windows/ppsspp.rc | Bin 42844 -> 42194 bytes 2 files changed, 168 insertions(+), 1 deletion(-) diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index d35ea5ebd1..ffe78e0cdb 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2012- PPSSPP Project. +// Copyright (c) 2012- PPSSPP Project. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -104,6 +104,7 @@ namespace MainWindow static void *rawInputBuffer; static size_t rawInputBufferSize; static int currentSavestateSlot = 0; + static bool menusAreTranslated = false; #define MAX_LOADSTRING 100 const TCHAR *szTitle = TEXT("PPSSPP"); @@ -235,6 +236,168 @@ namespace MainWindow } } + std::string GetMenuItemText(int menuID) { + MENUITEMINFO menuInfo; + menuInfo.cbSize = sizeof(MENUITEMINFO); + menuInfo.fMask = MIIM_STRING; + //menuInfo.fType = MFT_STRING; + menuInfo.dwTypeData = 0; + + GetMenuItemInfo(menu, menuID, MF_BYCOMMAND, &menuInfo); + wchar_t *buffer = new wchar_t[++menuInfo.cch]; + //memset(buffer, 0, ARRAY_SIZE(buffer)); + menuInfo.dwTypeData = buffer; + GetMenuItemInfo(menu, menuID, MF_BYCOMMAND, &menuInfo); + std::string retVal(ConvertWStringToUTF8(menuInfo.dwTypeData)); + delete [] buffer; + + return retVal; + } + + enum { + MENU_FILE = 0, + MENU_EMULATION = 1, + MENU_DEBUG = 2, + MENU_OPTIONS = 3, + MENU_HELP = 4 + }; + + void TranslateMenuHeaders() { + I18NCategory *d = GetI18NCategory("DesktopUI"); + I18NCategory *g = GetI18NCategory("Graphics"); + I18NCategory *p = GetI18NCategory("Pause"); + + std::string key = d->T("File"); + std::wstring translated = ConvertUTF8ToWString(key); + + ModifyMenu(menu, MENU_FILE, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + key = d->T("Emulation"); + translated = ConvertUTF8ToWString(key); + ModifyMenu(menu, MENU_EMULATION, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + key = g->T("Debugging"); + translated = ConvertUTF8ToWString(key); + ModifyMenu(menu, MENU_DEBUG, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + key = p->T("Settings"); + translated = ConvertUTF8ToWString(key); + ModifyMenu(menu, MENU_OPTIONS, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + key = d->T("Help"); + translated = ConvertUTF8ToWString(key); + ModifyMenu(menu, MENU_HELP, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + } + + void TranslateMenuItem(const int menuID, const char *category, const bool enabled = true, const bool checked = false, const std::wstring& accelerator = L"") { + if(menusAreTranslated) return; + I18NCategory *c = GetI18NCategory(category); + std::string key = c->T(GetMenuItemText(menuID).c_str()); + std::wstring translated = ConvertUTF8ToWString(key); + translated.append(accelerator); + ModifyMenu(menu, menuID, MF_STRING + | enabled? MF_ENABLED : MF_GRAYED + | checked? MF_UNCHECKED : MF_CHECKED, // Have to use reverse logic here for some reason + menuID, translated.c_str()); + } + + void TranslateMenus() { + if(menusAreTranslated) return; + + const char *desktopUI = "DesktopUI"; + const char *mainMenu = "MainMenu"; + const char *graphics = "Graphics"; + const char *system = "System"; + const char *audio = "Audio"; + const char *general = "General"; + const char *pause = "Pause"; + + // File menu + TranslateMenuItem(ID_FILE_LOAD, mainMenu); + TranslateMenuItem(ID_FILE_LOAD_DIR, desktopUI); + TranslateMenuItem(ID_FILE_LOAD_MEMSTICK, desktopUI); + TranslateMenuItem(ID_FILE_MEMSTICK, desktopUI); + TranslateMenuItem(ID_FILE_QUICKLOADSTATE, pause, false, false, L"\tF4"); + TranslateMenuItem(ID_FILE_QUICKSAVESTATE, pause, false, false, L"\tF2"); + TranslateMenuItem(ID_FILE_LOADSTATEFILE, desktopUI, false, false); + TranslateMenuItem(ID_FILE_SAVESTATEFILE, desktopUI, false, false); + TranslateMenuItem(ID_FILE_EXIT, mainMenu); + + // Emulation menu + TranslateMenuItem(ID_TOGGLE_PAUSE, desktopUI, false, false, L"\tF8"); + TranslateMenuItem(ID_EMULATION_STOP, desktopUI, false, false, L"\tCtrl+W"); + TranslateMenuItem(ID_EMULATION_RESET, desktopUI, false, false, L"\tCtrl+B"); + TranslateMenuItem(ID_EMULATION_RUNONLOAD, desktopUI); + TranslateMenuItem(ID_EMULATION_SOUND, audio, true, true); + TranslateMenuItem(ID_EMULATION_ATRAC3_SOUND, audio); + TranslateMenuItem(ID_EMULATION_CHEATS, system); + TranslateMenuItem(ID_EMULATION_RENDER_MODE_OGL, graphics, true, true); + TranslateMenuItem(ID_EMULATION_RENDER_MODE_SOFT, graphics); + TranslateMenuItem(ID_CPU_INTERPRETER, desktopUI); + TranslateMenuItem(ID_CPU_DYNAREC, system); + TranslateMenuItem(ID_CPU_MULTITHREADED, system); + TranslateMenuItem(ID_IO_MULTITHREADED, system); + + // Debug menu + TranslateMenuItem(ID_DEBUG_LOADMAPFILE, desktopUI); + TranslateMenuItem(ID_DEBUG_SAVEMAPFILE, desktopUI); + TranslateMenuItem(ID_DEBUG_RESETSYMBOLTABLE, desktopUI); + TranslateMenuItem(ID_DEBUG_DUMPNEXTFRAME, graphics); + TranslateMenuItem(ID_DEBUG_TAKESCREENSHOT, desktopUI, "\tF12"); + TranslateMenuItem(ID_DEBUG_DISASSEMBLY, desktopUI, "\tCtrl+D"); + TranslateMenuItem(ID_DEBUG_LOG, desktopUI, "\tCtrl+L"); + TranslateMenuItem(ID_DEBUG_MEMORYVIEW, desktopUI, "\tCtrl+M"); + + // Options menu + TranslateMenuItem(ID_OPTIONS_FULLSCREEN, graphics, true, false, L"\tAlt+Return, F11"); + TranslateMenuItem(ID_OPTIONS_TOPMOST, desktopUI); + TranslateMenuItem(ID_OPTIONS_STRETCHDISPLAY, graphics); + TranslateMenuItem(ID_OPTIONS_SCREEN1X, desktopUI, true, false, L"\tCtrl+1"); + TranslateMenuItem(ID_OPTIONS_SCREEN2X, desktopUI, true, true, L"\tCtrl+1"); + TranslateMenuItem(ID_OPTIONS_SCREEN3X, desktopUI, true, false, L"\tCtrl+1"); + TranslateMenuItem(ID_OPTIONS_SCREEN4X, desktopUI, true, false, L"\tCtrl+1"); + TranslateMenuItem(ID_OPTIONS_NONBUFFEREDRENDERING, graphics, true, false, L"\tF5"); + TranslateMenuItem(ID_OPTIONS_BUFFEREDRENDERING, graphics, true, true, L"\tF5"); + TranslateMenuItem(ID_OPTIONS_READFBOTOMEMORYCPU, graphics, true, false, L"\tF5"); + TranslateMenuItem(ID_OPTIONS_READFBOTOMEMORYGPU, graphics, true, false, L"\tF5"); + TranslateMenuItem(ID_OPTIONS_FRAMESKIP_0, graphics); + TranslateMenuItem(ID_OPTIONS_FRAMESKIP_AUTO, graphics); + // Skip frameskipping 2-8.. + TranslateMenuItem(ID_OPTIONS_TEXTUREFILTERING_AUTO, graphics); + TranslateMenuItem(ID_OPTIONS_NEARESTFILTERING, graphics); + TranslateMenuItem(ID_OPTIONS_LINEARFILTERING, graphics); + TranslateMenuItem(ID_OPTIONS_LINEARFILTERING_CG, graphics); + TranslateMenuItem(ID_TEXTURESCALING_OFF, graphics); + TranslateMenuItem(ID_TEXTURESCALING_2X, desktopUI); + TranslateMenuItem(ID_TEXTURESCALING_3X, desktopUI); + TranslateMenuItem(ID_TEXTURESCALING_4X, desktopUI); + TranslateMenuItem(ID_TEXTURESCALING_5X, desktopUI); + TranslateMenuItem(ID_TEXTURESCALING_XBRZ, graphics); + TranslateMenuItem(ID_TEXTURESCALING_HYBRID, graphics); + TranslateMenuItem(ID_TEXTURESCALING_BICUBIC, graphics); + TranslateMenuItem(ID_TEXTURESCALING_HYBRID_BICUBIC, graphics); + TranslateMenuItem(ID_TEXTURESCALING_DEPOSTERIZE, graphics); + TranslateMenuItem(ID_OPTIONS_HARDWARETRANSFORM, graphics, true, true, L"\tF6"); + TranslateMenuItem(ID_OPTIONS_VERTEXCACHE, graphics); + TranslateMenuItem(ID_OPTIONS_MIPMAP, graphics); + TranslateMenuItem(ID_OPTIONS_ANTIALIASING, graphics); + TranslateMenuItem(ID_OPTIONS_VSYNC, graphics); + TranslateMenuItem(ID_OPTIONS_SHOWFPS, graphics); + TranslateMenuItem(ID_OPTIONS_SHOWDEBUGSTATISTICS, graphics); + TranslateMenuItem(ID_OPTIONS_FASTMEMORY, system); + TranslateMenuItem(ID_OPTIONS_IGNOREILLEGALREADS, desktopUI); + + // Help menu + TranslateMenuItem(ID_HELP_OPENWEBSITE, desktopUI); + TranslateMenuItem(ID_HELP_OPENFORUM, general); + TranslateMenuItem(ID_HELP_BUYGOLD, general); + TranslateMenuItem(ID_HELP_ABOUT, desktopUI); + + TranslateMenuHeaders(); + menusAreTranslated = true; + DrawMenuBar(hwndMain); + } + void setTexScalingMultiplier(int level) { g_Config.iTexScalingLevel = level; if(gpu) gpu->ClearCacheNextFrame(); @@ -1111,6 +1274,10 @@ namespace MainWindow case WM_INPUT: { + // Hack: I can't seem to get the menu to translate without an event occurring. + // This seems like the best spot to guarantee translation... + TranslateMenus(); + UINT dwSize; GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER)); if (!rawInputBuffer) { diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index c7c85d1b31643310a4e6b2938d794070bdd7a3dd..8afc085383ebb6e51a5755c7bc6b8ba5ee96687e 100644 GIT binary patch delta 1355 zcmZuwZA@Eb6n;w`rN}pQV}RW)VT?gx<6{gre!w7=Vd)TzF-yZ}X-nx!Tgqpll(r(< z3Usay0|9t6&DAJ{p&u3L8Hm!v1yo&7@LVxL#D@;MuuP8YEzrZ?_>J^*^7lCAqBCzJgn=+ zpwMp!2UrJ^JrZz+I+zSiP#L2UaAx4Sp-M>180nRuv0ZgY&$=l?vL_Sa_6aI(QP2!= z$54DVWwukkHde|C@UTll`)Szhuq4(nBh|oH*3Gh+99>2kd?pM2G^tS5pMt%+a_orH zv2<0<`$8VGC66{}r*@$n^VbLNPHDqd0g1oFoYqo#$SzWe&n>cogpW zBzR_s#;2W5oVH{^Z806a$WF0K)D0`4cm<3RKI$HRvfLK54#bHiRy6-6kWe0Jai$lPr6_g)DDn>ZL*@$NwQ3@*ljR)NMkh|4H z%g=r~*4%Z7_VmE%vEw(-6vn(J?0I{HC2Sya#Qn}?Vd=p-7a5~vXdLxodvskiz%H;R zcA0RQaF0r{{cZ&k#@xuhCZ&On`6o7374INb?4$sHl?rg|+7|Y%O~ZFR2j0OP>|C!$ z?hO|fZVUBkHEaq;xkrmj1R!MgoQwU-Xl~YcvPK7b?{yN?17`!>{7S%_{Y;fxnlw~fkPQu5!3!~e(W1ukSAe&=MK@gGBbzNC+YrC~w8KuZ= zT-J4m>qfErVTg%D2#NfW=ro1^iXw^rP~s&qBpL-06Jm&o&-ps$#Kbf`eb4)z%k!T1 zIj3J;pY+|WNf(0#jluzgGgF}^>Lx3BIbzTamTq}Qp)T@^!rs!2lNG9`26{o&e=2Rz zD3>eBZffBBsN4c&bH!avwn8tGoAl%-H=9-zUfxofoP@JKjk6}FDWqK1ExnKlkI~g1 zVmGp;F%3UA>k6Jl?mDuQgRE@qH>pTGK;q))v3#Bu&Ek*DxxC$61>d;Y2bs3xHsqZh z@62rmNIO}m1Kw^jQ!CQ90Du`^D{Y0WqZ-y6$VZGUzG$hP;NgRn-1xs9RTDh2xGg7_ zKeLn|V@K;j$cL??ke94x$mwk@T7@C^;p>0OXf=%9Mv^jfAp-WN`AFeNdpJ)alN!j3i&rCd6KRCr%9X9F?=yUd*@bE@WK3vq|IS zhyJ|m5^95u4;}`-9h=8r>e6{jM>+qovp!`pwFIY9`~a1co{i2T-q11FqR?8DL>|G5 z%S-muTChy8M|3w%1(6r4F4`e9fJHkrH+JoaVjIKP?9Ag;j;eVI)lvxiW;L!wz27?I zdsz@nz-zP>@K$FACmsGWg&Gmvp+=P33nHP5Ri(@tT2HS~CHRY9u5dc%{J;HL*fzm# z4u9;bZukSz!VdXUnK>{59>P)pA=aIeQ^ zP@tJX<`gL{DoQlMSUpnws3RkRpq&ZCPju#Mh2;MbtCpjlIULNI!M}70Wv6?ewrGGw zG1q%n6e+Y3^|j*V=BuB7M{4A_S1A6_+q7J8x$zD*^>qZl)Y1XmE#RQkQc#M&Nv&}i zT0&mD3*)5O_XeW8=aYI=`bQz}`wiNX37C!GmT@*(bk8zO9U}#KB&g$ou5M^mIpl)ch?|ZaUdoc0<$uOU3Ih&@ghCd*!wGR0x}-#gDeOw*66t@WFKGu7II_# zTF(=|#p8aLdaO7Z-d)HG!mr|etI*UYz7f`AU9GOmcgea&UH7Z&h3fjjEtz z*=vD~3GoCxhFP_Kkg4gTN*n8`AO_s$i%?;sfs!agJUyh^h6Q6;vSscjrT%s9+dJKSjv5m zg-7n=#~>dcmx9JmT!Y+nQl|9Pl?6P1XeMuu=kStKd$3b<#-wWLr{(#Up1!BVYM*B-=N^Ncs?JGBo+=P&cP&+5R#Xjy9${-65+PDd{Pg- geReK}a|ZvAn8N+Z9G;OZhvmxT=cq&W$hEY;0YYFy-T(jq From a6e21bd85a02c9594840fd048d7d3d319bc5e56e Mon Sep 17 00:00:00 2001 From: The Dax Date: Thu, 29 Aug 2013 17:11:08 -0400 Subject: [PATCH 2/6] Make submenus(Rendering Mode, Rendering Resolution, etc.) translatable. --- Windows/WndMainWindow.cpp | 68 +++++++++++++++++++++++++++++--------- Windows/ppsspp.rc | Bin 42194 -> 42170 bytes 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index ffe78e0cdb..9eb3924a72 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -259,7 +259,15 @@ namespace MainWindow MENU_EMULATION = 1, MENU_DEBUG = 2, MENU_OPTIONS = 3, - MENU_HELP = 4 + MENU_HELP = 4, + + SUBMENU_RENDERING_BACKEND = 7, + + SUBMENU_RENDERING_RESOLUTION = 4, + SUBMENU_RENDERING_MODE = 5, + SUBMENU_FRAME_SKIPPING = 6, + SUBMENU_TEXTURE_FILTERING = 7, + SUBMENU_TEXTURE_SCALING = 8, }; void TranslateMenuHeaders() { @@ -287,6 +295,37 @@ namespace MainWindow key = d->T("Help"); translated = ConvertUTF8ToWString(key); ModifyMenu(menu, MENU_HELP, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + // Now do submenu(popups) headers. + HMENU subMenu; + subMenu = GetSubMenu(menu, MENU_DEBUG); + key = d->T("Rendering Backend"); + translated = ConvertUTF8ToWString(key); + ModifyMenu(subMenu, SUBMENU_RENDERING_BACKEND, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + subMenu = GetSubMenu(menu, MENU_OPTIONS); + key = g->T("Rendering Resolution"); + translated = ConvertUTF8ToWString(key); + translated.append(L"\tCtrl+1"); + ModifyMenu(subMenu, SUBMENU_FRAME_SKIPPING, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + key = g->T("Frame Skipping"); + translated = ConvertUTF8ToWString(key); + translated.append(L"\tF7"); + ModifyMenu(subMenu, SUBMENU_FRAME_SKIPPING, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + key = g->T("Rendering Mode"); + translated = ConvertUTF8ToWString(key); + translated.append(L"\tF5"); + ModifyMenu(subMenu, SUBMENU_RENDERING_MODE, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + key = g->T("Texture Filtering"); + translated = ConvertUTF8ToWString(key); + ModifyMenu(subMenu, SUBMENU_TEXTURE_FILTERING, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + + key = g->T("Texture Scaling"); + translated = ConvertUTF8ToWString(key); + ModifyMenu(subMenu, SUBMENU_TEXTURE_SCALING, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); } void TranslateMenuItem(const int menuID, const char *category, const bool enabled = true, const bool checked = false, const std::wstring& accelerator = L"") { @@ -329,7 +368,7 @@ namespace MainWindow TranslateMenuItem(ID_EMULATION_RESET, desktopUI, false, false, L"\tCtrl+B"); TranslateMenuItem(ID_EMULATION_RUNONLOAD, desktopUI); TranslateMenuItem(ID_EMULATION_SOUND, audio, true, true); - TranslateMenuItem(ID_EMULATION_ATRAC3_SOUND, audio); + TranslateMenuItem(ID_EMULATION_ATRAC3_SOUND, audio, true, false); TranslateMenuItem(ID_EMULATION_CHEATS, system); TranslateMenuItem(ID_EMULATION_RENDER_MODE_OGL, graphics, true, true); TranslateMenuItem(ID_EMULATION_RENDER_MODE_SOFT, graphics); @@ -343,23 +382,23 @@ namespace MainWindow TranslateMenuItem(ID_DEBUG_SAVEMAPFILE, desktopUI); TranslateMenuItem(ID_DEBUG_RESETSYMBOLTABLE, desktopUI); TranslateMenuItem(ID_DEBUG_DUMPNEXTFRAME, graphics); - TranslateMenuItem(ID_DEBUG_TAKESCREENSHOT, desktopUI, "\tF12"); - TranslateMenuItem(ID_DEBUG_DISASSEMBLY, desktopUI, "\tCtrl+D"); - TranslateMenuItem(ID_DEBUG_LOG, desktopUI, "\tCtrl+L"); - TranslateMenuItem(ID_DEBUG_MEMORYVIEW, desktopUI, "\tCtrl+M"); + TranslateMenuItem(ID_DEBUG_TAKESCREENSHOT, desktopUI, true, false, L"\tF12"); + TranslateMenuItem(ID_DEBUG_DISASSEMBLY, desktopUI, true, false, L"\tCtrl+D"); + TranslateMenuItem(ID_DEBUG_LOG, desktopUI, true, false, L"\tCtrl+L"); + TranslateMenuItem(ID_DEBUG_MEMORYVIEW, desktopUI, L"\tCtrl+M"); // Options menu TranslateMenuItem(ID_OPTIONS_FULLSCREEN, graphics, true, false, L"\tAlt+Return, F11"); TranslateMenuItem(ID_OPTIONS_TOPMOST, desktopUI); TranslateMenuItem(ID_OPTIONS_STRETCHDISPLAY, graphics); - TranslateMenuItem(ID_OPTIONS_SCREEN1X, desktopUI, true, false, L"\tCtrl+1"); - TranslateMenuItem(ID_OPTIONS_SCREEN2X, desktopUI, true, true, L"\tCtrl+1"); - TranslateMenuItem(ID_OPTIONS_SCREEN3X, desktopUI, true, false, L"\tCtrl+1"); - TranslateMenuItem(ID_OPTIONS_SCREEN4X, desktopUI, true, false, L"\tCtrl+1"); - TranslateMenuItem(ID_OPTIONS_NONBUFFEREDRENDERING, graphics, true, false, L"\tF5"); - TranslateMenuItem(ID_OPTIONS_BUFFEREDRENDERING, graphics, true, true, L"\tF5"); - TranslateMenuItem(ID_OPTIONS_READFBOTOMEMORYCPU, graphics, true, false, L"\tF5"); - TranslateMenuItem(ID_OPTIONS_READFBOTOMEMORYGPU, graphics, true, false, L"\tF5"); + TranslateMenuItem(ID_OPTIONS_SCREEN1X, desktopUI, true, false); + TranslateMenuItem(ID_OPTIONS_SCREEN2X, desktopUI, true, true); + TranslateMenuItem(ID_OPTIONS_SCREEN3X, desktopUI, true, false); + TranslateMenuItem(ID_OPTIONS_SCREEN4X, desktopUI, true, false); + TranslateMenuItem(ID_OPTIONS_NONBUFFEREDRENDERING, graphics, true, false); + TranslateMenuItem(ID_OPTIONS_BUFFEREDRENDERING, graphics, true, true); + TranslateMenuItem(ID_OPTIONS_READFBOTOMEMORYCPU, graphics, true, false); + TranslateMenuItem(ID_OPTIONS_READFBOTOMEMORYGPU, graphics, true, false); TranslateMenuItem(ID_OPTIONS_FRAMESKIP_0, graphics); TranslateMenuItem(ID_OPTIONS_FRAMESKIP_AUTO, graphics); // Skip frameskipping 2-8.. @@ -1277,7 +1316,6 @@ namespace MainWindow // Hack: I can't seem to get the menu to translate without an event occurring. // This seems like the best spot to guarantee translation... TranslateMenus(); - UINT dwSize; GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER)); if (!rawInputBuffer) { diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index 8afc085383ebb6e51a5755c7bc6b8ba5ee96687e..f0aab79042f480c4c0164c8c3d870f662d6be157 100644 GIT binary patch delta 26 icmca~l4;jTrVSFMla1uWCLd_9T3k`ey1Ah$NDBa;!V4q- delta 50 zcmdmWlIhY(rVSFM{4oqA49-AY#E`?F&0sirVng8Kj8ay1khmLz`Q+W@#+zqVDQE!z Dp?VMp From 64984c59912d9acb4e3de7d048269d2cc5e8a7c2 Mon Sep 17 00:00:00 2001 From: The Dax Date: Thu, 29 Aug 2013 17:27:46 -0400 Subject: [PATCH 3/6] Use a timer to translate PPSSPP, then turn it off. --- Windows/WndMainWindow.cpp | 16 +++++++++------- Windows/ppsspp.rc | Bin 42170 -> 42170 bytes 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 9eb3924a72..33af409bcc 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -78,6 +78,7 @@ extern InputState input_state; #define TIMER_CURSORUPDATE 1 #define TIMER_CURSORMOVEUPDATE 2 +#define TIMER_TRANSLATE 3 #define CURSORUPDATE_INTERVAL_MS 50 #define CURSORUPDATE_MOVE_TIMESPAN_MS 500 @@ -288,7 +289,7 @@ namespace MainWindow translated = ConvertUTF8ToWString(key); ModifyMenu(menu, MENU_DEBUG, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - key = p->T("Settings"); + key = p->T("Game Settings"); translated = ConvertUTF8ToWString(key); ModifyMenu(menu, MENU_OPTIONS, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); @@ -407,8 +408,7 @@ namespace MainWindow TranslateMenuItem(ID_OPTIONS_LINEARFILTERING, graphics); TranslateMenuItem(ID_OPTIONS_LINEARFILTERING_CG, graphics); TranslateMenuItem(ID_TEXTURESCALING_OFF, graphics); - TranslateMenuItem(ID_TEXTURESCALING_2X, desktopUI); - TranslateMenuItem(ID_TEXTURESCALING_3X, desktopUI); + // Skip texture scaling 2x/3x.. TranslateMenuItem(ID_TEXTURESCALING_4X, desktopUI); TranslateMenuItem(ID_TEXTURESCALING_5X, desktopUI); TranslateMenuItem(ID_TEXTURESCALING_XBRZ, graphics); @@ -554,7 +554,7 @@ namespace MainWindow hideCursor = true; SetTimer(hwndMain, TIMER_CURSORUPDATE, CURSORUPDATE_INTERVAL_MS, 0); - + Update(); if(g_Config.bFullScreenOnLaunch) @@ -581,6 +581,7 @@ namespace MainWindow RegisterRawInputDevices(dev, 2, sizeof(RAWINPUTDEVICE)); SetFocus(hwndDisplay); + SetTimer(hwndMain, TIMER_TRANSLATE, CURSORUPDATE_INTERVAL_MS, 0); return TRUE; } @@ -837,6 +838,10 @@ namespace MainWindow hideCursor = true; KillTimer(hWnd, TIMER_CURSORMOVEUPDATE); return 0; + case TIMER_TRANSLATE: + KillTimer(hWnd, TIMER_TRANSLATE); + TranslateMenus(); + return 0; } break; @@ -1313,9 +1318,6 @@ namespace MainWindow case WM_INPUT: { - // Hack: I can't seem to get the menu to translate without an event occurring. - // This seems like the best spot to guarantee translation... - TranslateMenus(); UINT dwSize; GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER)); if (!rawInputBuffer) { diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index f0aab79042f480c4c0164c8c3d870f662d6be157..d69d09655a5e0f24f0fd19d372b80e32a3018cc9 100644 GIT binary patch delta 16 XcmdmWl4;jTrVS14jJcZ|+bv}QL|X?z delta 16 XcmdmWl4;jTrVS14jJ}&2+bv}QLz@R7 From a42b7801419e542793b6a5c6e8674c8878780b8d Mon Sep 17 00:00:00 2001 From: The Dax Date: Thu, 29 Aug 2013 17:35:01 -0400 Subject: [PATCH 4/6] Change a few menu texts so that they don't need to be translated. --- Windows/WndMainWindow.cpp | 4 +--- Windows/ppsspp.rc | Bin 42170 -> 41820 bytes 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index 33af409bcc..c1652f4e09 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -408,9 +408,7 @@ namespace MainWindow TranslateMenuItem(ID_OPTIONS_LINEARFILTERING, graphics); TranslateMenuItem(ID_OPTIONS_LINEARFILTERING_CG, graphics); TranslateMenuItem(ID_TEXTURESCALING_OFF, graphics); - // Skip texture scaling 2x/3x.. - TranslateMenuItem(ID_TEXTURESCALING_4X, desktopUI); - TranslateMenuItem(ID_TEXTURESCALING_5X, desktopUI); + // Skip texture scaling 2x-5x... TranslateMenuItem(ID_TEXTURESCALING_XBRZ, graphics); TranslateMenuItem(ID_TEXTURESCALING_HYBRID, graphics); TranslateMenuItem(ID_TEXTURESCALING_BICUBIC, graphics); diff --git a/Windows/ppsspp.rc b/Windows/ppsspp.rc index d69d09655a5e0f24f0fd19d372b80e32a3018cc9..1fa2c5613a3b5bf039827c5743a7f6609a73485c 100644 GIT binary patch delta 64 zcmdmWlIhMdrVUTBHy7pn;+VXtOlR_;Qj5t^ja-xWlqpRPD6^P+2F#8E$!*Rlzr;29 RQj^K#jwXxEmzrKE0st9)ANK$N delta 202 zcmca}jA_?NrVUTBWjz`47)lsY8HyMRfH)P(R$|a$;AG&O%*d`fdBG$hX=jE2hERrh z22Tb*h7bl;k2D!;LjTV9+6`4R+7BeIQ$y9{w<`s=w F6agHKIF Date: Thu, 29 Aug 2013 18:27:11 -0400 Subject: [PATCH 5/6] Tidy the code. --- Windows/WndMainWindow.cpp | 98 ++++++++++++++------------------------- 1 file changed, 34 insertions(+), 64 deletions(-) diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index c1652f4e09..f87782b9f7 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -79,6 +79,7 @@ extern InputState input_state; #define TIMER_CURSORUPDATE 1 #define TIMER_CURSORMOVEUPDATE 2 #define TIMER_TRANSLATE 3 +#define TRANSLATE_INTERVAL_MS 100 #define CURSORUPDATE_INTERVAL_MS 50 #define CURSORUPDATE_MOVE_TIMESPAN_MS 500 @@ -255,7 +256,9 @@ namespace MainWindow return retVal; } - enum { + // These are used as an offset + // to determine which menu item to change. + enum MenuID{ MENU_FILE = 0, MENU_EMULATION = 1, MENU_DEBUG = 2, @@ -271,66 +274,25 @@ namespace MainWindow SUBMENU_TEXTURE_SCALING = 8, }; - void TranslateMenuHeaders() { - I18NCategory *d = GetI18NCategory("DesktopUI"); - I18NCategory *g = GetI18NCategory("Graphics"); - I18NCategory *p = GetI18NCategory("Pause"); + void TranslateMenuHeader(HMENU menu, const char *category, const char *key, const MenuID id, const std::wstring& accelerator = L"") { + I18NCategory *c = GetI18NCategory(category); + std::string s_key = c->T(key); + std::wstring translated = ConvertUTF8ToWString(s_key); + translated.append(accelerator); + ModifyMenu(menu, id, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + } - std::string key = d->T("File"); - std::wstring translated = ConvertUTF8ToWString(key); - - ModifyMenu(menu, MENU_FILE, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - key = d->T("Emulation"); - translated = ConvertUTF8ToWString(key); - ModifyMenu(menu, MENU_EMULATION, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - key = g->T("Debugging"); - translated = ConvertUTF8ToWString(key); - ModifyMenu(menu, MENU_DEBUG, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - key = p->T("Game Settings"); - translated = ConvertUTF8ToWString(key); - ModifyMenu(menu, MENU_OPTIONS, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - key = d->T("Help"); - translated = ConvertUTF8ToWString(key); - ModifyMenu(menu, MENU_HELP, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - // Now do submenu(popups) headers. + void TranslateSubMenuHeader(HMENU menu, const char *category, const char *key, MenuID mainMenuID, MenuID subMenuID, const std::wstring& accelerator = L"") { HMENU subMenu; - subMenu = GetSubMenu(menu, MENU_DEBUG); - key = d->T("Rendering Backend"); - translated = ConvertUTF8ToWString(key); - ModifyMenu(subMenu, SUBMENU_RENDERING_BACKEND, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - subMenu = GetSubMenu(menu, MENU_OPTIONS); - key = g->T("Rendering Resolution"); - translated = ConvertUTF8ToWString(key); - translated.append(L"\tCtrl+1"); - ModifyMenu(subMenu, SUBMENU_FRAME_SKIPPING, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - key = g->T("Frame Skipping"); - translated = ConvertUTF8ToWString(key); - translated.append(L"\tF7"); - ModifyMenu(subMenu, SUBMENU_FRAME_SKIPPING, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - key = g->T("Rendering Mode"); - translated = ConvertUTF8ToWString(key); - translated.append(L"\tF5"); - ModifyMenu(subMenu, SUBMENU_RENDERING_MODE, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - key = g->T("Texture Filtering"); - translated = ConvertUTF8ToWString(key); - ModifyMenu(subMenu, SUBMENU_TEXTURE_FILTERING, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); - - key = g->T("Texture Scaling"); - translated = ConvertUTF8ToWString(key); - ModifyMenu(subMenu, SUBMENU_TEXTURE_SCALING, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); + subMenu = GetSubMenu(menu, mainMenuID); + I18NCategory *c = GetI18NCategory(category); + std::string s_key = c->T(key); + std::wstring translated = ConvertUTF8ToWString(s_key); + translated.append(accelerator); + ModifyMenu(subMenu, subMenuID, MF_BYPOSITION | MF_STRING, 0, translated.c_str()); } void TranslateMenuItem(const int menuID, const char *category, const bool enabled = true, const bool checked = false, const std::wstring& accelerator = L"") { - if(menusAreTranslated) return; I18NCategory *c = GetI18NCategory(category); std::string key = c->T(GetMenuItemText(menuID).c_str()); std::wstring translated = ConvertUTF8ToWString(key); @@ -430,7 +392,18 @@ namespace MainWindow TranslateMenuItem(ID_HELP_BUYGOLD, general); TranslateMenuItem(ID_HELP_ABOUT, desktopUI); - TranslateMenuHeaders(); + // Now do the menu headers and a few submenus... + TranslateMenuHeader(menu, desktopUI, "File", MENU_FILE); + TranslateMenuHeader(menu, desktopUI, "Emulation", MENU_EMULATION); + TranslateMenuHeader(menu, graphics, "Debugging", MENU_DEBUG); + TranslateMenuHeader(menu, pause, "Game Settings", MENU_OPTIONS); + TranslateMenuHeader(menu, desktopUI, "Help", MENU_HELP); + + TranslateSubMenuHeader(menu, desktopUI, "Rendering Backend", MENU_DEBUG, SUBMENU_RENDERING_BACKEND, L"\tCtrl+1"); + TranslateSubMenuHeader(menu, graphics, "Frame Skipping", MENU_DEBUG, SUBMENU_FRAME_SKIPPING, L"\tF7"); + TranslateSubMenuHeader(menu, graphics, "Texture Filtering", MENU_DEBUG, SUBMENU_TEXTURE_FILTERING, L"\tF5"); + TranslateSubMenuHeader(menu, graphics, "Texture Scaling", MENU_DEBUG, SUBMENU_TEXTURE_SCALING); + menusAreTranslated = true; DrawMenuBar(hwndMain); } @@ -532,6 +505,7 @@ namespace MainWindow return FALSE; menu = GetMenu(hwndMain); + #ifdef FINAL RemoveMenu(menu,2,MF_BYPOSITION); RemoveMenu(menu,2,MF_BYPOSITION); @@ -579,7 +553,7 @@ namespace MainWindow RegisterRawInputDevices(dev, 2, sizeof(RAWINPUTDEVICE)); SetFocus(hwndDisplay); - SetTimer(hwndMain, TIMER_TRANSLATE, CURSORUPDATE_INTERVAL_MS, 0); + SetTimer(hwndMain, TIMER_TRANSLATE, TRANSLATE_INTERVAL_MS, 0); return TRUE; } @@ -836,6 +810,7 @@ namespace MainWindow hideCursor = true; KillTimer(hWnd, TIMER_CURSORMOVEUPDATE); return 0; + case TIMER_TRANSLATE: KillTimer(hWnd, TIMER_TRANSLATE); TranslateMenus(); @@ -1140,12 +1115,7 @@ namespace MainWindow break; case ID_CPU_DYNAREC: - g_Config.bJit = true; - osm.ShowOnOff(g->T("Dynarec", "Dynarec (JIT)"), g_Config.bJit); - break; - - case ID_CPU_INTERPRETER: - g_Config.bJit = false; + g_Config.bJit = !g_Config.bJit; break; case ID_CPU_MULTITHREADED: From 5120a6ee7388eb32a14bd4fb2c4e85fce4af8f2f Mon Sep 17 00:00:00 2001 From: The Dax Date: Thu, 29 Aug 2013 18:57:11 -0400 Subject: [PATCH 6/6] Fix some incorrect things. --- Windows/WndMainWindow.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Windows/WndMainWindow.cpp b/Windows/WndMainWindow.cpp index f87782b9f7..200508bae9 100644 --- a/Windows/WndMainWindow.cpp +++ b/Windows/WndMainWindow.cpp @@ -399,10 +399,12 @@ namespace MainWindow TranslateMenuHeader(menu, pause, "Game Settings", MENU_OPTIONS); TranslateMenuHeader(menu, desktopUI, "Help", MENU_HELP); - TranslateSubMenuHeader(menu, desktopUI, "Rendering Backend", MENU_DEBUG, SUBMENU_RENDERING_BACKEND, L"\tCtrl+1"); - TranslateSubMenuHeader(menu, graphics, "Frame Skipping", MENU_DEBUG, SUBMENU_FRAME_SKIPPING, L"\tF7"); - TranslateSubMenuHeader(menu, graphics, "Texture Filtering", MENU_DEBUG, SUBMENU_TEXTURE_FILTERING, L"\tF5"); - TranslateSubMenuHeader(menu, graphics, "Texture Scaling", MENU_DEBUG, SUBMENU_TEXTURE_SCALING); + TranslateSubMenuHeader(menu, desktopUI, "Rendering Backend", MENU_EMULATION, SUBMENU_RENDERING_BACKEND, L"\tCtrl+1"); + TranslateSubMenuHeader(menu, graphics, "Rendering Resolution", MENU_OPTIONS, SUBMENU_RENDERING_RESOLUTION); + TranslateSubMenuHeader(menu, graphics, "Rendering Mode", MENU_OPTIONS, SUBMENU_RENDERING_MODE); + TranslateSubMenuHeader(menu, graphics, "Frame Skipping", MENU_OPTIONS, SUBMENU_FRAME_SKIPPING, L"\tF7"); + TranslateSubMenuHeader(menu, graphics, "Texture Filtering", MENU_OPTIONS, SUBMENU_TEXTURE_FILTERING, L"\tF5"); + TranslateSubMenuHeader(menu, graphics, "Texture Scaling", MENU_OPTIONS, SUBMENU_TEXTURE_SCALING); menusAreTranslated = true; DrawMenuBar(hwndMain);