diff --git a/.github/workflows/ci_build.yml b/.github/workflows/ci_build.yml index ca515fa61ad..1d75b6b86ff 100644 --- a/.github/workflows/ci_build.yml +++ b/.github/workflows/ci_build.yml @@ -78,7 +78,7 @@ jobs: compiler: g++ version: "10" - - os: ubuntu-20.04 + - os: ubuntu-22.04 compiler: g++ version: "11" diff --git a/Verovio.xcodeproj/project.pbxproj b/Verovio.xcodeproj/project.pbxproj index 06ae5b7bc23..9c99a0a38a6 100644 --- a/Verovio.xcodeproj/project.pbxproj +++ b/Verovio.xcodeproj/project.pbxproj @@ -5172,7 +5172,7 @@ "$(inherited)", NO_HUMDRUM_SUPPORT, ); - MACOSX_DEPLOYMENT_TARGET = ""; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = ""; }; @@ -5184,7 +5184,7 @@ CODE_SIGN_IDENTITY = "-"; DEAD_CODE_STRIPPING = YES; GCC_PREPROCESSOR_DEFINITIONS = NO_HUMDRUM_SUPPORT; - MACOSX_DEPLOYMENT_TARGET = ""; + MACOSX_DEPLOYMENT_TARGET = 10.15; PRODUCT_NAME = "$(TARGET_NAME)"; USER_HEADER_SEARCH_PATHS = ""; }; diff --git a/src/calcdotsfunctor.cpp b/src/calcdotsfunctor.cpp index b979a50aa66..2be321aa7a9 100644 --- a/src/calcdotsfunctor.cpp +++ b/src/calcdotsfunctor.cpp @@ -60,10 +60,6 @@ FunctorCode CalcDotsFunctor::VisitChord(Chord *chord) FunctorCode CalcDotsFunctor::VisitNote(Note *note) { - // We currently have no dots object with mensural notes - if (note->IsMensuralDur()) { - return FUNCTOR_SIBLINGS; - } if (!note->IsVisible()) { return FUNCTOR_SIBLINGS; } diff --git a/src/iomusxml.cpp b/src/iomusxml.cpp index a7bb45ee05c..001017a6f9d 100644 --- a/src/iomusxml.cpp +++ b/src/iomusxml.cpp @@ -1835,6 +1835,9 @@ void MusicXmlInput::ReadMusicXmlAttributes( section->AddChild(scoreDef); } + else if (time && node.select_node("ancestor::part[(preceding-sibling::part)]")) { + m_meterUnit = time.child("beat-type").text().as_int(); + } pugi::xpath_node measureRepeat = node.select_node("measure-style/measure-repeat"); pugi::xpath_node measureSlash = node.select_node("measure-style/slash"); diff --git a/src/measure.cpp b/src/measure.cpp index d5e48b679f7..0c02901da1b 100644 --- a/src/measure.cpp +++ b/src/measure.cpp @@ -95,7 +95,7 @@ Measure::Measure(MeasureType measureMusic, int logMeasureNb) this->Reset(); - if (!measureMusic) this->SetRight(BARRENDITION_invis); + if (!this->IsMeasuredMusic()) this->SetRight(BARRENDITION_invis); } Measure::~Measure() @@ -149,10 +149,8 @@ void Measure::Reset() m_rightBarLine.SetForm(this->GetRight()); m_leftBarLine.SetForm(this->GetLeft()); - if (!m_measureType) { - m_drawingFacsX1 = VRV_UNSET; - m_drawingFacsX2 = VRV_UNSET; - } + m_drawingFacsX1 = VRV_UNSET; + m_drawingFacsX2 = VRV_UNSET; m_drawingEnding = NULL; m_hasAlignmentRefWithMultipleLayers = false; diff --git a/src/page.cpp b/src/page.cpp index 614b64180bc..6e4d3f30109 100644 --- a/src/page.cpp +++ b/src/page.cpp @@ -336,10 +336,8 @@ void Page::ResetAligners() CalcAlignmentPitchPosFunctor calcAlignmentPitchPos(doc); this->Process(calcAlignmentPitchPos); - if (IsMensuralType(doc->m_notationType)) { - CalcLigatureNotePosFunctor calcLigatureNotePos(doc); - this->Process(calcLigatureNotePos); - } + CalcLigatureNotePosFunctor calcLigatureNotePos(doc); + this->Process(calcLigatureNotePos); CalcStemFunctor calcStem(doc); this->Process(calcStem); diff --git a/src/preparedatafunctor.cpp b/src/preparedatafunctor.cpp index 2d9226da362..fd69f35d01c 100644 --- a/src/preparedatafunctor.cpp +++ b/src/preparedatafunctor.cpp @@ -1161,17 +1161,6 @@ FunctorCode PrepareLayerElementPartsFunctor::VisitNote(Note *note) } } - // We don't care about flags or dots in mensural notes - if (note->IsMensuralDur()) return FUNCTOR_CONTINUE; - - if (currentStem) { - const bool shouldHaveFlag = ((note->GetActualDur() > DUR_4) && !note->IsInBeam() && !note->GetAncestorFTrem() - && !note->IsChordTone() && !note->IsTabGrpNote()); - currentFlag = this->ProcessFlag(currentFlag, currentStem, shouldHaveFlag); - - if (!chord) note->SetDrawingStem(currentStem); - } - /************ dots ***********/ Dots *currentDots = vrv_cast(note->FindDescendantByType(DOTS, 1)); @@ -1182,6 +1171,17 @@ FunctorCode PrepareLayerElementPartsFunctor::VisitNote(Note *note) } currentDots = this->ProcessDots(currentDots, note, shouldHaveDots); + // We don't care about flags in mensural notes + if (note->IsMensuralDur()) return FUNCTOR_CONTINUE; + + if (currentStem) { + const bool shouldHaveFlag = ((note->GetActualDur() > DUR_4) && !note->IsInBeam() && !note->GetAncestorFTrem() + && !note->IsChordTone() && !note->IsTabGrpNote()); + currentFlag = this->ProcessFlag(currentFlag, currentStem, shouldHaveFlag); + + if (!chord) note->SetDrawingStem(currentStem); + } + /************ Prepare the drawing cue size ************/ PrepareCueSizeFunctor prepareCueSize; diff --git a/src/view_element.cpp b/src/view_element.cpp index a2bba2eefea..f734bc04b07 100644 --- a/src/view_element.cpp +++ b/src/view_element.cpp @@ -1420,6 +1420,9 @@ void View::DrawNote(DeviceContext *dc, LayerElement *element, Layer *layer, Staf if (note->IsMensuralDur()) { this->DrawMensuralNote(dc, element, layer, staff, measure); + if (note->FindDescendantByType(DOTS)) { + this->DrawLayerChildren(dc, note, layer, staff, measure); + } return; } if (note->IsTabGrpNote()) { @@ -1733,7 +1736,7 @@ void View::DrawSyl(DeviceContext *dc, LayerElement *element, Layer *layer, Staff return; } - if (m_doc->IsFacs()) { + if (!m_doc->IsFacs()) { syl->SetDrawingYRel(this->GetSylYRel(syl->m_drawingVerse, staff)); }