Skip to content

Commit cd34692

Browse files
committed
Fix chord symbols alignment when multiple staves have chord symbols
1 parent 27a98f3 commit cd34692

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

src/engraving/rendering/score/systemlayout.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,12 +1067,12 @@ void SystemLayout::layoutHarmonies(const std::vector<Harmony*> harmonies, System
10671067
}
10681068

10691069
// Only vertically align one chord symbol per tick & staff
1070-
std::map<Fraction, staff_idx_t> harmonyPositions;
1070+
std::set<std::pair<Fraction, staff_idx_t> > harmonyPositions;
10711071
std::vector<EngravingItem*> harmonyItemsAlign;
10721072
std::vector<EngravingItem*> harmonyItemsNoAlign;
10731073

10741074
for (Harmony* h : harmonies) {
1075-
if (muse::contains(harmonyPositions, h->tick())) {
1075+
if (muse::contains(harmonyPositions, { h->tick(), h->staffIdx() })) {
10761076
harmonyItemsNoAlign.push_back(h);
10771077
continue;
10781078
}
@@ -1114,13 +1114,13 @@ void SystemLayout::layoutFretDiagrams(const ElementsToLayout& elements, System*
11141114
}
11151115

11161116
// Only vertically align one fd per tick & staff
1117-
std::map<Fraction, staff_idx_t> fretHarmonyPositions;
1117+
std::set<std::pair<Fraction, staff_idx_t> > fretHarmonyPositions;
11181118
std::vector<EngravingItem*> fretItemsAlign;
11191119
std::vector<EngravingItem*> fretOrHarmonyItemsNoAlign;
11201120
std::vector<Harmony*> harmonyItemsAlign(elements.harmonies.begin(), elements.harmonies.end());
11211121

11221122
for (FretDiagram* fd : elements.fretDiagrams) {
1123-
if (muse::contains(fretHarmonyPositions, fd->tick())) {
1123+
if (muse::contains(fretHarmonyPositions, { fd->tick(), fd->staffIdx() })) {
11241124
fretOrHarmonyItemsNoAlign.push_back(fd);
11251125
if (fd->harmony()) {
11261126
harmonyItemsAlign.erase(std::remove(harmonyItemsAlign.begin(), harmonyItemsAlign.end(), fd->harmony()));
@@ -1140,7 +1140,7 @@ void SystemLayout::layoutFretDiagrams(const ElementsToLayout& elements, System*
11401140
if (h->getParentFretDiagram()) {
11411141
continue;
11421142
}
1143-
if (muse::contains(fretHarmonyPositions, h->tick())) {
1143+
if (muse::contains(fretHarmonyPositions, { h->tick(), h->staffIdx() })) {
11441144
harmonyItemsAlign.erase(std::remove(harmonyItemsAlign.begin(), harmonyItemsAlign.end(), h));
11451145
fretOrHarmonyItemsNoAlign.push_back(h);
11461146
continue;
@@ -1161,7 +1161,7 @@ void SystemLayout::layoutFretDiagrams(const ElementsToLayout& elements, System*
11611161
Autoplace::autoplaceSegmentElement(item, item->mutldata());
11621162
Harmony* harmony = toFretDiagram(item)->harmony();
11631163
if (harmony) {
1164-
autoplaceHarmony(item);
1164+
autoplaceHarmony(harmony);
11651165
}
11661166
} else if (item->isHarmony()) {
11671167
autoplaceHarmony(item);

0 commit comments

Comments
 (0)