Просмотр исходного кода

PlaybackManager: check for duplicate on addListener(). demo: fix cursor not reacting to clicks on first load

cursor not reacting was a side effect of the last commit
sschmidTU 2 лет назад
Родитель
Сommit
5f6b68d796
2 измененных файлов с 5 добавлено и 1 удалено
  1. 2 1
      demo/index.js
  2. 3 0
      src/Playback/PlaybackManager.ts

+ 2 - 1
demo/index.js

@@ -958,7 +958,8 @@ import { TransposeCalculator } from '../src/Plugins/Transpose/TransposeCalculato
             timingSource.pause();
             timingSource.Settings = osmd.Sheet.playbackSettings;
             playbackManager.initialize(osmd.Sheet.musicPartManager);
-            //playbackManager.addListener(osmd.cursor); // this leads to 1 listener per initialization added that will not be removed and will stack up
+            //playbackManager.removeListener(osmd.cursor); // only necessary if no duplicate checks in addListener
+            playbackManager.addListener(osmd.cursor);
             playbackManager.reset();
             osmd.PlaybackManager = playbackManager;
             playbackControlPanel.clearVolumeTracks();

+ 3 - 0
src/Playback/PlaybackManager.ts

@@ -44,6 +44,9 @@ export class PlaybackManager implements IPlaybackParametersListener {
     protected overrideBPM: number = undefined;
     protected listeners: IPlaybackListener[] = [];
     public addListener(listener: IPlaybackListener): void {
+        if (this.listeners.includes(listener)) {
+            return;
+        }
         this.listeners.push(listener);
     }
     public removeListener(listenerToRemove: IPlaybackListener): void {