Add Arrangement.BottomReversed to reverse column direction

This commit is contained in:
MM20 2022-03-31 18:44:24 +02:00
parent 28647f3bcc
commit 93bd62545d
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -0,0 +1,40 @@
package de.mm20.launcher2.ui.layout
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.runtime.Stable
import androidx.compose.ui.unit.Density
@Stable
val Arrangement.BottomReversed: Arrangement.Vertical
get() = object : Arrangement.Vertical {
override fun Density.arrange(
totalSize: Int,
sizes: IntArray,
outPositions: IntArray
) = placeRightOrBottom(totalSize, sizes, outPositions, reverseInput = true)
override fun toString() = "Arrangement#BottomReversed"
}
internal fun placeRightOrBottom(
totalSize: Int,
size: IntArray,
outPosition: IntArray,
reverseInput: Boolean
) {
val consumedSize = size.fold(0) { a, b -> a + b }
var current = totalSize - consumedSize
size.forEachIndexed(reverseInput) { index, it ->
outPosition[index] = current
current += it
}
}
private inline fun IntArray.forEachIndexed(reversed: Boolean, action: (Int, Int) -> Unit) {
if (!reversed) {
forEachIndexed(action)
} else {
for (i in (size - 1) downTo 0) {
action(i, get(i))
}
}
}