@@ -54,9 +54,9 @@ public class SliderState(
54
54
*
55
55
*/
56
56
public var value: Float
57
- get() = valueState.coerceIntoDisabledRange()
57
+ get() = valueState
58
58
set(value) {
59
- valueState = value.coerceIntoDisabledRange( )
59
+ valueState = coerceValue(value )
60
60
}
61
61
62
62
/* *
@@ -110,35 +110,18 @@ public class SliderState(
110
110
}
111
111
}
112
112
113
- internal fun coerceValue (value : Float ): Float {
114
- return value
115
- .coerceIn(range)
116
- .coerceIntoDisabledRange()
117
- }
118
-
119
- private fun coerceRangeIntoFractions (
120
- subrange : ClosedFloatingPointRange <Float >,
121
- ): ClosedFloatingPointRange <Float > {
122
- if (subrange.isEmpty()) return subrange
123
- val interpolatedRange = valueDistribution.interpolate(range)
124
- val interpolatedSubrange = valueDistribution.interpolate(subrange)
125
- return calcFraction(
126
- interpolatedRange.start,
127
- interpolatedRange.endInclusive,
128
- interpolatedSubrange.start,
129
- ).. calcFraction(
130
- interpolatedRange.start,
131
- interpolatedRange.endInclusive,
132
- interpolatedSubrange.endInclusive,
133
- )
134
- }
135
-
113
+ /* *
114
+ * Scales offset in to the value that user should see
115
+ */
136
116
private fun scaleToUserValue (offset : Float ): Float {
137
117
val range = valueDistribution.interpolate(range)
138
118
val scaledUserValue = scale(0f , totalWidth, offset, range.start, range.endInclusive)
139
119
return coerceValue(valueDistribution.inverse(scaledUserValue))
140
120
}
141
121
122
+ /* *
123
+ * Converts value of the user into the raw offset on the track
124
+ */
142
125
private fun scaleToOffset (value : Float ): Float {
143
126
val coerced = coerceValue(value)
144
127
val interpolatedRange = valueDistribution.interpolate(range)
@@ -152,6 +135,12 @@ public class SliderState(
152
135
)
153
136
}
154
137
138
+ internal fun coerceValue (value : Float ): Float {
139
+ return value
140
+ .coerceIn(range)
141
+ .coerceIntoDisabledRange()
142
+ }
143
+
155
144
private fun Float.coerceIntoDisabledRange (): Float {
156
145
if (disabledRange.isEmpty()) return this
157
146
// check if disabled range is on the left or right
@@ -161,6 +150,23 @@ public class SliderState(
161
150
coerceAtMost(disabledRange.start)
162
151
}
163
152
}
153
+
154
+ private fun coerceRangeIntoFractions (
155
+ subrange : ClosedFloatingPointRange <Float >,
156
+ ): ClosedFloatingPointRange <Float > {
157
+ if (subrange.isEmpty()) return subrange
158
+ val interpolatedRange = valueDistribution.interpolate(range)
159
+ val interpolatedSubrange = valueDistribution.interpolate(subrange)
160
+ return calcFraction(
161
+ interpolatedRange.start,
162
+ interpolatedRange.endInclusive,
163
+ interpolatedSubrange.start,
164
+ ).. calcFraction(
165
+ interpolatedRange.start,
166
+ interpolatedRange.endInclusive,
167
+ interpolatedSubrange.endInclusive,
168
+ )
169
+ }
164
170
}
165
171
166
172
@Composable
0 commit comments