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
|
else -> range / 20.0
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClosed() {
|
override fun onStopListening(success: Boolean) {
|
||||||
super.onClosed()
|
if (success) {
|
||||||
name = originalName
|
name.toDoubleOrNull()?.let { setting.setValue(it.toString()) }
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
|
super.onStopListening(success)
|
||||||
|
name = originalName
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onClick(mousePos: Vec2f, buttonId: Int) {
|
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 (buttonId == 1) {
|
||||||
if (!listening) {
|
if (!listening) {
|
||||||
listening = true
|
listening = true
|
||||||
|
name = setting.value.toString()
|
||||||
value = 0.0
|
value = 0.0
|
||||||
name = "0"
|
|
||||||
} else {
|
} else {
|
||||||
listening = false
|
onStopListening(false)
|
||||||
name = originalName
|
|
||||||
}
|
}
|
||||||
|
} else if (buttonId == 0 && listening) {
|
||||||
|
onStopListening(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,22 +86,40 @@ class SettingSlider(val setting: NumberSetting<*>) : Slider(setting.name, 0.0, s
|
||||||
if (keyState) {
|
if (keyState) {
|
||||||
when (keyCode) {
|
when (keyCode) {
|
||||||
Keyboard.KEY_RETURN -> {
|
Keyboard.KEY_RETURN -> {
|
||||||
name.toDoubleOrNull()?.let { setting.setValue(it.toString()) }
|
onStopListening(true)
|
||||||
listening = false
|
|
||||||
name = originalName
|
|
||||||
}
|
}
|
||||||
Keyboard.KEY_BACK, Keyboard.KEY_DELETE -> {
|
Keyboard.KEY_BACK, Keyboard.KEY_DELETE -> {
|
||||||
name = name.substring(0, max(name.length - 1, 0))
|
name = name.substring(0, max(name.length - 1, 0))
|
||||||
if (name.isBlank()) name = "0"
|
if (name.isBlank()) name = "0"
|
||||||
}
|
}
|
||||||
else -> if (typedChar.isDigit() || typedChar == '.' || typedChar.equals('e', true)) {
|
else -> if (isNumber(typedChar)) {
|
||||||
if (name == "0") name = ""
|
if (name == "0" && (typedChar.isDigit() || typedChar == '-')) {
|
||||||
|
name = ""
|
||||||
|
}
|
||||||
name += typedChar
|
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) {
|
override fun onRender(vertexHelper: VertexHelper, absolutePos: Vec2f) {
|
||||||
val valueText = setting.toString()
|
val valueText = setting.toString()
|
||||||
protectedWidth = FontRenderAdapter.getStringWidth(valueText, 0.75f).toDouble()
|
protectedWidth = FontRenderAdapter.getStringWidth(valueText, 0.75f).toDouble()
|
||||||
|
|
|
@ -43,7 +43,7 @@ open class Slider(
|
||||||
|
|
||||||
override fun onClosed() {
|
override fun onClosed() {
|
||||||
super.onClosed()
|
super.onClosed()
|
||||||
listening = false
|
onStopListening(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDisplayed() {
|
override fun onDisplayed() {
|
||||||
|
@ -53,6 +53,10 @@ open class Slider(
|
||||||
setupDescription()
|
setupDescription()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun onStopListening(success: Boolean) {
|
||||||
|
listening = false
|
||||||
|
}
|
||||||
|
|
||||||
private fun setupDescription() {
|
private fun setupDescription() {
|
||||||
description.clear()
|
description.clear()
|
||||||
if (descriptionIn.isNotBlank()) {
|
if (descriptionIn.isNotBlank()) {
|
||||||
|
|
|
@ -7,16 +7,21 @@ import kotlin.math.max
|
||||||
|
|
||||||
class StringButton(val setting: StringSetting) : BooleanSlider(setting.name, 1.0, setting.description) {
|
class StringButton(val setting: StringSetting) : BooleanSlider(setting.name, 1.0, setting.description) {
|
||||||
|
|
||||||
override fun onClosed() {
|
|
||||||
super.onClosed()
|
|
||||||
name = originalName
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDisplayed() {
|
override fun onDisplayed() {
|
||||||
super.onDisplayed()
|
super.onDisplayed()
|
||||||
value = 1.0
|
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) {
|
override fun onMouseInput(mousePos: Vec2f) {
|
||||||
super.onMouseInput(mousePos)
|
super.onMouseInput(mousePos)
|
||||||
if (!listening) {
|
if (!listening) {
|
||||||
|
@ -36,14 +41,15 @@ class StringButton(val setting: StringSetting) : BooleanSlider(setting.name, 1.0
|
||||||
override fun onRelease(mousePos: Vec2f, buttonId: Int) {
|
override fun onRelease(mousePos: Vec2f, buttonId: Int) {
|
||||||
super.onRelease(mousePos, buttonId)
|
super.onRelease(mousePos, buttonId)
|
||||||
if (buttonId == 1) {
|
if (buttonId == 1) {
|
||||||
listening = !listening
|
if (!listening) {
|
||||||
|
listening = true
|
||||||
value = if (listening) {
|
name = value.toString()
|
||||||
name = ""
|
value = 0.0
|
||||||
0.0
|
|
||||||
} else {
|
} 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) {
|
if (keyState) {
|
||||||
when (keyCode) {
|
when (keyCode) {
|
||||||
Keyboard.KEY_RETURN -> {
|
Keyboard.KEY_RETURN -> {
|
||||||
setting.setValue(name)
|
|
||||||
listening = false
|
|
||||||
name = originalName
|
|
||||||
value = 1.0
|
|
||||||
}
|
}
|
||||||
Keyboard.KEY_BACK, Keyboard.KEY_DELETE -> {
|
Keyboard.KEY_BACK, Keyboard.KEY_DELETE -> {
|
||||||
name = name.substring(0, max(name.length - 1, 0))
|
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) {
|
override fun onRelease(mousePos: Vec2f, buttonId: Int) {
|
||||||
super.onRelease(mousePos, buttonId)
|
super.onRelease(mousePos, buttonId)
|
||||||
(hoveredChild as? Slider)?.let {
|
(hoveredChild as? Slider)?.let {
|
||||||
listeningChild = if (it.listening) it
|
if (it != listeningChild) {
|
||||||
else null
|
listeningChild?.onStopListening(false)
|
||||||
|
listeningChild = it.takeIf { it.listening }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue