menu: button hovering

This commit is contained in:
Bixilon 2022-01-21 22:19:46 +01:00
parent a2586c370b
commit 4a4b897498
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 31 additions and 4 deletions

View File

@ -66,7 +66,7 @@ class GUIManager(
fun onMatrixChange() {
for (element in elements) {
if (element is LayoutedGUIElement<*>) {
element.elementLayout.silentApply()
element.elementLayout.forceSilentApply()
}
element.apply()
}

View File

@ -23,12 +23,13 @@ import glm_.vec2.Vec2i
abstract class Menu(guiRenderer: GUIRenderer) : Screen(guiRenderer) {
private val buttons: MutableList<ButtonElement> = mutableListOf()
private var lastMouseMove: ButtonElement? = null
private var buttonWidth = -1
private var totalHeight = -1
override fun forceSilentApply() {
buttonWidth = _size.x / 3 // 1 left and right
buttonWidth = size.x / 3 // 1 left and right
var totalHeight = 0
for (button in buttons) {
@ -62,11 +63,37 @@ abstract class Menu(guiRenderer: GUIRenderer) : Screen(guiRenderer) {
}
override fun onMouseMove(position: Vec2i) {
buttons.getOrNull(0)?.onMouseMove(position)
val (delta, button) = getButtonAndPositionAt(position)
lastMouseMove?.onMouseMove(delta)
button?.onMouseMove(delta)
lastMouseMove = button
}
override fun onChildChange(child: Element) {
cacheUpToDate = false
forceSilentApply()
}
fun getButtonAndPositionAt(position: Vec2i): Pair<Vec2i, ButtonElement?> {
var delta = position
var button: ButtonElement? = null
if (position.x in buttonWidth..buttonWidth * 2) {
// x matches
val yStart = (size.y - totalHeight) / 2
var yOffset = position.y - yStart
for (buttonEntry in buttons) {
val buttonSize = buttonEntry.size
if (yOffset < buttonSize.y) {
button = buttonEntry
break
}
yOffset -= buttonSize.y
yOffset -= BUTTON_Y_MARGIN
}
delta = Vec2i(position.x - buttonWidth, yOffset)
}
return Pair(delta, button)
}
private companion object {