Element styling, rename IsMousePressed to IsMouseButtonPressed in InputSystem, Button widget.
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Numerics;
|
||||
using System.Text;
|
||||
using Voile.Rendering;
|
||||
|
||||
namespace Voile.UI;
|
||||
@@ -13,6 +15,23 @@ public abstract class UIElement : IElement, IRenderableElement, IResizeableEleme
|
||||
public Vector2 LocalPosition { get; set; } = Vector2.Zero;
|
||||
public Vector2 GlobalPosition => _parent?.GlobalPosition + LocalPosition ?? LocalPosition;
|
||||
|
||||
public string StyleName => $"{StyleElementName ?? "UIElement"}{GetStyleVariantString()}{ConstructStyleModifiers(StyleModifiers)}";
|
||||
|
||||
/// <summary>
|
||||
/// An element name for style.
|
||||
/// </summary>
|
||||
public virtual string? StyleElementName { get; }
|
||||
|
||||
public string StyleVariant { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// List of style modifiers for this <see cref="UIElement"/>.
|
||||
/// </summary>
|
||||
public virtual string[]? StyleModifiers { get; }
|
||||
|
||||
public StyleSheet StyleSheet => Parent?.StyleSheet ?? StyleSheetOverride;
|
||||
public StyleSheet StyleSheetOverride { get; set; } = new(string.Empty);
|
||||
|
||||
/// <summary>
|
||||
/// Parent <see cref="UIElement"/> of this element.
|
||||
/// </summary>
|
||||
@@ -47,6 +66,11 @@ public abstract class UIElement : IElement, IRenderableElement, IResizeableEleme
|
||||
public abstract Rect MinimumSize { get; }
|
||||
public bool Dirty => _dirty;
|
||||
|
||||
public bool TryGetStyle(StyleSheet styleSheet, [NotNullWhen(true)] out Style? style)
|
||||
{
|
||||
return styleSheet.TryGet(StyleName, out style);
|
||||
}
|
||||
|
||||
public virtual void MarkDirty()
|
||||
{
|
||||
if (Parent != null && !Parent.Dirty)
|
||||
@@ -112,6 +136,30 @@ public abstract class UIElement : IElement, IRenderableElement, IResizeableEleme
|
||||
LocalPosition = Anchor.Calculate(parentPosition, parentRect, Size) + new Vector2(AnchorOffset.X, AnchorOffset.Y);
|
||||
}
|
||||
|
||||
private string ConstructStyleModifiers(string[]? modifiers)
|
||||
{
|
||||
if (modifiers == null)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
var sb = new StringBuilder();
|
||||
foreach (var modifier in modifiers)
|
||||
{
|
||||
sb.Append($".{modifier}");
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
private string GetStyleVariantString()
|
||||
{
|
||||
if (string.IsNullOrEmpty(StyleVariant))
|
||||
return string.Empty;
|
||||
|
||||
return $".{StyleVariant}";
|
||||
}
|
||||
|
||||
private bool _dirty = true;
|
||||
private Rect _size = Rect.Zero;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user