1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-17 14:11:06 +00:00

add Colemak layout

This commit is contained in:
Rhody Lugo
2018-01-22 20:15:43 -04:00
parent bf861c8cdf
commit 7b25a33762
7 changed files with 82 additions and 20 deletions

View File

@@ -435,6 +435,7 @@ String _OS::get_latin_keyboard_variant() const {
case OS::LATIN_KEYBOARD_QZERTY: return "QZERTY"; case OS::LATIN_KEYBOARD_QZERTY: return "QZERTY";
case OS::LATIN_KEYBOARD_DVORAK: return "DVORAK"; case OS::LATIN_KEYBOARD_DVORAK: return "DVORAK";
case OS::LATIN_KEYBOARD_NEO: return "NEO"; case OS::LATIN_KEYBOARD_NEO: return "NEO";
case OS::LATIN_KEYBOARD_COLEMAK: return "COLEMAK";
default: return "ERROR"; default: return "ERROR";
} }
} }

View File

@@ -507,6 +507,27 @@ static const _KeyCodeReplace _keycode_replace_neo[] = {
{ 0, 0 } { 0, 0 }
}; };
static const _KeyCodeReplace _keycode_replace_colemak[] = {
{ KEY_E, KEY_F },
{ KEY_R, KEY_P },
{ KEY_T, KEY_G },
{ KEY_Y, KEY_J },
{ KEY_U, KEY_L },
{ KEY_I, KEY_U },
{ KEY_O, KEY_Y },
{ KEY_P, KEY_SEMICOLON },
{ KEY_S, KEY_R },
{ KEY_D, KEY_S },
{ KEY_F, KEY_T },
{ KEY_G, KEY_D },
{ KEY_J, KEY_N },
{ KEY_K, KEY_E },
{ KEY_L, KEY_I },
{ KEY_SEMICOLON, KEY_O },
{ KEY_N, KEY_K },
{ 0, 0 }
};
int latin_keyboard_keycode_convert(int p_keycode) { int latin_keyboard_keycode_convert(int p_keycode) {
const _KeyCodeReplace *kcr = NULL; const _KeyCodeReplace *kcr = NULL;

View File

@@ -405,6 +405,7 @@ public:
LATIN_KEYBOARD_QZERTY, LATIN_KEYBOARD_QZERTY,
LATIN_KEYBOARD_DVORAK, LATIN_KEYBOARD_DVORAK,
LATIN_KEYBOARD_NEO, LATIN_KEYBOARD_NEO,
LATIN_KEYBOARD_COLEMAK,
}; };
virtual LatinKeyboardVariant get_latin_keyboard_variant() const; virtual LatinKeyboardVariant get_latin_keyboard_variant() const;

View File

@@ -23422,7 +23422,7 @@
</return> </return>
<description> <description>
Returns the current latin keyboard variant as a String. Returns the current latin keyboard variant as a String.
Possible return values are: "QWERTY", "AZERTY", "QZERTY", "DVORAK", "NEO" or "ERROR" Possible return values are: "QWERTY", "AZERTY", "QZERTY", "DVORAK", "NEO", "COLEMAK" or "ERROR"
</description> </description>
</method> </method>
<method name="get_locale" qualifiers="const"> <method name="get_locale" qualifiers="const">

View File

