diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/MenuTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/MenuTest.kt
new file mode 100644
index 000000000..007637bc7
--- /dev/null
+++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/MenuTest.kt
@@ -0,0 +1,56 @@
+/*
+ * Minosoft
+ * Copyright (C) 2020-2023 Moritz Zwerger
+ *
+ * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with this program. If not, see .
+ *
+ * This software is not affiliated with Mojang AB, the original developer of Minecraft.
+ */
+
+package de.bixilon.minosoft.gui.rendering.gui.gui.screen.menu
+
+import de.bixilon.kotlinglm.vec2.Vec2
+import de.bixilon.minosoft.gui.rendering.font.renderer.element.TextRenderProperties
+import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer
+import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement
+import de.bixilon.minosoft.gui.rendering.gui.test.GuiRenderTestUtil
+import de.bixilon.minosoft.gui.rendering.gui.test.GuiTestConsumer
+import org.testng.Assert.assertEquals
+import org.testng.annotations.Test
+
+@Test(groups = ["gui"])
+class MenuTest {
+
+ fun initialize() {
+ menu(GuiRenderTestUtil.create())
+ }
+
+ fun `assert correct screen size`() {
+ val menu = menu(GuiRenderTestUtil.create())
+ assertEquals(menu.size, Vec2(1920, 1080))
+ }
+
+ fun `basic rendering`() {
+ val menu = menu(GuiRenderTestUtil.create())
+
+ val consumer = GuiTestConsumer()
+ menu.render(Vec2(0, 0), consumer, null)
+
+ consumer.assert(GuiTestConsumer.RendererdQuad(Vec2(0, 0), Vec2(1920, 1080)))
+ // TODO
+ }
+
+ // TODO: test correct layout, mouse, keyboard action, tabbing, element width (e.g. buttons), changing of elements,
+
+
+ fun menu(guiRenderer: GUIRenderer) = object : Menu(guiRenderer) {
+
+ init {
+ this += TextElement(guiRenderer, "bcd", background = null, properties = TextRenderProperties(shadow = false))
+ }
+ }
+}
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/Screen.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/Screen.kt
index 5da60bc17..322feff0e 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/Screen.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/Screen.kt
@@ -17,6 +17,7 @@ import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.minosoft.data.text.formatting.color.RGBColor
import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer
import de.bixilon.minosoft.gui.rendering.gui.abstractions.children.ChildedElement
+import de.bixilon.minosoft.gui.rendering.gui.abstractions.children.manager.ChildrenManager
import de.bixilon.minosoft.gui.rendering.gui.abstractions.children.manager.collection.SetChildrenManager
import de.bixilon.minosoft.gui.rendering.gui.elements.Element
import de.bixilon.minosoft.gui.rendering.gui.elements.ScreenPositionedElement
@@ -28,14 +29,18 @@ import de.bixilon.minosoft.gui.rendering.util.vec.vec2.Vec2Util.EMPTY
abstract class Screen(
guiRenderer: GUIRenderer,
) : Element(guiRenderer), ScreenPositionedElement, ChildedElement {
- override val children = SetChildrenManager(this)
+ override val children: ChildrenManager = SetChildrenManager(this)
protected val background = AtlasImageElement(guiRenderer, context.textures.whiteTexture, size = guiRenderer.screen.scaled, tint = RGBColor(0.0f, 0.0f, 0.0f, 0.8f))
override val screenOffset: Vec2 = Vec2(0, 0)
init {
construct()
+ }
+
+ override fun construct() {
background.parent = this
+ super.construct()
}
override fun update() {
diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/Menu.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/Menu.kt
index b4202700d..690c03785 100644
--- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/Menu.kt
+++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/gui/screen/menu/Menu.kt
@@ -17,7 +17,6 @@ import de.bixilon.kotlinglm.vec2.Vec2
import de.bixilon.kotlinglm.vec2.Vec2i
import de.bixilon.minosoft.config.key.KeyCodes
import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer
-import de.bixilon.minosoft.gui.rendering.gui.abstractions.children.manager.collection.SetChildrenManager
import de.bixilon.minosoft.gui.rendering.gui.elements.Element
import de.bixilon.minosoft.gui.rendering.gui.gui.AbstractLayout
import de.bixilon.minosoft.gui.rendering.gui.gui.screen.Screen
@@ -32,7 +31,6 @@ abstract class Menu(
guiRenderer: GUIRenderer,
val preferredElementWidth: Float = 150.0f,
) : Screen(guiRenderer), AbstractLayout {
- override val children = SetChildrenManager(this)
private val elements: MutableList = mutableListOf()
private var maxElementWidth = -1.0f
@@ -41,6 +39,10 @@ abstract class Menu(
override var activeElement: Element? = null
override var activeDragElement: Element? = null
+ init {
+ super.construct()
+ }
+
override fun update() {
val elementWidth = maxOf(minOf(preferredElementWidth, size.x / 3), 0.0f)
var maxElementWidth = elementWidth
@@ -219,4 +221,6 @@ abstract class Menu(
private companion object {
const val BUTTON_Y_MARGIN = 5.0f
}
+
+ override fun construct() = Unit
}