Andrea Condoluci 9 anni fa
parent
commit
8667e69bb5

+ 1 - 0
external/vexflow/vexflow.d.ts

@@ -7,6 +7,7 @@ declare namespace Vex {
 
       public hasMinTotalWidth: boolean;
       public minTotalWidth: number;
+      public joinVoices(voices: Vex.Flow.Voice[]): void;
 
       public preCalculateMinTotalWidth(voices: Voice[]): number;
     }

+ 2 - 2
src/MusicalScore/Graphical/VexFlow/VexFlowMeasure.ts

@@ -15,14 +15,14 @@ import Vex = require("vexflow");
 export class VexFlowMeasure extends StaffMeasure {
     constructor(staff: Staff, staffLine: StaffLine = undefined, sourceMeasure: SourceMeasure = undefined) {
         super(staff, sourceMeasure, staffLine);
-        // this.MinimumStaffEntriesWidth =
+        this.minimumStaffEntriesWidth = -1;
         this.stave = new Vex.Flow.Stave(0, 0, 0);
         this.voices = {};
         //this.duration = this.parentSourceMeasure.Duration;
     }
 
+    public voices: { [voiceID: number]: Vex.Flow.Voice; };
     private stave: Vex.Flow.Stave;
-    private voices: { [voiceID: number]: Vex.Flow.Voice; };
     //private duration: Fraction;
 
     /**

+ 19 - 1
src/MusicalScore/Graphical/VexFlow/VexFlowMusicSheetCalculator.ts

@@ -24,6 +24,7 @@ import {OrnamentContainer} from "../../VoiceData/OrnamentContainer";
 import {ArticulationEnum} from "../../VoiceData/VoiceEntry";
 import {Tuplet} from "../../VoiceData/Tuplet";
 import Dictionary from "typescript-collections/dist/lib/Dictionary";
+import {VexFlowMeasure} from "./VexFlowMeasure";
 //import {VexFlowMeasure} from "./VexFlowMeasure";
 
 export class VexFlowMusicSheetCalculator extends MusicSheetCalculator {
@@ -57,7 +58,24 @@ export class VexFlowMusicSheetCalculator extends MusicSheetCalculator {
     protected calculateMeasureXLayout(measures: StaffMeasure[]): number {
         // layout the measures in x.
         // return the minimum required x width of this vertically aligned measure set:
-        return 0;
+        let allVoices: Vex.Flow.Voice[] = [];
+        let formatter: Vex.Flow.Formatter = new Vex.Flow.Formatter();
+        for (let measure of measures) {
+            let mvoices:  { [voiceID: number]: Vex.Flow.Voice; } = (measure as VexFlowMeasure).voices;
+            let voices: Vex.Flow.Voice[] = [];
+            for (let voiceID in mvoices) {
+                if (mvoices.hasOwnProperty(voiceID)) {
+                    voices.push(mvoices[voiceID]);
+                    allVoices.push(mvoices[voiceID]);
+                }
+            }
+            formatter.joinVoices(voices);
+        }
+        let width: number = formatter.preCalculateMinTotalWidth(allVoices);
+        for (let measure of measures) {
+            measure.minimumStaffEntriesWidth = width;
+        }
+        return width;
     }
 
     /**

+ 0 - 2
test/MusicalScore/Graphical/VexFlow/VexFlowMeasure.ts

@@ -1,6 +1,4 @@
 import {MusicSheetCalculator} from "../../../../src/MusicalScore/Graphical/MusicSheetCalculator";
-import {VexFlowGraphicalSymbolFactory} from "../../../../src/MusicalScore/Graphical/VexFlow/VexFlowGraphicalSymbolFactory";
-import {IGraphicalSymbolFactory} from "../../../../src/MusicalScore/Interfaces/IGraphicalSymbolFactory";
 import {GraphicalMusicSheet} from "../../../../src/MusicalScore/Graphical/GraphicalMusicSheet";
 import {IXmlElement} from "../../../../src/Common/FileIO/Xml";
 import {MusicSheet} from "../../../../src/MusicalScore/MusicSheet";