Skip to content

Commit b2880d7

Browse files
committed
Fix back navigation with articulation
review corrections
1 parent c543239 commit b2880d7

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

src/engraving/libmscore/chordrest.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,14 @@ EngravingItem* ChordRest::prevElement()
976976
}
977977
}
978978
staff_idx_t staffId = e->staffIdx();
979-
return segment()->prevElement(staffId);
979+
EngravingItem* prevItem = segment()->prevElement(staffId);
980+
if (prevItem && prevItem->isNote()) {
981+
const Chord* prevChord = toNote(prevItem)->chord();
982+
if (prevChord && !prevChord->articulations().empty()) {
983+
return prevChord->articulations().back();
984+
}
985+
}
986+
return prevItem;
980987
}
981988

982989
//---------------------------------------------------------

src/engraving/libmscore/segment.cpp

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,22 +1677,18 @@ EngravingItem* Segment::prevElementOfSegment(Segment* s, EngravingItem* e, staff
16771677

16781678
EngravingItem* Segment::lastElementOfSegment(Segment* s, staff_idx_t activeStaff)
16791679
{
1680-
std::vector<EngravingItem*> elements = s->elist();
1681-
for (auto i = --elements.end(); i != elements.begin(); --i) {
1682-
if (*i && (*i)->staffIdx() == activeStaff) {
1683-
if ((*i)->isChord()) {
1684-
return toChord(*i)->notes().front();
1685-
} else {
1686-
return *i;
1680+
const std::vector<EngravingItem*>& elements = s->elist();
1681+
for (auto it = elements.rbegin(); it != elements.rend(); ++it) {
1682+
EngravingItem* item = *it;
1683+
if (item && item->staffIdx() == activeStaff) {
1684+
if (item->isChord()) {
1685+
const std::vector<Articulation*>& articulations = toChord(item)->articulations();
1686+
if (!articulations.empty()) {
1687+
return articulations.back();
1688+
}
1689+
return toChord(item)->upNote();
16871690
}
1688-
}
1689-
}
1690-
auto i = elements.begin();
1691-
if (*i && (*i)->staffIdx() == activeStaff) {
1692-
if ((*i)->type() == ElementType::CHORD) {
1693-
return toChord(*i)->notes().front();
1694-
} else {
1695-
return *i;
1691+
return item;
16961692
}
16971693
}
16981694
return nullptr;

0 commit comments

Comments
 (0)