@@ -287,6 +287,7 @@ PropertyValue Clef::getProperty(Pid propertyId) const
287287 case Pid::SMALL: return isSmall ();
288288 case Pid::CLEF_TO_BARLINE_POS: return m_clefToBarlinePosition;
289289 case Pid::IS_HEADER: return m_isHeader;
290+ case Pid::IS_COURTESY: return m_isCourtesy;
290291 default :
291292 return EngravingItem::getProperty (propertyId);
292293 }
@@ -326,6 +327,9 @@ bool Clef::setProperty(Pid propertyId, const PropertyValue& v)
326327 case Pid::IS_HEADER:
327328 m_isHeader = v.toBool ();
328329 break ;
330+ case Pid::IS_COURTESY:
331+ m_isCourtesy = v.toBool ();
332+ break ;
329333 default :
330334 return EngravingItem::setProperty (propertyId, v);
331335 }
@@ -342,7 +346,6 @@ void Clef::changeClefToBarlinePos(ClefToBarlinePosition newPos)
342346 }
343347
344348 Segment* seg = segment ();
345- Measure* meas = seg->measure ();
346349
347350 staff_idx_t nStaves = score ()->nstaves ();
348351 for (staff_idx_t staffIndex = 0 ; staffIndex < nStaves; ++staffIndex) {
@@ -352,111 +355,9 @@ void Clef::changeClefToBarlinePos(ClefToBarlinePosition newPos)
352355 }
353356 }
354357
355- Segment* endBarlineSeg = nullptr ;
356- Segment* endRepeatSeg = nullptr ;
357- Segment* startRepeatSeg = nullptr ;
358-
359- // Search first segment at this tick
360- Segment* firstSegAtThisTick = seg;
361- while (true ) {
362- Segment* prev1 = firstSegAtThisTick->prev1 ();
363- if (prev1 && prev1->tick () == seg->tick ()) {
364- firstSegAtThisTick = prev1;
365- } else {
366- break ;
367- }
368- }
369- for (Segment* s = firstSegAtThisTick; s && s->tick () == seg->tick (); s = s->next1enabled ()) {
370- // Scan all segments at this tick looking for the ones we need
371- if (s->isEndBarLineType () && s->measure ()->repeatEnd ()) {
372- endRepeatSeg = s;
373- } else if (s->isEndBarLineType ()) {
374- endBarlineSeg = s;
375- } else if (s->isStartRepeatBarLineType ()) {
376- startRepeatSeg = s;
377- }
378- }
379-
380358 if (newPos == ClefToBarlinePosition::AFTER) {
381359 undoChangeProperty (Pid::SHOW_COURTESY, false , propertyFlags (Pid::SHOW_COURTESY));
382- }
383-
384- if (newPos == ClefToBarlinePosition::AUTO) {
385- if (endBarlineSeg) {
386- // Clef before the end bar line
387- Measure* destMeas = endBarlineSeg->measure ();
388- meas->segments ().remove (seg);
389- destMeas->segments ().insert (seg, endBarlineSeg);
390- seg->setRtick (endBarlineSeg->rtick ());
391- seg->setParent (destMeas);
392- } else if (endRepeatSeg) {
393- // Clef after the end repeat
394- Measure* destMeas = endRepeatSeg->measure ();
395- meas->segments ().remove (seg);
396- destMeas->segments ().insert (seg, endRepeatSeg->next ());
397- seg->setRtick (endRepeatSeg->rtick ());
398- seg->setParent (destMeas);
399- } else if (startRepeatSeg) {
400- // End of previous measure
401- Measure* destMeas = startRepeatSeg->measure ()->prevMeasure ();
402- if (destMeas) {
403- meas->segments ().remove (seg);
404- destMeas->segments ().push_back (seg);
405- seg->setRtick (destMeas->ticks ());
406- seg->setParent (destMeas);
407- }
408- }
409- } else if (newPos == ClefToBarlinePosition::BEFORE) {
410- if (endBarlineSeg || endRepeatSeg) {
411- // Before the bar line
412- Segment* refSeg = endBarlineSeg ? endBarlineSeg : endRepeatSeg;
413- Measure* destMeas = refSeg->measure ();
414- meas->segments ().remove (seg);
415- destMeas->segments ().insert (seg, refSeg);
416- seg->setRtick (refSeg->rtick ());
417- seg->setParent (destMeas);
418- } else if (startRepeatSeg) {
419- // End of previous measure
420- Measure* destMeas = startRepeatSeg->measure ()->prevMeasure ();
421- if (destMeas) {
422- meas->segments ().remove (seg);
423- destMeas->segments ().push_back (seg);
424- seg->setRtick (destMeas->ticks ());
425- seg->setParent (destMeas);
426- }
427- }
428- } else if (newPos == ClefToBarlinePosition::AFTER) {
429- bool isAtMeasureEnd = seg->rtick () == meas->ticks ();
430- if (startRepeatSeg) {
431- // After the start repeat
432- Measure* destMeas = startRepeatSeg->measure ();
433- meas->segments ().remove (seg);
434- destMeas->segments ().insert (seg, startRepeatSeg->next ());
435- seg->setRtick (startRepeatSeg->rtick ());
436- seg->setParent (destMeas);
437- } else if (isAtMeasureEnd) {
438- Measure* destMeas = meas->nextMeasure ();
439- if (destMeas && !destMeas->header ()) {
440- meas->segments ().remove (seg);
441- destMeas->segments ().push_front (seg);
442- seg->setRtick (Fraction (0 , 1 ));
443- seg->setParent (destMeas);
444- } else if (destMeas) {
445- Segment* refSeg = destMeas->firstEnabled ();
446- while (refSeg && refSeg->header ()) {
447- refSeg = refSeg->nextEnabled ();
448- }
449- if (refSeg) {
450- meas->segments ().remove (seg);
451- destMeas->segments ().insert (seg, refSeg);
452- seg->setRtick (refSeg->rtick ());
453- seg->setParent (destMeas);
454- }
455- }
456- }
457- }
458-
459- if ((newPos == ClefToBarlinePosition::AUTO || newPos == ClefToBarlinePosition::BEFORE)) {
360+ } else {
460361 undoChangeProperty (Pid::SHOW_COURTESY, true , PropertyFlags::STYLED);
461362 }
462363}
@@ -511,6 +412,7 @@ PropertyValue Clef::propertyDefault(Pid id) const
511412 case Pid::SMALL: return false ;
512413 case Pid::CLEF_TO_BARLINE_POS: return ClefToBarlinePosition::AUTO;
513414 case Pid::IS_HEADER: return false ;
415+ case Pid::IS_COURTESY: return false ;
514416 default : return EngravingItem::propertyDefault (id);
515417 }
516418}
0 commit comments