From 24ad04e26280cd2041b06932a864c3ec357732cc Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Wed, 19 Jan 2022 21:45:33 +0100 Subject: [PATCH] toggle modifier keys and clear all pressed modifiers when normal key is pressed --- .../keyboard/keyboard_overlay.gd | 33 ++++++++++++++++--- .../keyboard/layouts/layout_se.json | 8 +++++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/overlay_resources/keyboard/keyboard_overlay.gd b/src/overlay_resources/keyboard/keyboard_overlay.gd index ae83abb..c944a3f 100644 --- a/src/overlay_resources/keyboard/keyboard_overlay.gd +++ b/src/overlay_resources/keyboard/keyboard_overlay.gd @@ -4,11 +4,12 @@ const OVERLAY_PROPERTIES = { "has_touch": true, } -export var key_size := 128 +export var key_size := 120 export var key_row : PackedScene export var key_button : PackedScene var keymap := {} +var toggle_keys := [] func _ready(): load_keys("res://overlay_resources/keyboard/layouts/layout_se.json") @@ -39,9 +40,16 @@ func apply_keys(): btn.rect_min_size.y = key_size if key.has("width"): btn.rect_min_size.x *= key.width + + if key.has("toggle") and key.toggle: + btn.toggle_mode = true + btn.connect("toggled", self, "key_toggled", [key.keycode]) + toggle_keys.append(btn) + else: + btn.connect("button_down", self, "key_down", [key.keycode]) + btn.connect("button_up", self, "key_up", [key.keycode]) row_box.add_child(btn) - btn.connect("pressed", self, "key_pressed", [key.keycode]) # horizontal gaps if key.has("gap"): @@ -49,6 +57,7 @@ func apply_keys(): gapbox.rect_min_size.x = key.gap * key_size gapbox.name = "Gap" row_box.add_child(gapbox) + # vertical gaps if row.has("gap"): var gapbox = Control.new() @@ -57,7 +66,21 @@ func apply_keys(): $PanelContainer/CenterContainer/VBoxContainer.add_child(gapbox) -func key_pressed(code, toggle=false): - GDVK.press(code) - +func key_toggled(state, code): + if state: + GDVK.key_down(code) + else: + GDVK.key_up(code) + +func key_down(code): + GDVK.key_down(code) + + +func key_up(code): + GDVK.key_up(code) + # clear all modifier keys + for k in toggle_keys: + if k.pressed: + k.pressed = false + diff --git a/src/overlay_resources/keyboard/layouts/layout_se.json b/src/overlay_resources/keyboard/layouts/layout_se.json index 62e73ba..88f5a43 100644 --- a/src/overlay_resources/keyboard/layouts/layout_se.json +++ b/src/overlay_resources/keyboard/layouts/layout_se.json @@ -226,6 +226,7 @@ { "keycode": "SHIFT", "display": "^", + "toggle": true, "width": 1.25 }, { @@ -268,6 +269,7 @@ { "keycode": "SHIFT", "display": "Shift", + "toggle": true, "width": 2.75 } ] @@ -278,16 +280,19 @@ { "keycode": "CONTROL", "display": "Ctrl", + "toggle": true, "width": 1.5 }, { "keycode": "SUPER", "display": "Sup", + "toggle": true, "width": 1.25 }, { "keycode": "ALT", "display": "Alt", + "toggle": true, "width": 1.25 }, { @@ -298,11 +303,13 @@ { "keycode": "ALT", "display": "Alt", + "toggle": true, "width": 1.25 }, { "keycode": "SUPER", "display": "Sup", + "toggle": true, "width": 1.25 }, { @@ -313,6 +320,7 @@ { "keycode": "CONTROL", "display": "Ctrl", + "toggle": true, "width": 1.5 } ]