Done replacing LazyGrid with FlowRow

This commit is contained in:
dotmg 2025-09-18 10:01:14 +02:00
parent 69e9ef3087
commit d35fd2e283
2 changed files with 113 additions and 108 deletions

View file

@ -1,20 +1,23 @@
package mg.dot.feufaro
import SharedScreenModel
import androidx.compose.foundation.VerticalScrollbar
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.safeDrawing
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.rememberScrollbarAdapter
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -56,14 +59,16 @@ object ScreenSolfa : Screen {
val measure by sharedScreenModel.measure.collectAsState()
val stanza by sharedScreenModel.stanza.collectAsState()
val gridTUOData = GridTUOData(measure, tuoList, stanza)
val lazyGridState = rememberLazyGridState()
val coroutineScope = rememberCoroutineScope()
val scrollState = rememberScrollState()
Box(Modifier.fillMaxSize()
) {
Column(
Modifier.fillMaxSize()
Modifier
.verticalScroll(scrollState)
.pointerInput(Unit) {
detectTapGestures(
onDoubleTap = {
offset ->
onDoubleTap = { offset ->
menuPosition = offset
showContextualMenu = true
}
@ -71,12 +76,13 @@ object ScreenSolfa : Screen {
},
horizontalAlignment = Alignment.CenterHorizontally,
) {
val columnScrollState = rememberScrollState()
if (showContextualMenu) {
Popup(
alignment = Alignment.TopStart,
offset = IntOffset(menuPosition.x.roundToInt(),
menuPosition.y.roundToInt()),
offset = IntOffset(
menuPosition.x.roundToInt(),
menuPosition.y.roundToInt()
),
onDismissRequest = {
showContextualMenu = false
}
@ -89,9 +95,7 @@ object ScreenSolfa : Screen {
}
Column(
modifier = Modifier
.fillMaxWidth()
.weight(1f)
.verticalScroll(columnScrollState)
.fillMaxSize()
) {
FlowRow(
modifier = Modifier.fillMaxWidth()
@ -116,8 +120,7 @@ object ScreenSolfa : Screen {
LazyVerticalGridTUO(
gridTUOData,
gridWidthPx = gridWidthPx,
onGridWidthMeasured = { width -> gridWidthPx = width },
lazyGridState = lazyGridState
onGridWidthMeasured = { width -> gridWidthPx = width }
)
MGButton(onClick = {
//showContent = !showContent
@ -141,8 +144,7 @@ object ScreenSolfa : Screen {
onClick = {
sharedScreenModel.setStanza(i)
coroutineScope.launch {
lazyGridState.animateScrollToItem(0)
columnScrollState.animateScrollTo(0)
scrollState.animateScrollTo(0)
}
},
modifier = Modifier.padding(horizontal = 4.dp)
@ -160,6 +162,11 @@ object ScreenSolfa : Screen {
}
}
}
VerticalScrollbar(
adapter = rememberScrollbarAdapter(scrollState),
modifier = Modifier.fillMaxHeight(0.5f).background(Color.Green).align(Alignment.CenterEnd)
)
}
}
@Throws(ObjectStreamException::class) // C'est une méthode de sérialisation Java, donc l'exception est nécessaire
private fun readResolve(): Any {

View file

@ -21,7 +21,6 @@ import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.geometry.Offset
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.lazy.grid.itemsIndexed
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
@ -509,8 +508,7 @@ fun LazyVerticalGridTUO(
viewModel: GridTUOData,
gridWidthPx: Int,
onGridWidthMeasured: (Int) -> Unit,
modifier: Modifier = Modifier,
lazyGridState: LazyGridState
modifier: Modifier = Modifier
) {
val regexMeasure = Regex("(\\d)/\\d").find(viewModel.measure)
val tuoList = viewModel.tuoList
@ -529,8 +527,8 @@ fun LazyVerticalGridTUO(
val itemMinBaseWidth = bestTUOWidth(tuoList)
val gridWidthDp = with(density) { gridWidthPx.toDp() }
val (gridCells: GridCells, gridColumnCount: Int) = remember(gridWidthDp, itemMinBaseWidth, columnGroup) {
if (gridWidthDp == 0.dp) return@remember Pair(GridCells.Fixed(columnGroup), columnGroup)
val gridColumnCount: Int = remember(gridWidthDp, itemMinBaseWidth, columnGroup) {
if (gridWidthDp == 0.dp) return@remember columnGroup
var calculatedCols =
(gridWidthDp / (itemMinBaseWidth + horizontalArrangementSpacing)).toInt()
if (calculatedCols == 0) calculatedCols = columnGroup
@ -539,24 +537,24 @@ fun LazyVerticalGridTUO(
if (calculatedCols == 0) calculatedCols = columnGroup
}
val actualColumnCount: Int = calculatedCols.coerceAtLeast(columnGroup)
Pair(GridCells.Fixed(actualColumnCount), actualColumnCount)
actualColumnCount
}
val flowRowSize: Float = 0.98f / gridColumnCount
val currentStanza = viewModel.stanza
LazyVerticalGrid(
columns = gridCells,
modifier = Modifier.fillMaxWidth().heightIn(max = 800.dp),
FlowRow(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(horizontalArrangementSpacing),
verticalArrangement = Arrangement.spacedBy(8.dp),
contentPadding = PaddingValues(8.dp), // c'est juste le padding extérieur de toute la liste
state = lazyGridState
//contentPadding = PaddingValues(8.dp), // c'est juste le padding extérieur de toute la liste
// state = lazyGridState
) {
itemsIndexed(items = tuoList.drop(1), key = { _, it -> it.numBlock }) { relativeIndex, oneTUO ->
tuoList.drop(n=1).forEachIndexed { relativeIndex, oneTUO ->
Box(
modifier = Modifier
.fillMaxWidth()
.fillMaxWidth(flowRowSize)
.combinedClickable(
onClick = {
println("Clicked: ${oneTUO.numBlock} / relative index: $relativeIndex")