private void CalculateOptWidth()
 {
     double restWidth     = DrawingMethods.GetTextWidth(symbol, TypeFaces.GetMusicFont());
     double dotWidth      = DrawingMethods.GetTextWidth(MusicSymbols.Dot, TypeFaces.GetMusicFont());
     double leftFreeSpace = restWidth * 0.1;
     double dotSpaces     = dotWidth * 0.5;
 }
Ejemplo n.º 2
0
        protected override void Update()
        {
            var staffLineCoords  = ViewModel.ViewModelLocator.Instance.Main.CurrentPageLayout.AvaliableIndexLinePositions;
            DrawingVisualHost cl = new DrawingVisualHost();

            if (fifts == 0)
            {
                itemWidth = 0;
            }
            else
            {
                int symbolsCount = Math.Abs(fifts);
                if (symbolsCount > 7)
                {
                    symbolsCount = 0;
                }
                Point  currentPosition   = new Point();
                double symbolWidth       = DrawingMethods.GetTextWidth(keySymbol, TypeFaces.GetMusicFont());
                double keySignatureWidth = symbolsCount * symbolWidth;
                for (int i = 0; i < symbolsCount; i++)
                {
                    currentPosition = new Point(i * symbolWidth, staffLineCoords[8 - keyIndexes[i]]);
                    cl.AddCharacterGlyph(currentPosition, keySymbol);
                }
                itemWidth = keySignatureWidth;
            }
            ItemCanvas.Children.Add(cl);
        }
        private void Draw(bool measure)
        {
            staffLines = ViewModel.ViewModelLocator.Instance.Main.CurrentPageLayout.AvaliableIndexLinePositions;
            DrawingVisualHost rest = new DrawingVisualHost();

            Brush  color     = ViewModel.ViewModelLocator.Instance.Main.CurrentLayout.LayoutStyle.Colors[int.Parse(noteItem.Voice)];
            double positionY = 0.0;

            if (measure)
            {
                measureRest = true;
                GetSymbol();
                positionY = SetPosition(CalculateRestPositionY());
                rest.AddCharacterGlyph(new Point(0, positionY), symbol, color: color);
            }
            else
            {
                GetSymbol();
                positionY = SetPosition(CalculateRestPositionY());
                rest.AddCharacterGlyph(new Point(0, positionY), symbol, color: color);
            }
            if (dotCount != 0)
            {
                double shiftUp = (int)restType >= 6 ? SetPosition(1) :
                                 restType == NoteTypeValueMusicXML.Item32nd ? SetPosition(3) :
                                 restType == NoteTypeValueMusicXML.Item64th ? SetPosition(5) : SetPosition(5);
                Point dotPosition = new Point(DrawingMethods.GetTextWidth(symbol, TypeFaces.GetMusicFont()) + 4.0.TenthsToWPFUnit(), positionY - shiftUp);
                rest.AddCharacterGlyph(dotPosition, MusicSymbols.Dot, color: color);
            }
            ItemCanvas.Children.Add(rest);
        }
