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); } } }
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); }
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); } } } }