Skip to content

Commit aa65588

Browse files
committed
Fix: Map layouts to US
1 parent c3444cc commit aa65588

File tree

3 files changed

+30
-9
lines changed

3 files changed

+30
-9
lines changed

common/src/main/kotlin/com/lambda/event/events/KeyPressEvent.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ data class KeyPressEvent(
2323
val modifiers: Int,
2424
) : ICancellable by Cancellable() {
2525
val translated: KeyCode
26-
get() = KeyCode.fromUS(keyCode, scanCode)
27-
}
26+
get() = KeyCode.virtualMapUS(keyCode, scanCode)
27+
}

common/src/main/kotlin/com/lambda/gui/api/LambdaGui.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ abstract class LambdaGui(
8080
}
8181

8282
final override fun keyPressed(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
83-
val translated = KeyCode.fromUS(keyCode, scanCode)
83+
println(KeyCode.virtualMapUS(keyCode, scanCode))
84+
val translated = KeyCode.virtualMapUS(keyCode, scanCode)
8485
onEvent(GuiEvent.KeyPress(translated))
8586

8687
if (keyCode == KeyCode.ESCAPE.keyCode) {

common/src/main/kotlin/com/lambda/util/KeyCode.kt

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,34 @@ enum class KeyCode(val keyCode: Int) {
127127
LAST(GLFW.GLFW_KEY_LAST);
128128

129129
companion object {
130-
private val keyCodeMap: Map<Int, KeyCode> = entries.associateBy { it.keyCode }
131-
private val nameMap: Map<String, KeyCode> = entries.associateBy { it.name.lowercase() }
130+
private const val printablePool = "`-=[]\\,;\'./"
131+
private val glfwPool = intArrayOf(
132+
GLFW.GLFW_KEY_GRAVE_ACCENT, GLFW.GLFW_KEY_MINUS, GLFW.GLFW_KEY_EQUAL,
133+
GLFW.GLFW_KEY_LEFT_BRACKET, GLFW.GLFW_KEY_RIGHT_BRACKET, GLFW.GLFW_KEY_BACKSLASH,
134+
GLFW.GLFW_KEY_COMMA, GLFW.GLFW_KEY_SEMICOLON, GLFW.GLFW_KEY_APOSTROPHE,
135+
GLFW.GLFW_KEY_PERIOD, GLFW.GLFW_KEY_SLASH, 0
136+
)
132137

133-
fun fromKeyCodeOrNull(keyCode: Int) = keyCodeMap[keyCode]
134-
fun fromKeyCode(keyCode: Int) = fromKeyCodeOrNull(keyCode) ?: UNBOUND
138+
private val keyCodeMap = entries.associateBy { it.keyCode }
139+
private val nameMap = entries.associateBy { it.name.lowercase() }
140+
141+
fun fromKeyCode(keyCode: Int) = keyCodeMap[keyCode] ?: UNBOUND
135142
fun fromKeyName(name: String) = nameMap[name.lowercase()] ?: UNBOUND
136143

137-
fun fromUS(keyCode: Int, scanCode: Int) =
138-
GLFW.glfwGetKeyName(keyCode, scanCode)?.let { fromKeyName(it) } ?: fromKeyCode(keyCode)
144+
fun virtualMapUS(keyCode: Int, scanCode: Int): KeyCode {
145+
if (keyCode in GLFW.GLFW_KEY_KP_0..GLFW.GLFW_KEY_KP_EQUAL) return fromKeyCode(keyCode)
146+
147+
val keyName = GLFW.glfwGetKeyName(keyCode, scanCode) ?: return fromKeyCode(keyCode)
148+
149+
return when (
150+
val char = keyName.first()
151+
) {
152+
in '0'..'9' -> return fromKeyCode(GLFW.GLFW_KEY_0 + (char - '0'))
153+
in 'A'..'Z' -> return fromKeyCode(GLFW.GLFW_KEY_A + (char - 'A'))
154+
in 'a'..'z' -> return fromKeyCode(GLFW.GLFW_KEY_A + (char - 'a'))
155+
in printablePool -> fromKeyCode(glfwPool[printablePool.indexOf(char)])
156+
else -> fromKeyCode(keyCode)
157+
}
158+
}
139159
}
140160
}

0 commit comments

Comments
 (0)