Ejemplo n.º 4
0
        //todo if width changed update visual
        private void Draw()
        {
            GetVisualControl().Children.Clear();
            var symbolWidth = DrawingHelpers.DrawingMethods.GetTextWidth(restSymbol, TypeFaces.GetMusicFont());
            var visualHost  = new DrawingVisualHost();

            visualHost.AddCharacterGlyph(new Point(Width / 2 - (symbolWidth / 2), Staff[4, 1]), restSymbol);
            GetVisualControl().Children.Add(visualHost);
        }
        private void CalculateMinWidth()
        {
            double restWidth     = DrawingMethods.GetTextWidth(symbol, TypeFaces.GetMusicFont());
            double dotWidth      = DrawingMethods.GetTextWidth(MusicSymbols.Dot, TypeFaces.GetMusicFont());
            double leftFreeSpace = restWidth * 0.05;
            double dotSpaces     = dotWidth * 0.25;

            itemWidthMin = leftFreeSpace + restWidth + (dotWidth + dotSpaces) * dotCount;
            itemWidth    = itemWidthMin;
        }
 protected override void Update()
 {
     if (isSymbol)
     {
         itemWidth = DrawingMethods.GetTextWidth(symbol, TypeFaces.GetMusicFont());
         DrawingVisualHost canvas = new DrawingVisualHost();
         canvas.AddCharacterGlyph(new Point(0, staffLine[3]), symbol);
         ItemCanvas.Children.Add(canvas);
     }
     if (!isSymbol || symbolValue == TimeSymbolMusicXML.normal)
     {
         char[]            beatChars      = beatSymbol.ToCharArray();
         double[]          beatCharWidths = beatSymbol.ToCharArray().GetCharsVisualWidth();
         double            beatWidth      = beatCharWidths.Sum();
         DrawingVisualHost canvasBeat     = new DrawingVisualHost();
         double            offset         = 0;
         for (int i = 0; i < beatChars.Length; i++)
         {
             canvasBeat.AddCharacterGlyph(new Point(offset, 0), beatChars[i].ToString());
             offset += beatCharWidths[i];
         }
         //beatTime
         char[]            beatTimeChars      = beatTimeSymbol.ToCharArray();
         double[]          beatTimeCharWidths = beatTimeSymbol.ToCharArray().GetCharsVisualWidth();
         double            beatTimeWidth      = beatTimeCharWidths.Sum();
         DrawingVisualHost canvasBeatTime     = new DrawingVisualHost();
         offset = 0.0;
         for (int i = 0; i < beatTimeChars.Length; i++)
         {
             canvasBeatTime.AddCharacterGlyph(new Point(offset, 0), beatTimeChars[i].ToString());
             offset += beatTimeCharWidths[i];
         }
         //measure legth + align
         itemWidth        = beatWidth > beatTimeWidth ? beatWidth : beatTimeWidth;
         ItemCanvas.Width = itemWidth;
         if (beatWidth > beatTimeWidth)
         {
             Canvas.SetLeft(canvasBeat, 0);
             double shift = (beatWidth - beatTimeWidth) / 2;
             Canvas.SetLeft(canvasBeatTime, shift);
         }
         else
         {
             Canvas.SetLeft(canvasBeatTime, 0);
             double shift = (beatTimeWidth - beatWidth) / 2;
             Canvas.SetLeft(canvasBeat, shift);
         }
         Canvas.SetTop(canvasBeat, staffLine[4]);
         Canvas.SetTop(canvasBeatTime, staffLine[2]);
         ItemCanvas.Children.Add(canvasBeat);
         ItemCanvas.Children.Add(canvasBeatTime);
     }
 }
