public BorderedFont(Texture2D borderedTexture, Texture2D innerTexture, string borderedDefStr, string innerDefStr, string kerning, bool isRetina) { Kerning = kerning == "" ? null : new KerningDef(kerning, isRetina); Border = new SubFont(borderedTexture, borderedDefStr, Kerning, isRetina); Inner = new SubFont(innerTexture, innerDefStr, Kerning, isRetina); }
public SubFont(Texture2D texture, string def, KerningDef kerning, bool isRetina) { _kerning = kerning; IsRetina = isRetina; string[] split = def.Split(' ', '\r', '\n'); int idx = 0; while (idx < split.Length - 2) { //Read this char char i = split[idx][0]; idx++; var width = int.Parse(split[idx]); idx++; var height = int.Parse(split[idx]); idx++; var x = int.Parse(split[idx]); idx++; var y = int.Parse(split[idx]); idx++; float xOffset = int.Parse(split[idx]); idx++; float yOffset = int.Parse(split[idx]); idx++; float xAdvance = int.Parse(split[idx]); idx++; if (isRetina) { xOffset *= 0.5f; yOffset *= 0.5f; xAdvance *= 0.5f; } _characters[i] = new CharDetail { Texture = new SubTexture2D(texture, new Rectangle(x, y, width, height), isRetina), XOffset = xOffset, YOffset = yOffset, XAdvance = xAdvance }; } AboveLineSize = _characters.Select(x => x.Value.YOffset).Max(); SpaceWidth = int.Parse(split[idx]); idx++; LineHeight = int.Parse(split[idx]); if (IsRetina) { SpaceWidth *= 0.5f; LineHeight *= 0.5f; } }