Skip to content

Commit

Permalink
fix #222171: cannot enter chord mid-measure
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcSabatella committed Jun 13, 2017
1 parent 3d2582f commit aa1b4b4
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions mscore/scoreview.cpp
Expand Up @@ -1761,7 +1761,7 @@ void ScoreView::cmd(const QAction* a)
else if (cmd == "add-noteline")
cmdAddNoteLine();
else if (cmd == "chord-text") {
changeState(ViewState::NOTE_ENTRY);
changeState(ViewState::NORMAL);
cmdAddChordName();
}
else if (cmd == "title-text")
Expand Down Expand Up @@ -2153,15 +2153,15 @@ void ScoreView::cmd(const QAction* a)
if (editData.element->isHarmony())
harmonyTab(false);
else if (editData.element->isFiguredBass())
figuredBassTab(true,false);
figuredBassTab(true, false);
}
else if (cmd == "prev-beat-TEXT") {
if (editData.element->isHarmony())
harmonyBeatsTab(false, true);
}
else if (cmd == "next-beat-TEXT") {
if (editData.element->isHarmony())
harmonyBeatsTab(false,false);
harmonyBeatsTab(false, false);
}

// STATE_NOTE_ENTRY_TAB actions
Expand Down Expand Up @@ -3608,7 +3608,7 @@ void ScoreView::harmonyTab(bool back)
void ScoreView::harmonyBeatsTab(bool noterest, bool back)
{
Harmony* harmony = toHarmony(editData.element);
int track = harmony->track();
int track = harmony->track();
Segment* segment = toSegment(harmony->parent());
if (!segment) {
qDebug("harmonyBeatsTab: no segment");
Expand All @@ -3629,23 +3629,23 @@ void ScoreView::harmonyBeatsTab(bool noterest, bool back)
Fraction f = measure->len();
int ticksPerBeat = f.ticks() / ((f.numerator()>3 && (f.numerator()%3)==0 && f.denominator()>4) ? f.numerator()/3 : f.numerator());
int tickInBar = tick - measure->tick();
int newTick = ((tickInBar + (back?-1:ticksPerBeat)) / ticksPerBeat) * ticksPerBeat;
int newTick = measure->tick() + ((tickInBar + (back?-1:ticksPerBeat)) / ticksPerBeat) * ticksPerBeat;

// look for next/prev beat, note, rest or chord
for (;;) {
segment = back ? segment->prev1(SegmentType::ChordRest) : segment->next1(SegmentType::ChordRest);

if (!segment || (back ? (segment->rtick() < newTick) : (segment->rtick() > newTick))) {
if (!segment || (back ? (segment->tick() < newTick) : (segment->tick() > newTick))) {
// no segment or moved past the beat - create new segment
if (!back && newTick >= f.ticks()) {
if (!back && newTick >= measure->tick() + f.ticks()) {
// next bar, if any
measure = measure->nextMeasure();
if (!measure) {
qDebug("harmonyBeatsTab: no next measure");
return;
}
}
segment = new Segment(measure, SegmentType::ChordRest, newTick);
segment = new Segment(measure, SegmentType::ChordRest, newTick - measure->tick());
if (!segment) {
qDebug("harmonyBeatsTab: no prev segment");
return;
Expand All @@ -3654,7 +3654,7 @@ void ScoreView::harmonyBeatsTab(bool noterest, bool back)
break;
}

if (segment->rtick() == newTick)
if (segment->tick() == newTick)
break;

if (noterest) {
Expand Down

0 comments on commit aa1b4b4

Please sign in to comment.