fix #297614: fix moving viewport to irrelevant position when editing spanner segment
This commit is contained in:
parent
ed4949c72d
commit
cf80fd34df
2 changed files with 19 additions and 2 deletions
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
Loading…
Reference in a new issue