improved slider mouse op

This commit is contained in:
minjaesong
2023-07-14 16:50:25 +09:00
parent d05364f43f
commit 9baec6c7a1
3 changed files with 20 additions and 8 deletions

View File

@@ -451,6 +451,8 @@ class UIItemControlPaletteBaloon(val parent: UIKeyboardControlPanel, initialX: I
parent.setControlOf(parent.keycapClicked, selected)
parent.keycapClicked = -13372
}
if (!mouseDown) mouseLatched = false
}
}

View File

@@ -89,11 +89,14 @@ abstract class UIItem(var parentUI: UICanvas, val initialX: Int, val initialY: I
open val mouseUp: Boolean
get() = itemRelativeMouseX in 0 until width && itemRelativeMouseY in 0 until height
/** If mouse is hovering over it and mouse is down */
open val mousePushed: Boolean
val mousePushed: Boolean
get() = mouseUp && Terrarum.mouseDown
val mouseDown: Boolean
get() = Terrarum.mouseDown
protected var mouseLatched = Terrarum.mouseDown
/** to be used by customised mouse handling */
protected var mouseLatched = false
/** UI to call (show up) while mouse is up */
open var mouseOverCall: UICanvas? = null
@@ -164,7 +167,6 @@ abstract class UIItem(var parentUI: UICanvas, val initialX: Int, val initialY: I
}
}
if (!mouseUp) mouseLatched = false
}
}
}

View File

@@ -14,6 +14,8 @@ import kotlin.math.roundToInt
* [-]--|--|--[]--|--[+]
* ```
*
*
*
* Created by minjaesong on 2023-07-14.
*/
@@ -25,7 +27,8 @@ class UIItemHorzSlider(
val max: Double,
override val width: Int,
val handleWidth: Int = 12,
private val backgroundTexture: TextureRegion? = null
private val backgroundTexture: TextureRegion? = null,
private val disposeTexture: Boolean = false
) : UIItem(parentUI, initialX, initialY) {
override val height = 24
@@ -35,7 +38,6 @@ class UIItemHorzSlider(
private var handlePos = 0.0
var value: Double = initialValue; private set
var selectionChangeListener: (Double) -> Unit = {}
override fun update(delta: Float) {
@@ -44,15 +46,20 @@ class UIItemHorzSlider(
mouseOnHandle = itemRelativeMouseX in handlePos.roundToInt() until handlePos.roundToInt() + handleWidth && itemRelativeMouseY in 0 until height
// update handle position and value
if (mouseUp && mousePushed) {
if (mouseUp && Terrarum.mouseDown || mouseLatched) {
mouseLatched = true
handlePos = (itemRelativeMouseX - handleWidth/2.0).coerceIn(0.0, handleTravelDist.toDouble())
value = interpolateLinear(handlePos / handleTravelDist, min, max)
selectionChangeListener(value)
}
if (!Terrarum.mouseDown) {
mouseLatched = false
}
}
val troughBorderCol: Color; get() = if (mouseUp) Toolkit.Theme.COL_MOUSE_UP else Toolkit.Theme.COL_INACTIVE
val handleCol: Color; get() = if (mouseOnHandle && mousePushed) Toolkit.Theme.COL_SELECTED
val troughBorderCol: Color; get() = if (mouseUp || mouseLatched) Toolkit.Theme.COL_MOUSE_UP else Toolkit.Theme.COL_INACTIVE
val handleCol: Color; get() = if (mouseOnHandle && mousePushed || mouseLatched) Toolkit.Theme.COL_SELECTED
else if (mouseOnHandle) Toolkit.Theme.COL_MOUSE_UP else Color.WHITE
@@ -95,6 +102,7 @@ class UIItemHorzSlider(
}
override fun dispose() {
if (disposeTexture) backgroundTexture?.texture?.tryDispose()
}