From 29cd62df329525da59d01a54796171076acc9eb1 Mon Sep 17 00:00:00 2001 From: changhc Date: Wed, 17 Apr 2019 22:17:47 +0800 Subject: [PATCH] fix #284080: incorrectly listed beats --- libmscore/sig.cpp | 2 +- libmscore/sig.h | 2 ++ mscore/scoreaccessibility.cpp | 5 ++++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libmscore/sig.cpp b/libmscore/sig.cpp index f85d5e4d23133..358684cd29733 100644 --- a/libmscore/sig.cpp +++ b/libmscore/sig.cpp @@ -19,7 +19,7 @@ namespace Ms { // ticks_beat //--------------------------------------------------------- -static int ticks_beat(int n) +int ticks_beat(int n) { int m = (MScore::division * 4) / n; if ((MScore::division * 4) % n) { diff --git a/libmscore/sig.h b/libmscore/sig.h index 76ea8d86eca13..4f327d7811023 100644 --- a/libmscore/sig.h +++ b/libmscore/sig.h @@ -20,6 +20,8 @@ namespace Ms { class XmlWriter; class XmlReader; +int ticks_beat(int n); + //------------------------------------------------------------------- // BeatType //------------------------------------------------------------------- diff --git a/mscore/scoreaccessibility.cpp b/mscore/scoreaccessibility.cpp index eab36e3b9e0a8..abd594c1edc2b 100644 --- a/mscore/scoreaccessibility.cpp +++ b/mscore/scoreaccessibility.cpp @@ -7,6 +7,7 @@ #include "libmscore/score.h" #include "libmscore/measure.h" #include "libmscore/spanner.h" +#include "libmscore/sig.h" #include "inspector/inspector.h" #include "selectionwindow.h" #include "playpanel.h" @@ -228,6 +229,7 @@ std::pair ScoreAccessibility::barbeat(Element *e) int ticks = 0; TimeSigMap* tsm = e->score()->sigmap(); Element* p = e; + int ticksB = ticks_beat(tsm->timesig(0).timesig().denominator()); while(p && p->type() != ElementType::SEGMENT && p->type() != ElementType::MEASURE) p = p->parent(); @@ -237,6 +239,7 @@ std::pair ScoreAccessibility::barbeat(Element *e) else if (p->type() == ElementType::SEGMENT) { Segment* seg = static_cast(p); tsm->tickValues(seg->tick().ticks(), &bar, &beat, &ticks); + ticksB = ticks_beat(tsm->timesig(seg->tick().ticks()).timesig().denominator()); } else if (p->type() == ElementType::MEASURE) { Measure* m = static_cast(p); @@ -244,6 +247,6 @@ std::pair ScoreAccessibility::barbeat(Element *e) beat = -1; ticks = 0; } - return pair(bar + 1, beat + 1 + ticks / static_cast(MScore::division)); + return pair(bar + 1, beat + 1 + ticks / static_cast(ticksB)); } }