fix #297614: fix moving viewport to irrelevant position when editing spanner segment

This commit is contained in:
Dmitri Ovodok 2019-12-02 12:23:47 +02:00
parent ed4949c72d
commit cf80fd34df
2 changed files with 19 additions and 2 deletions

View file

@ -472,6 +472,10 @@ static inline SpannerSegment* toSpannerSegment(ScoreElement* e) {
Q_ASSERT(e == 0 || e->isSpannerSegment());
return (SpannerSegment*)e;
}
static inline const SpannerSegment* toSpannerSegment(const ScoreElement* e) {
Q_ASSERT(e == 0 || e->isSpannerSegment());
return (const SpannerSegment*)e;
}
static inline BSymbol* toBSymbol(ScoreElement* e) {
Q_ASSERT(e == 0 || e->isBSymbol());
return (BSymbol*)e;

View file

@ -4906,8 +4906,21 @@ void ScoreView::moveViewportToLastEdit()
const Element* editElement = visibleElementInScore(st.element(), sc);
const MeasureBase* mb = nullptr;
if (editElement)
mb = editElement->findMeasureBase();
if (editElement) {
if (editElement->isSpannerSegment()) {
const SpannerSegment* s = toSpannerSegment(editElement);
Fraction tick = s->tick();
if (System* sys = s->system()) {
Measure* fm = sys->firstMeasure();
if (fm)
tick = std::max(tick, fm->tick());
}
mb = sc->tick2measureMM(tick);
}
else {
mb = editElement->findMeasureBase();
}
}
if (!mb)
mb = sc->tick2measureMM(st.startTick());