Forráskód Böngészése

First brute force rendering of repetition endings using voltas. Currently 2 voltas are used to show one ending...

Matthias Uiberacker 7 éve
szülő
commit
a15e5048f9

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

@@ -157,6 +157,12 @@ declare namespace Vex {
             public draw(): void;
 
             public addTimeSignature(sig: string): void;
+
+            public setVoltaType(type: number, number_t: number, y: number): void;
+        }
+
+        export class Volta extends StaveModifier {
+            public static type: any;
         }
 
         export class Modifier {

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

@@ -2080,8 +2080,8 @@ export abstract class MusicSheetCalculator {
     private calculateRepetitionEndings(): void {
         const musicsheet: MusicSheet = this.graphicalMusicSheet.ParentMusicSheet;
         for (let idx: number = 0, len: number = musicsheet.Repetitions.length; idx < len; ++idx) {
-            const partListEntry: Repetition = musicsheet.Repetitions[idx];
-            this.calcGraphicalRepetitionEndingsRecursively(partListEntry);
+            const repetition: Repetition = musicsheet.Repetitions[idx];
+            this.calcGraphicalRepetitionEndingsRecursively(repetition);
         }
     }
 

+ 15 - 3
src/MusicalScore/Graphical/VexFlow/VexFlowMeasure.ts

@@ -17,7 +17,7 @@ import StaveNote = Vex.Flow.StaveNote;
 import {Logging} from "../../../Common/Logging";
 import {unitInPixels} from "./VexFlowMusicSheetDrawer";
 import {Tuplet} from "../../VoiceData/Tuplet";
-import { RepetitionInstructionEnum } from "../../VoiceData/Instructions/RepetitionInstruction";
+import { RepetitionInstructionEnum, RepetitionInstruction, AlignmentType } from "../../VoiceData/Instructions/RepetitionInstruction";
 import { SystemLinePosition } from "../SystemLinePosition";
 import { StemDirectionType } from "../../VoiceData/VoiceEntry";
 
@@ -192,10 +192,10 @@ export class VexFlowMeasure extends StaffMeasure {
         }
     }
 
-    public addWordRepetition(repetitionInstruction: RepetitionInstructionEnum): void {
+    public addWordRepetition(repetitionInstruction: RepetitionInstruction): void {
         let instruction: VexFlowRepetitionType = undefined;
         let position: any = Vex.Flow.Modifier.Position.END;
-        switch (repetitionInstruction) {
+        switch (repetitionInstruction.type) {
           case RepetitionInstructionEnum.Segno:
             // create Segno Symbol:
             instruction = VexFlowRepetitionType.SEGNO_LEFT;
@@ -235,6 +235,18 @@ export class VexFlowMeasure extends StaffMeasure {
         }
         if (instruction !== undefined) {
             this.stave.addModifier(new Vex.Flow.Repetition(instruction, 0, 0), position);
+            return;
+        }
+        let voltaType: number = Vex.Flow.Volta.type.BEGIN;
+        if (repetitionInstruction.type === RepetitionInstructionEnum.Ending) {
+            switch (repetitionInstruction.alignment) {
+                case AlignmentType.End:
+                voltaType = Vex.Flow.Volta.type.END;
+                break;
+                default:
+                break;
+            }
+            this.stave.setVoltaType(voltaType, repetitionInstruction.endingIndices[0], 0);
         }
     }
 

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

@@ -288,7 +288,7 @@ export class VexFlowMusicSheetCalculator extends MusicSheetCalculator {
       // now create corresponding graphical symbol or Text in VexFlow:
       // use top measure and staffline for positioning.
       if (uppermostMeasure !== undefined) {
-        uppermostMeasure.addWordRepetition(repetitionInstruction.type);
+        uppermostMeasure.addWordRepetition(repetitionInstruction);
       }
     }