mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 12:58:33 +01:00
Fixed some end-of-line inconsistencies when using the Right text alignment
This commit is contained in:
parent
c9c9e566b1
commit
84a6e5a29a
3 changed files with 17 additions and 11 deletions
|
@ -22,6 +22,9 @@ Improvements
|
|||
- Added Padding.Empty
|
||||
- Throw an exception when text formatter macros resolve recursively too many times
|
||||
|
||||
Fixes
|
||||
- Fixed some end-of-line inconsistencies when using the Right text alignment
|
||||
|
||||
### MLEM.Ui
|
||||
Additions
|
||||
- Allow specifying a maximum amount of characters for a TextField
|
||||
|
|
|
@ -140,10 +140,10 @@ namespace MLEM.Ui.Elements {
|
|||
|
||||
/// <inheritdoc />
|
||||
public override void Draw(GameTime time, SpriteBatch batch, float alpha, BlendState blendState, SamplerState samplerState, DepthStencilState depthStencilState, Effect effect, Matrix matrix) {
|
||||
var pos = this.DisplayArea.Location + new Vector2(GetAlignmentOffset(), 0);
|
||||
var pos = this.DisplayArea.Location + new Vector2(this.GetAlignmentOffset(), 0);
|
||||
var sc = this.TextScale * this.TextScaleMultiplier * this.Scale;
|
||||
var color = this.TextColor.OrDefault(Color.White) * alpha;
|
||||
this.TokenizedText.Draw(time, batch, pos, this.RegularFont, color, sc, 0, this.Alignment);
|
||||
this.TokenizedText.Draw(time, batch, pos, this.RegularFont, color, sc, 0);
|
||||
base.Draw(time, batch, alpha, blendState, samplerState, depthStencilState, effect, matrix);
|
||||
}
|
||||
|
||||
|
|
|
@ -111,7 +111,7 @@ namespace MLEM.Formatting {
|
|||
}
|
||||
|
||||
/// <inheritdoc cref="GenericFont.DrawString(SpriteBatch,string,Vector2,Color,float,Vector2,float,SpriteEffects,float)"/>
|
||||
public void Draw(GameTime time, SpriteBatch batch, Vector2 pos, GenericFont font, Color color, float scale, float depth, TextAlignment alignment = TextAlignment.Left) {
|
||||
public void Draw(GameTime time, SpriteBatch batch, Vector2 pos, GenericFont font, Color color, float scale, float depth) {
|
||||
var innerOffset = new Vector2(this.initialInnerOffset * scale, 0);
|
||||
for (var t = 0; t < this.Tokens.Length; t++) {
|
||||
var token = this.Tokens[t];
|
||||
|
@ -178,7 +178,7 @@ namespace MLEM.Formatting {
|
|||
foreach (var token in this.Tokens)
|
||||
token.SplitDisplayString = token.DisplayString.Split('\n');
|
||||
|
||||
// token areas
|
||||
// token areas and inner offsets
|
||||
this.initialInnerOffset = this.GetInnerOffsetX(font, 0, 0, alignment);
|
||||
var innerOffset = new Vector2(this.initialInnerOffset, 0);
|
||||
for (var t = 0; t < this.Tokens.Length; t++) {
|
||||
|
@ -205,18 +205,21 @@ namespace MLEM.Formatting {
|
|||
private float GetInnerOffsetX(GenericFont font, int tokenIndex, int lineIndex, TextAlignment alignment) {
|
||||
if (alignment > TextAlignment.Left) {
|
||||
var token = this.Tokens[tokenIndex];
|
||||
var restOfLine = font.MeasureString(token.SplitDisplayString[lineIndex], true).X;
|
||||
if (lineIndex >= token.SplitDisplayString.Length - 1) {
|
||||
// the line ends somewhere in or after the next token
|
||||
// if we're the last line in our line array, then we don't contain a line split, so the line ends in a later token
|
||||
var endsLater = lineIndex >= token.SplitDisplayString.Length - 1;
|
||||
// if the line ends in our token, we should ignore trailing white space
|
||||
var restOfLine = font.MeasureString(token.SplitDisplayString[lineIndex], !endsLater).X;
|
||||
if (endsLater) {
|
||||
for (var i = tokenIndex + 1; i < this.Tokens.Length; i++) {
|
||||
var other = this.Tokens[i];
|
||||
if (other.SplitDisplayString.Length > 1) {
|
||||
// the line ends in this token
|
||||
restOfLine += font.MeasureString(other.SplitDisplayString[0]).X;
|
||||
// the line ends in this token (so we also ignore trailing whitespaces)
|
||||
restOfLine += font.MeasureString(other.SplitDisplayString[0], true).X;
|
||||
break;
|
||||
} else {
|
||||
// the line doesn't end in this token, so add it fully
|
||||
restOfLine += font.MeasureString(other.DisplayString).X;
|
||||
// the line doesn't end in this token (or it's the last token), so add it fully
|
||||
var lastToken = i >= this.Tokens.Length - 1;
|
||||
restOfLine += font.MeasureString(other.DisplayString, lastToken).X;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue