using System.Collections.Generic;
using System.Runtime.CompilerServices;
using Sprite = Glass.SpriteMaterial;
namespace Glass.Testbed
{
///
/// The four cells of ResizeCursors.png, laid out as a 2x2 grid with no border between cells.
///
[SpriteSheet(spriteSizeX: 16, spriteSizeY: 16, borderSize: 0,
"Glass.Testbed.SampleMaterials.ResizeCursors.png")]
public sealed class ResizeCursorMaterials
{
public static readonly Sprite Horizontal = CreateIcon(0, 0);
public static readonly Sprite Vertical = CreateIcon(1, 0);
public static readonly Sprite DiagonalNwSe = CreateIcon(0, 1);
public static readonly Sprite DiagonalNeSw = CreateIcon(1, 1);
///
/// A cursor for every ResizeZone, for a ResizablePanel's ResizeCursors.
///
public static readonly IReadOnlyDictionary ByZone = BuildByZone();
private static Sprite CreateIcon(int x, int y, [CallerMemberName] string debugName = "")
{
return MaterialLibrary.CreateSprite(new Point(x, y), debugName);
}
private static IReadOnlyDictionary BuildByZone()
{
// One cursor per arrow, shared by the two zones each double-headed arrow serves.
var center = new Point(8, 8);
Cursor horizontal = new SpriteCursor(Horizontal, center);
Cursor vertical = new SpriteCursor(Vertical, center);
Cursor diagonalNwSe = new SpriteCursor(DiagonalNwSe, center);
Cursor diagonalNeSw = new SpriteCursor(DiagonalNeSw, center);
return new Dictionary
{
[ResizeZone.E] = horizontal,
[ResizeZone.W] = horizontal,
[ResizeZone.N] = vertical,
[ResizeZone.S] = vertical,
[ResizeZone.NW] = diagonalNwSe,
[ResizeZone.SE] = diagonalNwSe,
[ResizeZone.NE] = diagonalNeSw,
[ResizeZone.SW] = diagonalNeSw,
};
}
}
}