@@ -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// ---------------------------------------------------------
0 commit comments