Hack Fix YACL unbinding keys

This commit is contained in:
Linnea Gräf
2024-10-18 21:01:13 +02:00
parent c42bfa6151
commit 6100b8c9a0
2 changed files with 62 additions and 31 deletions

View File

@@ -31,37 +31,9 @@ class KeybindingController(
{ option.pendingValue() },
{ option.requestSet(it) },
{ screen.focused = null },
{ screen.focused = button }
{ screen.focused = button },
)
button = object : ControllerWidget<KeybindingController>(this, screen, widgetDimension) {
override fun getHoveredControlWidth(): Int {
return 130
}
override fun getValueText(): Text {
return sm.label
}
override fun keyPressed(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
return sm.keyboardEvent(keyCode, true)
}
override fun keyReleased(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
return sm.keyboardEvent(keyCode, false)
}
override fun unfocus() {
sm.onLostFocus()
}
override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean {
if (button == 0 && isHovered) {
sm.onClick()
return true
}
return super.mouseClicked(mouseX, mouseY, button)
}
}
button = KeybindingWidget(sm, this, screen, widgetDimension)
option.addListener { t, u ->
sm.updateLabel()
}
@@ -69,3 +41,43 @@ class KeybindingController(
return button
}
}
class KeybindingWidget(
val sm: KeyBindingStateManager,
controller: KeybindingController,
screen: YACLScreen,
dimension: Dimension<Int>
) : ControllerWidget<KeybindingController>(controller, screen, dimension) {
override fun getHoveredControlWidth(): Int {
return 130
}
override fun getValueText(): Text {
return sm.label
}
override fun keyPressed(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
return sm.keyboardEvent(keyCode, true)
}
override fun keyReleased(keyCode: Int, scanCode: Int, modifiers: Int): Boolean {
return sm.keyboardEvent(keyCode, false)
}
override fun unfocus() {
sm.onLostFocus()
}
override fun setFocused(focused: Boolean) {
super.setFocused(focused)
if (!focused) sm.onLostFocus()
}
override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean {
if (button == 0 && isHovered) {
sm.onClick()
return true
}
return super.mouseClicked(mouseX, mouseY, button)
}
}

View File

@@ -13,9 +13,12 @@ import dev.isxander.yacl3.api.controller.DoubleSliderControllerBuilder
import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder
import dev.isxander.yacl3.api.controller.StringControllerBuilder
import dev.isxander.yacl3.api.controller.TickBoxControllerBuilder
import dev.isxander.yacl3.gui.YACLScreen
import dev.isxander.yacl3.gui.tab.ListHolderWidget
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
import kotlin.time.DurationUnit
import net.minecraft.client.gui.Element
import net.minecraft.client.gui.screen.Screen
import net.minecraft.text.Text
import moe.nea.firmament.gui.config.BooleanHandler
@@ -121,7 +124,23 @@ class YaclIntegration : FirmamentConfigScreenProvider {
get() = "yacl"
override fun open(parent: Screen?): Screen {
return buildConfig().generateScreen(parent)
return object : YACLScreen(buildConfig(), parent) {
override fun setFocused(focused: Element?) {
if (this.focused is KeybindingWidget &&
focused is ListHolderWidget<*>
) {
return
}
super.setFocused(focused)
}
override fun shouldCloseOnEsc(): Boolean {
if (focused is KeybindingWidget) {
return false
}
return super.shouldCloseOnEsc()
}
}
}
}