Skip to content

Commit

Permalink
Remove empty systems before laying out a page
Browse files Browse the repository at this point in the history
  • Loading branch information
miiizen committed Feb 13, 2025
1 parent 51623c0 commit e8ec26c
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 0 deletions.
40 changes: 40 additions & 0 deletions src/engraving/rendering/score/pagelayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 +496,46 @@ void PageLayout::layoutArticAndFingeringOnCrossStaffBeams(LayoutContext& ctx, Sy
}
}

void PageLayout::removeEmptySystems(LayoutContext& ctx)
{
Page* page = ctx.mutState().page();

auto removeSystem = [&](System* system) -> void {
// erase system from page
std::vector<System*>& pageSystems = page->systems();
auto pageFoundSystem = std::find(pageSystems.begin(), pageSystems.end(), system);
if (pageFoundSystem != pageSystems.end()) {
pageSystems.erase(pageFoundSystem);
}

// erase system from score
std::vector<System*>& scoreSystems = ctx.mutDom().systems();
auto scoreFoundSystem = std::find(scoreSystems.begin(), scoreSystems.end(), system);
if (scoreFoundSystem != scoreSystems.end()) {
scoreSystems.erase(scoreFoundSystem);
}

// erase system from layoutcontext
std::vector<System*>& ctxSystems = ctx.mutState().systemList();
auto ctxFoundSystem = std::find(ctxSystems.begin(), ctxSystems.end(), system);
if (ctxFoundSystem != ctxSystems.end()) {
ctxSystems.erase(ctxFoundSystem);
}

// finally delete system
delete system;
};

std::vector<System*> systems = ctx.state().systemList();

for (System* sys : systems) {
if (!sys->measures().empty()) {
continue;
}
removeSystem(sys);
}
}

//---------------------------------------------------------
// layoutPage
// restHeight - vertical space which has to be distributed
Expand Down
1 change: 1 addition & 0 deletions src/engraving/rendering/score/pagelayout.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class PageLayout
{
public:

static void removeEmptySystems(LayoutContext& ctx);
static void getNextPage(LayoutContext& ctx);
static void collectPage(LayoutContext& ctx);

Expand Down
1 change: 1 addition & 0 deletions src/engraving/rendering/score/scorepageviewlayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ void ScorePageViewLayout::doLayout(LayoutContext& ctx)

const MeasureBase* lmb = nullptr;
do {
PageLayout::removeEmptySystems(ctx);
PageLayout::getNextPage(ctx);
PageLayout::collectPage(ctx);

Expand Down

0 comments on commit e8ec26c

Please sign in to comment.