From 4138470d6b1e1c460355fb771c13f3679cba5454 Mon Sep 17 00:00:00 2001 From: Flamefire Date: Wed, 17 Dec 2014 21:06:06 +0100 Subject: [PATCH] Fix graphic glitches with sing notes --- VocaluxeLib/Menu/SingNotes/CSingNotes.cs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs index 4d072af0..71c09fdc 100644 --- a/VocaluxeLib/Menu/SingNotes/CSingNotes.cs +++ b/VocaluxeLib/Menu/SingNotes/CSingNotes.cs @@ -17,6 +17,8 @@ using System; using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; using System.Xml.Serialization; using VocaluxeLib.Xml; @@ -56,6 +58,12 @@ namespace VocaluxeLib.Menu.SingNotes public readonly List PlayerNotes = new List(); + private SRectF _Rect; + public override SRectF Rect + { + get { return _Rect; } + } + public bool Selectable { get { return false; } @@ -143,6 +151,16 @@ namespace VocaluxeLib.Menu.SingNotes PlayerNotes.Clear(); for (int p = 0; p < numPlayers; p++) PlayerNotes.Add(new CNoteBars(_PartyModeID, p, _BarPos[p, numPlayers - 1], _Theme)); + if (numPlayers == 0) + _Rect = new SRectF(0, 0, 0, 0, Rect.Z); + else + { + _Rect.X = PlayerNotes.Select(bp => bp.Rect.X).Min(); + _Rect.Y = PlayerNotes.Select(bp => bp.Rect.X).Min(); + _Rect.Right = PlayerNotes.Select(bp => bp.Rect.Right).Max(); + _Rect.Bottom = PlayerNotes.Select(bp => bp.Rect.Bottom).Max(); + _Rect.Z = PlayerNotes.Select(bp => bp.Rect.Z).Average(); + } } public void Draw() @@ -155,6 +173,12 @@ namespace VocaluxeLib.Menu.SingNotes public void LoadSkin() { + Debug.Assert(_Theme.BarPos.Length > 0); + X = _Theme.BarPos.Select(bp => bp.Rect.X).Min(); + Y = _Theme.BarPos.Select(bp => bp.Rect.X).Min(); + W = X - _Theme.BarPos.Select(bp => bp.Rect.Right).Max(); + H = Y - _Theme.BarPos.Select(bp => bp.Rect.Bottom).Max(); + Z = _Theme.BarPos.Select(bp => bp.Rect.Z).Average(); foreach (SBarPosition bp in _Theme.BarPos) { int n = Int32.Parse(bp.Name.Substring(3, 1)) - 1;