From acaedc4d8040f78d0bcdb82ecc0c37fc4d8387b9 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 10 Jan 2024 01:46:39 +0900 Subject: [PATCH] utilising new mouselatch --- .../terrarum/musicplayer/gui/MusicPlayer.kt | 2 +- .../ui/UIKeyboardControlPanel.kt | 7 ++----- src/net/torvald/terrarum/ui/MouseLatch.kt | 18 +++++++++++++++++ src/net/torvald/terrarum/ui/UIItem.kt | 2 +- .../torvald/terrarum/ui/UIItemHorzSlider.kt | 2 ++ src/net/torvald/terrarum/ui/UIItemList.kt | 10 ++++------ src/net/torvald/terrarum/ui/UIItemSpinner.kt | 5 +---- .../terrarum/ui/UIItemTextButtonList.kt | 12 ++++------- .../terrarum/ui/UIItemTextLineInput.kt | 20 +++++++++---------- .../torvald/terrarum/ui/UIItemTextSelector.kt | 5 +---- .../torvald/terrarum/ui/UIItemVertSlider.kt | 2 ++ 11 files changed, 45 insertions(+), 40 deletions(-) diff --git a/MusicPlayer/src/net/torvald/terrarum/musicplayer/gui/MusicPlayer.kt b/MusicPlayer/src/net/torvald/terrarum/musicplayer/gui/MusicPlayer.kt index 7db5f4dbb..a5d42f6cb 100644 --- a/MusicPlayer/src/net/torvald/terrarum/musicplayer/gui/MusicPlayer.kt +++ b/MusicPlayer/src/net/torvald/terrarum/musicplayer/gui/MusicPlayer.kt @@ -314,7 +314,7 @@ class MusicPlayer(private val ingame: TerrarumIngame) : UICanvas() { // make button work - mouseLatch.latch { + if (mouseUp) mouseLatch.latch { if (mouseOnButton != null) { when (mouseOnButton) { 0 -> { // album diff --git a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt index 574d6b266..1c8171a3f 100644 --- a/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt +++ b/src/net/torvald/terrarum/modulebasegame/ui/UIKeyboardControlPanel.kt @@ -495,7 +495,7 @@ class UIItemControlPaletteBaloon(val parent: UIKeyboardControlPanel, initialX: I iconButtons.forEachIndexed { index, it -> it.update(delta) if (it.mousePushed) { - selected = index + selected = index } } @@ -503,13 +503,10 @@ class UIItemControlPaletteBaloon(val parent: UIKeyboardControlPanel, initialX: I closeButton2.update(delta) // close - if (!mouseLatched && mousePushed) { - mouseLatched = true + if (mouseUp) mouseLatch.latch { parent.setControlOf(parent.keycapClicked, selected) parent.keycapClicked = -13372 } - - if (!mouseDown) mouseLatched = false } } diff --git a/src/net/torvald/terrarum/ui/MouseLatch.kt b/src/net/torvald/terrarum/ui/MouseLatch.kt index c7a32e55a..64c4ff657 100644 --- a/src/net/torvald/terrarum/ui/MouseLatch.kt +++ b/src/net/torvald/terrarum/ui/MouseLatch.kt @@ -44,6 +44,24 @@ class MouseLatch(val button: List = listOf(App.getConfigInt("config_mousepr } } + /** + * Your usual latch except it does not auto-unlatch + */ + fun latchNoRelease(action: () -> Unit) { + if (isNotLatched() && button.any { Gdx.input.isButtonPressed(it) }) { + status.set(true) + action() + } + } + + fun forceLatch() { + status.set(true) + } + + fun forceUnlatch() { + status.set(false) + } + fun unlatch() { if (button.none { Gdx.input.isButtonPressed(it) }) { status.set(false) diff --git a/src/net/torvald/terrarum/ui/UIItem.kt b/src/net/torvald/terrarum/ui/UIItem.kt index c99fc8a77..438202b10 100644 --- a/src/net/torvald/terrarum/ui/UIItem.kt +++ b/src/net/torvald/terrarum/ui/UIItem.kt @@ -99,7 +99,7 @@ abstract class UIItem(var parentUI: UICanvas, val initialX: Int, val initialY: I /** to be used by customised mouse handling */ - protected var mouseLatched = false + protected var mouseLatch = MouseLatch() /** UI to call (show up) while mouse is up */ open var mouseOverCall: UICanvas? = null diff --git a/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt b/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt index fda28e4c5..01e23a119 100644 --- a/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt +++ b/src/net/torvald/terrarum/ui/UIItemHorzSlider.kt @@ -41,6 +41,8 @@ class UIItemHorzSlider( var value: Double = initialValue; private set var selectionChangeListener: (Double) -> Unit = {} + private var mouseLatched = false // trust me this one needs its own binary latch + override fun update(delta: Float) { super.update(delta) diff --git a/src/net/torvald/terrarum/ui/UIItemList.kt b/src/net/torvald/terrarum/ui/UIItemList.kt index 1be67ee88..5bc4bba93 100644 --- a/src/net/torvald/terrarum/ui/UIItemList.kt +++ b/src/net/torvald/terrarum/ui/UIItemList.kt @@ -58,10 +58,10 @@ class UIItemList( /** (oldIndex: Int?, newIndex: Int) -> Unit */ var selectionChangeListener: ((Int?, Int) -> Unit)? = null - private var clickLatched = false + private var clickLatch = MouseLatch() override fun show() { - clickLatched = true + clickLatch.forceLatch() } @@ -94,7 +94,7 @@ class UIItemList( item.update(delta) - if (!clickLatched && item.mousePushed) { + if (item.mouseUp) clickLatch.latchNoRelease { val oldIndex = selectedIndex if (kinematic) { @@ -114,9 +114,7 @@ class UIItemList( } - if (!Terrarum.mouseDown) { - clickLatched = false - } + clickLatch.latch { } // update to unlatch oldPosX = posX } diff --git a/src/net/torvald/terrarum/ui/UIItemSpinner.kt b/src/net/torvald/terrarum/ui/UIItemSpinner.kt index 7d675517b..0530dde4c 100644 --- a/src/net/torvald/terrarum/ui/UIItemSpinner.kt +++ b/src/net/torvald/terrarum/ui/UIItemSpinner.kt @@ -101,14 +101,11 @@ class UIItemSpinner( else 0 - if (!mouseLatched && Terrarum.mouseDown && mouseOnButton in 1..2) { - mouseLatched = true - + if (mouseOnButton in 1..2) mouseLatch.latch { changeValueBy((mouseOnButton * 2) - 3) fboUpdateLatch = true selectionChangeListener(value) } - else if (!Terrarum.mouseDown) mouseLatched = false } private var textCache = "" diff --git a/src/net/torvald/terrarum/ui/UIItemTextButtonList.kt b/src/net/torvald/terrarum/ui/UIItemTextButtonList.kt index 6a9afbc7a..81850cb32 100644 --- a/src/net/torvald/terrarum/ui/UIItemTextButtonList.kt +++ b/src/net/torvald/terrarum/ui/UIItemTextButtonList.kt @@ -158,11 +158,11 @@ class UIItemTextButtonList( private var highlighterYStart = highlightY private var highlighterYEnd = highlightY - private var clickLatched = false + private var clickLatch = MouseLatch() override fun show() { // printdbg(this, "${this.javaClass.simpleName} show()") - clickLatched = true + clickLatch.forceLatch() } /** (oldIndex: Int?, newIndex: Int) -> Unit */ @@ -196,9 +196,7 @@ class UIItemTextButtonList( buttons.forEachIndexed { index, btn -> btn.update(delta) - - if (!clickLatched && btn.mousePushed) { - clickLatched = true + if (btn.mouseUp) clickLatch.latchNoRelease { val oldIndex = selectedIndex // if (kinematic) { @@ -217,9 +215,7 @@ class UIItemTextButtonList( btn.highlighted = (index == selectedIndex) // forcibly highlight if this.highlighted != null } - if (clickLatched && !Terrarum.mouseDown) { - clickLatched = false - } + clickLatch.latch { } // update to unlatch oldPosX = posX } diff --git a/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt b/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt index 94b6e7f9a..8ca25e4fd 100644 --- a/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt +++ b/src/net/torvald/terrarum/ui/UIItemTextLineInput.kt @@ -133,7 +133,7 @@ class UIItemTextLineInput( set(value) { field = value if (!value) { - mouseLatched = false + mouseLatch.forceUnlatch() fboUpdateLatch = false isEnabled = false cursorOn = false @@ -449,17 +449,15 @@ class UIItemTextLineInput( } } - if (mouseDown && !mouseLatched && mouseUpOnIMEButton) { - toggleIME() - mouseLatched = true + mouseLatch.latch { + if (mouseUpOnIMEButton) { + toggleIME() + } + else if (mouseUpOnPasteButton) { + endComposing() + paste(Clipboard.fetch().substringBefore('\n').substringBefore('\t').toCodePoints()) + } } - else if (mouseDown && !mouseLatched && mouseUpOnPasteButton) { - endComposing() - paste(Clipboard.fetch().substringBefore('\n').substringBefore('\t').toCodePoints()) - mouseLatched = true - } - - if (!mouseDown) mouseLatched = false imeOn = KeyToggler.isOn(ControlPresets.getKey("control_key_toggleime")) } diff --git a/src/net/torvald/terrarum/ui/UIItemTextSelector.kt b/src/net/torvald/terrarum/ui/UIItemTextSelector.kt index 593ec5474..196e94947 100644 --- a/src/net/torvald/terrarum/ui/UIItemTextSelector.kt +++ b/src/net/torvald/terrarum/ui/UIItemTextSelector.kt @@ -98,7 +98,7 @@ class UIItemTextSelector( } - if (!mouseLatched && Terrarum.mouseDown) { + mouseLatch.latch { if (paletteShowing && mouseOnPaletteItem != null ) { selection = mouseOnPaletteItem!! fboUpdateLatch = true @@ -125,10 +125,7 @@ class UIItemTextSelector( else { paletteShowing = false } - - mouseLatched = true } - else if (!Terrarum.mouseDown) mouseLatched = false } private val leftIcon = if (useSpinnerButtons) labels.get(9,2) else labels.get(16,0) diff --git a/src/net/torvald/terrarum/ui/UIItemVertSlider.kt b/src/net/torvald/terrarum/ui/UIItemVertSlider.kt index 643b6a4fb..b74b2a26b 100644 --- a/src/net/torvald/terrarum/ui/UIItemVertSlider.kt +++ b/src/net/torvald/terrarum/ui/UIItemVertSlider.kt @@ -36,6 +36,8 @@ class UIItemVertSlider( var value: Double = initialValue; private set var selectionChangeListener: (Double) -> Unit = {} + private var mouseLatched = false // trust me this one needs its own binary latch + init { printdbg(this, "slider max=$max") }