diff --git a/Output/Themes/Genius/01_Standard.xml b/Output/Themes/Genius/01_Standard.xml
index 7b5571aa..4b4b7f46 100644
--- a/Output/Themes/Genius/01_Standard.xml
+++ b/Output/Themes/Genius/01_Standard.xml
@@ -317,6 +317,11 @@
VolDown.png
RandomIcon.png
RatingBar.png
+ RatingBar.png
+ RatingBar.png
+ NotesFillLeft.png
+ NotesFillMid.png
+ NotesFillRight.png
PopupBG.png
ScrollUp.png
ScrollDown.png
diff --git a/Output/Themes/Genius/02_Ice_Blue.xml b/Output/Themes/Genius/02_Ice_Blue.xml
index 176242b1..bcfab83f 100644
--- a/Output/Themes/Genius/02_Ice_Blue.xml
+++ b/Output/Themes/Genius/02_Ice_Blue.xml
@@ -317,6 +317,11 @@
VolDown.png
RandomIcon.png
RatingBar.png
+ RatingBar.png
+ RatingBar.png
+ NotesFillLeft.png
+ NotesFillMid.png
+ NotesFillRight.png
PopupBG.png
ScrollUp.png
ScrollDown.png
diff --git a/Output/Themes/Genius/03_Crimson_Red.xml b/Output/Themes/Genius/03_Crimson_Red.xml
index b7c8a237..d9a231c3 100644
--- a/Output/Themes/Genius/03_Crimson_Red.xml
+++ b/Output/Themes/Genius/03_Crimson_Red.xml
@@ -317,6 +317,11 @@
VolDown.png
RandomIcon.png
RatingBar.png
+ RatingBar.png
+ RatingBar.png
+ NotesFillLeft.png
+ NotesFillMid.png
+ NotesFillRight.png
PopupBG.png
ScrollUp.png
ScrollDown.png
diff --git a/Output/Themes/Genius/Screens/ScreenSing.xml b/Output/Themes/Genius/Screens/ScreenSing.xml
index 4a14d583..c4055e06 100644
--- a/Output/Themes/Genius/Screens/ScreenSing.xml
+++ b/Output/Themes/Genius/Screens/ScreenSing.xml
@@ -175,17 +175,6 @@
-0.75
-
- RatingBar
-
-
- 1085
- 410
- 160
- 10
- -0.75
-
-
@@ -208,17 +197,6 @@
-0.75
-
- RatingBar
-
-
- 1085
- 170
- 160
- 10
- -0.75
-
-
@@ -241,17 +219,7 @@
-0.75
-
- RatingBar
-
-
- 1085
- 430
- 160
- 10
- -0.75
-
-
+
@@ -274,17 +242,6 @@
-0.75
-
- RatingBar
-
-
- 1155
- 135
- 85
- 7
- -0.75
-
-
@@ -307,17 +264,6 @@
-0.75
-
- RatingBar
-
-
- 1155
- 305
- 85
- 7
- -0.75
-
-
@@ -340,17 +286,6 @@
-0.75
-
- RatingBar
-
-
- 1155
- 475
- 85
- 7
- -0.75
-
-
@@ -373,17 +308,6 @@
-0.75
-
- RatingBar
-
-
- 471
- 170
- 160
- 10
- -0.75
-
-
@@ -406,17 +330,6 @@
-0.75
-
- RatingBar
-
-
- 471
- 430
- 160
- 10
- -0.75
-
-
@@ -439,17 +352,6 @@
-0.75
-
- RatingBar
-
-
- 1105
- 170
- 160
- 10
- -0.75
-
-
@@ -472,17 +374,6 @@
-0.75
-
- RatingBar
-
-
- 1105
- 430
- 160
- 10
- -0.75
-
-
@@ -505,17 +396,6 @@
-0.75
-
- RatingBar
-
-
- 540
- 135
- 85
- 7
- -0.75
-
-
@@ -538,17 +418,6 @@
-0.75
-
- RatingBar
-
-
- 540
- 305
- 85
- 7
- -0.75
-
-
@@ -571,17 +440,6 @@
-0.75
-
- RatingBar
-
-
- 540
- 475
- 85
- 7
- -0.75
-
-
@@ -604,17 +462,6 @@
-0.75
-
- RatingBar
-
-
- 1175
- 135
- 85
- 7
- -0.75
-
-
@@ -637,17 +484,6 @@
-0.75
-
- RatingBar
-
-
- 1175
- 305
- 85
- 7
- -0.75
-
-
@@ -670,17 +506,6 @@
-0.75
-
- RatingBar
-
-
- 540
- 135
- 85
- 7
- -0.75
-
-
@@ -703,17 +528,6 @@
-0.75
-
- RatingBar
-
-
- 540
- 305
- 85
- 7
- -0.75
-
-
@@ -736,17 +550,6 @@
-0.75
-
- RatingBar
-
-
- 540
- 475
- 85
- 7
- -0.75
-
-
@@ -769,17 +572,6 @@
-0.75
-
- RatingBar
-
-
- 1175
- 135
- 85
- 7
- -0.75
-
-
@@ -802,17 +594,6 @@
-0.75
-
- RatingBar
-
-
- 1175
- 305
- 85
- 7
- -0.75
-
-
@@ -835,17 +616,6 @@
-0.75
-
- RatingBar
-
-
- 1175
- 475
- 85
- 7
- -0.75
-
-
@@ -1915,5 +1685,406 @@
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1085
+ 410
+ 160
+ 10
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1085
+ 170
+ 160
+ 10
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1085
+ 430
+ 160
+ 10
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1155
+ 135
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1155
+ 305
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1155
+ 475
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 471
+ 170
+ 160
+ 10
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 471
+ 430
+ 160
+ 10
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1105
+ 170
+ 160
+ 10
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1105
+ 430
+ 160
+ 10
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 540
+ 135
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 540
+ 305
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 540
+ 475
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1175
+ 135
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1175
+ 305
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 540
+ 135
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 540
+ 305
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 540
+ 475
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1175
+ 135
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1175
+ 305
+ 85
+ 7
+ -0.75
+
+
+
+ RatingBarBackground
+ RatingBarForeground
+ RatingBarProgressLeft
+ RatingBarProgressMid
+ RatingBarProgressRight
+
+
+ Left
+ TR_CONFIG_ON
+ TR_CONFIG_ON
+
+ 1175
+ 475
+ 85
+ 7
+ -0.75
+
+
+
-
\ No newline at end of file
+
diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs
index 45dc2baa..c16d94a3 100644
--- a/Vocaluxe/Screens/CScreenSing.cs
+++ b/Vocaluxe/Screens/CScreenSing.cs
@@ -73,7 +73,8 @@ namespace Vocaluxe.Screens
private string[,] _StaticScores;
private string[,] _StaticAvatars;
- private string[,] _StaticRatingBars;
+
+ private string[,] _ProgressBarsRating;
private const string _ButtonCancel = "ButtonCancel";
private const string _ButtonContinue = "ButtonContinue";
@@ -151,7 +152,10 @@ namespace Vocaluxe.Screens
_StaticPauseBG
};
_BuildStaticStrings(ref statics);
- _ThemeStatics = statics.ToArray();
+
+ var progressbars = new List();
+ _BuildProgressBarStrings(ref progressbars);
+ _ThemeProgressBars = progressbars.ToArray();
_ThemeButtons = new string[] {_ButtonCancel, _ButtonContinue, _ButtonSkip};
_ThemeLyrics = new string[] {_LyricMain, _LyricSub, _LyricMainDuet, _LyricSubDuet, _LyricMainTop, _LyricSubTop};
@@ -832,7 +836,6 @@ namespace Vocaluxe.Screens
{
_StaticScores = new string[CSettings.MaxNumPlayer, CSettings.MaxNumPlayer];
_StaticAvatars = new string[CSettings.MaxNumPlayer, CSettings.MaxNumPlayer];
- _StaticRatingBars = new string[CSettings.MaxNumPlayer, CSettings.MaxNumPlayer];
for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++)
{
@@ -843,11 +846,27 @@ namespace Vocaluxe.Screens
string target = "P" + (player + 1) + "N" + (numplayer + 1);
_StaticScores[player, numplayer] = "StaticScore" + target;
_StaticAvatars[player, numplayer] = "StaticAvatar" + target;
- _StaticRatingBars[player, numplayer] = "StaticRatingBar" + target;
statics.Add(_StaticScores[player, numplayer]);
statics.Add(_StaticAvatars[player, numplayer]);
- statics.Add(_StaticRatingBars[player, numplayer]);
+ }
+ }
+ }
+ }
+
+ private void _BuildProgressBarStrings(ref List progressbars)
+ {
+ _ProgressBarsRating = new string[CSettings.MaxNumPlayer, CSettings.MaxNumPlayer];
+
+ for (int numplayer = 0; numplayer < CSettings.MaxNumPlayer; numplayer++)
+ {
+ for (int player = 0; player < CSettings.MaxNumPlayer; player++)
+ {
+ if (player <= numplayer)
+ {
+ string target = "P" + (player + 1) + "N" + (numplayer + 1);
+ _ProgressBarsRating[player, numplayer] = "ProgressBarRating" + target;
+ progressbars.Add(_ProgressBarsRating[player, numplayer]);
}
}
}
@@ -906,7 +925,7 @@ namespace Vocaluxe.Screens
_Statics[_StaticAvatars[player, numplayer]].Visible = isVisible &&
(CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_BOTH ||
CConfig.Config.Theme.PlayerInfo == EPlayerInfo.TR_CONFIG_PLAYERINFO_AVATAR);
- _Statics[_StaticRatingBars[player, numplayer]].Visible = isVisible;
+ _ProgressBars[_ProgressBarsRating[player, numplayer]].Visible = isVisible;
}
}
@@ -1384,7 +1403,7 @@ namespace Vocaluxe.Screens
{
for (int i = 0; i < CGame.NumPlayers; i++)
{
- _Statics[_StaticRatingBars[i, CGame.NumPlayers - 1]].ModW = _Statics[_StaticRatingBars[i, CGame.NumPlayers - 1]].Rect.W * (float)CGame.Players[i].Rating;
+ _ProgressBars[_ProgressBarsRating[i, CGame.NumPlayers - 1]].Progress = (float)CGame.Players[i].Rating;
}
}
}
diff --git a/VocaluxeLib/Menu/CInteraction.cs b/VocaluxeLib/Menu/CInteraction.cs
index b2214075..354b299f 100644
--- a/VocaluxeLib/Menu/CInteraction.cs
+++ b/VocaluxeLib/Menu/CInteraction.cs
@@ -30,7 +30,8 @@ namespace VocaluxeLib.Menu
NameSelection,
Equalizer,
Playlist,
- ParticleEffect
+ ParticleEffect,
+ ProgressBar
}
public class CInteraction
diff --git a/VocaluxeLib/Menu/CMenu.cs b/VocaluxeLib/Menu/CMenu.cs
index 27b6d316..1dd7d049 100644
--- a/VocaluxeLib/Menu/CMenu.cs
+++ b/VocaluxeLib/Menu/CMenu.cs
@@ -51,6 +51,7 @@ namespace VocaluxeLib.Menu
[XmlArray("Playlists")] public List Playlists;
[XmlArray("ParticleEffects")] public List ParticleEffects;
[XmlArray("ScreenSettings")] public List ScreenSettings;
+ [XmlArray("ProgressBars")] public List ProgressBars;
}
struct SZSort
@@ -82,6 +83,7 @@ namespace VocaluxeLib.Menu
protected string[] _ThemePlaylists;
protected string[] _ThemeParticleEffects;
protected string[] _ThemeScreenSettings;
+ protected string[] _ThemeProgressBars;
protected readonly Dictionary _ScreenSettings = new Dictionary();
// ReSharper restore MemberCanBePrivate.Global
@@ -117,6 +119,7 @@ namespace VocaluxeLib.Menu
_ThemePlaylists = null;
_ThemeParticleEffects = null;
_ThemeScreenSettings = null;
+ _ThemeProgressBars = null;
}
protected virtual void _OnSongMenuChanged()
@@ -158,7 +161,7 @@ namespace VocaluxeLib.Menu
private static readonly string[] _AllowedMissing = new string[]
{
"Backgrounds", "Statics", "Texts", "Buttons", "SongMenus", "Lyrics", "SelectSlides", "SingNotes",
- "NameSelections", "Equalizers", "Playlists", "ParticleEffects", "ScreenSettings"
+ "NameSelections", "Equalizers", "Playlists", "ParticleEffects", "ScreenSettings", "ProgressBars"
};
public override void HandleError(CXmlException e)
@@ -211,6 +214,9 @@ namespace VocaluxeLib.Menu
foreach (SThemePlaylist pl in Theme.Playlists)
_AddPlaylist(new CPlaylist(pl, PartyModeID), pl.Name);
+ foreach (SThemeProgressBar pb in Theme.ProgressBars)
+ _AddProgressBar(new CProgressBar(pb, PartyModeID), pb.Name);
+
foreach (SThemeScreenSetting ss in Theme.ScreenSettings)
_AddScreenSetting(new CScreenSetting(ss, PartyModeID), ss.Name);
@@ -351,6 +357,7 @@ namespace VocaluxeLib.Menu
_AddThemeablesToList(Theme.NameSelections, _NameSelections);
_AddThemeablesToList(Theme.ParticleEffects, _ParticleEffects);
_AddThemeablesToList(Theme.Playlists, _Playlists);
+ _AddThemeablesToList(Theme.ProgressBars, _ProgressBars);
_AddThemeablesToList(Theme.ScreenSettings, _ScreenSettings.Values);
_AddThemeablesToList(Theme.SelectSlides, _SelectSlides);
_AddThemeablesToList(Theme.Statics, _Statics);
@@ -471,6 +478,16 @@ namespace VocaluxeLib.Menu
return new CParticleEffect(PartyModeID, maxNumber, color, area, texture, size, type);
}
+ public CProgressBar GetNewProgressBar()
+ {
+ return new CProgressBar(PartyModeID);
+ }
+
+ public CProgressBar GetNewProgressBar(CProgressBar pb)
+ {
+ return new CProgressBar(pb);
+ }
+
// ReSharper restore MemberCanBeProtected.Global
// ReSharper restore UnusedMember.Global
#endregion Create Elements
diff --git a/VocaluxeLib/Menu/CObjectInteractions.cs b/VocaluxeLib/Menu/CObjectInteractions.cs
index 2d73dd4a..bf83b4e5 100644
--- a/VocaluxeLib/Menu/CObjectInteractions.cs
+++ b/VocaluxeLib/Menu/CObjectInteractions.cs
@@ -46,6 +46,7 @@ namespace VocaluxeLib.Menu
protected readonly COrderedDictionaryLite _Equalizers;
protected readonly COrderedDictionaryLite _Playlists;
protected readonly COrderedDictionaryLite _ParticleEffects;
+ protected readonly COrderedDictionaryLite _ProgressBars;
private readonly SColorF _HighlightColor = new SColorF(1, 0, 0, 0);
protected CObjectInteractions()
@@ -62,6 +63,7 @@ namespace VocaluxeLib.Menu
_Equalizers = new COrderedDictionaryLite(this);
_Playlists = new COrderedDictionaryLite(this);
_ParticleEffects = new COrderedDictionaryLite(this);
+ _ProgressBars = new COrderedDictionaryLite(this);
}
public virtual void Init()
@@ -86,6 +88,7 @@ namespace VocaluxeLib.Menu
_Equalizers.Clear();
_Playlists.Clear();
_ParticleEffects.Clear();
+ _ProgressBars.Clear();
}
private void _SetSelected(int newSelection)
@@ -297,6 +300,8 @@ namespace VocaluxeLib.Menu
return _Playlists[element.Num];
case EType.ParticleEffect:
return _ParticleEffects[element.Num];
+ case EType.ProgressBar:
+ return _ProgressBars[element.Num];
}
throw new ArgumentException("Invalid element type: " + element.Type);
}
@@ -401,6 +406,11 @@ namespace VocaluxeLib.Menu
{
_AddElement(_ParticleEffects.Add(pe, key), EType.ParticleEffect);
}
+
+ protected void _AddProgressBar(CProgressBar pb, String key = null)
+ {
+ _AddElement(_ProgressBars.Add(pb, key), EType.ProgressBar);
+ }
#endregion Element-Adding
#region InteractionHandling
diff --git a/VocaluxeLib/Menu/CProgressBar.cs b/VocaluxeLib/Menu/CProgressBar.cs
new file mode 100644
index 00000000..795e0b66
--- /dev/null
+++ b/VocaluxeLib/Menu/CProgressBar.cs
@@ -0,0 +1,437 @@
+#region license
+// This file is part of Vocaluxe.
+//
+// Vocaluxe is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Vocaluxe is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Vocaluxe. If not, see .
+#endregion
+
+using System;
+using System.Diagnostics;
+using System.Xml.Serialization;
+using VocaluxeLib.Draw;
+using VocaluxeLib.Xml;
+
+namespace VocaluxeLib.Menu
+{
+ [XmlType("ProgressBar")]
+ public struct SThemeProgressBar
+ {
+ [XmlAttribute(AttributeName = "Name")] public string Name;
+ public string SkinBackground;
+ public string SkinForeground;
+ public string SkinProgressLeft;
+ public string SkinProgressMid;
+ public string SkinProgressRight;
+ public SThemeColor ColorBackground;
+ public SThemeColor ColorForeground;
+ public EDirection Direction;
+ public EOffOn AnimateMovement;
+ public EOffOn AnimateColoring;
+ public SRectF Rect;
+ public SReflection? Reflection;
+ }
+
+ public sealed class CProgressBar : CMenuElementBase, IMenuElement, IThemeable
+ {
+ private readonly int _PartyModeID;
+
+ private SThemeProgressBar _Theme;
+
+ public string GetThemeName()
+ {
+ return _Theme.Name;
+ }
+
+ public bool ThemeLoaded { get; private set; }
+
+ public bool Selectable
+ {
+ get { return false; }
+ }
+
+ private CTextureRef _TextureBackground;
+ public CTextureRef TextureBackground
+ {
+ get { return _TextureBackground ?? CBase.Themes.GetSkinTexture(_Theme.SkinBackground, _PartyModeID); }
+
+ set { _TextureBackground = value; }
+ }
+
+ private CTextureRef _TextureForeground;
+ public CTextureRef TextureForeground
+ {
+ get { return _TextureForeground ?? CBase.Themes.GetSkinTexture(_Theme.SkinForeground, _PartyModeID); }
+
+ set { _TextureForeground = value; }
+ }
+
+ private CTextureRef _TextureProgressLeft;
+ public CTextureRef TextureProgressLeft
+ {
+ get { return _TextureProgressLeft ?? CBase.Themes.GetSkinTexture(_Theme.SkinProgressLeft, _PartyModeID); }
+
+ set { _TextureProgressLeft = value; }
+ }
+
+ private CTextureRef _TextureProgressMid;
+ public CTextureRef TextureProgressMid
+ {
+ get { return _TextureProgressMid ?? CBase.Themes.GetSkinTexture(_Theme.SkinProgressMid, _PartyModeID); }
+
+ set { _TextureProgressMid = value; }
+ }
+
+ private CTextureRef _TextureProgressRight;
+ public CTextureRef TextureProgressRight
+ {
+ get { return _TextureProgressRight ?? CBase.Themes.GetSkinTexture(_Theme.SkinProgressRight, _PartyModeID); }
+
+ set { _TextureProgressRight = value; }
+ }
+
+ public SColorF ColorBackground;
+ public SColorF ColorForeground;
+
+ public bool Reflection;
+ public float ReflectionSpace;
+ public float ReflectionHeight;
+
+ public float Alpha = 1;
+
+ private float _ProgressTarget;
+ public float Progress
+ {
+ get { return _ProgressTarget; }
+ set
+ {
+ if (value != _ProgressTarget)
+ _UpdateProgress();
+
+ _ProgressTarget = value;
+ }
+ }
+ private float _ProgressCurrent;
+
+ private SColorF _ColorProgressCurrent;
+ private SColorF _ColorProgressTarget;
+
+ private SRectF _RectProgressBegin;
+ private SRectF _RectProgressMid;
+ private SRectF _RectProgressEnd;
+
+ private CTextureRef _TextureProgressBegin;
+ private CTextureRef _TextureProgressEnd;
+
+ public CProgressBar(int partyModeID)
+ {
+ _PartyModeID = partyModeID;
+ }
+
+ public CProgressBar(CProgressBar pb)
+ {
+ _PartyModeID = pb._PartyModeID;
+
+ _TextureBackground = pb.TextureBackground;
+ _TextureForeground = pb.TextureForeground;
+ _TextureProgressLeft = pb.TextureProgressLeft;
+ _TextureProgressMid = pb._TextureProgressMid;
+ _TextureProgressRight = pb._TextureProgressRight;
+
+ ColorBackground = pb.ColorBackground;
+ ColorForeground = pb.ColorForeground;
+
+ MaxRect = pb.MaxRect;
+ Reflection = pb.Reflection;
+ ReflectionSpace = pb.ReflectionHeight;
+ ReflectionHeight = pb.ReflectionSpace;
+
+ Alpha = pb.Alpha;
+ Visible = pb.Visible;
+ }
+
+ public CProgressBar(SThemeProgressBar theme, int partyModeID)
+ {
+ _PartyModeID = partyModeID;
+ _Theme = theme;
+ _UpdateProgress();
+ ThemeLoaded = true;
+ }
+
+ public bool LoadTheme(string xmlPath, string elementName, CXmlReader xmlReader)
+ {
+ //Will be removed
+ return false;
+ }
+
+ public void Draw()
+ {
+ Draw(1f);
+ }
+
+ public void Draw(float scale = 1f, float zModify = 0f, bool forceDraw = false)
+ {
+ if (scale <= 0)
+ return;
+
+ if (Visible || forceDraw || (CBase.Settings.GetProgramState() == EProgramState.EditTheme))
+ {
+ /**
+ //Draw background
+ SColorF color = new SColorF(ColorBackground.R, ColorBackground.G, ColorBackground.B, ColorBackground.A * Alpha);
+ if (_TextureBackground != null)
+ {
+ CBase.Drawing.DrawTexture(_TextureBackground, Rect, color);
+ if (Reflection)
+ CBase.Drawing.DrawTextureReflection(_TextureBackground, Rect, color, Rect, ReflectionSpace, ReflectionHeight);
+ }
+ else
+ CBase.Drawing.DrawRect(ColorBackground, Rect);
+ **/
+ //Draw progress
+ if (_TextureProgressBegin != null)
+ {
+ CBase.Drawing.DrawTexture(_TextureProgressBegin, _RectProgressBegin, _ColorProgressCurrent);
+ if (Reflection)
+ CBase.Drawing.DrawTextureReflection(_TextureProgressBegin, _RectProgressBegin, _ColorProgressCurrent, _RectProgressBegin, ReflectionSpace, ReflectionHeight);
+ }
+ else
+ CBase.Drawing.DrawRect(_ColorProgressCurrent, _RectProgressBegin);
+
+ if (_TextureProgressMid != null)
+ {
+ CBase.Drawing.DrawTexture(_TextureProgressMid, _RectProgressMid, _ColorProgressCurrent);
+ if (Reflection)
+ CBase.Drawing.DrawTextureReflection(_TextureProgressMid, _RectProgressMid, _ColorProgressCurrent, _RectProgressMid, ReflectionSpace, ReflectionHeight);
+ }
+ else
+ CBase.Drawing.DrawRect(_ColorProgressCurrent, _RectProgressMid);
+
+ if (_TextureProgressEnd != null)
+ {
+ CBase.Drawing.DrawTexture(_TextureProgressEnd, _RectProgressEnd, _ColorProgressCurrent);
+ if (Reflection)
+ CBase.Drawing.DrawTextureReflection(_TextureProgressEnd, _RectProgressEnd, _ColorProgressCurrent, _RectProgressEnd, ReflectionSpace, ReflectionHeight);
+ }
+ else
+ CBase.Drawing.DrawRect(_ColorProgressCurrent, _RectProgressEnd);
+ /*
+ //Width-related variables rounded and then floored to prevent 1px gaps in progress bar
+ SRectF rect = new SRectF(Rect.X, Rect.Y, (float)Math.Round(Rect.W), (float)Math.Round(Rect.H), Rect.Z);
+
+ int dh = (int)((1f - scale) * rect.H / 2);
+ int dw = (int)Math.Min(dh, rect.W / 2);
+
+ var progressRect = new SRectF(rect.X + dw, rect.Y + dh, rect.W - 2 * dw, rect.H - 2 * dh, rect.Z);
+
+ //Width of each of the ends (round parts)
+ //Need 2 of them so use minimum
+ int endsW = (int)Math.Min(progressRect.H * _TextureProgressLeft.OrigAspect, progressRect.W / 2);
+
+ CBase.Drawing.DrawTexture(_TextureProgressLeft, new SRectF(progressRect.X, progressRect.Y, endsW, progressRect.H, progressRect.Z), color);
+
+ SRectF middleRect = new SRectF(progressRect.X + endsW, progressRect.Y, progressRect.W - 2 * endsW, progressRect.H, progressRect.Z);
+
+ int midW = (int)Math.Round(progressRect.H * _TextureProgressMid.OrigAspect);
+
+ int midCount = (int)middleRect.W / midW;
+
+ for (int i = 0; i < midCount; ++i)
+ {
+ CBase.Drawing.DrawTexture(_TextureProgressMid, new SRectF(middleRect.X + (i * midW), progressRect.Y, midW, progressRect.H, progressRect.Z), color);
+ }
+
+ SRectF lastMidRect = new SRectF(middleRect.X + midCount * midW, progressRect.Y, middleRect.W - (midCount * midW), progressRect.H, progressRect.Z);
+
+ CBase.Drawing.DrawTexture(_TextureProgressMid, new SRectF(middleRect.X + (midCount * midW), middleRect.Y, midW, middleRect.H, middleRect.Z), color, lastMidRect);
+
+ CBase.Drawing.DrawTexture(_TextureProgressRight, new SRectF(progressRect.X + progressRect.W - endsW, progressRect.Y, endsW, progressRect.H, progressRect.Z), color);
+ */
+ //Draw foreground
+ /**
+ color = new SColorF(ColorForeground.R, ColorForeground.G, ColorForeground.B, ColorForeground.A * Alpha);
+ if (_TextureForeground != null)
+ {
+ CBase.Drawing.DrawTexture(_TextureForeground, Rect, color);
+ if (Reflection)
+ CBase.Drawing.DrawTextureReflection(_TextureForeground, Rect, color, Rect, ReflectionSpace, ReflectionHeight);
+ }
+ else
+ CBase.Drawing.DrawRect(ColorForeground, Rect);
+ */
+ }
+
+ /*
+ var color = new SColorF(Color.R, Color.G, Color.B, Color.A * Alpha);
+ if (Visible || forceDraw || (CBase.Settings.GetProgramState() == EProgramState.EditTheme))
+ {
+ if (texture != null)
+ {
+ CBase.Drawing.DrawTexture(texture, rect, color, bounds);
+ if (Reflection)
+ CBase.Drawing.DrawTextureReflection(texture, rect, color, bounds, ReflectionSpace, ReflectionHeight);
+ }
+ else
+ CBase.Drawing.DrawRect(color, rect);
+ }*/
+
+ if (Selected && (CBase.Settings.GetProgramState() == EProgramState.EditTheme))
+ CBase.Drawing.DrawRect(new SColorF(1f, 1f, 1f, 0.5f), Rect);
+ }
+
+ public void UnloadSkin() {}
+
+ public void LoadSkin()
+ {
+ if (!ThemeLoaded)
+ return;
+ _Theme.ColorBackground.Get(_PartyModeID, out ColorBackground);
+ _Theme.ColorForeground.Get(_PartyModeID, out ColorForeground);
+
+ TextureBackground = CBase.Themes.GetSkinTexture(_Theme.SkinBackground, _PartyModeID);
+ TextureForeground = CBase.Themes.GetSkinTexture(_Theme.SkinForeground, _PartyModeID);
+ TextureProgressLeft = CBase.Themes.GetSkinTexture(_Theme.SkinProgressLeft, _PartyModeID);
+ TextureProgressMid = CBase.Themes.GetSkinTexture(_Theme.SkinProgressMid, _PartyModeID);
+ TextureProgressRight = CBase.Themes.GetSkinTexture(_Theme.SkinProgressRight, _PartyModeID);
+
+ MaxRect = _Theme.Rect;
+ Reflection = _Theme.Reflection.HasValue;
+ if (Reflection)
+ {
+ Debug.Assert(_Theme.Reflection != null);
+ ReflectionSpace = _Theme.Reflection.Value.Space;
+ ReflectionHeight = _Theme.Reflection.Value.Height;
+ }
+ }
+
+ public void ReloadSkin()
+ {
+ UnloadSkin();
+ LoadSkin();
+ }
+
+ public object GetTheme()
+ {
+ return _Theme;
+ }
+
+ private void _UpdateProgress()
+ {
+ _ColorProgressCurrent = new SColorF(1, 1, 1, 1);
+ _UpdateProgressLeft();
+ _UpdateProgressMid();
+ _UpdateProgressRight();
+ }
+
+ private void _UpdateProgressLeft()
+ {
+ switch (_Theme.Direction)
+ {
+ case EDirection.Right:
+ _RectProgressBegin = new SRectF(Rect.X, Rect.Y, Rect.H, Rect.H, Rect.Z);
+ _TextureProgressBegin = _TextureProgressLeft;
+ break;
+
+ case EDirection.Up:
+ _RectProgressBegin = new SRectF(Rect.X, Rect.Y + Rect.H - Rect.W, Rect.W, Rect.W, Rect.Z);
+ _TextureProgressBegin = _TextureProgressRight;
+ break;
+
+ case EDirection.Left:
+ _RectProgressBegin = new SRectF(Rect.X + Rect.W - Rect.H, Rect.Y, Rect.H, Rect.H, Rect.Z);
+ _TextureProgressBegin = _TextureProgressRight;
+ break;
+
+ case EDirection.Down:
+ _RectProgressBegin = new SRectF(Rect.X, Rect.Y, Rect.W, Rect.W, Rect.Z);
+ _TextureProgressBegin = _TextureProgressLeft;
+ break;
+ }
+ }
+
+ private void _UpdateProgressMid()
+ {
+ _ProgressCurrent = _ProgressTarget;
+ switch (_Theme.Direction)
+ {
+ case EDirection.Right:
+ _RectProgressMid = new SRectF(Rect.X + Rect.H, Rect.Y, (Rect.W - 2 * Rect.H) * _ProgressCurrent, Rect.H, Rect.Z);
+ break;
+
+ case EDirection.Up:
+ float newHeight = (Rect.H - 2 * Rect.W) * _ProgressCurrent;
+ _RectProgressMid = new SRectF(Rect.X, Rect.Y + (Rect.H - Rect.W) - newHeight, Rect.W, newHeight, Rect.Z);
+ break;
+
+ case EDirection.Left:
+ float newWidth = (Rect.W - 2 * Rect.H) * _ProgressCurrent;
+ _RectProgressMid = new SRectF(Rect.X + (Rect.W - Rect.H) - newWidth, Rect.Y, newWidth, Rect.H, Rect.Z);
+ break;
+
+ case EDirection.Down:
+ _RectProgressMid = new SRectF(Rect.X, Rect.Y, (Rect.H - 2 * Rect.W) * _ProgressCurrent, Rect.W, Rect.Z);
+ break;
+ }
+ }
+
+ private void _UpdateProgressRight()
+ {
+ switch (_Theme.Direction)
+ {
+ case EDirection.Right:
+ _RectProgressEnd = new SRectF(_RectProgressMid.X + _RectProgressMid.W, Rect.Y, Rect.H, Rect.H, Rect.Z);
+ _TextureProgressEnd = _TextureProgressRight;
+ break;
+
+ case EDirection.Up:
+ _RectProgressEnd = new SRectF(Rect.X, _RectProgressMid.Y + Rect.W, Rect.W, Rect.W, Rect.Z);
+ _TextureProgressEnd = _TextureProgressLeft;
+ break;
+
+ case EDirection.Left:
+ _RectProgressEnd = new SRectF(_RectProgressMid.X - Rect.H, Rect.Y, Rect.H, Rect.H, Rect.Z);
+ _TextureProgressEnd = _TextureProgressLeft;
+ break;
+
+ case EDirection.Down:
+ _RectProgressEnd = new SRectF(Rect.X, _RectProgressMid.Y + _RectProgressMid.H, Rect.W, Rect.W, Rect.Z);
+ _TextureProgressEnd = _TextureProgressRight;
+ break;
+ }
+ }
+
+ #region ThemeEdit
+ public void MoveElement(int stepX, int stepY)
+ {
+ X += stepX;
+ Y += stepY;
+
+ _Theme.Rect.X += stepX;
+ _Theme.Rect.Y += stepY;
+ }
+
+ public void ResizeElement(int stepW, int stepH)
+ {
+ W += stepW;
+ if (W <= 0)
+ W = 1;
+
+ H += stepH;
+ if (H <= 0)
+ H = 1;
+
+ _Theme.Rect.W = Rect.W;
+ _Theme.Rect.H = Rect.H;
+ }
+ #endregion ThemeEdit
+ }
+}
\ No newline at end of file
diff --git a/VocaluxeLib/VocaluxeLib.csproj b/VocaluxeLib/VocaluxeLib.csproj
index 5222c389..2950a6ed 100644
--- a/VocaluxeLib/VocaluxeLib.csproj
+++ b/VocaluxeLib/VocaluxeLib.csproj
@@ -105,6 +105,7 @@
+