private void MoveFramedTextAboveNoteheadExtenders(Metrics framedTextMetrics, List <NoteheadExtenderMetrics> noteheadExtendersMetrics) { double padding = Gap * 1.5; int indexOfTopExtender = 0; for (int i = 1; i < noteheadExtendersMetrics.Count; ++i) { indexOfTopExtender = (noteheadExtendersMetrics[indexOfTopExtender].Top < noteheadExtendersMetrics[i].Top) ? indexOfTopExtender : i; } NoteheadExtenderMetrics topExtender = noteheadExtendersMetrics[indexOfTopExtender]; double verticalOverlap = topExtender.OverlapHeight(framedTextMetrics, padding); if (verticalOverlap > 0) { verticalOverlap = (verticalOverlap > padding) ? verticalOverlap : padding; framedTextMetrics.Move(0, -(verticalOverlap)); } }
/// <summary> /// Extenders are created for chords of all duration classes, but only displayed on crotchets or greater. /// This is so that extenders become part of the staff's edge, which is used when shifting staves and drawing barlines. /// Extenders shorter than a gap are not created. /// </summary> private List <NoteheadExtenderMetrics> CreateExtenders(List <float> x1s, List <float> x2s, List <float> ys, float extenderStrokeWidth, float gap, bool drawExtender) { Debug.Assert(ys.Count == x1s.Count); Debug.Assert(ys.Count == x2s.Count); Debug.Assert(ys.Count > 0); List <NoteheadExtenderMetrics> noteheadExtendersMetrics = new List <NoteheadExtenderMetrics>(); for (int i = 0; i < ys.Count; ++i) { if ((x2s[i] - x1s[i]) > (gap / 2)) { NoteheadExtenderMetrics nem = new NoteheadExtenderMetrics(x1s[i], x2s[i], ys[i], extenderStrokeWidth, gap, drawExtender); noteheadExtendersMetrics.Add(nem); } } return(noteheadExtendersMetrics); }
/// <summary> /// Extenders are created for chords of all duration classes, but only displayed on crotchets or greater. /// This is so that extenders become part of the staff's edge, which is used when shifting staves and drawing barlines. /// Extenders shorter than a gap are not created. /// </summary> private List<NoteheadExtenderMetrics> CreateExtenders(List<float> x1s, List<float> x2s, List<float> ys, List<HeadMetrics> headMetrics, float extenderStrokeWidth, float gap, bool drawExtender) { Debug.Assert(ys.Count == x1s.Count); Debug.Assert(ys.Count == x2s.Count); Debug.Assert(ys.Count > 0); List<NoteheadExtenderMetrics> noteheadExtendersMetrics = new List<NoteheadExtenderMetrics>(); for(int i = 0; i < ys.Count; ++i) { if((x2s[i] - x1s[i]) > (gap / 2)) { NoteheadExtenderMetrics nem = new NoteheadExtenderMetrics(x1s[i], x2s[i], ys[i], headMetrics[i].ColorAttribute, extenderStrokeWidth, gap, drawExtender); noteheadExtendersMetrics.Add(nem); } } return noteheadExtendersMetrics; }