mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 03:15:35 -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.gui.mesh.GUIVertexConsumer
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.Vec4Util.offset
|
import de.bixilon.minosoft.gui.rendering.util.vec.Vec4Util.offset
|
||||||
import glm_.vec2.Vec2i
|
import glm_.vec2.Vec2i
|
||||||
|
import java.lang.Integer.min
|
||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
|
|
||||||
class GridLayout(hudRenderer: HUDRenderer, val grid: Vec2i) : Layout(hudRenderer) {
|
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 columnStart = IntArray(grid.x)
|
||||||
private var rowStart = IntArray(grid.y)
|
private var rowStart = IntArray(grid.y)
|
||||||
|
|
||||||
|
operator fun set(position: Vec2i, element: Element) = add(position, element)
|
||||||
|
|
||||||
fun add(position: Vec2i, element: Element) {
|
fun add(position: Vec2i, element: Element) {
|
||||||
children[position.x][position.y]?.parent = null
|
children[position.x][position.y]?.parent = null
|
||||||
|
|
||||||
@ -51,6 +54,7 @@ class GridLayout(hudRenderer: HUDRenderer, val grid: Vec2i) : Layout(hudRenderer
|
|||||||
|
|
||||||
|
|
||||||
override fun silentApply() {
|
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
|
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 (x in 0 until grid.x) {
|
||||||
for (y in 0 until grid.y) {
|
for (y in 0 until grid.y) {
|
||||||
val child = children[x][y] ?: continue
|
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) {
|
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
|
// apply the size changes to all children
|
||||||
applyOnlyChildren()
|
applyOnlyChildren()
|
||||||
|
|
||||||
|
|
||||||
|
// ToDo: Respect maxSize?
|
||||||
val columnStart = IntArray(grid.x)
|
val columnStart = IntArray(grid.x)
|
||||||
// set the start offsets
|
// set the start offsets
|
||||||
for (x in 1 until grid.x) {
|
for (x in 1 until grid.x) {
|
||||||
@ -86,7 +124,7 @@ class GridLayout(hudRenderer: HUDRenderer, val grid: Vec2i) : Layout(hudRenderer
|
|||||||
}
|
}
|
||||||
this.columnStart = columnStart
|
this.columnStart = columnStart
|
||||||
|
|
||||||
// ToDo: Set size
|
size = Vec2i(width.sum(), 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun apply() {
|
override fun apply() {
|
||||||
|
@ -50,15 +50,13 @@ class DebugHUD(val hudRenderer: HUDRenderer) : HUD<GridLayout> {
|
|||||||
|
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
val left = initLeft()
|
layout[Vec2i(0, 0)] = initLeft()
|
||||||
val right = initRight()
|
layout[Vec2i(2, 0)] = initRight()
|
||||||
|
|
||||||
layout.add(Vec2i(0, 0), left)
|
|
||||||
layout.add(Vec2i(2, 0), right)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initLeft(): Element {
|
private fun initLeft(): Element {
|
||||||
val layout = RowLayout(hudRenderer)
|
val layout = RowLayout(hudRenderer)
|
||||||
|
// ToDo: layout.margin = Vec4i(5)
|
||||||
layout += TextElement(hudRenderer, TextComponent(RunConfiguration.VERSION_STRING, ChatColors.RED))
|
layout += TextElement(hudRenderer, TextComponent(RunConfiguration.VERSION_STRING, ChatColors.RED))
|
||||||
layout += AutoTextElement(hudRenderer, 1) { "FPS ${renderWindow.renderStats.smoothAvgFPS.round10}" }
|
layout += AutoTextElement(hudRenderer, 1) { "FPS ${renderWindow.renderStats.smoothAvgFPS.round10}" }
|
||||||
renderWindow[WorldRenderer]?.apply {
|
renderWindow[WorldRenderer]?.apply {
|
||||||
@ -83,7 +81,8 @@ class DebugHUD(val hudRenderer: HUDRenderer) : HUD<GridLayout> {
|
|||||||
|
|
||||||
private fun initRight(): Element {
|
private fun initRight(): Element {
|
||||||
val layout = RowLayout(hudRenderer, ElementAlignments.RIGHT)
|
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)
|
layout += LineSpacerElement(hudRenderer)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user