From 1bcf660eb69594a8af9108465b36ab796172aa7b Mon Sep 17 00:00:00 2001 From: Ash-86 <108089527+Ash-86@users.noreply.github.com> Date: Wed, 1 Jul 2026 12:27:30 -0300 Subject: [PATCH] add effectiveCentOffset --- src/engraving/dom/note.cpp | 26 +++++++++++++++++++++++++- src/engraving/dom/note.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/engraving/dom/note.cpp b/src/engraving/dom/note.cpp index c573ebf7fc963..b6e57f59f533a 100644 --- a/src/engraving/dom/note.cpp +++ b/src/engraving/dom/note.cpp @@ -37,6 +37,7 @@ #include "../editing/transpose.h" #include "types/typesconv.h" #include "iengravingfont.h" +#include "types/symnames.h" #include "rendering/score/horizontalspacing.h" @@ -2613,7 +2614,7 @@ int Note::playingOctave() const double Note::playingTuning() const { - return m_tuning + m_centOffset; + return m_tuning + effectiveCentOffset(); } //--------------------------------------------------------- @@ -4133,4 +4134,27 @@ staff_idx_t Note::vStaffIdx() const const Chord* c = chord(); return c ? c->vStaffIdx() : EngravingItem::vStaffIdx(); } + +double Note::effectiveCentOffset() const +{ + if (m_accidental) { // explicit note-level accidental wins + double offset = Accidental::subtype2centOffset(m_accidental->accidentalType()); + return offset; + } + if (!staff() || !chord()) { + return 0.0; + } + const KeySigEvent& kse = staff()->keySigEvent(chord()->tick()); + if (!kse.custom()) { + return 0.0; + } + int deg = tpc2step(tpc()); + for (const CustDef& cd : kse.customKeyDefs()) { + if (kse.degInKey(cd.degree) == deg) { + return Accidental::subtype2centOffset( + Accidental::name2subtype(SymNames::nameForSymId(cd.sym))); + } + } + return 0.0; +} } diff --git a/src/engraving/dom/note.h b/src/engraving/dom/note.h index f786279d04eae..d6dba31249e96 100644 --- a/src/engraving/dom/note.h +++ b/src/engraving/dom/note.h @@ -202,6 +202,7 @@ class Note final : public EngravingItem double centOffset() const { return m_centOffset; } void setCentOffset(double v) { m_centOffset = v; } int quarterToneOffset() const { return std::round(m_centOffset / 50); } + double effectiveCentOffset() const; int ottaveCapoFret() const; int linkedOttavaPitchOffset() const;