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, }; } } }