From 36b68c5f88bf6f8bb29e3e324dc221440138b83e Mon Sep 17 00:00:00 2001 From: Roman Pudashkin Date: Thu, 9 Jul 2026 11:30:16 +0300 Subject: [PATCH] Fix --page: dropped last measure in page export --- src/project/internal/notationproject.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/project/internal/notationproject.cpp b/src/project/internal/notationproject.cpp index 46c99ca2cda17..a9091351ead0c 100644 --- a/src/project/internal/notationproject.cpp +++ b/src/project/internal/notationproject.cpp @@ -35,6 +35,7 @@ #include "engraving/compat/engravingcompat.h" #include "engraving/dom/excerpt.h" #include "engraving/dom/masterscore.h" +#include "engraving/dom/measurebase.h" #include "engraving/dom/repeatlist.h" #include "engraving/editing/editscoreproperties.h" #include "engraving/engravingerrors.h" @@ -578,7 +579,10 @@ muse::Ret NotationProject::savePage(const muse::io::path_t& path, const size_t p range.startStaffIdx = 0; range.endStaffIdx = score->nstaves(); range.startMeasure = systems.front()->first(); - range.endMeasure = systems.back()->last(); + // StaffWrite::writeStaff stops before reaching endMeasure, so use the measure after + // the last one we want, otherwise the page's last measure/frame is dropped + MeasureBase* lastMeasure = systems.back()->last(); + range.endMeasure = lastMeasure ? lastMeasure->next() : nullptr; write::WriteContext ctx(score); ctx.setRange(range);