Ejemplo n.º 7
0
        private void DrawAccidental(NoteMusicXML note, int index, DrawingVisualHost noteVisualHost)
        {
            AccidentalMusicXML accidental          = note.Accidental;
            string             accidentalSymbol    = GetAccidentalSymbolString(accidental.Value);
            double             size                = 1.0;
            double             totalAccidentalSize = 0.0;
            bool hasBracket     = accidental.BracketSpecified ? accidental.Bracket == YesNoMusicXML.yes: false;
            bool hasParentheses = accidental.ParenthesesSpecified ? accidental.Parentheses == YesNoMusicXML.yes: false;

            if (isSmall)
            {
                size = 0.7;
            }
            if (accidental.SizeSpecified)
            {
                size = accidental.Size == SymbolSizeMusicXML.cue ? 0.7 : accidental.Size == SymbolSizeMusicXML.large ? 1.2 : 1.0;
            }
            if (accidental.CautionarySpecified)
            {
                hasParentheses = accidental.Cautionary == YesNoMusicXML.yes;
                //! missing implementation if yes
            }
            //! accidental.Editiorial skipped...

            double accidentalWidth   = DrawingMethods.GetTextWidth(accidentalSymbol, TypeFaces.GetMusicFont(), isSmall);
            double accidentalMargin  = layoutStyle.NotesStyle.AccidentalToNoteSpace.TenthsToWPFUnit();
            double noteHeadYPosition = pitchedValue[index];

            if (hasBracket)
            {
                totalAccidentalSize += 2 * DrawingMethods.GetTextWidth(MusicSymbols.AccidentalBracketL, TypeFaces.GetMusicFont(), size);
            }
            if (hasParentheses)
            {
                totalAccidentalSize += 2 * DrawingMethods.GetTextWidth(MusicSymbols.AccidentalParenthesesL, TypeFaces.GetMusicFont(), size);
            }
            if (hasBracket || hasParentheses)
            {
                string left = hasBracket ? MusicSymbols.AccidentalBracketL : MusicSymbols.AccidentalParenthesesL;
                noteVisualHost.AddCharacterGlyph(new Point(0 - (totalAccidentalSize + accidentalWidth + accidentalMargin), noteHeadYPosition), left, isSmall, color);
                string rigth = hasBracket ? MusicSymbols.AccidentalBracketR : MusicSymbols.AccidentalParenthesesR;
                noteVisualHost.AddCharacterGlyph(new Point(0 - (totalAccidentalSize / 2 + accidentalWidth + accidentalMargin), noteHeadYPosition), accidentalSymbol, isSmall, color);
                noteVisualHost.AddCharacterGlyph(new Point(0 - (totalAccidentalSize / 2) - accidentalMargin, noteHeadYPosition), rigth, isSmall, color);
                SetLeftMargin(totalAccidentalSize + accidentalWidth + accidentalMargin);
            }
            else
            {
                noteVisualHost.AddCharacterGlyph(new Point(0 - accidentalWidth - accidentalMargin, noteHeadYPosition), accidentalSymbol, isSmall, color);
                SetLeftMargin(accidentalWidth + accidentalMargin);
            }
        }
Ejemplo n.º 8
0
        private void DrawFlag()
        {
            bool              isFlagDownwards = stem.IsDirectionDown();
            string            flagSymbol      = MusicSymbols.GetFlag(noteType, isFlagDownwards);
            Point             stemEnd         = stem.GetStemEnd();
            DrawingVisualHost flagHost        = new DrawingVisualHost();

            flagHost.AddCharacterGlyph(stemEnd, flagSymbol, isSmall, color);
            flagHost.Tag = "flag";
            if (!isFlagDownwards)
            {
                itemRightMargin = DrawingMethods.GetTextWidth(flagSymbol, TypeFaces.GetMusicFont());
            }
            AddFlag(flagHost);
        }
Ejemplo n.º 9
0
        private void DrawDots(DrawingVisualHost noteVisualHost, int index)
        {
            double dotPositionY = pitchedValue[index];

            if (pitchedPosition[index] % 2 == 0)
            {
                double sizeFactor = isSmall ? 0.8 : 1.0;
                double shiftUp    = 5.0.TenthsToWPFUnit() * sizeFactor;
                dotPositionY -= shiftUp;
            }
            int    dotCount    = noteItem[index].Dot.Count;
            double noteWidth   = DrawingMethods.GetTextWidth(symbol, TypeFaces.GetMusicFont(), isSmall);
            double dotWidth    = DrawingMethods.GetTextWidth(MusicSymbols.Dot, TypeFaces.GetMusicFont(), isSmall);
            Point  dotPosition = new Point(noteWidth + layoutStyle.NotesStyle.DotStandardOffset.TenthsToWPFUnit(), dotPositionY);

            for (int i = 0; i < dotCount; i++)
            {
                noteVisualHost.AddCharacterGlyph(dotPosition, MusicSymbols.Dot, isSmall, color);
                dotPosition.X += layoutStyle.NotesStyle.DotStandardOffset.TenthsToWPFUnit() + dotWidth;
            }
        }
 protected override void Update()
 {
     GetSymbol();
     GetLine();
     if (IsVisible)
     {
         double tempLine   = _staffLine;
         string tempSymbol = _symbol;
         if (_isEmpty) // used for proper layout spacing, invisible but taking space; //TODO_LATER more test/refactor
         {
             _itemWidth = DrawingMethods.GetTextWidth(MusicSymbols.GClef, TypeFaces.GetMusicFont(), _isAdditional);
             tempSymbol = "";
             tempLine   = 0.0;
         }
         else
         {
             _itemWidth = DrawingMethods.GetTextWidth(_symbol, TypeFaces.GetMusicFont(), _isAdditional);
         }
         DrawingVisualHost clefVisualsHost = new DrawingVisualHost();
         clefVisualsHost.AddCharacterGlyph(new Point(0, tempLine), tempSymbol, _isAdditional, Color);
         ItemCanvas.Children.Clear();
         ItemCanvas.Children.Add(clefVisualsHost);
     }
 }
