Skip to content

Commit

Permalink
fix stave formatting bug
Browse files Browse the repository at this point in the history
  • Loading branch information
AaronDavidNewman committed Feb 15, 2024
1 parent 398886d commit 69d7942
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 13 deletions.
2 changes: 1 addition & 1 deletion release/library/trumpet/BeethovenOp21.json

Large diffs are not rendered by default.

39 changes: 33 additions & 6 deletions release/smoosic.js
Original file line number Diff line number Diff line change
Expand Up @@ -9200,7 +9200,9 @@ class SuiScoreView {
synchronizeTextGroups() {
// Synchronize the score text IDs so cut/paste/undo works transparently
this.score.textGroups.forEach((tg, ix) => {
this.storeScore.textGroups[ix].attrs.id = tg.attrs.id;
if (this.storeScore.textGroups.length > ix) {
this.storeScore.textGroups[ix].attrs.id = tg.attrs.id;
}
});
}
/**
Expand Down Expand Up @@ -16692,20 +16694,32 @@ function createStaveNote(renderInfo, key, row, strs) {
}
function createColumn(groups, strs) {
const groupKeys = Object.keys(groups);
let maxXAdj = 0;
groupKeys.forEach((groupKey) => {
const music = groups[groupKey];
// Need to create beam groups before formatting
strs.push(`// create beam groups and tuplets for format grp ${groupKey} before formatting`);
music.measures.forEach((smoMeasure) => {
maxXAdj = Math.max(maxXAdj, smoMeasure.svg.adjX);
createBeamGroups(smoMeasure, strs);
createTuplets(smoMeasure, strs);
});
strs.push(' ');
strs.push(`// formatting measures in staff group ${groupKey}`);
// set x offset for alignment before format
music.measures.forEach((smoMeasure) => {
smoMeasure.voices.forEach((vv) => {
vv.notes.forEach((nn) => {
const id = nn.attrs.id;
const offset = maxXAdj - smoMeasure.svg.adjX;
strs.push(`${id}.setXShift(${offset});`);
});
});
});
const joinVoiceStr = '[' + music.voiceStrings.join(',') + ']';
const widthMeasure = music.measures[0];
const staffWidth = Math.round(widthMeasure.staffWidth -
(widthMeasure.svg.adjX + widthMeasure.svg.adjRight + widthMeasure.format.padLeft) - 10);
(widthMeasure.svg.maxColumnStartX + widthMeasure.svg.adjRight + widthMeasure.format.padLeft) - 10);
strs.push(`${music.formatter}.format(${joinVoiceStr}, ${staffWidth});`);
music.measures.forEach((smoMeasure) => {
createMeasure(smoMeasure, music.heightOffset, strs);
Expand Down Expand Up @@ -18215,10 +18229,8 @@ class VxSystem {
adjXMap[mm.smoMeasure.measureNumber.systemIndex] = Math.max(adjXMap[mm.smoMeasure.measureNumber.systemIndex], mm.smoMeasure.svg.adjX);
});
vxMeasures.forEach((vv) => {
if (!vv.rendered && !vv.smoMeasure.svg.hideEmptyMeasure) {
vv.vexNotes.forEach((vnote) => {
vnote.setXShift(vnote.getXShift() + adjXMap[vv.smoMeasure.measureNumber.systemIndex] - vv.smoMeasure.svg.adjX);
});
if (!vv.rendered && !vv.smoMeasure.svg.hideEmptyMeasure && vv.stave) {
vv.stave.setNoteStartX(vv.stave.getNoteStartX() + adjXMap[vv.smoMeasure.measureNumber.systemIndex] - vv.smoMeasure.svg.adjX);
const systemGroup = this.score.getSystemGroupForStaff(vv.selection);
const justifyGroup = (systemGroup && vv.smoMeasure.format.autoJustify) ? systemGroup.attrs.id : vv.selection.staff.attrs.id;
if (!smoGroupMap[justifyGroup]) {
Expand Down Expand Up @@ -23650,6 +23662,7 @@ class SmoScore {
}
this.audioSettings = new _scoreModifiers__WEBPACK_IMPORTED_MODULE_3__.SmoAudioPlayerSettings(params.audioSettings);
this.updateMeasureFormats();
this.updateSystemGroups();
}
static get engravingFonts() {
return { Bravura: 'Bravura', Gonville: 'Gonville', Petaluma: 'Petaluma' };
Expand Down Expand Up @@ -24462,6 +24475,19 @@ class SmoScore {
this.numberStaves();
return staff;
}
/**
* delete any system groups that apply to deleted staves
*/
updateSystemGroups() {
const grpToKeep = [];
this.systemGroups.forEach((grp) => {
if (grp.startSelector.staff < this.staves.length &&
grp.endSelector.staff < this.staves.length) {
grpToKeep.push(grp);
}
});
this.systemGroups = grpToKeep;
}
// ### removeStaff
// Remove stave at the given index
removeStaff(index) {
Expand All @@ -24475,6 +24501,7 @@ class SmoScore {
});
this.staves = staves;
this.numberStaves();
this.updateSystemGroups();
}
getStaffInstrument(selector) {
const staff = this.staves[selector.staff];
Expand Down
2 changes: 1 addition & 1 deletion release/smoosic.js.map

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion src/render/sui/scoreView.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,9 @@ export abstract class SuiScoreView {
synchronizeTextGroups() {
// Synchronize the score text IDs so cut/paste/undo works transparently
this.score.textGroups.forEach((tg, ix) => {
this.storeScore.textGroups[ix].attrs.id = tg.attrs.id;
if (this.storeScore.textGroups.length > ix) {
this.storeScore.textGroups[ix].attrs.id = tg.attrs.id;
}
});
}
/**
Expand Down
6 changes: 2 additions & 4 deletions src/render/vex/vxSystem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -513,10 +513,8 @@ export class VxSystem {
adjXMap[mm.smoMeasure.measureNumber.systemIndex] = Math.max(adjXMap[mm.smoMeasure.measureNumber.systemIndex], mm.smoMeasure.svg.adjX);
});
vxMeasures.forEach((vv: VxMeasure) => {
if (!vv.rendered && !vv.smoMeasure.svg.hideEmptyMeasure) {
vv.vexNotes.forEach((vnote) => {
vnote.setXShift(vnote.getXShift() + adjXMap[vv.smoMeasure.measureNumber.systemIndex] - vv.smoMeasure.svg.adjX);
});
if (!vv.rendered && !vv.smoMeasure.svg.hideEmptyMeasure && vv.stave) {
vv.stave.setNoteStartX(vv.stave.getNoteStartX() + adjXMap[vv.smoMeasure.measureNumber.systemIndex] - vv.smoMeasure.svg.adjX);
const systemGroup = this.score.getSystemGroupForStaff(vv.selection);
const justifyGroup: string = (systemGroup && vv.smoMeasure.format.autoJustify) ? systemGroup.attrs.id : vv.selection.staff.attrs.id;
if (!smoGroupMap[justifyGroup]) {
Expand Down

0 comments on commit 69d7942

Please sign in to comment.