From 7c028b1fa637486c86ab875d13f96ae4050b108c Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Fri, 21 Mar 2025 15:11:09 +0700 Subject: [PATCH] Im with stupid --- .../client/screen/panels/util/GridPanel.kt | 79 ++++++++++--------- 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/GridPanel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/GridPanel.kt index 3b655f3de..008634fac 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/GridPanel.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/util/GridPanel.kt @@ -53,46 +53,54 @@ open class GridPanel( enum class Layout { TOP_LEFT { - override fun rows(last: Int): IntIterator { - return (0 until last).iterator() - } - - override fun columns(last: Int): IntIterator { - return (0 until last).iterator() + override fun get( + list: List>, + row: Int, + column: Int, + rows: Int, + columns: Int + ): EditablePanel<*>? { + return list.getOrNull(column + row * columns) } }, TOP_RIGHT { - override fun rows(last: Int): IntIterator { - return (0 until last).iterator() - } - - override fun columns(last: Int): IntIterator { - return (last - 1 downTo 0).iterator() + override fun get( + list: List>, + row: Int, + column: Int, + rows: Int, + 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 { - return (0 until last).iterator() + BOTTOM_LEFT { + override fun get( + list: List>, + row: Int, + column: Int, + rows: Int, + columns: Int + ): EditablePanel<*>? { + return list.getOrNull(column + (rows - row - 1) * columns) } }, BOTTOM_RIGHT { - override fun rows(last: Int): IntIterator { - return (last - 1 downTo 0).iterator() - } - - override fun columns(last: Int): IntIterator { - return (last - 1 downTo 0).iterator() + override fun get( + list: List>, + row: Int, + column: Int, + rows: Int, + columns: Int + ): EditablePanel<*>? { + return list.getOrNull((columns - column - 1) + (rows - row - 1) * columns) } }; - abstract fun rows(last: Int): IntIterator - abstract fun columns(last: Int): IntIterator + abstract fun get(list: List>, row: Int, column: Int, rows: Int, columns: Int): EditablePanel<*>? } override fun sizeToContents() { @@ -108,11 +116,11 @@ open class GridPanel( 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 rowWidth = 0f - for (column in layout.columns(columns)) { + for (column in 0 until columns) { val nextChild = children.maybe() ?: break rowWidth += nextChild.width + nextChild.dockMargin.horizontal maxHeight = max(maxHeight, nextChild.height + nextChild.dockMargin.vertical) @@ -128,17 +136,17 @@ open class GridPanel( override fun 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 totalHeight = 0f - for (row in layout.rows(rows)) { + for (row in 0 until rows) { var maxHeight = 0f var width = 0f - for (column in layout.columns(columns)) { - val child = children.maybe() ?: break + for (column in 0 until columns) { + val child = layout.get(children, row, column, rows, columns) ?: continue width += child.dockedWidth maxHeight = maxHeight.coerceAtLeast(child.dockedHeight) } @@ -149,17 +157,16 @@ open class GridPanel( val alignX = gravity.repositionX(width, totalWidth) val alignY = gravity.repositionY(height, totalHeight) - children = visibleChildren.iterator().filter { it.dock == Dock.NONE } totalWidth = 0f totalHeight = 0f - for (row in layout.rows(rows)) { + for (row in 0 until rows) { var maxHeight = 0f var width = 0f - for (column in layout.columns(columns)) { - val child = children.maybe() ?: break + for (column in 0 until columns) { + val child = layout.get(children, row, column, rows, columns) ?: continue child.x = alignX + width child.y = alignY + totalHeight width += child.dockedWidth