Remove MouseEvent.StateChanged because it's redundant

I don't know why I decided that mouse events are level-triggered.
Sometimes I'm just dumb like that. Now here I am, cleaning up after my
stupidity.

Oh, this also makes double-clicks seem less like a speedrunning strat.
This commit is contained in:
Fingercomp 2025-09-03 23:22:49 +03:00
parent 5e172ee804
commit dfbcb0418c
No known key found for this signature in database
GPG Key ID: BBC71CEE45D86E37
4 changed files with 10 additions and 26 deletions

View File

@ -1,7 +1,6 @@
package ocelot.desktop.ui.event package ocelot.desktop.ui.event
case class MouseEvent(state: MouseEvent.State.Value, button: MouseEvent.Button.Value)(val stateChanged: Boolean) case class MouseEvent(state: MouseEvent.State.Value, button: MouseEvent.Button.Value) extends CapturingEvent
extends CapturingEvent
object MouseEvent { object MouseEvent {
object State extends Enumeration { object State extends Enumeration {
@ -13,14 +12,4 @@ object MouseEvent {
val Right: Button.Value = Value(1) val Right: Button.Value = Value(1)
val Middle: Button.Value = Value(2) val Middle: Button.Value = Value(2)
} }
object StateChanged {
def unapply(event: MouseEvent): Option[(State.Value, Button.Value)] = {
if (event.stateChanged) {
MouseEvent.unapply(event)
} else {
None
}
}
}
} }

View File

@ -2,7 +2,7 @@ package ocelot.desktop.ui.event.handlers
import ocelot.desktop.geometry.Vector2D import ocelot.desktop.geometry.Vector2D
import ocelot.desktop.ui.UiHandler import ocelot.desktop.ui.UiHandler
import ocelot.desktop.ui.event.handlers.MouseHandler.{DoubleClickTime, Tolerance} import ocelot.desktop.ui.event.handlers.MouseHandler.{DoubleClickTimeMillis, Tolerance}
import ocelot.desktop.ui.event.{ClickEvent, DoubleClickEvent, DragEvent, MouseEvent} import ocelot.desktop.ui.event.{ClickEvent, DoubleClickEvent, DragEvent, MouseEvent}
import ocelot.desktop.ui.widget.Widget import ocelot.desktop.ui.widget.Widget
@ -61,7 +61,7 @@ trait MouseHandler extends Widget {
if (clicked) { if (clicked) {
handleEvent(ClickEvent(button, mousePos)) handleEvent(ClickEvent(button, mousePos))
val inTimeForDoubleClick = (System.currentTimeMillis() - lastClickTime) < DoubleClickTime * 1000 val inTimeForDoubleClick = System.currentTimeMillis() - lastClickTime < DoubleClickTimeMillis
val sameButton = lastClickButton == button val sameButton = lastClickButton == button
val roughlySamePosition = withinTolerance(lastClickPosition, mousePos) val roughlySamePosition = withinTolerance(lastClickPosition, mousePos)
if (inTimeForDoubleClick && sameButton && roughlySamePosition) { if (inTimeForDoubleClick && sameButton && roughlySamePosition) {
@ -112,5 +112,5 @@ trait MouseHandler extends Widget {
object MouseHandler { object MouseHandler {
private val Tolerance = 8 private val Tolerance = 8
private val DoubleClickTime = 0.2 private val DoubleClickTimeMillis = 1e3f / 3
} }

View File

@ -26,13 +26,8 @@ object MouseEvents {
if (MouseEvent.Button.values.map(_.id).contains(buttonIdx)) { if (MouseEvent.Button.values.map(_.id).contains(buttonIdx)) {
val button = MouseEvent.Button(buttonIdx) val button = MouseEvent.Button(buttonIdx)
val state = if (Mouse.getEventButtonState) MouseEvent.State.Pressed else MouseEvent.State.Released val state = if (Mouse.getEventButtonState) MouseEvent.State.Pressed else MouseEvent.State.Released
val changed = state match { _pressedButtons(button) = Mouse.getEventButtonState
case MouseEvent.State.Pressed => _events += MouseEvent(state, button)
_pressedButtons.add(button)
case MouseEvent.State.Released =>
_pressedButtons.remove(button)
}
_events += MouseEvent(state, button)(changed)
} }
val delta = Mouse.getEventDWheel val delta = Mouse.getEventDWheel
@ -49,7 +44,7 @@ object MouseEvents {
def releaseButtons(): Unit = { def releaseButtons(): Unit = {
for (button <- pressedButtons) { for (button <- pressedButtons) {
_events += MouseEvent(MouseEvent.State.Released, button)(stateChanged = true) _events += MouseEvent(MouseEvent.State.Released, button)
} }
_pressedButtons.clear() _pressedButtons.clear()

View File

@ -143,7 +143,7 @@ class TextInput(val initialText: String = "") extends Widget with MouseHandler w
} }
eventHandlers += { eventHandlers += {
case MouseEvent.StateChanged(MouseEvent.State.Pressed, _) if enabled => case MouseEvent(MouseEvent.State.Pressed, _) if enabled =>
val inBounds = mouseInBounds val inBounds = mouseInBounds
if (isFocused && !inBounds) unfocus() if (isFocused && !inBounds) unfocus()
if (!isFocused && inBounds) focus() if (!isFocused && inBounds) focus()
@ -155,7 +155,7 @@ class TextInput(val initialText: String = "") extends Widget with MouseHandler w
} }
eventHandlers += { eventHandlers += {
case MouseEvent.StateChanged(MouseEvent.State.Pressed, MouseEvent.Button.Right) if isFocused && mouseInBounds => case MouseEvent(MouseEvent.State.Pressed, MouseEvent.Button.Right) if isFocused && mouseInBounds =>
val menu = new ContextMenu val menu = new ContextMenu
if (selection.nonEmpty) { if (selection.nonEmpty) {
@ -177,7 +177,7 @@ class TextInput(val initialText: String = "") extends Widget with MouseHandler w
root.get.contextMenus.open(menu) root.get.contextMenus.open(menu)
case MouseEvent.StateChanged(MouseEvent.State.Pressed, _) if isFocused && mouseInBounds => case MouseEvent(MouseEvent.State.Pressed, _) if isFocused && mouseInBounds =>
selection = None selection = None
case DoubleClickEvent(MouseEvent.Button.Left, _) if isFocused && mouseInBounds => case DoubleClickEvent(MouseEvent.Button.Left, _) if isFocused && mouseInBounds =>