using Microsoft.AspNetCore.Components;
using Sandbox.UI.Layout;
namespace Sandbox.UI;
///
/// A virtualized, scrollable grid panel that only creates item panels when visible.
///
public sealed class VirtualGrid : BaseVirtualPanel
{
///
/// Grid layout used to position/measure items. (Swappable later if needed.)
///
internal GridLayout Layout { get; } = new();
///
/// Fixed width of each item. If < 0, layout may stretch to fill width.
///
[Parameter]
public Vector2 ItemSize
{
get => new( Layout.ItemWidth, Layout.ItemHeight );
set
{
Layout.ItemWidth = value.x;
Layout.ItemHeight = value.y;
}
}
protected override void UpdateLayoutSpacing( Vector2 spacing )
{
Layout.Spacing = spacing;
}
protected override bool UpdateLayout()
{
return Layout.Update( Box, ScaleFromScreen, ScrollOffset.y * ScaleFromScreen );
}
protected override void GetVisibleRange( out int first, out int pastEnd )
{
Layout.GetVisibleRange( out first, out pastEnd );
}
protected override void PositionPanel( int index, Panel panel )
{
Layout.Position( index, panel );
}
protected override float GetTotalHeight( int itemCount )
{
return Layout.GetHeight( itemCount );
}
}