Skip to content

Commit

Permalink
Merge pull request #24152 from ketgg/gsoc_dynamics_popup_part_3
Browse files Browse the repository at this point in the history
GSoC '24 - Dynamics Popup - Part 3
  • Loading branch information
cbjeukendrup authored Feb 17, 2025
2 parents 0584c02 + 2ad0ba8 commit 2c6fafc
Show file tree
Hide file tree
Showing 17 changed files with 259 additions and 30 deletions.
12 changes: 8 additions & 4 deletions src/app/configs/data/shortcuts.xml
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,10 @@
<key>flip</key>
<seq>X</seq>
</SC>
<SC>
<key>flip-horizontally</key>
<seq>Alt+X</seq>
</SC>
<SC>
<key>pitch-up</key>
<seq>Up</seq>
Expand Down Expand Up @@ -538,6 +542,10 @@
<key>add-slur</key>
<seq>S</seq>
</SC>
<SC>
<key>add-dynamic</key>
<seq>Ctrl+D</seq>
</SC>
<SC>
<key>add-hairpin</key>
<seq>Shift+,</seq>
Expand Down Expand Up @@ -743,10 +751,6 @@
<key>staff-text</key>
<seq>Ctrl+T</seq>
</SC>
<SC>
<key>dynamics</key>
<seq>Ctrl+D</seq>
</SC>
<SC>
<key>expression-text</key>
<seq>Ctrl+E</seq>
Expand Down
12 changes: 8 additions & 4 deletions src/app/configs/data/shortcuts_azerty.xml
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,10 @@
<key>flip</key>
<seq>X</seq>
</SC>
<SC>
<key>flip-horizontally</key>
<seq>Alt+X</seq>
</SC>
<SC>
<key>pitch-up</key>
<seq>Up</seq>
Expand Down Expand Up @@ -547,6 +551,10 @@
<key>add-slur</key>
<seq>S</seq>
</SC>
<SC>
<key>add-dynamic</key>
<seq>Ctrl+D</seq>
</SC>
<SC>
<key>add-hairpin</key>
<seq>Shift+,</seq>
Expand Down Expand Up @@ -769,10 +777,6 @@
<key>staff-text</key>
<seq>Ctrl+T</seq>
</SC>
<SC>
<key>dynamics</key>
<seq>Ctrl+D</seq>
</SC>
<SC>
<key>expression-text</key>
<seq>Ctrl+E</seq>
Expand Down
12 changes: 8 additions & 4 deletions src/app/configs/data/shortcuts_mac.xml
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,10 @@
<key>flip</key>
<seq>X</seq>
</SC>
<SC>
<key>flip-horizontally</key>
<seq>Alt+X</seq>
</SC>
<SC>
<key>pitch-up</key>
<seq>Up</seq>
Expand Down Expand Up @@ -538,6 +542,10 @@
<key>add-slur</key>
<seq>S</seq>
</SC>
<SC>
<key>add-dynamic</key>
<seq>Ctrl+D</seq>
</SC>
<SC>
<key>add-hairpin</key>
<seq>Shift+,</seq>
Expand Down Expand Up @@ -743,10 +751,6 @@
<key>staff-text</key>
<seq>Ctrl+T</seq>
</SC>
<SC>
<key>dynamics</key>
<seq>Ctrl+D</seq>
</SC>
<SC>
<key>expression-text</key>
<seq>Ctrl+E</seq>
Expand Down
2 changes: 1 addition & 1 deletion src/appshell/view/appmenumodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@ MenuItemList AppMenuModel::makeTextItems()
makeSeparator(),
makeMenuItem("system-text"),
makeMenuItem("staff-text"),
makeMenuItem("dynamics"),
makeMenuItem("add-dynamic"),
makeMenuItem("expression-text"),
makeMenuItem("rehearsalmark-text"),
makeMenuItem("instrument-change-text"),
Expand Down
50 changes: 41 additions & 9 deletions src/engraving/dom/edit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -763,6 +763,15 @@ TextBase* Score::addText(TextStyleType type, EngravingItem* destinationElement)
chordRest->undoAddAnnotation(textBox);
break;
}
case TextStyleType::DYNAMICS: {
ChordRest* chordRest = chordOrRest(destinationElement);
if (!chordRest) {
break;
}
textBox = Factory::createDynamic(dummy()->segment());
chordRest->undoAddAnnotation(textBox);
break;
}
case TextStyleType::EXPRESSION: {
ChordRest* chordRest = chordOrRest(destinationElement);
if (!chordRest) {
Expand Down Expand Up @@ -955,15 +964,6 @@ TextBase* Score::addText(TextStyleType type, EngravingItem* destinationElement)
undoAddElement(textBox);
break;
}
case TextStyleType::DYNAMICS: {
ChordRest* chordRest = chordOrRest(destinationElement);
if (!chordRest) {
break;
}
textBox = Factory::createDynamic(dummy()->segment());
chordRest->undoAddAnnotation(textBox);
break;
}
case TextStyleType::HARP_PEDAL_DIAGRAM:
case TextStyleType::HARP_PEDAL_TEXT_DIAGRAM: {
ChordRest* chordRest = getSelectedChordRest();
Expand Down Expand Up @@ -2459,6 +2459,38 @@ void Score::cmdFlip()
}
}

