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,