From 26a5086fc878d2e952a622658bf186a8451ab2e4 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Sat, 1 Dec 2012 22:05:45 +0100 Subject: [PATCH 01/11] Added function to select a random category. --- Output/Languages/Deutsch.xml | 1 + Output/Languages/English.xml | 1 + Output/Themes/Ambient/Screens/ScreenSong.xml | 49 ++++++++++++++++ .../Themes/Changelog/Changelog_ScreenSong.txt | 2 +- Vocaluxe/Base/CSongs.cs | 30 ++++++++++ Vocaluxe/Menu/SongMenu/CSongMenu.cs | 5 ++ Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs | 6 ++ Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs | 56 +++++++++++++++++++ Vocaluxe/Menu/SongMenu/ISongMenu.cs | 1 + Vocaluxe/Screens/CScreenSong.cs | 31 +++++++++- 10 files changed, 179 insertions(+), 3 deletions(-) diff --git a/Output/Languages/Deutsch.xml b/Output/Languages/Deutsch.xml index 8fe726bf..75d96131 100644 --- a/Output/Languages/Deutsch.xml +++ b/Output/Languages/Deutsch.xml @@ -123,6 +123,7 @@ Zur Playlist hinzufügen Schließen Zufälligen Song wählen + Zufällige Kategorie wählen Alle Songs singen Alle sichtbaren Song singen Playlist öffnen diff --git a/Output/Languages/English.xml b/Output/Languages/English.xml index 10b2e4fa..b3e2194f 100644 --- a/Output/Languages/English.xml +++ b/Output/Languages/English.xml @@ -123,6 +123,7 @@ Add to playlist Close Select a random song + Select a random category Sing all songs Sing all visible songs Open playlist diff --git a/Output/Themes/Ambient/Screens/ScreenSong.xml b/Output/Themes/Ambient/Screens/ScreenSong.xml index 3d744951..624cb0e6 100644 --- a/Output/Themes/Ambient/Screens/ScreenSong.xml +++ b/Output/Themes/Ambient/Screens/ScreenSong.xml @@ -473,6 +473,55 @@ + + + Button + + Button + + 40 + 90 + -2,11 + 360 + 40 + + + ButtonColor + + + ButtonSColor + + + 180 + 5 + + 30 + + 350 + + + ButtonTextColor + + + ButtonTextSColor + + Center + + Center + + + + Outline + + TR_SCREENSONG_BUTTON_RANDOMCAT + + + + + + + + Button diff --git a/Output/Themes/Changelog/Changelog_ScreenSong.txt b/Output/Themes/Changelog/Changelog_ScreenSong.txt index c1402b34..7d2e320c 100644 --- a/Output/Themes/Changelog/Changelog_ScreenSong.txt +++ b/Output/Themes/Changelog/Changelog_ScreenSong.txt @@ -6,7 +6,7 @@ Version 3: Add: -, , , , , , , +, , , , , , , , , , and as a new Screen-Element. For details, look at ScreenSong.xml diff --git a/Vocaluxe/Base/CSongs.cs b/Vocaluxe/Base/CSongs.cs index cc33b1ed..147e1c01 100644 --- a/Vocaluxe/Base/CSongs.cs +++ b/Vocaluxe/Base/CSongs.cs @@ -56,6 +56,7 @@ namespace Vocaluxe.Base private static int _CoverLoadIndex = -1; private static int _CatIndex = -1; private static List _Categories = new List(); + private static List _CategoriesForRandom = new List(); private static Stopwatch _CoverLoadTimer = new Stopwatch(); @@ -275,6 +276,35 @@ namespace Vocaluxe.Base _SongsForRandom.AddRange(VisibleSongs); } + public static int GetRandomCategory() + { + if (_CategoriesForRandom.Count == 0) + UpdateRandomCategoryList(); + + if (_CategoriesForRandom.Count == 0) + return -1; + + CCategory category = _CategoriesForRandom[CGame.Rand.Next(0, _CategoriesForRandom.Count - 1)]; + _CategoriesForRandom.Remove(category); + return GetCategoryNumber(category); + } + + public static void UpdateRandomCategoryList() + { + _CategoriesForRandom.Clear(); + _CategoriesForRandom.AddRange(Categories); + } + + private static int GetCategoryNumber(CCategory category) + { + for (int i = 0; i < Categories.Length; i++) + { + if (Categories[i] == category) + return i; + } + return -1; + } + public static CSong[] AllSongs { get { return _Songs.ToArray(); } diff --git a/Vocaluxe/Menu/SongMenu/CSongMenu.cs b/Vocaluxe/Menu/SongMenu/CSongMenu.cs index 7f437ab0..e6a2824e 100644 --- a/Vocaluxe/Menu/SongMenu/CSongMenu.cs +++ b/Vocaluxe/Menu/SongMenu/CSongMenu.cs @@ -98,6 +98,11 @@ namespace Vocaluxe.Menu.SongMenu return _SongMenu.GetSelectedCategory(); } + public void SetSelectedCategory(int CategoryNr) + { + _SongMenu.SetSelectedCategory(CategoryNr); + } + public int GetActualSelection() { return _SongMenu.GetActualSelection(); diff --git a/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs b/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs index 5dbfe865..c2fc76ee 100644 --- a/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs +++ b/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs @@ -536,6 +536,12 @@ namespace Vocaluxe.Menu.SongMenu return; } + public virtual void SetSelectedCategory(int CategoryNr) + { + if (!_Initialized) + return; + } + public virtual void SetSmallView(bool SmallView) { if (!_Initialized) diff --git a/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs b/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs index 10a86dbb..eda76a62 100644 --- a/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs @@ -556,6 +556,62 @@ namespace Vocaluxe.Menu.SongMenu } + public override void SetSelectedCategory(int CategoryNr) + { + base.SetSelectedCategory(CategoryNr); + + if (CategoryNr < 0) + return; + + if (CSongs.Categories.Length > CategoryNr) + { + bool sel = false; + foreach (CStatic tile in _Tiles) + { + if (tile.Selected) + { + sel = true; + break; + } + } + + if (_Locked == -1 || !sel) + { + if (_PreviewSelected > -1) + { + _Locked = _PreviewSelected; + } + else + { + _Locked = 0; + _actualSelection = 0; + _PreviewSelected = 0; + SetSelectedNow(); + UpdateList(0); + } + } + + foreach (CStatic tile in _Tiles) + { + tile.Selected = false; + } + + _PreviewSelected = CategoryNr; + SetSelectedNow(); + _Locked = CategoryNr; + + UpdateList((CategoryNr / _NumW) * _NumW - (_NumW * (_NumH - 2))); + + _PreviewSelected = _Locked; + _actualSelection = _Locked; + + for (int i = 0; i < _Tiles.Count; i++) + { + _Tiles[i].Selected = _Locked == i + _Offset; + } + } + } + protected override void EnterCategory(int cat) { base.EnterCategory(cat); diff --git a/Vocaluxe/Menu/SongMenu/ISongMenu.cs b/Vocaluxe/Menu/SongMenu/ISongMenu.cs index a859e84b..dfca5dee 100644 --- a/Vocaluxe/Menu/SongMenu/ISongMenu.cs +++ b/Vocaluxe/Menu/SongMenu/ISongMenu.cs @@ -24,6 +24,7 @@ namespace Vocaluxe.Menu.SongMenu void SetActive(bool Active); int GetSelectedCategory(); + void SetSelectedCategory(int CategoryNr); int GetActualSelection(); bool IsSelected(); diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index f5809c12..a8dbc336 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -38,6 +38,7 @@ namespace Vocaluxe.Screens private const string ButtonOptionsPlaylist = "ButtonOptionsPlaylist"; private const string ButtonOptionsClose = "ButtonOptionsClose"; private const string ButtonOptionsRandom = "ButtonOptionsRandom"; + private const string ButtonOptionsRandomCategory = "ButtonOptionsRandomCategory"; private const string ButtonOptionsSingAll = "ButtonOptionsSingAll"; private const string ButtonOptionsSingAllVisible = "ButtonOptionsSingAllVisible"; private const string ButtonOptionsOpenPlaylist = "ButtonOptionsOpenPlaylist"; @@ -73,7 +74,7 @@ namespace Vocaluxe.Screens _ScreenVersion = ScreenVersion; _ThemeStatics = new string[] { StaticSearchBar, StaticOptionsBG }; _ThemeTexts = new string[] { TextCategory, TextSelection, TextSearchBarTitle, TextSearchBar, TextOptionsTitle }; - _ThemeButtons = new string[] { ButtonOptionsClose, ButtonOptionsPlaylist, ButtonOptionsSing, ButtonOptionsRandom, ButtonOptionsSingAll, ButtonOptionsSingAllVisible, ButtonOptionsOpenPlaylist, ButtonOpenOptions }; + _ThemeButtons = new string[] { ButtonOptionsClose, ButtonOptionsPlaylist, ButtonOptionsSing, ButtonOptionsRandom, ButtonOptionsRandomCategory, ButtonOptionsSingAll, ButtonOptionsSingAllVisible, ButtonOptionsOpenPlaylist, ButtonOpenOptions }; _ThemeSelectSlides = new string[] { SelectSlideOptionsMode, SelectSlideOptionsPlaylistAdd, SelectSlideOptionsPlaylistOpen }; _ThemeSongMenus = new string[] { SongMenu }; _ThemePlaylists = new string[] { Playlist }; @@ -89,6 +90,7 @@ namespace Vocaluxe.Screens Buttons[htButtons(ButtonOptionsSing)].Visible = false; Buttons[htButtons(ButtonOptionsPlaylist)].Visible = false; Buttons[htButtons(ButtonOptionsRandom)].Visible = false; + Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = false; Buttons[htButtons(ButtonOptionsSingAll)].Visible = false; Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = false; Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = false; @@ -223,6 +225,10 @@ namespace Vocaluxe.Screens { SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); } + else if (CSongs.Category == -1 && KeyEvent.Mod == Modifier.Ctrl) + { + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + } break; //TODO: Delete that! @@ -259,6 +265,13 @@ namespace Vocaluxe.Screens SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); } } + else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) + { + if (CSongs.Category == -1) + { + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + } + } else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) { StartRandomAllSongs(); @@ -319,6 +332,11 @@ namespace Vocaluxe.Screens Console.WriteLine("MB pressed"); SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); } + else if (MouseEvent.MB && CSongs.Category == -1) + { + Console.WriteLine("MB pressed"); + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + } else SongMenus[htSongMenus(SongMenu)].HandleMouse(ref MouseEvent); @@ -362,6 +380,13 @@ namespace Vocaluxe.Screens SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); } } + else if (Buttons[htButtons(ButtonOptionsRandomCategory)].Selected) + { + if (CSongs.Category == -1) + { + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + } + } else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) { ToggleSongOptions(ESongOptionsView.None); @@ -648,8 +673,9 @@ namespace Vocaluxe.Screens else if (view == ESongOptionsView.General) { Buttons[htButtons(ButtonOptionsRandom)].Visible = CSongs.Category != -1; + Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = CSongs.Category == -1; Buttons[htButtons(ButtonOptionsSingAll)].Visible = true; - Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = true; + Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = CSongs.Category != -1; ; Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = true; SelectSlides[htSelectSlides(SelectSlideOptionsPlaylistOpen)].Visible = true; } @@ -666,6 +692,7 @@ namespace Vocaluxe.Screens Buttons[htButtons(ButtonOptionsSing)].Visible = false; Buttons[htButtons(ButtonOptionsPlaylist)].Visible = false; Buttons[htButtons(ButtonOptionsRandom)].Visible = false; + Buttons[htButtons(ButtonOptionsRandomCategory)].Visible = false; Buttons[htButtons(ButtonOptionsSingAll)].Visible = false; Buttons[htButtons(ButtonOptionsSingAllVisible)].Visible = false; Buttons[htButtons(ButtonOptionsOpenPlaylist)].Visible = false; From aa68edfba99b113cd4ea8bbe51576b17ed7a45e6 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Sat, 1 Dec 2012 23:11:54 +0100 Subject: [PATCH 02/11] Added full-video-preview. Toggle wie "V" or click on video-icon. --- Vocaluxe/Menu/SongMenu/CSongMenu.cs | 10 + Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs | 14 ++ Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs | 45 +++- Vocaluxe/Menu/SongMenu/ISongMenu.cs | 3 + Vocaluxe/Screens/CScreenSong.cs | 215 +++++++++++-------- 5 files changed, 188 insertions(+), 99 deletions(-) diff --git a/Vocaluxe/Menu/SongMenu/CSongMenu.cs b/Vocaluxe/Menu/SongMenu/CSongMenu.cs index e6a2824e..7b22e96d 100644 --- a/Vocaluxe/Menu/SongMenu/CSongMenu.cs +++ b/Vocaluxe/Menu/SongMenu/CSongMenu.cs @@ -143,6 +143,16 @@ namespace Vocaluxe.Menu.SongMenu _SongMenu.SetSmallView(SmallView); } + public void ToggleVideoFull() + { + _SongMenu.ToggleVideoFull(); + } + + public bool IsVideoFull() + { + return _SongMenu.IsVideoFull(); + } + #endregion ISongMenu #region IMenuElement diff --git a/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs b/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs index c2fc76ee..4f1a9e13 100644 --- a/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs +++ b/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs @@ -484,6 +484,9 @@ namespace Vocaluxe.Menu.SongMenu _timer.Stop(); _timer.Reset(); _SelectedInternal = _SelectedPending; + + if (IsVideoFull()) + ToggleVideoFull(); } public virtual void HandleInput(ref KeyEvent KeyEvent) @@ -553,6 +556,17 @@ namespace Vocaluxe.Menu.SongMenu return false; } + public virtual void ToggleVideoFull() + { + if (!_Initialized) + return; + } + + public virtual bool IsVideoFull() + { + return false; + } + public virtual void UnloadTextures() { } diff --git a/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs b/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs index eda76a62..1c1393b8 100644 --- a/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs @@ -41,6 +41,7 @@ namespace Vocaluxe.Menu.SongMenu private int _actualSelection = -1; private bool _SmallView = false; + private bool _VidFull = false; public override int GetActualSelection() { @@ -359,6 +360,10 @@ namespace Vocaluxe.Menu.SongMenu } else if (_PreviewSelected != -1 && MouseEvent.LB && CSongs.Category != -1) { + if (CHelper.IsInBounds(_VideoIcon.Rect, MouseEvent)) + { + ToggleVideoFull(); + } if (CHelper.IsInBounds(_CoverBig.Rect, MouseEvent) || CHelper.IsInBounds(_TextBG.Rect, MouseEvent)) { _Locked = _PreviewSelected; @@ -375,6 +380,10 @@ namespace Vocaluxe.Menu.SongMenu } } } + else if (MouseEvent.LB && CHelper.IsInBounds(_VideoIcon.Rect, MouseEvent)) + { + ToggleVideoFull(); + } if (MouseEvent.Wheel > 0) { @@ -472,14 +481,26 @@ namespace Vocaluxe.Menu.SongMenu if (_vidtex.index != -1 && _Video != -1) { - RectangleF bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H); - RectangleF rect = new RectangleF(0f, 0f, _vidtex.width, _vidtex.height); - CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); + if (_VidFull) + { + RectangleF bounds = new RectangleF(0, 0, CSettings.iRenderW, CSettings.iRenderH); + RectangleF rect = new RectangleF(0f, 0f, _vidtex.width, _vidtex.height); + CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); - CDraw.DrawTexture(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z), - _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false); - CDraw.DrawTextureReflection(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z), - _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight); + CDraw.DrawTexture(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.zNear), + _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false); + } + else + { + RectangleF bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H); + RectangleF rect = new RectangleF(0f, 0f, _vidtex.width, _vidtex.height); + CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); + + CDraw.DrawTexture(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z), + _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false); + CDraw.DrawTextureReflection(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z), + _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight); + } } @@ -793,6 +814,16 @@ namespace Vocaluxe.Menu.SongMenu return _SmallView; } + public override void ToggleVideoFull() + { + _VidFull = !_VidFull; + } + + public override bool IsVideoFull() + { + return _VidFull; + } + public override void LoadTextures() { base.LoadTextures(); diff --git a/Vocaluxe/Menu/SongMenu/ISongMenu.cs b/Vocaluxe/Menu/SongMenu/ISongMenu.cs index dfca5dee..18251b88 100644 --- a/Vocaluxe/Menu/SongMenu/ISongMenu.cs +++ b/Vocaluxe/Menu/SongMenu/ISongMenu.cs @@ -33,6 +33,9 @@ namespace Vocaluxe.Menu.SongMenu bool IsVisible(); void SetVisible(bool Visible); + void ToggleVideoFull(); + bool IsVideoFull(); + bool IsSmallView(); void SetSmallView(bool SmallView); diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index a8dbc336..bc1184d0 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -141,7 +141,9 @@ namespace Vocaluxe.Screens switch (KeyEvent.Key) { case Keys.Escape: - if (CSongs.Category < 0 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF) + if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) + SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); + else if (CSongs.Category < 0 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF) CGraphics.FadeTo(EScreens.ScreenMain); break; @@ -149,7 +151,11 @@ namespace Vocaluxe.Screens if (CSongs.NumVisibleSongs > 0) { if (SongMenus[htSongMenus(SongMenu)].GetSelectedSong() != -1 && !_SongOptionsActive) + { ToggleSongOptions(ESongOptionsView.Song); + if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) + SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); + } } break; @@ -174,6 +180,8 @@ namespace Vocaluxe.Screens break; case Keys.Space: + if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) + SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); ToggleSongOptions(ESongOptionsView.General); break; @@ -187,6 +195,8 @@ namespace Vocaluxe.Screens else { _SearchActive = true; + if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) + SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); } break; @@ -215,6 +225,8 @@ namespace Vocaluxe.Screens else { _SearchActive = true; + if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) + SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); } } break; @@ -234,13 +246,16 @@ namespace Vocaluxe.Screens //TODO: Delete that! case Keys.S: if (CSongs.NumVisibleSongs > 0) + { StartMedleySong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); + } break; + } } } - else + else if(!SongMenus[htSongMenus(SongMenu)].IsVideoFull()) { switch (KeyEvent.Key) { @@ -294,118 +309,134 @@ namespace Vocaluxe.Screens } } + if (KeyEvent.Key == Keys.V) + { + if (CSongs.Category != -1) + { + SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); + } + } + return true; } public override bool HandleMouse(MouseEvent MouseEvent) { - base.HandleMouse(MouseEvent); - - if (Playlists[htPlaylists(Playlist)].Visible && Playlists[htPlaylists(Playlist)].IsMouseOver(MouseEvent)) + if (!SongMenus[htSongMenus(SongMenu)].IsVideoFull()) { - _PlaylistActive = true; - Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); - } - else if (CHelper.IsInBounds(SongMenus[htSongMenus(SongMenu)].Rect, MouseEvent.X, MouseEvent.Y)) - { - _PlaylistActive = false; - Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); - } + base.HandleMouse(MouseEvent); - if (Playlists[htPlaylists(Playlist)].Visible && Playlists[htPlaylists(Playlist)].HandleMouse(MouseEvent)) - return true; - - if (!_SongOptionsActive) - { - - if ((MouseEvent.RB) && (CSongs.Category < 0)) + if (Playlists[htPlaylists(Playlist)].Visible && Playlists[htPlaylists(Playlist)].IsMouseOver(MouseEvent)) { - CGraphics.FadeTo(EScreens.ScreenMain); + _PlaylistActive = true; + Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; + SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); + } + else if (CHelper.IsInBounds(SongMenus[htSongMenus(SongMenu)].Rect, MouseEvent.X, MouseEvent.Y)) + { + _PlaylistActive = false; + Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; + SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); } - else if (MouseEvent.RB && _SongOptionsActive) - ToggleSongOptions(ESongOptionsView.None); - if (MouseEvent.MB && CSongs.Category != -1) + if (Playlists[htPlaylists(Playlist)].Visible && Playlists[htPlaylists(Playlist)].HandleMouse(MouseEvent)) + return true; + + if (!_SongOptionsActive) { - Console.WriteLine("MB pressed"); - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); - } - else if (MouseEvent.MB && CSongs.Category == -1) - { - Console.WriteLine("MB pressed"); - SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + + if ((MouseEvent.RB) && (CSongs.Category < 0)) + { + CGraphics.FadeTo(EScreens.ScreenMain); + } + else if (MouseEvent.RB && _SongOptionsActive) + ToggleSongOptions(ESongOptionsView.None); + + if (MouseEvent.MB && CSongs.Category != -1) + { + Console.WriteLine("MB pressed"); + SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); + } + else if (MouseEvent.MB && CSongs.Category == -1) + { + Console.WriteLine("MB pressed"); + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + } + else + SongMenus[htSongMenus(SongMenu)].HandleMouse(ref MouseEvent); + + if (MouseEvent.LB && CSongs.NumVisibleSongs > 0 && SongMenus[htSongMenus(SongMenu)].GetActualSelection() != -1) + { + if (SongMenus[htSongMenus(SongMenu)].GetSelectedSong() != -1 && !_SongOptionsActive) + { + ToggleSongOptions(ESongOptionsView.Song); + } + } + else if (MouseEvent.LB && IsMouseOver(MouseEvent)) + { + if (Buttons[htButtons(ButtonOpenOptions)].Selected) + { + ToggleSongOptions(ESongOptionsView.General); + } + } } + else - SongMenus[htSongMenus(SongMenu)].HandleMouse(ref MouseEvent); - - if (MouseEvent.LB && CSongs.NumVisibleSongs > 0 && SongMenus[htSongMenus(SongMenu)].GetActualSelection() != -1) { - if (SongMenus[htSongMenus(SongMenu)].GetSelectedSong() != -1 && !_SongOptionsActive) + if (MouseEvent.LB && IsMouseOver(MouseEvent)) { - ToggleSongOptions(ESongOptionsView.Song); + if (Buttons[htButtons(ButtonOptionsClose)].Selected) + { + ToggleSongOptions(ESongOptionsView.None); + } + else if (Buttons[htButtons(ButtonOptionsSing)].Selected) + { + ToggleSongOptions(ESongOptionsView.None); + StartSong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); + } + else if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected) + { + OpenAndAddPlaylistAction(); + } + else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) + { + if (CSongs.Category != -1) + { + SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); + } + } + else if (Buttons[htButtons(ButtonOptionsRandomCategory)].Selected) + { + if (CSongs.Category == -1) + { + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + } + } + else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) + { + ToggleSongOptions(ESongOptionsView.None); + StartRandomAllSongs(); + } + else if (Buttons[htButtons(ButtonOptionsSingAllVisible)].Selected) + { + ToggleSongOptions(ESongOptionsView.None); + StartRandomVisibleSongs(); + } + else if (Buttons[htButtons(ButtonOptionsOpenPlaylist)].Selected) + { + OpenPlaylistAction(); + } } - } - else if (MouseEvent.LB && IsMouseOver(MouseEvent)) - { - if (Buttons[htButtons(ButtonOpenOptions)].Selected) + if (MouseEvent.RB) { - ToggleSongOptions(ESongOptionsView.General); + ToggleSongOptions(ESongOptionsView.None); } } } - else { - if (MouseEvent.LB && IsMouseOver(MouseEvent)) - { - if (Buttons[htButtons(ButtonOptionsClose)].Selected) - { - ToggleSongOptions(ESongOptionsView.None); - } - else if (Buttons[htButtons(ButtonOptionsSing)].Selected) - { - ToggleSongOptions(ESongOptionsView.None); - StartSong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); - } - else if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected) - { - OpenAndAddPlaylistAction(); - } - else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) - { - if (CSongs.Category != -1) - { - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); - } - } - else if (Buttons[htButtons(ButtonOptionsRandomCategory)].Selected) - { - if (CSongs.Category == -1) - { - SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); - } - } - else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) - { - ToggleSongOptions(ESongOptionsView.None); - StartRandomAllSongs(); - } - else if (Buttons[htButtons(ButtonOptionsSingAllVisible)].Selected) - { - ToggleSongOptions(ESongOptionsView.None); - StartRandomVisibleSongs(); - } - else if (Buttons[htButtons(ButtonOptionsOpenPlaylist)].Selected) - { - OpenPlaylistAction(); - } - } - if (MouseEvent.RB) - { - ToggleSongOptions(ESongOptionsView.None); - } + if(MouseEvent.RB || MouseEvent.LB) + SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); } return true; From 23ebc543549b9a740474041e00fda67d434e583b Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Sun, 2 Dec 2012 14:34:32 +0100 Subject: [PATCH 03/11] Log error when song is not found from playlist. --- Vocaluxe/Lib/Playlist/CPlaylistFile.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs index 0bef3b65..e76d3de0 100644 --- a/Vocaluxe/Lib/Playlist/CPlaylistFile.cs +++ b/Vocaluxe/Lib/Playlist/CPlaylistFile.cs @@ -199,6 +199,10 @@ namespace Vocaluxe.Lib.Playlist song.GameMode = gm; Songs.Add(song); } + else + { + CLog.LogError("Can't find song '" + title + "' from '" + artist + "' in playlist file: " + PlaylistFile); + } } } else From 5d661b57f5b4bbb437d8460844aaedc4045397d2 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Sun, 2 Dec 2012 16:26:07 +0100 Subject: [PATCH 04/11] Update of bg-control-menu-theme. --- .../Screens/PopupScreenPlayerControl.xml | 94 +++++++++--------- 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 +- Output/Themes/Ambient/VideoIconBG.png | Bin 0 -> 6380 bytes Output/Themes/Ambient/VideoIconCO.png | Bin 0 -> 6193 bytes 7 files changed, 59 insertions(+), 51 deletions(-) create mode 100644 Output/Themes/Ambient/VideoIconBG.png create mode 100644 Output/Themes/Ambient/VideoIconCO.png diff --git a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml index c8330637..186d42b6 100644 --- a/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml +++ b/Output/Themes/Ambient/Screens/PopupScreenPlayerControl.xml @@ -10,10 +10,10 @@ 0 0,00 1181 - 50 + 42 - Visible + StaticColor @@ -22,11 +22,11 @@ CoverBackground - 50 - 0 + 55 + 2 0,00 - 50 - 50 + 38 + 38 Visible @@ -36,14 +36,14 @@ - 630 - 0 + 410 + 4 0,00 - 50 + 32 - 650 + 769 StaticColor @@ -70,11 +70,11 @@ PlayIcon - 200 - 5 + 146 + 8 0,00 - 40 - 40 + 28 + 28 ButtonColor @@ -119,11 +119,11 @@ PauseIcon - 200 - 5 + 145 + 8 0,00 - 40 - 40 + 28 + 28 ButtonColor @@ -168,11 +168,11 @@ PreviousIcon - 125 - 0 + 100 + 2 0,00 - 50 - 50 + 38 + 38 ButtonColor @@ -217,11 +217,11 @@ NextIcon - 265 - 0 + 185 + 2 0,00 - 50 - 50 + 38 + 38 ButtonColor @@ -266,11 +266,11 @@ RepeatIcon - 330 - 0 + 225 + 2 0,00 - 50 - 50 + 38 + 38 ButtonColor @@ -311,15 +311,15 @@ - VideoIcon + VideoIconCO - VideoIcon + VideoIconCO - 405 - 0 + 270 + 2 0,00 - 50 - 50 + 38 + 38 ButtonColor @@ -364,11 +364,11 @@ DuetIcon - 555 - 0 + 360 + 2 0,00 - 50 - 50 + 38 + 38 ButtonColor @@ -409,15 +409,15 @@ - VideoIcon + VideoIconBG - VideoIcon + VideoIconBG - 480 - 0 + 315 + 2 0,00 - 50 - 50 + 38 + 38 ButtonColor @@ -457,4 +457,4 @@ - \ No newline at end of file + diff --git a/Output/Themes/Ambient/Skin Blue.xml b/Output/Themes/Ambient/Skin Blue.xml index 88672814..fcbdf5f7 100644 --- a/Output/Themes/Ambient/Skin Blue.xml +++ b/Output/Themes/Ambient/Skin Blue.xml @@ -305,6 +305,8 @@ EnergyBeam.png DuetIcon.png VideoIcon.png + VideoIconCO.png + VideoIconBG.png Invisible.png PlayerSelector.png PreviousIcon.png @@ -319,4 +321,4 @@ [Blue]IntroMid.mp4 [Blue]IntroOut.mp4 - \ No newline at end of file + diff --git a/Output/Themes/Ambient/Skin Green.xml b/Output/Themes/Ambient/Skin Green.xml index fdea0b39..9d4bfb55 100644 --- a/Output/Themes/Ambient/Skin Green.xml +++ b/Output/Themes/Ambient/Skin Green.xml @@ -305,6 +305,8 @@ EnergyBeam.png DuetIcon.png VideoIcon.png + VideoIconCO.png + VideoIconBG.png Invisible.png PlayerSelector.png PreviousIcon.png @@ -319,4 +321,4 @@ [Green]IntroMid.mp4 [Green]IntroOut.mp4 - \ No newline at end of file + diff --git a/Output/Themes/Ambient/Skin Red.xml b/Output/Themes/Ambient/Skin Red.xml index d5c901d8..aabd3303 100644 --- a/Output/Themes/Ambient/Skin Red.xml +++ b/Output/Themes/Ambient/Skin Red.xml @@ -305,6 +305,8 @@ EnergyBeam.png DuetIcon.png VideoIcon.png + VideoIconCO.png + VideoIconBG.png Invisible.png PlayerSelector.png PreviousIcon.png @@ -319,4 +321,4 @@ [Red]IntroMid.mp4 [Red]IntroOut.mp4 - \ No newline at end of file + diff --git a/Output/Themes/Ambient/Skin Yellow.xml b/Output/Themes/Ambient/Skin Yellow.xml index 2b118ea7..7d63647d 100644 --- a/Output/Themes/Ambient/Skin Yellow.xml +++ b/Output/Themes/Ambient/Skin Yellow.xml @@ -305,6 +305,8 @@ EnergyBeam.png DuetIcon.png VideoIcon.png + VideoIconCO.png + VideoIconBG.png Invisible.png PlayerSelector.png PreviousIcon.png @@ -319,4 +321,4 @@ [Yellow]IntroMid.mp4 [Yellow]IntroOut.mp4 - \ No newline at end of file + diff --git a/Output/Themes/Ambient/VideoIconBG.png b/Output/Themes/Ambient/VideoIconBG.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0950fee3b82fd533c80e8caa11e3d405c50cc3 GIT binary patch literal 6380 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 Date: Sun, 2 Dec 2012 17:16:14 +0100 Subject: [PATCH 05/11] Update MedleyIcons. --- Output/Themes/Ambient/MedleyCalcIcon.png | Bin 6326 -> 6452 bytes Output/Themes/Ambient/MedleyTagIcon.png | Bin 10385 -> 6675 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Output/Themes/Ambient/MedleyCalcIcon.png b/Output/Themes/Ambient/MedleyCalcIcon.png index 7c1eb21e875911453279acea6fbd938431acf80e..25b73f10980976b5262f0493ffe13fd2ee4d0910 100644 GIT binary patch delta 5714 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 Eg1R`vH~;_u delta 5588 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 diff --git a/Output/Themes/Ambient/MedleyTagIcon.png b/Output/Themes/Ambient/MedleyTagIcon.png index 2cfe3f20dc4486de7cd6e11cc7737a4c149fb500..2bf40bdc6601b1cd95700143ee4fabc13d10043e 100644 GIT binary patch literal 6675 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�jZ1IhA-%Oawzl157mi5ADjUe4`VDU$hXPcc!UWSrQO!O@qlqY zf}z+FoMwvw_=hEOU|mH+$$1@^j1bq!paTM~ zB_BAktJH)f#k$@hzoG8yg=i%#v#YFoMz}CAp>gk%w|rhaQhH2C3>*Sqa;zPP`bwjx zd8977TxY)Ot_CJ|ZxRP67Tu*rDm<;f2?=&su!WejigvaurX!Cu8Z_#_lyCP1yjRgm zf%sRyH1xUM?cLwh`3}0pul0|tG}?T94Q&AUz6+iJEaw&{I8NHIyQwKjbP3(s;nk0q z-yMY)jv#-lhlhesgv1Yq7EeKcV>M&GsUIUswFUs7p+5IZ-cMq?4r=%CulLIHJ!z73T^+@O=f64BLq(@_XL8rjcL3s2Zd7-V{Ea zZGGBpFItN5J_l;kn^h0a9CQ5i9TMlB!193Vq6cMIO?9+Sy?Ol{^zUxP}h^6?|17SXD z{ONSv$*@2`l@8Kc%5Ba##=RV~Z!hcCft?x6VGK{00TH(V9u7 z=%4PP+H0HsO26fsvz~p1AB$i3cz4!7SfQ*>1&HqbXm(0i|~JMq^(V+`Q|y=Qap zGxZG4Sv>IZ9X`vhl$F!hup5KsU?bzH)y?@O-!QbX>U?|F^ili$!ZqzTe0wOr1329a zu5_n$*&=8RTX3!L2gPqgKntCAtH6Ihvf`u9n;U>dq3`@0&vHDS7$5_ zve45}uJ1DsI-`ziOBnc?DIL@V&Sxq$Sf8KP6w&=6`YEyjE|X;|VYPe76wd^qO)is$l~lU_`N0@#`^% z^@~#mbwxma!|Qmo{<}{1^hIk~NjB|voBT+5fvx*{g-3vk%#wp^g|ztk6(@z&ci7(9 zy7xO02dv$mU^|}lF~-vLtL|6EHS@wW-Uh)xvGLiBkFWtsM92phvgcN+lF>b`b+xNRz_9%ABMVgW0@Y81;u%?gq;77~RH8cea+b z{dQ0?tM^^h6x>DmsQdqtXvpfbO)ohde>uyw)IVaskd}c?lU( y^)2ysSHyhl&Vi5Meo~B-$d2BB=}qqNErC5CA_&Ja*87jGCP1rdBdZ@i!Tle^XH^*h literal 10385 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 T_mO{$7zD`6s7RMfng;wIAqgrI From 1d465f5f2ba4c8b60fedfa55a2e2e3d5236ad1b7 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Sun, 2 Dec 2012 20:25:45 +0100 Subject: [PATCH 06/11] Fix SelectSlide-Size in playlist. --- Output/Themes/Ambient/Screens/ScreenSong.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Output/Themes/Ambient/Screens/ScreenSong.xml b/Output/Themes/Ambient/Screens/ScreenSong.xml index 1ad7adb2..c4212e3c 100644 --- a/Output/Themes/Ambient/Screens/ScreenSong.xml +++ b/Output/Themes/Ambient/Screens/ScreenSong.xml @@ -1211,10 +1211,10 @@ SelectSlide - 0 + 52 28 -1,01 - 343 + 241 24 54 @@ -1223,7 +1223,7 @@ 20 20 - 235 + 271 30 -1,02 20 From e6a3281d7183b4552dc1cf9d3a9a8adbfa46f004 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Sun, 2 Dec 2012 22:15:22 +0100 Subject: [PATCH 07/11] Revert video-full-screen. --- Vocaluxe/Menu/SongMenu/CSongMenu.cs | 10 - Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs | 14 -- Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs | 45 +--- Vocaluxe/Menu/SongMenu/ISongMenu.cs | 3 - Vocaluxe/Screens/CScreenSong.cs | 210 ++++++++----------- 5 files changed, 98 insertions(+), 184 deletions(-) diff --git a/Vocaluxe/Menu/SongMenu/CSongMenu.cs b/Vocaluxe/Menu/SongMenu/CSongMenu.cs index 7b22e96d..e6a2824e 100644 --- a/Vocaluxe/Menu/SongMenu/CSongMenu.cs +++ b/Vocaluxe/Menu/SongMenu/CSongMenu.cs @@ -143,16 +143,6 @@ namespace Vocaluxe.Menu.SongMenu _SongMenu.SetSmallView(SmallView); } - public void ToggleVideoFull() - { - _SongMenu.ToggleVideoFull(); - } - - public bool IsVideoFull() - { - return _SongMenu.IsVideoFull(); - } - #endregion ISongMenu #region IMenuElement diff --git a/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs b/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs index 4f1a9e13..c2fc76ee 100644 --- a/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs +++ b/Vocaluxe/Menu/SongMenu/CSongMenuFramework.cs @@ -484,9 +484,6 @@ namespace Vocaluxe.Menu.SongMenu _timer.Stop(); _timer.Reset(); _SelectedInternal = _SelectedPending; - - if (IsVideoFull()) - ToggleVideoFull(); } public virtual void HandleInput(ref KeyEvent KeyEvent) @@ -556,17 +553,6 @@ namespace Vocaluxe.Menu.SongMenu return false; } - public virtual void ToggleVideoFull() - { - if (!_Initialized) - return; - } - - public virtual bool IsVideoFull() - { - return false; - } - public virtual void UnloadTextures() { } diff --git a/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs b/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs index 1c1393b8..eda76a62 100644 --- a/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs +++ b/Vocaluxe/Menu/SongMenu/CSongMenuTileBoard.cs @@ -41,7 +41,6 @@ namespace Vocaluxe.Menu.SongMenu private int _actualSelection = -1; private bool _SmallView = false; - private bool _VidFull = false; public override int GetActualSelection() { @@ -360,10 +359,6 @@ namespace Vocaluxe.Menu.SongMenu } else if (_PreviewSelected != -1 && MouseEvent.LB && CSongs.Category != -1) { - if (CHelper.IsInBounds(_VideoIcon.Rect, MouseEvent)) - { - ToggleVideoFull(); - } if (CHelper.IsInBounds(_CoverBig.Rect, MouseEvent) || CHelper.IsInBounds(_TextBG.Rect, MouseEvent)) { _Locked = _PreviewSelected; @@ -380,10 +375,6 @@ namespace Vocaluxe.Menu.SongMenu } } } - else if (MouseEvent.LB && CHelper.IsInBounds(_VideoIcon.Rect, MouseEvent)) - { - ToggleVideoFull(); - } if (MouseEvent.Wheel > 0) { @@ -481,26 +472,14 @@ namespace Vocaluxe.Menu.SongMenu if (_vidtex.index != -1 && _Video != -1) { - if (_VidFull) - { - RectangleF bounds = new RectangleF(0, 0, CSettings.iRenderW, CSettings.iRenderH); - RectangleF rect = new RectangleF(0f, 0f, _vidtex.width, _vidtex.height); - CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); + RectangleF bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H); + RectangleF rect = new RectangleF(0f, 0f, _vidtex.width, _vidtex.height); + CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); - CDraw.DrawTexture(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, CSettings.zNear), - _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false); - } - else - { - RectangleF bounds = new RectangleF(_CoverBig.Rect.X, _CoverBig.Rect.Y, _CoverBig.Rect.W, _CoverBig.Rect.H); - RectangleF rect = new RectangleF(0f, 0f, _vidtex.width, _vidtex.height); - CHelper.SetRect(bounds, ref rect, rect.Width / rect.Height, EAspect.Crop); - - CDraw.DrawTexture(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z), - _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false); - CDraw.DrawTextureReflection(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z), - _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight); - } + CDraw.DrawTexture(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z), + _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), false); + CDraw.DrawTextureReflection(_vidtex, new SRectF(rect.X, rect.Y, rect.Width, rect.Height, _CoverBig.Rect.Z), + _vidtex.color, new SRectF(bounds.X, bounds.Y, bounds.Width, bounds.Height, 0f), _CoverBig.ReflectionSpace, _CoverBig.ReflectionHeight); } @@ -814,16 +793,6 @@ namespace Vocaluxe.Menu.SongMenu return _SmallView; } - public override void ToggleVideoFull() - { - _VidFull = !_VidFull; - } - - public override bool IsVideoFull() - { - return _VidFull; - } - public override void LoadTextures() { base.LoadTextures(); diff --git a/Vocaluxe/Menu/SongMenu/ISongMenu.cs b/Vocaluxe/Menu/SongMenu/ISongMenu.cs index 18251b88..dfca5dee 100644 --- a/Vocaluxe/Menu/SongMenu/ISongMenu.cs +++ b/Vocaluxe/Menu/SongMenu/ISongMenu.cs @@ -33,9 +33,6 @@ namespace Vocaluxe.Menu.SongMenu bool IsVisible(); void SetVisible(bool Visible); - void ToggleVideoFull(); - bool IsVideoFull(); - bool IsSmallView(); void SetSmallView(bool SmallView); diff --git a/Vocaluxe/Screens/CScreenSong.cs b/Vocaluxe/Screens/CScreenSong.cs index 99640046..95216996 100644 --- a/Vocaluxe/Screens/CScreenSong.cs +++ b/Vocaluxe/Screens/CScreenSong.cs @@ -147,9 +147,7 @@ namespace Vocaluxe.Screens switch (KeyEvent.Key) { case Keys.Escape: - if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) - SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); - else if (CSongs.Category < 0 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF) + if (CSongs.Category < 0 || CConfig.Tabs == EOffOn.TR_CONFIG_OFF) CGraphics.FadeTo(EScreens.ScreenMain); break; @@ -157,11 +155,7 @@ namespace Vocaluxe.Screens if (CSongs.NumVisibleSongs > 0) { if (SongMenus[htSongMenus(SongMenu)].GetSelectedSong() != -1 && !_SongOptionsActive) - { ToggleSongOptions(ESongOptionsView.Song); - if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) - SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); - } } break; @@ -186,8 +180,6 @@ namespace Vocaluxe.Screens break; case Keys.Space: - if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) - SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); ToggleSongOptions(ESongOptionsView.General); break; @@ -201,8 +193,6 @@ namespace Vocaluxe.Screens else { _SearchActive = true; - if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) - SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); } break; @@ -231,8 +221,6 @@ namespace Vocaluxe.Screens else { _SearchActive = true; - if (SongMenus[htSongMenus(SongMenu)].IsVideoFull()) - SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); } } break; @@ -261,7 +249,7 @@ namespace Vocaluxe.Screens } } - else if(!SongMenus[htSongMenus(SongMenu)].IsVideoFull()) + else { switch (KeyEvent.Key) { @@ -315,134 +303,118 @@ namespace Vocaluxe.Screens } } - if (KeyEvent.Key == Keys.V) - { - if (CSongs.Category != -1) - { - SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); - } - } - return true; } public override bool HandleMouse(MouseEvent MouseEvent) { - if (!SongMenus[htSongMenus(SongMenu)].IsVideoFull()) + base.HandleMouse(MouseEvent); + + if (Playlists[htPlaylists(Playlist)].Visible && Playlists[htPlaylists(Playlist)].IsMouseOver(MouseEvent)) { - base.HandleMouse(MouseEvent); + _PlaylistActive = true; + Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; + SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); + } + else if (CHelper.IsInBounds(SongMenus[htSongMenus(SongMenu)].Rect, MouseEvent.X, MouseEvent.Y)) + { + _PlaylistActive = false; + Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; + SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); + } - if (Playlists[htPlaylists(Playlist)].Visible && Playlists[htPlaylists(Playlist)].IsMouseOver(MouseEvent)) + if (Playlists[htPlaylists(Playlist)].Visible && Playlists[htPlaylists(Playlist)].HandleMouse(MouseEvent)) + return true; + + if (!_SongOptionsActive) + { + + if ((MouseEvent.RB) && (CSongs.Category < 0)) { - _PlaylistActive = true; - Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); + CGraphics.FadeTo(EScreens.ScreenMain); } - else if (CHelper.IsInBounds(SongMenus[htSongMenus(SongMenu)].Rect, MouseEvent.X, MouseEvent.Y)) + else if (MouseEvent.RB && _SongOptionsActive) + ToggleSongOptions(ESongOptionsView.None); + + if (MouseEvent.MB && CSongs.Category != -1) { - _PlaylistActive = false; - Playlists[htPlaylists(Playlist)].Selected = _PlaylistActive; - SongMenus[htSongMenus(SongMenu)].SetActive(!_PlaylistActive); + Console.WriteLine("MB pressed"); + SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); } - - if (Playlists[htPlaylists(Playlist)].Visible && Playlists[htPlaylists(Playlist)].HandleMouse(MouseEvent)) - return true; - - if (!_SongOptionsActive) + else if (MouseEvent.MB && CSongs.Category == -1) { - - if ((MouseEvent.RB) && (CSongs.Category < 0)) - { - CGraphics.FadeTo(EScreens.ScreenMain); - } - else if (MouseEvent.RB && _SongOptionsActive) - ToggleSongOptions(ESongOptionsView.None); - - if (MouseEvent.MB && CSongs.Category != -1) - { - Console.WriteLine("MB pressed"); - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); - } - else if (MouseEvent.MB && CSongs.Category == -1) - { - Console.WriteLine("MB pressed"); - SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); - } - else - SongMenus[htSongMenus(SongMenu)].HandleMouse(ref MouseEvent); - - if (MouseEvent.LB && CSongs.NumVisibleSongs > 0 && SongMenus[htSongMenus(SongMenu)].GetActualSelection() != -1) - { - if (SongMenus[htSongMenus(SongMenu)].GetSelectedSong() != -1 && !_SongOptionsActive) - { - ToggleSongOptions(ESongOptionsView.Song); - } - } - else if (MouseEvent.LB && IsMouseOver(MouseEvent)) - { - if (Buttons[htButtons(ButtonOpenOptions)].Selected) - { - ToggleSongOptions(ESongOptionsView.General); - } - } + Console.WriteLine("MB pressed"); + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); } - else + SongMenus[htSongMenus(SongMenu)].HandleMouse(ref MouseEvent); + + if (MouseEvent.LB && CSongs.NumVisibleSongs > 0 && SongMenus[htSongMenus(SongMenu)].GetActualSelection() != -1) { - if (MouseEvent.LB && IsMouseOver(MouseEvent)) + if (SongMenus[htSongMenus(SongMenu)].GetSelectedSong() != -1 && !_SongOptionsActive) { - if (Buttons[htButtons(ButtonOptionsClose)].Selected) - { - ToggleSongOptions(ESongOptionsView.None); - } - else if (Buttons[htButtons(ButtonOptionsSing)].Selected) - { - ToggleSongOptions(ESongOptionsView.None); - StartSong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); - } - else if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected) - { - OpenAndAddPlaylistAction(); - } - else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) - { - if (CSongs.Category != -1) - { - SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); - } - } - else if (Buttons[htButtons(ButtonOptionsRandomCategory)].Selected) - { - if (CSongs.Category == -1) - { - SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); - } - } - else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) - { - ToggleSongOptions(ESongOptionsView.None); - StartRandomAllSongs(); - } - else if (Buttons[htButtons(ButtonOptionsSingAllVisible)].Selected) - { - ToggleSongOptions(ESongOptionsView.None); - StartRandomVisibleSongs(); - } - else if (Buttons[htButtons(ButtonOptionsOpenPlaylist)].Selected) - { - OpenPlaylistAction(); - } + ToggleSongOptions(ESongOptionsView.Song); } - if (MouseEvent.RB) + } + else if (MouseEvent.LB && IsMouseOver(MouseEvent)) + { + if (Buttons[htButtons(ButtonOpenOptions)].Selected) { - ToggleSongOptions(ESongOptionsView.None); + ToggleSongOptions(ESongOptionsView.General); } } } + else { - if(MouseEvent.RB || MouseEvent.LB) - SongMenus[htSongMenus(SongMenu)].ToggleVideoFull(); + if (MouseEvent.LB && IsMouseOver(MouseEvent)) + { + if (Buttons[htButtons(ButtonOptionsClose)].Selected) + { + ToggleSongOptions(ESongOptionsView.None); + } + else if (Buttons[htButtons(ButtonOptionsSing)].Selected) + { + ToggleSongOptions(ESongOptionsView.None); + StartSong(SongMenus[htSongMenus(SongMenu)].GetSelectedSong()); + } + else if (Buttons[htButtons(ButtonOptionsPlaylist)].Selected) + { + OpenAndAddPlaylistAction(); + } + else if (Buttons[htButtons(ButtonOptionsRandom)].Selected) + { + if (CSongs.Category != -1) + { + SongMenus[htSongMenus(SongMenu)].SetSelectedSong(CSongs.GetRandomSong()); + } + } + else if (Buttons[htButtons(ButtonOptionsRandomCategory)].Selected) + { + if (CSongs.Category == -1) + { + SongMenus[htSongMenus(SongMenu)].SetSelectedCategory(CSongs.GetRandomCategory()); + } + } + else if (Buttons[htButtons(ButtonOptionsSingAll)].Selected) + { + ToggleSongOptions(ESongOptionsView.None); + StartRandomAllSongs(); + } + else if (Buttons[htButtons(ButtonOptionsSingAllVisible)].Selected) + { + ToggleSongOptions(ESongOptionsView.None); + StartRandomVisibleSongs(); + } + else if (Buttons[htButtons(ButtonOptionsOpenPlaylist)].Selected) + { + OpenPlaylistAction(); + } + } + if (MouseEvent.RB) + { + ToggleSongOptions(ESongOptionsView.None); + } } return true; From dd427e9c4761952b3749e8a20477790881ccee62 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Sun, 2 Dec 2012 22:44:08 +0100 Subject: [PATCH 08/11] Use filename as title for bg-music from bg-music-folder. --- ...cense.txt => DJad - Walking Alone - License.txt} | 0 ...ackground track.mp3 => DJad - Walking Alone.mp3} | Bin Vocaluxe/Base/CBackgroundMusic.cs | 9 ++++++--- 3 files changed, 6 insertions(+), 3 deletions(-) rename Output/BackgroundMusic/{background track license.txt => DJad - Walking Alone - License.txt} (100%) rename Output/BackgroundMusic/{background track.mp3 => DJad - Walking Alone.mp3} (100%) diff --git a/Output/BackgroundMusic/background track license.txt b/Output/BackgroundMusic/DJad - Walking Alone - License.txt similarity index 100% rename from Output/BackgroundMusic/background track license.txt rename to Output/BackgroundMusic/DJad - Walking Alone - License.txt diff --git a/Output/BackgroundMusic/background track.mp3 b/Output/BackgroundMusic/DJad - Walking Alone.mp3 similarity index 100% rename from Output/BackgroundMusic/background track.mp3 rename to Output/BackgroundMusic/DJad - Walking Alone.mp3 diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 17657e6a..44b39f27 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -120,7 +120,10 @@ namespace Vocaluxe.Base { get { - return _CurrentPlaylistElement.Artist + " - " + _CurrentPlaylistElement.Title; + if (_CurrentPlaylistElement.Artist != "" && _CurrentPlaylistElement.Title != "") + return _CurrentPlaylistElement.Artist + " - " + _CurrentPlaylistElement.Title; + else + return Path.GetFileNameWithoutExtension(_CurrentPlaylistElement.MusicFilePath); } } @@ -519,7 +522,7 @@ class PlaylistElement if (_Song != null) return _Song.Title; - return "Unknown"; + return ""; } } @@ -530,7 +533,7 @@ class PlaylistElement if (_Song != null) return _Song.Artist; - return "Unknown"; + return ""; } } From 2340011ba3011b7516294df5722936ef8ff34058 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Mon, 3 Dec 2012 08:43:19 +0100 Subject: [PATCH 09/11] BG-Music-Repeat-Function works now as it should. --- Vocaluxe/Base/CBackgroundMusic.cs | 22 ++++++++++++++++++- Vocaluxe/Screens/CPopupScreenPlayerControl.cs | 5 +++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 44b39f27..506c8c52 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -34,6 +34,7 @@ namespace Vocaluxe.Base private static bool _Playing; private static bool _Disabled; private static bool _CanSing; + private static bool _RepeatSong; public static bool VideoEnabled { @@ -84,6 +85,18 @@ namespace Vocaluxe.Base } } + public static bool RepeatSong + { + get + { + return _RepeatSong; + } + set + { + _RepeatSong = value; + } + } + public static int SongID { get @@ -228,7 +241,14 @@ namespace Vocaluxe.Base bool finished = CSound.IsFinished(_CurrentMusicStream); if (_Playing && (timeToPlay <= CSettings.BackgroundMusicFadeTime || finished)) - Next(); + if (_RepeatSong) + { + CSound.SetPosition(_CurrentMusicStream, 0); + if (_VideoEnabled && _Video != -1) + CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); + } + else + Next(); } } diff --git a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs index 8e7d8ad9..f1b206b2 100644 --- a/Vocaluxe/Screens/CPopupScreenPlayerControl.cs +++ b/Vocaluxe/Screens/CPopupScreenPlayerControl.cs @@ -134,7 +134,7 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonPause)].Selected) CBackgroundMusic.Pause(); if (Buttons[htButtons(ButtonRepeat)].Selected) - CBackgroundMusic.Repeat(); + CBackgroundMusic.RepeatSong = !CBackgroundMusic.RepeatSong; if (Buttons[htButtons(ButtonShowVideo)].Selected) VideoPreview = !VideoPreview; if (Buttons[htButtons(ButtonSing)].Selected) @@ -162,7 +162,7 @@ namespace Vocaluxe.Screens if (Buttons[htButtons(ButtonPause)].Selected) CBackgroundMusic.Pause(); if (Buttons[htButtons(ButtonRepeat)].Selected) - CBackgroundMusic.Repeat(); + CBackgroundMusic.RepeatSong = !CBackgroundMusic.RepeatSong; if (Buttons[htButtons(ButtonShowVideo)].Selected) VideoPreview = !VideoPreview; if (Buttons[htButtons(ButtonSing)].Selected) @@ -187,6 +187,7 @@ namespace Vocaluxe.Screens Statics[htStatics(StaticCover)].Visible = !_VideoPreview || !CBackgroundMusic.SongHasVideo; Buttons[htButtons(ButtonToBackgroundVideo)].Pressed = VideoBackground; Buttons[htButtons(ButtonShowVideo)].Pressed = _VideoPreview; + Buttons[htButtons(ButtonRepeat)].Pressed = CBackgroundMusic.RepeatSong; Buttons[htButtons(ButtonSing)].Visible = CBackgroundMusic.CanSing; return true; } From 837ee463b550f614b34373cc41d4a1efe52a2194 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Mon, 3 Dec 2012 09:16:13 +0100 Subject: [PATCH 10/11] Previous-function of bg-music is now similar to other audio-player. Clicking on prev-button during song: Play song from start, Clicking on prev-button during first 1.5 sec, go to prev song. --- Vocaluxe/Base/CBackgroundMusic.cs | 37 ++++++++++++++++++------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/Vocaluxe/Base/CBackgroundMusic.cs b/Vocaluxe/Base/CBackgroundMusic.cs index 506c8c52..ad10b81a 100644 --- a/Vocaluxe/Base/CBackgroundMusic.cs +++ b/Vocaluxe/Base/CBackgroundMusic.cs @@ -294,25 +294,30 @@ namespace Vocaluxe.Base { if (_PreviousFileNames.Count > 0 || _PreviousMusicIndex >= 0) { - Stop(); + float pos = CSound.GetPosition(_CurrentMusicStream); + if (CSound.GetPosition(_CurrentMusicStream) >= 1.5f) + { + CSound.SetPosition(_CurrentMusicStream, 0); + if (_VideoEnabled && _Video != -1) + CVideo.VdSkip(_Video, 0f, _CurrentPlaylistElement.VideoGap); + } + else + { + Stop(); + _PreviousMusicIndex--; + if (_PreviousMusicIndex < 0) + _PreviousMusicIndex = 0; //No previous songs left, so play the first - _PreviousMusicIndex--; - if (_PreviousMusicIndex < 0) - _PreviousMusicIndex = 0; //No previous songs left, so play the first + _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; - _CurrentPlaylistElement = _PreviousFileNames[_PreviousMusicIndex]; - - _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); - if (_VideoEnabled) - LoadVideo(); - CSound.SetStreamVolume(_CurrentMusicStream, 0f); - Play(); + _CurrentMusicStream = CSound.Load(_CurrentPlaylistElement.MusicFilePath); + if (_VideoEnabled) + LoadVideo(); + CSound.SetStreamVolume(_CurrentMusicStream, 0f); + Play(); + } } - } - - public static void Repeat() - { - if (_AllFileNames.Count > 0 && _CurrentMusicStream != -1) + else if (_CurrentMusicStream != -1) { CSound.SetPosition(_CurrentMusicStream, 0); if (_VideoEnabled && _Video != -1) From 2f5dae42b62c31f78c969c26b8d316d99fea3ef8 Mon Sep 17 00:00:00 2001 From: Florian Kuepper Date: Mon, 3 Dec 2012 09:17:41 +0100 Subject: [PATCH 11/11] Update Repeat-Icon. --- Output/Themes/Ambient/RepeatIcon.png | Bin 15003 -> 15305 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Output/Themes/Ambient/RepeatIcon.png b/Output/Themes/Ambient/RepeatIcon.png index 6675a41af65b46505dda3aafb6fd1b9312a0b294..ecf82df18d9bf36a9cfe5b7f9749e1c44e78c558 100644 GIT binary patch literal 15305 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