void Score::cmdFlipHorizontally()
{
const std::vector<EngravingItem*>& el = selection().elements();
if (el.empty()) {
MScore::setError(MsError::NO_FLIPPABLE_SELECTED);
return;
}

std::set<const EngravingItem*> alreadyFlippedElements;
auto flipOnce = [&alreadyFlippedElements](const EngravingItem* element, std::function<void()> flipFunction) -> void {
if (alreadyFlippedElements.insert(element).second) {
flipFunction();
}
};

for (EngravingItem* e : el) {
if (e->isHairpinSegment()) {
e = toHairpinSegment(e)->hairpin();
}
if (e->isHairpin()) {
Hairpin* h = toHairpin(e);
flipOnce(h, [h] {
if (h->hairpinType() == HairpinType::CRESC_HAIRPIN) {
h->undoChangeProperty(Pid::HAIRPIN_TYPE, int(HairpinType::DECRESC_HAIRPIN));
} else if (h->hairpinType() == HairpinType::DECRESC_HAIRPIN) {
h->undoChangeProperty(Pid::HAIRPIN_TYPE, int(HairpinType::CRESC_HAIRPIN));
}
});
}
}
}

//---------------------------------------------------------
// deleteItem
//---------------------------------------------------------
Expand Down
30 changes: 30 additions & 0 deletions src/engraving/dom/hairpin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,36 @@ DynamicType Hairpin::dynamicTypeTo() const
return TConv::dynamicType(ba.constChar());
}

const Dynamic* Hairpin::dynamicSnappedBefore() const
{
const LineSegment* seg = frontSegment();
if (!seg) {
return nullptr;
}

const EngravingItem* item = seg->ldata()->itemSnappedBefore();
if (!item || !item->isDynamic()) {
return nullptr;
}

return toDynamic(item);
}

const Dynamic* Hairpin::dynamicSnappedAfter() const
{
const LineSegment* seg = backSegment();
if (!seg) {
return nullptr;
}

const EngravingItem* item = seg->ldata()->itemSnappedAfter();
if (!item || !item->isDynamic()) {
return nullptr;
}

return toDynamic(item);
}

//---------------------------------------------------------
// setHairpinType
//---------------------------------------------------------
Expand Down
3 changes: 3 additions & 0 deletions src/engraving/dom/hairpin.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ class Hairpin final : public TextLineBase
DynamicType dynamicTypeFrom() const;
DynamicType dynamicTypeTo() const;

const Dynamic* dynamicSnappedBefore() const;
const Dynamic* dynamicSnappedAfter() const;

HairpinType hairpinType() const { return m_hairpinType; }
void setHairpinType(HairpinType val);

Expand Down
1 change: 1 addition & 0 deletions src/engraving/dom/score.h
Original file line number Diff line number Diff line change
Expand Up @@ -378,6 +378,7 @@ class Score : public EngravingObject, public muse::Injectable
void cmdAddMeasureRepeat(Measure*, int numMeasures, staff_idx_t staffIdx);
bool makeMeasureRepeatGroup(Measure*, int numMeasures, staff_idx_t staffIdx);
void cmdFlip();
void cmdFlipHorizontally();
void resetUserStretch();
void cmdResetToDefaultLayout();
void cmdResetBeamMode();
Expand Down
4 changes: 4 additions & 0 deletions src/notation/inotationinteraction.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ class INotationInteraction
virtual void swapSelection() = 0;
virtual void deleteSelection() = 0;
virtual void flipSelection() = 0;
virtual void flipSelectionHorizontally() = 0;
virtual void addTieToSelection() = 0;
virtual void addTiedNoteToChord() = 0;
virtual void addLaissezVibToSelection() = 0;
Expand All @@ -205,6 +206,9 @@ class INotationInteraction

virtual void increaseDecreaseDuration(int steps, bool stepByDots) = 0;

virtual void autoFlipHairpinsType(engraving::Dynamic* selDyn) = 0;

virtual void toggleDynamicPopup() = 0;
virtual bool toggleLayoutBreakAvailable() const = 0;
virtual void toggleLayoutBreak(LayoutBreakType breakType) = 0;
virtual void moveMeasureToPrevSystem() = 0;
Expand Down
3 changes: 2 additions & 1 deletion src/notation/internal/notationactioncontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ void NotationActionController::init()
registerAction("notation-delete", &Interaction::deleteSelection, &Controller::hasSelection);

registerAction("flip", &Interaction::flipSelection, &Controller::hasSelection);
registerAction("flip-horizontally", &Interaction::flipSelectionHorizontally, &Controller::hasSelection);
registerAction("tie", &Controller::addTie);
registerAction("chord-tie", &Controller::chordTie);
registerAction("lv", &Controller::addLaissezVib);
Expand Down Expand Up @@ -322,6 +323,7 @@ void NotationActionController::init()

registerAction("add-8va", &Interaction::addOttavaToSelection, OttavaType::OTTAVA_8VA);
registerAction("add-8vb", &Interaction::addOttavaToSelection, OttavaType::OTTAVA_8VB);
registerAction("add-dynamic", &Interaction::toggleDynamicPopup, &Controller::noteOrRestSelected);
registerAction("add-hairpin", &Interaction::addHairpinsToSelection, HairpinType::CRESC_HAIRPIN, &Controller::noteOrRestSelected);
registerAction("add-hairpin-reverse", &Interaction::addHairpinsToSelection, HairpinType::DECRESC_HAIRPIN,
&Controller::noteOrRestSelected);
Expand All @@ -338,7 +340,6 @@ void NotationActionController::init()

registerAction("system-text", [this]() { addText(TextStyleType::SYSTEM); });
registerAction("staff-text", [this]() { addText(TextStyleType::STAFF); });
registerAction("dynamics", [this]() { addText(TextStyleType::DYNAMICS); });
registerAction("expression-text", [this]() { addText(TextStyleType::EXPRESSION); });
registerAction("rehearsalmark-text", [this]() { addText(TextStyleType::REHEARSAL_MARK); });
registerAction("instrument-change-text", [this]() { addText(TextStyleType::INSTRUMENT_CHANGE); });
Expand Down
Loading

0 comments on commit 2c6fafc

Please sign in to comment.