File tree 2 files changed +21
-5
lines changed
2 files changed +21
-5
lines changed Original file line number Diff line number Diff line change 35
35
#include " select.h"
36
36
#include " staff.h"
37
37
#include " stem.h"
38
+ #include " tie.h"
38
39
39
40
using namespace mu ;
40
41
@@ -310,14 +311,30 @@ void InputState::setSegment(Segment* s)
310
311
// nextInputPos
311
312
// ---------------------------------------------------------
312
313
313
- Segment* InputState::nextInputPos () const
314
+ Segment* InputState::nextInputPos (Segment* seg = nullptr ) const
314
315
{
315
- Measure* m = m_segment->measure ();
316
- Segment* s = m_segment->next1 (SegmentType::ChordRest);
316
+ if (!seg) {
317
+ seg = m_segment;
318
+ }
319
+ Measure* m = seg->measure ();
320
+ Segment* s = seg->next1 (SegmentType::ChordRest);
317
321
for (; s; s = s->next1 (SegmentType::ChordRest)) {
318
322
if (s->element (m_track)) {
319
323
if (s->element (m_track)->isRest () && toRest (s->element (m_track))->isGap ()) {
320
324
m = s->measure ();
325
+ } else if (seg->element (m_track)->isChord ()) {
326
+ Chord* chord = toChord (seg->element (m_track));
327
+ bool allTied = true ;
328
+ for (Note* n : chord->notes ()) {
329
+ if (!n->tieFor ()) {
330
+ allTied = false ;
331
+ break ;
332
+ }
333
+ }
334
+ if (allTied && !chord->notes ().empty ()) {
335
+ return nextInputPos (chord->notes ()[chord->notes ().size () - 1 ]->tieFor ()->endNote ()->chord ()->segment ());
336
+ }
337
+ return s;
321
338
} else {
322
339
return s;
323
340
}
@@ -330,7 +347,6 @@ Segment* InputState::nextInputPos() const
330
347
331
348
// ---------------------------------------------------------
332
349
// moveToNextInputPos
333
- // TODO: special case: note is first note of tie: goto to last note of tie
334
350
// ---------------------------------------------------------
335
351
336
352
void InputState::moveToNextInputPos ()
Original file line number Diff line number Diff line change @@ -127,7 +127,7 @@ class InputState
127
127
128
128
private:
129
129
130
- Segment* nextInputPos () const ;
130
+ Segment* nextInputPos (Segment* seg ) const ;
131
131
132
132
track_idx_t m_track = 0 ;
133
133
track_idx_t m_prevTrack = 0 ; // used for navigation
You can’t perform that action at this time.
0 commit comments