mirror of https://github.com/kami-blue/client
[enhancement] Improved value typing in GUI.
This commit is contained in:
parent
382736bb22
commit
3d8e0f1fd0
|
@ -34,21 +34,13 @@ class SettingSlider(val setting: NumberSetting<*>) : Slider(setting.name, 0.0, s
|
|||
else -> range / 20.0
|
||||
}
|
||||
|
||||
override fun onClosed() {
|
||||
super.onClosed()
|
||||
name = originalName
|
||||
}
|
||||
|
||||
override fun onTick() {
|
||||
super.onTick()
|
||||
if (mouseState != MouseState.DRAG && !listening) {
|
||||
val min = setting.range.start.toDouble()
|
||||
val flooredSettingValue = floor((settingValueDouble - min) / stepDouble) * stepDouble
|
||||
if (value * range + min !in (flooredSettingValue - stepDouble)..flooredSettingValue) {
|
||||
value = (setting.value.toDouble() - min) / range
|
||||
}
|
||||
override fun onStopListening(success: Boolean) {
|
||||
if (success) {
|
||||
name.toDoubleOrNull()?.let { setting.setValue(it.toString()) }
|
||||
}
|
||||
visible = setting.isVisible
|
||||
|
||||
super.onStopListening(success)
|
||||
name = originalName
|
||||
}
|
||||
|
||||
override fun onClick(mousePos: Vec2f, buttonId: Int) {
|
||||
|
@ -64,12 +56,13 @@ class SettingSlider(val setting: NumberSetting<*>) : Slider(setting.name, 0.0, s
|
|||
if (buttonId == 1) {
|
||||
if (!listening) {
|
||||
listening = true
|
||||
name = setting.value.toString()
|
||||
value = 0.0
|
||||
name = "0"
|
||||
} else {
|
||||
listening = false
|
||||
name = originalName
|
||||
onStopListening(false)
|
||||
}
|
||||
} else if (buttonId == 0 && listening) {
|
||||
onStopListening(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -93,22 +86,40 @@ class SettingSlider(val setting: NumberSetting<*>) : Slider(setting.name, 0.0, s
|
|||
if (keyState) {
|
||||
when (keyCode) {
|
||||
Keyboard.KEY_RETURN -> {
|
||||
name.toDoubleOrNull()?.let { setting.setValue(it.toString()) }
|
||||
listening = false
|
||||
name = originalName
|
||||
onStopListening(true)
|
||||
}
|
||||
Keyboard.KEY_BACK, Keyboard.KEY_DELETE -> {
|
||||
name = name.substring(0, max(name.length - 1, 0))
|
||||
if (name.isBlank()) name = "0"
|
||||
}
|
||||
else -> if (typedChar.isDigit() || typedChar == '.' || typedChar.equals('e', true)) {
|
||||
if (name == "0") name = ""
|
||||
else -> if (isNumber(typedChar)) {
|
||||
if (name == "0" && (typedChar.isDigit() || typedChar == '-')) {
|
||||
name = ""
|
||||
}
|
||||
name += typedChar
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun isNumber(char: Char) =
|
||||
char.isDigit()
|
||||
|| char == '-'
|
||||
|| char == '.'
|
||||
|| char.equals('e', true)
|
||||
|
||||
override fun onTick() {
|
||||
super.onTick()
|
||||
if (mouseState != MouseState.DRAG && !listening) {
|
||||
val min = setting.range.start.toDouble()
|
||||
val flooredSettingValue = floor((settingValueDouble - min) / stepDouble) * stepDouble
|
||||
if (value * range + min !in (flooredSettingValue - stepDouble)..flooredSettingValue) {
|
||||
value = (setting.value.toDouble() - min) / range
|
||||
}
|
||||
}
|
||||
visible = setting.isVisible
|
||||
}
|
||||
|
||||
override fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) {
|
||||
val valueText = setting.toString()
|
||||
protectedWidth = FontRenderAdapter.getStringWidth(valueText, 0.75f).toDouble()
|
||||
|
|
|
@ -43,7 +43,7 @@ open class Slider(
|
|||
|
||||
override fun onClosed() {
|
||||
super.onClosed()
|
||||
listening = false
|
||||
onStopListening(false)
|
||||
}
|
||||
|
||||
override fun onDisplayed() {
|
||||
|
@ -53,6 +53,10 @@ open class Slider(
|
|||
setupDescription()
|
||||
}
|
||||
|
||||
open fun onStopListening(success: Boolean) {
|
||||
listening = false
|
||||
}
|
||||
|
||||
private fun setupDescription() {
|
||||
description.clear()
|
||||
if (descriptionIn.isNotBlank()) {
|
||||
|
|
|
@ -7,16 +7,21 @@ import kotlin.math.max
|
|||
|
||||
class StringButton(val setting: StringSetting) : BooleanSlider(setting.name, 1.0, setting.description) {
|
||||
|
||||
override fun onClosed() {
|
||||
super.onClosed()
|
||||
name = originalName
|
||||
}
|
||||
|
||||
override fun onDisplayed() {
|
||||
super.onDisplayed()
|
||||
value = 1.0
|
||||
}
|
||||
|
||||
override fun onStopListening(success: Boolean) {
|
||||
if (success) {
|
||||
setting.setValue(name)
|
||||
}
|
||||
|
||||
super.onStopListening(success)
|
||||
name = originalName
|
||||
value = 1.0
|
||||
}
|
||||
|
||||
override fun onMouseInput(mousePos: Vec2f) {
|
||||
super.onMouseInput(mousePos)
|
||||
if (!listening) {
|
||||
|
@ -36,14 +41,15 @@ class StringButton(val setting: StringSetting) : BooleanSlider(setting.name, 1.0
|
|||
override fun onRelease(mousePos: Vec2f, buttonId: Int) {
|
||||
super.onRelease(mousePos, buttonId)
|
||||
if (buttonId == 1) {
|
||||
listening = !listening
|
||||
|
||||
value = if (listening) {
|
||||
name = ""
|
||||
0.0
|
||||
if (!listening) {
|
||||
listening = true
|
||||
name = value.toString()
|
||||
value = 0.0
|
||||
} else {
|
||||
1.0
|
||||
onStopListening(false)
|
||||
}
|
||||
} else if (buttonId == 0 && listening) {
|
||||
onStopListening(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -53,10 +59,6 @@ class StringButton(val setting: StringSetting) : BooleanSlider(setting.name, 1.0
|
|||
if (keyState) {
|
||||
when (keyCode) {
|
||||
Keyboard.KEY_RETURN -> {
|
||||
setting.setValue(name)
|
||||
listening = false
|
||||
name = originalName
|
||||
value = 1.0
|
||||
}
|
||||
Keyboard.KEY_BACK, Keyboard.KEY_DELETE -> {
|
||||
name = name.substring(0, max(name.length - 1, 0))
|
||||
|
|
|
@ -63,8 +63,10 @@ abstract class SettingWindow<T : Any>(
|
|||
override fun onRelease(mousePos: Vec2f, buttonId: Int) {
|
||||
super.onRelease(mousePos, buttonId)
|
||||
(hoveredChild as? Slider)?.let {
|
||||
listeningChild = if (it.listening) it
|
||||
else null
|
||||
if (it != listeningChild) {
|
||||
listeningChild?.onStopListening(false)
|
||||
listeningChild = it.takeIf { it.listening }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue