mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-22 22:09:12 +00:00
81 lines
1.9 KiB
C#
81 lines
1.9 KiB
C#
using System;
|
|
|
|
namespace Orvid.Graphics.FontSupport.fnt
|
|
{
|
|
internal class FntFontMetrics : FontMetrics
|
|
{
|
|
private Rectangle box;
|
|
|
|
public FntFontMetrics(FntFont font)
|
|
: base(font)
|
|
{
|
|
this.box = font.GetBounds();
|
|
}
|
|
|
|
public override int GetHeight()
|
|
{
|
|
return box.Height;
|
|
}
|
|
|
|
public override int GetAscent()
|
|
{
|
|
return Math.Abs(box.Y);
|
|
}
|
|
|
|
public override int GetDescent()
|
|
{
|
|
return box.Height + Math.Abs(box.Y);
|
|
}
|
|
|
|
public override int GetLeading()
|
|
{
|
|
return Math.Abs(box.X);
|
|
}
|
|
|
|
public override int GetMaxAdvance()
|
|
{
|
|
return box.Width;
|
|
}
|
|
|
|
public override int CharWidth(char ch)
|
|
{
|
|
FntGlyph g = ((FntFont)(font)).GetLoader().GetGlyph(ch);
|
|
if (g != null)
|
|
{
|
|
return (int)((g.Width + 1) & ~1);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public override int[] CharsWidths(char[] chars, int start, int len)
|
|
{
|
|
int[] advances = new int[len];
|
|
int adv_idx = 0;
|
|
|
|
for (int i = start; i < start + len; i++)
|
|
{
|
|
FntGlyph glyph = ((FntFont)(font)).GetLoader().GetGlyph(chars[i]);
|
|
if (adv_idx == 0)
|
|
{
|
|
advances[adv_idx++] = glyph.Width;
|
|
}
|
|
else
|
|
{
|
|
advances[adv_idx++] = advances[adv_idx - 1] + glyph.Width;
|
|
}
|
|
}
|
|
|
|
return advances;
|
|
}
|
|
|
|
public override int CharsWidth(char[] chars, int start, int len)
|
|
{
|
|
int total = 0;
|
|
int[] lengths = CharsWidths(chars, start, len);
|
|
for (int i = 0; i < lengths.Length; i++)
|
|
total += lengths[i];
|
|
|
|
return total;
|
|
}
|
|
}
|
|
}
|