Skip to content

Commit fa0da3c

Browse files
committed
Create small parenthesis option
1 parent b941f4a commit fa0da3c

File tree

10 files changed

+67
-18
lines changed

10 files changed

+67
-18
lines changed

src/engraving/dom/parenthesis.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ class Parenthesis : public EngravingItem
4747
struct LayoutData : public EngravingItem::LayoutData
4848
{
4949
ld_field<muse::draw::PainterPath> path = "path";
50+
ld_field<double> startY = "startY";
51+
ld_field<double> height = "height";
5052
};
5153
DECLARE_LAYOUTDATA_METHODS(Parenthesis);
5254
};

src/engraving/rendering/score/measurelayout.cpp

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1914,30 +1914,38 @@ void MeasureLayout::setCourtesyClef(Measure* m, const Fraction& refClefTick, con
19141914
}
19151915
}
19161916

1917-
void MeasureLayout::createParenthesis(Segment* segment, const DirectionH direction, const track_idx_t track)
1917+
Parenthesis* MeasureLayout::findOrCreateParenthesis(Segment* segment, const DirectionH direction, const track_idx_t track)
19181918
{
19191919
if (!segment->element(track)) {
1920-
return;
1920+
return nullptr;
19211921
}
19221922

19231923
std::vector<EngravingItem*> parens = segment->findAnnotations(ElementType::PARENTHESIS, track, track);
1924-
bool foundMatchingParen = false;
1924+
19251925
for (EngravingItem* el : parens) {
19261926
if (!el->isParenthesis() || toParenthesis(el)->direction() != direction) {
19271927
continue;
19281928
}
1929-
foundMatchingParen = true;
1930-
break;
1931-
}
1932-
1933-
if (foundMatchingParen) {
1934-
return;
1929+
return toParenthesis(el);
19351930
}
19361931

19371932
Parenthesis* paren = Factory::createParenthesis(segment);
19381933
paren->setTrack(track);
19391934
paren->setDirection(direction);
19401935
segment->add(paren);
1936+
1937+
return paren;
1938+
}
1939+
1940+
static void calcParenTopBottom(Parenthesis* item, double& top, double& bottom)
1941+
{
1942+
Segment* seg = item->segment();
1943+
EngravingItem* el = seg->element(item->track());
1944+
const double spatium = item->spatium();
1945+
if (el) {
1946+
top = std::min(top, el->shape().top() + el->pos().y() + spatium / 2);
1947+
bottom = std::max(bottom, el->shape().bottom() + el->pos().y() - spatium / 2);
1948+
}
19411949
}
19421950

19431951
void MeasureLayout::addRepeatCourtesyParentheses(Measure* m, const bool continuation, LayoutContext& ctx)
@@ -1949,6 +1957,8 @@ void MeasureLayout::addRepeatCourtesyParentheses(Measure* m, const bool continua
19491957
const Fraction sigTick = continuation ? Fraction(0, 0) : m->ticks();
19501958

19511959
for (track_idx_t track = 0; track <= ctx.dom().nstaves() * VOICES; track += VOICES) {
1960+
double top = DBL_MAX;
1961+
double bottom = -DBL_MAX;
19521962
Segment* leftMostSeg = m->findSegmentR(clefSegType, sigTick);
19531963

19541964
if (!leftMostSeg || !leftMostSeg->enabled() || !leftMostSeg->element(track)) {
@@ -1964,7 +1974,7 @@ void MeasureLayout::addRepeatCourtesyParentheses(Measure* m, const bool continua
19641974
return;
19651975
}
19661976

1967-
createParenthesis(leftMostSeg, DirectionH::LEFT, track);
1977+
Parenthesis* leftParen = findOrCreateParenthesis(leftMostSeg, DirectionH::LEFT, track);
19681978

19691979
Segment* rightMostSeg = m->findSegmentR(tsSegType, sigTick);
19701980
if (!rightMostSeg || !rightMostSeg->enabled() || !rightMostSeg->element(track)) {
@@ -1980,7 +1990,17 @@ void MeasureLayout::addRepeatCourtesyParentheses(Measure* m, const bool continua
19801990
return;
19811991
}
19821992

1983-
createParenthesis(rightMostSeg, DirectionH::RIGHT, track);
1993+
Parenthesis* rightParen = findOrCreateParenthesis(rightMostSeg, DirectionH::RIGHT, track);
1994+
if (ctx.conf().styleB(Sid::smallParens)) {
1995+
calcParenTopBottom(leftParen, top, bottom);
1996+
calcParenTopBottom(rightParen, top, bottom);
1997+
1998+
const double height = bottom - top;
1999+
rightParen->mutldata()->startY.set_value(top);
2000+
rightParen->mutldata()->height.set_value(height);
2001+
leftParen->mutldata()->startY.set_value(top);
2002+
leftParen->mutldata()->height.set_value(height);
2003+
}
19842004
}
19852005
}
19862006

src/engraving/rendering/score/measurelayout.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
namespace mu::engraving {
2828
class Measure;
2929
class MeasureBase;
30+
class Parenthesis;
3031
class Score;
3132
class Segment;
3233
class StaffLines;
@@ -107,7 +108,7 @@ class MeasureLayout
107108
static void setCourtesyClef(Measure* m, const Fraction& refSigTick, const Fraction& courtesySigTick, const SegmentType segType,
108109
LayoutContext& ctx);
109110

110-
static void createParenthesis(Segment* segment, const DirectionH direction, const track_idx_t track);
111+
static Parenthesis* findOrCreateParenthesis(Segment* segment, const DirectionH direction, const track_idx_t track);
111112
static void removeRepeatCourtesyParenthesesSegment(Segment* seg, const track_idx_t track,
112113
const DirectionH direction = DirectionH::AUTO);
113114
};

src/engraving/rendering/score/tlayout.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4508,15 +4508,20 @@ void TLayout::layoutParenthesis(Parenthesis* item, LayoutContext& ctx)
45084508
const double mag = item->mag();
45094509
const bool leftBracket = item->direction() == DirectionH::LEFT;
45104510

4511-
const double height = staff->staffHeight(item->tick()) + 2 * spatium * mag;
4512-
const double heightInSpatium = height / spatium;
4511+
double startY = -spatium;
4512+
double height = staff->staffHeight(item->tick()) + 2 * spatium * mag; // 6sp for a standard 5 line stave
45134513

4514-
const double shoulderX = 1.25 * spatium * mag;
4515-
const double thickness = 0.1 * spatium * mag; // THICKNESS - ADJUST
4514+
if (ctx.conf().styleB(Sid::smallParens)) {
4515+
startY = ldata->startY;
4516+
height = ldata->height;
4517+
}
45164518

4519+
const double heightInSpatium = height / spatium;
45174520
const double shoulderYOffset = 0.2 * height;
4521+
const double thickness = height / 60 * mag;
4522+
const double shoulderX = 0.2 * height * mag;
45184523

4519-
PointF start = PointF(0.0, -spatium);
4524+
PointF start = PointF(0.0, startY);
45204525
const PointF end = PointF(0.0, start.y() + height);
45214526
const PointF endNormalised = end - start;
45224527

src/engraving/style/styledef.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1787,6 +1787,7 @@ const std::array<StyleDef::StyleValue, size_t(Sid::STYLES)> StyleDef::styleValue
17871787
styleDef(useParensRepeatCourtesiesAfterCancelling, true),
17881788
styleDef(showCourtesiesAfterCancellingOtherJumps, true),
17891789
styleDef(useParensOtherJumpCourtesiesAfterCancelling, true),
1790+
styleDef(smallParens, false),
17901791
} };
17911792

