mirror of
https://github.com/danbulant/Cosmos
synced 2026-05-19 20:39:01 +00:00
84 lines
2 KiB
C#
84 lines
2 KiB
C#
using System;
|
|
|
|
namespace Orvid.Graphics.FontSupport.bdf
|
|
{
|
|
public class BDFMetrics
|
|
{
|
|
private BDFFontContainer font;
|
|
private BDFParser.Rectangle box;
|
|
|
|
public BDFMetrics(BDFFontContainer font)
|
|
{
|
|
this.font = font;
|
|
this.box = font.getBoundingBox();
|
|
}
|
|
|
|
public int getAscent()
|
|
{
|
|
return box.height - getDescent();
|
|
}
|
|
|
|
public int getDescent()
|
|
{
|
|
return Math.Abs(box.y);
|
|
}
|
|
|
|
public int getLeading()
|
|
{
|
|
return Math.Abs(box.x);
|
|
}
|
|
|
|
public int getMaxAdvance()
|
|
{
|
|
return box.width;
|
|
}
|
|
|
|
public int getHeight()
|
|
{
|
|
return box.height;
|
|
}
|
|
|
|
public int charWidth(char ch)
|
|
{
|
|
BDFGlyph g = font.getGlyph(ch);
|
|
if (g != null)
|
|
{
|
|
BDFParser.Rectangle r = g.getBbx();
|
|
r.width = (r.width + 1) & ~1;
|
|
return r.width;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public int[] charsWidths(char[] chars, int start, int length)
|
|
{
|
|
int[] advances = new int[length];
|
|
int adv_idx = 0;
|
|
|
|
for (int i = start; i < start + length; i++)
|
|
{
|
|
BDFGlyph glyph = font.getGlyph(chars[i]);
|
|
if (adv_idx == 0)
|
|
{
|
|
advances[adv_idx++] = glyph.getDWidth().width;
|
|
}
|
|
else
|
|
{
|
|
advances[adv_idx++] = advances[adv_idx - 1] + glyph.getDWidth().width;
|
|
}
|
|
}
|
|
|
|
return advances;
|
|
}
|
|
|
|
public int charsWidth(char[] chars, int start, int end)
|
|
{
|
|
int total = 0;
|
|
int[] lengths = charsWidths(chars, start, end);
|
|
for (int i = 0; i < lengths.Length; i++)
|
|
total += lengths[i];
|
|
|
|
return total;
|
|
}
|
|
}
|
|
}
|