From 8c41955e14b47f9f45027e60654d990657b2c746 Mon Sep 17 00:00:00 2001 From: JotaChina Date: Sat, 27 Dec 2025 13:25:58 -0300 Subject: [PATCH] =?UTF-8?q?corrigindo=20scroll=20ap=C3=B3s=20movimenta?= =?UTF-8?q?=C3=A7=C3=B5es=20e=20edi=C3=A7=C3=B5es=20das=20patterns=20na=20?= =?UTF-8?q?playlist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/js/creations/audio/audio_ui.js | 40 +++++++++++++++------------ 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/assets/js/creations/audio/audio_ui.js b/assets/js/creations/audio/audio_ui.js index 42967706..4d99718a 100755 --- a/assets/js/creations/audio/audio_ui.js +++ b/assets/js/creations/audio/audio_ui.js @@ -188,9 +188,14 @@ export function renderAudioEditor() { if (!audioEditor || !existingTrackContainer) return; - // ✅ Salva o scroll atual (senão toda edição “pula” pro início) - const prevScrollLeft = existingTrackContainer.scrollLeft || 0; - const prevScrollTop = existingTrackContainer.scrollTop || 0; + // ✅ preserva a posição de scroll mesmo recriando o container + const prevScrollLeft = + (existingTrackContainer?.scrollLeft ?? 0) || + (appState.audio?.editorScrollLeft ?? 0); + + const prevScrollTop = + (existingTrackContainer?.scrollTop ?? 0) || + (appState.audio?.editorScrollTop ?? 0); _ensureGlobalPlaylistSelectionFields(); _installPlaylistKeybindOnce(); @@ -778,9 +783,13 @@ export function renderAudioEditor() { } // Sync Scroll - newTrackContainer.addEventListener("scroll", () => { + newTrackContainer.addEventListener("scroll", () => { const scrollPos = scrollEl.scrollLeft; + // ✅ guarda no estado para sobreviver a re-render + appState.audio.editorScrollLeft = scrollPos; + appState.audio.editorScrollTop = scrollEl.scrollTop || 0; + // sincroniza régua com o container const mainRuler = tracksParent.querySelector(".timeline-ruler"); if (mainRuler && mainRuler.scrollLeft !== scrollPos) { @@ -802,8 +811,6 @@ export function renderAudioEditor() { } }); - - // Event Listener Principal (mousedown) newTrackContainer.addEventListener("mousedown", (e) => { document.getElementById("timeline-context-menu").style.display = "none"; @@ -1375,18 +1382,17 @@ export function renderAudioEditor() { } }); - // ✅ Restaura o scroll anterior após reconstruir o container - // (evita “voltar pro início” depois de mover/redimensionar/deletar) - try { - newTrackContainer.scrollLeft = prevScrollLeft; - newTrackContainer.scrollTop = prevScrollTop; + // ✅ restaura scroll após reconstruir a DOM (precisa ser após tudo estar no DOM) + requestAnimationFrame(() => { + try { + newTrackContainer.scrollLeft = prevScrollLeft; + newTrackContainer.scrollTop = prevScrollTop; - // mantém régua alinhada (caso ela suporte scrollLeft) - const mainRuler = tracksParent.querySelector(".timeline-ruler"); - if (mainRuler) mainRuler.scrollLeft = prevScrollLeft; - } catch (err) { - // silencioso: não pode quebrar a DAW - } + // mantém régua alinhada na mesma posição + const mainRuler = tracksParent.querySelector(".timeline-ruler"); + if (mainRuler) mainRuler.scrollLeft = prevScrollLeft; + } catch {} + }); }