From fef847ecbc34f4b19e2e4d9dafadda18558e18b1 Mon Sep 17 00:00:00 2001 From: James Mizen Date: Thu, 28 Sep 2023 18:57:44 +0200 Subject: [PATCH] Fix GH#19489: Center fermatas over rests on resized staves Backport of #19552 Plus another apparently forgotten change --- libmscore/fermata.cpp | 6 +- libmscore/rest.cpp | 7 + libmscore/rest.h | 1 + vtest/fermata-1.mscx | 306 ++++++++++++++++++++++++++++++++++++++++++ vtest/gen | 2 +- vtest/gen.bat | 2 +- 6 files changed, 321 insertions(+), 3 deletions(-) create mode 100644 vtest/fermata-1.mscx diff --git a/libmscore/fermata.cpp b/libmscore/fermata.cpp index d7b453556453..783ce9f0ad7d 100644 --- a/libmscore/fermata.cpp +++ b/libmscore/fermata.cpp @@ -227,8 +227,12 @@ void Fermata::layout() if (e) { if (e->isChord()) rxpos() += score()->noteHeadWidth() * staff()->mag(Fraction(0, 1)) * .5; + else if (e->isRest()) { + const Rest* rest = toRest(e); + rxpos() += e->x() + rest->centerX(); + } else - rxpos() += e->x() + e->width() * staff()->mag(Fraction(0, 1)) * .5; + rxpos() += e->x() - e->shape().left() + e->width() * staff()->mag(Fraction(0, 1)) * .5; } QString name = Sym::id2name(_symId); diff --git a/libmscore/rest.cpp b/libmscore/rest.cpp index fe37f3eff019..cc68fe06a98d 100644 --- a/libmscore/rest.cpp +++ b/libmscore/rest.cpp @@ -853,6 +853,13 @@ qreal Rest::rightEdge() const return x() + width(); } +qreal Rest::centerX() const + { + SymId sym = this->sym(); + const auto& bbox = symBbox(sym); + return symWidth(sym) / 2 + bbox.bottomLeft().x(); + } + //--------------------------------------------------------- // accent //--------------------------------------------------------- diff --git a/libmscore/rest.h b/libmscore/rest.h index fd0b3a3f1a87..49d389db7b1d 100644 --- a/libmscore/rest.h +++ b/libmscore/rest.h @@ -93,6 +93,7 @@ class Rest : public ChordRest { virtual qreal stemPosX() const; virtual QPointF stemPosBeam() const; virtual qreal rightEdge() const override; + qreal centerX() const; void localSpatiumChanged(qreal oldValue, qreal newValue) override; QVariant propertyDefault(Pid) const override; diff --git a/vtest/fermata-1.mscx b/vtest/fermata-1.mscx new file mode 100644 index 000000000000..18df05d84f4f --- /dev/null +++ b/vtest/fermata-1.mscx @@ -0,0 +1,306 @@ + + + 3.6.3 + + + + 0 + 480 + + 1 + 1 + 1 + 0 + + Composer / arranger + + 2023-09-28 + + + + Apple Macintosh + + + + Subtitle + + + Untitled score + + Orchestral + + Tasteninstrumente + +
+ flutes + oboes + clarinets + saxophones + bassoons + +
+
+ horns + trumpets + cornets + flugelhorns + trombones + baritone-horns + euphoniums + tubas +
+
+ timpani +
+
+ keyboard-percussion + drums + unpitched-metal-percussion + unpitched-wooden-percussion + other-percussion +
+ keyboards + harps + organs + synths +
+ plucked-strings +
+ +
+ voices +
+
+ orchestral-strings +
+ +
+ + + + stdNormal + 1 + + + + + stdNormal + 1.5 + + F + + 1 + + + + stdNormal + + + Piano + flats + + Piano + Pno. + Piano + 21 + 108 + 21 + 108 + keyboard.piano + F + + + Fluid + + + + + + + + 4 + 4 + + + fermataAbove + + + measure + 4/4 + + + + + + + fermataAbove + + + half + + + fermataAbove + + + quarter + + + fermataAbove + + + eighth + + + eighth + + + + + + + + + G + G + + + 4 + 4 + + + fermataAbove + + + measure + 4/4 + + + + + + + fermataAbove + + + half + + + fermataAbove + + + quarter + + + fermataAbove + + + eighth + + + eighth + + + + + + + + + 4 + 4 + + + fermataAbove + + + measure + 4/4 + + + + + + + fermataAbove + + + half + + + fermataAbove + + + quarter + + + fermataAbove + + + eighth + + + eighth + + + + +
+
diff --git a/vtest/gen b/vtest/gen index d5796e66732b..b302231060b4 100755 --- a/vtest/gen +++ b/vtest/gen @@ -29,7 +29,7 @@ else SRC="mmrest-1 bravura-mmrest gonville-mmrest mmrest-2 mmrest-4 mmrest-5 mmrest-6 mmrest-7 mmrest-8 mmrest-9\ mmrest-10 mmrest-11 mmrest-12 mmrest-13 mmrest-14 mmrest-15 mmrest-16 mmrest-17 mmrest-18\ mmrest-19 mmrest-20 mmrest-21 mmrest-22 mmrest-23\ - fmrest-1 fmrest-2 fmrest-3 fmrest-4 fmrest-5 fmrest-6 measure-repeat-1\ + fermata-1 fmrest-1 fmrest-2 fmrest-3 fmrest-4 fmrest-5 fmrest-6 measure-repeat-1\ noteheadposition-1 valign-1 valign-2 valign-3\ emmentaler-1 bravura-1 gonville-1 musejazz-1\ emmentaler-2 bravura-2 gonville-2 musejazz-2\ diff --git a/vtest/gen.bat b/vtest/gen.bat index cb25c15c8758..dd0920259a00 100644 --- a/vtest/gen.bat +++ b/vtest/gen.bat @@ -6,7 +6,7 @@ set SRC=bravura-mmrest,gonville-mmrest, ^ mmrest-1,mmrest-2,mmrest-4,mmrest-5,mmrest-6,mmrest-7,mmrest-8,mmrest-9, ^ mmrest-10,mmrest-11,mmrest-12,, mmrest-13, mmrest-14, mmrest-15, mmrest-16, mmrest-17, mmrest-18, ^ mmrest-19, mmrest-20, mmrest-21, mmrest-22, mmrest-23, ^ - fmrest-1,fmrest-2,fmrest-3,fmrest-4,fmrest-5,fmrest-6,measure-repeat-1, ^ + fermata-1 fmrest-1,fmrest-2,fmrest-3,fmrest-4,fmrest-5,fmrest-6,measure-repeat-1, ^ noteheadposition-1,valign-1,valign-2,valign-3, ^ emmentaler-1,bravura-1,gonville-1, musejazz-1, ^ emmentaler-2,bravura-2,gonville-2, musejazz-2, ^