mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-19 04:15:14 -04:00
menu: check element width
This commit is contained in:
parent
33b9744dca
commit
8c41c4566f
@ -82,40 +82,40 @@ abstract class Menu(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onMouseMove(position: Vec2i) {
|
override fun onMouseMove(position: Vec2i) {
|
||||||
val (delta, element) = getAt(position)
|
val pair = getAt(position)
|
||||||
|
|
||||||
if (activeElement != element) {
|
if (activeElement != pair?.first) {
|
||||||
activeElement?.onMouseLeave()
|
activeElement?.onMouseLeave()
|
||||||
element?.onMouseEnter(delta)
|
pair?.first?.onMouseEnter(pair.second)
|
||||||
activeElement = element
|
activeElement = pair?.first
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
element?.onMouseMove(delta)
|
pair?.first?.onMouseMove(pair.second)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMouseEnter(position: Vec2i) {
|
override fun onMouseEnter(position: Vec2i) {
|
||||||
val (delta, element) = getAt(position)
|
val pair = getAt(position)
|
||||||
element?.onMouseEnter(delta)
|
pair?.first?.onMouseEnter(pair.second)
|
||||||
activeElement = element
|
activeElement = pair?.first
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMouseAction(position: Vec2i, button: MouseButtons, action: MouseActions) {
|
override fun onMouseAction(position: Vec2i, button: MouseButtons, action: MouseActions) {
|
||||||
val (delta, element) = getAt(position)
|
val (element, delta) = getAt(position) ?: return
|
||||||
element?.onMouseAction(delta, button, action)
|
element.onMouseAction(delta, button, action)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onChildChange(child: Element) {
|
override fun onChildChange(child: Element) {
|
||||||
forceSilentApply()
|
forceSilentApply()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAt(position: Vec2i): Pair<Vec2i, Element?> {
|
fun getAt(position: Vec2i): Pair<Element, Vec2i>? {
|
||||||
val delta = Vec2i(position)
|
|
||||||
var element: Element? = null
|
var element: Element? = null
|
||||||
|
val delta = Vec2i(position)
|
||||||
val elementWidth = maxElementWidth
|
val elementWidth = maxElementWidth
|
||||||
val size = size
|
val size = size
|
||||||
val xStart = (size.x - elementWidth) / 2
|
val xStart = (size.x - elementWidth) / 2
|
||||||
if (position.x < xStart || position.x >= xStart + elementWidth) {
|
if (position.x < xStart || position.x >= xStart + elementWidth) {
|
||||||
return Pair(Vec2i(0, 0), null)
|
return null
|
||||||
}
|
}
|
||||||
delta.x = position.x - xStart
|
delta.x = position.x - xStart
|
||||||
// x matches
|
// x matches
|
||||||
@ -135,12 +135,18 @@ abstract class Menu(
|
|||||||
}
|
}
|
||||||
delta.y = yOffset
|
delta.y = yOffset
|
||||||
|
|
||||||
if (element != null) {
|
if (element == null) {
|
||||||
val elementSize = element.size
|
return null
|
||||||
// ToDo: Check x
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Pair(delta, element)
|
val width = element.size.x
|
||||||
|
val halfWidthDelta = (elementWidth - width) / 2
|
||||||
|
delta.x -= halfWidthDelta
|
||||||
|
if (delta.x < 0 || delta.x >= width) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return Pair(element, delta)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun tick() {
|
override fun tick() {
|
||||||
@ -190,8 +196,8 @@ abstract class Menu(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onScroll(position: Vec2i, scrollOffset: Vec2d) {
|
override fun onScroll(position: Vec2i, scrollOffset: Vec2d) {
|
||||||
val (delta, element) = getAt(position)
|
val (element, delta) = getAt(position) ?: return
|
||||||
element?.onScroll(delta, scrollOffset)
|
element.onScroll(delta, scrollOffset)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reset() {
|
private fun reset() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user