Merge branch '1.21' into new-container-api

This commit is contained in:
DBotThePony 2025-03-21 15:11:17 +07:00
commit 2547478914
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -53,46 +53,54 @@ open class GridPanel<out S : Screen>(
enum class Layout { enum class Layout {
TOP_LEFT { TOP_LEFT {
override fun rows(last: Int): IntIterator { override fun get(
return (0 until last).iterator() list: List<EditablePanel<*>>,
} row: Int,
column: Int,
override fun columns(last: Int): IntIterator { rows: Int,
return (0 until last).iterator() columns: Int
): EditablePanel<*>? {
return list.getOrNull(column + row * columns)
} }
}, },
TOP_RIGHT { TOP_RIGHT {
override fun rows(last: Int): IntIterator { override fun get(
return (0 until last).iterator() list: List<EditablePanel<*>>,
} row: Int,
column: Int,
override fun columns(last: Int): IntIterator { rows: Int,
return (last - 1 downTo 0).iterator() columns: Int
): EditablePanel<*>? {
return list.getOrNull((columns - column - 1) + row * columns)
} }
}, },
BOTTOM_LEFT {
override fun rows(last: Int): IntIterator {
return (last - 1 downTo 0).iterator()
}
override fun columns(last: Int): IntIterator { BOTTOM_LEFT {
return (0 until last).iterator() override fun get(
list: List<EditablePanel<*>>,
row: Int,
column: Int,
rows: Int,
columns: Int
): EditablePanel<*>? {
return list.getOrNull(column + (rows - row - 1) * columns)
} }
}, },
BOTTOM_RIGHT { BOTTOM_RIGHT {
override fun rows(last: Int): IntIterator { override fun get(
return (last - 1 downTo 0).iterator() list: List<EditablePanel<*>>,
} row: Int,
column: Int,
override fun columns(last: Int): IntIterator { rows: Int,
return (last - 1 downTo 0).iterator() columns: Int
): EditablePanel<*>? {
return list.getOrNull((columns - column - 1) + (rows - row - 1) * columns)
} }
}; };
abstract fun rows(last: Int): IntIterator abstract fun get(list: List<EditablePanel<*>>, row: Int, column: Int, rows: Int, columns: Int): EditablePanel<*>?
abstract fun columns(last: Int): IntIterator
} }
override fun sizeToContents() { override fun sizeToContents() {
@ -108,11 +116,11 @@ open class GridPanel<out S : Screen>(
val children = visibleChildren.iterator().filter { it.dock == Dock.NONE } val children = visibleChildren.iterator().filter { it.dock == Dock.NONE }
for (row in layout.rows(rows)) { for (row in 0 until rows) {
var maxHeight = 0f var maxHeight = 0f
var rowWidth = 0f var rowWidth = 0f
for (column in layout.columns(columns)) { for (column in 0 until columns) {
val nextChild = children.maybe() ?: break val nextChild = children.maybe() ?: break
rowWidth += nextChild.width + nextChild.dockMargin.horizontal rowWidth += nextChild.width + nextChild.dockMargin.horizontal
maxHeight = max(maxHeight, nextChild.height + nextChild.dockMargin.vertical) maxHeight = max(maxHeight, nextChild.height + nextChild.dockMargin.vertical)
@ -128,17 +136,17 @@ open class GridPanel<out S : Screen>(
override fun performLayout() { override fun performLayout() {
super.performLayout() super.performLayout()
var children = visibleChildren.iterator().filter { it.dock == Dock.NONE } val children = visibleChildren.stream().filter { it.dock == Dock.NONE }.toList()
var totalWidth = 0f var totalWidth = 0f
var totalHeight = 0f var totalHeight = 0f
for (row in layout.rows(rows)) { for (row in 0 until rows) {
var maxHeight = 0f var maxHeight = 0f
var width = 0f var width = 0f
for (column in layout.columns(columns)) { for (column in 0 until columns) {
val child = children.maybe() ?: break val child = layout.get(children, row, column, rows, columns) ?: continue
width += child.dockedWidth width += child.dockedWidth
maxHeight = maxHeight.coerceAtLeast(child.dockedHeight) maxHeight = maxHeight.coerceAtLeast(child.dockedHeight)
} }
@ -149,17 +157,16 @@ open class GridPanel<out S : Screen>(
val alignX = gravity.repositionX(width, totalWidth) val alignX = gravity.repositionX(width, totalWidth)
val alignY = gravity.repositionY(height, totalHeight) val alignY = gravity.repositionY(height, totalHeight)
children = visibleChildren.iterator().filter { it.dock == Dock.NONE }
totalWidth = 0f totalWidth = 0f
totalHeight = 0f totalHeight = 0f
for (row in layout.rows(rows)) { for (row in 0 until rows) {
var maxHeight = 0f var maxHeight = 0f
var width = 0f var width = 0f
for (column in layout.columns(columns)) { for (column in 0 until columns) {
val child = children.maybe() ?: break val child = layout.get(children, row, column, rows, columns) ?: continue
child.x = alignX + width child.x = alignX + width
child.y = alignY + totalHeight child.y = alignY + totalHeight
width += child.dockedWidth width += child.dockedWidth