Skip to content

Commit 9cb692b

Browse files
committed
fix(timeline): layer height changes glitching
1 parent d86e147 commit 9cb692b

File tree

3 files changed

+33
-7
lines changed

3 files changed

+33
-7
lines changed

packages/app-frontend/src/features/timeline/TimelineView.vue

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,32 @@ export default defineComponent({
373373
resetLayers()
374374
})
375375
376-
const totalLayersHeight = computed(() => layers.value.reduce((sum, layer) => sum + layer.height, 0))
376+
// Stabilize layer height changes
377+
378+
let applyLayersNewHeightTimer
379+
380+
function applyLayersNewHeight () {
381+
clearTimeout(applyLayersNewHeightTimer)
382+
applyLayersNewHeightTimer = setTimeout(() => {
383+
updateLayerPositions()
384+
drawLayerBackgroundEffects()
385+
}, 0)
386+
}
387+
388+
const layerHeightUpdateTimers: Record<string, any> = {}
389+
390+
function queueLayerHeightUpdate (layer: Layer) {
391+
clearTimeout(layerHeightUpdateTimers[layer.id])
392+
const apply = () => {
393+
layer.height = layer.newHeight
394+
applyLayersNewHeight()
395+
}
396+
if (layer.height < layer.newHeight) {
397+
apply()
398+
} else {
399+
layerHeightUpdateTimers[layer.id] = setTimeout(apply, 500)
400+
}
401+
}
377402
378403
// Layer hover
379404
@@ -600,12 +625,11 @@ export default defineComponent({
600625
}
601626
602627
// Might update the layer's height as well
603-
if (y + 1 > event.layer.height) {
604-
const oldLayerHeight = event.layer.height
605-
const newLayerHeight = event.layer.height = y + 1
628+
if (y + 1 > event.layer.newHeight) {
629+
const oldLayerHeight = event.layer.newHeight
630+
const newLayerHeight = event.layer.newHeight = y + 1
606631
if (oldLayerHeight !== newLayerHeight) {
607-
updateLayerPositions()
608-
drawLayerBackgroundEffects()
632+
queueLayerHeightUpdate(event.layer)
609633
}
610634
}
611635
}
@@ -740,7 +764,7 @@ export default defineComponent({
740764
function updateEvents () {
741765
for (const layer of layers.value) {
742766
if (!layer.groupsOnly) {
743-
layer.height = 1
767+
layer.newHeight = 1
744768
}
745769
}
746770
updateLayerPositions()

packages/app-frontend/src/features/timeline/composable/layers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export function layerFactory (options: LayerFromBackend): Layer {
2222
const result = {} as Layer
2323
addNonReactiveProperties(result, {
2424
...options,
25+
newHeight: 1,
2526
eventsMap: {},
2627
groupsMap: {},
2728
groupPositionCache: {},

packages/app-frontend/src/features/timeline/composable/store.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ export interface Layer extends LayerFromBackend {
6161
groupsMap: Record<EventGroup['id'], EventGroup>
6262
groupPositionCache: Record<number, EventGroup[]>
6363
height: number
64+
newHeight: number
6465
lastInspectedEvent: TimelineEvent
6566
loaded: boolean
6667
}

0 commit comments

Comments
 (0)