Add documentation to IElement, Anchor and UIElement.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -43,6 +46,10 @@ 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;
|
||||||
|
|||||||
Reference in New Issue
Block a user