From 1842d255762a09a7d87bc34ecb63343973418eb7 Mon Sep 17 00:00:00 2001 From: pyonpyoco <60975353+pyonpyoco@users.noreply.github.com> Date: Fri, 12 Jun 2026 16:33:37 +0900 Subject: [PATCH 1/3] Fix full-measure rest collision with own fermata --- src/engraving/rendering/score/restlayout.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/engraving/rendering/score/restlayout.cpp b/src/engraving/rendering/score/restlayout.cpp index 2113c6b8b1e40..efda84d86b55d 100644 --- a/src/engraving/rendering/score/restlayout.cpp +++ b/src/engraving/rendering/score/restlayout.cpp @@ -620,9 +620,12 @@ void RestLayout::checkFullMeasureRestCollisions(const System* system, LayoutCont double xSegment = segment.pagePos().x() - system->pagePos().x(); measureShape.add(segment.staffShape(staffIdx).translated(PointF(xSegment, 0.0))); } - measureShape.remove_if([] (const ShapeElement& shapeEl) { + measureShape.remove_if([fullMeasureRest] (const ShapeElement& shapeEl) { const EngravingItem* shapeItem = shapeEl.item(); return shapeItem && ((shapeItem->isRest() && toRest(shapeItem)->isFullMeasureRest()) + || (shapeItem->type() == ElementType::FERMATA + && shapeItem->explicitParent() == fullMeasureRest->segment() + && shapeItem->track() == fullMeasureRest->track()) || shapeItem->isBarLine() || shapeItem->isAccidental()); }); From 9aca0a5b33d11c65eeefeabdb502b69f50c87e08 Mon Sep 17 00:00:00 2001 From: pyonpyoco <60975353+pyonpyoco@users.noreply.github.com> Date: Fri, 12 Jun 2026 16:34:55 +0900 Subject: [PATCH 2/3] uncrustify --- src/engraving/rendering/score/restlayout.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engraving/rendering/score/restlayout.cpp b/src/engraving/rendering/score/restlayout.cpp index efda84d86b55d..f126037b1f50a 100644 --- a/src/engraving/rendering/score/restlayout.cpp +++ b/src/engraving/rendering/score/restlayout.cpp @@ -624,8 +624,8 @@ void RestLayout::checkFullMeasureRestCollisions(const System* system, LayoutCont const EngravingItem* shapeItem = shapeEl.item(); return shapeItem && ((shapeItem->isRest() && toRest(shapeItem)->isFullMeasureRest()) || (shapeItem->type() == ElementType::FERMATA - && shapeItem->explicitParent() == fullMeasureRest->segment() - && shapeItem->track() == fullMeasureRest->track()) + && shapeItem->explicitParent() == fullMeasureRest->segment() + && shapeItem->track() == fullMeasureRest->track()) || shapeItem->isBarLine() || shapeItem->isAccidental()); }); From 15f8b1328a0b7ef12afe3f3a6e21a8d3da909dda Mon Sep 17 00:00:00 2001 From: pyonpyoco <60975353+pyonpyoco@users.noreply.github.com> Date: Fri, 12 Jun 2026 22:46:07 +0900 Subject: [PATCH 3/3] exclude all fermatas from rest collision shape --- src/engraving/rendering/score/restlayout.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/engraving/rendering/score/restlayout.cpp b/src/engraving/rendering/score/restlayout.cpp index f126037b1f50a..3ce0c254f4277 100644 --- a/src/engraving/rendering/score/restlayout.cpp +++ b/src/engraving/rendering/score/restlayout.cpp @@ -620,13 +620,10 @@ void RestLayout::checkFullMeasureRestCollisions(const System* system, LayoutCont double xSegment = segment.pagePos().x() - system->pagePos().x(); measureShape.add(segment.staffShape(staffIdx).translated(PointF(xSegment, 0.0))); } - measureShape.remove_if([fullMeasureRest] (const ShapeElement& shapeEl) { + measureShape.remove_if([] (const ShapeElement& shapeEl) { const EngravingItem* shapeItem = shapeEl.item(); return shapeItem && ((shapeItem->isRest() && toRest(shapeItem)->isFullMeasureRest()) - || (shapeItem->type() == ElementType::FERMATA - && shapeItem->explicitParent() == fullMeasureRest->segment() - && shapeItem->track() == fullMeasureRest->track()) - || shapeItem->isBarLine() || shapeItem->isAccidental()); + || shapeItem->isBarLine() || shapeItem->isAccidental() || shapeItem->isFermata()); }); if (measureShape.size() == 0) {