Small improvement to List View (#873)
* Improve ListView * Improve ListView
This commit is contained in:
1 parent
e3064c63a1
commit
718f284c82
1 file changed
+41
-18
@@ -30,6 +30,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
|||||||
private SRectF _ScrollRect;
|
private SRectF _ScrollRect;
|
||||||
private List<CStatic> _Tiles;
|
private List<CStatic> _Tiles;
|
||||||
private List<CText> _Texts;
|
private List<CText> _Texts;
|
||||||
|
private List<CStatic> _RowBackgrounds;
|
||||||
private readonly CStatic _CoverBig;
|
private readonly CStatic _CoverBig;
|
||||||
private readonly CStatic _TextBG;
|
private readonly CStatic _TextBG;
|
||||||
private readonly CStatic _DuetIcon;
|
private readonly CStatic _DuetIcon;
|
||||||
@@ -55,7 +56,6 @@ namespace VocaluxeLib.Menu.SongMenu
|
|||||||
private int _TileH;
|
private int _TileH;
|
||||||
|
|
||||||
private int _ListLength;
|
private int _ListLength;
|
||||||
private float _ListTextWidth;
|
|
||||||
|
|
||||||
// Offset is the song or categoryNr of the tile in the left upper corner
|
// Offset is the song or categoryNr of the tile in the left upper corner
|
||||||
private int _Offset;
|
private int _Offset;
|
||||||
@@ -170,33 +170,42 @@ namespace VocaluxeLib.Menu.SongMenu
|
|||||||
{
|
{
|
||||||
MaxRect = SmallView ? _Theme.SongMenuList.TileRectSmall : _Theme.SongMenuList.TileRect;
|
MaxRect = SmallView ? _Theme.SongMenuList.TileRectSmall : _Theme.SongMenuList.TileRect;
|
||||||
|
|
||||||
_ListTextWidth = MaxRect.W - _ListTextWidth;
|
|
||||||
|
|
||||||
_TileW = (int)((MaxRect.H - _SpaceH * (_ListLength - 1)) / _ListLength);
|
_TileW = (int)((MaxRect.H - _SpaceH * (_ListLength - 1)) / _ListLength);
|
||||||
_TileH = _TileW;
|
_TileH = _TileW;
|
||||||
|
|
||||||
|
float _ListTextWidth = MaxRect.W - (_TileW + _SpaceW);
|
||||||
|
|
||||||
_CoverBGTexture = CBase.Themes.GetSkinTexture(_Theme.CoverBackground, _PartyModeID);
|
_CoverBGTexture = CBase.Themes.GetSkinTexture(_Theme.CoverBackground, _PartyModeID);
|
||||||
_CoverBigBGTexture = CBase.Themes.GetSkinTexture(_Theme.CoverBigBackground, _PartyModeID);
|
_CoverBigBGTexture = CBase.Themes.GetSkinTexture(_Theme.CoverBigBackground, _PartyModeID);
|
||||||
|
|
||||||
//Create cover tiles
|
//Create cover tiles
|
||||||
|
_RowBackgrounds = new List<CStatic>();
|
||||||
_Tiles = new List<CStatic>();
|
_Tiles = new List<CStatic>();
|
||||||
_Texts = new List<CText>();
|
_Texts = new List<CText>();
|
||||||
|
|
||||||
for (int i = 0; i < _ListLength; i++)
|
for (int i = 0; i < _ListLength; i++)
|
||||||
{
|
{
|
||||||
//Create Cover
|
//Create Cover
|
||||||
var rect = new SRectF(Rect.X, Rect.Y + i * (_TileH + _SpaceH), _TileW, _TileH, Rect.Z);
|
float y = Rect.Y + i * (_TileH + _SpaceH);
|
||||||
|
|
||||||
|
float bgHeight = _TileH + 8f;
|
||||||
|
var rowRect = new SRectF(Rect.X, y - 4f, Rect.W, bgHeight, Rect.Z + 0.05f);
|
||||||
|
var rowBackground = new CStatic(_PartyModeID, _CoverBGTexture, _Color, rowRect);
|
||||||
|
rowBackground.Color = new SColorF(1f, 1f, 1f, 0f);
|
||||||
|
_RowBackgrounds.Add(rowBackground);
|
||||||
|
|
||||||
|
var rect = new SRectF(Rect.X, y, _TileW, _TileH, Rect.Z);
|
||||||
var tile = new CStatic(_PartyModeID, _CoverBGTexture, _Color, rect);
|
var tile = new CStatic(_PartyModeID, _CoverBGTexture, _Color, rect);
|
||||||
_Tiles.Add(tile);
|
_Tiles.Add(tile);
|
||||||
|
|
||||||
//Create text
|
//Create text
|
||||||
var textRect = new SRectF(MaxRect.X + (_TileW + _SpaceW), Rect.Y + i * (_TileH + _SpaceH), _ListTextWidth, _TileH, Rect.Z);
|
var textRect = new SRectF(MaxRect.X + (_TileW + _SpaceW), y, _ListTextWidth, _TileH, Rect.Z);
|
||||||
CText text = new CText(textRect.X, textRect.Y, textRect.Z,
|
|
||||||
textRect.H, textRect.W, EAlignment.Left, EStyle.Normal,
|
|
||||||
"Normal", _Artist.Color, "");
|
|
||||||
text.MaxRect = new SRectF(text.MaxRect.X, text.MaxRect.Y, MaxRect.W + MaxRect.X - text.Rect.X - 5f, text.MaxRect.H, text.MaxRect.Z);
|
|
||||||
text.ResizeAlign = EHAlignment.Center;
|
|
||||||
|
|
||||||
|
CText text = new CText(textRect.X, textRect.Y, textRect.Z, textRect.H, textRect.W, EAlignment.Left, EStyle.Normal, "Normal", _Artist.Color, "");
|
||||||
|
|
||||||
|
text.MaxRect = new SRectF(text.MaxRect.X, text.MaxRect.Y, MaxRect.W + MaxRect.X - text.Rect.X - 5f, text.MaxRect.H, text.MaxRect.Z);
|
||||||
|
|
||||||
|
text.ResizeAlign = EHAlignment.Center;
|
||||||
_Texts.Add(text);
|
_Texts.Add(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,14 +213,24 @@ namespace VocaluxeLib.Menu.SongMenu
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void _UpdateTileSelection()
|
private void _UpdateTileSelection()
|
||||||
{
|
{
|
||||||
foreach (CStatic tile in _Tiles)
|
for (int i = 0; i < _Tiles.Count; i++)
|
||||||
tile.Selected = false;
|
{
|
||||||
|
_Tiles[i].Selected = false;
|
||||||
|
|
||||||
int tileNr = _SelectionNr - _Offset;
|
if (i < _RowBackgrounds.Count)
|
||||||
if (tileNr >= 0 && tileNr < _Tiles.Count)
|
_RowBackgrounds[i].Color = new SColorF(1f, 1f, 1f, 0f);
|
||||||
_Tiles[tileNr].Selected = true;
|
}
|
||||||
}
|
|
||||||
|
int tileNr = _SelectionNr - _Offset;
|
||||||
|
if (tileNr >= 0 && tileNr < _Tiles.Count)
|
||||||
|
{
|
||||||
|
_Tiles[tileNr].Selected = true;
|
||||||
|
|
||||||
|
if (tileNr < _RowBackgrounds.Count)
|
||||||
|
_RowBackgrounds[tileNr].Color = new SColorF(1f, 1f, 1f, 0.25f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override void Update(SScreenSongOptions songOptions)
|
public override void Update(SScreenSongOptions songOptions)
|
||||||
{
|
{
|
||||||
@@ -539,6 +558,8 @@ namespace VocaluxeLib.Menu.SongMenu
|
|||||||
|
|
||||||
public override void Draw()
|
public override void Draw()
|
||||||
{
|
{
|
||||||
|
foreach (CStatic rowBackground in _RowBackgrounds)
|
||||||
|
rowBackground.Draw(EAspect.Stretch);
|
||||||
foreach (CStatic tile in _Tiles)
|
foreach (CStatic tile in _Tiles)
|
||||||
{
|
{
|
||||||
if (tile.Selected)
|
if (tile.Selected)
|
||||||
@@ -555,7 +576,7 @@ namespace VocaluxeLib.Menu.SongMenu
|
|||||||
foreach (CText text in _Texts)
|
foreach (CText text in _Texts)
|
||||||
{
|
{
|
||||||
if (i < _Tiles.Count && _Tiles[i].Selected)
|
if (i < _Tiles.Count && _Tiles[i].Selected)
|
||||||
text.Font.Style = EStyle.BoldItalic;
|
text.Font.Style = EStyle.Bold;
|
||||||
else if (i < _Tiles.Count)
|
else if (i < _Tiles.Count)
|
||||||
text.Font.Style = EStyle.Normal;
|
text.Font.Style = EStyle.Normal;
|
||||||
else
|
else
|
||||||
@@ -708,11 +729,13 @@ namespace VocaluxeLib.Menu.SongMenu
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
_Tiles[i].Texture = _CoverBGTexture;
|
||||||
_Tiles[i].Color.A = 0;
|
_Tiles[i].Color.A = 0;
|
||||||
_Texts[i].Text = "";
|
_Texts[i].Text = "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_Offset = offset;
|
_Offset = offset;
|
||||||
|
_UpdateTileSelection();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void LoadSkin()
|
public override void LoadSkin()
|
||||||
|
|||||||
Reference in new issue
Block a user