feat: added auto-center playhead to piano roll window

This commit is contained in:
Xiaohan-Tian
2026-04-16 20:53:01 -07:00
parent 425aeab2d1
commit cb027b6c20
3 changed files with 66 additions and 12 deletions
+8 -1
View File
@@ -62,6 +62,7 @@ interface ProjectState {
loopingRange: [number, number]; // [startBar, endBar] - bar indices (0-based)
playheadPosition: number; // in beats
isPlaying: boolean;
autoScrollEnabled: boolean;
currentTime: string; // formatted time string
// Selection state for UI reactivity
@@ -114,6 +115,7 @@ interface ProjectState {
refreshStatus: () => void;
loadProject: (project: KGProject | null, savedName?: string) => Promise<void>;
setPlayheadPosition: (position: number) => void;
setAutoScrollEnabled: (enabled: boolean) => void;
startPlaying: () => Promise<void>;
stopPlaying: () => Promise<void>;
toggleLoop: () => void;
@@ -270,6 +272,7 @@ export const useProjectStore = create<ProjectState>((set, get) => {
loopingRange: currentProject.getLoopingRange(),
playheadPosition: KGCore.instance().getPlayheadPosition(),
isPlaying: KGCore.instance().getIsPlaying(),
autoScrollEnabled: true,
currentTime: beatsToTimeString(KGCore.instance().getPlayheadPosition(), currentProject.getBpm(), currentProject.getTimeSignature()),
// Initial selection state
@@ -752,9 +755,13 @@ export const useProjectStore = create<ProjectState>((set, get) => {
});
},
setAutoScrollEnabled: (enabled: boolean) => {
set({ autoScrollEnabled: enabled });
},
startPlaying: async () => {
await KGCore.instance().startPlaying();
set({ isPlaying: true });
set({ isPlaying: true, autoScrollEnabled: true });
},
stopPlaying: async () => {