diff --git a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs index 2c85058a..89a43849 100644 --- a/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs +++ b/VocaluxeLib/Menu/SongMenu/CSongMenuList.cs @@ -592,13 +592,28 @@ namespace VocaluxeLib.Menu.SongMenu private void _UpdateList(bool force = false) { + bool isInCategory = CBase.Songs.IsInCategory(); + int itemCount = isInCategory ? CBase.Songs.GetNumSongsVisible() : CBase.Songs.GetNumCategories(); + int halfListLength = _ListLength / 2; int offset; + if (_SelectionNr < _Offset && _SelectionNr >= 0) - offset = _SelectionNr; + { + if (_SelectionNr - halfListLength >= 0) + offset = _SelectionNr - halfListLength; + else + offset = 0; + } else if (_SelectionNr >= _Offset + _ListLength) - offset = _SelectionNr - _ListLength + 1; + { + if (_SelectionNr + halfListLength > itemCount) + offset = itemCount - _ListLength; + else + offset = _SelectionNr - halfListLength; + } else offset = _Offset; + _UpdateList(offset, force); } @@ -653,4 +668,4 @@ namespace VocaluxeLib.Menu.SongMenu base.LoadSkin(); } } -} \ No newline at end of file +}