17921793
#undef styleDef

src/engraving/style/styledef.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1805,6 +1805,8 @@ enum class Sid {
18051805
showCourtesiesAfterCancellingOtherJumps,
18061806
useParensOtherJumpCourtesiesAfterCancelling,
18071807

1808+
smallParens,
1809+
18081810
STYLES
18091811
///\}
18101812
};

src/notation/qml/MuseScore/NotationScene/internal/EditStyle/ClefKeyTimeSigPage.qml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,14 @@ StyledFlickable {
731731

732732
text: qsTrc("notation/editstyle/timesignatures", "Show when cancelling a change before all other jumps")
733733
}
734+
735+
CheckBox {
736+
Layout.column: 0
737+
Layout.row: 2
738+
text: qsTrc("notation", "Small parentheses")
739+
checked: pageModel.smallParens.value === true
740+
onClicked: pageModel.smallParens.value = !pageModel.smallParens.value
741+
}
734742
}
735743
}
736744
}

src/notation/view/styledialog/clefkeytimesigpagemodel.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ ClefKeyTimeSigPageModel::ClefKeyTimeSigPageModel(QObject* parent)
6464
StyleId::showCourtesiesAfterCancellingRepeats,
6565
StyleId::useParensRepeatCourtesiesAfterCancelling,
6666
StyleId::showCourtesiesAfterCancellingOtherJumps,
67-
StyleId::useParensOtherJumpCourtesiesAfterCancelling })
67+
StyleId::useParensOtherJumpCourtesiesAfterCancelling,
68+
StyleId::smallParens })
6869
{
6970
}
7071

@@ -306,3 +307,8 @@ StyleItem* ClefKeyTimeSigPageModel::useParensOtherJumpCourtesiesAfterCancelling(
306307
{
307308
return styleItem(StyleId::useParensOtherJumpCourtesiesAfterCancelling);
308309
}
310+
311+
StyleItem* ClefKeyTimeSigPageModel::smallParens() const
312+
{
313+
return styleItem(StyleId::smallParens);
314+
}

src/notation/view/styledialog/clefkeytimesigpagemodel.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ class ClefKeyTimeSigPageModel : public AbstractStyleDialogModel
8080
Q_PROPERTY(StyleItem * showCourtesiesAfterCancellingOtherJumps READ showCourtesiesAfterCancellingOtherJumps CONSTANT)
8181
Q_PROPERTY(StyleItem * useParensOtherJumpCourtesiesAfterCancelling READ useParensOtherJumpCourtesiesAfterCancelling CONSTANT)
8282

83+
Q_PROPERTY(StyleItem * smallParens READ smallParens CONSTANT)
84+
8385
public:
8486
explicit ClefKeyTimeSigPageModel(QObject* parent = nullptr);
8587

@@ -135,5 +137,7 @@ class ClefKeyTimeSigPageModel : public AbstractStyleDialogModel
135137
StyleItem* useParensRepeatCourtesiesAfterCancelling() const;
136138
StyleItem* showCourtesiesAfterCancellingOtherJumps() const;
137139
StyleItem* useParensOtherJumpCourtesiesAfterCancelling() const;
140+
141+
StyleItem* smallParens() const;
138142
};
139143
}
27.9 KB
Binary file not shown.

0 commit comments

Comments
 (0)