diff --git a/libmscore/beam.cpp b/libmscore/beam.cpp index 33bf7b8f1d..15adece710 100644 --- a/libmscore/beam.cpp +++ b/libmscore/beam.cpp @@ -464,7 +464,7 @@ void Beam::layout1() //TABULATURES: all beams (and related chords) are: // UP or DOWN according to TAB duration position // slope 0 - _up = !((StaffTypeTablature*)staff()->staffType())->durationBelow(); + _up = !((StaffTypeTablature*)staff()->staffType())->stemsDown(); slope = 0.0; cross = isGrace = false; foreach(ChordRest* cr, _elements) { @@ -1549,14 +1549,14 @@ void Beam::layout2(QListcrl, SpannerSegmentType, int frag) if (staff()->isTabStaff()) { qreal y; - if( ((StaffTypeTablature*)staff()->staffType())->durationBelow() ) { + if( ((StaffTypeTablature*)staff()->staffType())->stemsDown() ) { _up = false; y = (staff()->staffType()->lines() - 1) * staff()->staffType()->lineDistance().val() - + STAFFTYPE_TAB_DEFAULTSTEMLEN; + + STAFFTYPE_TAB_DEFAULTSTEMLEN_DN; } else { _up = true; - y = STAFFTYPE_TAB_DEFAULTSTEMPOSY - STAFFTYPE_TAB_DEFAULTSTEMLEN; + y = STAFFTYPE_TAB_DEFAULTSTEMPOSY_UP - STAFFTYPE_TAB_DEFAULTSTEMLEN_UP; } y *= _spatium; py1 = y; diff --git a/libmscore/chord.cpp b/libmscore/chord.cpp index 174d3e3cfa..c5186e733c 100644 --- a/libmscore/chord.cpp +++ b/libmscore/chord.cpp @@ -300,8 +300,8 @@ QPointF Chord::stemPos() const if (staff() && staff()->isTabStaff()) { qreal sp = spatium(); StaffTypeTablature* tab = static_cast( staff()->staffType() ); - qreal y = ( tab->durationBelow() ? - upString() * tab->lineDistance().val() : STAFFTYPE_TAB_DEFAULTSTEMPOSY); + qreal y = ( tab->stemsDown() ? + upString() * tab->lineDistance().val() : STAFFTYPE_TAB_DEFAULTSTEMPOSY_UP); return QPointF(STAFFTYPE_TAB_DEFAULTSTEMPOSX*sp, y*sp) + pagePos(); } @@ -319,8 +319,8 @@ QPointF Chord::stemPosBeam() const if (staff() && staff()->isTabStaff()) { qreal sp = spatium(); StaffTypeTablature* tab = static_cast( staff()->staffType() ); - qreal y = ( tab->durationBelow() ? - downString() * tab->lineDistance().val() : STAFFTYPE_TAB_DEFAULTSTEMPOSY); + qreal y = ( tab->stemsDown() ? + downString() * tab->lineDistance().val() : STAFFTYPE_TAB_DEFAULTSTEMPOSY_UP); return QPointF(STAFFTYPE_TAB_DEFAULTSTEMPOSX*sp, y*sp) + pagePos(); } @@ -609,7 +609,7 @@ void Chord::computeUp() { // tablatures if (staff() && staff()->isTabStaff()) { - _up = !((StaffTypeTablature*)staff()->staffType())->durationBelow(); + _up = !((StaffTypeTablature*)staff()->staffType())->stemsDown(); return; } // pitched staves @@ -1118,14 +1118,14 @@ void Chord::layoutStem() if (!tab->slashStyle() && _stem) { // process stems: QPointF pos = stemPos() - pagePos(); - qreal stemLen = tab->durationBelow() ? - (tab->lines()-1 - upString()) * tab->lineDistance().val() + STAFFTYPE_TAB_DEFAULTSTEMLEN : - STAFFTYPE_TAB_DEFAULTSTEMLEN; + qreal stemLen = tab->stemsDown() ? + (tab->lines()-1 - upString()) * tab->lineDistance().val() + STAFFTYPE_TAB_DEFAULTSTEMLEN_DN : + STAFFTYPE_TAB_DEFAULTSTEMLEN_UP; _stem->setPos(pos); _stem->setLen(stemLen * spatium()); // process hook int hookIdx = durationType().hooks(); - if (tab->durationBelow()) + if (tab->stemsDown()) hookIdx = -hookIdx; if (hookIdx) { _hook->setSubtype(hookIdx); diff --git a/libmscore/score.cpp b/libmscore/score.cpp index ab408e2792..64afe94603 100644 --- a/libmscore/score.cpp +++ b/libmscore/score.cpp @@ -1237,8 +1237,9 @@ bool Score::getPosition(Position* pos, const QPointF& p, int voice) const // TODO: restrict to reasonable values (pitch 0-127) // Staff* s = staff(pos->staffIdx); - qreal mag = staff(pos->staffIdx)->mag(); - qreal lineDist = (s->isTabStaff() ? 1.5 : .5) * mag * spatium(); + qreal mag = s->mag(); + // in TABs, step from one string to another; in other staves, step on and between lines + qreal lineDist = s->staffType()->lineDistance().val() * (s->isTabStaff() ? 1 : .5) * mag * spatium(); pos->line = lrint((pppp.y() - sstaff->bbox().y()) / lineDist); if (s->isTabStaff()) { diff --git a/libmscore/stafftype.cpp b/libmscore/stafftype.cpp index 6bee9f1695..d2c42afed4 100644 --- a/libmscore/stafftype.cpp +++ b/libmscore/stafftype.cpp @@ -373,7 +373,6 @@ QList StaffTypeTablature::_durationFonts = QListdots(); - if (nDots > 0) - symbols[score()->symIdx()][dotSym].draw(painter, magS(), QPointF(spatium(), stemLen()), nDots); + if (nDots > 0) { + qreal sp = spatium(); + qreal y = stemLen() - ( ((StaffTypeTablature*)st->staffType())->stemsDown() ? + (STAFFTYPE_TAB_DEFAULTSTEMLEN_DN - 0.75) * sp : 0.0 ); + symbols[score()->symIdx()][dotSym].draw(painter, magS(), + QPointF(STAFFTYPE_TAB_DEFAULTDOTDIST_X * sp, y), nDots); + } } } diff --git a/mscore/editstafftype.cpp b/mscore/editstafftype.cpp index 5ff0b2fb66..788afac1dc 100644 --- a/mscore/editstafftype.cpp +++ b/mscore/editstafftype.cpp @@ -199,14 +199,14 @@ void EditStaffType::saveCurrent(QListWidgetItem* o) StaffTypeTablature* stt = static_cast(st); stt->setSlashStyle(true); // assume no note values stt->setGenDurations(false); - stt->setDurationBelow(false); + stt->setStemsDown(false); if (noteValues1->isChecked()) stt->setGenDurations(true); if (noteValues2->isChecked()) stt->setSlashStyle(false); if (noteValues3->isChecked()) { stt->setSlashStyle(false); - stt->setDurationBelow(true); + stt->setStemsDown(true); } stt->setDurationFontName(durFontName->currentText()); stt->setDurationFontSize(durFontSize->value()); @@ -315,8 +315,8 @@ void EditStaffType::typeChanged(QListWidgetItem* n, QListWidgetItem* o) else { noteValues0->setChecked(false); noteValues1->setChecked(false); - noteValues2->setChecked( !(tab->durationBelow()) ); - noteValues3->setChecked(tab->durationBelow()); + noteValues2->setChecked( !(tab->stemsDown()) ); + noteValues3->setChecked(tab->stemsDown()); } } updateTabPreview(); @@ -526,11 +526,11 @@ void EditStaffType::updateTabPreview() stt->setGenDurations(true); if (noteValues2->isChecked()) { stt->setSlashStyle(false); - stt->setDurationBelow(false); + stt->setStemsDown(false); } if (noteValues3->isChecked()) { stt->setSlashStyle(false); - stt->setDurationBelow(true); + stt->setStemsDown(true); } stt->setDurationFontName(durFontName->currentText()); stt->setDurationFontSize(durFontSize->value());