diff --git a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt index b7357f0..be7028c 100644 --- a/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt +++ b/composeApp/src/commonMain/kotlin/mg/dot/feufaro/ScreenSolfa.kt @@ -2,6 +2,7 @@ package mg.dot.feufaro import SharedScreenModel import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectHorizontalDragGestures import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -52,6 +53,7 @@ object ScreenSolfa : Screen { val tuoList by sharedScreenModel.tuoList.collectAsState() val measure by sharedScreenModel.measure.collectAsState() val stanza by sharedScreenModel.stanza.collectAsState() + val nbStanzas: Int by sharedScreenModel.nbStanzas.collectAsState() val gridTUOData = remember(tuoList, measure, stanza) { GridTUOData(measure, tuoList, stanza) } val coroutineScope = rememberCoroutineScope() val scrollState = rememberScrollState() @@ -147,6 +149,38 @@ object ScreenSolfa : Screen { } ) } + .pointerInput(stanza, nbStanzas) { + var totalDragX = 0f + detectHorizontalDragGestures( + onDragStart = { totalDragX = 0f }, + onDragEnd = { + val currentStanza = stanza.toString().toIntOrNull() ?: 1 + val threshold = 70f + + if (totalDragX < -threshold) { + // Droite -> Gauche + if (currentStanza < nbStanzas) { + sharedScreenModel.setStanza(currentStanza + 1) + coroutineScope.launch { + scrollState.animateScrollTo(0) + } + } + } else if (totalDragX > threshold) { + // Gauche -> Droite + if (currentStanza > 1) { + sharedScreenModel.setStanza(currentStanza - 1) + coroutineScope.launch { + scrollState.animateScrollTo(0) + } + } + } + }, + onHorizontalDrag = { change, dragAmount -> + change.consume() + totalDragX += dragAmount + } + ) + } .onGloballyPositioned { coordinates -> viewportHeight = coordinates.size.height }, @@ -253,7 +287,7 @@ object ScreenSolfa : Screen { } } FlowRow( - modifier = Modifier.fillMaxWidth() + modifier = Modifier.fillMaxWidth(0.75f) //.windowInsetsPadding(WindowInsets.safeDrawing) .padding(start = 8.dp, end = 8.dp, top = 8.dp), horizontalArrangement = Arrangement.spacedBy(16.dp),