lintian
[alioth/musescore.git] / debian / patches / backports / 49-pitch-ottava.diff
1 Origin: upstream, commit:66be5a18fa40a6358b0a78723adcd42f15176fcc
2 Author: Niek van den Berg <njvdberg@xs4all.nl>
3 Description: fix #293593 - Issues with ottavas
4  Corrects first problem: Status doesn't display the pitch of note that have an
5  ottave line. This is solved in Note::tpcUserName().
6  .
7  Solves the second problem in issue 293593: Accidentals do apply if 8va sign is added.
8  This is solved in Note::updateAccidental(). All calculations are based on the
9  effective pitch of the a note rather than the actual pitch. The solution now
10  takes to ottava signs into account by using the actual pitch.
11  .
12  For easily find out whether an ottava is applied, a new method ottavaCapoFret()
13  is added which returns the pitch offset by an ottava (or capo fret). To prevent
14  code dublication, ppitch() also use this new ottavaCapoFret() method.
15
16 --- a/libmscore/note.cpp
17 +++ b/libmscore/note.cpp
18 @@ -760,7 +760,7 @@ int Note::tpc() const
19  QString Note::tpcUserName(bool explicitAccidental) const
20        {
21        QString pitchName = tpc2name(tpc(), NoteSpellingType::STANDARD, NoteCaseType::AUTO, explicitAccidental);
22 -      QString octaveName = QString::number((epitch() / 12) - 1);
23 +      QString octaveName = QString::number(((epitch() + ottaveCapoFret()) / 12) - 1);
24        return pitchName + (explicitAccidental ? " " : "") + octaveName;
25        }
26  
27 @@ -2095,13 +2095,14 @@ void Note::updateAccidental(AccidentalSt
28  
29              AccidentalVal accVal = tpc2alter(tpc());
30              bool error = false;
31 -            AccidentalVal relLineAccVal = as->accidentalVal(relLine, error);
32 +            int eRelLine = absStep(tpc(), epitch()+ottaveCapoFret());
33 +            AccidentalVal relLineAccVal = as->accidentalVal(eRelLine, error);
34              if (error) {
35                    qDebug("error accidetalVal");
36                    return;
37                    }
38 -            if ((accVal != relLineAccVal) || hidden() || as->tieContext(relLine)) {
39 -                  as->setAccidentalVal(relLine, accVal, _tieBack != 0 && _accidental == 0);
40 +            if ((accVal != relLineAccVal) || hidden() || as->tieContext(eRelLine)) {
41 +                  as->setAccidentalVal(eRelLine, accVal, _tieBack != 0 && _accidental == 0);
42                    acci = Accidental::value2subtype(accVal);
43                    // if previous tied note has same tpc, don't show accidental
44                    if (_tieBack && _tieBack->startNote()->tpc1() == tpc1())
45 @@ -2306,6 +2307,21 @@ void Note::setHeadGroup(NoteHead::Group
46        }
47  
48  //---------------------------------------------------------
49 +//   ottaveCapoFret
50 +//    offset added by Ottava's and Capo Fret.
51 +//---------------------------------------------------------
52 +
53 +int Note::ottaveCapoFret() const
54 +      {
55 +      Chord* ch = chord();
56 +      int capoFretId = staff()->capo(ch->segment()->tick());
57 +      if (capoFretId != 0)
58 +            capoFretId -= 1;
59 +
60 +      return staff()->pitchOffset(ch->segment()->tick()) + capoFretId;
61 +      }
62 +
63 +//---------------------------------------------------------
64  //   ppitch
65  //    playback pitch
66  //---------------------------------------------------------
67 @@ -2323,11 +2339,8 @@ int Note::ppitch() const
68                          return div.pitch;
69                    }
70              }
71 -      int capoFretId = staff()->capo(ch->segment()->tick());
72 -      if (capoFretId != 0)
73 -            capoFretId -= 1;
74  
75 -      return _pitch + staff()->pitchOffset(ch->segment()->tick()) + capoFretId;
76 +      return _pitch + ottaveCapoFret();
77        }
78  
79  //---------------------------------------------------------
80 --- a/libmscore/note.h
81 +++ b/libmscore/note.h
82 @@ -323,6 +323,7 @@ class Note final : public Element {
83        void setPitch(int val);
84        void setPitch(int pitch, int tpc1, int tpc2);
85        int pitch() const                   { return _pitch;    }
86 +      int ottaveCapoFret() const;
87        int ppitch() const;           ///< playback pitch
88        int epitch() const;           ///< effective pitch
89        qreal tuning() const                { return _tuning;   }