diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt index 269ab7095..abc1fea74 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt @@ -451,6 +451,8 @@ class UIItemControlPaletteBaloon(val parent: UIKeyboardControlPanel, initialX: I parent.setControlOf(parent.keycapClicked, selected) parent.keycapClicked = -13372 } + + if (!mouseDown) mouseLatched = false } } diff --git a/src/net/torvald/terrarum/ui/UIItem.kt b/src/net/torvald/terrarum/ui/UIItem.kt index fc97317ec..a881688e0 100644 --- a/src/net/torvald/terrarum/ui/UIItem.kt +++ b/src/net/torvald/terrarum/ui/UIItem.kt @@ -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 } } } diff --git a/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt b/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt index 322e9b8d2..89168b0dd 100644 --- a/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt +++ b/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt @@ -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() }