@@ -3346,13 +3346,13 @@ void Score::cmdIncDecDuration(int nSteps, bool stepDotted)
3346
3346
3347
3347
void Score::cmdExtendToNextNote ()
3348
3348
{
3349
- Fraction startTick = selection ().tickStart ();
3349
+ const Fraction startTick = selection ().tickStart ();
3350
3350
Fraction endTick = selection ().tickEnd ();
3351
- staff_idx_t startStaff = selection ().staffStart ();
3352
- staff_idx_t endStaff = selection ().staffEnd ();
3351
+ const staff_idx_t startStaff = selection ().staffStart ();
3352
+ const staff_idx_t endStaff = selection ().staffEnd ();
3353
3353
3354
3354
std::vector<ChordRest*> crList;
3355
- std::string selType = m_selection. isList () ? " list " : " range " ;
3355
+ const bool wasRangeSelection = selection (). isRange () ;
3356
3356
3357
3357
for (EngravingItem* el : selection ().elements ()) {
3358
3358
if (!el->isNote ()) {
@@ -3363,17 +3363,19 @@ void Score::cmdExtendToNextNote()
3363
3363
Fraction crts = cr->ticks ();
3364
3364
crList.push_back (cr);
3365
3365
3366
- while ((nextChordRest (cr) && nextChordRest (cr)->isRest ()) || (nextChordRest (cr) && nextChordRest (cr)->tick () > (cr->tick () + cr->ticks ()))) {
3367
- ChordRest* ncr = nextChordRest (cr);
3368
- Rest* r = toRest (ncr);
3366
+ if (!nextChordRest (cr)) {
3367
+ continue ;
3368
+ }
3369
+ ChordRest* ncr = nextChordRest (cr);
3369
3370
3370
- if (cr->tuplet () || r->tuplet ()) {
3371
+ while (ncr->isRest () || (ncr->tick () > cr->endTick ())) { // second condition checks for empty measure between cr and ncr for voices 2,3,4.
3372
+ if (cr->tuplet () || ncr->tuplet ()) {
3371
3373
m_is.setSegment (ncr->segment ());
3372
3374
m_is.setLastSegment (m_is.segment ());
3373
- m_is.setDuration (r ->durationType ());
3375
+ m_is.setDuration (ncr ->durationType ());
3374
3376
3375
3377
Note* nn = nullptr ;
3376
- for (uint i = 0 ; i < toChord (cr)->notes ().size (); i++) {
3378
+ for (size_t i = 0 ; i < toChord (cr)->notes ().size (); i++) {
3377
3379
Note* note = toChord (cr)->notes ()[i];
3378
3380
NoteVal nval (note->noteVal ());
3379
3381
nn = addPitch (nval, i != 0 );
@@ -3389,14 +3391,19 @@ void Score::cmdExtendToNextNote()
3389
3391
cr = toChordRest (nn->chord ());
3390
3392
crList.push_back (cr);
3391
3393
} else {
3392
- changeCRlen (cr, cr->ticks () + r ->ticks ());
3394
+ changeCRlen (cr, cr->ticks () + ncr ->ticks ());
3393
3395
if (cr->ticks () == crts) {
3394
3396
cr = nextChordRest (cr);
3395
3397
crList.push_back (cr);
3396
3398
}
3397
3399
}
3398
3400
crts = cr->ticks ();
3399
- endTick = cr->tick () + cr->ticks () >= endTick ? cr->tick () + cr->ticks () : endTick;
3401
+ endTick = cr->endTick () >= endTick ? cr->endTick () : endTick;
3402
+
3403
+ if (!nextChordRest (cr)) { // endMeasure
3404
+ break ;
3405
+ }
3406
+ ncr = nextChordRest (cr);
3400
3407
}
3401
3408
while ((!nextChordRest (cr) && cr->voice () > 0 && cr->measure () != score ()->lastMeasure ())) {
3402
3409
changeCRlen (cr, cr->ticks () + cr->measure ()->ticks ());
@@ -3406,7 +3413,7 @@ void Score::cmdExtendToNextNote()
3406
3413
}
3407
3414
}
3408
3415
3409
- if (selType == " range " ) {
3416
+ if (wasRangeSelection ) {
3410
3417
selection ().setRangeTicks (startTick, endTick, startStaff, endStaff);
3411
3418
selection ().updateSelectedElements ();
3412
3419
} else {
0 commit comments