mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 20:58:34 +01:00
improved Token memory allocations
This commit is contained in:
parent
293602269b
commit
f445aba45c
2 changed files with 19 additions and 10 deletions
|
@ -60,8 +60,13 @@ namespace MLEM.Formatting {
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="defaultPick">The default color, if none is specified</param>
|
/// <param name="defaultPick">The default color, if none is specified</param>
|
||||||
/// <returns>The color to render with</returns>
|
/// <returns>The color to render with</returns>
|
||||||
public Color? GetColor(Color defaultPick) {
|
public Color GetColor(Color defaultPick) {
|
||||||
return this.AppliedCodes.Select(c => c.GetColor(defaultPick)).FirstOrDefault(c => c.HasValue);
|
foreach (var code in this.AppliedCodes) {
|
||||||
|
var color = code.GetColor(defaultPick);
|
||||||
|
if (color.HasValue)
|
||||||
|
return color.Value;
|
||||||
|
}
|
||||||
|
return defaultPick;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -70,7 +75,12 @@ namespace MLEM.Formatting {
|
||||||
/// <param name="defaultPick">The default font, if none is specified</param>
|
/// <param name="defaultPick">The default font, if none is specified</param>
|
||||||
/// <returns>The font to render with</returns>
|
/// <returns>The font to render with</returns>
|
||||||
public GenericFont GetFont(GenericFont defaultPick) {
|
public GenericFont GetFont(GenericFont defaultPick) {
|
||||||
return this.AppliedCodes.Select(c => c.GetFont(defaultPick)).FirstOrDefault(f => f != null);
|
foreach (var code in this.AppliedCodes) {
|
||||||
|
var font = code.GetFont(defaultPick);
|
||||||
|
if (font != null)
|
||||||
|
return font;
|
||||||
|
}
|
||||||
|
return defaultPick;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
@ -116,8 +115,8 @@ namespace MLEM.Formatting {
|
||||||
var innerOffset = new Vector2(this.initialInnerOffset * scale, 0);
|
var innerOffset = new Vector2(this.initialInnerOffset * scale, 0);
|
||||||
for (var t = 0; t < this.Tokens.Length; t++) {
|
for (var t = 0; t < this.Tokens.Length; t++) {
|
||||||
var token = this.Tokens[t];
|
var token = this.Tokens[t];
|
||||||
var drawFont = token.GetFont(font) ?? font;
|
var drawFont = token.GetFont(font);
|
||||||
var drawColor = token.GetColor(color) ?? color;
|
var drawColor = token.GetColor(color);
|
||||||
for (var l = 0; l < token.SplitDisplayString.Length; l++) {
|
for (var l = 0; l < token.SplitDisplayString.Length; l++) {
|
||||||
var line = token.SplitDisplayString[l];
|
var line = token.SplitDisplayString[l];
|
||||||
for (var i = 0; i < line.Length; i++) {
|
for (var i = 0; i < line.Length; i++) {
|
||||||
|
@ -184,7 +183,7 @@ namespace MLEM.Formatting {
|
||||||
var innerOffset = new Vector2(this.initialInnerOffset, 0);
|
var innerOffset = new Vector2(this.initialInnerOffset, 0);
|
||||||
for (var t = 0; t < this.Tokens.Length; t++) {
|
for (var t = 0; t < this.Tokens.Length; t++) {
|
||||||
var token = this.Tokens[t];
|
var token = this.Tokens[t];
|
||||||
var tokenFont = token.GetFont(font) ?? font;
|
var tokenFont = token.GetFont(font);
|
||||||
token.InnerOffsets = new float[token.SplitDisplayString.Length - 1];
|
token.InnerOffsets = new float[token.SplitDisplayString.Length - 1];
|
||||||
var area = new List<RectangleF>();
|
var area = new List<RectangleF>();
|
||||||
for (var l = 0; l < token.SplitDisplayString.Length; l++) {
|
for (var l = 0; l < token.SplitDisplayString.Length; l++) {
|
||||||
|
@ -207,7 +206,7 @@ namespace MLEM.Formatting {
|
||||||
private float GetInnerOffsetX(GenericFont defaultFont, int tokenIndex, int lineIndex, TextAlignment alignment) {
|
private float GetInnerOffsetX(GenericFont defaultFont, int tokenIndex, int lineIndex, TextAlignment alignment) {
|
||||||
if (alignment > TextAlignment.Left) {
|
if (alignment > TextAlignment.Left) {
|
||||||
var token = this.Tokens[tokenIndex];
|
var token = this.Tokens[tokenIndex];
|
||||||
var tokenFont = token.GetFont(defaultFont) ?? defaultFont;
|
var tokenFont = token.GetFont(defaultFont);
|
||||||
// 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
|
// 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;
|
var endsLater = lineIndex >= token.SplitDisplayString.Length - 1;
|
||||||
// if the line ends in our token, we should ignore trailing white space
|
// if the line ends in our token, we should ignore trailing white space
|
||||||
|
@ -215,7 +214,7 @@ namespace MLEM.Formatting {
|
||||||
if (endsLater) {
|
if (endsLater) {
|
||||||
for (var i = tokenIndex + 1; i < this.Tokens.Length; i++) {
|
for (var i = tokenIndex + 1; i < this.Tokens.Length; i++) {
|
||||||
var other = this.Tokens[i];
|
var other = this.Tokens[i];
|
||||||
var otherFont = other.GetFont(defaultFont) ?? defaultFont;
|
var otherFont = other.GetFont(defaultFont);
|
||||||
if (other.SplitDisplayString.Length > 1) {
|
if (other.SplitDisplayString.Length > 1) {
|
||||||
// the line ends in this token (so we also ignore trailing whitespaces)
|
// the line ends in this token (so we also ignore trailing whitespaces)
|
||||||
restOfLine += otherFont.MeasureString(other.SplitDisplayString[0], true).X;
|
restOfLine += otherFont.MeasureString(other.SplitDisplayString[0], true).X;
|
||||||
|
@ -238,7 +237,7 @@ namespace MLEM.Formatting {
|
||||||
foreach (var token in this.Tokens) {
|
foreach (var token in this.Tokens) {
|
||||||
index -= token.Substring.Length;
|
index -= token.Substring.Length;
|
||||||
if (index <= 0)
|
if (index <= 0)
|
||||||
return token.GetFont(font) ?? font;
|
return token.GetFont(font);
|
||||||
}
|
}
|
||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue