Compare commits
6 Commits
standard-r
...
255dea138b
| Author | SHA1 | Date | |
|---|---|---|---|
| 255dea138b | |||
| 9fa6b45cea | |||
| 5871e8966b | |||
| ed9f17e6c4 | |||
| 4362e88eab | |||
| 58efd449a8 |
@@ -90,14 +90,14 @@ public class TestGame : Game
|
|||||||
|
|
||||||
protected override void Render(double deltaTime)
|
protected override void Render(double deltaTime)
|
||||||
{
|
{
|
||||||
Renderer.ClearBackground(Color.CadetBlue);
|
Renderer.ClearBackground(Color.Black);
|
||||||
// foreach (var emitter in _particleSystem!.Emitters)
|
foreach (var emitter in _particleSystem!.Emitters)
|
||||||
// {
|
{
|
||||||
// DrawEmitter(emitter);
|
DrawEmitter(emitter);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// Renderer.ResetTransform();
|
Renderer.ResetTransform();
|
||||||
// _uiSystem.Render(Renderer);
|
_uiSystem.Render(Renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawEmitter(ParticleEmitter emitter)
|
private void DrawEmitter(ParticleEmitter emitter)
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ namespace Voile
|
|||||||
|
|
||||||
if (Renderer is null)
|
if (Renderer is null)
|
||||||
{
|
{
|
||||||
Renderer = new StandardRenderSystem();
|
Renderer = new RaylibRenderSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Input is null)
|
if (Input is null)
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ namespace Voile.Rendering
|
|||||||
Raylib.InitWindow((int)_windowSize.X, (int)_windowSize.Y, windowSettings.Title);
|
Raylib.InitWindow((int)_windowSize.X, (int)_windowSize.Y, windowSettings.Title);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Raylib.SetWindowState(windowFlags);
|
Raylib.SetWindowState(windowFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ namespace Voile.Rendering
|
|||||||
{
|
{
|
||||||
public string Title;
|
public string Title;
|
||||||
public Vector2 Size = new Vector2(1280, 720);
|
public Vector2 Size = new Vector2(1280, 720);
|
||||||
public bool Resizable { get; set; }
|
public bool Resizable { get; set; } = true;
|
||||||
|
|
||||||
public WindowSettings(string title, Vector2 size)
|
public WindowSettings(string title, Vector2 size)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -363,7 +363,7 @@ namespace Voile.Rendering
|
|||||||
|
|
||||||
private Silk.NET.WebGPU.Color VoileColorToWebGPUColor(Color color)
|
private Silk.NET.WebGPU.Color VoileColorToWebGPUColor(Color color)
|
||||||
{
|
{
|
||||||
return new Silk.NET.WebGPU.Color((double)color.R / 255, (double)color.G / 255, (double)color.B / 255, (double)color.A / 255);
|
return new Silk.NET.WebGPU.Color(color.R, color.G, color.B, color.A);
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe RenderPassColorAttachment CreateClearColorAttachment(TextureView* view, Color clearColor)
|
private unsafe RenderPassColorAttachment CreateClearColorAttachment(TextureView* view, Color clearColor)
|
||||||
|
|||||||
@@ -13,11 +13,35 @@ namespace Voile
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly Guid Guid = Guid.Empty;
|
public readonly Guid Guid = Guid.Empty;
|
||||||
public bool HasValue => Guid != Guid.Empty;
|
public bool HasValue => Guid != Guid.Empty;
|
||||||
/// <summary>
|
|
||||||
/// Retrieve a reference.
|
|
||||||
/// </summary>
|
|
||||||
public T Value => ResourceManager.GetResource<T>(Guid);
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves a <see cref="Resource"/>.<br />
|
||||||
|
/// This will throw an <see cref="InvalidOperationException"/> if the resource wasn't loaded or is invalid. <br />
|
||||||
|
/// You can check if resource was loaded with <see cref="HasValue"/>, or consider using <see cref="TryGetValue"/>.
|
||||||
|
/// </summary>
|
||||||
|
public T Value => ResourceManager.GetResource<T>(Guid)
|
||||||
|
?? throw new InvalidOperationException($"Resource with GUID {Guid} is not loaded or invalid.");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retrieves a resource or <c>null</c> if the resource wasn't loaded or is invalid.
|
||||||
|
/// </summary>
|
||||||
|
public T? ValueOrNull => ResourceManager.GetResource<T>(Guid);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tries to retrieve a <see cref="Resource"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="value">An instance of a retrieved <see cref="Resource"/>.</param>
|
||||||
|
/// <returns><c>true</c> if the resource was successfully retrieved, otherwise <c>false</c>.</returns>
|
||||||
|
public bool TryGetValue(out T? value)
|
||||||
|
{
|
||||||
|
value = ResourceManager.GetResource<T>(Guid);
|
||||||
|
return value != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create an empty <see cref="ResourceRef"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
public static ResourceRef<T> Empty()
|
public static ResourceRef<T> Empty()
|
||||||
{
|
{
|
||||||
return new ResourceRef<T>(Guid.Empty);
|
return new ResourceRef<T>(Guid.Empty);
|
||||||
|
|||||||
@@ -2,23 +2,76 @@ using System.Numerics;
|
|||||||
|
|
||||||
namespace Voile.UI;
|
namespace Voile.UI;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Specifies predefined anchor points used to position UI elements relative to their parent container.
|
||||||
|
/// </summary>
|
||||||
public enum Anchor
|
public enum Anchor
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Anchors the element to the top-left corner of the parent.
|
||||||
|
/// </summary>
|
||||||
TopLeft,
|
TopLeft,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Anchors the element to the top-center of the parent.
|
||||||
|
/// </summary>
|
||||||
TopCenter,
|
TopCenter,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Anchors the element to the top-right corner of the parent.
|
||||||
|
/// </summary>
|
||||||
TopRight,
|
TopRight,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Anchors the element to the center-left edge of the parent.
|
||||||
|
/// </summary>
|
||||||
CenterLeft,
|
CenterLeft,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Anchors the element to the exact center of the parent.
|
||||||
|
/// </summary>
|
||||||
Center,
|
Center,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Anchors the element to the center-right edge of the parent.
|
||||||
|
/// </summary>
|
||||||
CenterRight,
|
CenterRight,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Anchors the element to the bottom-left corner of the parent.
|
||||||
|
/// </summary>
|
||||||
BottomLeft,
|
BottomLeft,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Anchors the element to the bottom-center of the parent.
|
||||||
|
/// </summary>
|
||||||
BottomCenter,
|
BottomCenter,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Anchors the element to the bottom-right corner of the parent.
|
||||||
|
/// </summary>
|
||||||
BottomRight,
|
BottomRight,
|
||||||
Fill
|
Fill
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Provides extension methods for calculating anchored positions of UI elements.
|
||||||
|
/// </summary>
|
||||||
public static class AnchorExtensions
|
public static class AnchorExtensions
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Calculates the offset position for an element based on the specified <see cref="Anchor"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="anchor">The anchor mode to use.</param>
|
||||||
|
/// <param name="parentPosition">The absolute position of the parent container (top-left corner).</param>
|
||||||
|
/// <param name="parentRect">The bounding rectangle of the parent container.</param>
|
||||||
|
/// <param name="elementRect">The size of the element being anchored.</param>
|
||||||
|
/// <returns>
|
||||||
|
/// A <see cref="Vector2"/> representing the local offset position where the element should be placed inside the parent.
|
||||||
|
/// </returns>
|
||||||
|
/// <remarks>
|
||||||
|
/// The result is the relative offset from the parent's origin, not a global position.
|
||||||
|
/// </remarks>
|
||||||
public static Vector2 Calculate(this Anchor anchor, Vector2 parentPosition, Rect parentRect, Rect elementRect)
|
public static Vector2 Calculate(this Anchor anchor, Vector2 parentPosition, Rect parentRect, Rect elementRect)
|
||||||
{
|
{
|
||||||
var size = new Vector2(elementRect.Width, elementRect.Height);
|
var size = new Vector2(elementRect.Width, elementRect.Height);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ using Voile.Rendering;
|
|||||||
|
|
||||||
namespace Voile.UI.Containers;
|
namespace Voile.UI.Containers;
|
||||||
|
|
||||||
// TODO: make Container extend Widget, it already implements similar behaviors.
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// A base class for all UI containers, used to position and rendering child <see cref="IElement">s.
|
/// A base class for all UI containers, used to position and rendering child <see cref="IElement">s.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
|
using Voile.Rendering;
|
||||||
|
|
||||||
namespace Voile.UI.Containers;
|
namespace Voile.UI.Containers;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A frame is a special container that occupies the entire available size of the parent.
|
||||||
|
/// </summary>
|
||||||
public class Frame : Container
|
public class Frame : Container
|
||||||
{
|
{
|
||||||
public Frame()
|
public Frame()
|
||||||
@@ -9,11 +14,44 @@ public class Frame : Container
|
|||||||
|
|
||||||
public Frame(Rect minimumSize) : base(minimumSize)
|
public Frame(Rect minimumSize) : base(minimumSize)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Arrange()
|
public override void Arrange()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Render(RenderSystem renderer, Style style)
|
||||||
|
{
|
||||||
|
base.Render(renderer, style);
|
||||||
|
|
||||||
|
Rect parentSize;
|
||||||
|
|
||||||
|
if (Parent != null)
|
||||||
|
{
|
||||||
|
parentSize = Parent.Size;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var windowSize = renderer.WindowSize;
|
||||||
|
var windowRect = new Rect(windowSize.X, windowSize.Y);
|
||||||
|
|
||||||
|
parentSize = windowRect;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_lastParentSize != parentSize)
|
||||||
|
{
|
||||||
|
Size = parentSize;
|
||||||
|
_lastParentSize = parentSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnUpdate()
|
||||||
|
{
|
||||||
|
base.OnUpdate();
|
||||||
|
Size = _lastParentSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Rect _lastParentSize = Rect.Zero;
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using Voile.Input;
|
|
||||||
using Voile.Rendering;
|
using Voile.Rendering;
|
||||||
|
|
||||||
namespace Voile.UI;
|
namespace Voile.UI;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a basic UI element with position and size information.
|
||||||
|
/// </summary>
|
||||||
public interface IElement
|
public interface IElement
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -16,6 +18,9 @@ public interface IElement
|
|||||||
public Rect Size { get; set; }
|
public Rect Size { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a UI element that can contain child elements.
|
||||||
|
/// </summary>
|
||||||
public interface IParentableElement
|
public interface IParentableElement
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -34,6 +39,10 @@ public interface IParentableElement
|
|||||||
public void RemoveChild(UIElement child);
|
public void RemoveChild(UIElement child);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a UI element that can provide a minimum size constraint.<br />
|
||||||
|
/// Implement this interface if your UI element is expected to be resizeable.
|
||||||
|
/// </summary>
|
||||||
public interface IResizeableElement
|
public interface IResizeableElement
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -42,10 +51,13 @@ public interface IResizeableElement
|
|||||||
public abstract Rect MinimumSize { get; }
|
public abstract Rect MinimumSize { get; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a UI element that supports updates when its state changes.
|
||||||
|
/// </summary>
|
||||||
public interface IUpdatableElement
|
public interface IUpdatableElement
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Specifies if this element's properties have changed, making it necessary to update it.
|
/// Gets a value indicating whether the element's state has changed and needs to be updated.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool Dirty { get; }
|
public bool Dirty { get; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -58,6 +70,9 @@ public interface IUpdatableElement
|
|||||||
void MarkDirty();
|
void MarkDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a UI element that can be rendered to the screen.
|
||||||
|
/// </summary>
|
||||||
public interface IRenderableElement
|
public interface IRenderableElement
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -77,6 +92,9 @@ public interface IRenderableElement
|
|||||||
public void DrawSize(RenderSystem renderer);
|
public void DrawSize(RenderSystem renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a UI element that can receive and process user input.
|
||||||
|
/// </summary>
|
||||||
public interface IInputElement
|
public interface IInputElement
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -90,9 +108,23 @@ public interface IInputElement
|
|||||||
void Input(UIInputContext action);
|
void Input(UIInputContext action);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Represents a UI element that supports positional anchoring within a parent.
|
||||||
|
/// </summary>
|
||||||
public interface IAnchorableElement
|
public interface IAnchorableElement
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the anchor point relative to the parent container.
|
||||||
|
/// </summary>
|
||||||
public Anchor Anchor { get; set; }
|
public Anchor Anchor { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets an additional offset to apply after anchoring, in pixels.
|
||||||
|
/// </summary>
|
||||||
public Vector2 AnchorOffset { get; set; }
|
public Vector2 AnchorOffset { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Applies the current anchor settings based on the parent's position and size.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parentPosition">The parent's top-left global position.</param>
|
||||||
|
/// <param name="parentRect">The bounding rectangle of the parent container.</param>
|
||||||
public void ApplyAnchor(Vector2 parentPosition, Rect parentRect);
|
public void ApplyAnchor(Vector2 parentPosition, Rect parentRect);
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,9 @@ using Voile.Rendering;
|
|||||||
|
|
||||||
namespace Voile.UI;
|
namespace Voile.UI;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Base class for all UI elements.
|
||||||
|
/// </summary>
|
||||||
public abstract class UIElement : IElement, IRenderableElement, IResizeableElement, IUpdatableElement, IAnchorableElement
|
public abstract class UIElement : IElement, IRenderableElement, IResizeableElement, IUpdatableElement, IAnchorableElement
|
||||||
{
|
{
|
||||||
public bool Visible { get; set; } = true;
|
public bool Visible { get; set; } = true;
|
||||||
@@ -10,6 +13,11 @@ public abstract class UIElement : IElement, IRenderableElement, IResizeableEleme
|
|||||||
public Vector2 LocalPosition { get; set; } = Vector2.Zero;
|
public Vector2 LocalPosition { get; set; } = Vector2.Zero;
|
||||||
public Vector2 GlobalPosition => _parent?.GlobalPosition + LocalPosition ?? LocalPosition;
|
public Vector2 GlobalPosition => _parent?.GlobalPosition + LocalPosition ?? LocalPosition;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parent <see cref="UIElement"/> of this element.
|
||||||
|
/// </summary>
|
||||||
|
public UIElement? Parent => _parent;
|
||||||
|
|
||||||
public Rect Size
|
public Rect Size
|
||||||
{
|
{
|
||||||
get => _size;
|
get => _size;
|
||||||
@@ -38,9 +46,14 @@ public abstract class UIElement : IElement, IRenderableElement, IResizeableEleme
|
|||||||
|
|
||||||
public virtual void MarkDirty() => _dirty = true;
|
public virtual void MarkDirty() => _dirty = true;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets a parent element for this <see cref="UIElement"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="parent">Element to parent this <see cref="UIElement"/> to.</param>
|
||||||
public void SetParent(UIElement parent)
|
public void SetParent(UIElement parent)
|
||||||
{
|
{
|
||||||
_parent = parent;
|
_parent = parent;
|
||||||
|
MarkDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
|
|||||||
@@ -6,33 +6,146 @@ namespace Voile
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public record struct Color
|
public record struct Color
|
||||||
{
|
{
|
||||||
// TODO: add more HTML colors.
|
public static readonly Color AliceBlue = new(0xF0F8FF);
|
||||||
public static Color AliceBlue = new(0xF0F8FF);
|
public static readonly Color AntiqueWhite = new(0xFAEBD7);
|
||||||
public static Color AntiqueWhite = new(0xFAEBD7);
|
public static readonly Color Aqua = new(0x00FFFF);
|
||||||
public static Color Aqua = new(0x00FFFF);
|
public static readonly Color Aquamarine = new(0x7FFFD4);
|
||||||
public static Color Aquamarine = new(0x7FFFD4);
|
public static readonly Color Azure = new(0xF0FFFF);
|
||||||
public static Color Azure = new(0xF0FFFF);
|
public static readonly Color Beige = new(0xF5F5DC);
|
||||||
public static Color Beige = new(0xF5F5DC);
|
public static readonly Color Bisque = new(0xFFE4C4);
|
||||||
public static Color Bisque = new(0xFFE4C4);
|
public static readonly Color Black = new(0x000000);
|
||||||
public static Color Black = new(0x000000);
|
public static readonly Color BlanchedAlmond = new(0xFFEBCD);
|
||||||
public static Color BlanchedAlmond = new(0xFFEBCD);
|
public static readonly Color Blue = new(0x0000FF);
|
||||||
public static Color Blue = new(0x0000FF);
|
public static readonly Color BlueViolet = new(0x8A2BE2);
|
||||||
public static Color BlueViolet = new(0x8A2BE2);
|
public static readonly Color Brown = new(0xA52A2A);
|
||||||
public static Color Brown = new(0xA52A2A);
|
public static readonly Color BurlyWood = new(0xDEB887);
|
||||||
public static Color BurlyWood = new(0xDEB887);
|
public static readonly Color CadetBlue = new(0x5F9EA0);
|
||||||
public static Color CadetBlue = new(0x5F9EA0);
|
public static readonly Color Chartreuse = new(0x7FFF00);
|
||||||
public static Color Chartreuse = new(0x7FFF00);
|
public static readonly Color Chocolate = new(0xD2691E);
|
||||||
public static Color Chocolate = new(0xD2691E);
|
public static readonly Color Coral = new(0xFF7F50);
|
||||||
public static Color Coral = new(0xFF7F50);
|
public static readonly Color CornflowerBlue = new(0x6495ED);
|
||||||
public static Color CornflowerBlue = new(0x6495ED);
|
public static readonly Color Cornsilk = new(0xFFF8DC);
|
||||||
public static Color Cornsilk = new(0xFFF8DC);
|
public static readonly Color Crimson = new(0xDC143C);
|
||||||
public static Color Crimson = new(0xDC143C);
|
public static readonly Color Cyan = new(0x00FFFF);
|
||||||
public static Color Cyan = new(0x00FFFF);
|
public static readonly Color DarkBlue = new(0x00008B);
|
||||||
public static Color DarkBlue = new(0x00008B);
|
public static readonly Color DarkCyan = new(0x008B8B);
|
||||||
public static Color DarkCyan = new(0x008B8B);
|
public static readonly Color White = new(0xFFFFFF);
|
||||||
public static Color White = new(0xFFFFFF);
|
public static readonly Color Green = new(0x00FF00);
|
||||||
public static Color Green = new(0x00FF00);
|
public static readonly Color Red = new(0xFF0000);
|
||||||
public static Color Red = new(0xFF0000);
|
public static readonly Color DarkGoldenRod = new(0xB8860B);
|
||||||
|
public static readonly Color DarkGray = new(0xA9A9A9);
|
||||||
|
public static readonly Color DarkGreen = new(0x006400);
|
||||||
|
public static readonly Color DarkKhaki = new(0xBDB76B);
|
||||||
|
public static readonly Color DarkMagenta = new(0x8B008B);
|
||||||
|
public static readonly Color DarkOliveGreen = new(0x556B2F);
|
||||||
|
public static readonly Color DarkOrange = new(0xFF8C00);
|
||||||
|
public static readonly Color DarkOrchid = new(0x9932CC);
|
||||||
|
public static readonly Color DarkRed = new(0x8B0000);
|
||||||
|
public static readonly Color DarkSalmon = new(0xE9967A);
|
||||||
|
public static readonly Color DarkSeaGreen = new(0x8FBC8F);
|
||||||
|
public static readonly Color DarkSlateBlue = new(0x483D8B);
|
||||||
|
public static readonly Color DarkSlateGray = new(0x2F4F4F);
|
||||||
|
public static readonly Color DarkTurquoise = new(0x00CED1);
|
||||||
|
public static readonly Color DarkViolet = new(0x9400D3);
|
||||||
|
public static readonly Color DeepPink = new(0xFF1493);
|
||||||
|
public static readonly Color DeepSkyBlue = new(0x00BFFF);
|
||||||
|
public static readonly Color DimGray = new(0x696969);
|
||||||
|
public static readonly Color DodgerBlue = new(0x1E90FF);
|
||||||
|
public static readonly Color FireBrick = new(0xB22222);
|
||||||
|
public static readonly Color FloralWhite = new(0xFFFAF0);
|
||||||
|
public static readonly Color ForestGreen = new(0x228B22);
|
||||||
|
public static readonly Color Gainsboro = new(0xDCDCDC);
|
||||||
|
public static readonly Color GhostWhite = new(0xF8F8FF);
|
||||||
|
public static readonly Color Gold = new(0xFFD700);
|
||||||
|
public static readonly Color GoldenRod = new(0xDAA520);
|
||||||
|
public static readonly Color Gray = new(0x808080);
|
||||||
|
public static readonly Color GreenYellow = new(0xADFF2F);
|
||||||
|
public static readonly Color HoneyDew = new(0xF0FFF0);
|
||||||
|
public static readonly Color HotPink = new(0xFF69B4);
|
||||||
|
public static readonly Color IndianRed = new(0xCD5C5C);
|
||||||
|
public static readonly Color Indigo = new(0x4B0082);
|
||||||
|
public static readonly Color Ivory = new(0xFFFFF0);
|
||||||
|
public static readonly Color Khaki = new(0xF0E68C);
|
||||||
|
public static readonly Color Lavender = new(0xE6E6FA);
|
||||||
|
public static readonly Color LavenderBlush = new(0xFFF0F5);
|
||||||
|
public static readonly Color LawnGreen = new(0x7CFC00);
|
||||||
|
public static readonly Color LemonChiffon = new(0xFFFACD);
|
||||||
|
public static readonly Color LightBlue = new(0xADD8E6);
|
||||||
|
public static readonly Color LightCoral = new(0xF08080);
|
||||||
|
public static readonly Color LightCyan = new(0xE0FFFF);
|
||||||
|
public static readonly Color LightGoldenRodYellow = new(0xFAFAD2);
|
||||||
|
public static readonly Color LightGray = new(0xD3D3D3);
|
||||||
|
public static readonly Color LightGreen = new(0x90EE90);
|
||||||
|
public static readonly Color LightPink = new(0xFFB6C1);
|
||||||
|
public static readonly Color LightSalmon = new(0xFFA07A);
|
||||||
|
public static readonly Color LightSeaGreen = new(0x20B2AA);
|
||||||
|
public static readonly Color LightSkyBlue = new(0x87CEFA);
|
||||||
|
public static readonly Color LightSlateGray = new(0x778899);
|
||||||
|
public static readonly Color LightSteelBlue = new(0xB0C4DE);
|
||||||
|
public static readonly Color LightYellow = new(0xFFFFE0);
|
||||||
|
public static readonly Color Lime = new(0x00FF00);
|
||||||
|
public static readonly Color LimeGreen = new(0x32CD32);
|
||||||
|
public static readonly Color Linen = new(0xFAF0E6);
|
||||||
|
public static readonly Color Magenta = new(0xFF00FF);
|
||||||
|
public static readonly Color Maroon = new(0x800000);
|
||||||
|
public static readonly Color MediumAquaMarine = new(0x66CDAA);
|
||||||
|
public static readonly Color MediumBlue = new(0x0000CD);
|
||||||
|
public static readonly Color MediumOrchid = new(0xBA55D3);
|
||||||
|
public static readonly Color MediumPurple = new(0x9370DB);
|
||||||
|
public static readonly Color MediumSeaGreen = new(0x3CB371);
|
||||||
|
public static readonly Color MediumSlateBlue = new(0x7B68EE);
|
||||||
|
public static readonly Color MediumSpringGreen = new(0x00FA9A);
|
||||||
|
public static readonly Color MediumTurquoise = new(0x48D1CC);
|
||||||
|
public static readonly Color MediumVioletRed = new(0xC71585);
|
||||||
|
public static readonly Color MidnightBlue = new(0x191970);
|
||||||
|
public static readonly Color MintCream = new(0xF5FFFA);
|
||||||
|
public static readonly Color MistyRose = new(0xFFE4E1);
|
||||||
|
public static readonly Color Moccasin = new(0xFFE4B5);
|
||||||
|
public static readonly Color NavajoWhite = new(0xFFDEAD);
|
||||||
|
public static readonly Color Navy = new(0x000080);
|
||||||
|
public static readonly Color OldLace = new(0xFDF5E6);
|
||||||
|
public static readonly Color Olive = new(0x808000);
|
||||||
|
public static readonly Color OliveDrab = new(0x6B8E23);
|
||||||
|
public static readonly Color Orange = new(0xFFA500);
|
||||||
|
public static readonly Color OrangeRed = new(0xFF4500);
|
||||||
|
public static readonly Color Orchid = new(0xDA70D6);
|
||||||
|
public static readonly Color PaleGoldenRod = new(0xEEE8AA);
|
||||||
|
public static readonly Color PaleGreen = new(0x98FB98);
|
||||||
|
public static readonly Color PaleTurquoise = new(0xAFEEEE);
|
||||||
|
public static readonly Color PaleVioletRed = new(0xDB7093);
|
||||||
|
public static readonly Color PapayaWhip = new(0xFFEFD5);
|
||||||
|
public static readonly Color PeachPuff = new(0xFFDAB9);
|
||||||
|
public static readonly Color Peru = new(0xCD853F);
|
||||||
|
public static readonly Color Pink = new(0xFFC0CB);
|
||||||
|
public static readonly Color Plum = new(0xDDA0DD);
|
||||||
|
public static readonly Color PowderBlue = new(0xB0E0E6);
|
||||||
|
public static readonly Color Purple = new(0x800080);
|
||||||
|
public static readonly Color RebeccaPurple = new(0x663399);
|
||||||
|
public static readonly Color RosyBrown = new(0xBC8F8F);
|
||||||
|
public static readonly Color RoyalBlue = new(0x4169E1);
|
||||||
|
public static readonly Color SaddleBrown = new(0x8B4513);
|
||||||
|
public static readonly Color Salmon = new(0xFA8072);
|
||||||
|
public static readonly Color SandyBrown = new(0xF4A460);
|
||||||
|
public static readonly Color SeaGreen = new(0x2E8B57);
|
||||||
|
public static readonly Color Seashell = new(0xFFF5EE);
|
||||||
|
public static readonly Color Sienna = new(0xA0522D);
|
||||||
|
public static readonly Color Silver = new(0xC0C0C0);
|
||||||
|
public static readonly Color SkyBlue = new(0x87CEEB);
|
||||||
|
public static readonly Color SlateBlue = new(0x6A5ACD);
|
||||||
|
public static readonly Color SlateGray = new(0x708090);
|
||||||
|
public static readonly Color Snow = new(0xFFFAFA);
|
||||||
|
public static readonly Color SpringGreen = new(0x00FF7F);
|
||||||
|
public static readonly Color SteelBlue = new(0x4682B4);
|
||||||
|
public static readonly Color Tan = new(0xD2B48C);
|
||||||
|
public static readonly Color Teal = new(0x008080);
|
||||||
|
public static readonly Color Thistle = new(0xD8BFD8);
|
||||||
|
public static readonly Color Tomato = new(0xFF6347);
|
||||||
|
public static readonly Color Turquoise = new(0x40E0D0);
|
||||||
|
public static readonly Color Violet = new(0xEE82EE);
|
||||||
|
public static readonly Color Wheat = new(0xF5DEB3);
|
||||||
|
public static readonly Color WhiteSmoke = new(0xF5F5F5);
|
||||||
|
public static readonly Color Yellow = new(0xFFFF00);
|
||||||
|
public static readonly Color YellowGreen = new(0x9ACD32);
|
||||||
|
|
||||||
public byte R { get; set; }
|
public byte R { get; set; }
|
||||||
public byte G { get; set; }
|
public byte G { get; set; }
|
||||||
@@ -80,7 +193,7 @@ namespace Voile
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Color FromHexString(string hex)
|
public static readonly Color FromHexString(string hex)
|
||||||
{
|
{
|
||||||
if (hex.StartsWith("#"))
|
if (hex.StartsWith("#"))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user