diff --git a/src/main/scala/ocelot/desktop/ui/event/MouseEvent.scala b/src/main/scala/ocelot/desktop/ui/event/MouseEvent.scala index 5f27c6b..21ff24e 100644 --- a/src/main/scala/ocelot/desktop/ui/event/MouseEvent.scala +++ b/src/main/scala/ocelot/desktop/ui/event/MouseEvent.scala @@ -1,7 +1,6 @@ package ocelot.desktop.ui.event -case class MouseEvent(state: MouseEvent.State.Value, button: MouseEvent.Button.Value)(val stateChanged: Boolean) - extends CapturingEvent +case class MouseEvent(state: MouseEvent.State.Value, button: MouseEvent.Button.Value) extends CapturingEvent object MouseEvent { object State extends Enumeration { @@ -13,14 +12,4 @@ object MouseEvent { val Right: Button.Value = Value(1) 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 - } - } - } } diff --git a/src/main/scala/ocelot/desktop/ui/event/handlers/MouseHandler.scala b/src/main/scala/ocelot/desktop/ui/event/handlers/MouseHandler.scala index b4ee378..e44bd4a 100644 --- a/src/main/scala/ocelot/desktop/ui/event/handlers/MouseHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/event/handlers/MouseHandler.scala @@ -2,7 +2,7 @@ package ocelot.desktop.ui.event.handlers import ocelot.desktop.geometry.Vector2D 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.widget.Widget @@ -61,7 +61,7 @@ trait MouseHandler extends Widget { if (clicked) { handleEvent(ClickEvent(button, mousePos)) - val inTimeForDoubleClick = (System.currentTimeMillis() - lastClickTime) < DoubleClickTime * 1000 + val inTimeForDoubleClick = System.currentTimeMillis() - lastClickTime < DoubleClickTimeMillis val sameButton = lastClickButton == button val roughlySamePosition = withinTolerance(lastClickPosition, mousePos) if (inTimeForDoubleClick && sameButton && roughlySamePosition) { @@ -112,5 +112,5 @@ trait MouseHandler extends Widget { object MouseHandler { private val Tolerance = 8 - private val DoubleClickTime = 0.2 + private val DoubleClickTimeMillis = 1e3f / 3 } diff --git a/src/main/scala/ocelot/desktop/ui/event/sources/MouseEvents.scala b/src/main/scala/ocelot/desktop/ui/event/sources/MouseEvents.scala index 69f78b4..3f6ccf4 100644 --- a/src/main/scala/ocelot/desktop/ui/event/sources/MouseEvents.scala +++ b/src/main/scala/ocelot/desktop/ui/event/sources/MouseEvents.scala @@ -26,13 +26,8 @@ object MouseEvents { if (MouseEvent.Button.values.map(_.id).contains(buttonIdx)) { val button = MouseEvent.Button(buttonIdx) val state = if (Mouse.getEventButtonState) MouseEvent.State.Pressed else MouseEvent.State.Released - val changed = state match { - case MouseEvent.State.Pressed => - _pressedButtons.add(button) - case MouseEvent.State.Released => - _pressedButtons.remove(button) - } - _events += MouseEvent(state, button)(changed) + _pressedButtons(button) = Mouse.getEventButtonState + _events += MouseEvent(state, button) } val delta = Mouse.getEventDWheel @@ -49,7 +44,7 @@ object MouseEvents { def releaseButtons(): Unit = { for (button <- pressedButtons) { - _events += MouseEvent(MouseEvent.State.Released, button)(stateChanged = true) + _events += MouseEvent(MouseEvent.State.Released, button) } _pressedButtons.clear() diff --git a/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala b/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala index fc16c2f..5fe6047 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/TextInput.scala @@ -143,7 +143,7 @@ class TextInput(val initialText: String = "") extends Widget with MouseHandler w } eventHandlers += { - case MouseEvent.StateChanged(MouseEvent.State.Pressed, _) if enabled => + case MouseEvent(MouseEvent.State.Pressed, _) if enabled => val inBounds = mouseInBounds if (isFocused && !inBounds) unfocus() if (!isFocused && inBounds) focus() @@ -155,7 +155,7 @@ class TextInput(val initialText: String = "") extends Widget with MouseHandler w } 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 if (selection.nonEmpty) { @@ -177,7 +177,7 @@ class TextInput(val initialText: String = "") extends Widget with MouseHandler w root.get.contextMenus.open(menu) - case MouseEvent.StateChanged(MouseEvent.State.Pressed, _) if isFocused && mouseInBounds => + case MouseEvent(MouseEvent.State.Pressed, _) if isFocused && mouseInBounds => selection = None case DoubleClickEvent(MouseEvent.Button.Left, _) if isFocused && mouseInBounds =>