From 7e9824d98a8ad1eb72e13a10c4a8fdea71429cc6 Mon Sep 17 00:00:00 2001 From: Marc Sabatella Date: Fri, 6 Mar 2015 21:07:57 -0700 Subject: [PATCH] fix #41761: beam angle too sharp --- libmscore/beam.cpp | 42 +++++++++++++++++++++++++++++++++-------- vtest/beams-16-ref.png | Bin 0 -> 8888 bytes vtest/beams-16.mscz | Bin 0 -> 8712 bytes vtest/gen | 2 +- vtest/gen.bat | 2 +- 5 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 vtest/beams-16-ref.png create mode 100644 vtest/beams-16.mscz diff --git a/libmscore/beam.cpp b/libmscore/beam.cpp index 0b107e642ffbd..cf6f6538a78e9 100644 --- a/libmscore/beam.cpp +++ b/libmscore/beam.cpp @@ -716,11 +716,11 @@ static void initBeamMetrics() B(0, -5,-4, 16, 2); B(0, -5,-3, 16, 2); - B(0, -5,-2, 16, 2); - B(0, -5,-1, 16, 2); - B(0, -5, 0, 16, 4); - B(0, -5, 1, 16, 5); - B(0, -5, 2, 16, 5); + B(0, -5,-2, 17, 2); + B(0, -5,-1, 17, 2); + B(0, -5, 0, 18, 4); + B(0, -5, 1, 18, 5); + B(0, -5, 2, 21, 5); B(0, 2, 3, 12, 1); B(0, 2, 4, 12, 4); @@ -753,8 +753,8 @@ static void initBeamMetrics() B(1, 15, 11, -21, -1); B(1, 15, 10, -21, -1); - B(1, 15, 9, -21, -1); - B(1, 15, 8, -21, -1); + B(1, 15, 9, -21, -4); + B(1, 15, 8, -21, -5); B(1, 1, 8, -11, 6); B(1, 1, 7, -11, 6); @@ -766,7 +766,7 @@ static void initBeamMetrics() B(1, 8, 12, -12, 5); B(1, 8, 13, -12, 4); B(1, 8, 14, -12, 5); - B(1, 8, 15, -12, 1); + B(1, 8, 15, -12, 5); B(0, 1, 0, 11, -1); B(0, 1, -1, 11, -2); @@ -1164,6 +1164,28 @@ void Beam::computeStemLen(const QList& cl, qreal& py1, int beamLevel if (hasNoSlope()) bm.s = 0.0; + // special case for two beamed notes: flatten to max of 1sp + static int maxShortSlant = 4; + if (bm.l && elements().size() == 2) { + //qDebug("computeStemLen: l = %d, s = %d", (int)bm.l, (int)bm.s); + if (bm.s > maxShortSlant) { + // slant downward + // lengthen first stem if down + if (bm.l > 0) + bm.l += bm.s - maxShortSlant; + // flatten beam + bm.s = maxShortSlant; + } + else if (bm.s < -maxShortSlant) { + // slant upward + // lengthen first stem if up + if (bm.l < 0) + bm.l -= -maxShortSlant - bm.s; + // flatten beam + bm.s = -maxShortSlant; + } + } + if (bm.l) { if (bm.l > 0) bm.l -= graceStemLengthCorrection; @@ -1264,6 +1286,10 @@ void Beam::computeStemLen(const QList& cl, qreal& py1, int beamLevel uint interval = qAbs((l2 - l1) / 2); minS = minSlant(interval); maxS = maxSlant(interval); + if (elements().size() == 2) { + minS = qMin(minS, 2); + maxS = qMin(maxS, 4); + } } int ll1; if (_up) { diff --git a/vtest/beams-16-ref.png b/vtest/beams-16-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..7015a238d8d35db87ded1ea655c4e5f05d35d39d GIT binary patch literal 8888 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 PBc^Dm>ZnvGSx5d4FQf!M literal 0 HcmV?d00001 diff --git a/vtest/beams-16.mscz b/vtest/beams-16.mscz new file mode 100644 index 0000000000000000000000000000000000000000..3d2bbcda04e80ce14a4100f129355a032abae514 GIT binary patch literal 8712 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