Browse Source

demo: fix drawFromMeasureNumber options always reset before sample loading

demo: fix measure range leak from selectMeasuresToDraw sample
fix drawFromMeasureNumber and drawUpToMeasureNumber options not being correctly reset
after loading selectMeasuresToDraw demo

OSMDOptions: drawUpToMeasureNumber option now sets the correct index value (index = measure - 1),
though functionally there is no change, because the functions also used measure number instead of index
sschmid 5 years ago
parent
commit
40b2db6e7b

+ 15 - 3
demo/index.js

@@ -69,6 +69,10 @@ import { OpenSheetMusicDisplay } from '../src/OpenSheetMusicDisplay/OpenSheetMus
     debugReRenderBtn,
     debugClearBtn;
 
+    var minMeasureToDrawStashed = 1;
+    var maxMeasureToDrawStashed = Number.MAX_SAFE_INTEGER;
+    var measureToDrawRangeNeedsReset = false;
+
     // Initialization code
     function init() {
         var name, option;
@@ -247,6 +251,13 @@ import { OpenSheetMusicDisplay } from '../src/OpenSheetMusicDisplay/OpenSheetMus
         zoom = 1.0;
 
         if (str.includes("measuresToDraw")) {
+            // stash previously set range of measures to draw
+            if (!measureToDrawRangeNeedsReset) { // only stash once, when measuresToDraw called multiple times in a row
+                minMeasureToDrawStashed = openSheetMusicDisplay.EngravingRules.MinMeasureToDrawIndex + 1;
+                maxMeasureToDrawStashed = openSheetMusicDisplay.EngravingRules.MaxMeasureToDrawIndex + 1;
+            }
+            measureToDrawRangeNeedsReset = true;
+
             // for debugging: draw from a random range of measures
             let minMeasureToDraw = Math.ceil(Math.random() * 15); // measures start at 1 (measureIndex = measure number - 1 elsewhere)
             let maxMeasureToDraw = Math.ceil(Math.random() * 15);
@@ -262,11 +273,12 @@ import { OpenSheetMusicDisplay } from '../src/OpenSheetMusicDisplay/OpenSheetMus
                 drawFromMeasureNumber: minMeasureToDraw,
                 drawUpToMeasureNumber: maxMeasureToDraw
             });
-        } else { // reset for other samples
+        } else if (measureToDrawRangeNeedsReset) { // reset for other samples
             openSheetMusicDisplay.setOptions({
-                drawFromMeasureNumber: 1,
-                drawUpToMeasureNumber: Number.MAX_VALUE
+                drawFromMeasureNumber: minMeasureToDrawStashed,
+                drawUpToMeasureNumber: maxMeasureToDrawStashed
             });
+            measureToDrawRangeNeedsReset = false;
         }
 
         // Enable Boomwhacker-like coloring for OSMD Function Test - Auto-Coloring (Boomwhacker-like, custom color set)

+ 5 - 5
src/MusicalScore/Graphical/MusicSheetCalculator.ts

@@ -676,7 +676,7 @@ export abstract class MusicSheetCalculator {
         // visible 2D-MeasureList
         const visibleMeasureList: GraphicalMeasure[][] = [];
         for (let idx: number = EngravingRules.Rules.MinMeasureToDrawIndex, len: number = allMeasures.length;
-            idx < len && idx < EngravingRules.Rules.MaxMeasureToDrawIndex; ++idx) {
+            idx < len && idx <= EngravingRules.Rules.MaxMeasureToDrawIndex; ++idx) {
             const graphicalMeasures: GraphicalMeasure[] = allMeasures[idx];
             const visiblegraphicalMeasures: GraphicalMeasure[] = [];
             for (let idx2: number = 0, len2: number = graphicalMeasures.length; idx2 < len2; ++idx2) {
@@ -2607,9 +2607,9 @@ export abstract class MusicSheetCalculator {
     }
 
     private calculateDynamicExpressions(): void {
-        const maxIndex: number = Math.min(this.graphicalMusicSheet.ParentMusicSheet.SourceMeasures.length, EngravingRules.Rules.MaxMeasureToDrawIndex);
+        const maxIndex: number = Math.min(this.graphicalMusicSheet.ParentMusicSheet.SourceMeasures.length - 1, EngravingRules.Rules.MaxMeasureToDrawIndex);
         const minIndex: number = Math.min(EngravingRules.Rules.MinMeasureToDrawIndex, this.graphicalMusicSheet.ParentMusicSheet.SourceMeasures.length);
-        for (let i: number = minIndex; i < maxIndex; i++) {
+        for (let i: number = minIndex; i <= maxIndex; i++) {
             const sourceMeasure: SourceMeasure = this.graphicalMusicSheet.ParentMusicSheet.SourceMeasures[i];
             for (let j: number = 0; j < sourceMeasure.StaffLinkedExpressions.length; j++) {
                 if (this.graphicalMusicSheet.MeasureList[i][j].ParentStaff.ParentInstrument.Visible) {
@@ -2689,9 +2689,9 @@ export abstract class MusicSheetCalculator {
     }
 
     private calculateTempoExpressions(): void {
-        const maxIndex: number = Math.min(this.graphicalMusicSheet.ParentMusicSheet.SourceMeasures.length, EngravingRules.Rules.MaxMeasureToDrawIndex);
+        const maxIndex: number = Math.min(this.graphicalMusicSheet.ParentMusicSheet.SourceMeasures.length - 1, EngravingRules.Rules.MaxMeasureToDrawIndex);
         const minIndex: number = EngravingRules.Rules.MinMeasureToDrawIndex;
-        for (let i: number = minIndex; i < maxIndex; i++) {
+        for (let i: number = minIndex; i <= maxIndex; i++) {
             const sourceMeasure: SourceMeasure = this.graphicalMusicSheet.ParentMusicSheet.SourceMeasures[i];
             for (let j: number = 0; j < sourceMeasure.TempoExpressions.length; j++) {
                 this.calculateTempoExpressionsForMultiTempoExpression(sourceMeasure, sourceMeasure.TempoExpressions[j], i);

+ 1 - 1
src/OpenSheetMusicDisplay/OpenSheetMusicDisplay.ts

@@ -317,7 +317,7 @@ export class OpenSheetMusicDisplay {
             EngravingRules.Rules.DefaultColorTitle = options.defaultColorTitle;
         }
         if (options.drawUpToMeasureNumber) {
-            EngravingRules.Rules.MaxMeasureToDrawIndex = options.drawUpToMeasureNumber;
+            EngravingRules.Rules.MaxMeasureToDrawIndex = options.drawUpToMeasureNumber - 1;
         }
         if (options.drawFromMeasureNumber) {
             EngravingRules.Rules.MinMeasureToDrawIndex = options.drawFromMeasureNumber - 1;