LayoutedGUIElement: fix mouse position calculation

This commit is contained in:
Bixilon 2022-02-11 21:00:11 +01:00
parent c496f5e978
commit 069fd7a80a
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4

View File

@ -110,17 +110,17 @@ class LayoutedGUIElement<T : LayoutedElement>(
val size = elementLayout.size val size = elementLayout.size
val lastPosition = lastPosition val lastPosition = lastPosition
if (position.isOutside(offset, size)) { if (position.isOutside(offset, offset + size)) {
if (lastPosition.x == -1 || lastPosition.y == -1) { if (lastPosition == INVALID_MOUSE_POSITION) {
return return
} }
// move out // move out
this.lastPosition = Vec2i(-1, -1) this.lastPosition = INVALID_MOUSE_POSITION
elementLayout.onMouseLeave() elementLayout.onMouseLeave()
return return
} }
val delta = position - offset val delta = position - offset
this.lastPosition = position this.lastPosition = delta
if (lastPosition.isOutside(offset, size)) { if (lastPosition.isOutside(offset, size)) {
elementLayout.onMouseEnter(delta) elementLayout.onMouseEnter(delta)
@ -137,27 +137,21 @@ class LayoutedGUIElement<T : LayoutedElement>(
override fun onKeyPress(type: KeyChangeTypes, key: KeyCodes) { override fun onKeyPress(type: KeyChangeTypes, key: KeyCodes) {
val mouseButton = MouseButtons[key] ?: return elementLayout.onKey(key, type) val mouseButton = MouseButtons[key] ?: return elementLayout.onKey(key, type)
val offset = layout.layoutOffset
val size = elementLayout.size
val position = lastPosition val position = lastPosition
if (position.isOutside(offset, size)) { if (position == INVALID_MOUSE_POSITION) {
return return
} }
val delta = position - offset
val mouseAction = MouseActions[type] ?: return val mouseAction = MouseActions[type] ?: return
elementLayout.onMouseAction(delta, mouseButton, mouseAction) elementLayout.onMouseAction(position, mouseButton, mouseAction)
} }
override fun onScroll(scrollOffset: Vec2d) { override fun onScroll(scrollOffset: Vec2d) {
val offset = layout.layoutOffset
val size = elementLayout.size
val position = lastPosition val position = lastPosition
if (position.isOutside(offset, size)) { if (lastPosition == INVALID_MOUSE_POSITION) {
return return
} }
val delta = position - offset elementLayout.onScroll(position, scrollOffset)
elementLayout.onScroll(delta, scrollOffset)
} }
override fun onClose() { override fun onClose() {
@ -172,4 +166,8 @@ class LayoutedGUIElement<T : LayoutedElement>(
override fun onHide() { override fun onHide() {
elementLayout.onHide() elementLayout.onHide()
} }
companion object {
private val INVALID_MOUSE_POSITION = Vec2i(-1, -1)
}
} }