@@ -9,8 +9,8 @@ package io.github.naverz.pinocchio.slider.compose
9
9
import androidx.annotation.FloatRange
10
10
import androidx.compose.foundation.background
11
11
import androidx.compose.foundation.clickable
12
+ import androidx.compose.foundation.gestures.awaitEachGesture
12
13
import androidx.compose.foundation.gestures.awaitFirstDown
13
- import androidx.compose.foundation.gestures.forEachGesture
14
14
import androidx.compose.foundation.layout.Box
15
15
import androidx.compose.foundation.layout.Column
16
16
import androidx.compose.foundation.layout.Row
@@ -24,21 +24,22 @@ import androidx.compose.foundation.shape.RoundedCornerShape
24
24
import androidx.compose.foundation.text.BasicText
25
25
import androidx.compose.runtime.Composable
26
26
import androidx.compose.runtime.getValue
27
+ import androidx.compose.runtime.mutableFloatStateOf
27
28
import androidx.compose.runtime.mutableStateOf
28
29
import androidx.compose.runtime.remember
29
30
import androidx.compose.runtime.rememberUpdatedState
30
31
import androidx.compose.runtime.setValue
31
32
import androidx.compose.ui.Alignment
32
33
import androidx.compose.ui.Alignment.Companion.CenterHorizontally
33
- import androidx.compose.ui.ExperimentalComposeUiApi
34
34
import androidx.compose.ui.Modifier
35
+ import androidx.compose.ui.geometry.Offset
35
36
import androidx.compose.ui.graphics.Color
36
37
import androidx.compose.ui.graphics.RectangleShape
37
38
import androidx.compose.ui.graphics.SolidColor
38
39
import androidx.compose.ui.input.pointer.PointerEvent
39
40
import androidx.compose.ui.input.pointer.PointerInputChange
40
- import androidx.compose.ui.input.pointer.consumePositionChange
41
41
import androidx.compose.ui.input.pointer.pointerInput
42
+ import androidx.compose.ui.input.pointer.positionChange
42
43
import androidx.compose.ui.layout.Layout
43
44
import androidx.compose.ui.tooling.preview.Preview
44
45
import androidx.compose.ui.unit.DpSize
@@ -50,7 +51,6 @@ import io.github.naverz.pinocchio.slider.compose.palette.SliderPalette
50
51
import io.github.naverz.pinocchio.slider.compose.palette.ThumbPalette
51
52
import io.github.naverz.pinocchio.slider.compose.palette.property.NarrowSliderProperty
52
53
53
- @OptIn(ExperimentalComposeUiApi ::class )
54
54
@Composable
55
55
fun Slider (
56
56
modifier : Modifier = Modifier ,
@@ -75,29 +75,28 @@ fun Slider(
75
75
Modifier .fillMaxWidth()
76
76
}
77
77
.pointerInput(isVertical) {
78
- forEachGesture {
79
- awaitPointerEventScope {
80
- awaitFirstDown()
81
- var nextValue: Float? = null
82
- do {
83
- val event: PointerEvent = awaitPointerEvent()
84
- event.changes.forEach { pointerInputChange: PointerInputChange ->
85
- findNextValue(
86
- isRtl = isRtl,
87
- isVertical = isVertical,
88
- touchOffset = if (isVertical) pointerInputChange.position.y else pointerInputChange.position.x,
89
- maxOffset = (if (isVertical) containerSize.height else containerSize.width).toFloat(),
90
- thumbStandardLength = (if (isVertical) thumbSize.height else thumbSize.width).toFloat()
91
- ).let {
92
- nextValue = it
93
- updatedOnValueChanged?.invoke(it)
94
- }
95
- pointerInputChange.consumePositionChange()
78
+ awaitEachGesture {
79
+ awaitFirstDown()
80
+ var nextValue: Float? = null
81
+ do {
82
+ val event: PointerEvent = awaitPointerEvent()
83
+ event.changes.forEach { pointerInputChange: PointerInputChange ->
84
+ findNextValue(
85
+ isRtl = isRtl,
86
+ isVertical = isVertical,
87
+ touchOffset = if (isVertical) pointerInputChange.position.y else pointerInputChange.position.x,
88
+ maxOffset = (if (isVertical) containerSize.height else containerSize.width).toFloat(),
89
+ thumbStandardLength = (if (isVertical) thumbSize.height else thumbSize.width).toFloat()
90
+ ).let {
91
+ nextValue = it
92
+ updatedOnValueChanged?.invoke(it)
96
93
}
97
- } while (event.changes.any { it.pressed })
98
- nextValue?.let { stableNextValue ->
99
- updatedOnValueConfirmed?.invoke(stableNextValue)
94
+ if (pointerInputChange.positionChange() != Offset .Zero )
95
+ pointerInputChange.consume()
100
96
}
97
+ } while (event.changes.any { it.pressed })
98
+ nextValue?.let { stableNextValue ->
99
+ updatedOnValueConfirmed?.invoke(stableNextValue)
101
100
}
102
101
}
103
102
}
@@ -216,7 +215,7 @@ private fun findNextValue(
216
215
@Composable
217
216
private fun PreviewSlider () {
218
217
var value by remember {
219
- mutableStateOf (0f )
218
+ mutableFloatStateOf (0f )
220
219
}
221
220
Column {
222
221
Spacer (modifier = Modifier .height(10 .dp))
@@ -390,7 +389,7 @@ private fun PreviewSlider() {
390
389
@Preview
391
390
@Composable
392
391
private fun PreviewBalancingSlider () {
393
- var value by remember { mutableStateOf (0.5f ) }
392
+ var value by remember { mutableFloatStateOf (0.5f ) }
394
393
Column {
395
394
Spacer (modifier = Modifier .height(15 .dp))
396
395
Slider (
0 commit comments