From 425d4387464a1adb35932aa63a054aeedea614f8 Mon Sep 17 00:00:00 2001 From: Marc Sabatella Date: Sun, 7 Sep 2014 21:41:13 -0600 Subject: [PATCH 1/3] fix #32391: center lyrics under whole notes --- libmscore/lyrics.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libmscore/lyrics.cpp b/libmscore/lyrics.cpp index ca7da99753..88b112a4e8 100644 --- a/libmscore/lyrics.cpp +++ b/libmscore/lyrics.cpp @@ -227,10 +227,12 @@ void Lyrics::layout1() // // left align if syllable has a number or is a melisma // + Chord* c = static_cast(parent()); + qreal nominalWidth = symWidth(SymId::noteheadBlack); if (_ticks == 0 && (textStyle().align() & AlignmentFlags::HCENTER) && !_verseNumber) - x += symWidth(SymId::noteheadBlack) * .5; + x += nominalWidth * .5 - c->x(); else if (_ticks || ((textStyle().align() & AlignmentFlags::HCENTER) && _verseNumber)) - x += width() * .5; + x += (width() + nominalWidth - c->maxHeadWidth()) * .5 - c->x(); rxpos() += x; rypos() += y; if (_verseNumber) { From e2fdd254a72342bca882d58603b8a35c3cd4f657 Mon Sep 17 00:00:00 2001 From: Marc Sabatella Date: Mon, 8 Sep 2014 08:38:26 -0600 Subject: [PATCH 2/3] fix #17190: left align hyphenated melismas --- libmscore/lyrics.cpp | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/libmscore/lyrics.cpp b/libmscore/lyrics.cpp index 88b112a4e8..84bf0fca22 100644 --- a/libmscore/lyrics.cpp +++ b/libmscore/lyrics.cpp @@ -224,15 +224,30 @@ void Lyrics::layout1() int line = ll->indexOf(this); qreal y = lh * line + point(score()->styleS(StyleIdx::lyricsDistance)); qreal x = 0.0; + // - // left align if syllable has a number or is a melisma + // left align if syllable has a number or is a melisma or is first syllable of hyphenated word // - Chord* c = static_cast(parent()); + ChordRest* cr = chordRest(); + qreal maxWidth; + if (cr->type() == Element::Type::CHORD) + maxWidth = static_cast(cr)->maxHeadWidth(); + else + maxWidth = cr->width(); // TODO: exclude ledger line for multivoice rest? qreal nominalWidth = symWidth(SymId::noteheadBlack); - if (_ticks == 0 && (textStyle().align() & AlignmentFlags::HCENTER) && !_verseNumber) - x += nominalWidth * .5 - c->x(); - else if (_ticks || ((textStyle().align() & AlignmentFlags::HCENTER) && _verseNumber)) - x += (width() + nominalWidth - c->maxHeadWidth()) * .5 - c->x(); + bool hyphenatedMelisma = false; + if (_syllabic == Syllabic::BEGIN || _syllabic == Syllabic::MIDDLE) { + // hyphenated syllables representing melismas need to be left aligned + // detecting this means finding next CR on same track and checking for existence of lyric in same verse + Segment* s = cr->segment()->next1(); + ChordRest* ncr = s ? s->nextChordRest(cr->track()) : nullptr; + if (ncr && !ncr->lyrics(_no)) + hyphenatedMelisma = true; + } + if (_ticks == 0 && !hyphenatedMelisma && (textStyle().align() & AlignmentFlags::HCENTER) && !_verseNumber) + x += nominalWidth * .5 - cr->x(); + else if (_ticks || hyphenatedMelisma || ((textStyle().align() & AlignmentFlags::HCENTER) && _verseNumber)) + x += (width() + nominalWidth - maxWidth) * .5 - cr->x(); rxpos() += x; rypos() += y; if (_verseNumber) { From cfca276c96e97550dc29e02358e21ee32cf84d7c Mon Sep 17 00:00:00 2001 From: Marc Sabatella Date: Mon, 8 Sep 2014 09:14:48 -0600 Subject: [PATCH 3/3] add vtests --- vtest/gen | 3 ++- vtest/gen.bat | 3 ++- vtest/lyrics-1-ref.png | Bin 0 -> 8556 bytes vtest/lyrics-1.mscz | Bin 0 -> 1443 bytes vtest/lyrics-2-ref.png | Bin 0 -> 8928 bytes vtest/lyrics-2.mscz | Bin 0 -> 1532 bytes 6 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 vtest/lyrics-1-ref.png create mode 100644 vtest/lyrics-1.mscz create mode 100644 vtest/lyrics-2-ref.png create mode 100644 vtest/lyrics-2.mscz diff --git a/vtest/gen b/vtest/gen index e9ab59eba7..0ba0d1f6b6 100755 --- a/vtest/gen +++ b/vtest/gen @@ -35,7 +35,8 @@ else accidental-1 accidental-2 accidental-3 accidental-4 accidental-5\ accidental-6 accidental-7 accidental-8 accidental-9\ tie-1 tie-2 grace-1 grace-2 grace-3 harmony-1 harmony-2 harmony-3 harmony-4 beams-1 beams-2\ - user-offset-1 user-offset-2 chord-space-1 tablature-1 image-1" + user-offset-1 user-offset-2 chord-space-1 tablature-1 image-1\ + lyrics-1 lyrics-2" fi DPI=130 diff --git a/vtest/gen.bat b/vtest/gen.bat index f6e5e99497..9f0c85b3e9 100644 --- a/vtest/gen.bat +++ b/vtest/gen.bat @@ -16,7 +16,8 @@ set SRC=mmrest-1,bravura-mmrest,gonville-mmrest,mmrest-2,mmrest-4,mmrest-5,mmres accidental-1,accidental-2,accidental-3,accidental-4,accidental-5, ^ accidental-6,accidental-7,accidental-8,accidental-9, ^ tie-1,tie-2,grace-1,grace-2,grace-3,harmony-1,harmony-2,harmony-3,harmony-4,beams-1,beams-2, ^ - user-offset-1,user-offset-2,chord-space-1,tablature-1,image-1 + user-offset-1,user-offset-2,chord-space-1,tablature-1,image-1, ^ + lyrics-1,lyrics-2 set MSCORE=..\win32install\bin\mscore.exe set DPI=130 diff --git a/vtest/lyrics-1-ref.png b/vtest/lyrics-1-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..3bab73994a27d3d59ee264c4397d8c2c4c813640 GIT binary patch literal 8556 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 literal 0 HcmV?d00001 diff --git a/vtest/lyrics-2-ref.png b/vtest/lyrics-2-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..521da07bdeeac774c2b8dc9a287a8d0b29952569 GIT binary patch literal 8928 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 M`_Kqht!W?qUtLi7KmY&$ literal 0 HcmV?d00001 diff --git a/vtest/lyrics-2.mscz b/vtest/lyrics-2.mscz new file mode 100644 index 0000000000000000000000000000000000000000..47e4339453d1b0a50dec2e9c6950b9d1e4925c01 GIT binary patch literal 1532 zcmZ{kc{CIX6voFguk4hi7$oqCd56hW^~OS`1Zu2(q(=C`iF?|iA3o z!GUj~IlMSkK3^Z?s8KE!xMPcod^1}+|x3MqFguDZMSi(kC zY%o-L>o1DOSq|mUP?8|T9eB|a)|+IhhP9W- zrETl5FZr$#@QJ1V0#MIvNRhc|+lRLdByy&|nBUrGJ|8}PuQ@s+{CA1&XqXoHMzV#f zHhlzEk>39qV%6_fDSJfV^}F?T zZ&{$8Mv z?S88c5QwemQiz9Bz{ZVqnbI)Py7Alud1a(YjzENk)Xq(~Xlm*k_w%!?Z>?}g1=2<_ z$E8}acdllD`Ftg`9IkJ!0k3*wwqU%gE-Z!yf|{Bnvmc6KtF(|RSg7cek9K_zn1xrg zJ8*M`)EzlLT+WbeJ@Q67L~0((7H$C7yH*jesd{BO=|adZ`Fiqu96j0g-qAUty(92U zR%H+nKZ)7$w5rT-78V>V?d+@dtWiL1n+@;qIF39|F`HHw>Sr5CjJs>q1q7(=57&%F z_JU=`{m&E=!xo4c*|d`=5vLNz{DtchETcYo86}58U96AT=Mp8#P9dj9K5r4UqMT$} zBnt&Gu1+LPA~irNGKN_$&ye2zagNYhxWhoo*jO4qw^F1%G5l$!H!`s~a%j!1qHmF3 z)vxVO!?u>VG7k_YZb!3aZeFSy-T6mRLl-*Yz0`P7`zN2Cc@gR}7dx6F?%80}LXD?W zS8!L5z#hw(I|(2S4hW@hzTUj#MfqCl1fS210fG$f-O z^EEzZ2H+bnK9$?>)MumFbpqJtj^iXZJ!V4vr(O>`N0Z`q6`(GK|4S*n4j#z#R@bBl(>d2-POHut==ZDZsUb7L0`_Kncz=){qs^&Yw1cp>?d zU&GP|klMFL6JNTHb-t8)Q)1q}ug+lahc@~w_-~WS_3$lMI>i+lf-`M^6 i$Im4E_X7YBb)Udpf8Zh-1^ngvnU~v<-02Sd?*0a$?ZWo} literal 0 HcmV?d00001