@@ -34,11 +34,11 @@
#include "main/main.h" #include "main/main.h"
#include "os/keyboard.h" #include "os/keyboard.h"
#include "print_string.h" #include "print_string.h"
#include "scene/resources/texture.h"
#include "sem_osx.h" #include "sem_osx.h"
#include "servers/physics/physics_server_sw.h" #include "servers/physics/physics_server_sw.h"
#include "servers/visual/visual_server_raster.h" #include "servers/visual/visual_server_raster.h"
#include "servers/visual/visual_server_wrap_mt.h" #include "servers/visual/visual_server_wrap_mt.h"
#include "scene/resources/texture.h"
#include <Carbon/Carbon.h> #include <Carbon/Carbon.h>
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
@@ -502,10 +502,11 @@ static void _mouseDownEvent(NSEvent *event, int index, int mask, bool pressed) {
if (OS_OSX::singleton->main_loop && OS_OSX::singleton->mouse_mode != OS::MOUSE_MODE_CAPTURED) if (OS_OSX::singleton->main_loop && OS_OSX::singleton->mouse_mode != OS::MOUSE_MODE_CAPTURED)
OS_OSX::singleton->main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_ENTER); OS_OSX::singleton->main_loop->notification(MainLoop::NOTIFICATION_WM_MOUSE_ENTER);
if (OS_OSX::singleton->input) if (OS_OSX::singleton->input) {
OS_OSX::singleton->cursor_shape = OS::CURSOR_MAX; OS_OSX::singleton->cursor_shape = OS::CURSOR_MAX;
OS_OSX::singleton->set_cursor_shape(OS::CURSOR_ARROW); OS_OSX::singleton->set_cursor_shape(OS::CURSOR_ARROW);
} }
}
- (void)viewDidChangeBackingProperties { - (void)viewDidChangeBackingProperties {
/* /*
@@ -1816,6 +1817,8 @@ OS::LatinKeyboardVariant OS_OSX::get_latin_keyboard_variant() const {
layout = LATIN_KEYBOARD_DVORAK; layout = LATIN_KEYBOARD_DVORAK;
} else if ([test isEqualToString:@"xvlcwk"]) { } else if ([test isEqualToString:@"xvlcwk"]) {
layout = LATIN_KEYBOARD_NEO; layout = LATIN_KEYBOARD_NEO;
} else if ([test isEqualToString:@"qwfpgj"]) {
layout = LATIN_KEYBOARD_COLEMAK;
} }
[test release]; [test release];

View File

@@ -68,6 +68,8 @@
#undef CursorShape #undef CursorShape
#include <X11/XKBlib.h>
int OS_X11::get_video_driver_count() const { int OS_X11::get_video_driver_count() const {
return 1; return 1;
} }
@@ -2201,6 +2203,38 @@ void OS_X11::set_context(int p_context) {
} }
} }
OS::LatinKeyboardVariant OS_X11::get_latin_keyboard_variant() const {
XkbDescRec *xkbdesc = XkbAllocKeyboard();
ERR_FAIL_COND_V(!xkbdesc, LATIN_KEYBOARD_QWERTY);
XkbGetNames(x11_display, XkbSymbolsNameMask, xkbdesc);
ERR_FAIL_COND_V(!xkbdesc->names, LATIN_KEYBOARD_QWERTY);
ERR_FAIL_COND_V(!xkbdesc->names->symbols, LATIN_KEYBOARD_QWERTY);
char *layout = XGetAtomName(x11_display, xkbdesc->names->symbols);
ERR_FAIL_COND_V(!layout, LATIN_KEYBOARD_QWERTY);
Vector<String> info = String(layout).split("+");
ERR_FAIL_INDEX_V(1, info.size(), LATIN_KEYBOARD_QWERTY);
if (info[1].find("colemak") != -1) {
return LATIN_KEYBOARD_COLEMAK;
} else if (info[1].find("qwertz") != -1) {
return LATIN_KEYBOARD_QWERTZ;
} else if (info[1].find("azerty") != -1) {
return LATIN_KEYBOARD_AZERTY;
} else if (info[1].find("qzerty") != -1) {
return LATIN_KEYBOARD_QZERTY;
} else if (info[1].find("dvorak") != -1) {
return LATIN_KEYBOARD_DVORAK;
} else if (info[1].find("neo") != -1) {
return LATIN_KEYBOARD_NEO;
}
return LATIN_KEYBOARD_QWERTY;
}
OS_X11::OS_X11() { OS_X11::OS_X11() {
#ifdef RTAUDIO_ENABLED #ifdef RTAUDIO_ENABLED

View File

@@ -285,6 +285,8 @@ public:
void disable_crash_handler(); void disable_crash_handler();
bool is_disable_crash_handler() const; bool is_disable_crash_handler() const;
virtual LatinKeyboardVariant get_latin_keyboard_variant() const;
OS_X11(); OS_X11();
}; };