Skip to content

Commit c90972d

Browse files
asattelyJojo-Schmitz
authored andcommitted
add ability to get last nr or trailing x
similar to firstNoteRestSegmentX(bool) Backport of musescore#8953, part 1
1 parent 715dac6 commit c90972d

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

libmscore/system.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,6 +1669,42 @@ qreal System::firstNoteRestSegmentX(bool leading)
16691669
return margin;
16701670
}
16711671

1672+
//---------------------------------------------------------
1673+
// lastNoteRestSegmentX
1674+
// in System() coordinates
1675+
// returns the position of the last note or rest,
1676+
// or the position just before the first non-chordrest segment
1677+
//---------------------------------------------------------
1678+
1679+
qreal System::lastNoteRestSegmentX(bool trailing)
1680+
{
1681+
qreal margin = score()->spatium() / 4; // TODO: this can be parameterizable
1682+
//for (const MeasureBase* mb : measures()) {
1683+
for (auto measureBaseIter = measures().rbegin(); measureBaseIter != measures().rend(); measureBaseIter++) {
1684+
if ((*measureBaseIter)->isMeasure()) {
1685+
const Measure* measure = static_cast<const Measure*>(*measureBaseIter);
1686+
for (const Segment* seg = measure->last(); seg; seg = seg->prev()) {
1687+
if (seg->isChordRestType()) {
1688+
qreal noteRestPos = seg->measure()->pos().x() + seg->pos().x();
1689+
if (!trailing)
1690+
return noteRestPos;
1691+
1692+
// last CR found; find next segment after this one
1693+
seg = seg->nextActive();
1694+
while (seg && seg->allElementsInvisible())
1695+
seg = seg->nextActive();
1696+
if (seg)
1697+
return qMax(seg->measure()->pos().x() + seg->pos().x() - margin, noteRestPos);
1698+
else
1699+
return bbox().x() - margin;
1700+
}
1701+
}
1702+
}
1703+
}
1704+
qDebug("lastNoteRestSegmentX: did not find segment");
1705+
return margin;
1706+
}
1707+
16721708
//---------------------------------------------------------
16731709
// moveBracket
16741710
//---------------------------------------------------------

libmscore/system.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ class System final : public Element {
192192
Spacer* downSpacer(int staffIdx) const;
193193

194194
qreal firstNoteRestSegmentX(bool leading = false);
195+
qreal lastNoteRestSegmentX(bool trailing = false);
195196

196197
void moveBracket(int staffIdx, int srcCol, int dstCol);
197198
bool hasFixedDownDistance() const { return fixedDownDistance; }

0 commit comments

Comments
 (0)