mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-12-25 17:59:24 +01:00
Some ui system improvements
- Allow initializing a ui system's text formatter without default codes and macros - Fixed UiStyle.LinkColor not being applied to the ui system when changed
This commit is contained in:
parent
a249331ce9
commit
eb8a8568e1
3 changed files with 24 additions and 10 deletions
|
@ -75,6 +75,7 @@ Improvements
|
|||
- Added TextField.OnCopyPasteException to allow handling exceptions thrown by TextCopy
|
||||
- Avoid paragraphs splitting or truncating their text unnecessarily
|
||||
- Automatically mark elements dirty when various member values are changed
|
||||
- Allow initializing a ui system's text formatter without default codes and macros
|
||||
|
||||
Fixes
|
||||
- Fixed parents of elements that prevent spill not being notified properly
|
||||
|
@ -86,6 +87,7 @@ Fixes
|
|||
- Fixed the scroll bar of an empty panel being positioned incorrectly
|
||||
- Fixed UiControls maintaining old input states when input types are toggled off
|
||||
- Fixed an occasional deadlock when a game is disposed with a scrolling Panel present
|
||||
- Fixed UiStyle.LinkColor not being applied to the ui system when changed
|
||||
|
||||
Removals
|
||||
- Marked Element.OnDisposed as obsolete in favor of the more predictable OnRemovedFromUi
|
||||
|
|
|
@ -206,7 +206,12 @@ namespace MLEM.Ui {
|
|||
/// <param name="style">The style settings that this ui should have. Use <see cref="UntexturedStyle"/> for the default, untextured style.</param>
|
||||
/// <param name="inputHandler">The input handler that this ui's <see cref="UiControls"/> should use. If none is supplied, a new input handler is created for this ui.</param>
|
||||
/// <param name="automaticViewport">If this value is set to true, the ui system's <see cref="Viewport"/> will be set automatically based on the <see cref="GameWindow"/>'s size. Defaults to true.</param>
|
||||
public UiSystem(Game game, UiStyle style, InputHandler inputHandler = null, bool automaticViewport = true) : base(game) {
|
||||
/// <param name="hasFontModifierFormatting">Whether default font modifier codes should be added to this ui system's <see cref="TextFormatter"/>, including bold, italic, strikethrough, shadow, subscript, and more.</param>
|
||||
/// <param name="hasColorFormatting">Whether default color codes should be added to this ui system's <see cref="TextFormatter"/>, including all <see cref="Color"/> values and the ability to use custom colors.</param>
|
||||
/// <param name="hasAnimationFormatting">Whether default animation codes should be added to this ui system's <see cref="TextFormatter"/>, namely the wobbly animation.</param>
|
||||
/// <param name="hasMacroFormatting">Whether default macros should be added to this ui system's <see cref="TextFormatter"/>, including TeX's ~ non-breaking space and more.</param>
|
||||
/// <param name="hasUiFormatting">Whether <see cref="UiSystem"/>-based formatting codes should be added to this ui system's <see cref="TextFormatter"/>, including <see cref="Paragraph.Link"/> codes and font switching.</param>
|
||||
public UiSystem(Game game, UiStyle style, InputHandler inputHandler = null, bool automaticViewport = true, bool hasFontModifierFormatting = true, bool hasColorFormatting = true, bool hasAnimationFormatting = true, bool hasMacroFormatting = true, bool hasUiFormatting = true) : base(game) {
|
||||
this.Controls = new UiControls(this, inputHandler);
|
||||
this.style = style;
|
||||
|
||||
|
@ -248,12 +253,14 @@ namespace MLEM.Ui {
|
|||
};
|
||||
}
|
||||
|
||||
this.TextFormatter = new TextFormatter();
|
||||
this.TextFormatter.Codes.Add(new Regex("<l(?: ([^>]+))?>"), (f, m, r) => new LinkCode(m, r, 1 / 16F, 0.85F,
|
||||
t => this.Controls.MousedElement is Paragraph.Link l1 && l1.Token == t || this.Controls.TouchedElement is Paragraph.Link l2 && l2.Token == t,
|
||||
this.Style.LinkColor));
|
||||
this.TextFormatter.Codes.Add(new Regex("<f ([^>]+)>"), (_, m, r) => new FontCode(m, r,
|
||||
f => this.Style.AdditionalFonts != null && this.Style.AdditionalFonts.TryGetValue(m.Groups[1].Value, out var c) ? c : f));
|
||||
this.TextFormatter = new TextFormatter(hasFontModifierFormatting, hasColorFormatting, hasAnimationFormatting, hasMacroFormatting);
|
||||
if (hasUiFormatting) {
|
||||
this.TextFormatter.Codes.Add(new Regex("<l(?: ([^>]+))?>"), (f, m, r) => new LinkCode(m, r, 1 / 16F, 0.85F,
|
||||
t => this.Controls.MousedElement is Paragraph.Link l1 && l1.Token == t || this.Controls.TouchedElement is Paragraph.Link l2 && l2.Token == t,
|
||||
d => this.Style.LinkColor));
|
||||
this.TextFormatter.Codes.Add(new Regex("<f ([^>]+)>"), (_, m, r) => new FontCode(m, r,
|
||||
f => this.Style.AdditionalFonts != null && this.Style.AdditionalFonts.TryGetValue(m.Groups[1].Value, out var c) ? c : f));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -9,14 +9,19 @@ namespace MLEM.Formatting.Codes {
|
|||
public class LinkCode : UnderlineCode {
|
||||
|
||||
private readonly Func<Token, bool> isSelected;
|
||||
private readonly Color? color;
|
||||
private readonly Func<Color, Color?> color;
|
||||
|
||||
/// <inheritdoc />
|
||||
public LinkCode(Match match, Regex regex, float thickness, float yOffset, Func<Token, bool> isSelected, Color? color = null) : base(match, regex, thickness, yOffset) {
|
||||
public LinkCode(Match match, Regex regex, float thickness, float yOffset, Func<Token, bool> isSelected, Func<Color, Color?> color) :
|
||||
base(match, regex, thickness, yOffset) {
|
||||
this.isSelected = isSelected;
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public LinkCode(Match match, Regex regex, float thickness, float yOffset, Func<Token, bool> isSelected, Color? color = null) :
|
||||
this(match, regex, thickness, yOffset, isSelected, d => color) {}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if this link formatting code is currently selected or hovered over, based on the selection function.
|
||||
/// </summary>
|
||||
|
@ -31,7 +36,7 @@ namespace MLEM.Formatting.Codes {
|
|||
|
||||
/// <inheritdoc />
|
||||
public override Color? GetColor(Color defaultPick) {
|
||||
return this.color;
|
||||
return this.color.Invoke(defaultPick);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
|
|
Loading…
Reference in a new issue