Don't spam drag events if asked nicely

This commit is contained in:
Fingercomp 2025-08-31 19:45:56 +03:00
parent b17efa3aa2
commit c9f8f4a123
No known key found for this signature in database
GPG Key ID: BBC71CEE45D86E37
2 changed files with 10 additions and 4 deletions

View File

@ -23,6 +23,11 @@ trait MouseHandler extends Widget {
protected def receiveDragEvents: Boolean = false
/**
* If `true`, drag events, once they start, will be sent on every update cycle when if the mouse does not move.
*/
protected def spamDragEvents: Boolean = true
/**
* If `true`, a [[ClickEvent]] will be registered even if the mouse button is released
* outside the tolerance threshold, as long as it stays within the widget's bounds.
@ -89,7 +94,7 @@ trait MouseHandler extends Widget {
}
}
dragButtons.foreach(button => {
for (button <- dragButtons if spamDragEvents || prevPositions(button) != mousePos) {
handleEvent(
DragEvent(
DragEvent.State.Drag,
@ -99,9 +104,9 @@ trait MouseHandler extends Widget {
mousePos - prevPositions(button),
)
)
prevPositions(button) = mousePos
}
)
}
}

View File

@ -103,8 +103,9 @@ class TextInput(val initialText: String = "") extends Widget with MouseHandler w
override def maximumSize: Size2D = Size2D(Float.PositiveInfinity, 24)
override def receiveAllMouseEvents = true
override def receiveDragEvents: Boolean = true
override def receiveClickEvents: Boolean = true
override protected def receiveDragEvents: Boolean = true
override protected def receiveClickEvents: Boolean = true
override protected def spamDragEvents: Boolean = false
private def mouseInBounds: Boolean = clippedBounds.contains(UiHandler.mousePosition)