Skip to content

Commit 736d658

Browse files
committed
independent slur/tie style settings
1 parent 084d958 commit 736d658

File tree

11 files changed

+533
-243
lines changed

11 files changed

+533
-243
lines changed

src/engraving/internal/engravingfont.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -438,8 +438,8 @@ void EngravingFont::loadEngravingDefaults(const JsonObject& engravingDefaultsObj
438438
{ "legerLineExtension", { { Sid::ledgerLineLength } } },
439439
{ "slurEndpointThickness", { { Sid::SlurEndWidth } } },
440440
{ "slurMidpointThickness", { { Sid::SlurMidWidth } } },
441-
// "tieEndpointThickness" not supported
442-
// "tieMidpointThickness" not supported
441+
{ "tieEndpointThickness", { { Sid::TieEndWidth } } },
442+
{ "tieMidpointThickness", { { Sid::TieMidWidth } } },
443443
{ "thinBarlineThickness", { { Sid::barWidth, Sid::doubleBarWidth } } },
444444
{ "thickBarlineThickness", { { Sid::endBarWidth } } },
445445
// "dashedBarlineThickness" not supported

src/engraving/rendering/dev/slurtielayout.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2438,11 +2438,15 @@ void SlurTieLayout::layoutSegment(SlurSegment* item, LayoutContext& ctx, const P
24382438

24392439
void SlurTieLayout::computeMidThickness(SlurTieSegment* slurTieSeg, double slurTieLengthInSp)
24402440
{
2441+
const Millimetre endWidth = slurTieSeg->isTie() ? slurTieSeg->style().styleMM(Sid::TieEndWidth)
2442+
: slurTieSeg->style().styleMM(Sid::SlurEndWidth);
2443+
const Millimetre midWidth = slurTieSeg->isTie() ? slurTieSeg->style().styleMM(Sid::TieMidWidth)
2444+
: slurTieSeg->style().styleMM(Sid::SlurMidWidth);
24412445
const double mag = slurTieSeg->staff() ? slurTieSeg->staff()->staffMag(slurTieSeg->slurTie()->tick()) : 1.0;
24422446
const double minTieLength = mag * slurTieSeg->style().styleS(Sid::MinTieLength).val();
24432447
const double shortTieLimit = mag * 4.0;
2444-
const double minTieThickness = mag * (0.15 * slurTieSeg->spatium() - slurTieSeg->style().styleMM(Sid::SlurEndWidth));
2445-
const double normalThickness = mag * (slurTieSeg->style().styleMM(Sid::SlurMidWidth) - slurTieSeg->style().styleMM(Sid::SlurEndWidth));
2448+
const double minTieThickness = mag * (0.15 * slurTieSeg->spatium() - endWidth);
2449+
const double normalThickness = mag * (midWidth - endWidth);
24462450

24472451
bool invalid = RealIsEqualOrMore(minTieLength, shortTieLimit);
24482452

src/engraving/rendering/dev/tdraw.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2940,23 +2940,23 @@ void TDraw::draw(const TieSegment* item, Painter* painter)
29402940
painter->setBrush(Brush(pen.color()));
29412941
pen.setCapStyle(PenCapStyle::RoundCap);
29422942
pen.setJoinStyle(PenJoinStyle::RoundJoin);
2943-
pen.setWidthF(item->style().styleMM(Sid::SlurEndWidth) * mag);
2943+
pen.setWidthF(item->style().styleMM(Sid::TieEndWidth) * mag);
29442944
break;
29452945
case SlurStyleType::Dotted:
29462946
painter->setBrush(BrushStyle::NoBrush);
29472947
pen.setCapStyle(PenCapStyle::RoundCap); // True dots
29482948
pen.setDashPattern(dotted);
2949-
pen.setWidthF(item->style().styleMM(Sid::SlurDottedWidth) * mag);
2949+
pen.setWidthF(item->style().styleMM(Sid::TieDottedWidth) * mag);
29502950
break;
29512951
case SlurStyleType::Dashed:
29522952
painter->setBrush(BrushStyle::NoBrush);
29532953
pen.setDashPattern(dashed);
2954-
pen.setWidthF(item->style().styleMM(Sid::SlurDottedWidth) * mag);
2954+
pen.setWidthF(item->style().styleMM(Sid::TieDottedWidth) * mag);
29552955
break;
29562956
case SlurStyleType::WideDashed:
29572957
painter->setBrush(BrushStyle::NoBrush);
29582958
pen.setDashPattern(wideDashed);
2959-
pen.setWidthF(item->style().styleMM(Sid::SlurDottedWidth) * mag);
2959+
pen.setWidthF(item->style().styleMM(Sid::TieDottedWidth) * mag);
29602960
break;
29612961
case SlurStyleType::Undefined:
29622962
break;

src/engraving/rendering/single/singledraw.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2338,23 +2338,23 @@ void SingleDraw::draw(const TieSegment* item, Painter* painter)
23382338
painter->setBrush(Brush(pen.color()));
23392339
pen.setCapStyle(PenCapStyle::RoundCap);
23402340
pen.setJoinStyle(PenJoinStyle::RoundJoin);
2341-
pen.setWidthF(item->style().styleMM(Sid::SlurEndWidth) * mag);
2341+
pen.setWidthF(item->style().styleMM(Sid::TieEndWidth) * mag);
23422342
break;
23432343
case SlurStyleType::Dotted:
23442344
painter->setBrush(BrushStyle::NoBrush);
23452345
pen.setCapStyle(PenCapStyle::RoundCap); // True dots
23462346
pen.setDashPattern(dotted);
2347-
pen.setWidthF(item->style().styleMM(Sid::SlurDottedWidth) * mag);
2347+
pen.setWidthF(item->style().styleMM(Sid::TieDottedWidth) * mag);
23482348
break;
23492349
case SlurStyleType::Dashed:
23502350
painter->setBrush(BrushStyle::NoBrush);
23512351
pen.setDashPattern(dashed);
2352-
pen.setWidthF(item->style().styleMM(Sid::SlurDottedWidth) * mag);
2352+
pen.setWidthF(item->style().styleMM(Sid::TieDottedWidth) * mag);
23532353
break;
23542354
case SlurStyleType::WideDashed:
23552355
painter->setBrush(BrushStyle::NoBrush);
23562356
pen.setDashPattern(wideDashed);
2357-
pen.setWidthF(item->style().styleMM(Sid::SlurDottedWidth) * mag);
2357+
pen.setWidthF(item->style().styleMM(Sid::TieDottedWidth) * mag);
23582358
break;
23592359
case SlurStyleType::Undefined:
23602360
break;

src/engraving/style/style.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,27 @@ void MStyle::read(XmlReader& e, compat::ReadChordListHook* readChordListHook)
371371
if (pedContText != "") {
372372
set(Sid::pedalText, pedContText);
373373
}
374+
} else if ((tag == "slurEndWidth"
375+
|| tag == "slurMidWidth"
376+
|| tag == "slurDottedWidth"
377+
|| tag == "slurMinDistance")
378+
&& m_version < 430) {
379+
// Pre-4.3 scores used identical style values for slurs and ties.
380+
// When opening older scores, use the same values for both.
381+
double _val = e.readDouble();
382+
if (tag == "slurEndWidth") {
383+
set(Sid::TieEndWidth, Spatium(_val));
384+
set(Sid::SlurEndWidth, Spatium(_val));
385+
} else if (tag == "slurMidWidth") {
386+
set(Sid::TieMidWidth, Spatium(_val));
387+
set(Sid::SlurMidWidth, Spatium(_val));
388+
} else if (tag == "slurDottedWidth") {
389+
set(Sid::TieDottedWidth, Spatium(_val));
390+
set(Sid::SlurDottedWidth, Spatium(_val));
391+
} else if (tag == "slurMinDistance") {
392+
set(Sid::TieMinDistance, Spatium(_val));
393+
set(Sid::SlurMinDistance, Spatium(_val));
394+
}
374395
} else if (!readProperties(e)) {
375396
e.unknown();
376397
}

src/engraving/style/styledef.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,10 +475,14 @@ const std::array<StyleDef::StyleValue, size_t(Sid::STYLES)> StyleDef::styleValue
475475
{ Sid::SlurEndWidth, "slurEndWidth", Spatium(.05) },
476476
{ Sid::SlurMidWidth, "slurMidWidth", Spatium(.21) },
477477
{ Sid::SlurDottedWidth, "slurDottedWidth", Spatium(.10) },
478+
{ Sid::TieEndWidth, "tieEndWidth", Spatium(.05) },
479+
{ Sid::TieMidWidth, "tieMidWidth", Spatium(.21) },
480+
{ Sid::TieDottedWidth, "tieDottedWidth", Spatium(.10) },
478481
{ Sid::MinTieLength, "minTieLength", Spatium(1.0) },
479482
{ Sid::MinStraightGlissandoLength, "minStraightGlissandoLength", Spatium(1.2) },
480483
{ Sid::MinWigglyGlissandoLength, "minWigglyGlissandoLength", Spatium(2.0) },
481484
{ Sid::SlurMinDistance, "slurMinDistance", Spatium(0.5) },
485+
{ Sid::TieMinDistance, "tieMinDistance", Spatium(0.5) },
482486
{ Sid::HeaderToLineStartDistance, "headerSlurTieDistance", Spatium(1.0) },
483487

484488
{ Sid::tiePlacementSingleNote, "tiePlacementSingleNote", TiePlacement::OUTSIDE },

src/engraving/style/styledef.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,10 +486,14 @@ enum class Sid {
486486
SlurEndWidth,
487487
SlurMidWidth,
488488
SlurDottedWidth,
489+
TieEndWidth,
490+
TieMidWidth,
491+
TieDottedWidth,
489492
MinTieLength,
490493
MinStraightGlissandoLength,
491494
MinWigglyGlissandoLength,
492495
SlurMinDistance,
496+
TieMinDistance,
493497
HeaderToLineStartDistance, // determines start point of "dangling" lines (ties, gliss, lyrics...) at start of system
494498

495499
tiePlacementSingleNote,

src/importexport/musicxml/internal/musicxml/exportxml.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1373,8 +1373,8 @@ static void defaults(XmlWriter& xml, const MStyle& s, double& millimeters, const
13731373
xml.tag("line-width", { { "type", "slur tip" } }, s.styleS(Sid::SlurEndWidth).val() * 10);
13741374
xml.tag("line-width", { { "type", "staff" } }, s.styleS(Sid::staffLineWidth).val() * 10);
13751375
xml.tag("line-width", { { "type", "stem" } }, s.styleS(Sid::stemWidth).val() * 10);
1376-
xml.tag("line-width", { { "type", "tie middle" } }, s.styleS(Sid::SlurMidWidth).val() * 10);
1377-
xml.tag("line-width", { { "type", "tie tip" } }, s.styleS(Sid::SlurEndWidth).val() * 10);
1376+
xml.tag("line-width", { { "type", "tie middle" } }, s.styleS(Sid::TieMidWidth).val() * 10);
1377+
xml.tag("line-width", { { "type", "tie tip" } }, s.styleS(Sid::TieEndWidth).val() * 10);
13781378
xml.tag("line-width", { { "type", "tuplet bracket" } }, s.styleS(Sid::tupletBracketWidth).val() * 10);
13791379
xml.tag("line-width", { { "type", "wedge" } }, s.styleS(Sid::hairpinLineWidth).val() * 10);
13801380
// note size values in percent

src/importexport/musicxml/internal/musicxml/importmxmlpass1.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1735,10 +1735,14 @@ void MusicXMLParserPass1::setStyle(const QString& type, const double val)
17351735
_score->style().set(Sid::tupletBracketWidth, Spatium(val / 10));
17361736
} else if (type == "wedge") {
17371737
_score->style().set(Sid::hairpinLineWidth, Spatium(val / 10));
1738-
} else if ((type == "slur middle") || (type == "tie middle")) {
1738+
} else if (type == "slur middle") {
17391739
_score->style().set(Sid::SlurMidWidth, Spatium(val / 10));
1740-
} else if ((type == "slur tip") || (type == "tie tip")) {
1740+
} else if (type == "slur tip") {
17411741
_score->style().set(Sid::SlurEndWidth, Spatium(val / 10));
1742+
} else if (type == "tie middle") {
1743+
_score->style().set(Sid::TieMidWidth, Spatium(val / 10));
1744+
} else if (type == "tie tip") {
1745+
_score->style().set(Sid::TieEndWidth, Spatium(val / 10));
17421746
} else if ((type == "cue")) {
17431747
_score->style().set(Sid::smallNoteMag, val / 100);
17441748
} else if ((type == "grace")) {

src/notation/view/widgets/editstyle.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,10 @@ EditStyle::EditStyle(QWidget* parent)
410410
{ StyleId::SlurMidWidth, false, slurMidLineWidth, resetSlurMidLineWidth },
411411
{ StyleId::SlurDottedWidth, false, slurDottedLineWidth, resetSlurDottedLineWidth },
412412
{ StyleId::SlurMinDistance, false, slurMinDistance, resetSlurMinDistance },
413+
{ StyleId::TieEndWidth, false, tieEndLineWidth, resetTieEndLineWidth },
414+
{ StyleId::TieMidWidth, false, tieMidLineWidth, resetTieMidLineWidth },
415+
{ StyleId::TieDottedWidth, false, tieDottedLineWidth, resetTieDottedLineWidth },
416+
{ StyleId::TieMinDistance, false, tieMinDistance, resetTieMinDistance },
413417
{ StyleId::MinTieLength, false, minTieLength, resetMinTieLength },
414418
{ StyleId::bracketWidth, false, bracketWidth, resetBracketThickness },
415419
{ StyleId::bracketDistance, false, bracketDistance, resetBracketDistance },

0 commit comments

Comments
 (0)