diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsLyrics.xml b/Output/Themes/Ambient/Screens/ScreenOptionsLyrics.xml
index 72cd3bdb..0276de59 100644
--- a/Output/Themes/Ambient/Screens/ScreenOptionsLyrics.xml
+++ b/Output/Themes/Ambient/Screens/ScreenOptionsLyrics.xml
@@ -1,7 +1,7 @@
- 1
+ 2
Video
@@ -111,7 +111,7 @@
Outline
- TR_SCREENOLYRICS_ONTOP
+ TR_SCREENOLYRICS_POSITION
@@ -240,7 +240,7 @@
4
-
+
Invisible
@@ -306,6 +306,6 @@
Bold
2
-
+
-
\ No newline at end of file
+
diff --git a/Output/Themes/Changelog/Changelog_ScreenOptionsLyrics.txt b/Output/Themes/Changelog/Changelog_ScreenOptionsLyrics.txt
index 8af47a1e..2c584a57 100644
--- a/Output/Themes/Changelog/Changelog_ScreenOptionsLyrics.txt
+++ b/Output/Themes/Changelog/Changelog_ScreenOptionsLyrics.txt
@@ -1,5 +1,7 @@
ScreenOptionsSound
-
+++++++++++
+Version 2:
+Rename to
++++++++++
Version 1:
diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs
index f15bb95d..af26eae3 100644
--- a/Vocaluxe/Base/CConfig.cs
+++ b/Vocaluxe/Base/CConfig.cs
@@ -93,7 +93,7 @@ namespace Vocaluxe.Base
public static int NumPlayer = 2;
public static EOffOn Tabs = EOffOn.TR_CONFIG_OFF;
public static string Language = "English";
- public static EOffOn LyricsOnTop = EOffOn.TR_CONFIG_OFF;
+ public static ELyricsPosition LyricsPosition = ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTTOM;
public static readonly string[] Players = new string[CSettings.MaxNumPlayer];
public static float MinLineBreakTime = 0.1f; //Minimum time to show the text before it is (to be) sung (if possible)
@@ -221,7 +221,7 @@ namespace Vocaluxe.Base
xmlReader.TryGetIntValue("//root/Game/NumPlayer", ref NumPlayer);
xmlReader.TryGetEnumValue("//root/Game/Tabs", ref Tabs);
xmlReader.GetValue("//root/Game/Language", out Language, Language);
- xmlReader.TryGetEnumValue("//root/Game/LyricsOnTop", ref LyricsOnTop);
+ xmlReader.TryGetEnumValue("//root/Game/LyricsOnTop", ref LyricsPosition);
xmlReader.TryGetFloatValue("//root/Game/MinLineBreakTime", ref MinLineBreakTime);
if ((ScoreAnimationTime > 0 && ScoreAnimationTime < 1) || ScoreAnimationTime < 0)
@@ -461,8 +461,8 @@ namespace Vocaluxe.Base
writer.WriteComment("Order songs in tabs: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn))));
writer.WriteElementString("Tabs", Enum.GetName(typeof(EOffOn), Tabs));
- writer.WriteComment("Lyrics also on Top of screen: " + CHelper.ListStrings(Enum.GetNames(typeof(EOffOn))));
- writer.WriteElementString("LyricsOnTop", Enum.GetName(typeof(EOffOn), LyricsOnTop));
+ writer.WriteComment("Lyrics also on Top of screen: " + CHelper.ListStrings(Enum.GetNames(typeof(ELyricsPosition))));
+ writer.WriteElementString("LyricsOnTop", Enum.GetName(typeof(ELyricsPosition), LyricsPosition));
writer.WriteComment("MinLineBreakTime: Value >= 0 in s. Minimum time the text is shown before it is to be sung");
writer.WriteElementString("MinLineBreakTime", MinLineBreakTime.ToString());
diff --git a/Vocaluxe/Screens/CScreenOptionsLyrics.cs b/Vocaluxe/Screens/CScreenOptionsLyrics.cs
index 718b9b2d..029923e2 100644
--- a/Vocaluxe/Screens/CScreenOptionsLyrics.cs
+++ b/Vocaluxe/Screens/CScreenOptionsLyrics.cs
@@ -28,11 +28,11 @@ namespace Vocaluxe.Screens
// Version number for theme files. Increment it, if you've changed something on the theme files!
protected override int _ScreenVersion
{
- get { return 1; }
+ get { return 2; }
}
private const string _SelectSlideLyricStyle = "SelectSlideLyricStyle";
- private const string _SelectSlideLyricsOnTop = "SelectSlideLyricsOnTop";
+ private const string _SelectSlideLyricsPosition = "SelectSlideLyricsPosition";
private const string _ButtonExit = "ButtonExit";
@@ -41,14 +41,14 @@ namespace Vocaluxe.Screens
base.Init();
_ThemeButtons = new string[] {_ButtonExit};
- _ThemeSelectSlides = new string[] {_SelectSlideLyricStyle, _SelectSlideLyricsOnTop};
+ _ThemeSelectSlides = new string[] {_SelectSlideLyricStyle, _SelectSlideLyricsPosition};
}
public override void LoadTheme(string xmlPath)
{
base.LoadTheme(xmlPath);
_SelectSlides[_SelectSlideLyricStyle].SetValues((int)CConfig.LyricStyle);
- _SelectSlides[_SelectSlideLyricsOnTop].SetValues((int)CConfig.LyricsOnTop);
+ _SelectSlides[_SelectSlideLyricsPosition].SetValues((int)CConfig.LyricsPosition);
}
public override bool HandleInput(SKeyEvent keyEvent)
@@ -122,7 +122,7 @@ namespace Vocaluxe.Screens
private void _SaveConfig()
{
- CConfig.LyricsOnTop = (EOffOn)_SelectSlides[_SelectSlideLyricsOnTop].Selection;
+ CConfig.LyricsPosition = (ELyricsPosition)_SelectSlides[_SelectSlideLyricsPosition].Selection;
CConfig.LyricStyle = (ELyricStyle)_SelectSlides[_SelectSlideLyricStyle].Selection;
CConfig.SaveConfig();
}
diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs
index 21aff197..88e61824 100644
--- a/Vocaluxe/Screens/CScreenSing.cs
+++ b/Vocaluxe/Screens/CScreenSing.cs
@@ -649,6 +649,7 @@ namespace Vocaluxe.Screens
}
}
_SetDuetLyricsVisibility(song.IsDuet);
+ _SetNormalLyricsVisibility();
for (int p = 0; p < CGame.NumPlayer; p++)
_NoteLines[p] = _SingNotes[_SingBars].AddPlayer(_SingNotes[_SingBars].BarPos[p, CGame.NumPlayer - 1], CTheme.GetPlayerColor(p + 1), p);
@@ -688,13 +689,23 @@ namespace Vocaluxe.Screens
}
else
{
- bool lyricsOnTop = (CGame.NumPlayer != 1) && CConfig.LyricsOnTop == EOffOn.TR_CONFIG_ON;
+ bool lyricsOnTop = CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_TOP
+ || CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_BOTH
+ || (CConfig.LyricsPosition == ELyricsPosition.TR_CONFIG_LYRICSPOSITION_DYNAMIC && (CGame.NumPlayer > 2 && CGame.NumPlayer != 4));
_Lyrics[_LyricMainTop].Visible = lyricsOnTop;
_Lyrics[_LyricSubTop].Visible = lyricsOnTop;
_Statics[_StaticLyricsTop].Visible = lyricsOnTop;
}
}
+ private void _SetNormalLyricsVisibility()
+ {
+ bool visible = CConfig.LyricsPosition != ELyricsPosition.TR_CONFIG_LYRICSPOSITION_TOP;
+ _Lyrics[_LyricMain].Visible = visible;
+ _Lyrics[_LyricSub].Visible = visible;
+ _Statics[_StaticLyrics].Visible = visible;
+ }
+
private void _StartSong()
{
_PrepareTimeLine();
@@ -999,27 +1010,30 @@ namespace Vocaluxe.Screens
if (time > totaltime)
time = totaltime;
- SRectF rect = _Statics[_StaticLyricHelper].Rect;
- SColorF color = new SColorF(
- _Statics[_StaticLyricHelper].Color.R,
- _Statics[_StaticLyricHelper].Color.G,
- _Statics[_StaticLyricHelper].Color.B,
- _Statics[_StaticLyricHelper].Color.A * _Statics[_StaticLyricHelper].Alpha * alpha);
+ if (_Statics[_StaticLyrics].Visible)
+ {
+ SRectF rect = _Statics[_StaticLyricHelper].Rect;
+ SColorF color = new SColorF(
+ _Statics[_StaticLyricHelper].Color.R,
+ _Statics[_StaticLyricHelper].Color.G,
+ _Statics[_StaticLyricHelper].Color.B,
+ _Statics[_StaticLyricHelper].Color.A * _Statics[_StaticLyricHelper].Alpha * alpha);
- float distance = _Lyrics[_LyricMain].GetCurrentLyricPosX() - rect.X - rect.W;
- CDraw.DrawTexture(_Statics[_StaticLyricHelper].Texture,
- new SRectF(rect.X + distance * (1f - time / totaltime), rect.Y, rect.W, rect.H, rect.Z), color);
+ float distance = _Lyrics[_LyricMain].GetCurrentLyricPosX() - rect.X - rect.W;
+ CDraw.DrawTexture(_Statics[_StaticLyricHelper].Texture,
+ new SRectF(rect.X + distance * (1f - time / totaltime), rect.Y, rect.W, rect.H, rect.Z), color);
+ }
if (_Statics[_StaticLyricsTop].Visible)
{
- rect = _Statics[_StaticLyricHelperTop].Rect;
- color = new SColorF(
+ SRectF rect = _Statics[_StaticLyricHelperTop].Rect;
+ SColorF color = new SColorF(
_Statics[_StaticLyricHelperTop].Color.R,
_Statics[_StaticLyricHelperTop].Color.G,
_Statics[_StaticLyricHelperTop].Color.B,
_Statics[_StaticLyricHelperTop].Color.A * _Statics[_StaticLyricHelper].Alpha * alpha);
- distance = _Lyrics[_LyricMainTop].GetCurrentLyricPosX() - rect.X - rect.W;
+ float distance = _Lyrics[_LyricMainTop].GetCurrentLyricPosX() - rect.X - rect.W;
CDraw.DrawTexture(_Statics[_StaticLyricHelperTop].Texture,
new SRectF(rect.X + distance * (1f - time / totaltime), rect.Y, rect.W, rect.H, rect.Z), color);
}
diff --git a/VocaluxeLib/Menu/Enums.cs b/VocaluxeLib/Menu/Enums.cs
index 29babf1e..126575ce 100644
--- a/VocaluxeLib/Menu/Enums.cs
+++ b/VocaluxeLib/Menu/Enums.cs
@@ -272,6 +272,14 @@ namespace VocaluxeLib.Menu
// ReSharper restore InconsistentNaming
}
+ public enum ELyricsPosition
+ {
+ TR_CONFIG_LYRICSPOSITION_BOTTOM,
+ TR_CONFIG_LYRICSPOSITION_TOP,
+ TR_CONFIG_LYRICSPOSITION_BOTH,
+ TR_CONFIG_LYRICSPOSITION_DYNAMIC
+ }
+
public enum ELyricStyle
{
Fill,