From 6b09c2f3c3aea3474cf8a2cb5658fcdab577bc53 Mon Sep 17 00:00:00 2001 From: anatoly-os Date: Tue, 11 Aug 2020 20:22:27 +0300 Subject: [PATCH] Manually merged #6330 to master --- libmscore/edit.cpp | 1 + libmscore/layout.cpp | 12 ++++++++++++ libmscore/measure.cpp | 18 +++--------------- libmscore/read114.cpp | 3 ++- libmscore/read206.cpp | 3 ++- mscore/dragdrop.cpp | 8 ++------ 6 files changed, 22 insertions(+), 23 deletions(-) diff --git a/libmscore/edit.cpp b/libmscore/edit.cpp index 543b6e8b9ac15..68aedeb0d9cd3 100644 --- a/libmscore/edit.cpp +++ b/libmscore/edit.cpp @@ -4695,6 +4695,7 @@ void Score::undoAddElement(Element* element) && et != ElementType::TREMOLO && et != ElementType::ARPEGGIO && et != ElementType::SYMBOL + && et != ElementType::IMAGE && et != ElementType::TREMOLOBAR && et != ElementType::FRET_DIAGRAM && et != ElementType::FERMATA diff --git a/libmscore/layout.cpp b/libmscore/layout.cpp index ae03543ddf8c3..c6b5b65a10778 100644 --- a/libmscore/layout.cpp +++ b/libmscore/layout.cpp @@ -4583,6 +4583,18 @@ void Score::layoutSystemElements(System* system, LayoutContext& lc) } } } + + //------------------------------------------------------------- + // Image + //------------------------------------------------------------- + + for (const Segment* s : sl) { + for (Element* e : s->annotations()) { + if (e->isImage()) { + e->layout(); + } + } + } } //--------------------------------------------------------- diff --git a/libmscore/measure.cpp b/libmscore/measure.cpp index aa3ad44efab27..e1888e8868591 100644 --- a/libmscore/measure.cpp +++ b/libmscore/measure.cpp @@ -1980,15 +1980,6 @@ void Measure::read(XmlReader& e, int staffIdx) e.setTrack(nextTrack++); e.setTick(tick()); readVoice(e, staffIdx, irregular); - } else if (tag == "Image") { - if (MScore::noImages) { - e.skipCurrentElement(); - } else { - Element* el = Element::name2Element(tag, score()); - el->setTrack(staffIdx * VOICES); - el->read(e); - add(el); - } } else if (tag == "Marker" || tag == "Jump") { Element* el = Element::name2Element(tag, score()); el->setTrack(e.track()); @@ -2325,18 +2316,15 @@ void Measure::readVoice(XmlReader& e, int staffIdx, bool irregular) fermata->setTrack(e.track()); fermata->setPlacement(fermata->track() & 1 ? Placement::BELOW : Placement::ABOVE); fermata->read(e); - } - // There could be an Image here if the score was saved with an earlier version of MuseScore 3. - // This image would not have been visible upon reload. Let's read it in and add it directly - // to the measure so that it can be displayed. - else if (tag == "Image") { + } else if (tag == "Image") { if (MScore::noImages) { e.skipCurrentElement(); } else { Element* el = Element::name2Element(tag, score()); el->setTrack(e.track()); el->read(e); - add(el); + segment = getSegment(SegmentType::ChordRest, e.tick()); + segment->add(el); } } //---------------------------------------------------- diff --git a/libmscore/read114.cpp b/libmscore/read114.cpp index d7b5b62cf08a6..e242983c81481 100644 --- a/libmscore/read114.cpp +++ b/libmscore/read114.cpp @@ -2133,7 +2133,8 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e) Element* el = Element::name2Element(tag, m->score()); el->setTrack(e.track()); el->read(e); - m->add(el); + segment = m->getSegment(SegmentType::ChordRest, e.tick()); + segment->add(el); } } else if (tag == "stretch") { double val = e.readDouble(); diff --git a/libmscore/read206.cpp b/libmscore/read206.cpp index 2584f24397d95..177cd638bf1c9 100644 --- a/libmscore/read206.cpp +++ b/libmscore/read206.cpp @@ -3336,7 +3336,8 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e) Element* el = Element::name2Element(tag, score); el->setTrack(e.track()); el->read(e); - m->add(el); + segment = m->getSegment(SegmentType::ChordRest, e.tick()); + segment->add(el); } } //---------------------------------------------------- diff --git a/mscore/dragdrop.cpp b/mscore/dragdrop.cpp index 57769f2c693d4..d5cb8b3afca05 100644 --- a/mscore/dragdrop.cpp +++ b/mscore/dragdrop.cpp @@ -481,12 +481,8 @@ void ScoreView::dropEvent(QDropEvent* event) el = _score->pos2measure(pos, &staffIdx, 0, &seg, &offset); if (el && el->isMeasure()) { editData.dropElement->setTrack(staffIdx * VOICES); - if (editData.dropElement->isImage()) { - editData.dropElement->setParent(el); - offset = pos - el->canvasPos(); - } else { - editData.dropElement->setParent(seg); - } + editData.dropElement->setParent(seg); + if (applyUserOffset) { editData.dropElement->setOffset(offset); }