Beispiel #1
0
        /// <summary>
        /// Move paddedMetrics above the fixedNoteObject if it is not already.
        /// </summary>
        private void MovePaddedMetricsAboveNoteObject(PaddedMetrics paddedMetrics, NoteObject fixedNoteObject)
        {
            double verticalOverlap = 0;

            if (fixedNoteObject.Metrics is ChordMetrics chordMetrics)
            {
                verticalOverlap = chordMetrics.OverlapHeight(paddedMetrics, 0F);
            }
            else if (fixedNoteObject.Metrics is RestMetrics restMetrics)
            {
                verticalOverlap = restMetrics.OverlapHeight(paddedMetrics, 0F);
            }
            else if (!(fixedNoteObject is Barline))
            {
                verticalOverlap = fixedNoteObject.Metrics.OverlapHeight(paddedMetrics, 0F);
            }

            if (verticalOverlap > 0)
            {
                verticalOverlap = (verticalOverlap > paddedMetrics.BottomPadding) ? verticalOverlap : paddedMetrics.BottomPadding;
                paddedMetrics.Move(0, -verticalOverlap);
            }
        }
Beispiel #2
0
        protected void MoveFramedTextAboveNoteObjects(Metrics framedTextMetrics, List <NoteObject> fixedNoteObjects)
        {
            if (framedTextMetrics != null)
            {
                double        bottomPadding = Gap * 1.5;
                double        xPadding      = Gap * 4;
                PaddedMetrics paddedMetrics = new PaddedMetrics(framedTextMetrics, 0, xPadding, bottomPadding, xPadding);

                foreach (NoteObject noteObject in fixedNoteObjects)
                {
                    int overlaps = OverlapsHorizontally(paddedMetrics, noteObject);
                    if (overlaps == 0)
                    {
                        MovePaddedMetricsAboveNoteObject(paddedMetrics, noteObject);
                    }
                    else if (overlaps == 1)                    // noteObject is left of framedText
                    {
                        if (noteObject is ChordSymbol chordSymbol)
                        {
                            if (chordSymbol.Stem.Direction == VerticalDir.up && chordSymbol.BeamBlock != null)
                            {
                                MoveFramedTextAboveBeamBlock(framedTextMetrics, chordSymbol.BeamBlock);
                            }
                            else if (chordSymbol.ChordMetrics.NoteheadExtendersMetrics != null)
                            {
                                MoveFramedTextAboveNoteheadExtenders(framedTextMetrics, chordSymbol.ChordMetrics.NoteheadExtendersMetrics);
                            }
                        }
                    }
                    else if (overlaps == -1)                    // noteObject is right of framed text, so we need look no further in these noteObjects.
                    {
                        break;
                    }
                }
            }
        }