Skip to content

Commit 50ccec5

Browse files
committed
move past ties with nextInputPos
1 parent 28e2c27 commit 50ccec5

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

src/engraving/dom/input.cpp

+20-4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "select.h"
3636
#include "staff.h"
3737
#include "stem.h"
38+
#include "tie.h"
3839

3940
using namespace mu;
4041

@@ -310,14 +311,30 @@ void InputState::setSegment(Segment* s)
310311
// nextInputPos
311312
//---------------------------------------------------------
312313

313-
Segment* InputState::nextInputPos() const
314+
Segment* InputState::nextInputPos(Segment* seg = nullptr) const
314315
{
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);
317321
for (; s; s = s->next1(SegmentType::ChordRest)) {
318322
if (s->element(m_track)) {
319323
if (s->element(m_track)->isRest() && toRest(s->element(m_track))->isGap()) {
320324
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;
321338
} else {
322339
return s;
323340
}
@@ -330,7 +347,6 @@ Segment* InputState::nextInputPos() const
330347

331348
//---------------------------------------------------------
332349
// moveToNextInputPos
333-
// TODO: special case: note is first note of tie: goto to last note of tie
334350
//---------------------------------------------------------
335351

336352
void InputState::moveToNextInputPos()

src/engraving/dom/input.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class InputState
127127

128128
private:
129129

130-
Segment* nextInputPos() const;
130+
Segment* nextInputPos(Segment* seg) const;
131131

132132
track_idx_t m_track = 0;
133133
track_idx_t m_prevTrack = 0; // used for navigation

0 commit comments

Comments
 (0)