From e91568546a704a6c52b18399f5b900486831e11b Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Fri, 24 Feb 2012 23:29:56 +0100 Subject: [PATCH 01/37] Initial conversion support, no UTF8 conversion from USDX 1.01 and CMD Mod yet unfortunately --- Vocaluxe/Base/CDataBase.cs | 161 +++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 84375cca..9db2ee49 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -10,6 +10,7 @@ using System.Data.SQLite; using Vocaluxe.Lib.Draw; using Vocaluxe.Lib.Song; +using System.Data; namespace Vocaluxe.Base { @@ -305,6 +306,31 @@ namespace Vocaluxe.Base reader.Dispose(); } + command.CommandText = "PRAGMA user_version"; + reader = command.ExecuteReader(); + reader.Read(); + + int version = reader.GetInt32(0); + + reader.Close(); + reader.Dispose(); + + //Check if old scores table exists + command.CommandText = "SELECT name FROM sqlite_master WHERE type='table' AND name='US_Scores';"; + reader = command.ExecuteReader(); + reader.Read(); + bool scoresTableExists = reader.HasRows; + + reader.Close(); + reader.Dispose(); + + //Check for USDX 1.1 DB + if (version == 1) + ConvertFrom110(); + //Check for USDX 1.01 or CMD Mod DB + else if (version == 0 && scoresTableExists) + ConvertFrom101(); + command.Dispose(); connection.Close(); @@ -359,6 +385,141 @@ namespace Vocaluxe.Base } */ } + + /// + /// Converts a USDX 1.1 database into the Vocaluxe format + /// + /// True if succeeded + private static bool ConvertFrom110() + { + SQLiteConnection connection = new SQLiteConnection(); + connection.ConnectionString = "Data Source=" + _HighscoreFilePath; + SQLiteCommand command; + + try + { + connection.Open(); + } + catch (Exception) + { + return false; + } + + command = new SQLiteCommand(connection); + + //The USDX database has no column for LineNr, Medley and Duet so just fill 0 in there + command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; + command.ExecuteNonQuery(); + + //Delete old tables after conversion + command.CommandText = "DROP TABLE US_Scores;"; + command.ExecuteNonQuery(); + + command.CommandText = "DROP TABLE US_Songs;"; + command.ExecuteNonQuery(); + + command.CommandText = "DROP TABLE us_statistics_info;"; + command.ExecuteNonQuery(); + + //This versioning is not used in Vocaluxe so reset it to 0 + command.CommandText = "PRAGMA user_version = 0"; + command.ExecuteNonQuery(); + + command.Dispose(); + connection.Close(); + connection.Dispose(); + + return true; + } + + /// + /// Converts a USDX 1.01 or CMD 1.01 database to Vocaluxe format + /// + /// True if succeeded + private static bool ConvertFrom101() + { + SQLiteConnection connection = new SQLiteConnection(); + connection.ConnectionString = "Data Source=" + _HighscoreFilePath; + SQLiteCommand command; + SQLiteDataReader reader = null; + + try + { + connection.Open(); + } + catch (Exception) + { + return false; + } + + command = new SQLiteCommand(connection); + + command.CommandText = "PRAGMA table_info(US_Scores);"; + reader = command.ExecuteReader(); + reader.Read(); + + bool dateExists = false; + + //Check for column Date + for (int i = 0; i < reader.FieldCount; i++) + { + if (reader.GetName(i) == "Date") + { + dateExists = true; + break; + } + } + + reader.Close(); + + //This is a USDX 1.01 DB + if(!dateExists) + command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', '0', '0', '0', Difficulty from US_Scores"; + else // This is a CMD 1.01 DB + command.CommandText = "INSERT INTO Scores (SongID, PlayerName, Score, LineNr, Date, Medley, Duet, Difficulty) SELECT SongID, Player, Score, '0', Date, '0', '0', Difficulty from US_Scores"; + command.ExecuteNonQuery(); + + command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; + command.ExecuteNonQuery(); + + //Delete old tables after conversion + command.CommandText = "DROP TABLE US_Scores;"; + command.ExecuteNonQuery(); + + command.CommandText = "DROP TABLE US_Songs;"; + command.ExecuteNonQuery(); + + //Now loop through all tables and convert from CP1252 to UTF8 + command.CommandText = "SELECT ID, Artist, Title from Songs"; + + //Create a DataTable containing the results + DataTable results = new DataTable(); + SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); + adapter.Fill(results); + + foreach (DataRow row in results.Rows) + { + //FIXME: Convert Latin1(CP1252) to UTF8 + int id = Convert.ToInt32(row.ItemArray[0].ToString()); + string artist = row.ItemArray[1].ToString(); + string title = row.ItemArray[2].ToString(); + + command.CommandText = "UPDATE Songs SET Artist ='" + artist + "', Title = '" + title + "'WHERE ID = " + id; + command.ExecuteNonQuery(); + } + + results.Dispose(); + adapter.Dispose(); + reader.Dispose(); + command.Dispose(); + connection.Close(); + connection.Dispose(); + + return true; + } #endregion Highscores #region Cover From 9d0891205fc5bc8df4745eba811c4e0412284de4 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sun, 26 Feb 2012 00:10:36 +0100 Subject: [PATCH 02/37] Some database converting changes --- Vocaluxe/Base/CDataBase.cs | 50 ++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/Vocaluxe/Base/CDataBase.cs b/Vocaluxe/Base/CDataBase.cs index 9db2ee49..492fee79 100644 --- a/Vocaluxe/Base/CDataBase.cs +++ b/Vocaluxe/Base/CDataBase.cs @@ -485,6 +485,32 @@ namespace Vocaluxe.Base command.CommandText = "INSERT INTO Songs SELECT ID, Artist, Title, TimesPlayed from US_Songs"; command.ExecuteNonQuery(); + CLog.LogError("The database has been converted but all non ASCII characters got lost in this process"); + + /* Unfortunately all SQLite Wrappers do convert data to UTF8 when interacting with the database, so converting cant be done in .Net, + * we might have to write a library in C++ which can convert data or just write a simple program to which converts the tables. + */ + + //Now loop through all tables and convert from CP1252 to UTF8 + //command.CommandText = "SELECT ID, Artist, Title from US_Songs"; + + //Create a DataTable containing the results + //DataTable results = new DataTable(); + //SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); + //adapter.Fill(results); + + //foreach (DataRow row in results.Rows) + //{ + // //FIXME: Convert Latin1(CP1252) to UTF8 + // int id = Convert.ToInt32(row.ItemArray[0].ToString()); + // string artist = row.ItemArray[1].ToString(); + // //artist = Encoding.Unicode.GetString(Encoding.Convert(Encoding.GetEncoding(1252), Encoding.Unicode, Encoding.GetEncoding(1252).GetBytes(row.ItemArray[1].ToString()))); + // string title = row.ItemArray[2].ToString(); + + // command.CommandText = "UPDATE Songs SET Artist ='" + artist + "', Title = '" + title + "'WHERE ID = " + id; + // command.ExecuteNonQuery(); + //} + //Delete old tables after conversion command.CommandText = "DROP TABLE US_Scores;"; command.ExecuteNonQuery(); @@ -492,27 +518,9 @@ namespace Vocaluxe.Base command.CommandText = "DROP TABLE US_Songs;"; command.ExecuteNonQuery(); - //Now loop through all tables and convert from CP1252 to UTF8 - command.CommandText = "SELECT ID, Artist, Title from Songs"; - - //Create a DataTable containing the results - DataTable results = new DataTable(); - SQLiteDataAdapter adapter = new SQLiteDataAdapter(command); - adapter.Fill(results); - - foreach (DataRow row in results.Rows) - { - //FIXME: Convert Latin1(CP1252) to UTF8 - int id = Convert.ToInt32(row.ItemArray[0].ToString()); - string artist = row.ItemArray[1].ToString(); - string title = row.ItemArray[2].ToString(); - - command.CommandText = "UPDATE Songs SET Artist ='" + artist + "', Title = '" + title + "'WHERE ID = " + id; - command.ExecuteNonQuery(); - } - - results.Dispose(); - adapter.Dispose(); + //results.Dispose(); + //adapter.Dispose(); + reader.Dispose(); command.Dispose(); connection.Close(); From 917c81a6ae3823416232eb7c8ebd98c926e79484 Mon Sep 17 00:00:00 2001 From: Alexander Eckart Date: Thu, 1 Mar 2012 21:04:47 +0100 Subject: [PATCH 03/37] prepared a new popup screen for bg music controls --- .../Screens/PopupScreenPlayerControl.xml | 69 +++++++ Vocaluxe/Menu/CGraphics.cs | 185 ++++++++++++------ Vocaluxe/Menu/CMenu.cs | 3 +- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 105 ++++++++++ Vocaluxe/Screens/CScreenMain.cs | 4 - Vocaluxe/Vocaluxe.csproj | 1 + 6 files changed, 303 insertions(+), 64 deletions(-) create mode 100644 Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml create mode 100644 Vocaluxe/Screens/CPopupScreenPlayerControl.cs diff --git a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml new file mode 100644 index 00000000..704e7696 --- /dev/null +++ b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml @@ -0,0 +1,69 @@ + + + + 1 + + + Menu + + 49 + 0 + 0,00 + 1181 + 50 + + + Visible + + + + + + + Button + + Button + + 145 + 2 + 0,00 + 150 + 50 + + + ButtonColor + + + ButtonSColor + + + 75 + 2 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + + + Normal + + TR_SCREENMAIN_BUTTON_SING + + + + + + + + + + \ No newline at end of file diff --git a/Vocaluxe/Menu/CGraphics.cs b/Vocaluxe/Menu/CGraphics.cs index f96e5add..ce018613 100644 --- a/Vocaluxe/Menu/CGraphics.cs +++ b/Vocaluxe/Menu/CGraphics.cs @@ -34,6 +34,13 @@ namespace Vocaluxe.Menu ScreenNull = -1 } + enum EPopupScreens + { + PopupPlayerControl = 0, + + NoPopup = -1 + } + class CCursor { private Stopwatch _CursorFadingTimer; @@ -183,11 +190,12 @@ namespace Vocaluxe.Menu private static float _GlobalAlpha; private static float _ZOffset; - private static EScreens ActualScreen; - private static EScreens NextScreen; + private static EScreens _CurrentScreen; + private static EScreens _NextScreen; + private static EPopupScreens _CurrentPopupScreen; - private static List ScreenList = new List(); - private static CMenu[] Screens; + private static List _Screens = new List(); + private static List _PopupScreens = new List(); public static float GlobalAlpha { @@ -204,27 +212,28 @@ namespace Vocaluxe.Menu { // Add Screens, must be the same order as in EScreens! CLog.StartBenchmark(1, "Build Screen List"); - ScreenList.Add(new CScreenTest()); - ScreenList.Add(new CScreenLoad()); - ScreenList.Add(new CScreenMain()); - ScreenList.Add(new CScreenSong()); - ScreenList.Add(new CScreenOptions()); - ScreenList.Add(new CScreenSing()); - ScreenList.Add(new CScreenProfiles()); - ScreenList.Add(new CScreenScore()); - ScreenList.Add(new CScreenHighscore()); - ScreenList.Add(new CScreenOptionsGame()); - ScreenList.Add(new CScreenOptionsSound()); - ScreenList.Add(new CScreenOptionsRecord()); - ScreenList.Add(new CScreenOptionsVideo()); - ScreenList.Add(new CScreenOptionsTheme()); - ScreenList.Add(new CScreenNames()); - CLog.StopBenchmark(1, "Build Screen List"); + _Screens.Add(new CScreenTest()); + _Screens.Add(new CScreenLoad()); + _Screens.Add(new CScreenMain()); + _Screens.Add(new CScreenSong()); + _Screens.Add(new CScreenOptions()); + _Screens.Add(new CScreenSing()); + _Screens.Add(new CScreenProfiles()); + _Screens.Add(new CScreenScore()); + _Screens.Add(new CScreenHighscore()); + _Screens.Add(new CScreenOptionsGame()); + _Screens.Add(new CScreenOptionsSound()); + _Screens.Add(new CScreenOptionsRecord()); + _Screens.Add(new CScreenOptionsVideo()); + _Screens.Add(new CScreenOptionsTheme()); + _Screens.Add(new CScreenNames()); - Screens = ScreenList.ToArray(); + _PopupScreens.Add(new CPopupScreenPlayerControl()); + CLog.StopBenchmark(1, "Build Screen List"); - ActualScreen = EScreens.ScreenLoad; - NextScreen = EScreens.ScreenNull; + _CurrentScreen = EScreens.ScreenLoad; + _NextScreen = EScreens.ScreenNull; + _CurrentPopupScreen = EPopupScreens.NoPopup; _FadingTimer = new Stopwatch(); _GlobalAlpha = 1f; @@ -244,50 +253,65 @@ namespace Vocaluxe.Menu CTheme.Cursor.h, CSettings.zNear); - for (int i = 0; i < Screens.Length; i++) + for (int i = 0; i < _Screens.Count; i++) { CLog.StartBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]); - Screens[i].LoadTheme(); + _Screens[i].LoadTheme(); CLog.StopBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]); } + + for (int i = 0; i < _PopupScreens.Count; i++) + { + _PopupScreens[i].LoadTheme(); + } } public static void ReloadTheme() { ReloadCursor(); - for (int i = 0; i < Screens.Length; i++) + for (int i = 0; i < _Screens.Count; i++) { - Screens[i].ReloadTheme(); + _Screens[i].ReloadTheme(); } + + for (int i = 0; i < _PopupScreens.Count; i++) + { + _PopupScreens[i].ReloadTheme(); + } } public static void ReloadSkin() { ReloadCursor(); - for (int i = 0; i < Screens.Length; i++) + for (int i = 0; i < _Screens.Count; i++) { - Screens[i].ReloadTextures(); + _Screens[i].ReloadTextures(); } + + for (int i = 0; i < _PopupScreens.Count; i++) + { + _PopupScreens[i].ReloadTextures(); + } } public static void SaveTheme() { CTheme.SaveTheme(); - for (int i = 0; i < Screens.Length; i++) + for (int i = 0; i < _Screens.Count; i++) { - Screens[i].SaveTheme(); + _Screens[i].SaveTheme(); } + + for (int i = 0; i < _PopupScreens.Count; i++) + { + _PopupScreens[i].SaveTheme(); + } } public static void InitFirstScreen() { - Screens[(int)ActualScreen].OnShow(); - Screens[(int)ActualScreen].OnShowFinish(); - } - - public static CMenu GetScreen(int Index) - { - return Screens[Index]; + _Screens[(int)_CurrentScreen].OnShow(); + _Screens[(int)_CurrentScreen].OnShowFinish(); } public static bool UpdateGameLogic(CKeys Keys, CMouse Mouse) @@ -301,7 +325,7 @@ namespace Vocaluxe.Menu CSound.Update(); CBackgroundMusic.Update(); - if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && ActualScreen != EScreens.ScreenSing) + if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && _CurrentScreen != EScreens.ScreenSing) CSongs.LoadCover(30L); if (CSettings.GameState != EGameState.EditTheme) @@ -320,12 +344,13 @@ namespace Vocaluxe.Menu public static bool Draw() { - if ((NextScreen != EScreens.ScreenNull) && !_Fading) + if ((_NextScreen != EScreens.ScreenNull) && !_Fading) { _Fading = true; _FadingTimer.Reset(); _FadingTimer.Start(); - Screens[(int)NextScreen].OnShow(); + _Screens[(int)_NextScreen].OnShow(); + HidePopup(EPopupScreens.PopupPlayerControl); } if (_Fading) @@ -342,30 +367,37 @@ namespace Vocaluxe.Menu _GlobalAlpha = 1f;// -factor / 100f; _ZOffset = CSettings.zFar/2; - Screens[(int)ActualScreen].Draw(); + _Screens[(int)_CurrentScreen].Draw(); _GlobalAlpha = factor; _ZOffset = 0f; - Screens[(int)NextScreen].Draw(); + _Screens[(int)_NextScreen].Draw(); _GlobalAlpha = 1f; } else { - Screens[(int)ActualScreen].OnClose(); - ActualScreen = NextScreen; - NextScreen = EScreens.ScreenNull; - Screens[(int)ActualScreen].OnShowFinish(); - Screens[(int)ActualScreen].ProcessMouseMove(_Cursor.X, _Cursor.Y); - Screens[(int)ActualScreen].Draw(); + _Screens[(int)_CurrentScreen].OnClose(); + _CurrentScreen = _NextScreen; + _NextScreen = EScreens.ScreenNull; + CBackgroundMusic.Play(); + _Screens[(int)_CurrentScreen].OnShowFinish(); + _Screens[(int)_CurrentScreen].ProcessMouseMove(_Cursor.X, _Cursor.Y); + _Screens[(int)_CurrentScreen].Draw(); _Fading = false; _FadingTimer.Stop(); } } else { - Screens[(int)ActualScreen].Draw(); + _Screens[(int)_CurrentScreen].Draw(); } + + for (int i = 0; i < _PopupScreens.Count; i++) + { + _PopupScreens[i].Draw(); + } + _Cursor.Draw(); DrawDebugInfos(); @@ -374,7 +406,23 @@ namespace Vocaluxe.Menu public static void FadeTo(EScreens Screen) { - NextScreen = Screen; + _NextScreen = Screen; + } + + public static void ShowPopup(EPopupScreens PopupScreen) + { + _PopupScreens[(int)PopupScreen].OnShow(); + _PopupScreens[(int)PopupScreen].OnShowFinish(); + _CurrentPopupScreen = PopupScreen; + } + + public static void HidePopup(EPopupScreens PopupScreen) + { + if (_CurrentPopupScreen != PopupScreen) + return; + + _PopupScreens[(int)PopupScreen].OnClose(); + _CurrentPopupScreen = EPopupScreens.NoPopup; } public static void HideCursor() @@ -403,6 +451,16 @@ namespace Vocaluxe.Menu CSettings.MouseInacive(); _Cursor.FadeOut(); } + + if (_CurrentScreen != EScreens.ScreenOptionsRecord && _CurrentScreen != EScreens.ScreenSing && _CurrentScreen != EScreens.ScreenNames + && _CurrentScreen != EScreens.ScreenSong && + KeyEvent.Key == Keys.Tab) + { + if (_CurrentPopupScreen == EPopupScreens.NoPopup) + ShowPopup(EPopupScreens.PopupPlayerControl); + else + HidePopup(EPopupScreens.PopupPlayerControl); + } if (KeyEvent.ModSHIFT && (KeyEvent.Key == Keys.F1)) { @@ -419,7 +477,14 @@ namespace Vocaluxe.Menu else { if (!_Fading) - Resume &= Screens[(int)ActualScreen].HandleInput(KeyEvent); + { + bool handled = false; + if (_CurrentPopupScreen != EPopupScreens.NoPopup) + handled = !_PopupScreens[(int)_CurrentPopupScreen].HandleInput(KeyEvent); + + if (!handled) + Resume &= _Screens[(int)_CurrentScreen].HandleInput(KeyEvent); + } } } @@ -433,8 +498,12 @@ namespace Vocaluxe.Menu UpdateMousePosition(MouseEvent.X, MouseEvent.Y); - if (!_Fading && (_Cursor.IsActive || MouseEvent.LB || MouseEvent.RB)) - Resume &= Screens[(int)ActualScreen].HandleMouse(MouseEvent); + bool handled = false; + if (_CurrentPopupScreen != EPopupScreens.NoPopup) + handled = !_PopupScreens[(int)_CurrentPopupScreen].HandleMouse(MouseEvent); + + if (!handled && !_Fading && (_Cursor.IsActive || MouseEvent.LB || MouseEvent.RB)) + Resume &= _Screens[(int)_CurrentScreen].HandleMouse(MouseEvent); } return Resume; } @@ -449,7 +518,7 @@ namespace Vocaluxe.Menu if (KeyEvent.ModSHIFT && (KeyEvent.Key == Keys.F1)) { CSettings.GameState = EGameState.Normal; - Screens[(int)ActualScreen].NextInteraction(); + _Screens[(int)_CurrentScreen].NextInteraction(); } else if (KeyEvent.ModALT && (KeyEvent.Key == Keys.Enter)) { @@ -462,14 +531,14 @@ namespace Vocaluxe.Menu else { if (!_Fading) - Screens[(int)ActualScreen].HandleInputThemeEditor(KeyEvent); + _Screens[(int)_CurrentScreen].HandleInputThemeEditor(KeyEvent); } } while (Mouse.PollEvent(ref MouseEvent)) { if (!_Fading) - Screens[(int)ActualScreen].HandleMouseThemeEditor(MouseEvent); + _Screens[(int)_CurrentScreen].HandleMouseThemeEditor(MouseEvent); UpdateMousePosition(MouseEvent.X, MouseEvent.Y); } @@ -483,7 +552,7 @@ namespace Vocaluxe.Menu private static bool Update() { - return Screens[(int)ActualScreen].UpdateGame(); + return _Screens[(int)_CurrentScreen].UpdateGame(); } private static void DrawDebugInfos() diff --git a/Vocaluxe/Menu/CMenu.cs b/Vocaluxe/Menu/CMenu.cs index 282fb865..b8c5332e 100644 --- a/Vocaluxe/Menu/CMenu.cs +++ b/Vocaluxe/Menu/CMenu.cs @@ -862,13 +862,12 @@ namespace Vocaluxe.Menu { ResumeBG(); _Active = true; - CBackgroundMusic.Play(); } public virtual void OnClose() { PauseBG(); - CBackgroundMusic.Pause(); + _Active = false; } #endregion MenuHandler diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs new file mode 100644 index 00000000..141d5703 --- /dev/null +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Windows.Forms; + +using Vocaluxe.Base; +using Vocaluxe.Lib.Draw; +using Vocaluxe.Menu; + +namespace Vocaluxe.Screens +{ + class CPopupScreenPlayerControl : CMenu + { + // Version number for theme files. Increment it, if you've changed something on the theme files! + const int ScreenVersion = 1; + + private const string StaticBG = "StaticBG"; + + private const string ButtonNext = "ButtonNext"; + + public CPopupScreenPlayerControl() + { + Init(); + } + + protected override void Init() + { + base.Init(); + + _ThemeName = "PopupScreenPlayerControl"; + _ScreenVersion = ScreenVersion; + + _ThemeStatics = new string[] { StaticBG }; + + List buttons = new List(); + buttons.Add(ButtonNext); + _ThemeButtons = buttons.ToArray(); + } + + public override bool HandleInput(KeyEvent KeyEvent) + { + if (KeyEvent.KeyPressed && !Char.IsControl(KeyEvent.Unicode)) + { + + } + else + { + switch (KeyEvent.Key) + { + case Keys.Escape: + case Keys.Back: + CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); + return false; + + case Keys.Enter: + if (Buttons[htButtons(ButtonNext)].Selected) + CBackgroundMusic.Next(); + break; + } + } + + return true; + } + + public override bool HandleMouse(MouseEvent MouseEvent) + { + if (MouseEvent.LB && IsMouseOver(MouseEvent)) + { + if (Buttons[htButtons(ButtonNext)].Selected) + CBackgroundMusic.Next(); + + } else if (MouseEvent.LB) + { + CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); + return false; + } else if (MouseEvent.RB) + { + CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); + return false; + } + return true; + } + + public override bool UpdateGame() + { + + return true; + } + + public override void OnShow() + { + base.OnShow(); + + } + + public override bool Draw() + { + if (!_Active) + return false; + + return base.Draw(); + } + } +} diff --git a/Vocaluxe/Screens/CScreenMain.cs b/Vocaluxe/Screens/CScreenMain.cs index 11ed8670..99c5e824 100644 --- a/Vocaluxe/Screens/CScreenMain.cs +++ b/Vocaluxe/Screens/CScreenMain.cs @@ -65,10 +65,6 @@ namespace Vocaluxe.Screens CGraphics.FadeTo(EScreens.ScreenSong); break; - case Keys.T: - CGraphics.FadeTo(EScreens.ScreenTest); - break; - case Keys.Enter: if (Buttons[htButtons(ButtonSing)].Selected) CGraphics.FadeTo(EScreens.ScreenSong); diff --git a/Vocaluxe/Vocaluxe.csproj b/Vocaluxe/Vocaluxe.csproj index 95aaf2b6..a62154d3 100644 --- a/Vocaluxe/Vocaluxe.csproj +++ b/Vocaluxe/Vocaluxe.csproj @@ -187,6 +187,7 @@ Form + From a6dbdb101bd6f8d4637b8defa532f6f46253c64b Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Thu, 1 Mar 2012 23:09:33 +0100 Subject: [PATCH 04/37] Added first version of the jukebox popup --- .../Screens/PopupScreenPlayerControl.xml | 155 +++++++++++++++++- Output/Themes/Ambient/Skin Blue.xml | 4 + Output/Themes/Ambient/Skin Green.xml | 4 + Output/Themes/Ambient/Skin Red.xml | 4 + Output/Themes/Ambient/Skin Yellow.xml | 4 + Vocaluxe/Base/CBackgroundMusic.cs | 43 ++++- Vocaluxe/Menu/CGraphics.cs | 5 +- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 30 +++- 8 files changed, 233 insertions(+), 16 deletions(-) diff --git a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml index 704e7696..8a21c449 100644 --- a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml +++ b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml @@ -18,16 +18,16 @@ - + - Button + PreviousIcon - Button + PreviousIcon - 145 - 2 + 50 + 0 0,00 - 150 + 50 50 @@ -56,7 +56,148 @@ Normal - TR_SCREENMAIN_BUTTON_SING + + + + + + + + + + + + PlayIcon + + PlayIcon + + 125 + 5 + 0,00 + 40 + 40 + + + ButtonColor + + + ButtonSColor + + + 75 + 2 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + + + Normal + + + + + + + + + + + + + PauseIcon + + PauseIcon + + 125 + 5 + 0,00 + 40 + 40 + + + ButtonColor + + + ButtonSColor + + + 75 + 2 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + + + Normal + + + + + + + + + + + + + NextIcon + + NextIcon + + 190 + 0 + 0,00 + 50 + 50 + + + ButtonColor + + + ButtonSColor + + + 190 + 25 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + + + Normal + + diff --git a/Output/Themes/Ambient/Skin Blue.xml b/Output/Themes/Ambient/Skin Blue.xml index 585aff80..732c2f9d 100644 --- a/Output/Themes/Ambient/Skin Blue.xml +++ b/Output/Themes/Ambient/Skin Blue.xml @@ -216,6 +216,10 @@ DuetIcon.png VideoIcon.png Invisible.png + PreviousIcon.png + NextIcon.png + PlayIcon.png + PauseIcon.png [Blue]BG_Video.mp4 diff --git a/Output/Themes/Ambient/Skin Green.xml b/Output/Themes/Ambient/Skin Green.xml index c1fb83b1..fe1b9b45 100644 --- a/Output/Themes/Ambient/Skin Green.xml +++ b/Output/Themes/Ambient/Skin Green.xml @@ -216,6 +216,10 @@ DuetIcon.png VideoIcon.png Invisible.png + PreviousIcon.png + NextIcon.png + PlayIcon.png + PauseIcon.png [Green]BG_Video.mp4 diff --git a/Output/Themes/Ambient/Skin Red.xml b/Output/Themes/Ambient/Skin Red.xml index bf15aab2..1b74be2e 100644 --- a/Output/Themes/Ambient/Skin Red.xml +++ b/Output/Themes/Ambient/Skin Red.xml @@ -216,6 +216,10 @@ DuetIcon.png VideoIcon.png Invisible.png + PreviousIcon.png + NextIcon.png + PlayIcon.png + PauseIcon.png [Red]BG_Video.mp4 diff --git a/Output/Themes/Ambient/Skin Yellow.xml b/Output/Themes/Ambient/Skin Yellow.xml index a72e0825..1a001daa 100644 --- a/Output/Themes/Ambient/Skin Yellow.xml +++ b/Output/Themes/Ambient/Skin Yellow.xml @@ -216,6 +216,10 @@ DuetIcon.png VideoIcon.png Invisible.png + PreviousIcon.png + NextIcon.png + PlayIcon.png + PauseIcon.png [Yellow]BG_Video.mp4 diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 403a64f9..99bf2596 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -13,11 +13,13 @@ namespace Vocaluxe.Base { private static CHelper Helper = new CHelper(); private static int _CurrentMusicStream = -1; + private static int _PreviousMusicIndex = 0; private static string _CurrentMusicFilePath = String.Empty; private static List _AllFileNames = new List(); private static List _NotPlayedFileNames = new List(); private static List _BGMusicFileNames = new List(); + private static List _PreviousFileNames = new List(); private static bool _OwnMusicAdded; private static bool _BackgroundMusicAdded; @@ -83,13 +85,25 @@ namespace Vocaluxe.Base { if (_AllFileNames.Count > 0) { - Stop(); + if (_PreviousMusicIndex == _PreviousFileNames.Count - 1 || _PreviousFileNames.Count == 0) //We are not currently in the previous list + { + Stop(); + if (_NotPlayedFileNames.Count == 0) + _NotPlayedFileNames.AddRange(_AllFileNames); - if (_NotPlayedFileNames.Count == 0) - _NotPlayedFileNames.AddRange(_AllFileNames); + _CurrentMusicFilePath = _NotPlayedFileNames[CGame.Rand.Next(_NotPlayedFileNames.Count)]; + _NotPlayedFileNames.Remove(_CurrentMusicFilePath); - _CurrentMusicFilePath = _NotPlayedFileNames[CGame.Rand.Next(_NotPlayedFileNames.Count)]; - _NotPlayedFileNames.Remove(_CurrentMusicFilePath); + _PreviousFileNames.Add(_CurrentMusicFilePath); + _PreviousMusicIndex = _PreviousFileNames.Count - 1; + } + else if(_PreviousFileNames.Count > 0) //We are in the previous list + { + Stop(); + _PreviousMusicIndex++; + + _CurrentMusicFilePath = _PreviousFileNames[_PreviousMusicIndex]; + } _CurrentMusicStream = CSound.Load(_CurrentMusicFilePath); CSound.SetStreamVolume(_CurrentMusicStream, 0f); @@ -99,6 +113,25 @@ namespace Vocaluxe.Base Stop(); } + public static void Previous() + { + if (_PreviousFileNames.Count > 0 || _PreviousMusicIndex >= 0) + { + Stop(); + + _PreviousMusicIndex--; + if (_PreviousMusicIndex < 0) + _PreviousMusicIndex = 0; //No previous songs left, so play the first + + _CurrentMusicFilePath = _PreviousFileNames[_PreviousMusicIndex]; + + + _CurrentMusicStream = CSound.Load(_CurrentMusicFilePath); + CSound.SetStreamVolume(_CurrentMusicStream, 0f); + Play(); + } + } + public static void ApplyVolume() { CSound.SetStreamVolume(_CurrentMusicStream, CConfig.BackgroundMusicVolume); diff --git a/Vocaluxe/Menu/CGraphics.cs b/Vocaluxe/Menu/CGraphics.cs index ce018613..0a136b27 100644 --- a/Vocaluxe/Menu/CGraphics.cs +++ b/Vocaluxe/Menu/CGraphics.cs @@ -552,7 +552,10 @@ namespace Vocaluxe.Menu private static bool Update() { - return _Screens[(int)_CurrentScreen].UpdateGame(); + bool popup = true; + if (_CurrentPopupScreen != EPopupScreens.NoPopup) + popup = _PopupScreens[(int)_CurrentPopupScreen].UpdateGame(); + return _Screens[(int)_CurrentScreen].UpdateGame() && popup; } private static void DrawDebugInfos() diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 141d5703..1909d67e 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -16,7 +16,11 @@ namespace Vocaluxe.Screens const int ScreenVersion = 1; private const string StaticBG = "StaticBG"; + private const string Cover = "Cover"; + private const string ButtonPrevious = "ButtonPrevious"; + private const string ButtonPlay = "ButtonPlay"; + private const string ButtonPause = "ButtonPause"; private const string ButtonNext = "ButtonNext"; public CPopupScreenPlayerControl() @@ -31,15 +35,19 @@ namespace Vocaluxe.Screens _ThemeName = "PopupScreenPlayerControl"; _ScreenVersion = ScreenVersion; - _ThemeStatics = new string[] { StaticBG }; + _ThemeStatics = new string[] { StaticBG, Cover }; List buttons = new List(); + buttons.Add(ButtonPlay); + buttons.Add(ButtonPause); + buttons.Add(ButtonPrevious); buttons.Add(ButtonNext); _ThemeButtons = buttons.ToArray(); } public override bool HandleInput(KeyEvent KeyEvent) { + base.HandleInput(KeyEvent); if (KeyEvent.KeyPressed && !Char.IsControl(KeyEvent.Unicode)) { @@ -57,6 +65,15 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonNext)].Selected) CBackgroundMusic.Next(); break; + if (Buttons[htButtons(ButtonPrevious)].Selected) + ;//CBackgroundMusic.Previous(); + break; + if (Buttons[htButtons(ButtonPlay)].Selected) + CBackgroundMusic.Play(); + break; + if (Buttons[htButtons(ButtonPause)].Selected) + CBackgroundMusic.Pause(); + break; } } @@ -65,11 +82,17 @@ namespace Vocaluxe.Screens public override bool HandleMouse(MouseEvent MouseEvent) { + base.HandleMouse(MouseEvent); if (MouseEvent.LB && IsMouseOver(MouseEvent)) { if (Buttons[htButtons(ButtonNext)].Selected) CBackgroundMusic.Next(); - + if (Buttons[htButtons(ButtonPrevious)].Selected) + CBackgroundMusic.Previous(); + if (Buttons[htButtons(ButtonPlay)].Selected) + CBackgroundMusic.Play(); + if (Buttons[htButtons(ButtonPause)].Selected) + CBackgroundMusic.Pause(); } else if (MouseEvent.LB) { CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); @@ -84,7 +107,8 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { - + Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); + Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.IsPlaying(); return true; } From ca495d9da325671e63c76435faebc214e2c26ff4 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Fri, 2 Mar 2012 15:06:21 +0100 Subject: [PATCH 05/37] A failure in a popup will no longer disable the whole game --- Vocaluxe/Menu/CGraphics.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Vocaluxe/Menu/CGraphics.cs b/Vocaluxe/Menu/CGraphics.cs index 0a136b27..7a1eb978 100644 --- a/Vocaluxe/Menu/CGraphics.cs +++ b/Vocaluxe/Menu/CGraphics.cs @@ -552,10 +552,9 @@ namespace Vocaluxe.Menu private static bool Update() { - bool popup = true; if (_CurrentPopupScreen != EPopupScreens.NoPopup) - popup = _PopupScreens[(int)_CurrentPopupScreen].UpdateGame(); - return _Screens[(int)_CurrentScreen].UpdateGame() && popup; + _PopupScreens[(int)_CurrentPopupScreen].UpdateGame(); + return _Screens[(int)_CurrentScreen].UpdateGame(); } private static void DrawDebugInfos() From 6bd7c5361ed297d24da234cec0368945b41c4f1e Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Fri, 2 Mar 2012 16:52:02 +0100 Subject: [PATCH 06/37] Added missing logo files and added keyboard support --- Output/Themes/Ambient/NextIcon.png | Bin 0 -> 12745 bytes Output/Themes/Ambient/PauseIcon.png | Bin 0 -> 4133 bytes Output/Themes/Ambient/PlayIcon.png | Bin 0 -> 18769 bytes Output/Themes/Ambient/PreviousIcon.png | Bin 0 -> 12816 bytes Output/Themes/Ambient/Resources/NextIcon.psd | Bin 0 -> 76803 bytes Output/Themes/Ambient/Resources/PauseIcon.psd | Bin 0 -> 62228 bytes Output/Themes/Ambient/Resources/PlayIcon.psd | Bin 0 -> 82930 bytes .../Themes/Ambient/Resources/PreviousIcon.psd | Bin 0 -> 73686 bytes Vocaluxe/Menu/CGraphics.cs | 4 ++-- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 5 +---- 10 files changed, 3 insertions(+), 6 deletions(-) create mode 100644 Output/Themes/Ambient/NextIcon.png create mode 100644 Output/Themes/Ambient/PauseIcon.png create mode 100644 Output/Themes/Ambient/PlayIcon.png create mode 100644 Output/Themes/Ambient/PreviousIcon.png create mode 100644 Output/Themes/Ambient/Resources/NextIcon.psd create mode 100644 Output/Themes/Ambient/Resources/PauseIcon.psd create mode 100644 Output/Themes/Ambient/Resources/PlayIcon.psd create mode 100644 Output/Themes/Ambient/Resources/PreviousIcon.psd diff --git a/Output/Themes/Ambient/NextIcon.png b/Output/Themes/Ambient/NextIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6bf6c40bc22359f55cfbcf82ebecc34df7a296 GIT binary patch literal 12745 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 literal 0 HcmV?d00001 diff --git a/Output/Themes/Ambient/PlayIcon.png b/Output/Themes/Ambient/PlayIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..5f34140b3ebcebc0dfb1ef94476d26e134a23d21 GIT binary patch literal 18769 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 O0000w}=KWwjppRo7DlXc;I0^t5Q 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 literal 0 HcmV?d00001 diff --git a/Output/Themes/Ambient/Resources/NextIcon.psd b/Output/Themes/Ambient/Resources/NextIcon.psd new file mode 100644 index 0000000000000000000000000000000000000000..a6af88291fed7dd338cfff4d586ea9c014f31a72 GIT binary patch literal 76803 zcmeFa2Urx@);3xl00ZVQ&X^d-oG^^2NDxpI1yMl6ETKUZXe64D(HWgF=NvGNj*2qo z3}(!z1OqB4AOZ>qG@_X0(GBV94N$ZT~gL5pb=LdUw&lQE4c!~V{gDg80 zT}|j@;_qYGY0@C4eon!5qS^kV7lw#j7mjoDUO3l#s81(rs|FVH&F2RO2a3WxP38v% z1cjQK)qI`9-Y5+$TAwIt5E+g!fw}UgwPP4

