feat: add cross-component playhead scroll synchronization
This commit is contained in:
@@ -109,6 +109,12 @@ interface ProjectState {
|
||||
canRedo: boolean;
|
||||
undoDescription: string | null;
|
||||
redoDescription: string | null;
|
||||
|
||||
// Cross-component scroll request state
|
||||
requestMainContentScroll: (beatPosition: number) => void;
|
||||
requestPianoRollScroll: (beatPosition: number) => void;
|
||||
mainContentScrollRequest: number | null;
|
||||
pianoRollScrollRequest: number | null;
|
||||
|
||||
// Actions
|
||||
setProjectName: (name: string) => void;
|
||||
@@ -340,6 +346,10 @@ export const useProjectStore = create<ProjectState>((set, get) => {
|
||||
recordingNotes: [],
|
||||
recordingOriginalPlayhead: 0,
|
||||
|
||||
// Initial cross-component scroll request state
|
||||
mainContentScrollRequest: null,
|
||||
pianoRollScrollRequest: null,
|
||||
|
||||
// Actions
|
||||
setProjectName: (name: string) => {
|
||||
try {
|
||||
@@ -793,6 +803,14 @@ export const useProjectStore = create<ProjectState>((set, get) => {
|
||||
set({ autoScrollEnabled: enabled });
|
||||
},
|
||||
|
||||
requestMainContentScroll: (beatPosition: number) => {
|
||||
set({ mainContentScrollRequest: beatPosition });
|
||||
},
|
||||
|
||||
requestPianoRollScroll: (beatPosition: number) => {
|
||||
set({ pianoRollScrollRequest: beatPosition });
|
||||
},
|
||||
|
||||
startPlaying: async () => {
|
||||
await KGCore.instance().startPlaying();
|
||||
set({ isPlaying: true, autoScrollEnabled: true });
|
||||
|
||||
Reference in New Issue
Block a user