Auto commit Sat Mar 21 08:01:01 PM CDT 2026

This commit is contained in:
Tretzi
2026-03-21 20:01:01 -05:00
parent 2c8a8eb43f
commit 835a486794

View File

@@ -27,6 +27,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@@ -205,6 +206,15 @@ internal fun TimelineGraph(
val selectedLeft = activeCurve == leftId val selectedLeft = activeCurve == leftId
val selectedRight = activeCurve == rightId 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 val context = LocalContext.current
var dragMode by remember { mutableStateOf(HandleDrag.NONE) } var dragMode by remember { mutableStateOf(HandleDrag.NONE) }
var draggingPointIndex by remember { mutableStateOf<Int?>(null) } var draggingPointIndex by remember { mutableStateOf<Int?>(null) }
@@ -260,10 +270,14 @@ internal fun TimelineGraph(
.height(190.dp) .height(190.dp)
.background(Color(0xFF0A0E18), RoundedCornerShape(10.dp)) .background(Color(0xFF0A0E18), RoundedCornerShape(10.dp))
.testTag("timeline_graph") .testTag("timeline_graph")
.pointerInput(viewport, selection, curveLeft, curveRight, activeCurve) { .pointerInput(Unit) {
awaitPointerEventScope { awaitPointerEventScope {
while (true) { while (true) {
val down = awaitFirstDown(requireUnconsumed = false) val down = awaitFirstDown(requireUnconsumed = false)
val viewport = currentViewport
val selection = currentSelection
val curveLeft = currentCurveLeft
val curveRight = currentCurveRight
val w = size.width.toFloat() val w = size.width.toFloat()
val h = size.height.toFloat() val h = size.height.toFloat()
val startX = viewport.timeToX(selection.startSec, w) val startX = viewport.timeToX(selection.startSec, w)
@@ -299,7 +313,7 @@ internal fun TimelineGraph(
draggingCurveId = nearestHit.first draggingCurveId = nearestHit.first
draggingPointIndex = nearestHit.second draggingPointIndex = nearestHit.second
dragMode = HandleDrag.NONE dragMode = HandleDrag.NONE
onTapSideSelect(if (nearestHit.first == leftId) Side.LEFT else Side.RIGHT) currentOnTapSideSelect(if (nearestHit.first == leftId) Side.LEFT else Side.RIGHT)
} else { } else {
draggingPointIndex = null draggingPointIndex = null
draggingCurveId = null draggingCurveId = null
@@ -337,7 +351,7 @@ internal fun TimelineGraph(
widthPx = size.width.toFloat(), widthPx = size.width.toFloat(),
centroidPx = centroid.x, centroidPx = centroid.x,
) )
onViewportChanged(newViewport) currentOnViewportChanged(newViewport)
} }
event.changes.forEach { it.consume() } event.changes.forEach { it.consume() }
continue continue
@@ -355,7 +369,7 @@ internal fun TimelineGraph(
if (pointIndex != null && curveId != null) { if (pointIndex != null && curveId != null) {
val targetCurve = if (curveId == leftId) curveLeft else curveRight val targetCurve = if (curveId == leftId) curveLeft else curveRight
val updated = targetCurve.movePointVerticalWithPropagation(pointIndex, primary.position.y, h) val updated = targetCurve.movePointVerticalWithPropagation(pointIndex, primary.position.y, h)
onUpdateCurve(curveId, updated) currentOnUpdateCurve(curveId, updated)
onCurveEditedHaptic() onCurveEditedHaptic()
primary.consume() primary.consume()
continue continue
@@ -364,11 +378,11 @@ internal fun TimelineGraph(
val t = viewport.xToTimeSec(primary.position.x, w).toInt().coerceAtLeast(0) val t = viewport.xToTimeSec(primary.position.x, w).toInt().coerceAtLeast(0)
when (dragMode) { when (dragMode) {
HandleDrag.START -> { 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() primary.consume()
} }
HandleDrag.END -> { 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() primary.consume()
} }
HandleDrag.NONE -> { HandleDrag.NONE -> {
@@ -379,7 +393,7 @@ internal fun TimelineGraph(
widthPx = w, widthPx = w,
centroidPx = w / 2f, centroidPx = w / 2f,
) )
onViewportChanged(newViewport) currentOnViewportChanged(newViewport)
primary.consume() primary.consume()
} }
} }
@@ -388,7 +402,7 @@ internal fun TimelineGraph(
if (!moved && !isTransform) { if (!moved && !isTransform) {
val side = if (down.position.x < size.width / 2f) Side.LEFT else Side.RIGHT val side = if (down.position.x < size.width / 2f) Side.LEFT else Side.RIGHT
onTapSideSelect(side) currentOnTapSideSelect(side)
} }
draggingPointIndex = null draggingPointIndex = null
draggingCurveId = null draggingCurveId = null