diff options
author | nea <nea@nea.moe> | 2023-08-25 14:18:43 +0200 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-08-25 14:18:43 +0200 |
commit | 784231941661a3108549a1b5cd499bc5f7de2e46 (patch) | |
tree | 1e7c85001aef50af5d0491b2d97ae4fa09bb87d7 /src/main/kotlin/moe/nea/firmament/keybindings/SavedKeyBinding.kt | |
parent | a79452c25406e17b81dd0ed1209f590d01991c68 (diff) | |
download | firmament-784231941661a3108549a1b5cd499bc5f7de2e46.tar.gz firmament-784231941661a3108549a1b5cd499bc5f7de2e46.tar.bz2 firmament-784231941661a3108549a1b5cd499bc5f7de2e46.zip |
Add better key binding support
Diffstat (limited to 'src/main/kotlin/moe/nea/firmament/keybindings/SavedKeyBinding.kt')
-rw-r--r-- | src/main/kotlin/moe/nea/firmament/keybindings/SavedKeyBinding.kt | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/main/kotlin/moe/nea/firmament/keybindings/SavedKeyBinding.kt b/src/main/kotlin/moe/nea/firmament/keybindings/SavedKeyBinding.kt new file mode 100644 index 0000000..f73eb49 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/keybindings/SavedKeyBinding.kt @@ -0,0 +1,36 @@ +package moe.nea.firmament.keybindings + +import kotlinx.serialization.Serializable +import org.lwjgl.glfw.GLFW + +@Serializable +data class SavedKeyBinding( + val keyCode: Int, + val shift: Boolean = false, + val ctrl: Boolean = false, + val alt: Boolean = false, +) : IKeyBinding { + constructor(keyCode: Int, mods: Triple<Boolean, Boolean, Boolean>) : this( + keyCode, + mods.first && keyCode != GLFW.GLFW_KEY_LEFT_SHIFT && keyCode != GLFW.GLFW_KEY_RIGHT_SHIFT, + mods.second && keyCode != GLFW.GLFW_KEY_LEFT_CONTROL && keyCode != GLFW.GLFW_KEY_RIGHT_CONTROL, + mods.third && keyCode != GLFW.GLFW_KEY_LEFT_ALT && keyCode != GLFW.GLFW_KEY_RIGHT_ALT, + ) + + constructor(keyCode: Int, mods: Int) : this(keyCode, getMods(mods)) + + companion object { + fun getMods(modifiers: Int): Triple<Boolean, Boolean, Boolean> { + return Triple( + modifiers and GLFW.GLFW_MOD_SHIFT != 0, + modifiers and GLFW.GLFW_MOD_CONTROL != 0, + modifiers and GLFW.GLFW_MOD_ALT != 0 + ) + } + } + + override fun matches(keyCode: Int, scanCode: Int, modifiers: Int): Boolean { + return keyCode == this.keyCode && getMods(modifiers) == Triple(shift, ctrl, alt) + } + +} |