Ejemplo n.º 11
0
        private void Draw()
        {
            isSmall = noteVisualType == NoteChoiceTypeMusicXML.cue || noteVisualType == NoteChoiceTypeMusicXML.grace;
            DrawingVisualHost noteVisualHost = new DrawingVisualHost();
            int index = 0;

            for (int i = 0; i < noteItem.Count; i++)
            {
                double noteHeadOffset = 0;
                if (i > 0)
                {
                    int maxPitch = pitchedPosition.Values.Max();
                    int stemDir  = maxPitch < 5 ?  -1 : 1;
                    if (Math.Abs(pitchedPosition[index - 1] - pitchedPosition[index]) == 1)
                    {
                        noteHeadOffset = DrawingHelpers.DrawingMethods.GetTextWidth(symbol, TypeFaces.GetMusicFont()) * stemDir;
                    }
                }
                if (noteItem[i].Voice == null)
                {
                    Log.LoggIt.Log($"Missing note voice element, setting to default", Log.LogType.Warning);
                    noteItem[i].Voice = "1"; //! voice set to "1" if null- bugfix
                }
                color = ViewModel.ViewModelLocator.Instance.Main.CurrentLayout.LayoutStyle.Colors[int.Parse(noteItem[i].Voice)];
                noteVisualHost.AddCharacterGlyph(new Point(noteHeadOffset, pitchedValue[index]), symbol, isSmall, color);
                if (noteItem[i].Accidental != null)
                {
                    DrawAccidental(noteItem[i], noteItem.IndexOf(noteItem[i]), noteVisualHost);
                }
                if (hasDots)
                {
                    DrawDots(noteVisualHost, index);
                }
                index++;
            }

            /*foreach (var note in noteItem)
             * {
             *  if (note.Voice == null)
             *  {
             *      Log.LoggIt.Log($"Missing note voice element, setting to default", Log.LogType.Warning);
             *      note.Voice = "1"; //! voice set to "1" if null- bugfix
             *  }
             *  color = ViewModel.ViewModelLocator.Instance.Main.CurrentLayout.LayoutStyle.Colors[int.Parse(note.Voice)];
             *  noteVisualHost.AddCharacterGlyph(new Point(0, pitchedValue[index]), symbol, isSmall, color);
             *  if (note.Accidental != null)
             *  {
             *      DrawAccidental(note, noteItem.IndexOf(note), noteVisualHost);
             *  }
             *  if (hasDots)
             *  {
             *      DrawDots(noteVisualHost, index);
             *  }
             *  index++;
             * }
             */
            itemWidthMin = DrawingMethods.GetTextWidth(symbol, TypeFaces.GetMusicFont(), isSmall);
            itemWidth    = itemWidthMin;
            CheckForLedgerLines();
            if (needLedgerLines)
            {
                Point position     = new Point();
                int   indexLedgers = 0;
                foreach (var ledgerPosition in ledgerLinesPositions)
                {
                    noteVisualHost.AddLedgerLine(new Point(position.X, ledgerLinesPositions[indexLedgers]), itemWidthMin);
                    indexLedgers++;
                }
            }
            ItemCanvas.Children.Add(noteVisualHost);
        }
Ejemplo n.º 12
0
 private static bool Is(this TypeFaces face, TypeFaces flag) => (face & flag) != 0;