Exemple #1
0
        private void CreateScoreInfoGlyphs()
        {
            Logger.Info("ScoreLayout", "Creating score info glyphs");

            var flags = Renderer.Settings.Layout.Get("hideInfo", false) ? HeaderFooterElements.None : HeaderFooterElements.All;
            var score = Renderer.Score;
            var res   = Renderer.RenderingResources;

            ScoreInfoGlyphs = new FastDictionary <HeaderFooterElements, TextGlyph>();
            if (!string.IsNullOrEmpty(score.Title) && (flags & HeaderFooterElements.Title) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.Title] = new TextGlyph(0, 0, score.Title, res.TitleFont, TextAlign.Center);
            }
            if (!string.IsNullOrEmpty(score.SubTitle) && (flags & HeaderFooterElements.SubTitle) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.SubTitle] = new TextGlyph(0, 0, score.SubTitle, res.SubTitleFont, TextAlign.Center);
            }
            if (!string.IsNullOrEmpty(score.Artist) && (flags & HeaderFooterElements.Artist) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.Artist] = new TextGlyph(0, 0, score.Artist, res.SubTitleFont, TextAlign.Center);
            }
            if (!string.IsNullOrEmpty(score.Album) && (flags & HeaderFooterElements.Album) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.Album] = new TextGlyph(0, 0, score.Album, res.SubTitleFont, TextAlign.Center);
            }
            if (!string.IsNullOrEmpty(score.Music) && score.Music == score.Words && (flags & HeaderFooterElements.WordsAndMusic) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.WordsAndMusic] = new TextGlyph(0, 0, "Music and Words by " + score.Words, res.WordsFont, TextAlign.Center);
            }
            else
            {
                if (!string.IsNullOrEmpty(score.Music) && (flags & HeaderFooterElements.Music) != 0)
                {
                    ScoreInfoGlyphs[HeaderFooterElements.Music] = new TextGlyph(0, 0, "Music by " + score.Music, res.WordsFont, TextAlign.Right);
                }
                if (!string.IsNullOrEmpty(score.Words) && (flags & HeaderFooterElements.Words) != 0)
                {
                    ScoreInfoGlyphs[HeaderFooterElements.Words] = new TextGlyph(0, 0, "Words by " + score.Music, res.WordsFont, TextAlign.Left);
                }
            }

            // tuning info
            if (Renderer.Tracks.Length == 1 && !Renderer.Tracks[0].IsPercussion)
            {
                var tuning = Tuning.FindTuning(Renderer.Tracks[0].Tuning);
                if (tuning != null)
                {
                    TuningGlyph = new TuningGlyph(0, 0, Scale, Renderer.RenderingResources, tuning);
                }
            }
        }
Exemple #2
0
        private float LayoutAndRenderScoreInfo(float x, float y, float totalHeight = -1)
        {
            Logger.Debug(Name, "Layouting score info");

            var scale = Scale;
            var res   = Renderer.RenderingResources;

            var centeredGlyphs = new[]
            {
                HeaderFooterElements.Title, HeaderFooterElements.SubTitle, HeaderFooterElements.Artist,
                HeaderFooterElements.Album, HeaderFooterElements.WordsAndMusic
            };

            for (int i = 0; i < centeredGlyphs.Length; i++)
            {
                if (ScoreInfoGlyphs.ContainsKey(centeredGlyphs[i]))
                {
                    var glyph = ScoreInfoGlyphs[centeredGlyphs[i]];
                    glyph.X         = Width / 2f;
                    glyph.Y         = y;
                    glyph.TextAlign = TextAlign.Center;
                    y += glyph.Font.Size;
                }
            }

            bool  musicOrWords       = false;
            float musicOrWordsHeight = 0;

            if (ScoreInfoGlyphs.ContainsKey(HeaderFooterElements.Music))
            {
                var glyph = ScoreInfoGlyphs[HeaderFooterElements.Music];
                glyph.X            = Width - _pagePadding[2];
                glyph.Y            = y;
                glyph.TextAlign    = TextAlign.Right;
                musicOrWords       = true;
                musicOrWordsHeight = glyph.Font.Size;
            }
            if (ScoreInfoGlyphs.ContainsKey(HeaderFooterElements.Words))
            {
                var glyph = ScoreInfoGlyphs[HeaderFooterElements.Words];
                glyph.X            = x;
                glyph.Y            = y;
                glyph.TextAlign    = TextAlign.Left;
                musicOrWords       = true;
                musicOrWordsHeight = glyph.Font.Size;
            }

            if (musicOrWords)
            {
                y += musicOrWordsHeight;
            }

            if (TuningGlyph != null)
            {
                y            += 20 * scale;
                TuningGlyph.X = x;
                TuningGlyph.Y = y;
                y            += TuningGlyph.Height;
            }

            y += 20 * scale;

            var canvas = Renderer.Canvas;

            canvas.BeginRender(Width, y);
            canvas.Color     = res.ScoreInfoColor;
            canvas.TextAlign = TextAlign.Center;
            foreach (var key in ScoreInfoGlyphs)
            {
                ScoreInfoGlyphs[key].Paint(0, 0, canvas);
            }

            if (TuningGlyph != null)
            {
                TuningGlyph.Paint(0, 0, canvas);
            }

            var result = canvas.EndRender();

            Renderer.OnPartialRenderFinished(new RenderFinishedEventArgs
            {
                Width               = Width,
                Height              = y,
                RenderResult        = result,
                TotalWidth          = Width,
                TotalHeight         = totalHeight < 0 ? y : totalHeight,
                FirstMasterBarIndex = -1,
                LastMasterBarIndex  = -1
            });

            return(y);
        }
