mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-09 15:53:37 +00:00
52 lines
1.9 KiB
Kotlin
Vendored
52 lines
1.9 KiB
Kotlin
Vendored
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 |