Skip to content

Commit

Permalink
Merge pull request #18959 from mike-spa/fix#18587ExpressionSnappingTo…
Browse files Browse the repository at this point in the history
…InvisibleDynamic

Fix #18587: Expression snap to invisible dynamics
  • Loading branch information
RomanPudashkin committed Aug 8, 2023
2 parents 553dba2 + 84dc24b commit 8e4660a
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 12 deletions.
17 changes: 6 additions & 11 deletions src/engraving/libmscore/dynamichairpingroup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,23 +226,18 @@ void DynamicNearHairpinsDragGroup::endDrag(EditData& ed)

std::unique_ptr<ElementGroup> DynamicExpressionDragGroup::detectFor(Dynamic* d, std::function<bool(const EngravingItem*)> isDragged)
{
Segment* segment = d->segment();
Expression* expression = segment ? toExpression(segment->findAnnotation(ElementType::EXPRESSION, d->track(), d->track())) : nullptr;
if (expression && !isDragged(expression) && expression->snapToDynamics()) {
return std::unique_ptr<DynamicExpressionDragGroup>(new DynamicExpressionDragGroup(d, expression));
Expression* snappedExpression = d->snappedExpression();
if (snappedExpression && !isDragged(snappedExpression)) {
return std::unique_ptr<DynamicExpressionDragGroup>(new DynamicExpressionDragGroup(d, snappedExpression));
}
return nullptr;
}

std::unique_ptr<ElementGroup> DynamicExpressionDragGroup::detectFor(Expression* e, std::function<bool(const EngravingItem*)> isDragged)
{
if (!e->snapToDynamics()) {
return nullptr;
}
Segment* segment = e->explicitParent() ? toSegment(e->explicitParent()) : nullptr;
Dynamic* dynamic = segment ? toDynamic(segment->findAnnotation(ElementType::DYNAMIC, e->track(), e->track())) : nullptr;
if (dynamic && !isDragged(dynamic)) {
return std::unique_ptr<DynamicExpressionDragGroup>(new DynamicExpressionDragGroup(dynamic, e));
Dynamic* snappedDynamic = e->snappedDynamic();
if (snappedDynamic && !isDragged(snappedDynamic)) {
return std::unique_ptr<DynamicExpressionDragGroup>(new DynamicExpressionDragGroup(snappedDynamic, e));
}
return nullptr;
}
Expand Down
2 changes: 1 addition & 1 deletion src/engraving/rendering/dev/tlayout.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1660,7 +1660,7 @@ void TLayout::layout(Expression* item, LayoutContext& ctx)
}

Dynamic* dynamic = toDynamic(segment->findAnnotation(ElementType::DYNAMIC, item->track(), item->track()));
if (!dynamic || dynamic->placeAbove() != item->placeAbove()) {
if (!dynamic || dynamic->placeAbove() != item->placeAbove() || !dynamic->visible()) {
item->autoplaceSegmentElement();
return;
}
Expand Down
Binary file added vtest/scores/expression-3.mscz
Binary file not shown.

0 comments on commit 8e4660a

Please sign in to comment.