mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 04:53:29 +01:00
Adjusted GenericStashFont line height calculations to result in the same values as GenericSpriteFont
This commit is contained in:
parent
abac738123
commit
a76c14b243
4 changed files with 44 additions and 7 deletions
|
@ -30,6 +30,10 @@ Improvements
|
||||||
Fixes
|
Fixes
|
||||||
- Fixed a crash if a paragraph has a link formatting code, but no font
|
- Fixed a crash if a paragraph has a link formatting code, but no font
|
||||||
|
|
||||||
|
### MLEM.Extended
|
||||||
|
Improvements
|
||||||
|
- Adjusted GenericStashFont line height calculations to result in the same values as GenericSpriteFont
|
||||||
|
|
||||||
### MLEM.Data
|
### MLEM.Data
|
||||||
Additions
|
Additions
|
||||||
- Added the ability to specify a coordinate offset in data texture atlases
|
- Added the ability to specify a coordinate offset in data texture atlases
|
||||||
|
|
|
@ -29,9 +29,7 @@ namespace MLEM.Extended.Font {
|
||||||
/// <param name="italic">An italic version of the font</param>
|
/// <param name="italic">An italic version of the font</param>
|
||||||
public GenericStashFont(SpriteFontBase font, SpriteFontBase bold = null, SpriteFontBase italic = null) {
|
public GenericStashFont(SpriteFontBase font, SpriteFontBase bold = null, SpriteFontBase italic = null) {
|
||||||
this.Font = font;
|
this.Font = font;
|
||||||
// SpriteFontBase provides no line height, so we measure the height of a new line for most fonts
|
this.LineHeight = CalculateLineHeight(font);
|
||||||
// This doesn't work with static sprite fonts, but their size is always the one we calculate here
|
|
||||||
this.LineHeight = font is StaticSpriteFont s ? s.FontSize + s.LineSpacing : font.MeasureString("\n").Y;
|
|
||||||
this.Bold = bold != null ? new GenericStashFont(bold) : this;
|
this.Bold = bold != null ? new GenericStashFont(bold) : this;
|
||||||
this.Italic = italic != null ? new GenericStashFont(italic) : this;
|
this.Italic = italic != null ? new GenericStashFont(italic) : this;
|
||||||
}
|
}
|
||||||
|
@ -51,5 +49,18 @@ namespace MLEM.Extended.Font {
|
||||||
return this.Font.MeasureString(c.ToCachedString());
|
return this.Font.MeasureString(c.ToCachedString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static float CalculateLineHeight(SpriteFontBase font) {
|
||||||
|
if (font is StaticSpriteFont s) {
|
||||||
|
// this is the same calculation used internally by StaticSpriteFont
|
||||||
|
return s.FontSize + s.LineSpacing;
|
||||||
|
} else {
|
||||||
|
// Y (min y) just stores the glyph's Y offset, whereas Y2 (max y) stores the glyph's height
|
||||||
|
// since we technically want line spacing rather than line height, we calculate it like this
|
||||||
|
var bounds = new Bounds();
|
||||||
|
font.TextBounds(" ", Vector2.Zero, ref bounds);
|
||||||
|
return bounds.Y2 + (bounds.Y2 - bounds.Y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -11,7 +11,7 @@ with.
|
||||||
<!--
|
<!--
|
||||||
Modify this string to change the font that will be imported.
|
Modify this string to change the font that will be imported.
|
||||||
-->
|
-->
|
||||||
<FontName>Arial</FontName>
|
<FontName>Cadman_Roman.otf</FontName>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Size is a float value, measured in points. Modify this value to change
|
Size is a float value, measured in points. Modify this value to change
|
||||||
|
|
|
@ -8,9 +8,11 @@ using Microsoft.Xna.Framework.Input;
|
||||||
using MLEM.Cameras;
|
using MLEM.Cameras;
|
||||||
using MLEM.Data;
|
using MLEM.Data;
|
||||||
using MLEM.Data.Content;
|
using MLEM.Data.Content;
|
||||||
|
using MLEM.Extended.Extensions;
|
||||||
using MLEM.Extended.Font;
|
using MLEM.Extended.Font;
|
||||||
using MLEM.Extended.Tiled;
|
using MLEM.Extended.Tiled;
|
||||||
using MLEM.Extensions;
|
using MLEM.Extensions;
|
||||||
|
using MLEM.Font;
|
||||||
using MLEM.Formatting;
|
using MLEM.Formatting;
|
||||||
using MLEM.Formatting.Codes;
|
using MLEM.Formatting.Codes;
|
||||||
using MLEM.Input;
|
using MLEM.Input;
|
||||||
|
@ -20,6 +22,7 @@ using MLEM.Textures;
|
||||||
using MLEM.Ui;
|
using MLEM.Ui;
|
||||||
using MLEM.Ui.Elements;
|
using MLEM.Ui.Elements;
|
||||||
using MLEM.Ui.Style;
|
using MLEM.Ui.Style;
|
||||||
|
using MonoGame.Extended;
|
||||||
using MonoGame.Extended.Tiled;
|
using MonoGame.Extended.Tiled;
|
||||||
using Group = MLEM.Ui.Elements.Group;
|
using Group = MLEM.Ui.Elements.Group;
|
||||||
|
|
||||||
|
@ -74,9 +77,10 @@ namespace Sandbox {
|
||||||
//var font = new GenericSpriteFont(LoadContent<SpriteFont>("Fonts/TestFont"));
|
//var font = new GenericSpriteFont(LoadContent<SpriteFont>("Fonts/TestFont"));
|
||||||
//var font = new GenericBitmapFont(LoadContent<BitmapFont>("Fonts/Regular"));
|
//var font = new GenericBitmapFont(LoadContent<BitmapFont>("Fonts/Regular"));
|
||||||
var font = new GenericStashFont(system.GetFont(32));
|
var font = new GenericStashFont(system.GetFont(32));
|
||||||
|
var spriteFont = new GenericSpriteFont(LoadContent<SpriteFont>("Fonts/TestFont"));
|
||||||
this.UiSystem.Style = new UntexturedStyle(this.SpriteBatch) {
|
this.UiSystem.Style = new UntexturedStyle(this.SpriteBatch) {
|
||||||
Font = font,
|
Font = font,
|
||||||
TextScale = 0.1F,
|
TextScale = 0.5F,
|
||||||
PanelTexture = new NinePatch(new TextureRegion(tex, 0, 8, 24, 24), 8),
|
PanelTexture = new NinePatch(new TextureRegion(tex, 0, 8, 24, 24), 8),
|
||||||
ButtonTexture = new NinePatch(new TextureRegion(tex, 24, 8, 16, 16), 4)
|
ButtonTexture = new NinePatch(new TextureRegion(tex, 24, 8, 16, 16), 4)
|
||||||
};
|
};
|
||||||
|
@ -84,6 +88,14 @@ namespace Sandbox {
|
||||||
this.UiSystem.AutoScaleWithScreen = true;
|
this.UiSystem.AutoScaleWithScreen = true;
|
||||||
this.UiSystem.GlobalScale = 5;
|
this.UiSystem.GlobalScale = 5;
|
||||||
|
|
||||||
|
/*this.OnDraw += (g, time) => {
|
||||||
|
const string strg = "This is a test string\nto test things\n\nMany things are being tested, like the ability\nfor this font to agree\n\nwith newlines";
|
||||||
|
this.SpriteBatch.Begin();
|
||||||
|
spriteFont.DrawString(this.SpriteBatch, strg, new Vector2(600, 100), Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 0);
|
||||||
|
font.DrawString(this.SpriteBatch, strg, new Vector2(600, 100), Color.White, 0, Vector2.Zero, 2, SpriteEffects.None, 0);
|
||||||
|
this.SpriteBatch.End();
|
||||||
|
};*/
|
||||||
|
|
||||||
var panel = new Panel(Anchor.Center, new Vector2(0, 100), Vector2.Zero) {SetWidthBasedOnChildren = true};
|
var panel = new Panel(Anchor.Center, new Vector2(0, 100), Vector2.Zero) {SetWidthBasedOnChildren = true};
|
||||||
panel.AddChild(new Button(Anchor.AutoLeft, new Vector2(100, 10)));
|
panel.AddChild(new Button(Anchor.AutoLeft, new Vector2(100, 10)));
|
||||||
panel.AddChild(new Button(Anchor.AutoCenter, new Vector2(80, 10)));
|
panel.AddChild(new Button(Anchor.AutoCenter, new Vector2(80, 10)));
|
||||||
|
@ -129,7 +141,7 @@ namespace Sandbox {
|
||||||
Console.WriteLine("The res is " + res);
|
Console.WriteLine("The res is " + res);
|
||||||
|
|
||||||
var gradient = this.SpriteBatch.GenerateGradientTexture(Color.Green, Color.Red, Color.Blue, Color.Yellow);
|
var gradient = this.SpriteBatch.GenerateGradientTexture(Color.Green, Color.Red, Color.Blue, Color.Yellow);
|
||||||
this.OnDraw += (game, time) => {
|
/*this.OnDraw += (game, time) => {
|
||||||
this.SpriteBatch.Begin();
|
this.SpriteBatch.Begin();
|
||||||
this.SpriteBatch.Draw(this.SpriteBatch.GetBlankTexture(), new Rectangle(640 - 4, 360 - 4, 8, 8), Color.Green);
|
this.SpriteBatch.Draw(this.SpriteBatch.GetBlankTexture(), new Rectangle(640 - 4, 360 - 4, 8, 8), Color.Green);
|
||||||
|
|
||||||
|
@ -141,7 +153,7 @@ namespace Sandbox {
|
||||||
|
|
||||||
this.SpriteBatch.Draw(gradient, new Rectangle(300, 100, 200, 200), Color.White);
|
this.SpriteBatch.Draw(gradient, new Rectangle(300, 100, 200, 200), Color.White);
|
||||||
this.SpriteBatch.End();
|
this.SpriteBatch.End();
|
||||||
};
|
};*/
|
||||||
|
|
||||||
var sc = 4;
|
var sc = 4;
|
||||||
var formatter = new TextFormatter();
|
var formatter = new TextFormatter();
|
||||||
|
@ -218,6 +230,16 @@ namespace Sandbox {
|
||||||
CanBeMoused = false
|
CanBeMoused = false
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
var par = loadPanel.AddChild(new Paragraph(Anchor.AutoLeft, 1, "This is another\ntest string\n\nwith many lines\nand many more!"));
|
||||||
|
par.OnUpdated = (e, time) => {
|
||||||
|
GenericFont newFont = Input.IsModifierKeyDown(ModifierKey.Shift) ? spriteFont : font;
|
||||||
|
if (newFont != par.RegularFont.Value) {
|
||||||
|
par.TextScaleMultiplier = newFont == font ? 1 : 0.5F;
|
||||||
|
par.RegularFont = newFont;
|
||||||
|
par.ForceUpdateArea();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
par.OnDrawn = (e, time, batch, a) => batch.DrawRectangle(e.DisplayArea.ToExtended(), Color.Red);
|
||||||
this.UiSystem.Add("Load", loadGroup);
|
this.UiSystem.Add("Load", loadGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue