From 8f54ce5f1b1d9ebebe1278c2efc6f363a271cb2f Mon Sep 17 00:00:00 2001 From: Marc Sabatella Date: Sun, 30 Mar 2014 22:24:51 -0600 Subject: [PATCH] fixes & tests --- libmscore/slur.cpp | 65 ++++++++++++++++++++------------------------ libmscore/slur.h | 1 - vtest/gen | 3 +- vtest/gen.bat | 3 +- vtest/tie-1-ref.png | Bin 0 -> 12085 bytes vtest/tie-1.mscz | Bin 0 -> 1729 bytes 6 files changed, 34 insertions(+), 38 deletions(-) create mode 100644 vtest/tie-1-ref.png create mode 100644 vtest/tie-1.mscz diff --git a/libmscore/slur.cpp b/libmscore/slur.cpp index c231134858c5c..32c14f6454967 100644 --- a/libmscore/slur.cpp +++ b/libmscore/slur.cpp @@ -374,6 +374,15 @@ void SlurSegment::editDrag(const EditData& ed) ups[GRIP_DRAG].off = QPointF(); setUserOff(userOff() + ed.delta); } + + // if this SlurSegment was automatically adjusted to avoid collision + // lock this edit by resetting SlurSegment to default position + // and incorporating previous adjustment into user offset + QPointF offset = getAutoAdjust(); + if (!offset.isNull()) { + setAutoAdjust(0.0, 0.0); + setUserOff(userOff() + offset); + } } //--------------------------------------------------------- @@ -554,29 +563,31 @@ void SlurSegment::layout(const QPointF& p1, const QPointF& p2) ups[GRIP_END].p = p2; slurTie()->computeBezier(this); QRectF bbox = path.boundingRect(); + + // adjust position to avoid staff line if necessary qreal sp = spatium(); - qreal ld = staff()->lineDistance() * sp; qreal minDistance = 0.5; - setAutoAdjust(0.0, 0.0); - if (bbox.height() < minDistance * 2 * sp) { - // path is fairly flat - // adjust position to avoid staff line if necessary + Staff* st = staff(); + autoAdjustOffset = QPointF(); + if (bbox.height() < minDistance * 2 * sp && st) { + // slur/tie is fairly flat bool up = slurTie()->up(); - qreal topY = bbox.top() / ld; - qreal bottomY = bbox.bottom() / ld; - int closestLine = up ? qRound(topY) : qRound(bottomY); - if (closestLine >= 0 && closestLine < staff()->lines()) { + qreal staffY = system()->staff(staffIdx())->y(); + qreal ld = st->lineDistance() * sp; + qreal topY = (bbox.top() - staffY) / ld; + qreal bottomY = (bbox.bottom() - staffY) / ld; + int lineY = up ? qRound(topY) : qRound(bottomY); + if (lineY >= 0 && lineY < st->lines() * st->lineDistance()) { // on staff - if (qAbs(topY - closestLine) < minDistance && qAbs(bottomY - closestLine) < minDistance) { + if (qAbs(topY - lineY) < minDistance && qAbs(bottomY - lineY) < minDistance) { // too close to line - if (userOff() == QPointF()) { + if (!isNudged()) { // user has not edited qreal offY; if (up) - offY = (closestLine - minDistance) - topY; + offY = (lineY - minDistance) - topY; else - offY = (closestLine + minDistance) - bottomY; - //qreal offY = (up ? -0.5 : 0.5) * sp; + offY = (lineY + minDistance) - bottomY; setAutoAdjust(0.0, offY * sp); bbox = path.boundingRect(); } @@ -594,8 +605,11 @@ void SlurSegment::layout(const QPointF& p1, const QPointF& p2) void SlurSegment::setAutoAdjust(const QPointF& offset) { QPointF diff = offset - autoAdjustOffset; - if (diff != QPointF()) { - move(diff); + if (!diff.isNull()) { + path.translate(diff); + shapePath.translate(diff); + for (int i = 0; i < SLUR_GRIPS; ++i) + ups[i].p += diff; autoAdjustOffset = offset; } } @@ -1067,25 +1081,6 @@ QVariant SlurSegment::propertyDefault(P_ID id) const } } -//--------------------------------------------------------- -// startEdit -//--------------------------------------------------------- - -void SlurSegment::startEdit(MuseScoreView* s, const QPointF& p) - { - QPointF zeroP; - QPointF offset = getAutoAdjust(); - if (offset != zeroP) { - // this segment was automatically adjusted to avoid collision - // lock in position by resetting to default position - // and incorporating previous adjustment into user offset - setUserOff(userOff() + offset); - setAutoAdjust(zeroP); - parent()->layout(); - } - SpannerSegment::startEdit(s, p); - } - //--------------------------------------------------------- // reset //--------------------------------------------------------- diff --git a/libmscore/slur.h b/libmscore/slur.h index eba78b86993f1..387d42060461e 100644 --- a/libmscore/slur.h +++ b/libmscore/slur.h @@ -88,7 +88,6 @@ class SlurSegment : public SpannerSegment { virtual QPainterPath shape() const { return shapePath; } virtual void draw(QPainter*) const; - virtual void startEdit(MuseScoreView*, const QPointF&) override; virtual bool isEditable() const { return true; } virtual void editDrag(const EditData&); virtual bool edit(MuseScoreView*, int grip, int key, Qt::KeyboardModifiers, const QString& s); diff --git a/vtest/gen b/vtest/gen index ce0a5d33c0918..4322a694d646a 100755 --- a/vtest/gen +++ b/vtest/gen @@ -15,7 +15,8 @@ else emmentaler-8 bravura-8 emmentaler-9 bravura-9 emmentaler-10 bravura-10\ emmentaler-11 bravura-11 frametext ottava slurs-1\ chord-layout-1 chord-layout-2 chord-layout-3 chord-layout-4 chord-layout-5\ - accidental-1 accidental-2 accidental-3 accidental-4 accidental-5 accidental-6" + accidental-1 accidental-2 accidental-3 accidental-4 accidental-5 accidental-6\ + tie-1" fi MSCORE=../build.debug/mscore/mscore diff --git a/vtest/gen.bat b/vtest/gen.bat index 9ffd3dd9b92f2..ba1b97498f482 100644 --- a/vtest/gen.bat +++ b/vtest/gen.bat @@ -10,7 +10,8 @@ set SRC=mmrest-1,bravura-mmrest,mmrest-2,mmrest-4,mmrest-5,mmrest-6,mmrest-7,mmr emmentaler-6,bravura-6,emmentaler-7,bravura-7, ^ emmentaler-8,bravura-8,emmentaler-9,bravura-9,emmentaler-10,bravura-10, ^ chord-layout-1,chord-layout-2,chord-layout-3,chord-layout-4,chord-layout-5, ^ - accidental-1,accidental-2,accidental-3,accidental-4,accidental-5,accidental-6 + accidental-1,accidental-2,accidental-3,accidental-4,accidental-5,accidental-6, ^ + tie-1 set MSCORE=..\win32install\bin\mscore.exe set DPI=130 diff --git a/vtest/tie-1-ref.png b/vtest/tie-1-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..38bf58ea1ae04068ff9e47b321e8e558c05e4e09 GIT binary patch literal 12085 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 IyY`X)2P1nL^8f$< literal 0 HcmV?d00001 diff --git a/vtest/tie-1.mscz b/vtest/tie-1.mscz new file mode 100644 index 0000000000000000000000000000000000000000..a8cbb415a5c34d0f9ff46d0893cc45b2cd7121d1 GIT binary patch literal 1729 zcmZ`)X*3&%7LGkAQ+tb0LxySzHGP$6NlCTnogToOH)Hpq#ZNw$2)J%n|sea-~G-#=R4o8@1jw1^4b6Z00@`~ zPILWyNV_<4k1_T}cW*pTpGR0Bz1$#Iq6x&yctU8Lby8GhE30{kkFh{mSqgZ-HCv4kfqf@sn6kjfwzLW)^|Ht2Hb+%!c0stU20{~R^ z{1Ne?R<_nr@mG>ozVnZMYppLE?+#UDa9&l-&w#wRj$YaLaA0fGLP!itBBK61Ka z?tS~@TtzJNN_XmTclg6s^j7eh(MzQVo2TDDaA*pkUG0TzWn1{!^il;exFD*s@`X9^ ziLK8W6LjGS`}Fq_syJ=n&#E6}Ybsk#P73DjIx6Dw@1uRb!rA^}FhukmR52HaS<5hb zOo!C0dt!98PjlTtd4Sukzi&$P-rj`}0uIXBqK#C8Cu|?J&3Q1HR`PI@ zK*~Nbw6N~i@ZYAo&`R-(T=l8KrI;sgar-()++aYQ=Fzd3S~z)%BR;y{JsB`cq|MdgO!hG+yw~ z{c5t(zVH)4)NEKN=%?RtegzGd6D&fipy-Plm5GCZ8gC6yxLQ*a{3A6f z9>mu{RSzznrFs`0moN@-0fE4{p|BF*9d7F6b3k-wVao-c=HlH=4?q9aWYfu0$>TY% z5Y833AAE&@zU-OAQoEj1E6K#hvtSj0$oEnxGjsZ?x@tPZ zAn}OnVRg003Ezi-X!={90B%D@8ab)h1}yXA_xcBJUpwEmK}g`pft?T=cZ>-WDG%yl zYN#{AAl&O5Yz4+R-elG;S$9`P>W>V;O&gBN-_X~;kjimn9W1>(Db;GO3&F!P_+}Y! zjD-*!6|!&`LY&RHg$0Lv5Plp&9wvT)+NTSgF9nDh0^h@0(C zQ&7>_eSfk)M2u)u}51&Z~M2XpFv?+x|g2+s5Fxy3c}{9al#- z_0DrimHFfDg@T2uoqM9`M)z4?GO7L9OtAUVjN)-GPR`iv?qke1Tn26THOXq9W&Tdi zMomcS#mmw!gPRx-EkWJ&U-l&u5v*xly<^NFfF?XWi_u|}Ad@-U9o%gO`?|iRLpdyL zvvOW+;Nl>ro+I-_Yfe$#t6A|dtWt~}$Eq~3A$;1^G2O|;M3j)$8`BU j*Z6y=|3?7;$jH3AxBfTc(I^GQKX0;oeSHrhf3ZIRUwa-j literal 0 HcmV?d00001