blob: 9eaae318582e247ae10cf0ad6d29981188a1baa5 [file] [log] [blame]
class Range<T>(val min: T, val max: T)
class Sprite
class A {
private fun calcSpriteSizeRange(layoutSize: Int,
sprites: Map<Long, Sprite>,
minMargin: Int,
range: Range<Int>)
: Pair<Range<Int>, Int> {
val count = sprites.count()
var spriteBounds = layoutSize / count.toFloat()
require(spriteBounds * count <= layoutSize) {
val result = spriteBounds * count <= layoutSize
"Algorithm incorrect: $spriteBounds * " +
"$count == $result <= $layoutSize"
}
val adjustedMargin = minMargin + (minMargin / count.toFloat())
spriteBounds -= adjustedMargin
var size = spriteBounds
require((size * count) + minMargin * (count + 1)
<= layoutSize) {
val result = size * count + minMargin * (count + 1)
"Algorithm incorrect: $size * $count + " +
"$minMargin * ($count + 1) == $result <= $layoutSize"
}
size = kotlin.math.min(size, range.max.toFloat())
require(size > 0) {
"Maximum palantir size ${size.toInt()} > 0."
}
val minSize =
if (range.min > size) {
size
} else {
range.min.toFloat()
}
val margin = (layoutSize - (size * count)) / (count + 1)
val adjustedRange = Range(minSize.toInt(), size.toInt())
val requiredSize =
calcRequiredLayoutSize(count, adjustedRange.max, margin.toInt())
require(requiredSize <= layoutSize) {
"requiredSize <= layoutSize -> " +
"$requiredSize <= $layoutSize"
}
return Pair(adjustedRange, margin.toInt())
}
}
fun calcRequiredLayoutSize(count: Int, max: Int, toInt: Int) = 0
// 3 ISTORE 10