Z>X-7l0)y2z3JUE@p0TgDIM8&yXRvAizWq$qn&CnVC=+wL z5Rqq?IK)jX4zOaLeEe*2m^gH{IM~F_bx_~_CX@Vwe8iEV7N)vz&HXi+L?b-IL{?Bf z1N!tE*r#8Aw*dpq`wuW5Xx6J=fAfC*w3IMN9UV?k7e1b0p0&}!!s_Y~`}q4VsFfBC zQmMnj6bo6a&`FJAdFjaiRb>RL3Q~WSsFS%BqfRm(A@&Xr6a|IZ1bK@>p`JojnPDoP zWXaakk1bW@HNf8r>a4GizmK`yz(E6s4zL|$XKyxeWdHvChYsmKz}9T&(2;`&4Hz=` zXEWxZ;Q~!Tq83sVZ2cCdwacA_24*J?5QjL4eMD9RwXfEQH8<6|%E8WVe2CcBKR{#^ z>N3jK#9^eJS^uGCW_Af=4Z9%Ze)I}634iE7bjf{YD(3mT1GUV>&4nd(|p3r6;Mvx}x4^8lATQl1s zBW-O)jI5~%axT?s7fhO}J1Es+%N{YH|G<7jhKv|7=%3YUUCL4G9O4gyiD!To2JS~X zPHl6oM+N6Lqy4c9FVN{@XjNQA^Vm{N7baFF*fS(lge7m;NmcaPmK@N`%YxLPxu-X_ zJ1cLr?IIrwQa&)pnn=07*zySvyxD;Z&;*fh{(nd zn%=(}vKWo*OLSHLlj&pE3mLtfoXmCVQU8F!NWljH_rp}}e{gD9T?hZk1KmgbPwH0d zs=JB0C~9+1S6sCzB{in5xYR{an}fRIs!b`WF?GeIE{fV5)D>54N=c2WD=u|W)aIbB zxN1{MYD`^msf(gE2X)0&n^IC^>WWKU6ty|1E3VpWZs2rKHBx6_>gwYI9ImT(v1BHKwk()J0L7gSz6XO)04{b;YGFirO616<2La zNsXy1E_G4V=Af>)YEw#TOkHuQi=s9Mb;VViQc`2;ic4J-wK=FOuG*B68dFzX>Y}L4 zL0xgxrj*o}y5dq7MQsl1imNuIq{h@0m%1owb5K`YwJ9YvrmncuMNylBy5g!$DXB4a z#icHa+8opsS8Ym3jj1axby3vj;2(>tfo4aaCs zHz9gm{pTax);|p8h-L043K{1aC~_O=;RYgvll%=s0PhTZX!6%wD}T;p$6hF;H%Fvh za9EH^E#$!~M1A7o7wV)wu?q>Z)0_l_X-*uy0z%a(wF){HGhkFedXJQV?Yg9-OM`jzq#o31VxJ?WSv;WB@0Bb`1 zvJLPt(I`Q}l5G!mk-63!`jes~gnFTrO_)|W!l z|C2OQ7O0wn8f8ifzO~N!ku#pM%rV#aB-k|?kZbD^$q(=eGX8Mpjk=6~q40x8P#xfy zqBOOEcuFu5KA2L$Q`H`4imFGAgElaq3Zon-Z%PcUfoLZf?GI%KC8GQAiEq|R8=y+i zm>w!9JOFJLKCmI|5DxMQ)#>@(Vf`VEWE;CnfH=rcr3Sl|_PK4CI8b>`vf<)4Ta}LI zhM};xQ55PP;E0`*$GVRJNdqxjJtK1BFhWbWkza^7JeVai6qEgT%06#A(iOEc8|pwu zBhTXD!#UTrA0{s1gln>v8dHB&PG33L@ zN95}nPE2zB2vJCw9=N+o%!W7g@*^8^wFJ6{#8q zrZotFhQyH?dx^uKL2={_q1tEb!buP7j>^E6LUXn*CdW)~ZbHPPA!)Rue~_3D%|8&v zJKP@ZF?ouK(Nk#t^`RF+L-+I!4R&(1$03`7t-~g`hnUesKA|&}r;(mdCHEOU-o!*J ztu}|vyn{nv;Ny)4@IW8fp%2Hu!Er!jSTM>l*Dbx~;xQk)T+0y1ARM>BV?XA&H^DH+ z!|~WBFbEnrAM+gS6X=7-ci{Msh;VH90!KJr5#cY2gyR%A?i>&v=nuzeZCeJ4JfSlR zvCKM$iM(gSaX&aV4smmVkyB^^hRE1Y>)1={I1E}KU@1Fs@B&gNCf&Vzn842y3^5rk ziVP5ih4mQ^zq;TV;sd{l5E$$kw1A?RXU40j=A8Z6M9h5rW1<%BpANBZne@^Lq|SJ) zA8TZqD>X9lL9qWYvI#b5WL`Td>f&;WYV$@T>%1SFzuze8LXy_=w8r+L^>YpWBJaLf zpz7DZ1gMcUA86gLFWyhRx7}m}(}hj2ReQtM`S1`E@HM*16i>Q9CR%Fe~j#5+7Bf`JI} z%YbS?HKAHk-%}l^pQ!HO$qb+dQ^Tm?)JSR!KJv3IzwHgu2DCsd(3-eulR-UHrq-fP|m zULLQ6C*=$H#{8E2_WZ7VQ~nUX4Sy`(jX$05$DhYv$p4MMj=zI{kRQvxz`x0V#82gC z@(cJ90VQZCXf60r&_^&tU?*@EOcD4BLIg_$s|4Ew2L-1DR|JWIWI?9ji=awqC~P4# z5%v)d6OI;66nYEi36}`h2zLqp5?&DA5he>i2#bXZgGL7J40;)u8#owv82A}P8mutb zW^lydyun?ARD&FYazjJI)`r~-2OEwyoNPG9aFO8}!@Y)ahBpkK8)g|wjEs!FH|k|% zY2<9=X%uF(!f2;atWko|3!@yP%6bj!b*wj_o_)P3^@8dxtGBJ*@p|#~UewF2S6#np z{Vw&*>pR!?slTB9`ud0KU#Xu|Kc{|mgJuo7HLz^p)?iM9r44p8IMv{8gSQPz8#Zj% zso~Iu6B_zA{H5WJhJQD_-|$1jD&ywHJ&o;*rx}MEuQNVse8c#)acQGQjk-1(-e^jr zutw_|9cy&E(fdY~jaxMC+t{J8PvhvuyBl9<{GxGTllo1%G_h$iqshW1+nSthlGNl& z)A~)jHnnT&*>p+M-Aykyec4pftVOf_&77MBHe1u|c(Vu1J~uaN-nIG2=044TYksKt z?dDl61TB7QVb{XD#jh<6x47FPr=?-bZY>>J&S|;2<;j*$TNbx!-s6p+l-=vj^jY)vX z4wE}3#Xq+DarBSjKOXq;>5tW&x^V)2*M1J9q5t)Om5| z6P@35so!Ntm)TvmcS-D0(Y0IGNnL;Mda>*0Zf&|bbX(Z%M7Ouy8+EttKCk=1?kPPC zdkpC@x5wTd&wBEE4(d6(=kA_Kz4*P%dinR-+v|C6gWf}X2lYPK`(+>FJ~n+K`kd(V zp>ONHj(wN)z1X+Vw6p0H(~YKyriy-p`UUhm+%LU<^ZsM{FYAA$f60KJ1H1?99*{Dy z(Lnow(E~3H{PuINpG80K`}x(N7K5Ay{XXc{Ai3FKvk=A@#}LOWPJE{^PMe+Hj_WcmXxv3-%Gtqrv-7+0-Nw%we|3W4gz*!0Px$20 z-(|5&qH7D+nXboO%iV0<*1M%o>^?Dk;w|?k?$g|lxmQdYF=^AJOb=6!D33>zf0*n) z`O*}lDehB_Op#0-Id$vQoN0rmt(cZJz1#Hp(;v+EVMf4=>oc3o^qhHimcgt^vyRV_ zc{+O@^ptoxcAT7Iv!A8kX1~1I*0Z|yOQOi%PXuKk1#mnD^{T}m&@DKk#o~|6Ya_36LDxXykSNB`JZMAHT_nL=m z`>)-xmR{$(?&*57_4_s$ZV1|tw$XayUz?h3TDU1|v(x4aTTHgB+ETW4=GF(>e%=w&9`|p2s zVAO#N2fH5JcF6Eh#Gy}z-47@JIpoh{M}9c6`iT5!(9z7lT>iRqZ1AyT$J-rWe}aD^ z{6t>twAg1SN1VKLs?VtdajoN4|4scJ{&)WAS*O#^j6HMf?2xmk&UHDr=X{Ivt1j>^ zEVxj7arVW`OOr1>zdYvhtt-Q>oWI)l>d|XIUfX@W)%Er94dQ=`rxO+?NNxn*_;ShCaLU+~Rrs3+op*lSd@qOL0hflsYc;dD_IZS1+f%%zWkZ>htS> z*Wcbmys1wA<*mWnRqvX<+xEWQ`-2%hGU77LGOvFa@!|1D*N^F0-dP3Nq1m#W-##_^ zv@N$|?y=7UK3~hT&wG|XH9w~yxS;yWim%PS?kVhEc&=!8(c@x|;+$_G-{_JxrQeqx zE&I9bmSnu-eR*Jcb;YX6?<@bR8d8-gog~ezj+7b6cF23kuPDYU-qL|IP39Uci8p}G z022d151Q(D4?fVJ*w4IqnG_G*^^V7>HWZJ3MSnE*fFB;3Io`$D-obGs1tEq1`J4pw z*Ud>(bCtR|N!^?TI>f&@x%f9PgBxnU>gFVMbCS9_N!^^JZcb7+C#jp0)Xho$znGKI zUnyhqL%cKXoM5I=NHr#Bl+Q2Vnegaz>Nm=`UcGwt>lxRtZ``b5gNDsoH8D1B(yC31 z7Oh&eXw%G?yp&(eiS8$_QNxCf8aHa%xN*~#jT<*^i64zyGM6-~jRN`x)vO*&jrI$8 zohW`Yo}d|zeg`Xy4d^>OYsjSmggoJ;bfp9ok1sSZG^$s>K|`KyB9Gz=REbR~o{%Tt z3;6~{hV={t#seX-nLzks^Zo`l6FggVnzwX-VatsNPTT&}xs}UJuYo^@EPHNe)Mb-v z@rQ5Tp@Ui$8ENy#qz^Zeb^ z9ErPc#ENZ4F5FA|R6cmrB)`btw;#Qj_%gSm8O7&AZiOUIMurB1NEUwV-&_benAfR= z!GNV3TVf7wx;!r)*xBnt$g)j#uC2U7fBx3R5Hn!Zb>FZFZD7`ubF#Xmh{51@VwDMnp)#KtpB@#1zoMb#HL*uykMhS%)#_1 z=LoB!$7jR0Ojhjd;`-+Bj;5LIl1=jKW&W1e1MWS>1wOWH8WS@qKP+tD?u{uSyg}am zuARTO`L;(!LBg9&yH}bH6<6MoCQmoczuf-&nA7{hE-$~GJ}f%sZMoc3e9YG}yl>Kh zD6hQfi`u@taWQna>}!+q^vT5+5~^vcRP5lE2T!JTCx^~Q>F3EOXzGzc!Z#zD3e21M zO`4lpbjt1Q5xLLFOVcNxonaQWB<<4EWmh|1O%A20VJ&`&GK*eTabi$()vSvO6Po&Z zy;qC;$kb^aV=qOy$Nv6<_~1iD(xUM6tEul_rbKN^lgEGBzuh)A<7CH=it;SKpCyf# zO}}uW?f!uBV}KXL=h6(P0*_x!kG}2W*F@aJJK_1e$rbLB8_8)4 zX)4ud-Fit($MWs==N5*)iXLsYB**k(Re2yyotr%KPnsG*Q%;sNI_Y-mYofp zvi;-f7nw$vQ%+x?Df5i#L))e9(aUJcepQU4L&(gDG`J6Ft5XRKy&2 za2~u;vM&kBaAN$)qQoHg#-hOk`))3KWE1pq;?=U~4;`)#Ie#F&+}44M~H)I$}q#VDy>lJG1U5q zUuBcB<3sj_7MP|4YztFdoqBfR*mZ9Pv>E$Hhc@L2G!<~h+Ci}_$*GmqmQBZ!&EuT& zU#)$dS79cde&kb0lL(L7MJKEoGsBbpdJZ# zP20~@42YArTQ;L;V8a&H-&bDVaz?gjgw@5B1`BA)MSAq*lH;PQC**GDE4)LOwEeU2 zjrAZ2O}%+Im8MQ_i5un6(n@?aKk=osJl=d#TEAEOM(&P&93*m*XFSiz`g5t|XhD-y z<0D~lu@dWU4L@h)T$u6oQ0cLAiEj$T(q7h6j|D~fOPBtdHtoyX?~FSf9d_OQzGz)L z^G|2rrdt<2!3MTwn!MxWGyNXLpOi=68Ju;AdV6&3(>InU&wonDGZxDq-;?{s6(=0F zF+Dgd_k+aPSM*`p+ck@XXYPFu{i;(@cCUtyPkoLO=R%3U8=jygQWVB3o(CwkM= zZ=&cIC&cmxha|hUPnLKW#Ep^Ox;eGU>(Y<4x!to!gSbzBLNYCqIkIa%dj{1=MBK>o8??|s9i`rQ}UKAa* zvS)_n)%@HEp9?#B#2*s1d)(GO*Snwe@YxEp=r<2{D%NJiO`xfIS7sj1m?0IR+?T}von2PZc&lXjp+))K#@0)*OgD=<5K|GdK5Y(7HB_uLu-dSx zG=8fjIaWUXp?H)u!}Zaq(#Z)<>CuZXCnWcvspWB!RWx-w<*FR!`N8?!T4HAj<4C;vZf$1`mmI&ZYy+TrB$E8@v_hwQcA81Co3uU+C2xqFi+vEul( zO=A{6RqU1=%5QB~BAuEv{{5D4gD7=!YFR#mRR%EBF^cy3+E_uEV%b~sL zsh6$at;;$yU9t66TuxLwnX{Cpt}itIxa2h0ynC;szs@`%t~MGUyW7BVSex7>k|yG^ zsnem~PE|Bp+4ar4?+P-;=MA+x6cv0d<;~4TkAL#`5SNf#K7EorJ&~s3`Xt0%NR3Rn zR^Y!V;N;h1j~CSo9c`A{c<%19?Sq}uEIPy{RV7GDzx(of>)!Le8}kAeH0@9^SlVSB znBJNBlW1y!C|t2z@@syY!KJODc5x>zpYpq86ZEmj{cou}!*9{Pq+H0RU9`e**^cle z+2|-2#mNN8L{rZhmM^Wp{U{kL1w)$jgTue;FbeM?W4HQxDh-jXLN zJ>MIifAg+)Y)sOTq{lS%*R=1C7EG#)zZ4%+vfU>1&nGE^&O{H(i&{}sX}{!{I9IVz zczt_n!pZBs3K|VuLsMgW>~A}-gMB$o^@zzk4$bRiV4PXP{;-*`v6gf5BZl9|KNsWj zxJTI^(M5rta+jCUM~+Iy(p2%tI7!EX!R}9`bNjSXtbOV$ z-SeoIBI4q~qjbu@*A_Q9xaCJpI$E}8lt|KW_sBjkraxNm>wdEcD&@Y{n7~uR3QQ|+ z-M#sDS>dXiDGPTe9eMXl`~?ez-)DK%V4Aw&N>kGo-hEgQGg)!X=k?NOCnCOc@K2Ah zTj~Fk;>+8l_cV3MBjYelIeYCcwTg`z;eC4HT%(E78}^U-M7G*|^vKuU*A0VUxSmf_ zv6B^TZ#s2Vh20-kpI$(7 zs@gV8@xg1!PMZ2){rt$)Q{hP`o#m?~&TYyHH;!-hdUl5`0~M_w($vA1kdJvZHTksg z@Wta%)1+J4|N88Bd)K&xvPq&L;@>+Kj|-pq2x_2B42+!7*XPK`NE6a_r38yLF z2ye3io7?_6?m_rkzYB4qi4!MUXTFwwOqQOObUQ4c;T`C0KW?$znfFwu1-_Qi_Fyqj z6w#D}*XIeYbn3s+A_W5nw-9_^HF^7hH4E>=C+^^paX$U!lJlZrhojt%m1TX4@GKwZ zFUx&RQ?v6T75Anq8nqmjFl9+XSmDa6Em{v;81uYrO4Qa%@{Z>$6Trm^FOUzTsSTIk zSe^8f*e*F8wfNDHOW|v8e_vSk?qZDd+~|YuG*#AW$>m6ym&u9zgp}3|O@BHr_e%e9 z7jMSb$VTbuzt5EQk~>~ao&}y#qU2GRz0L)F;_l{Uy<5NP`QIC&pSk2!4+DD|5+t8< zr#X0mvD2rJo*eIGT( z@^#}M`o$c6J140$`ddtr$Hj%w<8J2dh`n>;&r6kGKCEd^QwtLFEWsIHcxF}0%NgI6 z)6^e|1I6GmSi4>6@)Ud!Q`smGrAyj|g>$dc{B=^rU!z(K`Zcp(}Uvv9VeQCF@Pohloqb;C>=59ZlU*Rsj zktO-H;K+oVdFT1%k6cy>IpXqY5DA@hZ;V^M5^hvKrx`bgB2W0lt}7KIGh z6VW_bvF}sT>sLk9>zxbSyO~8zlKyh*;qd$fkJYoT4)68uNOD^&ZTH?)+)eB>ACZ8GCYdDm`dB?Y;hS?A2D)tx6FxRkq`x?k{9JJ=YRs{{b_Ig;n6&9;-ky^R=Nf;` zKe0HfN%ii{UtqW^vgw}p`TC-QxrrXqW;9n3M$n-zV+A9P;T5^Ua|egBoGIh}Z# z1LhlFiuomc?4slHh=TUfecpA_G3i7rx~Wj=tDDrgBjkF{`Tl z?{ryi$yu1#*(p}1*z_*ADLpS~w)S!Ug~rDuOK+!~+P3pmmZI6g2W3;Q=K1+3z*J^N zKkxoA%sDn;M#%Rm=3m#{%HfF7dfvmiuTZUrU_0==;Ushf})Hvf!RCv~3 z;oV}!pU=i2Z_!@At36@nG&Q;){M3_HQ(cdQor-xeukFg@yug+hJ;Z&j6TFk+!D{!( zf8)@Z%o3TV^fE90jC@@F&M48|Mf-g(HvB7~)vK8|set#10hbe=DAs<78a=(CY`W{X zsaIms+S1eReK^+lpF z&;-a`I>8~u>+9r1^@M|Zlo78v`Tu4R@&fq}WU~_9-iy~(eLRQPU5OC@ravL?9u>#BYZKF}?BDjmGOe2s3R3_gIpjU~c- zW63qy4`&or8R!}0@8DwZ0>@uaZWA;Dw--EycT;%dHSkhybHE%?HukRC>~qRK#34xU zrUcbhLMeRdbdlul{A*wABsD!c)wGUC<8@D^Cv^&}b zY2^{0%SB8!YSbf_!3QaW1LUk-pl=8;x=Gz@J+tcBJKq6v_YSf8<6MQR$;eGq4W z*l~d-Cdv&K%_&>5Pb(Y@!9sGC4}AJk{;*repPUnZJh|Rpb#KsRk9zDv!(8zjcixfh zbbsR+^McKWsvKOUr@PSUpE*o2*`cblFQ{ZXY?y-jZnouiVex9Mrgw03jg#>WMS zofsNI^6Tgw7NoT?hjQ`>R-F%E=jPwYt2k4YEhzJU*iz`1@OiirS-ZSqx1d;g#dEii zpc={JfpW_Ay1?FPiFYhMyIX+tflmqwfZyw;S9Q2~)|s`# z#BaN~fy$iE4;W5%o}v^6lYsCLvhQ&`$Z>Cp@-yUz9*r%!GJ|6&k3 z7{TI0vKxTw>|i@c0+Yh(Hod6MW3Z)KW}+n}d9VwKFj1OQ19o2QLdIjqA$b`cvJn0`Ww;l)MET(!66UQf``1?w zx71v(x_bD88$?)(t0yu@gsZRi$;49#IcV>_)tB?(vu6<`eyFb|rmR+1YjrdA)mk!# zpkQV5fbFm7tKf^+aInBIq^^NeBRuyGB)tSj6dXQK#f+Cnc;1h)Kf|+o@F2vSz`GIbKtUHZ2;L^(Xqr%Cq2mOT@rbFz zpwJM&2?IPAgy6jb7Wn(%IlKvz)jPlopGpW1OYr_dzW8ip#6kSrpt)l0^MKG`93|E1 z0p0OGxqGBA}$2qH>_D}pJU%QLv=({Z;Lm`cKbI!*=p3WX6<3Cc>Ax4grkR3cu< za;oKhM)rl`H<+6Vx-Jd9%aJ@_BrszcdJb}*EpDW2D?}ov1vH2rF`zt(-}09NxS#B= z-b&qhln_K{cv1M6!R1oCG50`O+H`}5DhYqgJsPeA(NjkBiQ;$MjQv5fxua75CyLi` zGo_RzF|ZtpZ{+z3E7D%6JqN~1o>KIT0cBDA{;}1dt6)h>rTT1eH`THi4D2JtZyJ#U zFvYpSO7+<=0BD5C3@(%6Szm?xXU?hjoRMTxa*ZsNk!8S6;@=BFTh*cN${S=;GA&^m zgL{t+`w6H^_JA$Jq#tHe)mp+=jPNbR@3N-?^p$RIue?Pz1${s*e9hp}v1z|2C8E4T zHdU#Sy9YhUttXn<~}FG8kDZ#s7YF36{yepOiPqrb@JgnG7xk9^X9~o*`+xQhzq}O(Xlj zpk7e?Zilg2OIEg4-XNQTexMd+F}Ua0z(0bv1Z$=KY^qQrgQkGSFNxv}!X}=-pvgx@ zl1+Wl$UZSL*uLIuNg?PuJwT~F8#a-uWw{LMF~u91h%Lm|Fh`{;Pb14?WREC*yUl2| ztM+zQs?VlAYYFoi+(RH>O-_M(KA))6pH1azWCaZBJ~V~>X!=Swv{l|98+N#AgkKq4 zBE_%ghwbCe2&MjPDqABfWKef0em~MazAS3;g%M>_&_UF~Vn%oej9(*P(X=W`VZL=1Tq9)EkYgl0jXicxLC} z335V=%Na>F^-3d?GO{ZazxlFaxM%gzo=WxE)JrX4HG{hZHV`}gtLcI&m9|ukOwPzI zQhbv=P^ZF*&F!grG8GWI2N4?(F(bVIhS297XuKWRObtv{3I!l!VCN{l=}Cp0=2c8p zqo98f8NXsG13C-!7xWH5ufJ1fBpYIyY8mM+XDFW0E`U@zs3FjUlp=xvEdx(NXXoYg zRYO3FN=7i}q2ZCS=j#l0cA#4m8UO1H^`rGX3iT)`TVu{w!{FJ7RESarcnLbibQlcy z&s=%R`pAZ@-Ws8T!Cj{Kopz!rE#KKmS-aU(nwC&`lPeT&+#^u;+S5?0F4Zz+RbB&| zPR8u2BfXU^FPj4Usun6M_&UY2MGqizP6MrGrj{u)k^tjP6dIT_gG!j(W>aALRWfDM zy8*uaMbMQS(O9bksAbA*+@kmmgL6RFHA}5dr*ZSAPEOxY9+z-pl~Ct$7w6T!suUrsYr z+aWMlYN0YO4=8^7O;}gbLp?vM3Iv=3wNPoDz?kyJJ_LOka~i0vBp6e*P??#>U`>Ae z24!-3kd|py%aoS$3797IUGpLvDTjw_3OpW_Oqr1+sFz4|@Dpsbh77e#Y15y9kvI#w zzW&xqIdElDUo|piE}+#n@B=T5f8UX(9;IL~Qwx>(fM(z0AP(H68{5BEl?V8UYN0YG z(CiH+y#ReFQ-tqSI2dZxLS~JXOz!^fS|hhcs2o|r5#T%C2YqjSjg&qFaRk&t zWoDq^f4}@I@Kq~qpGPHA zdL-{C-r&DM*Oy;gt34>GMyAXLIAjgypwEBLLE9fw$&}7gCdKc4SPJOJ-Dq}Fc zQ45v%fTmw>=1aI~k}FT?W)f#nEmY}NtBZa zn0$0Ufb)^Ewcp)go>3*@m93?|Q|1C1y#aA|p1Is&P$~)knTu*}11-M&hEmW~9iuf- zA|fG()DtC`WI5nmSCq zC@qP4ItWg5(=ar;3B#{4C@qP4Y6-JaX8Q4M)elz~n6^kgQLO?CAbJDZ9*w`mz_cXl zX)nx}yY40P|Ls3sWMJAN^(0ybt;{_M9wBAA!374VEmBX)p}n_XkJHeqgFVkNIBk)7 zim#w}qi*klt&o65&l|5pXv-j9`a3sJh*WBU-`F`PNeJJ|2<^@A>seZc1{WF zTKRuZE62L7Yw2|@{=cKelchUcBOLD;M%D!J*xo60E+iOht#c0ek93K4u%2cDtAg#Q z-c&z$_l5OGGs+zPtbkTv37;15`+W|S6RhgGQXbSqY7)FBk|TF=<_`QI5Aw%+<0tdR z6g+ZMN*Fm_?*eo|N6_jFYq1XSHvZuIb%xAgOnCiANV_sV~KW6eK?W&a3l4BI{vvnn7eT61MBAhpY?%j z<()_m=?lMTi7m#A8Uk%-7*JcWJz>kjHtP&6dLoq0Bx)-B(&c1o8oZ~#dn!4f2FJ{s z`E(~|Q$UJx53RJRaE86i1vENR6QKQ~_EFG=9pMh}b9K<3u`DM63a_34*Ww?ei_ynO zw56B}{KFhgAvwZaP60irb1bm-tl&v($TL~O)0x2^J}W*k(>uCCDg1A6H8u6ofmkhE z?Z>~i%D*3|AAlv$o%HSjq@Uxn;NKuP8>IX*gJYE(zX!0+wA1ja0l*sROBf8ui0DrE z2gs7>4l?}f4}Sxd8iyz~Y3tCw6LYM}2j)nVig)S@Iqwe7gU_LQCe<^drNTe7R{xRu zSV~`p>Ei$0w~VeQE6GfHn4D8CKcRJ82>DXb#`3RM7f*H=P7=e!s&@JsiK zF9#+{Ed(y>-d3MxoqZ$e{OU^+D=Y;5@nwp$5Q>RB*E@RSO zPgGb4ccx`NnJ=>tScTjxKM%_-x-toay){B%LFGV%qV%8>pk4Ro$}ZA8J<>|it%`P z{0z9jVO>V`RhrT(uV$_}Ah!@o>91RHxhwM*Yq%)jrbKa_rt~MsnXC58Eexe}@$_+V z7%{9o=?d44-<~Clr>UBf6zVIDq;$z_3!CM*=$jk@S6YWARwR%sb(0J*iB?}Jz$+CN z{Fyf}#$LR83|#E-*H^_&a&b+m*j6xGBwcR7x8M8)?tIS|F1BCsN(#HZ^d|Blk&<4~ zzPQ?gH}@&V7}wds#lBZc6?Zfjvl1y^KBQjLzF2C(cRGx*X8Dz=aJA#6%xc)6s=BqF z)a%+;S6T3_7QqS+FJnoy1z&up{GR4otu(m>O;Y2vuT@y^Y@q${JT1#Gk%vCaAJog|X@6AkbtT`KaQ7wkB-|KRL((N**yc*@}dL z+0Pc+$}D(Z7^5uSX%DKVoGMnpK1NlUKp)fw@rrj+D%5SZGJ|>Lvd=LSA!DO<6hp@D z%mQtrR==x;UA`J^HKOjYwHeK;qUnkUVbB|RLBQkTe_Amd^!X>0DPXUjMjso8bQ=xu z9$O`EUKNDoW!XDjAdgN*uo=kCx`R?QKuOw4wUI(Vf*x&bB1bRWS0TAA2ECSx(&5?P zsBG3V9kptp0D!RCph4c}D6OUi)tQ^1fAKvoV55;791EFs-SbHX8&@?Y0GU-Ic^(%i zHuND!trYTFdJY@Vh;`V29?S-%zS2=E0bT(Bq4($_pK+9yL1weIJ43O$#iI4Eh;;+4XpmutEvsB>Mn30g zErrS|yD=BE+N}71yHn*$qk$@&!lfH)vSz*NpszJ6#5M{P0W^;_IDP&;}XlH3%;yxS~%TKP^#ZOzD3j@Ck2Q28hlD=Pq* z2Dxj&UXhlS!BGnCh<@lxj@GYGTRFSX5R5y7bSvp)91k2eWK?Hz)S}VQkA20_TR;mW zcf?lEysZ`imz4i5+6wdr-jXOja`eh-#J=I^&4()cu-Osv>v0w-Oy#kVcft6b*|IE- zUbF`KvFRMWd1wsIqcN~sg?v?}eMLO1$mXae=0G3xEk|oET7yMUQGD-P=p_{G9u2vj ze49l!EgS3AVBGlR)h_@Hz51YSAX>$A0AK z{Rnj?xfKX{t(E|viT7qfwS_=@TcUs+(K@+B^Pv}-&C!~Pqs>MfZKhmCqagVcJ!zMn zIkK-DwP--}V{6=MFXN2n#a-l z2AWJF8E)nQBaffE3R{=Y=%gtVa#lFC4wEu*uvct?L&gLB5SbU-z~Ie$_&!2+(%uLw@DxOoR54vB3fI%6Ky6 z$5rlc1xG8`jvBB<9KEU7V9rbjy|$~-dc6pSA^<gGP&b)T+ZpTS33^AZc~@P{(Tlc&X!C!SMKk`QHB|}oTK(bO;8C(YZByuah1m%A?&g<=+B_5tl+2x+ff6yoTK+C zEksuthe*rC*uY+e%Pb77=G_CRPT^+gg9;D|^HH5lJcefTfpL~Eq4_F10E4B_bx)3L zmvYt#)2n$^#WYwBE)cxx92rbFbd)}VMxz`Z*XKi4AIyfn;Inr&TO(Kv4oc{=H>FG_ z<7j-K8W|b8Rj_%a%z{D}ftgj49D==IMo%q_&}!O&On5Hc9NveLXI$hlF=Rq>Z5o7I zw3MNl&;h_RIPU`PimtAE*f(+*9capM}|ouqxKY z0=+h^Y=K4KLZF5=R4X|7x&!4aVSL~}fHuT`z8)-zwlXvWIsi~L>oZr?EvS6Pot^1>?T_+u;@&{3mP7}KUmixXJ z#4T*jfEsBSTg`KwR8X=N%UeguO_**x4ug92z5$K~uV5xy%M0CPP_s`@UT#CCi(;ps zIVJPGZ@;liCxw#^(ScF%dNe_mRj04Q8OF40&}s!0M`!Caa;P&70?OJqi(A&vE)^wL z{6Lx2uP_JVr!TUEh@)0xf`+LJ0P8a9h?J`<5pJ8g5&dZQ)96Q6o_4Qf>4M=;7l7rl z>Jzt_Ltlm|S0L2ge55&kTw%lRdeDz`(xEsV*JbGG#t+rqVH}A|NUx&9WF0VtU6JYf zU_$GFb6@0KQv=4U{O&xQIFa~C?ph3APTc=_9a|?@FTF6Cl+(Iah^#BD3tmNo?3XS7I1m@BYxwBulL8CE5YpiE9;3A3L<_-ohBFb_} zC~Cwe+;{dEro{ql2qEho5%oj4BjR%y>z|-sz?+4<+>!%0YaYKN3(UN(TL3P)ekg{L z*kCX@^1OrKyTJ@U8`Qpxw1jZ5l^CXsT(v#^R&ID$KF z{#ae5lZRqDr$+2IPL9ELE5|#lDBMqxxeOiJSr^I_T(=9nxf-xszYDstGT!A9i+!{D zGQ<)Dwo%Wk;HP+WT!YUwVhcI>g&`0oK_oaAo(B14dcvdwc`~j~3!ZWfSguzK{afi( zk2_EXt?V{*2MDA+uF&h(>xXjvdg$Zj%xobL!`y}2F_PxG_mixIQwU#bg64C|0K6Wh zKRJ3kE_^&CQRC2i<$C8!`k~zU67=)RC-bpKi0(pOzoE}XdIbD-olb=n)dU4LwGJ4) z$-DzFSLTmc4FO7iYJ?@I#SX!pGQv!>1}t~Z2+nUMiBa;WUc&xRegb1CV>W%L=1!bT zYQ%D9&fu%Vv=w70!=tf3yk83DOfd6&siHvV$%<*1=huME;*mgD?+`rqFa={lLk7`x;qg|QJ`Xfh|a7|~;T!??q^4TD*{uwC@DQvZ4Y_8VO! zcRc{YkIK=3^o7ssl}?>Z&(Z|~ap^(_$z8gDPA<#cOTu0|ad1e)fehU>eakEWB+D!g zY$$h?1p>Rw;J_E%#;ps*BnXVIot`xzM1l`#p$p|M3Q3{5zWt4>49xP?GcuBaZ>Mkh ziU3v1S8618`3ghk@7G~~YU)K?Kdbm_925aA-soFuBS_xVi)5)y1LZEY!OTZd77vDn zKb*wU(icIbHV_t?p6j$MHBbORTozO#A8;BLbnxnrTOogZm*coWLv{hzFfs6_XAP4< z3IPdvw6QvCn7E8e!ZKiG!*EgT(@Gq~{H~O6ms>SB$TqD3>MXb7N-q;Ya*V<4gttkw z>yJ0w^ zh5k%hJ9`0L3&MXINEXncN3a&qD^v?;Wk;a*>MrN2QiYJJe=@#|C##=+S6Ms?b}Hq^ zhvaM8m&5$pq?gc1AN5CiHJihsmCA=ys+vXOfSGVzHW@kd^{Y^EGluu3V=9x7EPA;>eV|tFNKJ-@?c^@VC^*41bGXebyO5E4B-tRGxvkocg4M zl#xJ@zjGW!ai$&2m7NAFsX0U5n1XI7&x;c~kFXu%wJojk6#KLY5OTV{LYn{LM*NeU z3Pr5;33Au|Z}aN@x7;5~N%rmilLs$=;D@E8K2bCLF3)$fvl%^Q#l3F~!%yp6&G3sE zFEtZ5txjhce(Ez7!|#G~g_%GE%?cTQ>JufyuP{_%CK$8%Lp8Jz^|6xS_sUseCfu5u z@hDVgCKwWQ7a4vWnX;wbuu_5(cKey8MSgyHu<1n6O5kC5TV zktrE|e*%^;{MK3n*yGeU?0j6IviBX3n*qbG3Wr|#waIXS-Rk$q@Y5?-_U;(DnXrof zx)Jv;XDl8H7x@8^2^fC*6O;_Uy>c_dD!RzSfh_P3N!wcc(h=}J4V38u747S-#?@h8?8#0 zoAHNlz`^ydCtN&y*-K>j=}qKAqLSgKO0PEK`63na^D0ZY*z-~eGW_%=Ql5NBB?FTx zU24W3b$~GZF1f?iqt|C3!|xwb$*8DGuQKBgi9`a|`-RnJg1KOZVMNxGC^w^-WHKVF z017kSFe{lE-vw7a_*H+6g$y|DARIrv5FtR!%oGfWaQrkdzQ>L!pvrOuu4_K`2Temm zA0o$3KZO6>-wbLFF~mjDpoIQeN%JjaX1wY6(;CHFhl8q#jN?=Th*!LoQlW_Bq`?^k zmdkSYjE9WbY%PL}-I@y8?0$cXK3y$P#HZ8Xi~=DZTyZ}b`UB4&mo9UbnS(yjb;9wh z35QOn21uMv4U`vHi4)+gZBCHKQHRKq*y#zN6ipEL$NG^%K!SGz{;?WM{9_gxeRRpq zIiPoNByP2S#aOL7<-qaN4-^0poq08qaQs+UoOooc9|=lb2(L#HV-K0dMgtQM{Yak6 zSqj6W8Yr1~u)sJ;DmjA<$cm6e6TLwzT0xj3=?79)JT{U{l2}-r&^;wh$@>meR{mOS zBxo&RKBo@|M!-x5Nv3lwESY&@fT1NEBns z3dY~~$cV<4g+>=9$~r(H0-^WlBFRLVg~d7j$1P)^SjUm6SH*FaNrpLnEsIyGI0EKfWYyKr}Q8R$B%`@V9C2xcA#{6JS;c?Lk1g`^X^YF z2$tv|f#atiN`fUUFh+KYW5KfW?KTsR-yJmY!y+D60>`hGNW$@BVIdAx@h}uCYxV=E ztlU*#uSm;+Fcb@jiv~47Nfe3&#;95L4m1P~`w7PnCdy!~*1kuM9}8Iw9%oHh!trCF zzaTB)*4!b`zK29&#OUp!A)wg*1|j*epvBPrYXp-x9}5mK$?D7vP*HqWvN~CQ9C9xh zyDbY@ek^1$jg~_{mP934Xu|S4%Zw-Z!y8Ns3weMnKNhfbsc3TNg=GF|*YqR1Fviw-cVp?N9 zbg>zn{6ajvoEdBa(7nj{eHf_qfh__MPS;V3VK%)`5>01;k*Sll4TgIDn8SqSch&{e zqTc~5KNgZi|7*Y!mLCgESbjHP;O7rn_!jEybvSq=b0BsEixn(jF-;$ri7Sm`#^kWIjkA)^Iztdp4VZg!PdwMb(3SnsQePsEu zfW2J2A+mhk*oXdsI~%+~|- zTKtao>sbJ{F7S0LIcjlnOD~kHH?y?D%6sMG2&g9hG-fZ;c5Ghmv4rQxLKf3tJ8HlZ zo*xU1Jikw*(b#NZ>=!mLyOnQ|=f^@8(`Y^PW663x3k|G>@WEHv``G8u>Y0vfQ=ePF=!0`My zK;l^wo*zpo;rTIx-Wud6-}k9DCOHI)!NCZJxW~MQ=hD@OJipvMXtPG_!PO+$l}QkE(NcznLI(iPFlGnr zo6*$;e5!J#YmDAYX7rFMma3PWbhz#K`wGIQVwD>q`VoKF`7|N=9d|NA*G(&5gy^RW zfr;{3hMdJxcLyyE;|MQDD$KJr=ul`WLpz`Y09Dg+xj93kALG+bjVDCEC2UR5_jS@C z6gB)ND$;4k$n-1v6McT0wb?M4`!Jf_Dv;^NPKOEoem#nS=~tCF9fBJcaiFFun5_nw zeymhbvJtC}lN)};!(gb{8S#YaH-)VQnSQKfP_tW4UI^3g_(XUp3o`5b_6xgsfI6fo zVx>dz*j&@23F=JxW`zxCnsf!)t)Tp{k4`g(O5-4));t-eAFBaC%T$zH@&aW;qRF~( zNk;HlRyLF!h}Qp z&J@VG*5)xGN(bTuY7U`*uYxd?VEo?P)oi8jYQiyOKUQ53vLBf}DZQjwGBbmrFlV6m zu$8_C%afx66d;h0{a8AI>{ot21heUdyEeXThIV6!wp-7Tz(o?{%^eY7SX53Itk+@4 z@gdBQg+qgY9KjvHU|g&L%N@X;!%XuLx(B?e*CDed`)~q1b}OO#v7V}!247u26r)P) zVG#_E?DKwCsB(*Cu%^UM3mpux;URNi^2qfL!0V_9%ykc-&sHWa!0DLVS%%((1G)W% z4@mdZ$uQ9UYQPe@9}7+Beq`7ivH&I`5K2MMcG|g8r2Dau#Hmxx9(A!?_Y3;6GW6wi zjL`iqOai?Y3!YVSeNd$PF<~-YEY}GobiW%UPB#zfO`k|-m=N3%x-C3HW%SVH$> zp`nk}w;!PgJvI{47fm2&~&)D>>QpqdkG3CE(#2qV9MDNr2FaUg@B==L@$=m z{a9$|?9~}$YCi5S;)tKaaFxY^q)NT5+j3!J8w?V-9tDIy9km#`WY%PKv4rr) zLNiek93v)QB!s`C*e6DB{7{|2(Tjw?CnRL2i{*w|H8CBFrSJpN{MV7#hjC392!E^` z)Qn8y)R-m!_qQ9Rs7LpLUT5*jDTcWR(_OHhpU@03>TJc5Enj$ptz&WAkC( zB+_h(NIV$bJ3R|Thy*{o$smP*glC3Gff}o` zq=~Dqu%I~?rfbZ~SI!C?$h=@h{i$|d**M5HtpVz+z8VBdl<}cadyw)+BC9sbUrTkC zhigFTEDsC)GMI3e2p5Hz;IA8O@dnDDrgT^!Ug1^>V|a+tS-Iv;1!vYrkY)_Qt{YCWy&5QGF^Mv{%c;G@cpDpd%n%7y)G8Eau52nJRw@JE-@ zRN;I!!9bNr2nHDKPtb0-KyGk5LzrJDVGUjnxj{Gey7tv*#TGI@N`VH?3wEGu5i8iK zloub8uW4Tn6K$uXgz`rmb(`gHbVwaqseDM)VRgWiUyQ%wlLN$3U?3bPls{F$aT8T^ z5~Q(sn~mCofmHbo;&MaWH-VHnC(U3Oq-lsOK%OadpLvf^{Z0OW`y#W5`wY!8)e8k z0um8hrX(F52RW&Dvf_-ZOP6ShD^ybcu37+D3Mqf@$;zY;uy}zirAMly{G~WScxSJa zPQb+lyWi8LK*Zw6ltipAVjy&3kQ@kI>SHD4PkMR`#8@mM9#sJ4PjjNC{B0Wz;T-q< zO3I)5Ohx(o96M)>mBq;En^OtpPwP}g`K!u*9)ImoHbePSpVU$QG?Yi6PAaNPvz}hR zd^0t#Tn5xh?NcmAnr^Hpe}6o9yzTIj?u##ERVq$%Bn-7rAbq>ZNopn>v-Ht7*%=7q zX`M24$}c(USYalddGeDK+Jp9)lH!*!S7Ig{_51S@88j))iLx!-chnF7g@gUh=T%>T z;5$cHPIArr+fthXC>*;ktxSH2)+<&L`}S**0EOm(SHH+EBMVo<3}l2=L_Y-!2pSro z&~1NKl>&OO9;vebZUO&An+PbhUHY^{28Kd^g3?lK(xn0lJ>znv3NTAGq$sV@MlKmp z=6f2pGr9^m6|5N zWHR=t0Bl;IaO7`EB{KN+zJE%N*S*mUwM-8Fhe`@GWd zM!sL^>VixD7z@x41cftCL5Bg)S94=Fkoc%bC1jAq@6}-Ifl^vtn!F0vbhIdfjF|#5 zpMEHtBglXWpHBnl`NF?-5=cLv@d3>mk|0>Nb9vR^|LaF;vjiC^nE} z*0p$o!m-$ffYMh3mc%Qbr7GtTwkQo(kg5D%gI;71VWGp!F{A!IQ zOg|R73@T8X8wakj7Jra2?-0+>feH{x>BEwM1`AyR75MG(FSxd+#UT_r;3<84ES*|ra%TrNGtvFR@>S6%} zbWm)qwX@cArqxyuuwX=y+OAdyE%qs(F{lt8f`|{E2}wu@1PCDsd0lezB+1Rax4-Y( z=iI&bdCb3^KUnLW^ZmYk&fVwRdw<_=|4zU&_ttKvZ4gaIh)CMoIsnGVg|$+lATX0g z2D}YV-Mahx^ahofP=*p@e+D$34yS{#Ec-LiSLh9v=hLjA=?TRhtFY*Ul{2uk+YyXr zUe3TnQkcNBfvq4zQn;+3u^&950cA;H5SW=n1KvV2N68v!_;pR8n71C81Jr*8HlF5r zCIDUS87$2_b^JjtMvkr!>r7Eg0#vQ5X*tjMf|;u|;EgH}Lg%kIizuQW`_Ccq`Ho zr~wUVJWX>=0GQ=~2E2~qscbz;OI>Fu=29YqeFpYVB1PVb=V;B+w1(na>&rWn*x50#v;z~2=Di&QUqg{sw}k`@ zN^dBptk~6(z+RLAB^_fRn0KQL_<4%FeNQ5J&@_kQzTYC<1<7nc<7t{}0>CT~G~n2L z$FjBI+Z0I|-Jwi`vDarnX;&@~%)5OC{4531hrDPh?V(uk7Zfm12^!FNnx>inFv|oD z_!*9)brf}){!rZY9OgXirW#n<_N1uuNArHFfv>`A!D7T=r!{N zrU^o`p22AQB!$yX&d`-AQ4#_vPt&!*VAfw4EthaKah9$r69+MwkWL#=5`L@!h@l=Uq}yT>V*N@SX@sS}Z=cjjm6Xk?l3 zG)*%BNU6m!+9iEYU%gyAl|XU9hQ(&1B=7OS!V5MWZ0N!UxK>P~)?6Mtf=7sbM60H* zQKWr4TX03siK)d45|bWytLyUbc@u|DK7xsG;4dmw=KNDf%xI4A-C~WE>dfFgI);QTL^)_=h+agNJ;(* z4TPU~k(xuedJxHp;aR_KqwsS5)Gu&vWKXoC?W13$=CFQx5E#7Eo<8Lh{}}AN*!n6M zsWl9AHvo;zS?M>vAN7cT#@RX%*Rd@SLNSNgkO*@uT<)*0^@7-9r z(rgyfoEIm6>q^paFk=r>eX{dZKFL&c9V68!FPqI`ruQOcHPh#5wwR`#U0h{qQbwBS zlkOD+xvCdRYz(C%?#IP)>Tnynnvn=3-{mw2>|IVv@iJQXP=cZ98O6MHr~~o+fHAkx zX9}0a zWD|_$?_mr)B#x-Um}OKFM=}4Es;;D8?i>jACeN4#oD^QE9Kp+gU-m5}g23KV0+WGL zcPRNHHgUjULO^N!Jo@e`5X=%v1CCtENm!NI5d;{vlYC3IAh5S&!<3M)$Ba@u$}s~W zrSTB-U0WcSrIZGo^3|@YSD?_59Qqto7WK|IQf@eLzypU*m|4~{K zl^9Y|uuxeVk3rw=27*~;X~4NymkXm3If6pj*_`m@1)a6g4ffK4#4xlJ@!F^~k>Gu> z(m-lyJcJ}O1Hde{G~kjI;SDBD>o|$1Dt`vn-X?H^y#%byOXr!5@kQ8@3i^ATIq3_6+e4GdDW$5i) z1!8A3>7#h?joRK+wd<)#<&42)`GQ%0X*@M%1!ufyN=Y&8Ns#|OTOom1?^Xyis*(s( z8c3NL`t9Bj4QA>kCDyxpg9#zCYGh=PGB@81`(z2sV!gF*&?bwnoTOaRZ)ZL5xm#NUaJ34`G7l4MWyOiba2|>+|kVD_}-NDUq%nYV40Y+tV2trI_`zFXEnU z^Z=M^8(l0dmJFQ|QerFR!d2HUzmBq%loICJ<q?9tYP5ps}ky=U#GV}+I zTr!)*l#-#<6cLWuQBz8QA%-yJl(Y_*vJ68`N#_0f3Tw(K{X`*}o>H0(Q3!%b6I6;t zZ=0eN(`+pYk$s>30N@`r(Ij5+VYetoGiSr>R>gpvQld(6|LfQuGekL>HAGgW$?<3> z#Z(fJC_#`Rx(u^1qX=@VCuJJHp9iShb`7WaN{D1gC}ozuj~#ss_TNF116heHIRhu5 zmA}CjT0w=Cky0YD#tZ^Am-nJA=E6sfN?#xhlnCS=$VWrQG6!7|rjpEy_If zEl@|c$dW`c@d1e4yccb;+quUeoMZMM!Z~#!g>%{QEpvM(ifK@^CGbc0v@`iv_wd2( z`neG9J+KL!2nqMJQz_gVlIpJ7{K(wt)9!re`9rZpLE3eJ{`Mb93H#d49C&y8p7NI7 zBuNRiQ<4(?zxX?cR*|*x@BA-i<%qm7^H%&~^-q^f|7!Fd^Rx|5m$q`nSMLAS(aT*u z?X?G<|K<(iJw?sd%w3BXW{c#KBc4fbuKJ-H?OP%yc>x;ceDq9N{-yGRxWvP>1wpyF1 z$UU)g(%>RX9rsDwpOBr`ZJzffvB$D9#|deB8wGvW-p9v9_gYrwctF~=p%OX0VfOIQ zN0ya2PD$H#Z2VpM;NdZm{g#E}Yxvl*ZK#csrO$sO_W*27=`bJLCX{=Pf4cvs@IjdH zof;im;oW!()^;#NS3mjBujhQi$Jsc}`g+bDHlesZ_v+o(iBDld4RkI$ zv9Zz5U~-N>VhcVqJoUniywBNyZ>H#EKU;dzS&3f!@L1uJQIW&2^9A}_Q}WWsHY&TW zuokd^;^(FeIl?fy(oTOmimx5CaiVhBGe`S@Z20}XH;7}5l-D}(*P!IpLpC;CKK?R8%mW=mnA~O?|7*SJ{Tj@hMskNx~vcx ztc;~hId!1dZ~ei(ZaB5Pi`n3uQ(lc6e#dBxUw&);jp576O9r4aT~J<^@q_Kb-gDr|+j1I}7X_ehs!?9` z2)}R0A%Aw$T_Z%Z@}kJpO|{CajyiYQjw^V=IL(JG%8MdUH(gR*wKVKsti%WG75TG< zwJM)Z!%(L@E~3}Rt=LV2KDJ}&=*Si2Ly@VQ8kAQJ;_te-uU~@Kz{xdJbK8^`g{E%0 zth~;n*C+nsSOQ*+fBeo(VFW8p)#Vf77Gl#dH7T!i)U}J=ZGjiokblnUP+kxQ6o%^ME|62zytXPu=_bD#~r(tSW zUga40lb$_J{a*j(w{H*$<%QrhOr6TBj5>EQ_j~t8SlR}Z7X_zo>QY`OsdLxL1#aV= z*M?HctJY=eQC=lzP_A)n zo}uOGvcw^j_!P_R)%-jScM#!s{k?x~Ym_(y51-;I^sP5&u#c@!^!BwiHmX#f0kre0 z8t9-E8Zu?oN&A*%@(h3I;@z7x&>>5NZ=AoSp+Vm8lzj?*xo6|G8V)}+XZ(*2^r#=o zr}&}g9*$}_^e^VESF2V3@@Xs`?)l5@Ar1Hix&YH+d#$`N20x!-sp~)RJ^f7}5NOq} ztdT$j0iWX4cI{F;H1)l+ldv0X4y?CXNB_bHcR3a~XL$QG_?eQ(L= zNM>|l?zaud1!2%e7Y0A(W6p+?W$R|3GcsNn{Dw&z{H2tatmNtG%KIomlFI9n%hau& z50M!8rv+OZ@sm;&$T33N{DfJ}v}qF*0wrg{Ge>CY@7T3`Y_wn9t-)pLP9URAtSS73LiY1@L45o0-_Rz2LQ@y$uR<#f^ms;Gb_IG!W2x;jPQZB=!B~XYpykkzF`j0#_A;(Pb43n1LVYRjs z1JSea^wi+faZAGZ%OsFJ%6P>8!dJ=W(*GOPzXQ z<}g>0VJFsX(uxc_XQYuF-?{vjs8P>QHkq+#^^B9A;w7Kih=F{;c|fk5C~`6SqZ;8f{#*OrP1J)o5G|a#kqn-ni#_QSID`tHIeDEaZ#QQm*cVKyzMW|1lJH zdf90hw6YUb#87(_W8NPb(d%0_P<_i5t-hs#Wz^yV%Bp$hH%e(Ta4F3ut&~P_gsGYb zG3NeJ5xs0@1DEY=(#rM(B?I@oLDedjh3R<)ML-6o2-u`i1XT1P^PmiwD{zC3AOq78 zY|`k66h_arb2e6?Z!3xGDs_6@G4#?m8*DmacRN!l(Xq>S#&Ii7`!$M%uQSEM7KdUX z#sWWUBKxi+nZE0WeiNt`QbEvVzT&>(*7lBC8^c1UUr)LKRU z%wZX7jZP%B=1_26Iu0CO^{?(8;c$4>Av)Q|T?*!}=i?uZcbGpMXN|X+Kk$VOTTpP@ zd?6h>d?6_?h?%olMm|>LB(G04ImyQkIf)m|tI$6DF6TID`%&m1qaZSLyK`)lp>JbM zRJ=HQSO_F)=GZ1tw;;P^60*p$GRKm9&3dIDwC&kV_^qIA)rq8Svwji-L)N|jhvRcV z`Kl9}@_nEbp~n>%=wfvu>Ei71ueX8x>p#A7@{k>te%8sqCN%t^9dYo9^;;L+906Ue zpGvxVi1^xqH!Iru`a5er{I7|*1(xeV9PJQ+KH~O=e)iJFl}o4GIEV;z?UV@gzc2hX}$41cnRDT_olK<^pmIg|D!ne& z&kvo*ycyf2P@7Mr)CS@<28vaRpfZszF2Z=ogopM z`$DbP$Z?lT#6eQIR3TOBw6H%yEc-(ujxJDX6e3-mNUfI3#3Iz?K_yCwu_M){o{0%+ zg8tRDhP|AbX|8ySPNYx-wd8zST}lb`OQWB+XsOMctd<7lNVO`xMl4M!fjl%hyU`^x zGov$B+nDM^XRDdGK7LPA2KB11xx!lR;6BEmu=BL;+H z&$2YN^a-d-R*Ch9dSkH?SgbH5qk(_}+wMNCawbm^Z z(d;zoGA+DNC!4&HzVfk8=1M17N=?oxmth}Oi!@p(Vm{W-L_KpHpi4qFxCf&}V&r#m zVl*;HB{4x3(xz&$&18S3)9A7prmdG>S|nBe(a1sN<|uJVj=VcYXcr# zqNNGDXnM4e%Pc#9mRk0U$wOKF_?Hbg=Fy?$OVF%tejhNaqJ=8CN|ULQNaOm)1hph? zYJNbyuY*>X(Jrx@n=_10jWKozhe+tV6!WoXIKFW|}iXjZ)Z@QRGKm*)u@JeOVcQu$&%#FaY-6U z-f*QZwOfuH^@Mp#l1l_F$#b-Fok^bXX}n<%ZQ)QN6~pyFaE%*W4@ma~$S%y*nmP@o z5fUD8hYpbzn2Rx=6DIQDLO)aSOnI(YPRp}3;)Kz(2K65Icbs+uX$Aw}z(3;=_iPWW zb7?9kemdRf+f z0dO$37NgQZP(cCI$l;!kC6rOJcG+^XBor4m2JTH5RBs9dG)ZuobubTL`(aC3+PF87 zx+RUl@ITREE>O_`_9)F1JTh{@I7b;dN3}*RL6-&(+uC6XTBQqRoCNv@An#7o0o-Yz z)MhwLc}}NG?+nw>7VWToN0j2G!5z&H%9_>*17Hubp-1SUXGlQ?5CawT416YxV(w6l zOxp>VKtGF(2{0*|h9RKT%hC9S8qbI8Y?Tr%YZMUcLZA*;99=qcm9o%O47$Xa`6Qi6 zVa(%dlGs?Ct)Ts1o3lU$1*C86O zf2WjOR64z|5SHOA((6=dQl(Ub7WF{^KnntmU8+hC@4(*aB={q|!`Dl*TtS zjZZg;VLfam(gKkl56|``QjM+!_z08O67HB^h}Y0D$aSa7Pf9Z@pa~eNQX;PHbt*Ny zDQl%B$3QvEgK0GKdMTtL zcro%2XZ|{=xCo|$VcJQPmjmyjychuNoC+D~d`4OaJrH7nP^F%X`$W)7+*<$_`9})U zrKNJIP8X03zg-~GNZ^+R6l#%jG5~a&krnW0wssPW>D?bH8Mr@6qQ0f|kA~qsqkK*^ z$(k&iWU6&=bcT01?psZ={AB>_ejR}JKQzhw*T4tC*#K02%V>`e@)yQO4`fntAR^Sf zSp}GpttS}g3qP^BzZ_|S6h7a; zQ;mRLCQ}x|?p8`<`1=hqrN!!4MhSn?j8Otg(tZsSo*Np0*Z4r-_N^D-{(cJZJRJdd z>?)|C%>6dRegwR)0x+`64chNv8tU=hV#iqsvmC7q-xh!{Cr=>OYf5Mc4;^fP18@ai zpabX(x`AHssU{RefPo+Zq<}#n3qIM62Cu;Tb`em(=eknxDwqN0fcfAp@HSWuR)Y;- zGuRGxg56+0I0%k`li&=v04{@Sa2?zMHQ))Trzpyna;7|~4pbMaJJpv8r6Q>~Duo(C z50PkEy-XLFy~&EcHEgmAXYeq@HuQ94C$!rxT|K zCx{ctN#qRX4$JBC}p)o`bA=W&;E*KxOV_i>MNtGLzNyWD3yKF^aU;05po^3r+3d1Brq-Zb6< z-g4e1UM24cuZnk-SHo+xaklZb>1z{hlVLN;rqHI;W{%BLn~gTRY>wJou(@vYgwN;u z@O$zj`04!7{E7Uj{002?_&fMt^3U?G@oQ~uZ9CZZwT-pSvK86tZ0Fc6v)yKU!1kQ& zb=x{SN4qX|p?0ZuW9*c6GwqhzZL#~p?ws8XyLx*!`|kG9_F484`^okT?Kjx(v;Wrq zx_!NayF*WhScg1^i4HRy-gVgSaMa;PhewW%j((0&j>8;fj?*3Ab^OTjgyU7mXHFhY zeVl|&W1aL)Z#sS8^rh4HPLG_OoqISZIFE7GIlt+=+4->Z&(3u&o-Tnd87>l+a+eh@ zl`iL8?z!5#c6Uv5eZ_T(>r&TGT)%a_>t^rP!%gTWa+~J1!fmhHCAV64Pxlb_EO&+b z0{1QMU%B7(u=VKSk>VlonC-FNIx z(Cf5UjkkyQ0PhjrW!@{iKliTo;rjIO$?%c;EcDswbJ6E{yH4#A+ezEaZMVJMxpq(6 zztldVy|n$j_B+~NX#c!}phHTB;tq>C?C$VWM_$K19fx%+?YOGr(T;at@_K3DOX8R2 zy|nYCAAC8!eSC9#r~0n^^5sdJ~aPU=p}IvwtGx3f>@gw7K?FX{Y6=UZJoyTo;o zby?EoK$qJBZ$Y9!E_hdPL{QV!w`+P=eb=>JPj{{N>*+V#Z>HZ4zn{7}bc^g(&}~V# zL)~ipyZC4Nzv{o$|A+4O-6Ojfb$_S(@$OH1^z1RR#~VF%_qf@!eb0=ZQ+jUg`C~8V zUh%yq^;*~Kd~bg5$lk@h-|Ky*52sI9pQ1i1`h44$(>J`YtnYh$&-SzF7u8SMZ(YAj z0Zsvl0VM%j1Fi=81P%$D8Mr&}UXXv#n4m>L$AcP!!-D0(8-g!~c!UfJnHjP#ZNGi}i~Y#jcI5 zjuXU9h+7j^9p5!x6u&P1mxOK!l7x*3Hxhd%PE6dEcrPh9Nt3iI>8UVU_?qy`WNva= z^1S5JDIO`qQDIj(HnSFdz@MgGd?<6Xy##(y%wX2Qq` zTP8G!vPA1dwfPzOEAwl_Lh(D|JCX#+63H!Tth7RUqae1RqTps>Y~kX7guE9#M5xm8s6E`>N-tt0zTIdV5lh zX0T?XmeP*X?$LR{hpAKgUi#PdS4-kbR+QA0jwt=4%)Lxmc4~5;$#W;)n36i>{i(dE z;;DyT?fUABSFgU7_}bcO)U^C*hswK^&n~|{J#G4?84fdwXM8g=cxJ`S$FoMx+Bdt? z?CGwky* z``v#V-Yj_Y^uq9ktKQlkR9st}xwvwPV9C5CkKZ2u_E$>>EM5JM z!#nzSs^1;*?w)1-%idbnu)Jvbg%wFFcC7SWId|pL_ayI~Ta~bC`|3`s=dXUgMz-d= zwP|ZB*Y#MpbUlB4$@Z|t~n{>B#{C_kv)l(Xr`=7`OkxA<;ZxRtY2 zzxCF(vD?mknEc_M?E%}@?(o?$|0D2`{-fI;Px$!a&cQnmeG>V}_D{Qix^kE2u6dPI z<>bnm-9@{r_l(|icJH9QhxQHJx9hXO&pz1Sb^nUby+2?0g~J!Kzc3t_a-jB0^_O=K z79PBIX#AnehesVge`MH^(?TPlcV@ z^-b6}yH1CnuKYIQ+dXHZ&g?rIbM}jK@#hX!C089gpK<==g`pSDUL1b$yGvs)RevY> z?&kOM?;re7@5Hbux)tvMei5;8V5K2 zXiyjo_)WwsA@o=$90El&>m2R?+m{KC;ZW=@xn}) zzXx1!4oId$5M{UwW&9Y4d2$z-ocS#D=EO?nv`yU;!#`gMmAb1=XE0L{#^Lfh^YxiwcGh_zup>vqoSk-Ruhl5%LhF1+2j z;lD^9elq)TmHyhJ)SgQ=y#DFiN6!EH`2Af+FI=x3QBX2x>Bh=q7k_&akv6ih^o@5u z*nRxcji>H_!-2Ks;X2v!ZNhLBx`uf0U=1eudD?`|SmcFja4_d=O@IIVtD2b=!d!2$ zcEE$~d{hD39$|;h!Ah)eCrKF|u9N;^u0rcI=-E^S!wqRUy|7f=1}QbOs*8+n%^rd`@q zQhqIYQLSv&)16yv?|rn!0OplHa~x;@t_KVtCg1;^fwv1UxqMhUvT)GtrP0S@Pj8zt zv-73OG0*SX-u!&Kg*;)eY}kj>kT+FReSY*Z|(~TKJjYnhIgh*I-?% z9D}}@rWn5Wa@r4Dr?$V5Si14jn2YsKcAc#HVq2~1a;MHKuRUJf)c`K~ZZB<+8^DP@ zUFyopZ!CCU+%U3Y+P1gKBYK>Pzv;E4_LhG|dJe44YQq^bKUrNG2OM}1F}|_m*2azJ zyFAD;fUbq*SDzZdjRnc72k#re+$TY zXx+psUyb>&F}(cOv91j<@sEz>eA3wWz=Ht>&=98j^~3JEDUTt$y}{&I28wE5g=4|;cZ%@mc^ z9dzanyRg&#+4xDXe7&d3<}1Ur`&2N{d3&Jn&U*`Z(e~pWGVbEnMt>M!0PQDqevv=x zVU)M`-L2D~U#<0w-&E@u{l-vd?e7=v`iE!D%Wz)!;9~>ut1iEK71k&8?bQz^oV&6$ zw0xl7CD%7TDz`Z)=m|Q)&qFwt^42V)+H z5&DRjb6o>-0Msc&N?AruY7R`_Me;;tG78F_flzQ#Gb@qadNF^dUke zqmHOuIVv39w8Lg_hdEe_bH0iK4UB`}zGt-A)b@@rR?=}3j;|wY6umwGe-(g-WR4n` z2ArP}8tzd~{EW(0!tdD{;0s~cl@kyGZZLx^tpA)+p|K!DFj%FQA+k_;@`5rLN#~*q z1#OIaGW*72?!qX8;RD}E$06E9A=2ukn$%Ibr81qk$P_08S(-GtMf4R*paK3TR;m=` zo1vL-;)iL5MUq^Zi7JsR)}UxKnjRytET+XNBbkO@5E^afDIl>N`lRfTeNc619w0c_(I6B7PiX@ zK1`X6w(5(m%=JW5Y`*xs$qF2RO=Jr5r6tJshhj5R6QMb32ReO&iKcx$0=-R~djL;ZLkCzAuYmdiHl%~%n*DDd8o?0DJmC!_#TbYJZ+Ikjq{Ub5|l?jlo!kMQHyx6p|}+?WdUjzz5^kBv9egj%*(av z0*ky@j>@-#KfECuZIJ?uk_j?odg*2A|>Fo%yMN0@+d zd*T!1dLUjvMn!mMAY%c!BM>k6fBp%{@|h1tZ^_@^$G`>y`TP4Afd7XQ@BSMZ`1^X6 zoN0rBc=z9XbrYZaI~hPP2GRS*Y>`f9N~dOOi(%S{@%}UvUIqO?IEaLQ{a|3i5B>$h zzkcu~GWq-OGSCk*jTrZbe4`!+hesa#k^cDaGT(CPq(55b<$p`s*8b=W*IfC6j^yvZ z%z!WCxih{)Sd3R^4E%=Y&z?Sh^q{eZ|KL&W(`U~c4jbxQke)GA8N6TAJ-l6Ab!^{` z%^TLgzxkv6CoWXqdGze4p|Lg9IcVkc?B35`fBN3PN{d8eUmho#ST=7>7v2$bus*ep_18K z&ekA{=2C>^{kmtaDC2PqZ*alFFK!{6r37KPKde_}K8oSRX6v_9BZ!5d%5dJmdvRvr z%Lxx-xJl!eUOWclq80*#;5HndI`~Blh^rR^Q9}$TYt|`*Ye9_B^?QnwAUX{Or5;0c zvgRO0Hy0x`=lS;W4Nc&OAoTt_TIh=;HUAs)gagm?&x5aJ;$LWqa32q7NAB7}GdixA==EJBEf zum~X@!Xkut2#XNnAuK|Ohp-4C9>OAocnFIS;vpI(hV^AIpXTZD=c&O*?Z_;cH$*v;eLtw+UMi>@P!)^w<*twr;ZU28gI z_h;r6{3kOPW*GJw&KTU_Oou0rA3mtLU-RH$?Gxinhvrh#Oov-n&K=$J;l{OV)@|Ir z@7Vb(cOIH&I<%lN&UEB?!a)eob-Oqi|ltAoZpz2x1|iz4i3`5z!CBxiMoFU!c8}A)vkg zP-*H5I0>%)6)?6ToHMBWYufvpi7~pqvLFVcli*B;M-UyaJb=;7#R$!LzI9AP6F5>- ziNMXJ82fB}jtN^IPL1Ayp==?ITsee+%-KvMSwb55ZaM=wbOViK32Efw6b5q88XCzG zVr1PSAp@CioRz>5(#VBL3}o6$TxK0hNF(30K(3&XEFnR%2q7%72q7NAB7}GdixA== zEJBEfum~X@!Xkut2#XNnAuK|Ohp-4C9>OAocnFIS;vp=g!LYjG2=#56Q zgc$jZ70$y*wva}$LWDGuC8Uw8up^CR329`TOAocnFIS;vpOAocnFJ-|7$&j zHK~EFCre28CTmgyjbsTil0B&bBiTY4$qEtDNS2UBvL-dqNS2UBl9>)Iuh;+oex?I( zyu+Zr1?d@31-!ZT?!LXF28}72R9aRtsc=+!M6Zr+c1J;D zYpQe5%E!*9Z%Y33l{=4qd*R~w(}zD=_UibgUS9lT(5y9G6|}Q=?LD+~)t8s=K79c{ zn$hs&_ILZ2X)<~^A-mRe$d2DWNx$*iJN0!2{_~qB*Q#Q?kVSJT!t%O}TYmc9V*~Hb ziN(V^A)KWIVYtC%`)@rm@EWi0QuRU*3qch)4|v?T#h0ExG;p7uof~!x7%T+{!Q~Cz zcBjU``E8vL=^0t9wHbHlDbzmRGYo5+vPjF}Pdt0yz-c%!7Ac!@SZAyM@t%RID!?jJ zhSt1x4QehcXpJ$0HFmRZLd{hz)|fK1X6{|6xn4$Vj2W!4UvLjOSpzk< zrqLQ>hSn@Zn%m{H#+V_R+vS7W71-A1eLL+o08hhlowLcd)xzJ$Tgy|%5st1-RO!8WE0w)um% zLfoboNXU+nMV5@0PgvXZY6@wsz00!xKCEqT)tbMLYyB-W!3@XoZgH>oqgUhsba^^Jtx literal 0 HcmV?d00001 diff --git a/Output/Themes/Ambient/Resources/PlayIcon.psd b/Output/Themes/Ambient/Resources/PlayIcon.psd new file mode 100644 index 0000000000000000000000000000000000000000..ba63fc5c3f6910b6233d947f9a411364065ea4a0 GIT binary patch literal 82930 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 a;^tAQa+UI`PH(>9>F(-eSc(gA`1gO((Uh_P literal 0 HcmV?d00001 diff --git a/Output/Themes/Ambient/Resources/PreviousIcon.psd b/Output/Themes/Ambient/Resources/PreviousIcon.psd new file mode 100644 index 0000000000000000000000000000000000000000..0e5756ebcfeee17b82c1872e5f0d2e10ab364974 GIT binary patch literal 73686 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 Y?E}A`ef5Z9)jroJGXL`iKMxrG3+0l#-v9sr literal 0 HcmV?d00001 diff --git a/Vocaluxe/Menu/CGraphics.cs b/Vocaluxe/Menu/CGraphics.cs index 7a1eb978..6052b778 100644 --- a/Vocaluxe/Menu/CGraphics.cs +++ b/Vocaluxe/Menu/CGraphics.cs @@ -480,7 +480,7 @@ namespace Vocaluxe.Menu { bool handled = false; if (_CurrentPopupScreen != EPopupScreens.NoPopup) - handled = !_PopupScreens[(int)_CurrentPopupScreen].HandleInput(KeyEvent); + handled = _PopupScreens[(int)_CurrentPopupScreen].HandleInput(KeyEvent); if (!handled) Resume &= _Screens[(int)_CurrentScreen].HandleInput(KeyEvent); @@ -500,7 +500,7 @@ namespace Vocaluxe.Menu bool handled = false; if (_CurrentPopupScreen != EPopupScreens.NoPopup) - handled = !_PopupScreens[(int)_CurrentPopupScreen].HandleMouse(MouseEvent); + handled = _PopupScreens[(int)_CurrentPopupScreen].HandleMouse(MouseEvent); if (!handled && !_Fading && (_Cursor.IsActive || MouseEvent.LB || MouseEvent.RB)) Resume &= _Screens[(int)_CurrentScreen].HandleMouse(MouseEvent); diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 1909d67e..2ded8e4e 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -64,13 +64,10 @@ namespace Vocaluxe.Screens case Keys.Enter: if (Buttons[htButtons(ButtonNext)].Selected) CBackgroundMusic.Next(); - break; if (Buttons[htButtons(ButtonPrevious)].Selected) - ;//CBackgroundMusic.Previous(); - break; + CBackgroundMusic.Previous(); if (Buttons[htButtons(ButtonPlay)].Selected) CBackgroundMusic.Play(); - break; if (Buttons[htButtons(ButtonPause)].Selected) CBackgroundMusic.Pause(); break; From 82fd878975b8f01022ff9b3fd761c1fc7fd8e7e0 Mon Sep 17 00:00:00 2001 From: Alexander Eckart Date: Fri, 2 Mar 2012 17:12:04 +0100 Subject: [PATCH 07/37] activating and deactivating popup player control by mouse --- Vocaluxe/Menu/CGraphics.cs | 17 ++++++++++++++--- Vocaluxe/Menu/CMenu.cs | 8 ++++++++ Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 7 +++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Vocaluxe/Menu/CGraphics.cs b/Vocaluxe/Menu/CGraphics.cs index ce018613..c8a5b2fe 100644 --- a/Vocaluxe/Menu/CGraphics.cs +++ b/Vocaluxe/Menu/CGraphics.cs @@ -443,6 +443,9 @@ namespace Vocaluxe.Menu KeyEvent KeyEvent = new KeyEvent(); MouseEvent MouseEvent = new MouseEvent(); + bool PopupPlayerControlAllowed = _CurrentScreen != EScreens.ScreenOptionsRecord && _CurrentScreen != EScreens.ScreenSing && _CurrentScreen != EScreens.ScreenNames + && _CurrentScreen != EScreens.ScreenSong; + bool Resume = true; while (keys.PollEvent(ref KeyEvent)) { @@ -452,9 +455,7 @@ namespace Vocaluxe.Menu _Cursor.FadeOut(); } - if (_CurrentScreen != EScreens.ScreenOptionsRecord && _CurrentScreen != EScreens.ScreenSing && _CurrentScreen != EScreens.ScreenNames - && _CurrentScreen != EScreens.ScreenSong && - KeyEvent.Key == Keys.Tab) + if (PopupPlayerControlAllowed && KeyEvent.Key == Keys.Tab) { if (_CurrentPopupScreen == EPopupScreens.NoPopup) ShowPopup(EPopupScreens.PopupPlayerControl); @@ -498,6 +499,16 @@ namespace Vocaluxe.Menu UpdateMousePosition(MouseEvent.X, MouseEvent.Y); + bool isOverPopupPlayerControl = CHelper.IsInBounds(_PopupScreens[(int)EPopupScreens.PopupPlayerControl].ScreenArea, MouseEvent); + if (PopupPlayerControlAllowed && isOverPopupPlayerControl) + { + if (_CurrentPopupScreen == EPopupScreens.NoPopup) + ShowPopup(EPopupScreens.PopupPlayerControl); + } + + if (!isOverPopupPlayerControl && _CurrentPopupScreen == EPopupScreens.PopupPlayerControl) + HidePopup(EPopupScreens.PopupPlayerControl); + bool handled = false; if (_CurrentPopupScreen != EPopupScreens.NoPopup) handled = !_PopupScreens[(int)_CurrentPopupScreen].HandleMouse(MouseEvent); diff --git a/Vocaluxe/Menu/CMenu.cs b/Vocaluxe/Menu/CMenu.cs index b8c5332e..0e416da9 100644 --- a/Vocaluxe/Menu/CMenu.cs +++ b/Vocaluxe/Menu/CMenu.cs @@ -59,6 +59,13 @@ namespace Vocaluxe.Menu protected string[] _ThemeSelectSlides; protected string[] _ThemeSingNotes; + protected SRectF _ScreenArea; + + public SRectF ScreenArea + { + get { return _ScreenArea; } + } + public int ThemeScreenVersion { get { return _ScreenVersion; } @@ -99,6 +106,7 @@ namespace Vocaluxe.Menu _MouseDY = 0; _Active = false; + _ScreenArea = new SRectF(0f, 0f, CSettings.iRenderW, CSettings.iRenderH, 0f); _ThemeName = String.Empty; _ThemeBackgrounds = null; diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 141d5703..5a1eafc1 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -38,6 +38,13 @@ namespace Vocaluxe.Screens _ThemeButtons = buttons.ToArray(); } + public override void LoadTheme() + { + base.LoadTheme(); + + _ScreenArea = Statics[htStatics(StaticBG)].Rect; + } + public override bool HandleInput(KeyEvent KeyEvent) { if (KeyEvent.KeyPressed && !Char.IsControl(KeyEvent.Unicode)) From 8b1a7520b8b163f825fcfa2cc60c576d7aae9ca8 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Fri, 2 Mar 2012 17:28:51 +0100 Subject: [PATCH 08/37] Added repeat function --- Output/Themes/Ambient/RepeatIcon.png | Bin 0 -> 15003 bytes .../Themes/Ambient/Resources/RepeatIcon.psd | Bin 0 -> 68835 bytes .../Screens/PopupScreenPlayerControl.xml | 47 ++++++++++++++++++ Output/Themes/Ambient/Skin Blue.xml | 1 + Output/Themes/Ambient/Skin Green.xml | 1 + Output/Themes/Ambient/Skin Red.xml | 3 +- Output/Themes/Ambient/Skin Yellow.xml | 3 +- Vocaluxe/Base/CBackgroundMusic.cs | 8 +++ Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 6 +++ 9 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 Output/Themes/Ambient/RepeatIcon.png create mode 100644 Output/Themes/Ambient/Resources/RepeatIcon.psd diff --git a/Output/Themes/Ambient/RepeatIcon.png b/Output/Themes/Ambient/RepeatIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..6675a41af65b46505dda3aafb6fd1b9312a0b294 GIT binary patch literal 15003 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 literal 0 HcmV?d00001 diff --git a/Output/Themes/Ambient/Resources/RepeatIcon.psd b/Output/Themes/Ambient/Resources/RepeatIcon.psd new file mode 100644 index 0000000000000000000000000000000000000000..cd1a06373a9fdd1d76079ab05970128cb117fffe GIT binary patch literal 68835 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: Reflection Space of selected button--> + + + RepeatIcon + + RepeatIcon + + 265 + 0 + 0,00 + 50 + 50 + + + ButtonColor + + + ButtonSColor + + + 265 + 25 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + + + Normal + + + + + + + + + + \ No newline at end of file diff --git a/Output/Themes/Ambient/Skin Blue.xml b/Output/Themes/Ambient/Skin Blue.xml index 732c2f9d..83672c2f 100644 --- a/Output/Themes/Ambient/Skin Blue.xml +++ b/Output/Themes/Ambient/Skin Blue.xml @@ -220,6 +220,7 @@ NextIcon.png PlayIcon.png PauseIcon.png + RepeatIcon.png [Blue]BG_Video.mp4 diff --git a/Output/Themes/Ambient/Skin Green.xml b/Output/Themes/Ambient/Skin Green.xml index fe1b9b45..18148787 100644 --- a/Output/Themes/Ambient/Skin Green.xml +++ b/Output/Themes/Ambient/Skin Green.xml @@ -220,6 +220,7 @@ NextIcon.png PlayIcon.png PauseIcon.png + RepeatIcon.png [Green]BG_Video.mp4 diff --git a/Output/Themes/Ambient/Skin Red.xml b/Output/Themes/Ambient/Skin Red.xml index 1b74be2e..ff54ff23 100644 --- a/Output/Themes/Ambient/Skin Red.xml +++ b/Output/Themes/Ambient/Skin Red.xml @@ -219,7 +219,8 @@ PreviousIcon.png NextIcon.png PlayIcon.png - PauseIcon.png + PauseIcon.png + RepeatIcon.png [Red]BG_Video.mp4 diff --git a/Output/Themes/Ambient/Skin Yellow.xml b/Output/Themes/Ambient/Skin Yellow.xml index 1a001daa..6920b340 100644 --- a/Output/Themes/Ambient/Skin Yellow.xml +++ b/Output/Themes/Ambient/Skin Yellow.xml @@ -219,7 +219,8 @@ PreviousIcon.png NextIcon.png PlayIcon.png - PauseIcon.png + PauseIcon.png + RepeatIcon.png [Yellow]BG_Video.mp4 diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 99bf2596..352c9398 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -132,6 +132,14 @@ namespace Vocaluxe.Base } } + public static void Repeat() + { + if (_AllFileNames.Count > 0 && _CurrentMusicStream != -1) + { + CSound.SetPosition(_CurrentMusicStream, 0); + } + } + public static void ApplyVolume() { CSound.SetStreamVolume(_CurrentMusicStream, CConfig.BackgroundMusicVolume); diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 2ded8e4e..f28d39cc 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -22,6 +22,7 @@ namespace Vocaluxe.Screens private const string ButtonPlay = "ButtonPlay"; private const string ButtonPause = "ButtonPause"; private const string ButtonNext = "ButtonNext"; + private const string ButtonRepeat = "ButtonRepeat"; public CPopupScreenPlayerControl() { @@ -42,6 +43,7 @@ namespace Vocaluxe.Screens buttons.Add(ButtonPause); buttons.Add(ButtonPrevious); buttons.Add(ButtonNext); + buttons.Add(ButtonRepeat); _ThemeButtons = buttons.ToArray(); } @@ -70,6 +72,8 @@ namespace Vocaluxe.Screens CBackgroundMusic.Play(); if (Buttons[htButtons(ButtonPause)].Selected) CBackgroundMusic.Pause(); + if (Buttons[htButtons(ButtonRepeat)].Selected) + CBackgroundMusic.Repeat(); break; } } @@ -90,6 +94,8 @@ namespace Vocaluxe.Screens CBackgroundMusic.Play(); if (Buttons[htButtons(ButtonPause)].Selected) CBackgroundMusic.Pause(); + if (Buttons[htButtons(ButtonRepeat)].Selected) + CBackgroundMusic.Repeat(); } else if (MouseEvent.LB) { CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); From 9addfa095768ae2378dde44b7286af0fc7810984 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 5 Mar 2012 13:59:28 +0100 Subject: [PATCH 09/37] Added new Options ShowVideo and Sing, ShowVideo is not working yet, need icon for sing button! --- .../Screens/PopupScreenPlayerControl.xml | 138 ++++++++++++++ Vocaluxe/Base/CBackgroundMusic.cs | 180 +++++++++++++++--- Vocaluxe/Lib/Song/CSong.cs | 5 + Vocaluxe/Program.cs | 14 +- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 39 +++- 5 files changed, 341 insertions(+), 35 deletions(-) diff --git a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml index c24f77ca..4b338b61 100644 --- a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml +++ b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml @@ -253,5 +253,143 @@ + + + VideoIcon + + VideoIcon + + 315 + 0 + 0,00 + 50 + 50 + + + ButtonColor + + + ButtonSColor + + + 315 + 0 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + + + Normal + + + + + + + + + + + + + DuetIcon + + DuetIcon + + 380 + 0 + 0,00 + 50 + 50 + + + ButtonColor + + + ButtonSColor + + + 380 + 0 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + + + Normal + + + + + + + + + + + + + 465 + 0 + + 0,00 + + 50 + + 825 + + + StaticColor + + + TextSColor + + Left + + + + Normal + + + + + + + + + CoverBackground + + 0 + 0 + 0,00 + 50 + 50 + + + Visible + + + + \ No newline at end of file diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 352c9398..ba8866bf 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -6,6 +6,8 @@ using System.IO; using Vocaluxe.Base; using System.Diagnostics; using Vocaluxe.Lib.Song; +using Vocaluxe.Lib.Draw; +using System.Drawing; namespace Vocaluxe.Base { @@ -14,23 +16,40 @@ namespace Vocaluxe.Base private static CHelper Helper = new CHelper(); private static int _CurrentMusicStream = -1; private static int _PreviousMusicIndex = 0; - private static string _CurrentMusicFilePath = String.Empty; - - private static List _AllFileNames = new List(); - private static List _NotPlayedFileNames = new List(); - private static List _BGMusicFileNames = new List(); - private static List _PreviousFileNames = new List(); + private static PlaylistElement _CurrentPlaylistElement = new PlaylistElement(); + + private static List _AllFileNames = new List(); + private static List _NotPlayedFileNames = new List(); + private static List _BGMusicFileNames = new List(); + private static List _PreviousFileNames = new List(); private static bool _OwnMusicAdded; private static bool _BackgroundMusicAdded; private static bool _Playing; + private static int _Video; + public static void Init() { - _BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.mp3", true, true)); - _BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wav", true, true)); - _BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.ogg", true, true)); - _BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wma", true, true)); + foreach(string path in Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.mp3", true, true)) + { + _BGMusicFileNames.Add(new PlaylistElement(path)); + } + + foreach(string path in Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.ogg", true, true)) + { + _BGMusicFileNames.Add(new PlaylistElement(path)); + } + + foreach(string path in Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wma", true, true)) + { + _BGMusicFileNames.Add(new PlaylistElement(path)); + } + + foreach(string path in Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wav", true, true)) + { + _BGMusicFileNames.Add(new PlaylistElement(path)); + } if(CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC) AddBackgroundMusic(); @@ -60,7 +79,7 @@ namespace Vocaluxe.Base { CSound.FadeAndStop(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); - _CurrentMusicFilePath = String.Empty; + _CurrentPlaylistElement = new PlaylistElement(); _Playing = false; } @@ -91,10 +110,10 @@ namespace Vocaluxe.Base if (_NotPlayedFileNames.Count == 0) _NotPlayedFileNames.AddRange(_AllFileNames); - _CurrentMusicFilePath = _NotPlayedFileNames[CGame.Rand.Next(_NotPlayedFileNames.Count)]; - _NotPlayedFileNames.Remove(_CurrentMusicFilePath); + _CurrentPlaylistElement = _NotPlayedFileNames[CGame.Rand.Next(_NotPlayedFileNames.Count)]; + _NotPlayedFileNames.Remove(_CurrentPlaylistElement); - _PreviousFileNames.Add(_CurrentMusicFilePath); + _PreviousFileNames.Add(_CurrentPlaylistElement); _PreviousMusicIndex = _PreviousFileNames.Count - 1; } else if(_PreviousFileNames.Count > 0) //We are in the previous list @@ -102,10 +121,10 @@ namespace Vocaluxe.Base Stop(); _PreviousMusicIndex++; - _CurrentMusicFilePath = _PreviousFileNames[_PreviousMusicIndex]; + _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; } - _CurrentMusicStream = CSound.Load(_CurrentMusicFilePath); + _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.GetMusicFilePath()); CSound.SetStreamVolume(_CurrentMusicStream, 0f); Play(); } @@ -123,10 +142,9 @@ namespace Vocaluxe.Base if (_PreviousMusicIndex < 0) _PreviousMusicIndex = 0; //No previous songs left, so play the first - _CurrentMusicFilePath = _PreviousFileNames[_PreviousMusicIndex]; - + _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; - _CurrentMusicStream = CSound.Load(_CurrentMusicFilePath); + _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.GetMusicFilePath()); CSound.SetStreamVolume(_CurrentMusicStream, 0f); Play(); } @@ -151,8 +169,8 @@ namespace Vocaluxe.Base { foreach (CSong song in CSongs.AllSongs) { - _AllFileNames.Add(song.GetMP3()); - _NotPlayedFileNames.Add(song.GetMP3()); + _AllFileNames.Add(new PlaylistElement(song)); + _NotPlayedFileNames.Add(new PlaylistElement(song)); } } _OwnMusicAdded = true; @@ -169,7 +187,7 @@ namespace Vocaluxe.Base _NotPlayedFileNames.AddRange(_BGMusicFileNames); } - if (IsPlaying() && !IsBackgroundFile(_CurrentMusicFilePath) || _AllFileNames.Count == 0) + if (IsPlaying() && !IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0) Next(); _OwnMusicAdded = false; @@ -194,7 +212,7 @@ namespace Vocaluxe.Base AddOwnMusic(); _BackgroundMusicAdded = false; - if (IsPlaying() && IsBackgroundFile(_CurrentMusicFilePath) || _AllFileNames.Count == 0) + if (IsPlaying() && IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0) Next(); } } @@ -253,14 +271,124 @@ namespace Vocaluxe.Base return CSound.IsPlaying(_CurrentMusicStream); } - private static bool IsBackgroundFile(string FilePath) + public static string GetSongArtistAndTitle() { - foreach (string file in _BGMusicFileNames) + return _CurrentPlaylistElement.GetArtist() +" - " + _CurrentPlaylistElement.GetTitle(); + } + + public static STexture GetCover() + { + return _CurrentPlaylistElement.GetCover(); + } + + public static void ToggleVideo() + { + _Video = CVideo.VdLoad(_CurrentPlaylistElement.GetVideoFilePath()); + CVideo.VdSkip(_Video, CSound.GetLength(_CurrentMusicStream) / 4f, _CurrentPlaylistElement.GetVideoGap()); + } + + public static int GetSongNr() + { + return _CurrentPlaylistElement.GetSongNr(); + } + + public static bool IsDuet() + { + return _CurrentPlaylistElement.IsDuet(); + } + + private static bool IsBackgroundFile(PlaylistElement element) + { + foreach (PlaylistElement elements in _BGMusicFileNames) { - if (file == FilePath) + if (elements.GetMusicFilePath() == element.GetMusicFilePath()) return true; } return false; } } } + +class PlaylistElement +{ + string _Title; + string _Artist; + string _MusicFilePath; + string _VideoFilePath; + STexture _Cover; + float _VideoGap; + int _SongNr; + bool _Duet; + + public PlaylistElement(CSong song) + { + _Title = song.Title; + _Artist = song.Artist; + _MusicFilePath = song.GetMP3(); + _VideoFilePath = song.GetVideo(); + _Cover = song.CoverTextureSmall; + _VideoGap = song.VideoGap; + _SongNr = song.ID; + _Duet = song.IsDuet; + } + + public PlaylistElement(string FilePath) + { + _Title = "Unknown"; + _Artist = "Unknown"; + _MusicFilePath = FilePath; + _VideoFilePath = string.Empty; + _Cover = CCover.NoCover; + _SongNr = -1; + } + + public PlaylistElement() + { + _Title = "Unknown"; + _Artist = "Unknown"; + _MusicFilePath = string.Empty; + _VideoFilePath = string.Empty; + _Cover = CCover.NoCover; + _SongNr = -1; + } + + public string GetMusicFilePath() + { + return _MusicFilePath; + } + + public string GetVideoFilePath() + { + return _VideoFilePath; + } + + public string GetTitle() + { + return _Title; + } + + public string GetArtist() + { + return _Artist; + } + + public STexture GetCover() + { + return _Cover; + } + + public float GetVideoGap() + { + return _VideoGap; + } + + public int GetSongNr() + { + return _SongNr; + } + + public bool IsDuet() + { + return _Duet; + } +} diff --git a/Vocaluxe/Lib/Song/CSong.cs b/Vocaluxe/Lib/Song/CSong.cs index 39c1d35f..bfb8e7b2 100644 --- a/Vocaluxe/Lib/Song/CSong.cs +++ b/Vocaluxe/Lib/Song/CSong.cs @@ -118,6 +118,11 @@ namespace Vocaluxe.Lib.Song return Path.Combine(Folder, MP3FileName); } + public string GetVideo() + { + return Path.Combine(Folder, VideoFileName); + } + public bool ReadTXTSong(string FilePath) { if (!File.Exists(FilePath)) diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index 6ff04a93..2239d6ff 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -86,13 +86,6 @@ namespace Vocaluxe Application.DoEvents(); - // Init Background Music - CLog.StartBenchmark(0, "Init Background Music"); - CBackgroundMusic.Init(); - CLog.StopBenchmark(0, "Init Background Music"); - - Application.DoEvents(); - // Init Profiles CLog.StartBenchmark(0, "Init Profiles"); CProfiles.Init(); @@ -121,6 +114,13 @@ namespace Vocaluxe Application.DoEvents(); + // Init Background Music + CLog.StartBenchmark(0, "Init Background Music"); + CBackgroundMusic.Init(); + CLog.StopBenchmark(0, "Init Background Music"); + + Application.DoEvents(); + // Theme System CLog.StartBenchmark(0, "Init Theme"); CTheme.InitTheme(); diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index c6fea31b..f1df4730 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -7,6 +7,7 @@ using System.Windows.Forms; using Vocaluxe.Base; using Vocaluxe.Lib.Draw; using Vocaluxe.Menu; +using Vocaluxe.Lib.Song; namespace Vocaluxe.Screens { @@ -16,13 +17,17 @@ namespace Vocaluxe.Screens const int ScreenVersion = 1; private const string StaticBG = "StaticBG"; - private const string Cover = "Cover"; + private const string StaticCover = "StaticCover"; private const string ButtonPrevious = "ButtonPrevious"; private const string ButtonPlay = "ButtonPlay"; private const string ButtonPause = "ButtonPause"; private const string ButtonNext = "ButtonNext"; private const string ButtonRepeat = "ButtonRepeat"; + private const string ButtonShowVideo = "ButtonShowVideo"; + private const string ButtonSing = "ButtonSing"; + + private const string TextCurrentSong = "TextCurrentSong"; public CPopupScreenPlayerControl() { @@ -36,7 +41,8 @@ namespace Vocaluxe.Screens _ThemeName = "PopupScreenPlayerControl"; _ScreenVersion = ScreenVersion; - _ThemeStatics = new string[] { StaticBG, Cover }; + _ThemeStatics = new string[] { StaticBG, StaticCover }; + _ThemeTexts = new string[] { TextCurrentSong }; List buttons = new List(); buttons.Add(ButtonPlay); @@ -44,6 +50,8 @@ namespace Vocaluxe.Screens buttons.Add(ButtonPrevious); buttons.Add(ButtonNext); buttons.Add(ButtonRepeat); + buttons.Add(ButtonShowVideo); + buttons.Add(ButtonSing); _ThemeButtons = buttons.ToArray(); } @@ -81,6 +89,10 @@ namespace Vocaluxe.Screens CBackgroundMusic.Pause(); if (Buttons[htButtons(ButtonRepeat)].Selected) CBackgroundMusic.Repeat(); + if (Buttons[htButtons(ButtonShowVideo)].Selected) + CBackgroundMusic.ToggleVideo(); + if (Buttons[htButtons(ButtonSing)].Selected) + StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); break; } } @@ -103,6 +115,10 @@ namespace Vocaluxe.Screens CBackgroundMusic.Pause(); if (Buttons[htButtons(ButtonRepeat)].Selected) CBackgroundMusic.Repeat(); + if (Buttons[htButtons(ButtonShowVideo)].Selected) + CBackgroundMusic.ToggleVideo(); + if (Buttons[htButtons(ButtonSing)].Selected) + StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); } else if (MouseEvent.LB) { CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); @@ -119,6 +135,8 @@ namespace Vocaluxe.Screens { Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.IsPlaying(); + Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.GetSongArtistAndTitle(); + Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); return true; } @@ -135,5 +153,22 @@ namespace Vocaluxe.Screens return base.Draw(); } + + private void StartSong(int SongNr, bool Duet) + { + if (SongNr >= 0 && CSongs.SongsLoaded) + { + if (Duet) + CGame.SetGameMode(GameModes.EGameMode.Duet); + else + CGame.SetGameMode(GameModes.EGameMode.Normal); + + CGame.Reset(); + CGame.ClearSongs(); + CGame.AddSong(SongNr); + + CGraphics.FadeTo(EScreens.ScreenNames); + } + } } } From 7ae34d6c08292aad4203d7525df52d3c3eae49a7 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 5 Mar 2012 17:02:35 +0100 Subject: [PATCH 10/37] Some code cleanup --- Vocaluxe/Base/CBackgroundMusic.cs | 18 +++++------------- Vocaluxe/Base/CSettings.cs | 5 +++++ 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index ba8866bf..20203e29 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -31,22 +31,14 @@ namespace Vocaluxe.Base public static void Init() { - foreach(string path in Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.mp3", true, true)) + List templist = new List(); + + foreach(string ending in CSettings.MusicFileTypes) { - _BGMusicFileNames.Add(new PlaylistElement(path)); + templist.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, ending, true, true)); } - foreach(string path in Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.ogg", true, true)) - { - _BGMusicFileNames.Add(new PlaylistElement(path)); - } - - foreach(string path in Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wma", true, true)) - { - _BGMusicFileNames.Add(new PlaylistElement(path)); - } - - foreach(string path in Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wav", true, true)) + foreach (string path in templist) { _BGMusicFileNames.Add(new PlaylistElement(path)); } diff --git a/Vocaluxe/Base/CSettings.cs b/Vocaluxe/Base/CSettings.cs index bbd6164f..24ffda63 100644 --- a/Vocaluxe/Base/CSettings.cs +++ b/Vocaluxe/Base/CSettings.cs @@ -111,6 +111,11 @@ namespace Vocaluxe.Base public static bool TabNavigation = false; public const float BackgroundMusicFadeTime = 0.5f; + + public static List MusicFileTypes = new List() + { + "*.mp3","*.wma","*.ogg","*.wav" + }; public static string GetVersionText() { From 01ec1b0927fece55a6412c7dc6009293bf175498 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 5 Mar 2012 18:51:23 +0100 Subject: [PATCH 11/37] Added video support, still need to fix some things --- Vocaluxe/Base/CBackgroundMusic.cs | 73 ++++++++++++++++++- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 7 +- 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 20203e29..50debf24 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -26,8 +26,10 @@ namespace Vocaluxe.Base private static bool _OwnMusicAdded; private static bool _BackgroundMusicAdded; private static bool _Playing; + private static bool _VideoEnabled; - private static int _Video; + private static int _Video = -1; + private static STexture _CurrentVideoTexture = new STexture(-1); public static void Init() { @@ -63,12 +65,16 @@ namespace Vocaluxe.Base } else Next(); + if (_VideoEnabled) + LoadVideo(); } } } public static void Stop() { + if (_Video != 0) + CVideo.VdClose(_Video); CSound.FadeAndStop(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); _CurrentPlaylistElement = new PlaylistElement(); @@ -77,6 +83,8 @@ namespace Vocaluxe.Base public static void Pause() { + if (_Video != 0) + CVideo.VdPause(_Video); CSound.FadeAndPause(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); _Playing = false; } @@ -275,8 +283,37 @@ namespace Vocaluxe.Base public static void ToggleVideo() { - _Video = CVideo.VdLoad(_CurrentPlaylistElement.GetVideoFilePath()); - CVideo.VdSkip(_Video, CSound.GetLength(_CurrentMusicStream) / 4f, _CurrentPlaylistElement.GetVideoGap()); + if (_Video != -1) + { + if (_VideoEnabled) + { + _VideoEnabled = false; + CVideo.VdClose(_Video); + _Video = -1; + CDraw.RemoveTexture(ref _CurrentVideoTexture); + return; + } + if (CVideo.VdFinished(_Video)) + { + CVideo.VdClose(_Video); + CDraw.RemoveTexture(ref _CurrentVideoTexture); + _Video = -1; + return; + } + } + else + LoadVideo(); + } + + public static STexture UploadNewFrame() + { + if (_Video != -1) + { + float vtime = 0f; + CVideo.VdGetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), ref vtime); + return _CurrentVideoTexture; + } + return _CurrentVideoTexture; } public static int GetSongNr() @@ -284,11 +321,26 @@ namespace Vocaluxe.Base return _CurrentPlaylistElement.GetSongNr(); } + public static EAspect GetVideoAspect() + { + return _CurrentPlaylistElement.GetVideoAspect(); + } + public static bool IsDuet() { return _CurrentPlaylistElement.IsDuet(); } + public static bool IsVideoEnabled() + { + return _VideoEnabled; + } + + public static bool HasVideo() + { + return File.Exists(_CurrentPlaylistElement.GetVideoFilePath()); + } + private static bool IsBackgroundFile(PlaylistElement element) { foreach (PlaylistElement elements in _BGMusicFileNames) @@ -298,6 +350,14 @@ namespace Vocaluxe.Base } return false; } + + private static void LoadVideo() + { + CVideo.VdClose(_Video); + _Video = CVideo.VdLoad(_CurrentPlaylistElement.GetVideoFilePath()); + CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream), _CurrentPlaylistElement.GetVideoGap()); + _VideoEnabled = true; + } } } @@ -311,6 +371,7 @@ class PlaylistElement float _VideoGap; int _SongNr; bool _Duet; + EAspect _VideoAspect; public PlaylistElement(CSong song) { @@ -322,6 +383,7 @@ class PlaylistElement _VideoGap = song.VideoGap; _SongNr = song.ID; _Duet = song.IsDuet; + _VideoAspect = song.VideoAspect; } public PlaylistElement(string FilePath) @@ -379,6 +441,11 @@ class PlaylistElement return _SongNr; } + public EAspect GetVideoAspect() + { + return _VideoAspect; + } + public bool IsDuet() { return _Duet; diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index f1df4730..0dee558a 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -136,7 +136,11 @@ namespace Vocaluxe.Screens Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.IsPlaying(); Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.GetSongArtistAndTitle(); - Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); + if(CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) + Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.UploadNewFrame(); + else + Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); + return true; } @@ -150,7 +154,6 @@ namespace Vocaluxe.Screens { if (!_Active) return false; - return base.Draw(); } From 88ae7d86c8d9e374a8ecb1e86ceb1cd2b4c60420 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 5 Mar 2012 19:24:42 +0100 Subject: [PATCH 12/37] Some minor changes --- .../Screens/PopupScreenPlayerControl.xml | 52 +++++++++---------- Vocaluxe/Base/CBackgroundMusic.cs | 14 +---- 2 files changed, 28 insertions(+), 38 deletions(-) diff --git a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml index 4b338b61..ea900e44 100644 --- a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml +++ b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml @@ -18,13 +18,29 @@ + + + CoverBackground + + 50 + 0 + 0,00 + 50 + 50 + + + Visible + + + + PreviousIcon PreviousIcon - 50 + 125 0 0,00 50 @@ -71,7 +87,7 @@ PlayIcon - 125 + 200 5 0,00 40 @@ -118,7 +134,7 @@ PauseIcon - 125 + 200 5 0,00 40 @@ -165,7 +181,7 @@ NextIcon - 190 + 265 0 0,00 50 @@ -212,7 +228,7 @@ RepeatIcon - 265 + 330 0 0,00 50 @@ -225,7 +241,7 @@ ButtonSColor - 265 + 405 25 32 @@ -259,7 +275,7 @@ VideoIcon - 315 + 405 0 0,00 50 @@ -306,7 +322,7 @@ DuetIcon - 380 + 480 0 0,00 50 @@ -349,14 +365,14 @@ - 465 + 555 0 0,00 50 - 825 + 725 StaticColor @@ -375,21 +391,5 @@ - - - CoverBackground - - 0 - 0 - 0,00 - 50 - 50 - - - Visible - - - - \ No newline at end of file diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 50debf24..0daad6f6 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -155,6 +155,8 @@ namespace Vocaluxe.Base if (_AllFileNames.Count > 0 && _CurrentMusicStream != -1) { CSound.SetPosition(_CurrentMusicStream, 0); + if (_VideoEnabled) + LoadVideo(); } } @@ -321,11 +323,6 @@ namespace Vocaluxe.Base return _CurrentPlaylistElement.GetSongNr(); } - public static EAspect GetVideoAspect() - { - return _CurrentPlaylistElement.GetVideoAspect(); - } - public static bool IsDuet() { return _CurrentPlaylistElement.IsDuet(); @@ -371,7 +368,6 @@ class PlaylistElement float _VideoGap; int _SongNr; bool _Duet; - EAspect _VideoAspect; public PlaylistElement(CSong song) { @@ -383,7 +379,6 @@ class PlaylistElement _VideoGap = song.VideoGap; _SongNr = song.ID; _Duet = song.IsDuet; - _VideoAspect = song.VideoAspect; } public PlaylistElement(string FilePath) @@ -441,11 +436,6 @@ class PlaylistElement return _SongNr; } - public EAspect GetVideoAspect() - { - return _VideoAspect; - } - public bool IsDuet() { return _Duet; From f64f7640e3ff066b8feaa2a685b65429b1a49c66 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 5 Mar 2012 19:38:51 +0100 Subject: [PATCH 13/37] Use new Draw method --- Vocaluxe/Base/CBackgroundMusic.cs | 8 +++++--- Vocaluxe/Base/CDraw.cs | 13 +++++++++++++ Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 10 ++++++++-- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 0daad6f6..333bbcac 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -8,6 +8,7 @@ using System.Diagnostics; using Vocaluxe.Lib.Song; using Vocaluxe.Lib.Draw; using System.Drawing; +using Vocaluxe.Menu; namespace Vocaluxe.Base { @@ -307,15 +308,16 @@ namespace Vocaluxe.Base LoadVideo(); } - public static STexture UploadNewFrame() + public static bool UploadNewFrame(CStatic bounds) { if (_Video != -1) { float vtime = 0f; CVideo.VdGetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), ref vtime); - return _CurrentVideoTexture; + CDraw.DrawTexture(bounds, _CurrentVideoTexture, EAspect.Crop); + return true; } - return _CurrentVideoTexture; + return false; } public static int GetSongNr() diff --git a/Vocaluxe/Base/CDraw.cs b/Vocaluxe/Base/CDraw.cs index 514d3adc..5c1129dd 100644 --- a/Vocaluxe/Base/CDraw.cs +++ b/Vocaluxe/Base/CDraw.cs @@ -289,6 +289,19 @@ namespace Vocaluxe.Base } } + public static void DrawTexture(CStatic StaticBounds, STexture Texture, EAspect Aspect) + { + RectangleF bounds = new RectangleF(StaticBounds.Rect.X, StaticBounds.Rect.Y, StaticBounds.Rect.W, StaticBounds.Rect.H); + RectangleF rect = new RectangleF(0f, 0f, Texture.width, Texture.height); + + if (rect.Height <= 0f) + return; + + CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, Aspect); + DrawTexture(Texture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, StaticBounds.Rect.Z), + Texture.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false); + } + public static void DrawTextureReflection(STexture Texture, SRectF rect, SColorF color, SRectF bounds, float space, float height) { lock (mutex) diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 0dee558a..fc41a0c0 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -136,10 +136,16 @@ namespace Vocaluxe.Screens Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.IsPlaying(); Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.GetSongArtistAndTitle(); - if(CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) - Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.UploadNewFrame(); + if (CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) + { + CBackgroundMusic.UploadNewFrame(Statics[htStatics(StaticCover)]); + Statics[htStatics(StaticCover)].Visible = true; + } else + { + Statics[htStatics(StaticCover)].Visible = true; Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); + } return true; } From 050d4bd8be0a5ef5bfe15fc6e016f3d2911a6693 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 5 Mar 2012 19:46:35 +0100 Subject: [PATCH 14/37] Do not draw in UpdateGame --- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index fc41a0c0..085ec6d1 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -136,17 +136,6 @@ namespace Vocaluxe.Screens Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.IsPlaying(); Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.GetSongArtistAndTitle(); - if (CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) - { - CBackgroundMusic.UploadNewFrame(Statics[htStatics(StaticCover)]); - Statics[htStatics(StaticCover)].Visible = true; - } - else - { - Statics[htStatics(StaticCover)].Visible = true; - Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); - } - return true; } @@ -160,6 +149,16 @@ namespace Vocaluxe.Screens { if (!_Active) return false; + if (CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) + { + CBackgroundMusic.UploadNewFrame(Statics[htStatics(StaticCover)]); + Statics[htStatics(StaticCover)].Visible = false; + } + else + { + Statics[htStatics(StaticCover)].Visible = true; + Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); + } return base.Draw(); } From 973f4a181da21e630ba1aa17588ea721fc49b583 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 5 Mar 2012 21:29:10 +0100 Subject: [PATCH 15/37] Some enhancements to reduce VdLoad calls --- Vocaluxe/Base/CBackgroundMusic.cs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 333bbcac..4ab3dd50 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -62,6 +62,8 @@ namespace Vocaluxe.Base { CSound.Fade(_CurrentMusicStream, CConfig.BackgroundMusicVolume, CSettings.BackgroundMusicFadeTime); CSound.Play(_CurrentMusicStream); + if (_VideoEnabled && _Video != -1) + CVideo.VdResume(_Video); _Playing = true; } else @@ -74,8 +76,9 @@ namespace Vocaluxe.Base public static void Stop() { - if (_Video != 0) + if (_VideoEnabled && _Video != 0) CVideo.VdClose(_Video); + _Video = -1; CSound.FadeAndStop(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); _CurrentPlaylistElement = new PlaylistElement(); @@ -84,7 +87,7 @@ namespace Vocaluxe.Base public static void Pause() { - if (_Video != 0) + if (_VideoEnabled && _Video != 0) CVideo.VdPause(_Video); CSound.FadeAndPause(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); _Playing = false; @@ -156,8 +159,8 @@ namespace Vocaluxe.Base if (_AllFileNames.Count > 0 && _CurrentMusicStream != -1) { CSound.SetPosition(_CurrentMusicStream, 0); - if (_VideoEnabled) - LoadVideo(); + if (_VideoEnabled && _Video != -1) + CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream), _CurrentPlaylistElement.GetVideoGap()); } } @@ -352,10 +355,13 @@ namespace Vocaluxe.Base private static void LoadVideo() { - CVideo.VdClose(_Video); - _Video = CVideo.VdLoad(_CurrentPlaylistElement.GetVideoFilePath()); - CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream), _CurrentPlaylistElement.GetVideoGap()); - _VideoEnabled = true; + if (_Video == -1) + { + CVideo.VdClose(_Video); + _Video = CVideo.VdLoad(_CurrentPlaylistElement.GetVideoFilePath()); + CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream), _CurrentPlaylistElement.GetVideoGap()); + _VideoEnabled = true; + } } } } From d348313b165dec70ec00220f98543383411d5773 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 5 Mar 2012 22:28:38 +0100 Subject: [PATCH 16/37] Added a 3 second fade at the start of the video. Some cleanup --- Vocaluxe/Base/CBackgroundMusic.cs | 21 +++++++++++++++---- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 10 ++++++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 4ab3dd50..b4f2179e 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -31,6 +31,7 @@ namespace Vocaluxe.Base private static int _Video = -1; private static STexture _CurrentVideoTexture = new STexture(-1); + private static Stopwatch _FadeTimer = new Stopwatch(); public static void Init() { @@ -76,9 +77,12 @@ namespace Vocaluxe.Base public static void Stop() { - if (_VideoEnabled && _Video != 0) + if (_VideoEnabled && _Video != -1) + { CVideo.VdClose(_Video); - _Video = -1; + CDraw.RemoveTexture(ref _CurrentVideoTexture); + _Video = -1; + } CSound.FadeAndStop(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); _CurrentPlaylistElement = new PlaylistElement(); @@ -127,7 +131,6 @@ namespace Vocaluxe.Base _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; } - _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.GetMusicFilePath()); CSound.SetStreamVolume(_CurrentMusicStream, 0f); Play(); @@ -317,6 +320,15 @@ namespace Vocaluxe.Base { float vtime = 0f; CVideo.VdGetFrame(_Video, ref _CurrentVideoTexture, CSound.GetPosition(_CurrentMusicStream), ref vtime); + if (_FadeTimer.ElapsedMilliseconds <= 3000L) + { + _CurrentVideoTexture.color.A = (_FadeTimer.ElapsedMilliseconds / 3000f); + } + else + { + _CurrentVideoTexture.color.A = 1f; + _FadeTimer.Stop(); + } CDraw.DrawTexture(bounds, _CurrentVideoTexture, EAspect.Crop); return true; } @@ -357,10 +369,11 @@ namespace Vocaluxe.Base { if (_Video == -1) { - CVideo.VdClose(_Video); _Video = CVideo.VdLoad(_CurrentPlaylistElement.GetVideoFilePath()); CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream), _CurrentPlaylistElement.GetVideoGap()); _VideoEnabled = true; + _FadeTimer.Reset(); + _FadeTimer.Start(); } } } diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 085ec6d1..18cc6690 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -133,9 +133,6 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { - Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); - Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.IsPlaying(); - Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.GetSongArtistAndTitle(); return true; } @@ -151,6 +148,7 @@ namespace Vocaluxe.Screens return false; if (CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) { + Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); CBackgroundMusic.UploadNewFrame(Statics[htStatics(StaticCover)]); Statics[htStatics(StaticCover)].Visible = false; } @@ -159,6 +157,12 @@ namespace Vocaluxe.Screens Statics[htStatics(StaticCover)].Visible = true; Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); } + Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); + Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.IsPlaying(); + Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.GetSongArtistAndTitle(); + if (CBackgroundMusic.IsVideoEnabled()) + Buttons[htButtons(ButtonShowVideo)].SColor = CTheme.GetColor("ButtonSColor"); + return base.Draw(); } From edf024995128a66541f41eeb3ca7d4fdb7ccd31a Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Tue, 6 Mar 2012 16:59:43 +0100 Subject: [PATCH 17/37] Added the option to use the current backgroundmusic's video as background. Icon for that option is needed! --- .../Screens/PopupScreenPlayerControl.xml | 53 +++++++++++++++++-- Vocaluxe/Base/CBackgroundMusic.cs | 19 +++++-- Vocaluxe/Menu/CBackground.cs | 18 +++++++ Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 10 +++- 4 files changed, 91 insertions(+), 9 deletions(-) diff --git a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml index ea900e44..6affc5e0 100644 --- a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml +++ b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml @@ -316,13 +316,60 @@ + + + VideoIcon + + VideoIcon + + 480 + 0 + 0,00 + 50 + 50 + + + ButtonColor + + + ButtonSColor + + + 315 + 0 + + 32 + + 142 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + + + Normal + + + + + + + + + + DuetIcon DuetIcon - 480 + 555 0 0,00 50 @@ -365,14 +412,14 @@ - 555 + 630 0 0,00 50 - 725 + 650 StaticColor diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index b4f2179e..7f8098fc 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -28,6 +28,7 @@ namespace Vocaluxe.Base private static bool _BackgroundMusicAdded; private static bool _Playing; private static bool _VideoEnabled; + private static bool _VideoToBackground; private static int _Video = -1; private static STexture _CurrentVideoTexture = new STexture(-1); @@ -314,7 +315,7 @@ namespace Vocaluxe.Base LoadVideo(); } - public static bool UploadNewFrame(CStatic bounds) + public static STexture GetVideoTexture() { if (_Video != -1) { @@ -329,10 +330,9 @@ namespace Vocaluxe.Base _CurrentVideoTexture.color.A = 1f; _FadeTimer.Stop(); } - CDraw.DrawTexture(bounds, _CurrentVideoTexture, EAspect.Crop); - return true; + return _CurrentVideoTexture; } - return false; + return new STexture(-1); } public static int GetSongNr() @@ -350,6 +350,11 @@ namespace Vocaluxe.Base return _VideoEnabled; } + public static bool VideoToBackgroundIsEnabled() + { + return _VideoToBackground; + } + public static bool HasVideo() { return File.Exists(_CurrentPlaylistElement.GetVideoFilePath()); @@ -376,6 +381,12 @@ namespace Vocaluxe.Base _FadeTimer.Start(); } } + + public static void ToggleVideoToBackground() + { + ToggleVideo(); + _VideoToBackground = !_VideoToBackground; + } } } diff --git a/Vocaluxe/Menu/CBackground.cs b/Vocaluxe/Menu/CBackground.cs index c6adfa33..e1be78ce 100644 --- a/Vocaluxe/Menu/CBackground.cs +++ b/Vocaluxe/Menu/CBackground.cs @@ -140,6 +140,9 @@ namespace Vocaluxe.Menu if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON) ok = DrawVideo(); + if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CBackgroundMusic.VideoToBackgroundIsEnabled() && CBackgroundMusic.IsPlaying() && CBackgroundMusic.HasVideo()) + ok = DrawBackgroundMusicVideo(); + if (_Theme.TextureName != String.Empty && (_Theme.Type == EBackgroundTypes.Texture || (_Theme.Type == EBackgroundTypes.Video && (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_OFF || !ok)))) @@ -206,6 +209,21 @@ namespace Vocaluxe.Menu } return false; } + + private bool DrawBackgroundMusicVideo() + { + STexture VideoTexture = CBackgroundMusic.GetVideoTexture(); + if (VideoTexture.height > 0) + { + RectangleF bounds = new RectangleF(0f, 0f, CSettings.iRenderW, CSettings.iRenderH); + RectangleF rect = new RectangleF(0f, 0f, VideoTexture.width, VideoTexture.height); + CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); + + CDraw.DrawTexture(VideoTexture, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.zFar / 4)); + return true; + } + return false; + } #endregion internal #region ThemeEdit diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 18cc6690..79188bbe 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -26,6 +26,7 @@ namespace Vocaluxe.Screens private const string ButtonRepeat = "ButtonRepeat"; private const string ButtonShowVideo = "ButtonShowVideo"; private const string ButtonSing = "ButtonSing"; + private const string ButtonToBackgroundVideo = "ButtonToBackgroundVideo"; private const string TextCurrentSong = "TextCurrentSong"; @@ -52,6 +53,7 @@ namespace Vocaluxe.Screens buttons.Add(ButtonRepeat); buttons.Add(ButtonShowVideo); buttons.Add(ButtonSing); + buttons.Add(ButtonToBackgroundVideo); _ThemeButtons = buttons.ToArray(); } @@ -93,6 +95,8 @@ namespace Vocaluxe.Screens CBackgroundMusic.ToggleVideo(); if (Buttons[htButtons(ButtonSing)].Selected) StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); + if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) + CBackgroundMusic.ToggleVideoToBackground(); break; } } @@ -119,6 +123,8 @@ namespace Vocaluxe.Screens CBackgroundMusic.ToggleVideo(); if (Buttons[htButtons(ButtonSing)].Selected) StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); + if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) + CBackgroundMusic.ToggleVideoToBackground(); } else if (MouseEvent.LB) { CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); @@ -149,8 +155,8 @@ namespace Vocaluxe.Screens if (CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) { Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); - CBackgroundMusic.UploadNewFrame(Statics[htStatics(StaticCover)]); - Statics[htStatics(StaticCover)].Visible = false; + Statics[htStatics(StaticCover)].Visible = true; + CDraw.DrawTexture(Statics[htStatics(StaticCover)], CBackgroundMusic.GetVideoTexture(), EAspect.Crop); } else { From 38e253821d62513128d8eb44c12d386ef7ca541f Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Tue, 6 Mar 2012 17:31:49 +0100 Subject: [PATCH 18/37] Do not show backgroundvideo if Next() is called --- Vocaluxe/Menu/CBackground.cs | 5 ++--- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Vocaluxe/Menu/CBackground.cs b/Vocaluxe/Menu/CBackground.cs index e1be78ce..5e5c3add 100644 --- a/Vocaluxe/Menu/CBackground.cs +++ b/Vocaluxe/Menu/CBackground.cs @@ -137,11 +137,10 @@ namespace Vocaluxe.Menu public bool Draw() { bool ok = false; - if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON) - ok = DrawVideo(); - if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CBackgroundMusic.VideoToBackgroundIsEnabled() && CBackgroundMusic.IsPlaying() && CBackgroundMusic.HasVideo()) ok = DrawBackgroundMusicVideo(); + else if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON) + ok = DrawVideo(); if (_Theme.TextureName != String.Empty && (_Theme.Type == EBackgroundTypes.Texture || diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 79188bbe..05a88add 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -155,7 +155,7 @@ namespace Vocaluxe.Screens if (CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) { Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); - Statics[htStatics(StaticCover)].Visible = true; + Statics[htStatics(StaticCover)].Visible = false; CDraw.DrawTexture(Statics[htStatics(StaticCover)], CBackgroundMusic.GetVideoTexture(), EAspect.Crop); } else From 7147e6d6498796f767b2152a508be9f81a25a422 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Tue, 6 Mar 2012 19:50:01 +0100 Subject: [PATCH 19/37] Pause background video when playing from videos from backgroundmusic --- Vocaluxe/Menu/CBackground.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Vocaluxe/Menu/CBackground.cs b/Vocaluxe/Menu/CBackground.cs index 5e5c3add..8bd602da 100644 --- a/Vocaluxe/Menu/CBackground.cs +++ b/Vocaluxe/Menu/CBackground.cs @@ -138,9 +138,15 @@ namespace Vocaluxe.Menu { bool ok = false; if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CBackgroundMusic.VideoToBackgroundIsEnabled() && CBackgroundMusic.IsPlaying() && CBackgroundMusic.HasVideo()) + { + Pause(); ok = DrawBackgroundMusicVideo(); + } else if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON) + { + Resume(); ok = DrawVideo(); + } if (_Theme.TextureName != String.Empty && (_Theme.Type == EBackgroundTypes.Texture || From c6574a374312b9e991539642e58f359549ce1555 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Tue, 6 Mar 2012 21:26:15 +0100 Subject: [PATCH 20/37] VideosToBackground is now saved in CConfig and will start up automatically if set --- Output/Languages/Deutsch.xml | 1 + Output/Languages/English.xml | 1 + Output/Languages/French.xml | 1 + Output/Languages/Spanish.xml | 1 + .../Ambient/Screens/ScreenOptionsVideo.xml | 92 +++++++++++++++++++ Vocaluxe/Base/CBackgroundMusic.cs | 20 +++- Vocaluxe/Base/CConfig.cs | 5 + Vocaluxe/Menu/CBackground.cs | 2 +- Vocaluxe/Screens/CScreenOptionsVideo.cs | 7 +- 9 files changed, 124 insertions(+), 6 deletions(-) diff --git a/Output/Languages/Deutsch.xml b/Output/Languages/Deutsch.xml index be0b28c6..3262bf6f 100644 --- a/Output/Languages/Deutsch.xml +++ b/Output/Languages/Deutsch.xml @@ -180,5 +180,6 @@ Video-Hintergründe Video-Vorschau Videos während des Singens + Videos der Hintergrundmusik diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index 50a87ba8..f0df105b 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -180,5 +180,6 @@ Video Backgrounds Video Preview Videos while singing + Display current backgroundmusic video diff --git a/Output/Languages/French.xml b/Output/Languages/French.xml index 2c2f7944..4c2d3ec9 100644 --- a/Output/Languages/French.xml +++ b/Output/Languages/French.xml @@ -180,5 +180,6 @@ Vidéo en arrière plan Prévisualisation des Vidéos Vidéos pendant que l'on chante + TODO: Display current backgroundmusic video diff --git a/Output/Languages/Spanish.xml b/Output/Languages/Spanish.xml index f9f92cff..8787eca0 100644 --- a/Output/Languages/Spanish.xml +++ b/Output/Languages/Spanish.xml @@ -180,5 +180,6 @@ Videos de Fondo Previsualización del Video Videos al Cantar + TODO: Display current backgroundmusic video diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml index 292cce63..767bdcc5 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml @@ -185,6 +185,33 @@ + + + 75 + 285 + + 0,00 + + 32 + + + + StaticColor + + + TextSColor + + Left + + + + Normal + + TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND + + + + Button @@ -435,5 +462,70 @@ 3 + + + Invisible + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + SelectSlideArrowLeft + + SelectSlideArrowRight + + SelectSlide + + 500 + 280 + 0,00 + 700 + 50 + + 505 + 225 + 0,00 + 40 + 40 + + 1170 + 225 + 0,00 + 40 + 40 + + + SelectSlideColor + + + SelectSlideSColor + + + SelectSlideHColor + + + ArrowColor + + + ArrowSColor + + + TextColor + + + TextSColor + + 32,00 + + 205,33 + + Normal + + Bold + + 3 + \ No newline at end of file diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 7f8098fc..c097345d 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -28,7 +28,6 @@ namespace Vocaluxe.Base private static bool _BackgroundMusicAdded; private static bool _Playing; private static bool _VideoEnabled; - private static bool _VideoToBackground; private static int _Video = -1; private static STexture _CurrentVideoTexture = new STexture(-1); @@ -50,6 +49,7 @@ namespace Vocaluxe.Base if(CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC) AddBackgroundMusic(); + ToggleVideo(); _Playing = false; } @@ -352,7 +352,7 @@ namespace Vocaluxe.Base public static bool VideoToBackgroundIsEnabled() { - return _VideoToBackground; + return CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON; } public static bool HasVideo() @@ -384,8 +384,20 @@ namespace Vocaluxe.Base public static void ToggleVideoToBackground() { - ToggleVideo(); - _VideoToBackground = !_VideoToBackground; + if (VideoToBackgroundIsEnabled()) + CConfig.VideosToBackground = EOffOn.TR_CONFIG_OFF; + else + { + CConfig.VideosToBackground = EOffOn.TR_CONFIG_ON; + ApplyBackgroundVideo(); + } + CConfig.SaveConfig(); + } + + public static void ApplyBackgroundVideo() + { + if (!_VideoEnabled) + ToggleVideo(); } } } diff --git a/Vocaluxe/Base/CConfig.cs b/Vocaluxe/Base/CConfig.cs index 1aad119c..9bbafce3 100644 --- a/Vocaluxe/Base/CConfig.cs +++ b/Vocaluxe/Base/CConfig.cs @@ -198,6 +198,7 @@ namespace Vocaluxe.Base public static EOffOn VideoBackgrounds = EOffOn.TR_CONFIG_ON; public static EOffOn VideoPreview = EOffOn.TR_CONFIG_ON; public static EOffOn VideosInSongs = EOffOn.TR_CONFIG_ON; + public static EOffOn VideosToBackground = EOffOn.TR_CONFIG_OFF; // Record public static SMicConfig[] MicConfig; @@ -349,6 +350,7 @@ namespace Vocaluxe.Base CHelper.TryGetEnumValueFromXML("//root/Video/VideoBackgrounds", navigator, ref VideoBackgrounds); CHelper.TryGetEnumValueFromXML("//root/Video/VideoPreview", navigator, ref VideoPreview); CHelper.TryGetEnumValueFromXML("//root/Video/VideosInSongs", navigator, ref VideosInSongs); + CHelper.TryGetEnumValueFromXML("//root/Video/VideosToBackground", navigator, ref VideosToBackground); #endregion Video #region Record @@ -558,6 +560,9 @@ namespace Vocaluxe.Base writer.WriteComment("Show Videos while singing: " + ListStrings(Enum.GetNames(typeof(EOffOn)))); writer.WriteElementString("VideosInSongs", Enum.GetName(typeof(EOffOn), VideosInSongs)); + writer.WriteComment("Show backgroundmusic videos as background: " + ListStrings(Enum.GetNames(typeof(EOffOn)))); + writer.WriteElementString("VideosToBackground", Enum.GetName(typeof(EOffOn), VideosToBackground)); + writer.WriteEndElement(); #endregion Video diff --git a/Vocaluxe/Menu/CBackground.cs b/Vocaluxe/Menu/CBackground.cs index 8bd602da..1a21156b 100644 --- a/Vocaluxe/Menu/CBackground.cs +++ b/Vocaluxe/Menu/CBackground.cs @@ -137,7 +137,7 @@ namespace Vocaluxe.Menu public bool Draw() { bool ok = false; - if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CBackgroundMusic.VideoToBackgroundIsEnabled() && CBackgroundMusic.IsPlaying() && CBackgroundMusic.HasVideo()) + if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CBackgroundMusic.VideoToBackgroundIsEnabled() && CBackgroundMusic.IsPlaying() && CBackgroundMusic.HasVideo() && CBackgroundMusic.IsVideoEnabled()) { Pause(); ok = DrawBackgroundMusicVideo(); diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index 04e9d4e1..b578eb68 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -17,6 +17,7 @@ namespace Vocaluxe.Screens private const string SelectSlideVideoBackgrounds = "SelectSlideVideoBackgrounds"; private const string SelectSlideVideoPreview = "SelectSlideVideoPreview"; private const string SelectSlideVideosInSongs = "SelectSlideVideosInSongs"; + private const string SelectSlideVideosToBackground = "SelectSlideVideosToBackground"; private const string ButtonExit = "ButtonExit"; @@ -33,7 +34,7 @@ namespace Vocaluxe.Screens _ScreenVersion = ScreenVersion; _ThemeButtons = new string[] { ButtonExit }; - _ThemeSelectSlides = new string[] { SelectSlideVideoBackgrounds, SelectSlideVideoPreview, SelectSlideVideosInSongs }; + _ThemeSelectSlides = new string[] { SelectSlideVideoBackgrounds, SelectSlideVideoPreview, SelectSlideVideosInSongs, SelectSlideVideosToBackground }; } public override void LoadTheme() @@ -43,6 +44,7 @@ namespace Vocaluxe.Screens SelectSlides[htSelectSlides(SelectSlideVideoBackgrounds)].SetValues((int)CConfig.VideoBackgrounds); SelectSlides[htSelectSlides(SelectSlideVideoPreview)].SetValues((int)CConfig.VideoPreview); SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].SetValues((int)CConfig.VideosInSongs); + SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].SetValues((int)CConfig.VideosToBackground); } public override bool HandleInput(KeyEvent KeyEvent) @@ -110,6 +112,7 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { + SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].Selection = (int)CConfig.VideosToBackground; return true; } @@ -124,6 +127,8 @@ namespace Vocaluxe.Screens CConfig.VideoBackgrounds = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideoBackgrounds)].Selection; CConfig.VideoPreview = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideoPreview)].Selection; CConfig.VideosInSongs = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].Selection; + CConfig.VideosToBackground = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].Selection; + CBackgroundMusic.ApplyBackgroundVideo(); CConfig.SaveConfig(); } From 4a9362958a345036553f12a4056cb179490e4a9d Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Tue, 6 Mar 2012 22:03:52 +0100 Subject: [PATCH 21/37] Added changelog and increased screenversion --- Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml | 2 +- .../Themes/Changelog/Changelog_ScreenOptionsVideo.txt | 10 ++++++++++ Vocaluxe/Screens/CScreenOptionsVideo.cs | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 Output/Themes/Changelog/Changelog_ScreenOptionsVideo.txt diff --git a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml index 767bdcc5..686e2751 100644 --- a/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml +++ b/Output/Themes/Ambient/Screens/ScreenOptionsVideo.xml @@ -1,7 +1,7 @@  - 1 + 2 Video diff --git a/Output/Themes/Changelog/Changelog_ScreenOptionsVideo.txt b/Output/Themes/Changelog/Changelog_ScreenOptionsVideo.txt new file mode 100644 index 00000000..a6898ab5 --- /dev/null +++ b/Output/Themes/Changelog/Changelog_ScreenOptionsVideo.txt @@ -0,0 +1,10 @@ +ScreenOptionsTheme + +++++++++++ +Version 2: + +Add: + +and some texts and statics for description (Text5) +"TR_SCREENO_VIDEO_VIDEOSTOBACKGROUND" +++++++++++ \ No newline at end of file diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index b578eb68..34d6dfaf 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -12,7 +12,7 @@ namespace Vocaluxe.Screens class CScreenOptionsVideo : CMenu { // Version number for theme files. Increment it, if you've changed something on the theme files! - const int ScreenVersion = 1; + const int ScreenVersion = 2; private const string SelectSlideVideoBackgrounds = "SelectSlideVideoBackgrounds"; private const string SelectSlideVideoPreview = "SelectSlideVideoPreview"; From 817066ee451780a3b64ce34fd65e9cbeb9548f3b Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Wed, 7 Mar 2012 14:05:23 +0100 Subject: [PATCH 22/37] Added SetPressed to CButton Fixed video playback at start --- Vocaluxe/Base/CBackgroundMusic.cs | 3 ++- Vocaluxe/Menu/CButton.cs | 4 +++- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index c097345d..95779f67 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -49,7 +49,8 @@ namespace Vocaluxe.Base if(CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC) AddBackgroundMusic(); - ToggleVideo(); + if (VideoToBackgroundIsEnabled()) + ApplyBackgroundVideo(); _Playing = false; } diff --git a/Vocaluxe/Menu/CButton.cs b/Vocaluxe/Menu/CButton.cs index 0341bf03..d4b5d231 100644 --- a/Vocaluxe/Menu/CButton.cs +++ b/Vocaluxe/Menu/CButton.cs @@ -41,6 +41,7 @@ namespace Vocaluxe.Menu public float SReflectionHeight; private bool _Selected; + public bool Pressed; public bool Selected { get { return _Selected; } @@ -234,7 +235,8 @@ namespace Vocaluxe.Menu return; STexture texture = new STexture(-1); - if (!Selected) + + if (!Selected && !Pressed) { texture = CTheme.GetSkinTexture(_Theme.TextureName); CDraw.DrawTexture(texture, Rect, Color); diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 05a88add..d95df149 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -139,6 +139,8 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { + Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = CBackgroundMusic.VideoToBackgroundIsEnabled(); + Buttons[htButtons(ButtonShowVideo)].Pressed = CBackgroundMusic.IsVideoEnabled(); return true; } From 4a37ca024ee5b765c1497bbb9831740bf48f33d6 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Thu, 8 Mar 2012 19:16:49 +0100 Subject: [PATCH 23/37] Video modes are now handled separately PortAudio.dll library update --- Output/x86/PortAudio.dll | Bin 81920 -> 131072 bytes Vocaluxe/Base/CBackgroundMusic.cs | 20 ++++++++++++++++-- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 11 +++++----- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Output/x86/PortAudio.dll b/Output/x86/PortAudio.dll index 4588ded34a848cfddf9fdee922831f23599a373a..a91a15162f06c76bb4fc5e63d99ac883c837dde5 100644 GIT binary patch literal 131072 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 MPxJp@{~HtdCr$W5NdN!< literal 81920 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 diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 95779f67..2a5d76c2 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -28,6 +28,7 @@ namespace Vocaluxe.Base private static bool _BackgroundMusicAdded; private static bool _Playing; private static bool _VideoEnabled; + private static bool _SmallVideoIsEnabled; private static int _Video = -1; private static STexture _CurrentVideoTexture = new STexture(-1); @@ -71,7 +72,7 @@ namespace Vocaluxe.Base } else Next(); - if (_VideoEnabled) + if ((_VideoEnabled && _SmallVideoIsEnabled) || (_VideoEnabled && VideoToBackgroundIsEnabled())) LoadVideo(); } } @@ -356,6 +357,17 @@ namespace Vocaluxe.Base return CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON; } + public static bool SmallVideoIsEnabled() + { + return _SmallVideoIsEnabled; + } + + public static void ToggleSmallVideo() + { + _SmallVideoIsEnabled = !_SmallVideoIsEnabled; + ApplyBackgroundVideo(); + } + public static bool HasVideo() { return File.Exists(_CurrentPlaylistElement.GetVideoFilePath()); @@ -386,7 +398,11 @@ namespace Vocaluxe.Base public static void ToggleVideoToBackground() { if (VideoToBackgroundIsEnabled()) + { CConfig.VideosToBackground = EOffOn.TR_CONFIG_OFF; + if (!_SmallVideoIsEnabled) //No videos are enabled so we should call ToggleVideo() to close + ToggleVideo(); + } else { CConfig.VideosToBackground = EOffOn.TR_CONFIG_ON; @@ -397,7 +413,7 @@ namespace Vocaluxe.Base public static void ApplyBackgroundVideo() { - if (!_VideoEnabled) + if (!_VideoEnabled && (!_SmallVideoIsEnabled || !VideoToBackgroundIsEnabled()) || (!_SmallVideoIsEnabled && !VideoToBackgroundIsEnabled())) //No videos are enabled so we should call ToggleVideo() to close ToggleVideo(); } } diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index d95df149..51217b96 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -92,7 +92,7 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonRepeat)].Selected) CBackgroundMusic.Repeat(); if (Buttons[htButtons(ButtonShowVideo)].Selected) - CBackgroundMusic.ToggleVideo(); + CBackgroundMusic.ToggleSmallVideo(); if (Buttons[htButtons(ButtonSing)].Selected) StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) @@ -120,7 +120,7 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonRepeat)].Selected) CBackgroundMusic.Repeat(); if (Buttons[htButtons(ButtonShowVideo)].Selected) - CBackgroundMusic.ToggleVideo(); + CBackgroundMusic.ToggleSmallVideo(); if (Buttons[htButtons(ButtonSing)].Selected) StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) @@ -139,8 +139,9 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { + Statics[htStatics(StaticCover)].Visible = !CBackgroundMusic.SmallVideoIsEnabled(); Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = CBackgroundMusic.VideoToBackgroundIsEnabled(); - Buttons[htButtons(ButtonShowVideo)].Pressed = CBackgroundMusic.IsVideoEnabled(); + Buttons[htButtons(ButtonShowVideo)].Pressed = CBackgroundMusic.SmallVideoIsEnabled(); return true; } @@ -157,12 +158,12 @@ namespace Vocaluxe.Screens if (CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) { Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); - Statics[htStatics(StaticCover)].Visible = false; + //Statics[htStatics(StaticCover)].Visible = false; CDraw.DrawTexture(Statics[htStatics(StaticCover)], CBackgroundMusic.GetVideoTexture(), EAspect.Crop); } else { - Statics[htStatics(StaticCover)].Visible = true; + //Statics[htStatics(StaticCover)].Visible = true; Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); } Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); From 2c9cdd7f23f7854bb8d9f42049853d601e0e53da Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sat, 10 Mar 2012 12:00:48 +0100 Subject: [PATCH 24/37] BackgroundMusic is now disabled properly Moved video handling to CPopupScreenPlayerControl.cs Some cleanup --- Vocaluxe/Base/CBackgroundMusic.cs | 63 +++++++--------- Vocaluxe/Menu/CBackground.cs | 2 +- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 74 ++++++++++++++----- Vocaluxe/Screens/CScreenOptionsVideo.cs | 2 +- Vocaluxe/Screens/CScreenSing.cs | 5 +- Vocaluxe/Screens/CScreenSong.cs | 5 +- 6 files changed, 90 insertions(+), 61 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 2a5d76c2..daf92609 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -28,7 +28,7 @@ namespace Vocaluxe.Base private static bool _BackgroundMusicAdded; private static bool _Playing; private static bool _VideoEnabled; - private static bool _SmallVideoIsEnabled; + private static bool _Disabled; private static int _Video = -1; private static STexture _CurrentVideoTexture = new STexture(-1); @@ -50,8 +50,8 @@ namespace Vocaluxe.Base if(CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC) AddBackgroundMusic(); - if (VideoToBackgroundIsEnabled()) - ApplyBackgroundVideo(); + if (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON) + EnableVideo(); _Playing = false; } @@ -72,8 +72,6 @@ namespace Vocaluxe.Base } else Next(); - if ((_VideoEnabled && _SmallVideoIsEnabled) || (_VideoEnabled && VideoToBackgroundIsEnabled())) - LoadVideo(); } } } @@ -94,7 +92,7 @@ namespace Vocaluxe.Base public static void Pause() { - if (_VideoEnabled && _Video != 0) + if (_VideoEnabled && _Video != -1) CVideo.VdPause(_Video); CSound.FadeAndPause(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); _Playing = false; @@ -135,6 +133,8 @@ namespace Vocaluxe.Base _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; } _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.GetMusicFilePath()); + if (_VideoEnabled) + LoadVideo(); CSound.SetStreamVolume(_CurrentMusicStream, 0f); Play(); } @@ -155,6 +155,8 @@ namespace Vocaluxe.Base _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.GetMusicFilePath()); + if (_VideoEnabled) + LoadVideo(); CSound.SetStreamVolume(_CurrentMusicStream, 0f); Play(); } @@ -352,22 +354,6 @@ namespace Vocaluxe.Base return _VideoEnabled; } - public static bool VideoToBackgroundIsEnabled() - { - return CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON; - } - - public static bool SmallVideoIsEnabled() - { - return _SmallVideoIsEnabled; - } - - public static void ToggleSmallVideo() - { - _SmallVideoIsEnabled = !_SmallVideoIsEnabled; - ApplyBackgroundVideo(); - } - public static bool HasVideo() { return File.Exists(_CurrentPlaylistElement.GetVideoFilePath()); @@ -395,26 +381,27 @@ namespace Vocaluxe.Base } } - public static void ToggleVideoToBackground() + public static void EnableVideo() { - if (VideoToBackgroundIsEnabled()) - { - CConfig.VideosToBackground = EOffOn.TR_CONFIG_OFF; - if (!_SmallVideoIsEnabled) //No videos are enabled so we should call ToggleVideo() to close - ToggleVideo(); - } - else - { - CConfig.VideosToBackground = EOffOn.TR_CONFIG_ON; - ApplyBackgroundVideo(); - } - CConfig.SaveConfig(); + if (!_VideoEnabled) + ToggleVideo(); } - public static void ApplyBackgroundVideo() + public static void Disable() { - if (!_VideoEnabled && (!_SmallVideoIsEnabled || !VideoToBackgroundIsEnabled()) || (!_SmallVideoIsEnabled && !VideoToBackgroundIsEnabled())) //No videos are enabled so we should call ToggleVideo() to close - ToggleVideo(); + Pause(); + _Disabled = true; + } + + public static void Enable() + { + Play(); + _Disabled = false; + } + + public static bool IsEnabled() + { + return !_Disabled; } } } diff --git a/Vocaluxe/Menu/CBackground.cs b/Vocaluxe/Menu/CBackground.cs index 1a21156b..f04c1813 100644 --- a/Vocaluxe/Menu/CBackground.cs +++ b/Vocaluxe/Menu/CBackground.cs @@ -137,7 +137,7 @@ namespace Vocaluxe.Menu public bool Draw() { bool ok = false; - if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CBackgroundMusic.VideoToBackgroundIsEnabled() && CBackgroundMusic.IsPlaying() && CBackgroundMusic.HasVideo() && CBackgroundMusic.IsVideoEnabled()) + if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON && CBackgroundMusic.IsPlaying() && CBackgroundMusic.HasVideo() && CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.IsEnabled()) { Pause(); ok = DrawBackgroundMusicVideo(); diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 51217b96..fa40ad60 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -30,6 +30,30 @@ namespace Vocaluxe.Screens private const string TextCurrentSong = "TextCurrentSong"; + private bool _VideoPreview = false; + private bool _VideoBackground + { + get + { + return CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON; + } + set + { + if (CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON) + { + CConfig.VideosToBackground = EOffOn.TR_CONFIG_OFF; + if (!_VideoPreview) //No videos are enabled so we should call ToggleVideo() to close + CBackgroundMusic.ToggleVideo(); + } + else + { + CConfig.VideosToBackground = EOffOn.TR_CONFIG_ON; + CBackgroundMusic.EnableVideo(); + } + CConfig.SaveConfig(); + } + } + public CPopupScreenPlayerControl() { Init(); @@ -92,11 +116,11 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonRepeat)].Selected) CBackgroundMusic.Repeat(); if (Buttons[htButtons(ButtonShowVideo)].Selected) - CBackgroundMusic.ToggleSmallVideo(); + TogglePreviewVideo(); if (Buttons[htButtons(ButtonSing)].Selected) StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) - CBackgroundMusic.ToggleVideoToBackground(); + ToggleBackgroundVideo(); break; } } @@ -120,11 +144,11 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonRepeat)].Selected) CBackgroundMusic.Repeat(); if (Buttons[htButtons(ButtonShowVideo)].Selected) - CBackgroundMusic.ToggleSmallVideo(); + TogglePreviewVideo(); if (Buttons[htButtons(ButtonSing)].Selected) StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) - CBackgroundMusic.ToggleVideoToBackground(); + ToggleBackgroundVideo(); } else if (MouseEvent.LB) { CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); @@ -139,33 +163,24 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { - Statics[htStatics(StaticCover)].Visible = !CBackgroundMusic.SmallVideoIsEnabled(); - Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = CBackgroundMusic.VideoToBackgroundIsEnabled(); - Buttons[htButtons(ButtonShowVideo)].Pressed = CBackgroundMusic.SmallVideoIsEnabled(); + Statics[htStatics(StaticCover)].Visible = !_VideoPreview; + Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = _VideoBackground; + Buttons[htButtons(ButtonShowVideo)].Pressed = _VideoPreview; return true; } public override void OnShow() { base.OnShow(); - } public override bool Draw() { if (!_Active) return false; + Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); if (CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) - { - Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); - //Statics[htStatics(StaticCover)].Visible = false; CDraw.DrawTexture(Statics[htStatics(StaticCover)], CBackgroundMusic.GetVideoTexture(), EAspect.Crop); - } - else - { - //Statics[htStatics(StaticCover)].Visible = true; - Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); - } Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.IsPlaying(); Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.GetSongArtistAndTitle(); @@ -191,5 +206,30 @@ namespace Vocaluxe.Screens CGraphics.FadeTo(EScreens.ScreenNames); } } + + private void ToggleBackgroundVideo() + { + if (_VideoBackground) + { + CConfig.VideosToBackground = EOffOn.TR_CONFIG_OFF; + if (!_VideoPreview) //No videos are enabled so we should call ToggleVideo() to close + CBackgroundMusic.ToggleVideo(); + } + else + { + CConfig.VideosToBackground = EOffOn.TR_CONFIG_ON; + CBackgroundMusic.EnableVideo(); + } + CConfig.SaveConfig(); + } + + private void TogglePreviewVideo() + { + _VideoPreview = !_VideoPreview; + if (!_VideoPreview && !_VideoBackground) + CBackgroundMusic.ToggleVideo(); + else + CBackgroundMusic.EnableVideo(); + } } } diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index 34d6dfaf..b5e6b93c 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -128,7 +128,7 @@ namespace Vocaluxe.Screens CConfig.VideoPreview = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideoPreview)].Selection; CConfig.VideosInSongs = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].Selection; CConfig.VideosToBackground = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].Selection; - CBackgroundMusic.ApplyBackgroundVideo(); + CBackgroundMusic.EnableVideo(); CConfig.SaveConfig(); } diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index 48ea1105..7616d49c 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -326,7 +326,7 @@ namespace Vocaluxe.Screens } SetVisuability(); - CBackgroundMusic.Pause(); + CBackgroundMusic.Disable(); } public override void OnShowFinish() @@ -335,7 +335,7 @@ namespace Vocaluxe.Screens CGame.Start(); LoadNextSong(); - CBackgroundMusic.Pause(); + CBackgroundMusic.Disable(); } public override bool Draw() @@ -418,6 +418,7 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); + CBackgroundMusic.Enable(); CloseSong(); } diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index abc609de..54be0274 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -173,12 +173,12 @@ namespace Vocaluxe.Screens if ((CSongs.Category >= 0) && (song >= 0) && song < CSongs.VisibleSongs.Length) { Texts[htTexts(TextSelection)].Text = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title; - CBackgroundMusic.Pause(); + CBackgroundMusic.Disable(); } else if ((CSongs.Category == -1) && (song >= 0) && song < CSongs.Categories.Length) { Texts[htTexts(TextSelection)].Text = CSongs.Categories[song].Name; - CBackgroundMusic.Play(); + CBackgroundMusic.Enable(); } else Texts[htTexts(TextSelection)].Text = String.Empty; @@ -213,6 +213,7 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); + CBackgroundMusic.Enable(); SongMenus[htSongMenus(SongMenu)].OnHide(); } From b566f91e926a3b541b073650d6d2433ee023cdcb Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sat, 10 Mar 2012 13:05:59 +0100 Subject: [PATCH 25/37] Vocaluxe will now start 10 seconds faster --- Vocaluxe/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vocaluxe/Program.cs b/Vocaluxe/Program.cs index 32cde09c..94811a02 100644 --- a/Vocaluxe/Program.cs +++ b/Vocaluxe/Program.cs @@ -141,7 +141,7 @@ namespace Vocaluxe CLog.StopBenchmark(0, "Init Game"); Application.DoEvents(); - System.Threading.Thread.Sleep(10000); + // Start Main Loop _SplashScreen.Close(); CDraw.MainLoop(); From 3c38079d6637fb5a0d89463c36e388bc32133971 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sat, 10 Mar 2012 14:08:19 +0100 Subject: [PATCH 26/37] Skip video for CSettings.BackgroundMusicFadeTime when calling Pause() to prevent asynchronous video and sound --- Vocaluxe/Base/CBackgroundMusic.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index daf92609..c174cf1a 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -93,7 +93,10 @@ namespace Vocaluxe.Base public static void Pause() { if (_VideoEnabled && _Video != -1) + { CVideo.VdPause(_Video); + CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream) + CSettings.BackgroundMusicFadeTime, _CurrentPlaylistElement.GetVideoGap()); + } CSound.FadeAndPause(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); _Playing = false; } From d35e4b2210b00eb2a59a7587061fa54997a42785 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sat, 10 Mar 2012 14:23:37 +0100 Subject: [PATCH 27/37] Only ID and MusicFilePath are now saved in PlayListElement --- Vocaluxe/Base/CBackgroundMusic.cs | 48 +++++++++++++------------------ 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index c174cf1a..3ce78c35 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -411,75 +411,65 @@ namespace Vocaluxe.Base class PlaylistElement { - string _Title; - string _Artist; string _MusicFilePath; - string _VideoFilePath; - STexture _Cover; - float _VideoGap; int _SongNr; - bool _Duet; public PlaylistElement(CSong song) { - _Title = song.Title; - _Artist = song.Artist; - _MusicFilePath = song.GetMP3(); - _VideoFilePath = song.GetVideo(); - _Cover = song.CoverTextureSmall; - _VideoGap = song.VideoGap; _SongNr = song.ID; - _Duet = song.IsDuet; } public PlaylistElement(string FilePath) { - _Title = "Unknown"; - _Artist = "Unknown"; _MusicFilePath = FilePath; - _VideoFilePath = string.Empty; - _Cover = CCover.NoCover; _SongNr = -1; } public PlaylistElement() { - _Title = "Unknown"; - _Artist = "Unknown"; - _MusicFilePath = string.Empty; - _VideoFilePath = string.Empty; - _Cover = CCover.NoCover; _SongNr = -1; } public string GetMusicFilePath() { + if (_SongNr >= 0) + return CSongs.AllSongs[_SongNr].GetMP3(); return _MusicFilePath; } public string GetVideoFilePath() { - return _VideoFilePath; + if (_SongNr >= 0) + return CSongs.AllSongs[_SongNr].GetVideo(); + return string.Empty; } public string GetTitle() { - return _Title; + if (_SongNr >= 0) + return CSongs.AllSongs[_SongNr].Title; + return "Unknown"; } public string GetArtist() { - return _Artist; + if (_SongNr >= 0) + return CSongs.AllSongs[_SongNr].Artist; + return "Unknown"; } public STexture GetCover() { - return _Cover; + if (_SongNr >= 0) + return CSongs.AllSongs[_SongNr].CoverTextureSmall; + return CCover.NoCover; } public float GetVideoGap() { - return _VideoGap; + if (_SongNr >= 0) + return CSongs.AllSongs[_SongNr].VideoGap; + return 0; } public int GetSongNr() @@ -489,6 +479,8 @@ class PlaylistElement public bool IsDuet() { - return _Duet; + if (_SongNr >= 0) + return CSongs.AllSongs[_SongNr].IsDuet; + return false; } } From b3ba1ff111cfdd1691e8d36d4cd3903928f2fd51 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sat, 10 Mar 2012 14:40:14 +0100 Subject: [PATCH 28/37] Added some error handling --- Vocaluxe/Base/CBackgroundMusic.cs | 58 +++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 3ce78c35..8fed0384 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -416,6 +416,7 @@ class PlaylistElement public PlaylistElement(CSong song) { + _MusicFilePath = string.Empty; _SongNr = song.ID; } @@ -427,48 +428,85 @@ class PlaylistElement public PlaylistElement() { + _MusicFilePath = string.Empty; _SongNr = -1; } public string GetMusicFilePath() { if (_SongNr >= 0) - return CSongs.AllSongs[_SongNr].GetMP3(); + if (CSongs.GetSong(_SongNr) != null) + return CSongs.GetSong(_SongNr).GetMP3(); + else + { + _SongNr = -1; + CLog.LogError("Song not found"); + } return _MusicFilePath; } public string GetVideoFilePath() { if (_SongNr >= 0) - return CSongs.AllSongs[_SongNr].GetVideo(); + if (CSongs.GetSong(_SongNr) != null) + return CSongs.GetSong(_SongNr).GetVideo(); + else + { + _SongNr = -1; + CLog.LogError("Song not found"); + } return string.Empty; } public string GetTitle() { if (_SongNr >= 0) - return CSongs.AllSongs[_SongNr].Title; + if (CSongs.GetSong(_SongNr) != null) + return CSongs.GetSong(_SongNr).Title; + else + { + _SongNr = -1; + CLog.LogError("Song not found"); + } return "Unknown"; } public string GetArtist() { if (_SongNr >= 0) - return CSongs.AllSongs[_SongNr].Artist; + if (CSongs.GetSong(_SongNr) != null) + return CSongs.GetSong(_SongNr).Artist; + else + { + _SongNr = -1; + CLog.LogError("Song not found"); + } return "Unknown"; } public STexture GetCover() { if (_SongNr >= 0) - return CSongs.AllSongs[_SongNr].CoverTextureSmall; + if (CSongs.GetSong(_SongNr) != null) + return CSongs.GetSong(_SongNr).CoverTextureSmall; + else + { + _SongNr = -1; + CLog.LogError("Song not found"); + } return CCover.NoCover; } public float GetVideoGap() { if (_SongNr >= 0) - return CSongs.AllSongs[_SongNr].VideoGap; + if (CSongs.GetSong(_SongNr) != null) + return CSongs.GetSong(_SongNr).VideoGap; + else + { + _SongNr = -1; + CLog.LogError("Song not found"); + } return 0; } @@ -480,7 +518,13 @@ class PlaylistElement public bool IsDuet() { if (_SongNr >= 0) - return CSongs.AllSongs[_SongNr].IsDuet; + if (CSongs.GetSong(_SongNr) != null) + return CSongs.GetSong(_SongNr).IsDuet; + else + { + _SongNr = -1; + CLog.LogError("Song not found"); + } return false; } } From 9dfa3e0f0e10bd0c256da8ab4eb5b52bfbb6e865 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sat, 10 Mar 2012 14:53:52 +0100 Subject: [PATCH 29/37] Increased performance --- Vocaluxe/Base/CBackgroundMusic.cs | 94 ++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 33 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 8fed0384..7c673a3d 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -412,119 +412,147 @@ namespace Vocaluxe.Base class PlaylistElement { string _MusicFilePath; - int _SongNr; + int _SongID; public PlaylistElement(CSong song) { _MusicFilePath = string.Empty; - _SongNr = song.ID; + _SongID = song.ID; } public PlaylistElement(string FilePath) { _MusicFilePath = FilePath; - _SongNr = -1; + _SongID = -1; } public PlaylistElement() { _MusicFilePath = string.Empty; - _SongNr = -1; + _SongID = -1; } public string GetMusicFilePath() { - if (_SongNr >= 0) - if (CSongs.GetSong(_SongNr) != null) - return CSongs.GetSong(_SongNr).GetMP3(); + if (_SongID >= 0) + { + CSong song; + song = CSongs.GetSong(_SongID); + if (song != null) + return song.GetMP3(); else { - _SongNr = -1; + _SongID = -1; CLog.LogError("Song not found"); } + } return _MusicFilePath; } public string GetVideoFilePath() { - if (_SongNr >= 0) - if (CSongs.GetSong(_SongNr) != null) - return CSongs.GetSong(_SongNr).GetVideo(); + if (_SongID >= 0) + { + CSong song; + song = CSongs.GetSong(_SongID); + if (song != null) + return song.GetVideo(); else { - _SongNr = -1; + _SongID = -1; CLog.LogError("Song not found"); } + } return string.Empty; } public string GetTitle() { - if (_SongNr >= 0) - if (CSongs.GetSong(_SongNr) != null) - return CSongs.GetSong(_SongNr).Title; + if (_SongID >= 0) + { + CSong song; + song = CSongs.GetSong(_SongID); + if (song != null) + return song.Title; else { - _SongNr = -1; + _SongID = -1; CLog.LogError("Song not found"); } + } return "Unknown"; } public string GetArtist() { - if (_SongNr >= 0) - if (CSongs.GetSong(_SongNr) != null) - return CSongs.GetSong(_SongNr).Artist; + if (_SongID >= 0) + { + CSong song; + song = CSongs.GetSong(_SongID); + if (song != null) + return song.Artist; else { - _SongNr = -1; + _SongID = -1; CLog.LogError("Song not found"); } + } return "Unknown"; } public STexture GetCover() { - if (_SongNr >= 0) - if (CSongs.GetSong(_SongNr) != null) - return CSongs.GetSong(_SongNr).CoverTextureSmall; + if (_SongID >= 0) + { + CSong song; + song = CSongs.GetSong(_SongID); + if (song != null) + return song.CoverTextureSmall; else { - _SongNr = -1; + _SongID = -1; CLog.LogError("Song not found"); } + } return CCover.NoCover; } public float GetVideoGap() { - if (_SongNr >= 0) - if (CSongs.GetSong(_SongNr) != null) - return CSongs.GetSong(_SongNr).VideoGap; + if (_SongID >= 0) + { + CSong song; + song = CSongs.GetSong(_SongID); + if (song != null) + return song.VideoGap; else { - _SongNr = -1; + _SongID = -1; CLog.LogError("Song not found"); } + } return 0; } public int GetSongNr() { - return _SongNr; + return _SongID; } public bool IsDuet() { - if (_SongNr >= 0) - if (CSongs.GetSong(_SongNr) != null) - return CSongs.GetSong(_SongNr).IsDuet; + if (_SongID >= 0) + { + CSong song; + song = CSongs.GetSong(_SongID); + if (song != null) + return song.IsDuet; else { - _SongNr = -1; + _SongID = -1; CLog.LogError("Song not found"); } + } return false; } } From 25da8925e0952a48475189399944075a5707ea93 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sat, 10 Mar 2012 15:06:51 +0100 Subject: [PATCH 30/37] Skip videos to 0f to repeat --- Vocaluxe/Base/CBackgroundMusic.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 7c673a3d..1cede053 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -171,7 +171,7 @@ namespace Vocaluxe.Base { CSound.SetPosition(_CurrentMusicStream, 0); if (_VideoEnabled && _Video != -1) - CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream), _CurrentPlaylistElement.GetVideoGap()); + CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.GetVideoGap()); } } @@ -377,7 +377,7 @@ namespace Vocaluxe.Base if (_Video == -1) { _Video = CVideo.VdLoad(_CurrentPlaylistElement.GetVideoFilePath()); - CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream), _CurrentPlaylistElement.GetVideoGap()); + CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.GetVideoGap()); _VideoEnabled = true; _FadeTimer.Reset(); _FadeTimer.Start(); From 5e88cbc60c9111fa292e8cea36377938aba86238 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Sat, 10 Mar 2012 15:25:44 +0100 Subject: [PATCH 31/37] Some cleanup --- Vocaluxe/Base/CBackgroundMusic.cs | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 1cede053..20068035 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -436,8 +436,7 @@ class PlaylistElement { if (_SongID >= 0) { - CSong song; - song = CSongs.GetSong(_SongID); + CSong song = CSongs.GetSong(_SongID); if (song != null) return song.GetMP3(); else @@ -453,8 +452,7 @@ class PlaylistElement { if (_SongID >= 0) { - CSong song; - song = CSongs.GetSong(_SongID); + CSong song = CSongs.GetSong(_SongID); if (song != null) return song.GetVideo(); else @@ -470,8 +468,7 @@ class PlaylistElement { if (_SongID >= 0) { - CSong song; - song = CSongs.GetSong(_SongID); + CSong song = CSongs.GetSong(_SongID); if (song != null) return song.Title; else @@ -487,8 +484,7 @@ class PlaylistElement { if (_SongID >= 0) { - CSong song; - song = CSongs.GetSong(_SongID); + CSong song = CSongs.GetSong(_SongID); if (song != null) return song.Artist; else @@ -504,8 +500,7 @@ class PlaylistElement { if (_SongID >= 0) { - CSong song; - song = CSongs.GetSong(_SongID); + CSong song = CSongs.GetSong(_SongID); if (song != null) return song.CoverTextureSmall; else @@ -521,8 +516,7 @@ class PlaylistElement { if (_SongID >= 0) { - CSong song; - song = CSongs.GetSong(_SongID); + CSong song = CSongs.GetSong(_SongID); if (song != null) return song.VideoGap; else @@ -543,8 +537,7 @@ class PlaylistElement { if (_SongID >= 0) { - CSong song; - song = CSongs.GetSong(_SongID); + CSong song = CSongs.GetSong(_SongID); if (song != null) return song.IsDuet; else From 0bcb8804b77be7cff1fb4d37fbeffd592b7a5eb4 Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 12 Mar 2012 14:25:30 +0100 Subject: [PATCH 32/37] Use Properties instead of Methods --- Vocaluxe/Base/CBackgroundMusic.cs | 451 ++++++++++-------- Vocaluxe/Menu/CBackground.cs | 2 +- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 22 +- Vocaluxe/Screens/CScreenLoad.cs | 4 +- Vocaluxe/Screens/CScreenOptionsVideo.cs | 2 +- Vocaluxe/Screens/CScreenSing.cs | 6 +- Vocaluxe/Screens/CScreenSong.cs | 6 +- 7 files changed, 267 insertions(+), 226 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 20068035..de16082f 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -23,16 +23,94 @@ namespace Vocaluxe.Base private static List _NotPlayedFileNames = new List(); private static List _BGMusicFileNames = new List(); private static List _PreviousFileNames = new List(); - - private static bool _OwnMusicAdded; - private static bool _BackgroundMusicAdded; - private static bool _Playing; - private static bool _VideoEnabled; - private static bool _Disabled; private static int _Video = -1; private static STexture _CurrentVideoTexture = new STexture(-1); private static Stopwatch _FadeTimer = new Stopwatch(); + private static bool _VideoEnabled; + + private static bool _OwnMusicAdded; + private static bool _BackgroundMusicAdded; + private static bool _Playing; + private static bool _Disabled; + + public static bool VideoEnabled + { + get + { + return _VideoEnabled; + } + set + { + _VideoEnabled = value; + if (!_VideoEnabled) + ToggleVideo(); + } + } + + public static bool Disabled + { + get + { + return _Disabled; + } + set + { + _Disabled = value; + if (_Disabled) + Pause(); + else + Play(); + } + } + + public static int SongID + { + get + { + return _CurrentPlaylistElement._SongID; + } + } + + public static bool Duet + { + get + { + return _CurrentPlaylistElement.Duet; + } + } + + public static bool SongHasVideo + { + get + { + return File.Exists(_CurrentPlaylistElement.VideoFilePath); + } + } + + public static bool Playing + { + get + { + return CSound.IsPlaying(_CurrentMusicStream); + } + } + + public static string ArtistAndTitle + { + get + { + return _CurrentPlaylistElement.Artist + " - " + _CurrentPlaylistElement.Title; + } + } + + public static STexture Cover + { + get + { + return _CurrentPlaylistElement.Cover; + } + } public static void Init() { @@ -51,7 +129,7 @@ namespace Vocaluxe.Base if(CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC) AddBackgroundMusic(); if (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON) - EnableVideo(); + VideoEnabled = true; _Playing = false; } @@ -66,7 +144,7 @@ namespace Vocaluxe.Base { CSound.Fade(_CurrentMusicStream, CConfig.BackgroundMusicVolume, CSettings.BackgroundMusicFadeTime); CSound.Play(_CurrentMusicStream); - if (_VideoEnabled && _Video != -1) + if (VideoEnabled && _Video != -1) CVideo.VdResume(_Video); _Playing = true; } @@ -78,7 +156,7 @@ namespace Vocaluxe.Base public static void Stop() { - if (_VideoEnabled && _Video != -1) + if (VideoEnabled && _Video != -1) { CVideo.VdClose(_Video); CDraw.RemoveTexture(ref _CurrentVideoTexture); @@ -92,10 +170,10 @@ namespace Vocaluxe.Base public static void Pause() { - if (_VideoEnabled && _Video != -1) + if (VideoEnabled && _Video != -1) { CVideo.VdPause(_Video); - CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream) + CSettings.BackgroundMusicFadeTime, _CurrentPlaylistElement.GetVideoGap()); + CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream) + CSettings.BackgroundMusicFadeTime, _CurrentPlaylistElement.VideoGap); } CSound.FadeAndPause(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime); _Playing = false; @@ -135,8 +213,8 @@ namespace Vocaluxe.Base _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; } - _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.GetMusicFilePath()); - if (_VideoEnabled) + _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); + if (VideoEnabled) LoadVideo(); CSound.SetStreamVolume(_CurrentMusicStream, 0f); Play(); @@ -157,8 +235,8 @@ namespace Vocaluxe.Base _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; - _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.GetMusicFilePath()); - if (_VideoEnabled) + _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); + if (VideoEnabled) LoadVideo(); CSound.SetStreamVolume(_CurrentMusicStream, 0f); Play(); @@ -170,8 +248,8 @@ namespace Vocaluxe.Base if (_AllFileNames.Count > 0 && _CurrentMusicStream != -1) { CSound.SetPosition(_CurrentMusicStream, 0); - if (_VideoEnabled && _Video != -1) - CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.GetVideoGap()); + if (VideoEnabled && _Video != -1) + CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); } } @@ -204,7 +282,7 @@ namespace Vocaluxe.Base _NotPlayedFileNames.AddRange(_BGMusicFileNames); } - if (IsPlaying() && !IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0) + if (Playing && !IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0) Next(); _OwnMusicAdded = false; @@ -229,7 +307,7 @@ namespace Vocaluxe.Base AddOwnMusic(); _BackgroundMusicAdded = false; - if (IsPlaying() && IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0) + if (Playing && IsBackgroundFile(_CurrentPlaylistElement) || _AllFileNames.Count == 0) Next(); } } @@ -283,28 +361,13 @@ namespace Vocaluxe.Base CConfig.SaveConfig(); } - public static bool IsPlaying() - { - return CSound.IsPlaying(_CurrentMusicStream); - } - - public static string GetSongArtistAndTitle() - { - return _CurrentPlaylistElement.GetArtist() +" - " + _CurrentPlaylistElement.GetTitle(); - } - - public static STexture GetCover() - { - return _CurrentPlaylistElement.GetCover(); - } - public static void ToggleVideo() { if (_Video != -1) { - if (_VideoEnabled) + if (VideoEnabled) { - _VideoEnabled = false; + VideoEnabled = false; CVideo.VdClose(_Video); _Video = -1; CDraw.RemoveTexture(ref _CurrentVideoTexture); @@ -342,31 +405,11 @@ namespace Vocaluxe.Base return new STexture(-1); } - public static int GetSongNr() - { - return _CurrentPlaylistElement.GetSongNr(); - } - - public static bool IsDuet() - { - return _CurrentPlaylistElement.IsDuet(); - } - - public static bool IsVideoEnabled() - { - return _VideoEnabled; - } - - public static bool HasVideo() - { - return File.Exists(_CurrentPlaylistElement.GetVideoFilePath()); - } - private static bool IsBackgroundFile(PlaylistElement element) { foreach (PlaylistElement elements in _BGMusicFileNames) { - if (elements.GetMusicFilePath() == element.GetMusicFilePath()) + if (elements.MusicFilePath == element.MusicFilePath) return true; } return false; @@ -376,176 +419,174 @@ namespace Vocaluxe.Base { if (_Video == -1) { - _Video = CVideo.VdLoad(_CurrentPlaylistElement.GetVideoFilePath()); - CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.GetVideoGap()); - _VideoEnabled = true; + _Video = CVideo.VdLoad(_CurrentPlaylistElement.VideoFilePath); + CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); + VideoEnabled = true; _FadeTimer.Reset(); _FadeTimer.Start(); } } - - public static void EnableVideo() - { - if (!_VideoEnabled) - ToggleVideo(); - } - - public static void Disable() - { - Pause(); - _Disabled = true; - } - - public static void Enable() - { - Play(); - _Disabled = false; - } - - public static bool IsEnabled() - { - return !_Disabled; - } } } class PlaylistElement { - string _MusicFilePath; - int _SongID; + public int _SongID; + private string _MusicFilePath; + + public string MusicFilePath + { + get + { + if (_SongID >= 0) + { + CSong song = CSongs.GetSong(_SongID); + if (song != null) + return song.GetMP3(); + else + { + _SongID = -1; + CLog.LogError("Song not found"); + } + } + return _MusicFilePath; + } + + set + { + MusicFilePath = value; + } + } + + public string VideoFilePath + { + get + { + if (_SongID >= 0) + { + CSong song = CSongs.GetSong(_SongID); + if (song != null) + return song.GetVideo(); + else + { + _SongID = -1; + CLog.LogError("Song not found"); + } + } + return string.Empty; + } + } + + public string Title + { + get + { + if (_SongID >= 0) + { + CSong song = CSongs.GetSong(_SongID); + if (song != null) + return song.Title; + else + { + _SongID = -1; + CLog.LogError("Song not found"); + } + } + return "Unknown"; + } + } + + public string Artist + { + get + { + if (_SongID >= 0) + { + CSong song = CSongs.GetSong(_SongID); + if (song != null) + return song.Artist; + else + { + _SongID = -1; + CLog.LogError("Song not found"); + } + } + return "Unknown"; + } + } + + public STexture Cover + { + get + { + if (_SongID >= 0) + { + CSong song = CSongs.GetSong(_SongID); + if (song != null) + return song.CoverTextureSmall; + else + { + _SongID = -1; + CLog.LogError("Song not found"); + } + } + return CCover.NoCover; + } + } + + public float VideoGap + { + get + { + if (_SongID >= 0) + { + CSong song = CSongs.GetSong(_SongID); + if (song != null) + return song.VideoGap; + else + { + _SongID = -1; + CLog.LogError("Song not found"); + } + } + return 0; + } + } + + public bool Duet + { + get + { + if (_SongID >= 0) + { + CSong song = CSongs.GetSong(_SongID); + if (song != null) + return song.IsDuet; + else + { + _SongID = -1; + CLog.LogError("Song not found"); + } + } + return false; + } + } public PlaylistElement(CSong song) { - _MusicFilePath = string.Empty; + //MusicFilePath = string.Empty; _SongID = song.ID; } public PlaylistElement(string FilePath) { - _MusicFilePath = FilePath; + //MusicFilePath = FilePath; _SongID = -1; } public PlaylistElement() { - _MusicFilePath = string.Empty; + //MusicFilePath = string.Empty; _SongID = -1; } - - public string GetMusicFilePath() - { - if (_SongID >= 0) - { - CSong song = CSongs.GetSong(_SongID); - if (song != null) - return song.GetMP3(); - else - { - _SongID = -1; - CLog.LogError("Song not found"); - } - } - return _MusicFilePath; - } - - public string GetVideoFilePath() - { - if (_SongID >= 0) - { - CSong song = CSongs.GetSong(_SongID); - if (song != null) - return song.GetVideo(); - else - { - _SongID = -1; - CLog.LogError("Song not found"); - } - } - return string.Empty; - } - - public string GetTitle() - { - if (_SongID >= 0) - { - CSong song = CSongs.GetSong(_SongID); - if (song != null) - return song.Title; - else - { - _SongID = -1; - CLog.LogError("Song not found"); - } - } - return "Unknown"; - } - - public string GetArtist() - { - if (_SongID >= 0) - { - CSong song = CSongs.GetSong(_SongID); - if (song != null) - return song.Artist; - else - { - _SongID = -1; - CLog.LogError("Song not found"); - } - } - return "Unknown"; - } - - public STexture GetCover() - { - if (_SongID >= 0) - { - CSong song = CSongs.GetSong(_SongID); - if (song != null) - return song.CoverTextureSmall; - else - { - _SongID = -1; - CLog.LogError("Song not found"); - } - } - return CCover.NoCover; - } - - public float GetVideoGap() - { - if (_SongID >= 0) - { - CSong song = CSongs.GetSong(_SongID); - if (song != null) - return song.VideoGap; - else - { - _SongID = -1; - CLog.LogError("Song not found"); - } - } - return 0; - } - - public int GetSongNr() - { - return _SongID; - } - - public bool IsDuet() - { - if (_SongID >= 0) - { - CSong song = CSongs.GetSong(_SongID); - if (song != null) - return song.IsDuet; - else - { - _SongID = -1; - CLog.LogError("Song not found"); - } - } - return false; - } } diff --git a/Vocaluxe/Menu/CBackground.cs b/Vocaluxe/Menu/CBackground.cs index f04c1813..cedc4eb5 100644 --- a/Vocaluxe/Menu/CBackground.cs +++ b/Vocaluxe/Menu/CBackground.cs @@ -137,7 +137,7 @@ namespace Vocaluxe.Menu public bool Draw() { bool ok = false; - if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON && CBackgroundMusic.IsPlaying() && CBackgroundMusic.HasVideo() && CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.IsEnabled()) + if (_Theme.Type == EBackgroundTypes.Video && CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON && CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON && CBackgroundMusic.Playing && CBackgroundMusic.SongHasVideo && CBackgroundMusic.VideoEnabled && !CBackgroundMusic.Disabled) { Pause(); ok = DrawBackgroundMusicVideo(); diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index fa40ad60..0fbc12e4 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -48,7 +48,7 @@ namespace Vocaluxe.Screens else { CConfig.VideosToBackground = EOffOn.TR_CONFIG_ON; - CBackgroundMusic.EnableVideo(); + CBackgroundMusic.VideoEnabled = true; } CConfig.SaveConfig(); } @@ -118,7 +118,7 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonShowVideo)].Selected) TogglePreviewVideo(); if (Buttons[htButtons(ButtonSing)].Selected) - StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); + StartSong(CBackgroundMusic.SongID, CBackgroundMusic.Duet); if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) ToggleBackgroundVideo(); break; @@ -146,7 +146,7 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonShowVideo)].Selected) TogglePreviewVideo(); if (Buttons[htButtons(ButtonSing)].Selected) - StartSong(CBackgroundMusic.GetSongNr(), CBackgroundMusic.IsDuet()); + StartSong(CBackgroundMusic.SongID, CBackgroundMusic.Duet); if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) ToggleBackgroundVideo(); } else if (MouseEvent.LB) @@ -178,13 +178,13 @@ namespace Vocaluxe.Screens { if (!_Active) return false; - Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.GetCover(); - if (CBackgroundMusic.IsVideoEnabled() && CBackgroundMusic.HasVideo()) + Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.Cover; + if (CBackgroundMusic.VideoEnabled && CBackgroundMusic.SongHasVideo) CDraw.DrawTexture(Statics[htStatics(StaticCover)], CBackgroundMusic.GetVideoTexture(), EAspect.Crop); - Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.IsPlaying(); - Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.IsPlaying(); - Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.GetSongArtistAndTitle(); - if (CBackgroundMusic.IsVideoEnabled()) + Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.Playing; + Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.Playing; + Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.ArtistAndTitle; + if (CBackgroundMusic.VideoEnabled) Buttons[htButtons(ButtonShowVideo)].SColor = CTheme.GetColor("ButtonSColor"); return base.Draw(); @@ -218,7 +218,7 @@ namespace Vocaluxe.Screens else { CConfig.VideosToBackground = EOffOn.TR_CONFIG_ON; - CBackgroundMusic.EnableVideo(); + CBackgroundMusic.VideoEnabled = true; } CConfig.SaveConfig(); } @@ -229,7 +229,7 @@ namespace Vocaluxe.Screens if (!_VideoPreview && !_VideoBackground) CBackgroundMusic.ToggleVideo(); else - CBackgroundMusic.EnableVideo(); + CBackgroundMusic.VideoEnabled = true; } } } diff --git a/Vocaluxe/Screens/CScreenLoad.cs b/Vocaluxe/Screens/CScreenLoad.cs index 1ffa133c..e1b4cd00 100644 --- a/Vocaluxe/Screens/CScreenLoad.cs +++ b/Vocaluxe/Screens/CScreenLoad.cs @@ -138,7 +138,7 @@ namespace Vocaluxe.Screens _SongLoaderThread.Start(); _timer.Start(); - if (!CBackgroundMusic.IsPlaying()) + if (!CBackgroundMusic.Playing) CBackgroundMusic.Next(); } @@ -177,7 +177,7 @@ namespace Vocaluxe.Screens { CBackgroundMusic.AddOwnMusic(); - if (!CBackgroundMusic.IsPlaying()) + if (!CBackgroundMusic.Playing) CBackgroundMusic.Next(); } diff --git a/Vocaluxe/Screens/CScreenOptionsVideo.cs b/Vocaluxe/Screens/CScreenOptionsVideo.cs index b5e6b93c..fd693db6 100644 --- a/Vocaluxe/Screens/CScreenOptionsVideo.cs +++ b/Vocaluxe/Screens/CScreenOptionsVideo.cs @@ -128,7 +128,7 @@ namespace Vocaluxe.Screens CConfig.VideoPreview = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideoPreview)].Selection; CConfig.VideosInSongs = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosInSongs)].Selection; CConfig.VideosToBackground = (EOffOn)SelectSlides[htSelectSlides(SelectSlideVideosToBackground)].Selection; - CBackgroundMusic.EnableVideo(); + CBackgroundMusic.VideoEnabled = true; CConfig.SaveConfig(); } diff --git a/Vocaluxe/Screens/CScreenSing.cs b/Vocaluxe/Screens/CScreenSing.cs index bf38ac6b..f1d4fe7e 100644 --- a/Vocaluxe/Screens/CScreenSing.cs +++ b/Vocaluxe/Screens/CScreenSing.cs @@ -326,7 +326,7 @@ namespace Vocaluxe.Screens } SetVisuability(); - CBackgroundMusic.Disable(); + CBackgroundMusic.Disabled = true; } public override void OnShowFinish() @@ -335,7 +335,7 @@ namespace Vocaluxe.Screens CGame.Start(); LoadNextSong(); - CBackgroundMusic.Disable(); + CBackgroundMusic.Disabled = true; } public override bool Draw() @@ -418,7 +418,7 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); - CBackgroundMusic.Enable(); + CBackgroundMusic.Disabled = false; CloseSong(); } diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 54be0274..5599b3ff 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -173,12 +173,12 @@ namespace Vocaluxe.Screens if ((CSongs.Category >= 0) && (song >= 0) && song < CSongs.VisibleSongs.Length) { Texts[htTexts(TextSelection)].Text = CSongs.VisibleSongs[song].Artist + " - " + CSongs.VisibleSongs[song].Title; - CBackgroundMusic.Disable(); + CBackgroundMusic.Disabled = true; } else if ((CSongs.Category == -1) && (song >= 0) && song < CSongs.Categories.Length) { Texts[htTexts(TextSelection)].Text = CSongs.Categories[song].Name; - CBackgroundMusic.Enable(); + CBackgroundMusic.Disabled = false; } else Texts[htTexts(TextSelection)].Text = String.Empty; @@ -213,7 +213,7 @@ namespace Vocaluxe.Screens public override void OnClose() { base.OnClose(); - CBackgroundMusic.Enable(); + CBackgroundMusic.Disabled = false; SongMenus[htSongMenus(SongMenu)].OnHide(); } From 1b27e15106290e1ca6c86f11265e38d435ae511f Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 12 Mar 2012 21:58:33 +0100 Subject: [PATCH 33/37] Removed medley branch from jukebox branch --- Vocaluxe/Base/CBackgroundMusic.cs | 38 ++++++----- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 65 +++++++++---------- 2 files changed, 51 insertions(+), 52 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index de16082f..da7618bc 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -42,9 +42,15 @@ namespace Vocaluxe.Base } set { - _VideoEnabled = value; - if (!_VideoEnabled) + if (_VideoEnabled && value) + return; + if (!_VideoEnabled && !value) + return; + if(_VideoEnabled && !value) ToggleVideo(); + if (!_VideoEnabled && value) + ToggleVideo(); + _VideoEnabled = value; } } @@ -129,7 +135,7 @@ namespace Vocaluxe.Base if(CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC) AddBackgroundMusic(); if (CConfig.VideoBackgrounds == EOffOn.TR_CONFIG_ON) - VideoEnabled = true; + _VideoEnabled = true; _Playing = false; } @@ -144,7 +150,7 @@ namespace Vocaluxe.Base { CSound.Fade(_CurrentMusicStream, CConfig.BackgroundMusicVolume, CSettings.BackgroundMusicFadeTime); CSound.Play(_CurrentMusicStream); - if (VideoEnabled && _Video != -1) + if (_VideoEnabled && _Video != -1) CVideo.VdResume(_Video); _Playing = true; } @@ -156,7 +162,7 @@ namespace Vocaluxe.Base public static void Stop() { - if (VideoEnabled && _Video != -1) + if (_VideoEnabled && _Video != -1) { CVideo.VdClose(_Video); CDraw.RemoveTexture(ref _CurrentVideoTexture); @@ -170,7 +176,7 @@ namespace Vocaluxe.Base public static void Pause() { - if (VideoEnabled && _Video != -1) + if (_VideoEnabled && _Video != -1) { CVideo.VdPause(_Video); CVideo.VdSkip(_Video, CSound.GetPosition(_CurrentMusicStream) + CSettings.BackgroundMusicFadeTime, _CurrentPlaylistElement.VideoGap); @@ -214,7 +220,7 @@ namespace Vocaluxe.Base _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; } _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); - if (VideoEnabled) + if (_VideoEnabled) LoadVideo(); CSound.SetStreamVolume(_CurrentMusicStream, 0f); Play(); @@ -236,7 +242,7 @@ namespace Vocaluxe.Base _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); - if (VideoEnabled) + if (_VideoEnabled) LoadVideo(); CSound.SetStreamVolume(_CurrentMusicStream, 0f); Play(); @@ -248,7 +254,7 @@ namespace Vocaluxe.Base if (_AllFileNames.Count > 0 && _CurrentMusicStream != -1) { CSound.SetPosition(_CurrentMusicStream, 0); - if (VideoEnabled && _Video != -1) + if (_VideoEnabled && _Video != -1) CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); } } @@ -365,9 +371,9 @@ namespace Vocaluxe.Base { if (_Video != -1) { - if (VideoEnabled) + if (_VideoEnabled) { - VideoEnabled = false; + _VideoEnabled = false; CVideo.VdClose(_Video); _Video = -1; CDraw.RemoveTexture(ref _CurrentVideoTexture); @@ -421,7 +427,7 @@ namespace Vocaluxe.Base { _Video = CVideo.VdLoad(_CurrentPlaylistElement.VideoFilePath); CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); - VideoEnabled = true; + _VideoEnabled = true; _FadeTimer.Reset(); _FadeTimer.Start(); } @@ -454,7 +460,7 @@ class PlaylistElement set { - MusicFilePath = value; + _MusicFilePath = value; } } @@ -574,19 +580,19 @@ class PlaylistElement public PlaylistElement(CSong song) { - //MusicFilePath = string.Empty; + MusicFilePath = string.Empty; _SongID = song.ID; } public PlaylistElement(string FilePath) { - //MusicFilePath = FilePath; + MusicFilePath = FilePath; _SongID = -1; } public PlaylistElement() { - //MusicFilePath = string.Empty; + MusicFilePath = string.Empty; _SongID = -1; } } diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 0fbc12e4..3eddd24d 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -29,9 +29,24 @@ namespace Vocaluxe.Screens private const string ButtonToBackgroundVideo = "ButtonToBackgroundVideo"; private const string TextCurrentSong = "TextCurrentSong"; - private bool _VideoPreview = false; - private bool _VideoBackground + + private bool VideoPreview + { + get + { + return _VideoPreview; + } + set + { + _VideoPreview = value; + if (!_VideoPreview && !VideoBackground) + CBackgroundMusic.VideoEnabled = false; + else + CBackgroundMusic.VideoEnabled = true; + } + } + private bool VideoBackground { get { @@ -39,11 +54,14 @@ namespace Vocaluxe.Screens } set { - if (CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON) + if (!value) { - CConfig.VideosToBackground = EOffOn.TR_CONFIG_OFF; - if (!_VideoPreview) //No videos are enabled so we should call ToggleVideo() to close - CBackgroundMusic.ToggleVideo(); + if (CConfig.VideosToBackground == EOffOn.TR_CONFIG_ON) + { + CConfig.VideosToBackground = EOffOn.TR_CONFIG_OFF; + if (!_VideoPreview) + CBackgroundMusic.VideoEnabled = false; + } } else { @@ -116,11 +134,11 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonRepeat)].Selected) CBackgroundMusic.Repeat(); if (Buttons[htButtons(ButtonShowVideo)].Selected) - TogglePreviewVideo(); + VideoPreview = !VideoPreview; if (Buttons[htButtons(ButtonSing)].Selected) StartSong(CBackgroundMusic.SongID, CBackgroundMusic.Duet); if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) - ToggleBackgroundVideo(); + VideoBackground = !VideoBackground; break; } } @@ -144,11 +162,11 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonRepeat)].Selected) CBackgroundMusic.Repeat(); if (Buttons[htButtons(ButtonShowVideo)].Selected) - TogglePreviewVideo(); + VideoPreview = !VideoPreview; if (Buttons[htButtons(ButtonSing)].Selected) StartSong(CBackgroundMusic.SongID, CBackgroundMusic.Duet); if (Buttons[htButtons(ButtonToBackgroundVideo)].Selected) - ToggleBackgroundVideo(); + VideoBackground = !VideoBackground; } else if (MouseEvent.LB) { CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); @@ -164,7 +182,7 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { Statics[htStatics(StaticCover)].Visible = !_VideoPreview; - Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = _VideoBackground; + Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = VideoBackground; Buttons[htButtons(ButtonShowVideo)].Pressed = _VideoPreview; return true; } @@ -206,30 +224,5 @@ namespace Vocaluxe.Screens CGraphics.FadeTo(EScreens.ScreenNames); } } - - private void ToggleBackgroundVideo() - { - if (_VideoBackground) - { - CConfig.VideosToBackground = EOffOn.TR_CONFIG_OFF; - if (!_VideoPreview) //No videos are enabled so we should call ToggleVideo() to close - CBackgroundMusic.ToggleVideo(); - } - else - { - CConfig.VideosToBackground = EOffOn.TR_CONFIG_ON; - CBackgroundMusic.VideoEnabled = true; - } - CConfig.SaveConfig(); - } - - private void TogglePreviewVideo() - { - _VideoPreview = !_VideoPreview; - if (!_VideoPreview && !_VideoBackground) - CBackgroundMusic.ToggleVideo(); - else - CBackgroundMusic.VideoEnabled = true; - } } } From 5e4207769f8feaa0ef54c552f48ec45a7830920f Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 12 Mar 2012 23:11:07 +0100 Subject: [PATCH 34/37] Show cover if preview is enabled and the song has no cover --- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 3eddd24d..1f677926 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -181,7 +181,8 @@ namespace Vocaluxe.Screens public override bool UpdateGame() { - Statics[htStatics(StaticCover)].Visible = !_VideoPreview; + + Statics[htStatics(StaticCover)].Visible = !_VideoPreview || !CBackgroundMusic.SongHasVideo; Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = VideoBackground; Buttons[htButtons(ButtonShowVideo)].Pressed = _VideoPreview; return true; @@ -197,13 +198,11 @@ namespace Vocaluxe.Screens if (!_Active) return false; Statics[htStatics(StaticCover)].Texture = CBackgroundMusic.Cover; - if (CBackgroundMusic.VideoEnabled && CBackgroundMusic.SongHasVideo) + if (CBackgroundMusic.VideoEnabled && VideoPreview && CBackgroundMusic.SongHasVideo) CDraw.DrawTexture(Statics[htStatics(StaticCover)], CBackgroundMusic.GetVideoTexture(), EAspect.Crop); Buttons[htButtons(ButtonPause)].Visible = CBackgroundMusic.Playing; Buttons[htButtons(ButtonPlay)].Visible = !CBackgroundMusic.Playing; Texts[htTexts(TextCurrentSong)].Text = CBackgroundMusic.ArtistAndTitle; - if (CBackgroundMusic.VideoEnabled) - Buttons[htButtons(ButtonShowVideo)].SColor = CTheme.GetColor("ButtonSColor"); return base.Draw(); } From 8d95693e28dbe83a7107c5f5cc5e1c68fa183eec Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Mon, 12 Mar 2012 23:14:44 +0100 Subject: [PATCH 35/37] Use new outline text option --- Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml index 6affc5e0..df19d2c3 100644 --- a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml +++ b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml @@ -431,7 +431,7 @@ - Normal + Outline From 44ffe7223d9df02d8ff3952524d7090bc1e3293c Mon Sep 17 00:00:00 2001 From: Stephan Sundermann Date: Tue, 13 Mar 2012 13:53:54 +0100 Subject: [PATCH 36/37] Backgroundmusic controls are no longer hidden if a mouse button is pressed over the popup --- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 1f677926..3e383be6 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -169,11 +169,11 @@ namespace Vocaluxe.Screens VideoBackground = !VideoBackground; } else if (MouseEvent.LB) { - CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); + //CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); return false; } else if (MouseEvent.RB) { - CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); + //CGraphics.HidePopup(EPopupScreens.PopupPlayerControl); return false; } return true; From 30085d7fb6cc0e054b1b5e730cdcf62e327c8f99 Mon Sep 17 00:00:00 2001 From: Alexander Eckart Date: Wed, 21 Mar 2012 17:44:37 +0100 Subject: [PATCH 37/37] fixed CGraphics.cs --- Vocaluxe/Menu/CGraphics.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Vocaluxe/Menu/CGraphics.cs b/Vocaluxe/Menu/CGraphics.cs index 68b680ec..27ab24c5 100644 --- a/Vocaluxe/Menu/CGraphics.cs +++ b/Vocaluxe/Menu/CGraphics.cs @@ -261,7 +261,7 @@ namespace Vocaluxe.Menu for (int i = 0; i < _Screens.Count; i++) { CLog.StartBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]); - Screens[i].LoadTheme(); + _Screens[i].LoadTheme(); CLog.StopBenchmark(1, "Load Theme " + Enum.GetNames(typeof(EScreens))[i]); } @@ -276,7 +276,7 @@ namespace Vocaluxe.Menu ReloadCursor(); for (int i = 0; i < _Screens.Count; i++) { - Screens[i].ReloadTheme(); + _Screens[i].ReloadTheme(); } for (int i = 0; i < _PopupScreens.Count; i++) @@ -290,7 +290,7 @@ namespace Vocaluxe.Menu ReloadCursor(); for (int i = 0; i < _Screens.Count; i++) { - Screens[i].ReloadTextures(); + _Screens[i].ReloadTextures(); } for (int i = 0; i < _PopupScreens.Count; i++) @@ -304,7 +304,7 @@ namespace Vocaluxe.Menu CTheme.SaveTheme(); for (int i = 0; i < _Screens.Count; i++) { - Screens[i].SaveTheme(); + _Screens[i].SaveTheme(); } for (int i = 0; i < _PopupScreens.Count; i++)