mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-16 02:45:13 -04:00
GridLayout: columns
This commit is contained in:
parent
5fed1600eb
commit
dcb8a05cb5
@ -20,6 +20,7 @@ import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer
|
||||
import de.bixilon.minosoft.gui.rendering.util.vec.Vec4Util.offset
|
||||
import glm_.vec2.Vec2i
|
||||
import java.lang.Integer.min
|
||||
import kotlin.math.max
|
||||
|
||||
class GridLayout(hudRenderer: HUDRenderer, val grid: Vec2i) : Layout(hudRenderer) {
|
||||
@ -30,6 +31,8 @@ class GridLayout(hudRenderer: HUDRenderer, val grid: Vec2i) : Layout(hudRenderer
|
||||
private var columnStart = IntArray(grid.x)
|
||||
private var rowStart = IntArray(grid.y)
|
||||
|
||||
operator fun set(position: Vec2i, element: Element) = add(position, element)
|
||||
|
||||
fun add(position: Vec2i, element: Element) {
|
||||
children[position.x][position.y]?.parent = null
|
||||
|
||||
@ -51,6 +54,7 @@ class GridLayout(hudRenderer: HUDRenderer, val grid: Vec2i) : Layout(hudRenderer
|
||||
|
||||
|
||||
override fun silentApply() {
|
||||
// ToDo: This works with columns, but rows are not yet implemented
|
||||
|
||||
/*
|
||||
Calculate new grid layout (sizes) with the new size of the child
|
||||
@ -65,18 +69,52 @@ class GridLayout(hudRenderer: HUDRenderer, val grid: Vec2i) : Layout(hudRenderer
|
||||
for (x in 0 until grid.x) {
|
||||
for (y in 0 until grid.y) {
|
||||
val child = children[x][y] ?: continue
|
||||
width[x] = max(width[x], child.prefSize.x)
|
||||
width[x] = min(max(width[x], child.prefSize.x), columnConstraints[x].maxWidth)
|
||||
}
|
||||
}
|
||||
|
||||
var alwaysGrowColumns = 0
|
||||
// Set the NEVER growing widths
|
||||
var availableWidth = maxSize.x
|
||||
for (x in 0 until grid.x) {
|
||||
columnConstraints[x].width = width[x]
|
||||
val constraint = columnConstraints[x]
|
||||
val nextAvailable = availableWidth - width[x]
|
||||
if (constraint.grow == GridGrow.ALWAYS) {
|
||||
alwaysGrowColumns++
|
||||
}
|
||||
if (constraint.grow != GridGrow.NEVER) {
|
||||
continue
|
||||
}
|
||||
if (availableWidth != 0) {
|
||||
if (nextAvailable < 0) {
|
||||
constraint.width = availableWidth
|
||||
availableWidth = 0
|
||||
} else {
|
||||
constraint.width = width[x]
|
||||
availableWidth -= width[x]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// set ALWAYS growing widths (and split them)
|
||||
var remainingAlwaysGrowColumns = alwaysGrowColumns
|
||||
if (alwaysGrowColumns > 0) {
|
||||
for (x in 0 until grid.x) {
|
||||
val constraint = columnConstraints[x]
|
||||
if (constraint.grow != GridGrow.ALWAYS) {
|
||||
continue
|
||||
}
|
||||
val widthFraction = availableWidth / remainingAlwaysGrowColumns--
|
||||
constraint.width = min(widthFraction, constraint.maxWidth)
|
||||
availableWidth -= constraint.width
|
||||
}
|
||||
}
|
||||
|
||||
// apply the size changes to all children
|
||||
applyOnlyChildren()
|
||||
|
||||
|
||||
// ToDo: Respect maxSize?
|
||||
val columnStart = IntArray(grid.x)
|
||||
// set the start offsets
|
||||
for (x in 1 until grid.x) {
|
||||
@ -86,7 +124,7 @@ class GridLayout(hudRenderer: HUDRenderer, val grid: Vec2i) : Layout(hudRenderer
|
||||
}
|
||||
this.columnStart = columnStart
|
||||
|
||||
// ToDo: Set size
|
||||
size = Vec2i(width.sum(), 0)
|
||||
}
|
||||
|
||||
override fun apply() {
|
||||
|
@ -50,15 +50,13 @@ class DebugHUD(val hudRenderer: HUDRenderer) : HUD<GridLayout> {
|
||||
|
||||
|
||||
override fun init() {
|
||||
val left = initLeft()
|
||||
val right = initRight()
|
||||
|
||||
layout.add(Vec2i(0, 0), left)
|
||||
layout.add(Vec2i(2, 0), right)
|
||||
layout[Vec2i(0, 0)] = initLeft()
|
||||
layout[Vec2i(2, 0)] = initRight()
|
||||
}
|
||||
|
||||
private fun initLeft(): Element {
|
||||
val layout = RowLayout(hudRenderer)
|
||||
// ToDo: layout.margin = Vec4i(5)
|
||||
layout += TextElement(hudRenderer, TextComponent(RunConfiguration.VERSION_STRING, ChatColors.RED))
|
||||
layout += AutoTextElement(hudRenderer, 1) { "FPS ${renderWindow.renderStats.smoothAvgFPS.round10}" }
|
||||
renderWindow[WorldRenderer]?.apply {
|
||||
@ -83,7 +81,8 @@ class DebugHUD(val hudRenderer: HUDRenderer) : HUD<GridLayout> {
|
||||
|
||||
private fun initRight(): Element {
|
||||
val layout = RowLayout(hudRenderer, ElementAlignments.RIGHT)
|
||||
layout += TextElement(hudRenderer, "Java\n${Runtime.version()} ${System.getProperty("sun.arch.data.model")}bit", ElementAlignments.RIGHT)
|
||||
// ToDo: layout.margin = Vec4i(5)
|
||||
layout += TextElement(hudRenderer, "Java\n${Runtime.version()} ${System.getProperty("sun.arch.data.model")}bit", ElementAlignments.RIGHT) // ToDo: Remove \n
|
||||
|
||||
layout += LineSpacerElement(hudRenderer)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user