From 835a48679486b73ccd2ed185e796bb19da9934c4 Mon Sep 17 00:00:00 2001 From: Tretzi Date: Sat, 21 Mar 2026 20:01:01 -0500 Subject: [PATCH] Auto commit Sat Mar 21 08:01:01 PM CDT 2026 --- .../mvp/session/TimelineEditorScreen.kt | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/mindmachine/mvp/session/TimelineEditorScreen.kt b/app/src/main/java/com/mindmachine/mvp/session/TimelineEditorScreen.kt index 02acc69..23a6800 100644 --- a/app/src/main/java/com/mindmachine/mvp/session/TimelineEditorScreen.kt +++ b/app/src/main/java/com/mindmachine/mvp/session/TimelineEditorScreen.kt @@ -27,6 +27,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -205,6 +206,15 @@ internal fun TimelineGraph( val selectedLeft = activeCurve == leftId val selectedRight = activeCurve == rightId + val currentViewport by rememberUpdatedState(viewport) + val currentSelection by rememberUpdatedState(selection) + val currentCurveLeft by rememberUpdatedState(curveLeft) + val currentCurveRight by rememberUpdatedState(curveRight) + val currentOnViewportChanged by rememberUpdatedState(onViewportChanged) + val currentOnSelectionChanged by rememberUpdatedState(onSelectionChanged) + val currentOnUpdateCurve by rememberUpdatedState(onUpdateCurve) + val currentOnTapSideSelect by rememberUpdatedState(onTapSideSelect) + val context = LocalContext.current var dragMode by remember { mutableStateOf(HandleDrag.NONE) } var draggingPointIndex by remember { mutableStateOf(null) } @@ -260,10 +270,14 @@ internal fun TimelineGraph( .height(190.dp) .background(Color(0xFF0A0E18), RoundedCornerShape(10.dp)) .testTag("timeline_graph") - .pointerInput(viewport, selection, curveLeft, curveRight, activeCurve) { + .pointerInput(Unit) { awaitPointerEventScope { while (true) { val down = awaitFirstDown(requireUnconsumed = false) + val viewport = currentViewport + val selection = currentSelection + val curveLeft = currentCurveLeft + val curveRight = currentCurveRight val w = size.width.toFloat() val h = size.height.toFloat() val startX = viewport.timeToX(selection.startSec, w) @@ -299,7 +313,7 @@ internal fun TimelineGraph( draggingCurveId = nearestHit.first draggingPointIndex = nearestHit.second dragMode = HandleDrag.NONE - onTapSideSelect(if (nearestHit.first == leftId) Side.LEFT else Side.RIGHT) + currentOnTapSideSelect(if (nearestHit.first == leftId) Side.LEFT else Side.RIGHT) } else { draggingPointIndex = null draggingCurveId = null @@ -337,7 +351,7 @@ internal fun TimelineGraph( widthPx = size.width.toFloat(), centroidPx = centroid.x, ) - onViewportChanged(newViewport) + currentOnViewportChanged(newViewport) } event.changes.forEach { it.consume() } continue @@ -355,7 +369,7 @@ internal fun TimelineGraph( if (pointIndex != null && curveId != null) { val targetCurve = if (curveId == leftId) curveLeft else curveRight val updated = targetCurve.movePointVerticalWithPropagation(pointIndex, primary.position.y, h) - onUpdateCurve(curveId, updated) + currentOnUpdateCurve(curveId, updated) onCurveEditedHaptic() primary.consume() continue @@ -364,11 +378,11 @@ internal fun TimelineGraph( val t = viewport.xToTimeSec(primary.position.x, w).toInt().coerceAtLeast(0) when (dragMode) { HandleDrag.START -> { - onSelectionChanged(TimelineSelection(startSec = min(t, selection.endSec - 60), endSec = selection.endSec)) + currentOnSelectionChanged(TimelineSelection(startSec = min(t, selection.endSec - 60), endSec = selection.endSec)) primary.consume() } HandleDrag.END -> { - onSelectionChanged(TimelineSelection(startSec = selection.startSec, endSec = max(t, selection.startSec + 60))) + currentOnSelectionChanged(TimelineSelection(startSec = selection.startSec, endSec = max(t, selection.startSec + 60))) primary.consume() } HandleDrag.NONE -> { @@ -379,7 +393,7 @@ internal fun TimelineGraph( widthPx = w, centroidPx = w / 2f, ) - onViewportChanged(newViewport) + currentOnViewportChanged(newViewport) primary.consume() } } @@ -388,7 +402,7 @@ internal fun TimelineGraph( if (!moved && !isTransform) { val side = if (down.position.x < size.width / 2f) Side.LEFT else Side.RIGHT - onTapSideSelect(side) + currentOnTapSideSelect(side) } draggingPointIndex = null draggingCurveId = null