summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/util/LinearInterpolation.kt46
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
+ }
+}