mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 12:58:33 +01:00
Avoid paragraphs splitting or truncating their text unnecessarily
This commit is contained in:
parent
f8567cfc99
commit
ee62554fee
2 changed files with 9 additions and 3 deletions
|
@ -68,6 +68,7 @@ Improvements
|
||||||
- Ensure paragraphs display up-to-date versions of their text callbacks
|
- Ensure paragraphs display up-to-date versions of their text callbacks
|
||||||
- Set cornflower blue as the default link color
|
- Set cornflower blue as the default link color
|
||||||
- Added TextField.OnCopyPasteException to allow handling exceptions thrown by TextCopy
|
- Added TextField.OnCopyPasteException to allow handling exceptions thrown by TextCopy
|
||||||
|
- Avoid paragraphs splitting or truncating their text unnecessarily
|
||||||
|
|
||||||
Fixes
|
Fixes
|
||||||
- Fixed parents of elements that prevent spill not being notified properly
|
- Fixed parents of elements that prevent spill not being notified properly
|
||||||
|
|
|
@ -107,6 +107,7 @@ namespace MLEM.Ui.Elements {
|
||||||
private StyleProp<TextAlignment> alignment;
|
private StyleProp<TextAlignment> alignment;
|
||||||
private StyleProp<GenericFont> regularFont;
|
private StyleProp<GenericFont> regularFont;
|
||||||
private TokenizedString tokenizedText;
|
private TokenizedString tokenizedText;
|
||||||
|
private Vector2? lastAlignSplitSize;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new paragraph with the given settings.
|
/// Creates a new paragraph with the given settings.
|
||||||
|
@ -130,7 +131,8 @@ namespace MLEM.Ui.Elements {
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override Vector2 CalcActualSize(RectangleF parentArea) {
|
protected override Vector2 CalcActualSize(RectangleF parentArea) {
|
||||||
var size = base.CalcActualSize(parentArea);
|
var size = base.CalcActualSize(parentArea);
|
||||||
this.AlignAndSplit(size);
|
this.TokenizeIfNecessary();
|
||||||
|
this.AlignAndSplitIfNecessary(size);
|
||||||
var textSize = this.tokenizedText.GetArea(Vector2.Zero, this.TextScale * this.TextScaleMultiplier * this.Scale).Size;
|
var textSize = this.tokenizedText.GetArea(Vector2.Zero, this.TextScale * this.TextScaleMultiplier * this.Scale).Size;
|
||||||
return new Vector2(this.AutoAdjustWidth ? textSize.X + this.ScaledPadding.Width : size.X, textSize.Y + this.ScaledPadding.Height);
|
return new Vector2(this.AutoAdjustWidth ? textSize.X + this.ScaledPadding.Width : size.X, textSize.Y + this.ScaledPadding.Height);
|
||||||
}
|
}
|
||||||
|
@ -193,6 +195,7 @@ namespace MLEM.Ui.Elements {
|
||||||
|
|
||||||
// tokenize the text
|
// tokenize the text
|
||||||
this.tokenizedText = this.System.TextFormatter.Tokenize(this.RegularFont, this.Text, this.Alignment);
|
this.tokenizedText = this.System.TextFormatter.Tokenize(this.RegularFont, this.Text, this.Alignment);
|
||||||
|
this.lastAlignSplitSize = null;
|
||||||
|
|
||||||
// add links to the paragraph
|
// add links to the paragraph
|
||||||
this.RemoveChildren(c => c is Link);
|
this.RemoveChildren(c => c is Link);
|
||||||
|
@ -200,8 +203,10 @@ namespace MLEM.Ui.Elements {
|
||||||
this.AddChild(new Link(Anchor.TopLeft, link, this.TextScale * this.TextScaleMultiplier));
|
this.AddChild(new Link(Anchor.TopLeft, link, this.TextScale * this.TextScaleMultiplier));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AlignAndSplit(Vector2 size) {
|
private void AlignAndSplitIfNecessary(Vector2 size) {
|
||||||
this.TokenizeIfNecessary();
|
if (size == this.lastAlignSplitSize)
|
||||||
|
return;
|
||||||
|
this.lastAlignSplitSize = size;
|
||||||
var width = size.X - this.ScaledPadding.Width;
|
var width = size.X - this.ScaledPadding.Width;
|
||||||
var scale = this.TextScale * this.TextScaleMultiplier * this.Scale;
|
var scale = this.TextScale * this.TextScaleMultiplier * this.Scale;
|
||||||
if (this.TruncateIfLong) {
|
if (this.TruncateIfLong) {
|
||||||
|
|
Loading…
Reference in a new issue