diff options
| -rw-r--r-- | android/src/main/kotlin/net/mullvad/mullvadvpn/util/LinearInterpolation.kt | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/util/LinearInterpolation.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/LinearInterpolation.kt new file mode 100644 index 0000000000..ea0f21ad49 --- /dev/null +++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/util/LinearInterpolation.kt @@ -0,0 +1,46 @@ +package net.mullvad.mullvadvpn.util + +import kotlin.properties.Delegates.observable +import kotlin.reflect.KProperty + +class LinearInterpolation { + private val observer = { property: KProperty<*>, oldValue: Float, newValue: Float -> + if (!updated && oldValue != newValue) { + updated = true + } + } + + private val realStart + get() = start - reference + + private val realEnd + get() = end - reference + + var reference by observable(0.0f, observer) + var start by observable(0.0f, observer) + var end by observable(0.0f, observer) + + var updated = true + get() { + if (field == true) { + field = false + return true + } else { + return false + } + } + + fun interpolate(progress: Float): Float { + return progress * (realEnd - realStart) + realStart + } + + fun progress(interpolation: Float): Float { + val length = realEnd - realStart + + if (length == 0.0f) { + return 0.0f + } + + return (interpolation - realStart) / length + } +} |
