diff --git a/CHANGELOG.md b/CHANGELOG.md index b27cc4e..7297e1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,10 @@ Improvements Fixes - 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 Additions - Added the ability to specify a coordinate offset in data texture atlases diff --git a/MLEM.Extended/Font/GenericStashFont.cs b/MLEM.Extended/Font/GenericStashFont.cs index f4c3bc0..1b497ee 100644 --- a/MLEM.Extended/Font/GenericStashFont.cs +++ b/MLEM.Extended/Font/GenericStashFont.cs @@ -29,9 +29,7 @@ namespace MLEM.Extended.Font { /// An italic version of the font public GenericStashFont(SpriteFontBase font, SpriteFontBase bold = null, SpriteFontBase italic = null) { this.Font = font; - // SpriteFontBase provides no line height, so we measure the height of a new line for most fonts - // 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.LineHeight = CalculateLineHeight(font); this.Bold = bold != null ? new GenericStashFont(bold) : this; this.Italic = italic != null ? new GenericStashFont(italic) : this; } @@ -51,5 +49,18 @@ namespace MLEM.Extended.Font { 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); + } + } + } } \ No newline at end of file diff --git a/Sandbox/Content/Fonts/TestFont.spritefont b/Sandbox/Content/Fonts/TestFont.spritefont index 54ab9ac..b44bd5d 100644 --- a/Sandbox/Content/Fonts/TestFont.spritefont +++ b/Sandbox/Content/Fonts/TestFont.spritefont @@ -11,7 +11,7 @@ with. - Arial + Cadman_Roman.otf