fully functional Cocoa keybinding menu

This commit is contained in:
Struma 2021-02-17 20:15:04 -05:00 committed by Roza
parent 306ffa6352
commit 40ed422c3d
8 changed files with 440 additions and 63 deletions

View file

@ -60,7 +60,6 @@
3B10EDB82568E95E00372D13 /* soundemitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED652568E95D00372D13 /* soundemitter.cpp */; }; 3B10EDB82568E95E00372D13 /* soundemitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED652568E95D00372D13 /* soundemitter.cpp */; };
3B10EDB92568E95E00372D13 /* audiostream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED662568E95D00372D13 /* audiostream.cpp */; }; 3B10EDB92568E95E00372D13 /* audiostream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED662568E95D00372D13 /* audiostream.cpp */; };
3B10EDBA2568E95E00372D13 /* vorbissource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED6A2568E95D00372D13 /* vorbissource.cpp */; }; 3B10EDBA2568E95E00372D13 /* vorbissource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED6A2568E95D00372D13 /* vorbissource.cpp */; };
3B10EDBB2568E95E00372D13 /* settingsmenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED6E2568E95D00372D13 /* settingsmenu.cpp */; };
3B10EDBC2568E95E00372D13 /* windowvx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED722568E95D00372D13 /* windowvx.cpp */; }; 3B10EDBC2568E95E00372D13 /* windowvx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED722568E95D00372D13 /* windowvx.cpp */; };
3B10EDBD2568E95E00372D13 /* bitmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED732568E95D00372D13 /* bitmap.cpp */; }; 3B10EDBD2568E95E00372D13 /* bitmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED732568E95D00372D13 /* bitmap.cpp */; };
3B10EDBE2568E95E00372D13 /* window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED742568E95D00372D13 /* window.cpp */; }; 3B10EDBE2568E95E00372D13 /* window.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED742568E95D00372D13 /* window.cpp */; };
@ -155,7 +154,6 @@
3B1C239B25A19C600075EF5D /* keybindings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED472568E95D00372D13 /* keybindings.cpp */; }; 3B1C239B25A19C600075EF5D /* keybindings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED472568E95D00372D13 /* keybindings.cpp */; };
3B1C239C25A19C600075EF5D /* filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED542568E95D00372D13 /* filesystem.cpp */; }; 3B1C239C25A19C600075EF5D /* filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED542568E95D00372D13 /* filesystem.cpp */; };
3B1C239D25A19C600075EF5D /* binding-mri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10EDF02568E96A00372D13 /* binding-mri.cpp */; }; 3B1C239D25A19C600075EF5D /* binding-mri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10EDF02568E96A00372D13 /* binding-mri.cpp */; };
3B1C239E25A19C600075EF5D /* settingsmenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED6E2568E95D00372D13 /* settingsmenu.cpp */; };
3B1C239F25A19C600075EF5D /* eventthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED352568E95D00372D13 /* eventthread.cpp */; }; 3B1C239F25A19C600075EF5D /* eventthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED352568E95D00372D13 /* eventthread.cpp */; };
3B1C23A025A19C600075EF5D /* viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED9E2568E95E00372D13 /* viewport.cpp */; }; 3B1C23A025A19C600075EF5D /* viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED9E2568E95E00372D13 /* viewport.cpp */; };
3B1C23A125A19C600075EF5D /* gl-debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED832568E95E00372D13 /* gl-debug.cpp */; }; 3B1C23A125A19C600075EF5D /* gl-debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED832568E95E00372D13 /* gl-debug.cpp */; };
@ -240,6 +238,10 @@
3B3F7D2C25B1A73A00EA5F1C /* SettingsMenuController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3B3F7D2925B1A73A00EA5F1C /* SettingsMenuController.mm */; }; 3B3F7D2C25B1A73A00EA5F1C /* SettingsMenuController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3B3F7D2925B1A73A00EA5F1C /* SettingsMenuController.mm */; };
3B3F7D2D25B1A73A00EA5F1C /* SettingsMenuController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3B3F7D2925B1A73A00EA5F1C /* SettingsMenuController.mm */; }; 3B3F7D2D25B1A73A00EA5F1C /* SettingsMenuController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3B3F7D2925B1A73A00EA5F1C /* SettingsMenuController.mm */; };
3B426F77256BA847009EA00F /* libsigc-2.0.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B426F76256BA847009EA00F /* libsigc-2.0.a */; }; 3B426F77256BA847009EA00F /* libsigc-2.0.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B426F76256BA847009EA00F /* libsigc-2.0.a */; };
3B480E9D25DCD166001686B4 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B480E9C25DCD166001686B4 /* GameController.framework */; };
3B480E9F25DCD174001686B4 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B480E9E25DCD16D001686B4 /* GameController.framework */; };
3B480EA025DCD175001686B4 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B480E9E25DCD16D001686B4 /* GameController.framework */; };
3B480EA125DCD176001686B4 /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B480E9E25DCD16D001686B4 /* GameController.framework */; };
3B522DA9259BAA42003301C4 /* libfluidsynth.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3B522DA9259BAA42003301C4 /* libfluidsynth.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
3B522DAA259BAA4A003301C4 /* libfluidsynth.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3B522DAA259BAA4A003301C4 /* libfluidsynth.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
3B522DAB259BAA4C003301C4 /* libfluidsynth.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3B522DAB259BAA4C003301C4 /* libfluidsynth.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
@ -318,7 +320,6 @@
3BC65CF32584EDC60063AFF1 /* keybindings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED472568E95D00372D13 /* keybindings.cpp */; }; 3BC65CF32584EDC60063AFF1 /* keybindings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED472568E95D00372D13 /* keybindings.cpp */; };
3BC65CF42584EDC60063AFF1 /* filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED542568E95D00372D13 /* filesystem.cpp */; }; 3BC65CF42584EDC60063AFF1 /* filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED542568E95D00372D13 /* filesystem.cpp */; };
3BC65CF52584EDC60063AFF1 /* binding-mri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10EDF02568E96A00372D13 /* binding-mri.cpp */; }; 3BC65CF52584EDC60063AFF1 /* binding-mri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10EDF02568E96A00372D13 /* binding-mri.cpp */; };
3BC65CF62584EDC60063AFF1 /* settingsmenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED6E2568E95D00372D13 /* settingsmenu.cpp */; };
3BC65CF72584EDC60063AFF1 /* eventthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED352568E95D00372D13 /* eventthread.cpp */; }; 3BC65CF72584EDC60063AFF1 /* eventthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED352568E95D00372D13 /* eventthread.cpp */; };
3BC65CF82584EDC60063AFF1 /* viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED9E2568E95E00372D13 /* viewport.cpp */; }; 3BC65CF82584EDC60063AFF1 /* viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED9E2568E95E00372D13 /* viewport.cpp */; };
3BC65CF92584EDC60063AFF1 /* gl-debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED832568E95E00372D13 /* gl-debug.cpp */; }; 3BC65CF92584EDC60063AFF1 /* gl-debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED832568E95E00372D13 /* gl-debug.cpp */; };
@ -413,7 +414,6 @@
3BC65DB42584F3AD0063AFF1 /* keybindings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED472568E95D00372D13 /* keybindings.cpp */; }; 3BC65DB42584F3AD0063AFF1 /* keybindings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED472568E95D00372D13 /* keybindings.cpp */; };
3BC65DB52584F3AD0063AFF1 /* filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED542568E95D00372D13 /* filesystem.cpp */; }; 3BC65DB52584F3AD0063AFF1 /* filesystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED542568E95D00372D13 /* filesystem.cpp */; };
3BC65DB62584F3AD0063AFF1 /* binding-mri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10EDF02568E96A00372D13 /* binding-mri.cpp */; }; 3BC65DB62584F3AD0063AFF1 /* binding-mri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10EDF02568E96A00372D13 /* binding-mri.cpp */; };
3BC65DB72584F3AD0063AFF1 /* settingsmenu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED6E2568E95D00372D13 /* settingsmenu.cpp */; };
3BC65DB82584F3AD0063AFF1 /* eventthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED352568E95D00372D13 /* eventthread.cpp */; }; 3BC65DB82584F3AD0063AFF1 /* eventthread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED352568E95D00372D13 /* eventthread.cpp */; };
3BC65DB92584F3AD0063AFF1 /* viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED9E2568E95E00372D13 /* viewport.cpp */; }; 3BC65DB92584F3AD0063AFF1 /* viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED9E2568E95E00372D13 /* viewport.cpp */; };
3BC65DBA2584F3AD0063AFF1 /* gl-debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED832568E95E00372D13 /* gl-debug.cpp */; }; 3BC65DBA2584F3AD0063AFF1 /* gl-debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10ED832568E95E00372D13 /* gl-debug.cpp */; };
@ -953,6 +953,9 @@
3B426F6F256B8AC0009EA00F /* fs_impl.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = fs_impl.hpp; sourceTree = "<group>"; }; 3B426F6F256B8AC0009EA00F /* fs_impl.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = fs_impl.hpp; sourceTree = "<group>"; };
3B426F70256B8AC0009EA00F /* fs_std_fwd.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = fs_std_fwd.hpp; sourceTree = "<group>"; }; 3B426F70256B8AC0009EA00F /* fs_std_fwd.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = fs_std_fwd.hpp; sourceTree = "<group>"; };
3B426F76256BA847009EA00F /* libsigc-2.0.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libsigc-2.0.a"; path = "Dependencies/build-macosx-x86_64/lib/libsigc-2.0.a"; sourceTree = "<group>"; }; 3B426F76256BA847009EA00F /* libsigc-2.0.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libsigc-2.0.a"; path = "Dependencies/build-macosx-x86_64/lib/libsigc-2.0.a"; sourceTree = "<group>"; };
3B480E9325DCBDD6001686B4 /* sdl_codes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = sdl_codes.h; path = views/sdl_codes.h; sourceTree = "<group>"; };
3B480E9C25DCD166001686B4 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
3B480E9E25DCD16D001686B4 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = System/Library/Frameworks/GameController.framework; sourceTree = SDKROOT; };
3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfluidsynth.dylib; path = Dependencies/Frameworks/libfluidsynth.dylib; sourceTree = "<group>"; }; 3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfluidsynth.dylib; path = Dependencies/Frameworks/libfluidsynth.dylib; sourceTree = "<group>"; };
3B522DB2259BC037003301C4 /* net.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = net.h; sourceTree = "<group>"; }; 3B522DB2259BC037003301C4 /* net.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = net.h; sourceTree = "<group>"; };
3B522DBD259BD046003301C4 /* httplib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = httplib.h; sourceTree = "<group>"; }; 3B522DBD259BD046003301C4 /* httplib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = httplib.h; sourceTree = "<group>"; };
@ -1089,6 +1092,7 @@
3B1C23D825A19C600075EF5D /* CoreVideo.framework in Frameworks */, 3B1C23D825A19C600075EF5D /* CoreVideo.framework in Frameworks */,
3B1C23D925A19C600075EF5D /* CoreGraphics.framework in Frameworks */, 3B1C23D925A19C600075EF5D /* CoreGraphics.framework in Frameworks */,
3B1C23DA25A19C600075EF5D /* libbz2.tbd in Frameworks */, 3B1C23DA25A19C600075EF5D /* libbz2.tbd in Frameworks */,
3B480EA125DCD176001686B4 /* GameController.framework in Frameworks */,
3B1C23DB25A19C600075EF5D /* libruby.3.0.dylib in Frameworks */, 3B1C23DB25A19C600075EF5D /* libruby.3.0.dylib in Frameworks */,
3B1C23DC25A19C600075EF5D /* CoreAudio.framework in Frameworks */, 3B1C23DC25A19C600075EF5D /* CoreAudio.framework in Frameworks */,
3B1C23DD25A19C600075EF5D /* AudioToolbox.framework in Frameworks */, 3B1C23DD25A19C600075EF5D /* AudioToolbox.framework in Frameworks */,
@ -1140,6 +1144,7 @@
3B5E1F1125A881FB0086FFDC /* libGLESv2.dylib in Frameworks */, 3B5E1F1125A881FB0086FFDC /* libGLESv2.dylib in Frameworks */,
3BC65D342584EDC60063AFF1 /* Foundation.framework in Frameworks */, 3BC65D342584EDC60063AFF1 /* Foundation.framework in Frameworks */,
3B1C230725A142620075EF5D /* libruby.3.0.dylib in Frameworks */, 3B1C230725A142620075EF5D /* libruby.3.0.dylib in Frameworks */,
3B480EA025DCD175001686B4 /* GameController.framework in Frameworks */,
3BC65D612584EED10063AFF1 /* libogg.a in Frameworks */, 3BC65D612584EED10063AFF1 /* libogg.a in Frameworks */,
3BC65D352584EDC60063AFF1 /* CoreFoundation.framework in Frameworks */, 3BC65D352584EDC60063AFF1 /* CoreFoundation.framework in Frameworks */,
3BC65D362584EDC60063AFF1 /* libz.tbd in Frameworks */, 3BC65D362584EDC60063AFF1 /* libz.tbd in Frameworks */,
@ -1182,6 +1187,7 @@
3B5E1F0F25A881FB0086FFDC /* libGLESv2.dylib in Frameworks */, 3B5E1F0F25A881FB0086FFDC /* libGLESv2.dylib in Frameworks */,
3BC65E212584F4290063AFF1 /* libopenal.a in Frameworks */, 3BC65E212584F4290063AFF1 /* libopenal.a in Frameworks */,
3B1C230E25A144BF0075EF5D /* libruby.3.0.dylib in Frameworks */, 3B1C230E25A144BF0075EF5D /* libruby.3.0.dylib in Frameworks */,
3B480E9D25DCD166001686B4 /* GameController.framework in Frameworks */,
3BC65DFF2584F3AD0063AFF1 /* Foundation.framework in Frameworks */, 3BC65DFF2584F3AD0063AFF1 /* Foundation.framework in Frameworks */,
3BC65E242584F4290063AFF1 /* libvorbisfile.a in Frameworks */, 3BC65E242584F4290063AFF1 /* libvorbisfile.a in Frameworks */,
3BC65E012584F3AD0063AFF1 /* CoreFoundation.framework in Frameworks */, 3BC65E012584F3AD0063AFF1 /* CoreFoundation.framework in Frameworks */,
@ -1223,6 +1229,7 @@
3B10EC612568D40C00372D13 /* CoreVideo.framework in Frameworks */, 3B10EC612568D40C00372D13 /* CoreVideo.framework in Frameworks */,
3B10EC5C2568D40500372D13 /* CoreGraphics.framework in Frameworks */, 3B10EC5C2568D40500372D13 /* CoreGraphics.framework in Frameworks */,
3BE081592568D3A60006849F /* libbz2.tbd in Frameworks */, 3BE081592568D3A60006849F /* libbz2.tbd in Frameworks */,
3B480E9F25DCD174001686B4 /* GameController.framework in Frameworks */,
3B1C230B25A144A10075EF5D /* libruby.3.0.dylib in Frameworks */, 3B1C230B25A144A10075EF5D /* libruby.3.0.dylib in Frameworks */,
3B10EC632568D40C00372D13 /* CoreAudio.framework in Frameworks */, 3B10EC632568D40C00372D13 /* CoreAudio.framework in Frameworks */,
3BA08E9B256638C900449CFF /* AudioToolbox.framework in Frameworks */, 3BA08E9B256638C900449CFF /* AudioToolbox.framework in Frameworks */,
@ -1571,6 +1578,7 @@
3B3F7D1725B19DEC00EA5F1C /* settingsmenu.xib */, 3B3F7D1725B19DEC00EA5F1C /* settingsmenu.xib */,
3B3F7D2925B1A73A00EA5F1C /* SettingsMenuController.mm */, 3B3F7D2925B1A73A00EA5F1C /* SettingsMenuController.mm */,
3B3F7D3025B1A79F00EA5F1C /* SettingsMenuController.h */, 3B3F7D3025B1A79F00EA5F1C /* SettingsMenuController.h */,
3B480E9325DCBDD6001686B4 /* sdl_codes.h */,
); );
name = MacOS; name = MacOS;
sourceTree = "<group>"; sourceTree = "<group>";
@ -1686,6 +1694,7 @@
3BD2B46425651BEB003DAD8A /* System */ = { 3BD2B46425651BEB003DAD8A /* System */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
3B480E9E25DCD16D001686B4 /* GameController.framework */,
3BD2B47A256534BA003DAD8A /* IOKit.framework */, 3BD2B47A256534BA003DAD8A /* IOKit.framework */,
3BE081552568D3A60006849F /* Carbon.framework */, 3BE081552568D3A60006849F /* Carbon.framework */,
3BE081582568D3A60006849F /* AppKit.framework */, 3BE081582568D3A60006849F /* AppKit.framework */,
@ -1746,6 +1755,7 @@
3BDB23E5256455A400C4A63D /* Frameworks */ = { 3BDB23E5256455A400C4A63D /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
3B480E9C25DCD166001686B4 /* GameController.framework */,
3B1C241F25A1A84D0075EF5D /* Steam */, 3B1C241F25A1A84D0075EF5D /* Steam */,
3BC65D792584F3030063AFF1 /* Universal */, 3BC65D792584F3030063AFF1 /* Universal */,
3BC65D492584EE690063AFF1 /* ARM64 */, 3BC65D492584EE690063AFF1 /* ARM64 */,
@ -2058,7 +2068,6 @@
3B1C239B25A19C600075EF5D /* keybindings.cpp in Sources */, 3B1C239B25A19C600075EF5D /* keybindings.cpp in Sources */,
3B1C239C25A19C600075EF5D /* filesystem.cpp in Sources */, 3B1C239C25A19C600075EF5D /* filesystem.cpp in Sources */,
3B1C239D25A19C600075EF5D /* binding-mri.cpp in Sources */, 3B1C239D25A19C600075EF5D /* binding-mri.cpp in Sources */,
3B1C239E25A19C600075EF5D /* settingsmenu.cpp in Sources */,
3B1C239F25A19C600075EF5D /* eventthread.cpp in Sources */, 3B1C239F25A19C600075EF5D /* eventthread.cpp in Sources */,
3B1C23A025A19C600075EF5D /* viewport.cpp in Sources */, 3B1C23A025A19C600075EF5D /* viewport.cpp in Sources */,
3B1C23A125A19C600075EF5D /* gl-debug.cpp in Sources */, 3B1C23A125A19C600075EF5D /* gl-debug.cpp in Sources */,
@ -2143,7 +2152,6 @@
3BC65CF32584EDC60063AFF1 /* keybindings.cpp in Sources */, 3BC65CF32584EDC60063AFF1 /* keybindings.cpp in Sources */,
3BC65CF42584EDC60063AFF1 /* filesystem.cpp in Sources */, 3BC65CF42584EDC60063AFF1 /* filesystem.cpp in Sources */,
3BC65CF52584EDC60063AFF1 /* binding-mri.cpp in Sources */, 3BC65CF52584EDC60063AFF1 /* binding-mri.cpp in Sources */,
3BC65CF62584EDC60063AFF1 /* settingsmenu.cpp in Sources */,
3BC65CF72584EDC60063AFF1 /* eventthread.cpp in Sources */, 3BC65CF72584EDC60063AFF1 /* eventthread.cpp in Sources */,
3BC65CF82584EDC60063AFF1 /* viewport.cpp in Sources */, 3BC65CF82584EDC60063AFF1 /* viewport.cpp in Sources */,
3BC65CF92584EDC60063AFF1 /* gl-debug.cpp in Sources */, 3BC65CF92584EDC60063AFF1 /* gl-debug.cpp in Sources */,
@ -2220,7 +2228,6 @@
3BC65DB42584F3AD0063AFF1 /* keybindings.cpp in Sources */, 3BC65DB42584F3AD0063AFF1 /* keybindings.cpp in Sources */,
3BC65DB52584F3AD0063AFF1 /* filesystem.cpp in Sources */, 3BC65DB52584F3AD0063AFF1 /* filesystem.cpp in Sources */,
3BC65DB62584F3AD0063AFF1 /* binding-mri.cpp in Sources */, 3BC65DB62584F3AD0063AFF1 /* binding-mri.cpp in Sources */,
3BC65DB72584F3AD0063AFF1 /* settingsmenu.cpp in Sources */,
3BC65DB82584F3AD0063AFF1 /* eventthread.cpp in Sources */, 3BC65DB82584F3AD0063AFF1 /* eventthread.cpp in Sources */,
3BC65DB92584F3AD0063AFF1 /* viewport.cpp in Sources */, 3BC65DB92584F3AD0063AFF1 /* viewport.cpp in Sources */,
3BC65DBA2584F3AD0063AFF1 /* gl-debug.cpp in Sources */, 3BC65DBA2584F3AD0063AFF1 /* gl-debug.cpp in Sources */,
@ -2297,7 +2304,6 @@
3B10EDA92568E95E00372D13 /* keybindings.cpp in Sources */, 3B10EDA92568E95E00372D13 /* keybindings.cpp in Sources */,
3B10EDAD2568E95E00372D13 /* filesystem.cpp in Sources */, 3B10EDAD2568E95E00372D13 /* filesystem.cpp in Sources */,
3B10EE092568E96A00372D13 /* binding-mri.cpp in Sources */, 3B10EE092568E96A00372D13 /* binding-mri.cpp in Sources */,
3B10EDBB2568E95E00372D13 /* settingsmenu.cpp in Sources */,
3B10EDA62568E95E00372D13 /* eventthread.cpp in Sources */, 3B10EDA62568E95E00372D13 /* eventthread.cpp in Sources */,
3B10EDD02568E95E00372D13 /* viewport.cpp in Sources */, 3B10EDD02568E95E00372D13 /* viewport.cpp in Sources */,
3B10EDC52568E95E00372D13 /* gl-debug.cpp in Sources */, 3B10EDC52568E95E00372D13 /* gl-debug.cpp in Sources */,

View file

@ -19,6 +19,8 @@
+(SettingsMenu*)openWindow; +(SettingsMenu*)openWindow;
-(SettingsMenu*)setWindow:(NSWindow*)window;
-(SettingsMenu*)raise;
@end @end
#endif /* SettingsMenuController_h */ #endif /* SettingsMenuController_h */

View file

@ -5,10 +5,21 @@
// Created by ゾロアーク on 1/15/21. // Created by ゾロアーク on 1/15/21.
// //
// This is a pretty rudimentary keybinding menu, and it replaces the normal one
// for macOS. The normal one basically just doesn't seem to work with ANGLE,
// so I cooked this one up in a hurry despite knowing next to zero about Xcode's
// interface builder in general.
// Yes, it is still a mess, but it is working.
#import <GameController/GameController.h>
#import <SDL_scancode.h> #import <SDL_scancode.h>
#import <SDL_keyboard.h> #import <SDL_keyboard.h>
#import <SDL_video.h> #import <SDL_video.h>
#import "sdl_codes.h"
#import "SettingsMenuController.h" #import "SettingsMenuController.h"
#import "input/input.h" #import "input/input.h"
@ -31,6 +42,7 @@ typedef NSMutableArray<NSNumber*> BindingIndexArray;
@implementation SettingsMenu { @implementation SettingsMenu {
__weak IBOutlet NSWindow *_window; __weak IBOutlet NSWindow *_window;
__weak IBOutlet NSTableView *_table; __weak IBOutlet NSTableView *_table;
__weak IBOutlet NSBox *bindingBox;
// Binding buttons // Binding buttons
__weak IBOutlet NSButton *bindingButton1; __weak IBOutlet NSButton *bindingButton1;
@ -43,23 +55,53 @@ typedef NSMutableArray<NSNumber*> BindingIndexArray;
BDescVec *binds; BDescVec *binds;
int currentButtonCode; int currentButtonCode;
// NSNumber (ButtonCode) -> NSArray (of BindingDesc pointers) // Whether currently waiting for some kind of input
bool isListening;
// For the current binding selection when the table is
// reloaded from deleting/adding keybinds
bool keepCurrentButtonSelection;
NSMutableDictionary<NSNumber*, BindingIndexArray*> *nsbinds; NSMutableDictionary<NSNumber*, BindingIndexArray*> *nsbinds;
NSMutableDictionary<NSNumber*, NSString*> *bindingNames; NSMutableDictionary<NSNumber*, NSString*> *bindingNames;
} }
+(SettingsMenu*)openWindow { +(SettingsMenu*)openWindow {
SettingsMenu *s = [[SettingsMenu alloc] initWithNibName:@"settingsmenu" bundle:NSBundle.mainBundle]; SettingsMenu *s = [[SettingsMenu alloc] initWithNibName:@"settingsmenu" bundle:NSBundle.mainBundle];
[NSApplication.sharedApplication.mainWindow beginSheet:s.view.window completionHandler:^(NSModalResponse _){}]; // Show the window as a sheet, window events will be sucked up by SDL though
//[NSApplication.sharedApplication.mainWindow beginSheet:s.view.window completionHandler:^(NSModalResponse _){}];
// Show the view in a new window instead, so key and controller events
// can be captured without SDL's interference
NSWindow *win = [NSWindow windowWithContentViewController:s];
win.styleMask &= ~NSWindowStyleMaskResizable;
win.styleMask &= ~NSWindowStyleMaskFullScreen;
win.styleMask &= NSWindowStyleMaskTitled;
win.title = @"Keybindings";
[s setWindow:win];
[win orderFront:self];
return s;
}
-(void)raise {
if (_window)
[_window orderFront:self];
} }
-(void)closeWindow { -(void)closeWindow {
[self setNotListening:true];
[_window close]; [_window close];
} }
-(SettingsMenu*)setWindow:(NSWindow*)window {
_window = window;
}
- (IBAction)acceptButton:(NSButton *)sender { - (IBAction)acceptButton:(NSButton *)sender {
shState->rtData().bindingUpdateMsg.post(*binds); shState->rtData().bindingUpdateMsg.post(*binds);
storeBindings(*binds, shState->config()); storeBindings(*binds, shState->config());
[self closeWindow];
} }
- (IBAction)cancelButton:(NSButton *)sender { - (IBAction)cancelButton:(NSButton *)sender {
[self closeWindow]; [self closeWindow];
@ -69,22 +111,107 @@ typedef NSMutableArray<NSNumber*> BindingIndexArray;
BDescVec tmp = genDefaultBindings(shState->config()); BDescVec tmp = genDefaultBindings(shState->config());
binds->assign(tmp.begin(), tmp.end()); binds->assign(tmp.begin(), tmp.end());
[self loadBinds]; [self setNotListening:false];
[_table reloadData];
if (currentButtonCode) [self setButtonNames:currentButtonCode];
} }
- (void)viewDidLoad { - (void)viewDidLoad {
[super viewDidLoad]; [super viewDidLoad];
isListening = false;
keepCurrentButtonSelection = false;
[self initDelegateWithTable:_table]; [self initDelegateWithTable:_table];
_table.delegate = self; _table.delegate = self;
_table.dataSource = self; _table.dataSource = self;
[_table reloadData]; [self setNotListening:true];
_table.enabled = true;
bindingBox.title = @"";
[self setButtonNames:0];
} }
- (void)keyDown:(NSEvent *)event { - (void)keyDown:(NSEvent *)event {
NSLog([NSString stringWithFormat:@"%d", event.keyCode]); [super keyDown:event];
if (!isListening) return;
BindingDesc d;
d.target = (Input::ButtonCode)currentButtonCode;
SourceDesc s;
s.type = Key;
s.d.scan = darwin_scancode_table[event.keyCode];
d.src = s;
binds->push_back(d);
[self setNotListening:true];
}
#define checkButtonStart if (0) {}
#define checkButtonEnd else { return; }
#define checkButtonElement(e, b, n) \
else if (element == gamepad.e && gamepad.b.isPressed) { \
s.type = JButton; \
s.d.jb = n; \
}
#define checkButtonAlt(b, n) checkButtonElement(b, b, n)
#define checkButton(b, n) checkButtonAlt(button##b, n)
#define setAxisData(a, n) \
GCControllerAxisInput *axis = gamepad.a; \
s.type = JAxis; \
s.d.ja.axis = n; \
s.d.ja.dir = (axis.value >= 0) ? AxisDir::Positive : AxisDir::Negative;
#define checkAxis(el, a, n) else if (element == gamepad.el && (gamepad.el.a.value >= 0.5 || gamepad.el.a.value <= -0.5)) { setAxisData(el.a, n); }
- (void)registerJoystickAction:(GCExtendedGamepad*)gamepad element:(GCControllerElement*)element {
if (!isListening) return;
BindingDesc d;
d.target = (Input::ButtonCode)currentButtonCode;
SourceDesc s;
checkButtonStart
checkButton(A, 0)
checkButton(B, 1)
checkButton(X, 2)
checkButton(Y, 3)
checkButtonElement(dpad, dpad.up, 11)
checkButtonElement(dpad, dpad.down, 12)
checkButtonElement(dpad, dpad.left, 13)
checkButtonElement(dpad, dpad.right, 14)
checkButtonAlt(leftShoulder, 9)
checkButtonAlt(rightShoulder, 10)
checkButtonAlt(leftThumbstickButton, 7)
checkButtonAlt(rightThumbstickButton, 8)
checkButton(Home, 5)
checkButton(Menu, 6)
checkButton(Options, 4)
checkAxis(leftThumbstick, xAxis, 0)
checkAxis(leftThumbstick, yAxis, 1)
checkAxis(rightThumbstick, xAxis, 2)
checkAxis(rightThumbstick, yAxis, 3)
else if (element == gamepad.leftTrigger && (gamepad.leftTrigger.value >= 0.5 || gamepad.leftTrigger.value <= -0.5)) {
GCControllerButtonInput *trigger = gamepad.leftTrigger;
s.type = JAxis;
s.d.ja.axis = 4;
s.d.ja.dir = AxisDir::Positive;
}
else if (element == gamepad.rightTrigger && (gamepad.rightTrigger.value >= 0.5 || gamepad.rightTrigger.value <= -0.5)) {
GCControllerButtonInput *trigger = gamepad.rightTrigger;
s.type = JAxis;
s.d.ja.axis = 5;
s.d.ja.dir = AxisDir::Positive;
}
checkButtonEnd;
d.src = s;
binds->push_back(d);
[self setNotListening:true];
} }
+(NSString*)nameForBinding:(SourceDesc&)desc { +(NSString*)nameForBinding:(SourceDesc&)desc {
@ -233,18 +360,43 @@ if (!data.config.kbActionNames.value.empty()) bindingNames[@(Input::code)] = \
} }
- (void)tableViewSelectionDidChange:(NSNotification *)notification { - (void)tableViewSelectionDidChange:(NSNotification *)notification {
int buttonCode = inputMapRowToCode[_table.selectedRow]; if (isListening)
currentButtonCode = buttonCode; isListening = false;
[self setButtonNames:buttonCode]; if (keepCurrentButtonSelection) {
if (keepCurrentButtonSelection) keepCurrentButtonSelection = false;
[_table deselectRow:_table.selectedRow];
[self setButtonNames:currentButtonCode];
bindingBox.title = bindingNames[@(currentButtonCode)];
return;
}
if (_table.selectedRow > -1) {
int buttonCode = inputMapRowToCode[_table.selectedRow];
currentButtonCode = buttonCode;
[self setButtonNames:buttonCode];
bindingBox.title = bindingNames[@(currentButtonCode)];
}
else {
[self setButtonNames:0];
bindingBox.title = @"";
}
} }
- (int)setButtonNames:(int)input { - (int)setButtonNames:(int)input {
if (!input) {
bindingButton1.title = @"";
bindingButton2.title = bindingButton1.title;
bindingButton3.title = bindingButton1.title;
bindingButton4.title = bindingButton1.title;
[self enableButtons:false];
return 0;
}
BindingIndexArray *nsbind = nsbinds[@(input)]; BindingIndexArray *nsbind = nsbinds[@(input)];
NSMutableArray<NSString*> *pnames = [NSMutableArray new]; NSMutableArray<NSString*> *pnames = [NSMutableArray new];
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
if (i > nsbind.count - 1) { if (i > nsbind.count - 1) {
[pnames addObject:@"N/A"]; [pnames addObject:@"(Empty)"];
} }
else { else {
BindingDesc &b = binds->at(nsbind[i].intValue); BindingDesc &b = binds->at(nsbind[i].intValue);
@ -272,16 +424,33 @@ if (!data.config.kbActionNames.value.empty()) bindingNames[@(Input::code)] = \
} }
- (IBAction)binding1Clicked:(NSButton *)sender { - (IBAction)binding1Clicked:(NSButton *)sender {
[self removeBinding:0 forInput:currentButtonCode]; // Need at least one binding, for now
if (nsbinds[@(currentButtonCode)].count > 1) {
[self removeBinding:0 forInput:currentButtonCode];
return;
}
[self setListening:sender];
} }
- (IBAction)binding2Clicked:(NSButton *)sender { - (IBAction)binding2Clicked:(NSButton *)sender {
[self removeBinding:1 forInput:currentButtonCode]; if (nsbinds[@(currentButtonCode)].count > 1) {
[self removeBinding:1 forInput:currentButtonCode];
return;
}
[self setListening:sender];
} }
- (IBAction)binding3Clicked:(NSButton *)sender { - (IBAction)binding3Clicked:(NSButton *)sender {
[self removeBinding:2 forInput:currentButtonCode]; if (nsbinds[@(currentButtonCode)].count > 2) {
[self removeBinding:2 forInput:currentButtonCode];
return;
}
[self setListening:sender];
} }
- (IBAction)binding4Clicked:(NSButton *)sender { - (IBAction)binding4Clicked:(NSButton *)sender {
[self removeBinding:3 forInput:currentButtonCode]; if (nsbinds[@(currentButtonCode)].count > 3) {
[self removeBinding:3 forInput:currentButtonCode];
return;
}
[self setListening:sender];
} }
- (void)removeBinding:(int)bindIndex forInput:(int)input { - (void)removeBinding:(int)bindIndex forInput:(int)input {
@ -289,9 +458,42 @@ if (!data.config.kbActionNames.value.empty()) bindingNames[@(Input::code)] = \
int bi = bind[bindIndex].intValue; int bi = bind[bindIndex].intValue;
binds->erase(binds->begin() + bi); binds->erase(binds->begin() + bi);
[self setNotListening:true];
}
- (void)setListening:(NSButton*)src {
if (isListening) {
[self setNotListening:true];
return;
}
// Stops receiving keyDown events if it's disabled, apparently
//_table.enabled = false;
[self enableButtons:false];
if (src == nil) return;
src.title = @"Click to Cancel...";
src.enabled = true;
isListening = true;
NSArray<GCController*>* controllers = [GCController controllers];
if (controllers.count <= 0) return;
GCController *gamepad = controllers[0];
if (gamepad.extendedGamepad == nil || gamepad.extendedGamepad.valueChangedHandler != nil) return;
gamepad.extendedGamepad.valueChangedHandler = ^(GCExtendedGamepad *gamepad, GCControllerElement *element)
{[self registerJoystickAction:gamepad element:element];};
}
- (void)setNotListening:(bool)keepCurrentSelection {
[self loadBinds]; [self loadBinds];
keepCurrentButtonSelection = keepCurrentSelection;
isListening = false;
[_table reloadData]; [_table reloadData];
[self setButtonNames: input]; [self setButtonNames:currentButtonCode];
} }
-(void)dealloc { -(void)dealloc {

146
macos/views/sdl_codes.h Normal file
View file

@ -0,0 +1,146 @@
//
// sdl_codes.h
// mkxp-z
//
// Created by ゾロアーク on 2/16/21.
//
#ifndef sdl_codes_h
#define sdl_codes_h
#include <SDL_scancode.h>
// Stuff straight from SDL to make my life easier.
static const SDL_Scancode darwin_scancode_table[] = {
/* 0 */ SDL_SCANCODE_A,
/* 1 */ SDL_SCANCODE_S,
/* 2 */ SDL_SCANCODE_D,
/* 3 */ SDL_SCANCODE_F,
/* 4 */ SDL_SCANCODE_H,
/* 5 */ SDL_SCANCODE_G,
/* 6 */ SDL_SCANCODE_Z,
/* 7 */ SDL_SCANCODE_X,
/* 8 */ SDL_SCANCODE_C,
/* 9 */ SDL_SCANCODE_V,
/* 10 */ SDL_SCANCODE_NONUSBACKSLASH, /* SDL_SCANCODE_NONUSBACKSLASH on ANSI and JIS keyboards (if this key would exist there), SDL_SCANCODE_GRAVE on ISO. (The USB keyboard driver actually translates these usage codes to different virtual key codes depending on whether the keyboard is ISO/ANSI/JIS. That's why you have to help it identify the keyboard type when you plug in a PC USB keyboard. It's a historical thing - ADB keyboards are wired this way.) */
/* 11 */ SDL_SCANCODE_B,
/* 12 */ SDL_SCANCODE_Q,
/* 13 */ SDL_SCANCODE_W,
/* 14 */ SDL_SCANCODE_E,
/* 15 */ SDL_SCANCODE_R,
/* 16 */ SDL_SCANCODE_Y,
/* 17 */ SDL_SCANCODE_T,
/* 18 */ SDL_SCANCODE_1,
/* 19 */ SDL_SCANCODE_2,
/* 20 */ SDL_SCANCODE_3,
/* 21 */ SDL_SCANCODE_4,
/* 22 */ SDL_SCANCODE_6,
/* 23 */ SDL_SCANCODE_5,
/* 24 */ SDL_SCANCODE_EQUALS,
/* 25 */ SDL_SCANCODE_9,
/* 26 */ SDL_SCANCODE_7,
/* 27 */ SDL_SCANCODE_MINUS,
/* 28 */ SDL_SCANCODE_8,
/* 29 */ SDL_SCANCODE_0,
/* 30 */ SDL_SCANCODE_RIGHTBRACKET,
/* 31 */ SDL_SCANCODE_O,
/* 32 */ SDL_SCANCODE_U,
/* 33 */ SDL_SCANCODE_LEFTBRACKET,
/* 34 */ SDL_SCANCODE_I,
/* 35 */ SDL_SCANCODE_P,
/* 36 */ SDL_SCANCODE_RETURN,
/* 37 */ SDL_SCANCODE_L,
/* 38 */ SDL_SCANCODE_J,
/* 39 */ SDL_SCANCODE_APOSTROPHE,
/* 40 */ SDL_SCANCODE_K,
/* 41 */ SDL_SCANCODE_SEMICOLON,
/* 42 */ SDL_SCANCODE_BACKSLASH,
/* 43 */ SDL_SCANCODE_COMMA,
/* 44 */ SDL_SCANCODE_SLASH,
/* 45 */ SDL_SCANCODE_N,
/* 46 */ SDL_SCANCODE_M,
/* 47 */ SDL_SCANCODE_PERIOD,
/* 48 */ SDL_SCANCODE_TAB,
/* 49 */ SDL_SCANCODE_SPACE,
/* 50 */ SDL_SCANCODE_GRAVE, /* SDL_SCANCODE_GRAVE on ANSI and JIS keyboards, SDL_SCANCODE_NONUSBACKSLASH on ISO (see comment about virtual key code 10 above) */
/* 51 */ SDL_SCANCODE_BACKSPACE,
/* 52 */ SDL_SCANCODE_KP_ENTER, /* keyboard enter on portables */
/* 53 */ SDL_SCANCODE_ESCAPE,
/* 54 */ SDL_SCANCODE_RGUI,
/* 55 */ SDL_SCANCODE_LGUI,
/* 56 */ SDL_SCANCODE_LSHIFT,
/* 57 */ SDL_SCANCODE_CAPSLOCK,
/* 58 */ SDL_SCANCODE_LALT,
/* 59 */ SDL_SCANCODE_LCTRL,
/* 60 */ SDL_SCANCODE_RSHIFT,
/* 61 */ SDL_SCANCODE_RALT,
/* 62 */ SDL_SCANCODE_RCTRL,
/* 63 */ SDL_SCANCODE_RGUI, /* fn on portables, acts as a hardware-level modifier already, so we don't generate events for it, also XK_Meta_R */
/* 64 */ SDL_SCANCODE_F17,
/* 65 */ SDL_SCANCODE_KP_PERIOD,
/* 66 */ SDL_SCANCODE_UNKNOWN, /* unknown (unused?) */
/* 67 */ SDL_SCANCODE_KP_MULTIPLY,
/* 68 */ SDL_SCANCODE_UNKNOWN, /* unknown (unused?) */
/* 69 */ SDL_SCANCODE_KP_PLUS,
/* 70 */ SDL_SCANCODE_UNKNOWN, /* unknown (unused?) */
/* 71 */ SDL_SCANCODE_NUMLOCKCLEAR,
/* 72 */ SDL_SCANCODE_VOLUMEUP,
/* 73 */ SDL_SCANCODE_VOLUMEDOWN,
/* 74 */ SDL_SCANCODE_MUTE,
/* 75 */ SDL_SCANCODE_KP_DIVIDE,
/* 76 */ SDL_SCANCODE_KP_ENTER, /* keypad enter on external keyboards, fn-return on portables */
/* 77 */ SDL_SCANCODE_UNKNOWN, /* unknown (unused?) */
/* 78 */ SDL_SCANCODE_KP_MINUS,
/* 79 */ SDL_SCANCODE_F18,
/* 80 */ SDL_SCANCODE_F19,
/* 81 */ SDL_SCANCODE_KP_EQUALS,
/* 82 */ SDL_SCANCODE_KP_0,
/* 83 */ SDL_SCANCODE_KP_1,
/* 84 */ SDL_SCANCODE_KP_2,
/* 85 */ SDL_SCANCODE_KP_3,
/* 86 */ SDL_SCANCODE_KP_4,
/* 87 */ SDL_SCANCODE_KP_5,
/* 88 */ SDL_SCANCODE_KP_6,
/* 89 */ SDL_SCANCODE_KP_7,
/* 90 */ SDL_SCANCODE_UNKNOWN, /* unknown (unused?) */
/* 91 */ SDL_SCANCODE_KP_8,
/* 92 */ SDL_SCANCODE_KP_9,
/* 93 */ SDL_SCANCODE_INTERNATIONAL3, /* Cosmo_USB2ADB.c says "Yen (JIS)" */
/* 94 */ SDL_SCANCODE_INTERNATIONAL1, /* Cosmo_USB2ADB.c says "Ro (JIS)" */
/* 95 */ SDL_SCANCODE_KP_COMMA, /* Cosmo_USB2ADB.c says ", JIS only" */
/* 96 */ SDL_SCANCODE_F5,
/* 97 */ SDL_SCANCODE_F6,
/* 98 */ SDL_SCANCODE_F7,
/* 99 */ SDL_SCANCODE_F3,
/* 100 */ SDL_SCANCODE_F8,
/* 101 */ SDL_SCANCODE_F9,
/* 102 */ SDL_SCANCODE_LANG2, /* Cosmo_USB2ADB.c says "Eisu" */
/* 103 */ SDL_SCANCODE_F11,
/* 104 */ SDL_SCANCODE_LANG1, /* Cosmo_USB2ADB.c says "Kana" */
/* 105 */ SDL_SCANCODE_PRINTSCREEN, /* On ADB keyboards, this key is labeled "F13/print screen". Problem: USB has different usage codes for these two functions. On Apple USB keyboards, the key is labeled "F13" and sends the F13 usage code (SDL_SCANCODE_F13). I decided to use SDL_SCANCODE_PRINTSCREEN here nevertheless since SDL applications are more likely to assume the presence of a print screen key than an F13 key. */
/* 106 */ SDL_SCANCODE_F16,
/* 107 */ SDL_SCANCODE_SCROLLLOCK, /* F14/scroll lock, see comment about F13/print screen above */
/* 108 */ SDL_SCANCODE_UNKNOWN, /* unknown (unused?) */
/* 109 */ SDL_SCANCODE_F10,
/* 110 */ SDL_SCANCODE_APPLICATION, /* windows contextual menu key, fn-enter on portables */
/* 111 */ SDL_SCANCODE_F12,
/* 112 */ SDL_SCANCODE_UNKNOWN, /* unknown (unused?) */
/* 113 */ SDL_SCANCODE_PAUSE, /* F15/pause, see comment about F13/print screen above */
/* 114 */ SDL_SCANCODE_INSERT, /* the key is actually labeled "help" on Apple keyboards, and works as such in Mac OS, but it sends the "insert" usage code even on Apple USB keyboards */
/* 115 */ SDL_SCANCODE_HOME,
/* 116 */ SDL_SCANCODE_PAGEUP,
/* 117 */ SDL_SCANCODE_DELETE,
/* 118 */ SDL_SCANCODE_F4,
/* 119 */ SDL_SCANCODE_END,
/* 120 */ SDL_SCANCODE_F2,
/* 121 */ SDL_SCANCODE_PAGEDOWN,
/* 122 */ SDL_SCANCODE_F1,
/* 123 */ SDL_SCANCODE_LEFT,
/* 124 */ SDL_SCANCODE_RIGHT,
/* 125 */ SDL_SCANCODE_DOWN,
/* 126 */ SDL_SCANCODE_UP,
/* 127 */ SDL_SCANCODE_POWER
};
#endif /* sdl_codes_h */

View file

@ -9,23 +9,20 @@
<customObject id="-2" userLabel="File's Owner" customClass="SettingsMenu"> <customObject id="-2" userLabel="File's Owner" customClass="SettingsMenu">
<connections> <connections>
<outlet property="_table" destination="40b-Cg-BV2" id="ZrJ-FR-bbC"/> <outlet property="_table" destination="40b-Cg-BV2" id="ZrJ-FR-bbC"/>
<outlet property="_window" destination="QvC-M9-y7g" id="wdq-qn-56i"/>
<outlet property="bindingBox" destination="vQp-2n-Oou" id="rcu-qs-ruG"/>
<outlet property="bindingButton1" destination="9a9-xi-947" id="iSn-UW-fH3"/> <outlet property="bindingButton1" destination="9a9-xi-947" id="iSn-UW-fH3"/>
<outlet property="bindingButton2" destination="1yo-6D-pFH" id="7bb-fa-vxL"/> <outlet property="bindingButton2" destination="1yo-6D-pFH" id="7bb-fa-vxL"/>
<outlet property="bindingButton3" destination="hbb-fi-LM3" id="8Yd-mL-T4D"/> <outlet property="bindingButton3" destination="hbb-fi-LM3" id="8Yd-mL-T4D"/>
<outlet property="bindingButton4" destination="YVE-PH-Osg" id="KIE-qk-buc"/> <outlet property="bindingButton4" destination="YVE-PH-Osg" id="KIE-qk-buc"/>
<outlet property="view" destination="EiT-Mj-1SZ" id="Nw6-Od-W4y"/> <outlet property="view" destination="EiT-Mj-1SZ" id="QSc-UN-Daa"/>
</connections> </connections>
</customObject> </customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/> <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/> <customObject id="-3" userLabel="Application" customClass="NSObject"/>
<viewController id="en7-QL-8wO" customClass="SettingsMenu"> <viewController title="Keybindings" id="en7-QL-8wO" customClass="SettingsMenu"/>
<connections>
<outlet property="_window" destination="QvC-M9-y7g" id="SlA-Yt-RgL"/>
<outlet property="view" destination="EiT-Mj-1SZ" id="Xiu-lG-p2i"/>
</connections>
</viewController>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="QvC-M9-y7g"> <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="QvC-M9-y7g">
<windowStyleMask key="styleMask" closable="YES" miniaturizable="YES" resizable="YES"/> <windowStyleMask key="styleMask" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/> <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="196" y="240" width="667" height="307"/> <rect key="contentRect" x="196" y="240" width="667" height="307"/>
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/> <rect key="screenRect" x="0.0" y="0.0" width="1440" height="875"/>
@ -34,9 +31,9 @@
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
<subviews> <subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WK9-Dx-OSG"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WK9-Dx-OSG">
<rect key="frame" x="18" y="271" width="198" height="16"/> <rect key="frame" x="18" y="271" width="503" height="16"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Select a slot to edit its bindings." id="bx4-Ww-Wm4"> <textFieldCell key="cell" lineBreakMode="clipping" title="Select a binding. Click an empty slot to bind a key, and click a full slot to remove it." id="bx4-Ww-Wm4">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
@ -49,7 +46,7 @@
<rect key="frame" x="1" y="1" width="468" height="242"/> <rect key="frame" x="1" y="1" width="468" height="242"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" alternatingRowBackgroundColors="YES" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" headerView="mPo-GX-PE3" viewBased="YES" id="40b-Cg-BV2"> <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" alternatingRowBackgroundColors="YES" columnReordering="NO" multipleSelection="NO" emptySelection="NO" autosaveColumns="NO" typeSelect="NO" enabled="NO" rowSizeStyle="automatic" headerView="mPo-GX-PE3" viewBased="YES" id="40b-Cg-BV2">
<rect key="frame" x="0.0" y="0.0" width="468" height="214"/> <rect key="frame" x="0.0" y="0.0" width="468" height="214"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="17" height="0.0"/> <size key="intercellSpacing" width="17" height="0.0"/>
@ -57,11 +54,11 @@
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/> <color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns> <tableColumns>
<tableColumn identifier="action" editable="NO" width="46" minWidth="40" maxWidth="1000" id="57F-2v-asd"> <tableColumn identifier="action" editable="NO" width="46" minWidth="40" maxWidth="1000" id="57F-2v-asd">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Action"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" enabled="NO" borderStyle="border" title="Action">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
</tableHeaderCell> </tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="7RH-eq-1a3"> <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" enabled="NO" title="Text Cell" id="7RH-eq-1a3">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@ -69,7 +66,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="ew8-Bt-N3s"> <tableCellView id="ew8-Bt-N3s">
<rect key="frame" x="8" y="0.0" width="44" height="24"/> <rect key="frame" x="18" y="0.0" width="44" height="24"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QyE-hO-3xd"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="QyE-hO-3xd">
@ -89,11 +86,11 @@
</prototypeCellViews> </prototypeCellViews>
</tableColumn> </tableColumn>
<tableColumn identifier="1" editable="NO" width="74" minWidth="40" maxWidth="1000" id="ych-Ib-Nti"> <tableColumn identifier="1" editable="NO" width="74" minWidth="40" maxWidth="1000" id="ych-Ib-Nti">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" title="Binding 1"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" enabled="NO" borderStyle="border" title="Binding 1">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
</tableHeaderCell> </tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="apJ-eD-Gwx"> <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" enabled="NO" title="Text Cell" id="apJ-eD-Gwx">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@ -101,7 +98,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="Qfe-ct-Dr0"> <tableCellView id="Qfe-ct-Dr0">
<rect key="frame" x="69" y="0.0" width="74" height="24"/> <rect key="frame" x="79" y="0.0" width="74" height="24"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JYY-ei-12j"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="JYY-ei-12j">
@ -121,11 +118,11 @@
</prototypeCellViews> </prototypeCellViews>
</tableColumn> </tableColumn>
<tableColumn identifier="2" editable="NO" width="82.5" minWidth="10" maxWidth="3.4028234663852886e+38" id="TET-Zo-QNV"> <tableColumn identifier="2" editable="NO" width="82.5" minWidth="10" maxWidth="3.4028234663852886e+38" id="TET-Zo-QNV">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Binding 2"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" enabled="NO" borderStyle="border" alignment="left" title="Binding 2">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableHeaderCell> </tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="AeK-EI-iNJ"> <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" enabled="NO" alignment="left" title="Text Cell" id="AeK-EI-iNJ">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@ -133,7 +130,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="aX8-jO-E1t"> <tableCellView id="aX8-jO-E1t">
<rect key="frame" x="160" y="0.0" width="83" height="17"/> <rect key="frame" x="170" y="0.0" width="83" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="43H-GL-Wav"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="43H-GL-Wav">
@ -153,11 +150,11 @@
</prototypeCellViews> </prototypeCellViews>
</tableColumn> </tableColumn>
<tableColumn identifier="3" editable="NO" width="82" minWidth="10" maxWidth="3.4028234663852886e+38" id="Jbd-2C-DrJ"> <tableColumn identifier="3" editable="NO" width="82" minWidth="10" maxWidth="3.4028234663852886e+38" id="Jbd-2C-DrJ">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Binding 3"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" enabled="NO" borderStyle="border" alignment="left" title="Binding 3">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableHeaderCell> </tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="Cx1-mE-hp3"> <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" enabled="NO" alignment="left" title="Text Cell" id="Cx1-mE-hp3">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@ -165,7 +162,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="9gE-hw-Qot"> <tableCellView id="9gE-hw-Qot">
<rect key="frame" x="259.5" y="0.0" width="82" height="17"/> <rect key="frame" x="270" y="0.0" width="82" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Xsf-aW-zSl"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Xsf-aW-zSl">
@ -185,11 +182,11 @@
</prototypeCellViews> </prototypeCellViews>
</tableColumn> </tableColumn>
<tableColumn identifier="4" editable="NO" width="103.5" minWidth="10" maxWidth="3.4028234663852886e+38" id="l1k-H7-XNn"> <tableColumn identifier="4" editable="NO" width="103.5" minWidth="10" maxWidth="3.4028234663852886e+38" id="l1k-H7-XNn">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border" alignment="left" title="Binding 4"> <tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" enabled="NO" borderStyle="border" alignment="left" title="Binding 4">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableHeaderCell> </tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" alignment="left" title="Text Cell" id="gp8-J2-kaX"> <textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" enabled="NO" alignment="left" title="Text Cell" id="gp8-J2-kaX">
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/> <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/> <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
@ -197,7 +194,7 @@
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/> <tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews> <prototypeCellViews>
<tableCellView id="7so-8C-lMW"> <tableCellView id="7so-8C-lMW">
<rect key="frame" x="358.5" y="0.0" width="100" height="17"/> <rect key="frame" x="369" y="0.0" width="100" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews> <subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OJ2-lV-fUt"> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="OJ2-lV-fUt">
@ -221,7 +218,7 @@
</subviews> </subviews>
</clipView> </clipView>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="TjW-Vq-xOU"> <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="TjW-Vq-xOU">
<rect key="frame" x="1" y="227" width="466" height="16"/> <rect key="frame" x="1" y="227" width="468" height="16"/>
<autoresizingMask key="autoresizingMask"/> <autoresizingMask key="autoresizingMask"/>
</scroller> </scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="7wx-SJ-kSw"> <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="7wx-SJ-kSw">
@ -236,7 +233,7 @@
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="x3d-Jz-c0e"> <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="x3d-Jz-c0e">
<rect key="frame" x="531" y="45" width="94" height="32"/> <rect key="frame" x="531" y="45" width="94" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Close" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ibG-jp-4Vf"> <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ibG-jp-4Vf">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
<string key="keyEquivalent" base64-UTF8="YES"> <string key="keyEquivalent" base64-UTF8="YES">
@ -244,10 +241,10 @@ Gw
</string> </string>
</buttonCell> </buttonCell>
<connections> <connections>
<action selector="cancelButton:" target="en7-QL-8wO" id="ZTV-4O-mpb"/> <action selector="cancelButton:" target="-2" id="gp1-NZ-CYf"/>
</connections> </connections>
</button> </button>
<box fixedFrame="YES" title="Binding Info" translatesAutoresizingMaskIntoConstraints="NO" id="vQp-2n-Oou"> <box fixedFrame="YES" title="..." translatesAutoresizingMaskIntoConstraints="NO" id="vQp-2n-Oou">
<rect key="frame" x="506" y="108" width="144" height="155"/> <rect key="frame" x="506" y="108" width="144" height="155"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<view key="contentView" id="tWf-83-Wp7"> <view key="contentView" id="tWf-83-Wp7">
@ -308,12 +305,12 @@ Gw
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pmx-z5-Myh"> <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pmx-z5-Myh">
<rect key="frame" x="531" y="77" width="94" height="32"/> <rect key="frame" x="531" y="77" width="94" height="32"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<buttonCell key="cell" type="push" title="Save" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="F0B-af-ReL"> <buttonCell key="cell" type="push" title="Accept" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="F0B-af-ReL">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/> <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</buttonCell> </buttonCell>
<connections> <connections>
<action selector="acceptButton:" target="-2" id="Apk-gb-jRE"/> <action selector="acceptButton:" target="-2" id="Pu3-JG-AfA"/>
</connections> </connections>
</button> </button>
<button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tBE-Fp-Q4I"> <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tBE-Fp-Q4I">
@ -324,7 +321,7 @@ Gw
<font key="font" metaFont="system"/> <font key="font" metaFont="system"/>
</buttonCell> </buttonCell>
<connections> <connections>
<action selector="resetBindings:" target="-2" id="fjX-Jx-Xna"/> <action selector="resetBindings:" target="-2" id="vYk-wO-f2Q"/>
</connections> </connections>
</button> </button>
</subviews> </subviews>

View file

@ -29,15 +29,19 @@
#include <SDL_touch.h> #include <SDL_touch.h>
#include <SDL_rect.h> #include <SDL_rect.h>
#include <al.h> #include <al.h>
#include <alc.h> #include <alc.h>
#include <alext.h> #include <alext.h>
#include "sharedstate.h" #include "sharedstate.h"
#include "graphics.h" #include "graphics.h"
#ifndef MKXPZ_BUILD_XCODE
#include "settingsmenu.h" #include "settingsmenu.h"
#else
#include "system/system.h"
#endif
#include "al-util.h" #include "al-util.h"
#include "debugwriter.h" #include "debugwriter.h"
@ -176,8 +180,12 @@ void EventThread::process(RGSSThreadData &rtData)
SDL_Haptic *hap; SDL_Haptic *hap;
memset(&hapticEffect, 0, sizeof(SDL_HapticEffect)); memset(&hapticEffect, 0, sizeof(SDL_HapticEffect));
textInputBuffer.clear(); textInputBuffer.clear();
#ifndef MKXPZ_BUILD_XCODE
SettingsMenu *sMenu = 0; SettingsMenu *sMenu = 0;
#else
// Will always be 0
void *sMenu = 0;
#endif
while (true) while (true)
{ {
@ -186,7 +194,7 @@ void EventThread::process(RGSSThreadData &rtData)
Debug() << "EventThread: Event error"; Debug() << "EventThread: Event error";
break; break;
} }
#ifndef MKXPZ_BUILD_XCODE
if (sMenu && sMenu->onEvent(event)) if (sMenu && sMenu->onEvent(event))
{ {
if (sMenu->destroyReq()) if (sMenu->destroyReq())
@ -199,6 +207,7 @@ void EventThread::process(RGSSThreadData &rtData)
continue; continue;
} }
#endif
/* Preselect and discard unwanted events here */ /* Preselect and discard unwanted events here */
switch (event.type) switch (event.type)
@ -294,6 +303,7 @@ void EventThread::process(RGSSThreadData &rtData)
if (event.key.keysym.scancode == SDL_SCANCODE_F1) if (event.key.keysym.scancode == SDL_SCANCODE_F1)
{ {
#ifndef MKXPZ_BUILD_XCODE
if (!sMenu) if (!sMenu)
{ {
sMenu = new SettingsMenu(rtData); sMenu = new SettingsMenu(rtData);
@ -301,6 +311,9 @@ void EventThread::process(RGSSThreadData &rtData)
} }
sMenu->raise(); sMenu->raise();
#else
openSettingsWindow();
#endif
} }
if (event.key.keysym.scancode == SDL_SCANCODE_F2) if (event.key.keysym.scancode == SDL_SCANCODE_F2)
@ -493,6 +506,7 @@ void EventThread::process(RGSSThreadData &rtData)
break; break;
case REQUEST_SETTINGS : case REQUEST_SETTINGS :
#ifndef MKXPZ_BUILD_XCODE
if (!sMenu) if (!sMenu)
{ {
sMenu = new SettingsMenu(rtData); sMenu = new SettingsMenu(rtData);
@ -500,6 +514,9 @@ void EventThread::process(RGSSThreadData &rtData)
} }
sMenu->raise(); sMenu->raise();
#else
openSettingsWindow();
#endif
break; break;
case REQUEST_RUMBLE : case REQUEST_RUMBLE :

View file

@ -1167,7 +1167,8 @@ bool SettingsMenu::onEvent(const SDL_Event &event)
void SettingsMenu::raise() void SettingsMenu::raise()
{ {
SDL_RaiseWindow(p->window); openSettingsWindow();
//SDL_RaiseWindow(p->window);
} }
bool SettingsMenu::destroyReq() const bool SettingsMenu::destroyReq() const

View file

@ -20,6 +20,12 @@ std::string systemImpl::getUserName() {
} }
// constant, if it's not nil then just raise the menu instead
SettingsMenu *smenu = nil;
void openSettingsWindow() { void openSettingsWindow() {
[SettingsMenu openWindow]; if (smenu == nil) {
smenu = [SettingsMenu openWindow];
return;
}
[smenu raise];
} }