From a1b33731a8afaf1df3856d61070414e2b95f8946 Mon Sep 17 00:00:00 2001 From: James Date: Fri, 10 Nov 2023 15:24:06 +0000 Subject: [PATCH] Review fixes --- src/engraving/dom/arpeggio.cpp | 2 +- src/engraving/dom/chord.cpp | 9 +++++++-- src/engraving/rendering/dev/arpeggiolayout.cpp | 3 ++- src/engraving/rendering/dev/arpeggiolayout.h | 3 ++- src/engraving/rendering/dev/chordlayout.cpp | 10 +++++++++- src/engraving/rendering/dev/scorerenderer.cpp | 9 --------- src/engraving/rendering/dev/scorerenderer.h | 4 ---- src/engraving/rendering/iscorerenderer.h | 3 --- src/engraving/rendering/stable/scorerenderer.cpp | 9 --------- src/engraving/rendering/stable/scorerenderer.h | 2 -- 10 files changed, 21 insertions(+), 33 deletions(-) diff --git a/src/engraving/dom/arpeggio.cpp b/src/engraving/dom/arpeggio.cpp index 080cfd7f6a7c0..5ed521dafecac 100644 --- a/src/engraving/dom/arpeggio.cpp +++ b/src/engraving/dom/arpeggio.cpp @@ -358,7 +358,7 @@ bool Arpeggio::edit(EditData& ed) } } - renderer()->layoutOnEdit(this); + triggerLayout(); return true; } diff --git a/src/engraving/dom/chord.cpp b/src/engraving/dom/chord.cpp index 656971e460ebb..e7bfeb7c638f0 100644 --- a/src/engraving/dom/chord.cpp +++ b/src/engraving/dom/chord.cpp @@ -1819,10 +1819,15 @@ void Chord::undoChangeSpanArpeggio(Arpeggio* a) { const std::list links = linkList(); for (EngravingObject* linkedObject : links) { + if (linkedObject == this) { + score()->undo(new ChangeSpanArpeggio(this, a)); + continue; + } Chord* chord = toChord(linkedObject); Score* score = chord->score(); - if (score) { - score->undo(new ChangeSpanArpeggio(chord, a)); + EngravingItem* linkedArp = a->findLinkedInScore(score); + if (score && linkedArp) { + score->undo(new ChangeSpanArpeggio(chord, toArpeggio(linkedArp))); } } } diff --git a/src/engraving/rendering/dev/arpeggiolayout.cpp b/src/engraving/rendering/dev/arpeggiolayout.cpp index 032fc7be7ea5f..01188d27f19c1 100644 --- a/src/engraving/rendering/dev/arpeggiolayout.cpp +++ b/src/engraving/rendering/dev/arpeggiolayout.cpp @@ -253,7 +253,8 @@ double ArpeggioLayout::insetDistance(Arpeggio* item, LayoutContext& ctx, double // insetDistance //--------------------------------------------------------- -double ArpeggioLayout::insetDistance(Arpeggio* item, LayoutContext& ctx, double mag_, Chord* chord, std::vector accidentals) +double ArpeggioLayout::insetDistance(Arpeggio* item, LayoutContext& ctx, double mag_, Chord* chord, + const std::vector& accidentals) { if (!item || !chord) { return 0.0; diff --git a/src/engraving/rendering/dev/arpeggiolayout.h b/src/engraving/rendering/dev/arpeggiolayout.h index ad45571b87d20..2181506d88661 100644 --- a/src/engraving/rendering/dev/arpeggiolayout.h +++ b/src/engraving/rendering/dev/arpeggiolayout.h @@ -33,7 +33,8 @@ class ArpeggioLayout static void layoutArpeggio2(Arpeggio* item, LayoutContext& ctx); static double insetDistance(Arpeggio* item, LayoutContext& ctx, double mag_, Chord* _chord); - static double insetDistance(Arpeggio* item, LayoutContext& ctx, double mag_, Chord* _chord, const std::vector accidentals); + static double insetDistance(Arpeggio* item, LayoutContext& ctx, double mag_, Chord* _chord, + const std::vector& accidentals); static double insetTop(Arpeggio* item, Chord* c); static double insetBottom(Arpeggio* item, Chord* c); static double insetWidth(Arpeggio* item); diff --git a/src/engraving/rendering/dev/chordlayout.cpp b/src/engraving/rendering/dev/chordlayout.cpp index 52222c7659ccb..6cb0b8ce5cab8 100644 --- a/src/engraving/rendering/dev/chordlayout.cpp +++ b/src/engraving/rendering/dev/chordlayout.cpp @@ -112,6 +112,7 @@ void ChordLayout::layoutPitched(Chord* item, LayoutContext& ctx) double lhead = 0.0; // amount of notehead to left of chord origin Note* upnote = item->upNote(); Note* downnote = item->downNote(); + Note* leftNote = nullptr; delete item->tabDur(); // no TAB? no duration symbol! (may happen when converting a TAB into PITCHED) item->setTabDur(nullptr); @@ -135,6 +136,9 @@ void ChordLayout::layoutPitched(Chord* item, LayoutContext& ctx) rrr = std::max(rrr, x2); // track amount of space due to notehead only lhead = std::max(lhead, -x1); + if (!leftNote || note->x() < leftNote->x()) { + leftNote = note; + } Accidental* accidental = note->accidental(); if (accidental && accidental->visible()) { @@ -198,7 +202,11 @@ void ChordLayout::layoutPitched(Chord* item, LayoutContext& ctx) double gapSize = arpeggioNoteDistance; - if (downnote->line() > firstLedgerBelow || upnote->line() < firstLedgerAbove) { + if (leftNote && RealIsNull(leftNote->x())) { + if (downnote->line() > firstLedgerBelow || upnote->line() < firstLedgerAbove) { + gapSize = arpeggioLedgerDistance + ctx.conf().styleS(Sid::ledgerLineLength).val() * item->spatium(); + } + } else if (leftNote && (leftNote->line() > firstLedgerBelow || leftNote->line() < firstLedgerAbove)) { gapSize = arpeggioLedgerDistance + ctx.conf().styleS(Sid::ledgerLineLength).val() * item->spatium(); } diff --git a/src/engraving/rendering/dev/scorerenderer.cpp b/src/engraving/rendering/dev/scorerenderer.cpp index d34f87ba30168..f577aeab35f18 100644 --- a/src/engraving/rendering/dev/scorerenderer.cpp +++ b/src/engraving/rendering/dev/scorerenderer.cpp @@ -90,15 +90,6 @@ void ScoreRenderer::layoutText1(TextBase* item, bool base) } } -// =============================================================== -// Layout Elements on Edit -// =============================================================== -void ScoreRenderer::layoutOnEdit(Arpeggio* item) -{ - LayoutContext ctx(item->score()); -// ArpeggioLayout::layoutOnEdit(item, ctx); -} - void ScoreRenderer::layoutTextLineBaseSegment(TextLineBaseSegment* item) { LayoutContext ctx(item->score()); diff --git a/src/engraving/rendering/dev/scorerenderer.h b/src/engraving/rendering/dev/scorerenderer.h index 6a115e9e1132e..60bf7544fba03 100644 --- a/src/engraving/rendering/dev/scorerenderer.h +++ b/src/engraving/rendering/dev/scorerenderer.h @@ -41,10 +41,6 @@ class ScoreRenderer : public IScoreRenderer void paintScore(draw::Painter* painter, Score* score, const IScoreRenderer::PaintOptions& opt) const override; void paintItem(draw::Painter& painter, const EngravingItem* item) const override; - // Temporary compatibility interface - - void layoutOnEdit(Arpeggio* item) override; - //! TODO Investigation is required, probably these functions or their calls should not be. // Other void layoutTextLineBaseSegment(TextLineBaseSegment* item) override; diff --git a/src/engraving/rendering/iscorerenderer.h b/src/engraving/rendering/iscorerenderer.h index 55a249a8ece89..da90e9c95a2ba 100644 --- a/src/engraving/rendering/iscorerenderer.h +++ b/src/engraving/rendering/iscorerenderer.h @@ -169,9 +169,6 @@ class IScoreRenderer : MODULE_EXPORT_INTERFACE doLayoutItem(static_cast(item)); } - // Layout Elements on Edit - virtual void layoutOnEdit(Arpeggio* item) = 0; - //! TODO Investigation is required, probably these functions or their calls should not be. // Other virtual void layoutTextLineBaseSegment(TextLineBaseSegment* item) = 0; diff --git a/src/engraving/rendering/stable/scorerenderer.cpp b/src/engraving/rendering/stable/scorerenderer.cpp index b3855370cb92d..8d3b9416f8c70 100644 --- a/src/engraving/rendering/stable/scorerenderer.cpp +++ b/src/engraving/rendering/stable/scorerenderer.cpp @@ -89,15 +89,6 @@ void ScoreRenderer::layoutText1(TextBase* item, bool base) } } -// =============================================================== -// Layout Elements on Edit -// =============================================================== -void ScoreRenderer::layoutOnEdit(Arpeggio* item) -{ - LayoutContext ctx(item->score()); - ArpeggioLayout::layoutOnEdit(item, ctx); -} - void ScoreRenderer::layoutTextLineBaseSegment(TextLineBaseSegment* item) { LayoutContext ctx(item->score()); diff --git a/src/engraving/rendering/stable/scorerenderer.h b/src/engraving/rendering/stable/scorerenderer.h index 408c49405e21a..a11379fb791a0 100644 --- a/src/engraving/rendering/stable/scorerenderer.h +++ b/src/engraving/rendering/stable/scorerenderer.h @@ -43,8 +43,6 @@ class ScoreRenderer : public IScoreRenderer // Temporary compatibility interface - void layoutOnEdit(Arpeggio* item) override; - //! TODO Investigation is required, probably these functions or their calls should not be. // Other void layoutTextLineBaseSegment(TextLineBaseSegment* item) override;