Browse Source

feat(color): add option to color rests, separate rest/notehead color

sschmidTU 6 years ago
parent
commit
f1b33ab71d

+ 1 - 1
demo/index.js

@@ -156,7 +156,7 @@ import { OpenSheetMusicDisplay } from '../src/OpenSheetMusicDisplay/OpenSheetMus
 
             // coloring options
             coloringEnabled: true,
-            // defaultColorNoteHead: "#CC0055", // try setting a default color. default is black (undefined)
+            // defaultColorNotehead: "#CC0055", // try setting a default color. default is black (undefined)
             // defaultColorStem: "#BB0099",
 
             autoBeam: false, // try true, OSMD Function Test AutoBeam sample

+ 8 - 0
src/MusicalScore/Graphical/EngravingRules.ts

@@ -178,6 +178,7 @@ export class EngravingRules {
     private colorFlags: boolean;
     private colorBeams: boolean;
     private defaultColorNotehead: string;
+    private defaultColorRest: string;
     private defaultColorStem: string;
     /** Whether to render a label for the composer of the piece at the top of the sheet. */
     private renderComposer: boolean;
@@ -386,6 +387,7 @@ export class EngravingRules {
         this.colorBeams = true;
         this.colorFlags = true;
         this.defaultColorNotehead = undefined;
+        this.defaultColorRest = undefined;
         this.defaultColorStem = undefined;
         this.renderComposer = true;
         this.renderTitle = true;
@@ -1330,6 +1332,12 @@ export class EngravingRules {
     public set DefaultColorNotehead(value: string) {
         this.defaultColorNotehead = value;
     }
+    public get DefaultColorRest(): string {
+        return this.defaultColorRest;
+    }
+    public set DefaultColorRest(value: string) {
+        this.defaultColorRest = value;
+    }
     public get DefaultColorStem(): string {
         return this.defaultColorStem;
     }

+ 7 - 2
src/MusicalScore/Graphical/VexFlow/VexFlowConverter.ts

@@ -225,8 +225,13 @@ export class VexFlowConverter {
             if (EngravingRules.Rules.ColoringEnabled) {
                 let noteheadColor: string = note.sourceNote.NoteheadColorXml;
                 const defaultColorNotehead: string = EngravingRules.Rules.DefaultColorNotehead;
-                if (!noteheadColor && defaultColorNotehead) {
-                    noteheadColor = defaultColorNotehead;
+                const defaultColorRest: string = EngravingRules.Rules.DefaultColorRest;
+                if (!noteheadColor) {
+                    if (!note.sourceNote.isRest() && defaultColorNotehead) {
+                        noteheadColor = defaultColorNotehead;
+                    } else if (note.sourceNote.isRest() && defaultColorRest) {
+                        noteheadColor = defaultColorRest;
+                    }
                 }
                 if (noteheadColor) {
                     noteheadStyles.push({ fillStyle: noteheadColor, strokeStyle: noteheadColor });

+ 3 - 1
src/OpenSheetMusicDisplay/OSMDOptions.ts

@@ -15,9 +15,11 @@ export interface IOSMDOptions {
     /** Whether to enable coloring noteheads and stems by their XML color attribute. */
     coloringEnabled?: boolean;
     /** Default color for a note head (without stem). Default black (undefined). */
-    defaultColorNoteHead?: string;
+    defaultColorNotehead?: string;
     /** Default color for a note stem. Default black (undefined). */
     defaultColorStem?: string;
+    /** Default color for rests. Default black (undefined). */
+    defaultColorRest?: string;
     /** Don't show/load cursor. Will override disableCursor in drawingParameters. */
     disableCursor?: boolean;
     /** Broad Parameters like compact or preview mode. */

+ 5 - 2
src/OpenSheetMusicDisplay/OpenSheetMusicDisplay.ts

@@ -279,8 +279,11 @@ export class OpenSheetMusicDisplay {
         if (options.setWantedStemDirectionByXml !== undefined) {
             EngravingRules.Rules.SetWantedStemDirectionByXml = options.setWantedStemDirectionByXml;
         }
-        if (options.defaultColorNoteHead) {
-            EngravingRules.Rules.DefaultColorNotehead = options.defaultColorNoteHead;
+        if (options.defaultColorNotehead) {
+            EngravingRules.Rules.DefaultColorNotehead = options.defaultColorNotehead;
+        }
+        if (options.defaultColorRest) {
+            EngravingRules.Rules.DefaultColorRest = options.defaultColorRest;
         }
         if (options.defaultColorStem) {
             EngravingRules.Rules.DefaultColorStem = options.defaultColorStem;