@@ -195,6 +195,7 @@ void LyricsLayout::layout(Lyrics* item, LayoutContext& ctx)
195
195
}
196
196
197
197
ldata->setPosX (x);
198
+ item->setYRelativeToStaff (0.0 );
198
199
199
200
if (item->ticks ().isNotZero ()) {
200
201
// set melisma end
@@ -612,7 +613,7 @@ void LyricsLayout::setDefaultPositions(staff_idx_t staffIdx, LyricsVersesMap& ly
612
613
LyricsVerse& lyricsVerse = pair.second ;
613
614
for (Lyrics* lyrics : lyricsVerse.lyrics ()) {
614
615
double y = -(totVersesAbove - verse) * lyrics->lineHeight () * lyricsLineHeightFactor;
615
- lyrics->mutldata ()-> setPosY (y);
616
+ lyrics->setYRelativeToStaff (y);
616
617
}
617
618
for (LyricsLineSegment* lyricsLineSegment : lyricsVerse.lines ()) {
618
619
Lyrics* lyrics = lyricsLineSegment->lyricsLine ()->lyrics ();
@@ -626,7 +627,7 @@ void LyricsLayout::setDefaultPositions(staff_idx_t staffIdx, LyricsVersesMap& ly
626
627
LyricsVerse& lyricsVerse = pair.second ;
627
628
for (Lyrics* lyrics : lyricsVerse.lyrics ()) {
628
629
double y = staffHeight + verse * lyrics->lineHeight () * lyricsLineHeightFactor;
629
- lyrics->mutldata ()-> setPosY (y);
630
+ lyrics->setYRelativeToStaff (y);
630
631
}
631
632
for (LyricsLineSegment* lyricsLineSegment : lyricsVerse.lines ()) {
632
633
Lyrics* lyrics = lyricsLineSegment->lyricsLine ()->lyrics ();
@@ -678,11 +679,15 @@ SkylineLine LyricsLayout::createSkylineForVerse(int verse, bool north, LyricsVer
678
679
if (lyricsVerses.count (verse) > 0 ) {
679
680
LyricsVerse& lyricsVerse = lyricsVerses[verse];
680
681
for (Lyrics* lyrics : lyricsVerse.lyrics ()) {
681
- Shape lyricsShape = lyrics->highResShape ().translated (PointF (lyrics->pageX () - systemX, lyrics->pos ().y ()));
682
- lyricsSkyline.add (lyricsShape);
682
+ if (lyrics->addToSkyline ()) {
683
+ Shape lyricsShape = lyrics->highResShape ().translated (PointF (lyrics->pageX () - systemX, lyrics->yRelativeToStaff ()));
684
+ lyricsSkyline.add (lyricsShape);
685
+ }
683
686
}
684
687
for (LyricsLineSegment* lyricsLineSeg : lyricsVerse.lines ()) {
685
- lyricsSkyline.add (lyricsLineSeg->shape ().translate (lyricsLineSeg->pos ()));
688
+ if (lyricsLineSeg->lyricsLine ()->lyrics ()->addToSkyline ()) {
689
+ lyricsSkyline.add (lyricsLineSeg->shape ().translate (lyricsLineSeg->pos ()));
690
+ }
686
691
}
687
692
}
688
693
@@ -718,28 +723,39 @@ void LyricsLayout::addToSkyline(System* system, staff_idx_t staffIdx, LayoutCont
718
723
LyricsVersesMap& lyricsVersesBelow)
719
724
{
720
725
double systemX = system->pageX ();
721
- double lyricsVerticalPadding = ctx.conf ().styleMM (Sid::lyricsMinBottomDistance);
726
+ // HACK: subtract minVerticalDistance here because it's added later during staff distance calculations. Needs a better solution.
727
+ double lyricsVerticalPadding = ctx.conf ().styleMM (Sid::lyricsMinBottomDistance) - ctx.conf ().styleMM (Sid::minVerticalDistance);
722
728
Skyline& skyline = system->staff (staffIdx)->skyline ();
723
729
for (auto & pair : lyricsVersesAbove) {
724
730
LyricsVerse& lyricsVerse = pair.second ;
725
731
for (Lyrics* lyrics : lyricsVerse.lyrics ()) {
726
- Shape lyricsShape = lyrics->highResShape ().translated (PointF (lyrics->pageX () - systemX, lyrics->pos ().y ()));
727
- skyline.north ().add (lyricsShape.adjust (0.0 , -lyricsVerticalPadding, 0.0 , 0.0 ));
732
+ if (lyrics->addToSkyline ()) {
733
+ Shape lyricsShape
734
+ = lyrics->highResShape ().translated (PointF (lyrics->pageX () - systemX, lyrics->yRelativeToStaff ()));
735
+ skyline.north ().add (lyricsShape.adjust (0.0 , -lyricsVerticalPadding, 0.0 , 0.0 ));
736
+ }
728
737
}
729
738
for (LyricsLineSegment* lyricsLineSeg : lyricsVerse.lines ()) {
730
- Shape lineShape = lyricsLineSeg->shape ().translate (lyricsLineSeg->pos ());
731
- skyline.north ().add (lineShape.adjust (0.0 , -lyricsVerticalPadding, 0.0 , 0.0 ));
739
+ if (lyricsLineSeg->lyricsLine ()->lyrics ()->addToSkyline ()) {
740
+ Shape lineShape = lyricsLineSeg->shape ().translate (lyricsLineSeg->pos ());
741
+ skyline.north ().add (lineShape.adjust (0.0 , -lyricsVerticalPadding, 0.0 , 0.0 ));
742
+ }
732
743
}
733
744
}
734
745
for (auto & pair : lyricsVersesBelow) {
735
746
LyricsVerse& lyricsVerse = pair.second ;
736
747
for (Lyrics* lyrics : lyricsVerse.lyrics ()) {
737
- Shape lyricsShape = lyrics->highResShape ().translated (PointF (lyrics->pageX () - systemX, lyrics->pos ().y ()));
738
- skyline.south ().add (lyricsShape.adjust (0.0 , 0.0 , 0.0 , lyricsVerticalPadding));
748
+ if (lyrics->addToSkyline ()) {
749
+ Shape lyricsShape
750
+ = lyrics->highResShape ().translated (PointF (lyrics->pageX () - systemX, lyrics->yRelativeToStaff ()));
751
+ skyline.south ().add (lyricsShape.adjust (0.0 , 0.0 , 0.0 , lyricsVerticalPadding));
752
+ }
739
753
}
740
754
for (LyricsLineSegment* lyricsLineSeg : lyricsVerse.lines ()) {
741
- Shape lineShape = lyricsLineSeg->shape ().translate (lyricsLineSeg->pos ());
742
- skyline.south ().add (lineShape.adjust (0.0 , 0.0 , 0.0 , lyricsVerticalPadding));
755
+ if (lyricsLineSeg->lyricsLine ()->lyrics ()->addToSkyline ()) {
756
+ Shape lineShape = lyricsLineSeg->shape ().translate (lyricsLineSeg->pos ());
757
+ skyline.south ().add (lineShape.adjust (0.0 , 0.0 , 0.0 , lyricsVerticalPadding));
758
+ }
743
759
}
744
760
}
745
761
}
0 commit comments