@@ -279,10 +279,8 @@ void MoveElementAnchors::moveSegment(EngravingItem* element, Segment* newSeg, Fr
279
279
doMoveSegment (toFiguredBass (element), newSeg, tickDiff);
280
280
break ;
281
281
case ElementType::HARMONY:
282
- doMoveSegment (toHarmony (element), newSeg, tickDiff);
283
- break ;
284
282
case ElementType::FRET_DIAGRAM:
285
- doMoveSegment ( toFretDiagram ( element) , newSeg, tickDiff);
283
+ doMoveHarmonyOrFretDiagramSegment ( element, newSeg, tickDiff);
286
284
break ;
287
285
default :
288
286
doMoveSegment (toEngravingItem (element), newSeg, tickDiff);
@@ -365,37 +363,30 @@ void MoveElementAnchors::doMoveSegment(FiguredBass* element, Segment* newSeg, Fr
365
363
}
366
364
}
367
365
368
- void MoveElementAnchors::doMoveSegment (Harmony * element, Segment* newSeg, Fraction tickDiff)
366
+ void MoveElementAnchors::doMoveHarmonyOrFretDiagramSegment (EngravingItem * element, Segment* newSeg, Fraction tickDiff)
369
367
{
370
- if (newSeg->isTimeTickType ()) {
371
- Measure* measure = newSeg->measure ();
372
- Segment* chordRestSegAtSameTick = measure->undoGetSegment (SegmentType::ChordRest, newSeg->tick ());
373
- newSeg = chordRestSegAtSameTick;
368
+ for (EngravingObject* item : element->linkList ()) {
369
+ Score* score = item->score ();
370
+ Measure* measure = score->tick2measure (newSeg->tick ());
371
+ Segment* chordRestSeg = measure->undoGetSegment (SegmentType::ChordRest, newSeg->tick ());
372
+ if (item == element) {
373
+ newSeg = chordRestSeg;
374
+ }
374
375
}
375
376
376
- Segment* oldSegment = toSegment (element->parent ());
377
- doMoveSegment (toEngravingItem (element), newSeg, tickDiff);
378
-
379
- oldSegment->checkEmpty ();
380
- if (oldSegment->empty ()) {
381
- element->score ()->undoRemoveElement (oldSegment);
382
- }
383
- }
377
+ Fraction oldTick = element->tick ();
384
378
385
- void MoveElementAnchors::doMoveSegment (FretDiagram* element, Segment* newSeg, Fraction tickDiff)
386
- {
387
- if (newSeg->isTimeTickType ()) {
388
- Measure* measure = newSeg->measure ();
389
- Segment* chordRestSegAtSameTick = measure->undoGetSegment (SegmentType::ChordRest, newSeg->tick ());
390
- newSeg = chordRestSegAtSameTick;
391
- }
392
-
393
- Segment* oldSegment = toSegment (element->parent ());
394
379
doMoveSegment (toEngravingItem (element), newSeg, tickDiff);
395
380
396
- oldSegment->checkEmpty ();
397
- if (oldSegment->empty ()) {
398
- element->score ()->undoRemoveElement (oldSegment);
381
+ for (EngravingObject* item : element->linkList ()) {
382
+ Score* score = item->score ();
383
+ Segment* oldSegment = score->tick2segment (oldTick, true , SegmentType::ChordRest, false );
384
+ if (oldSegment) {
385
+ oldSegment->checkEmpty ();
386
+ if (oldSegment->empty ()) {
387
+ score->undoRemoveElement (oldSegment);
388
+ }
389
+ }
399
390
}
400
391
}
401
392
0 commit comments