Exemple #3
0
        private void CreateScoreInfoGlyphs()
        {
            Logger.Info("ScoreLayout", "Creating score info glyphs");

            var flags = Renderer.Settings.Layout.Get("hideInfo", false) ? HeaderFooterElements.None : HeaderFooterElements.All;
            var score = Renderer.Score;
            var res   = Renderer.RenderingResources;

            ScoreInfoGlyphs = new FastDictionary <HeaderFooterElements, TextGlyph>();
            if (!string.IsNullOrEmpty(score.Title) && (flags & HeaderFooterElements.Title) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.Title] = new TextGlyph(0, 0, score.Title, res.TitleFont, TextAlign.Center);
            }
            if (!string.IsNullOrEmpty(score.SubTitle) && (flags & HeaderFooterElements.SubTitle) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.SubTitle] = new TextGlyph(0, 0, score.SubTitle, res.SubTitleFont, TextAlign.Center);
            }
            if (!string.IsNullOrEmpty(score.Artist) && (flags & HeaderFooterElements.Artist) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.Artist] = new TextGlyph(0, 0, score.Artist, res.SubTitleFont, TextAlign.Center);
            }
            if (!string.IsNullOrEmpty(score.Album) && (flags & HeaderFooterElements.Album) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.Album] = new TextGlyph(0, 0, score.Album, res.SubTitleFont, TextAlign.Center);
            }
            if (!string.IsNullOrEmpty(score.Music) && score.Music == score.Words && (flags & HeaderFooterElements.WordsAndMusic) != 0)
            {
                ScoreInfoGlyphs[HeaderFooterElements.WordsAndMusic] = new TextGlyph(0, 0, "Music and Words by " + score.Words, res.WordsFont, TextAlign.Center);
            }
            else
            {
                if (!string.IsNullOrEmpty(score.Music) && (flags & HeaderFooterElements.Music) != 0)
                {
                    ScoreInfoGlyphs[HeaderFooterElements.Music] = new TextGlyph(0, 0, "Music by " + score.Music, res.WordsFont, TextAlign.Right);
                }
                if (!string.IsNullOrEmpty(score.Words) && (flags & HeaderFooterElements.Words) != 0)
                {
                    ScoreInfoGlyphs[HeaderFooterElements.Words] = new TextGlyph(0, 0, "Words by " + score.Words, res.WordsFont, TextAlign.Left);
                }
            }

            if (!Renderer.Settings.Layout.Get("hideTuning", false))
            {
                Model.Staff staffWithTuning = null;
                foreach (var track in Renderer.Tracks)
                {
                    foreach (var staff in track.Staves)
                    {
                        if (staff.StaffKind != StaffKind.Percussion && staff.IsStringed && staff.Tuning.Length > 0)
                        {
                            staffWithTuning = staff;
                            break;
                        }
                    }

                    if (staffWithTuning != null)
                    {
                        break;
                    }
                }

                // tuning info
                if (staffWithTuning != null)
                {
                    var tuning = Tuning.FindTuning(staffWithTuning.Tuning);
                    if (tuning != null)
                    {
                        TuningGlyph = new TuningGlyph(0, 0, Scale, Renderer.RenderingResources, tuning);
                    }
                }
            }
        }