mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 12:58:33 +01:00
Added AddCustomStyle and ApplyCustomStyle to UiStyle to allow for easy custom styling of elements
This commit is contained in:
parent
d48b7e2e71
commit
f652854c1d
5 changed files with 55 additions and 3 deletions
|
@ -39,6 +39,7 @@ Removals
|
||||||
Additions
|
Additions
|
||||||
- Added AutoInlineCenter and AutoInlineBottom anchors
|
- Added AutoInlineCenter and AutoInlineBottom anchors
|
||||||
- Added UiAnimation system
|
- Added UiAnimation system
|
||||||
|
- Added AddCustomStyle and ApplyCustomStyle to UiStyle to allow for easy custom styling of elements
|
||||||
|
|
||||||
Improvements
|
Improvements
|
||||||
- Increased Element area calculation recursion limit to 64
|
- Increased Element area calculation recursion limit to 64
|
||||||
|
|
|
@ -1290,8 +1290,11 @@ namespace MLEM.Ui.Elements {
|
||||||
this.SelectionIndicator = this.SelectionIndicator.OrStyle(style.SelectionIndicator);
|
this.SelectionIndicator = this.SelectionIndicator.OrStyle(style.SelectionIndicator);
|
||||||
this.ActionSound = this.ActionSound.OrStyle(style.ActionSound);
|
this.ActionSound = this.ActionSound.OrStyle(style.ActionSound);
|
||||||
this.SecondActionSound = this.SecondActionSound.OrStyle(style.ActionSound);
|
this.SecondActionSound = this.SecondActionSound.OrStyle(style.ActionSound);
|
||||||
|
this.MouseEnterAnimation = this.MouseEnterAnimation.OrStyle(style.MouseEnterAnimation);
|
||||||
|
this.MouseExitAnimation = this.MouseExitAnimation.OrStyle(style.MouseExitAnimation);
|
||||||
|
|
||||||
this.System?.InvokeOnElementStyleInit(this);
|
this.System?.InvokeOnElementStyleInit(this);
|
||||||
|
style.ApplyCustomStyle(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -212,6 +212,7 @@ namespace MLEM.Ui.Elements {
|
||||||
protected override void InitStyle(UiStyle style) {
|
protected override void InitStyle(UiStyle style) {
|
||||||
base.InitStyle(style);
|
base.InitStyle(style);
|
||||||
this.Texture = this.Texture.OrStyle(style.PanelTexture);
|
this.Texture = this.Texture.OrStyle(style.PanelTexture);
|
||||||
|
this.DrawColor = this.DrawColor.OrStyle(style.PanelColor);
|
||||||
this.StepPerScroll = this.StepPerScroll.OrStyle(style.PanelStepPerScroll);
|
this.StepPerScroll = this.StepPerScroll.OrStyle(style.PanelStepPerScroll);
|
||||||
this.ScrollerSize = this.ScrollerSize.OrStyle(style.PanelScrollerSize);
|
this.ScrollerSize = this.ScrollerSize.OrStyle(style.PanelScrollerSize);
|
||||||
this.ScrollBarOffset = this.ScrollBarOffset.OrStyle(style.PanelScrollBarOffset);
|
this.ScrollBarOffset = this.ScrollBarOffset.OrStyle(style.PanelScrollBarOffset);
|
||||||
|
|
|
@ -109,11 +109,11 @@ namespace MLEM.Ui.Parsers {
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Specifies an action to be invoked when a new element with the given <see cref="ElementType"/> is parsed in <see cref="Parse"/> or <see cref="ParseInto"/>.
|
/// Specifies an action to be invoked when a new element with the given <see cref="ElementType"/> is parsed in <see cref="Parse"/> or <see cref="ParseInto"/>.
|
||||||
/// These actions can be used to modify the style properties of the created elements.
|
/// These actions can be used to modify the style properties of the created elements similarly to <see cref="UiStyle.AddCustomStyle{T}"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="types">The element types that should be styled. Can be a combined flag.</param>
|
/// <param name="types">The element types that should be styled. Can be a combined flag.</param>
|
||||||
/// <param name="style">The action that styles the elements with the given element type.</param>
|
/// <param name="style">The action that styles the elements with the given element type.</param>
|
||||||
/// <param name="add">Whether the <paramref name="style"/> function should be added to the existing style settings, or replace them.</param>
|
/// <param name="add">Whether the <paramref name="style"/> function should be added to the existing style settings rather than replacing them.</param>
|
||||||
/// <typeparam name="T">The type of elements that the given <see cref="ElementType"/> flags are expected to be.</typeparam>
|
/// <typeparam name="T">The type of elements that the given <see cref="ElementType"/> flags are expected to be.</typeparam>
|
||||||
/// <returns>This parser, for chaining.</returns>
|
/// <returns>This parser, for chaining.</returns>
|
||||||
public UiParser Style<T>(ElementType types, Action<T> style, bool add = false) where T : Element {
|
public UiParser Style<T>(ElementType types, Action<T> style, bool add = false) where T : Element {
|
||||||
|
|
|
@ -13,7 +13,7 @@ namespace MLEM.Ui.Style {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The style settings for a <see cref="UiSystem"/>.
|
/// The style settings for a <see cref="UiSystem"/>.
|
||||||
/// Each <see cref="Element"/> uses these style settings by default, however you can also change these settings per element using the elements' individual style settings.
|
/// Each <see cref="Element"/> uses these style settings by default, however you can also change these settings per element using the elements' individual style settings.
|
||||||
/// Note that this class is a <see cref="GenericDataHolder"/>, meaning additional styles for custom components can easily be added using <see cref="GenericDataHolder.SetData"/>
|
/// Additional styles for built-in or custom element types can easily be added using <see cref="AddCustomStyle{T}"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class UiStyle : GenericDataHolder {
|
public class UiStyle : GenericDataHolder {
|
||||||
|
|
||||||
|
@ -22,6 +22,14 @@ namespace MLEM.Ui.Style {
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public NinePatch SelectionIndicator;
|
public NinePatch SelectionIndicator;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// A <see cref="UiAnimation"/> that is played when the mouse enters an element.
|
||||||
|
/// </summary>
|
||||||
|
public UiAnimation MouseEnterAnimation;
|
||||||
|
/// <summary>
|
||||||
|
/// A <see cref="UiAnimation"/> that is played when the mouse exists an element.
|
||||||
|
/// </summary>
|
||||||
|
public UiAnimation MouseExitAnimation;
|
||||||
|
/// <summary>
|
||||||
/// The texture that the <see cref="Button"/> element uses
|
/// The texture that the <see cref="Button"/> element uses
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public NinePatch ButtonTexture;
|
public NinePatch ButtonTexture;
|
||||||
|
@ -47,6 +55,10 @@ namespace MLEM.Ui.Style {
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public NinePatch PanelTexture;
|
public NinePatch PanelTexture;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// The color that the <see cref="Panel"/> element draws with.
|
||||||
|
/// </summary>
|
||||||
|
public Color PanelColor = Color.White;
|
||||||
|
/// <summary>
|
||||||
/// The <see cref="Element.ChildPadding"/> to apply to a <see cref="Panel"/> by default
|
/// The <see cref="Element.ChildPadding"/> to apply to a <see cref="Panel"/> by default
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Padding PanelChildPadding = new Vector2(5);
|
public Padding PanelChildPadding = new Vector2(5);
|
||||||
|
@ -222,5 +234,40 @@ namespace MLEM.Ui.Style {
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Dictionary<string, GenericFont> AdditionalFonts = new Dictionary<string, GenericFont>();
|
public Dictionary<string, GenericFont> AdditionalFonts = new Dictionary<string, GenericFont>();
|
||||||
|
|
||||||
|
private readonly Dictionary<Type, Action<Element>> elementStyles = new Dictionary<Type, Action<Element>>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds an action to the given <see cref="Element"/> type <typeparamref name="T"/> that allows applying any kind of custom styling or behavior to it.
|
||||||
|
/// Custom styles added in this manner can be applied to an element using <see cref="ApplyCustomStyle"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="style">The style action to add.</param>
|
||||||
|
/// <param name="add">Whether the <paramref name="style"/> function should be added to the existing style settings rather than replacing them.</param>
|
||||||
|
/// <typeparam name="T">The <see cref="Element"/> type that the <paramref name="style"/> should apply to.</typeparam>
|
||||||
|
public void AddCustomStyle<T>(Action<T> style, bool add = false) where T : Element {
|
||||||
|
if (add && this.elementStyles.ContainsKey(typeof(T))) {
|
||||||
|
this.elementStyles[typeof(T)] += Action;
|
||||||
|
} else {
|
||||||
|
this.elementStyles[typeof(T)] = Action;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Action(Element e) {
|
||||||
|
style.Invoke((T) e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Applies a set of custom styling actions to the given <paramref name="element"/> which were added through <see cref="AddCustomStyle{T}"/>.
|
||||||
|
/// This method is automatically invoked in <see cref="Element.InitStyle"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="element">The element to apply custom styling to.</param>
|
||||||
|
/// <returns>Whether any custom styling exists for the given <paramref name="element"/>.</returns>
|
||||||
|
public bool ApplyCustomStyle(Element element) {
|
||||||
|
if (this.elementStyles.TryGetValue(element.GetType(), out var style)) {
|
||||||
|
style?.Invoke(element);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue