From 5985ab5a56de1615920d0502257788633e5db40b Mon Sep 17 00:00:00 2001 From: Werner Schweer Date: Mon, 11 Jun 2012 12:15:21 +0200 Subject: [PATCH] fix layout regression --- libmscore/layout.cpp | 27 +++++++++++++++++++++++---- libmscore/measure.cpp | 4 +++- libmscore/scorefile.cpp | 12 +++++++++++- libmscore/segmentlist.cpp | 2 +- libmscore/xml.cpp | 2 +- 5 files changed, 39 insertions(+), 8 deletions(-) diff --git a/libmscore/layout.cpp b/libmscore/layout.cpp index f37a2c3160..97d57f0154 100644 --- a/libmscore/layout.cpp +++ b/libmscore/layout.cpp @@ -927,7 +927,6 @@ bool Score::layoutSystem(qreal& minWidth, qreal w, bool isFirstSystem, bool long System* oldSystem = curMeasure->system(); curMeasure->setSystem(system); qreal ww = 0.0; - qreal stretch = 0.0; if (curMeasure->type() == HBOX) { ww = point(static_cast(curMeasure)->boxWidth()); @@ -958,9 +957,29 @@ bool Score::layoutSystem(qreal& minWidth, qreal w, bool isFirstSystem, bool long m->createEndBarLines(); // TODO: not set here m->layoutX(1.0, true); - ww = m->layoutWidth(); - stretch = m->userStretch() * styleD(ST_measureSpacing); - + ww = m->layoutWidth(); + if (!isFirstMeasure) { + // remove width of generated system header + Segment* seg = m->first(); + if ((seg->subtype() == SegClef) && seg->element(0)->generated()) { + ww -= seg->width(); + seg = seg->next(); + if (seg && (seg->subtype() == SegKeySig) && seg->element(0)->generated()) + ww -= seg->width(); + } + } + // add width for EndBarLine + Segment* seg = m->last(); + if (seg->subtype() == SegEndBarLine) { + BarLine* bl = static_cast(seg->element(0)); + if (m->repeatFlags() & RepeatEnd) { + if (bl && (bl->subtype() != END_REPEAT)) { + // printf("BarLine type does not fit\n"); + ww += spatium(); // HACK + } + } + } + qreal stretch = m->userStretch() * styleD(ST_measureSpacing); ww *= stretch; if (ww < point(styleS(ST_minMeasureWidth))) ww = point(styleS(ST_minMeasureWidth)); diff --git a/libmscore/measure.cpp b/libmscore/measure.cpp index 3508abbb19..b4cc02882b 100644 --- a/libmscore/measure.cpp +++ b/libmscore/measure.cpp @@ -3008,11 +3008,13 @@ void Measure::layoutX(qreal stretch, bool firstPass) if (firstPass) { // qDebug("this is pass 1"); _mw = xpos[segs]; - if (types[0] == SegClef && first()->element(0)->generated()) { +#if 0 + if (!firstMeasure && (types[0] == SegClef) && first()->element(0)->generated()) { _mw -= width[0]; if ((segs > 2) && (types[1] == SegKeySig) && first()->next()->element(0)->generated()) _mw -= width[1]; } +#endif _dirty = false; return; } diff --git a/libmscore/scorefile.cpp b/libmscore/scorefile.cpp index 1d1ac4c93c..90ee71c8d5 100644 --- a/libmscore/scorefile.cpp +++ b/libmscore/scorefile.cpp @@ -631,11 +631,21 @@ bool Score::loadCompressedMsc(QString name) imageStore.add(s, dbuf); } if (rootfile.isEmpty()) { - qDebug("can't find rootfile in: %s\n", qPrintable(name)); + qDebug("can't find rootfile in: %s", qPrintable(name)); return false; } QByteArray dbuf = uz.fileData(rootfile); + if (dbuf.isEmpty()) { + qDebug("root file <%s> is empty", qPrintable(rootfile)); + QList fil = uz.fileInfoList(); + foreach(const QZipReader::FileInfo& fi, fil) { + if (fi.isFile && fi.filePath.endsWith(".mscx")) { + dbuf = uz.fileData(fi.filePath); + break; + } + } + } QDomDocument doc; if (!doc.setContent(dbuf, false, &err, &line, &column)) { diff --git a/libmscore/segmentlist.cpp b/libmscore/segmentlist.cpp index b7f375f444..00a6a490ff 100644 --- a/libmscore/segmentlist.cpp +++ b/libmscore/segmentlist.cpp @@ -82,7 +82,7 @@ void SegmentList::check() void SegmentList::insert(Segment* e, Segment* el) { if (e->score()->undoRedo()) - qFatal("SegmentList:insert in undo/redo"); + qDebug("SegmentList:insert in undo/redo"); if (el == 0) push_back(e); else if (el == first()) diff --git a/libmscore/xml.cpp b/libmscore/xml.cpp index 4866c77885..365ab8d2e1 100644 --- a/libmscore/xml.cpp +++ b/libmscore/xml.cpp @@ -48,7 +48,7 @@ Xml::Xml() Xml::Xml(QIODevice* device) : QTextStream(device) { - setCodec("utf8"); + setCodec("UTF-8"); stack.clear(); curTick = 0; curTrack = -1;