src/MusicalScore/Graphical/SystemLine.ts
import {GraphicalMeasure} from "./GraphicalMeasure";
import {StaffLine} from "./StaffLine";
import {MusicSystem} from "./MusicSystem";
import {SystemLinePosition} from "./SystemLinePosition";
import {SystemLinesEnum} from "./SystemLinesEnum";
import {BoundingBox} from "./BoundingBox";
import {GraphicalObject} from "./GraphicalObject";
import {EngravingRules} from "./EngravingRules";
export class SystemLine extends GraphicalObject {
constructor(lineType: SystemLinesEnum, linePosition: SystemLinePosition, musicSystem: MusicSystem,
topMeasure: GraphicalMeasure, bottomMeasure: GraphicalMeasure = undefined) {
super();
this.lineType = lineType;
this.linePosition = linePosition;
this.parentMusicSystem = musicSystem;
this.topMeasure = topMeasure;
this.bottomMeasure = bottomMeasure;
this.parentTopStaffLine = topMeasure?.ParentStaffLine;
this.boundingBox = new BoundingBox(this, musicSystem.PositionAndShape);
}
public lineType: SystemLinesEnum;
public linePosition: SystemLinePosition;
public parentMusicSystem: MusicSystem;
public parentTopStaffLine: StaffLine;
public topMeasure: GraphicalMeasure;
public bottomMeasure: GraphicalMeasure;
/**
* Return the width of the SystemLinesContainer for the given SystemLineType.
* @param rules
* @param systemLineType
* @returns {number}
*/
public static getObjectWidthForLineType(rules: EngravingRules, systemLineType: SystemLinesEnum): number {
switch (systemLineType) {
case SystemLinesEnum.SingleThin:
return rules.SystemThinLineWidth;
case SystemLinesEnum.DoubleThin:
return rules.SystemThinLineWidth * 2 + rules.DistanceBetweenVerticalSystemLines;
case SystemLinesEnum.ThinBold:
return rules.SystemThinLineWidth + rules.SystemBoldLineWidth + rules.DistanceBetweenVerticalSystemLines;
case SystemLinesEnum.BoldThinDots:
return rules.SystemThinLineWidth + rules.SystemBoldLineWidth + rules.DistanceBetweenVerticalSystemLines + rules.SystemDotWidth +
rules.DistanceBetweenDotAndLine;
case SystemLinesEnum.DotsThinBold:
return rules.SystemThinLineWidth + rules.SystemBoldLineWidth + rules.DistanceBetweenVerticalSystemLines + rules.SystemDotWidth +
rules.DistanceBetweenDotAndLine;
case SystemLinesEnum.DotsBoldBoldDots:
return 2 * rules.SystemBoldLineWidth + 2 * rules.SystemDotWidth + 2 * rules.DistanceBetweenDotAndLine +
rules.DistanceBetweenVerticalSystemLines;
default:
return 0;
}
}
}