mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2025-12-20 02:59:19 +01:00
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:
parent
5e172ee804
commit
dfbcb0418c
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -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 =>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user