5 using System.Collections.Generic;
7 using SiliconStudio.Core.Mathematics;
8 using SiliconStudio.Core.Serialization.Contents;
9 using SiliconStudio.Core.Serialization.Converters;
16 [ContentSerializer(typeof(DataContentConverterSerializer<DynamicSpriteFont>))]
17 internal class DynamicSpriteFont : SpriteFont
22 private readonly
string fontName;
32 private readonly
bool useKerning;
42 private readonly Dictionary<CharacterKey, CharacterSpecification> sizedCharacterToCharacterData =
new Dictionary<CharacterKey, CharacterSpecification>();
44 internal FontManager FontManager
46 get {
return FontSystem.FontManager; }
49 internal FontCacheManager FontCacheManager
51 get {
return FontSystem.FontCacheManager; }
54 internal int FrameCount
56 get {
return FontSystem.FrameCount; }
59 public DynamicSpriteFont(FontSystem fontSystem, DynamicSpriteFontData fontData)
60 : base(fontSystem, fontData, true)
63 style = fontData.Style;
64 fontName = fontData.FontName;
65 useKerning = fontData.UseKerning;
66 antiAlias = fontData.AntiAlias;
69 float relativeLineSpacing;
70 float relativeBaseOffsetY;
71 float relativeMaxWidth;
72 float relativeMaxHeight;
73 FontManager.GetFontInfo(fontData.FontName, fontData.Style, out relativeLineSpacing, out relativeBaseOffsetY, out relativeMaxWidth, out relativeMaxHeight);
76 DefaultLineSpacing = relativeLineSpacing * Size;
77 BaseOffsetY = relativeBaseOffsetY * Size;
78 Textures = FontCacheManager.Textures;
79 Swizzle = SwizzleMode.RRRR;
82 public override bool IsCharPresent(
char c)
84 return FontManager.DoesFontContains(fontName, style, c);
87 protected override Glyph GetGlyph(
char character, ref
Vector2 fontSize,
bool uploadGpuResources)
90 var characterData = GetOrCreateCharacterData(fontSize, character);
93 if(characterData.Bitmap == null)
94 FontManager.GenerateBitmap(characterData,
false);
97 if (uploadGpuResources && characterData.Bitmap != null && !characterData.IsBitmapUploaded)
98 FontCacheManager.UploadCharacterBitmap(characterData);
101 FontCacheManager.NotifyCharacterUtilization(characterData);
103 return characterData.Glyph;
106 internal override void PreGenerateGlyphs(ref StringProxy text, ref
Vector2 size)
108 for (
int i = 0; i < text.Length; i++)
111 var characterData = GetOrCreateCharacterData(size, text[i]);
114 if (characterData.Bitmap == null)
115 FontManager.GenerateBitmap(characterData,
true);
119 private CharacterSpecification GetOrCreateCharacterData(
Vector2 size,
char character)
122 var lookUpKey =
new CharacterKey(character, size);
125 CharacterSpecification characterData;
126 if (!sizedCharacterToCharacterData.TryGetValue(lookUpKey, out characterData))
128 characterData =
new CharacterSpecification(character, fontName, size, style, antiAlias);
129 sizedCharacterToCharacterData[lookUpKey] = characterData;
131 return characterData;
134 private struct CharacterKey : IEquatable<CharacterKey>
136 private readonly
char character;
140 public CharacterKey(
char character,
Vector2 size)
142 this.character = character;
146 public bool Equals(CharacterKey other)
148 return character == other.character && size ==
other.size;
151 public override bool Equals(
object obj)
153 if (ReferenceEquals(null, obj))
return false;
154 return obj is CharacterKey && Equals((CharacterKey)obj);
157 public override int GetHashCode()
159 return character.GetHashCode();
Represents a two dimensional mathematical vector.
SharpDX.DirectWrite.Font Font
FontAntiAliasMode
Available antialias mode.
SiliconStudio.Paradox.Graphics.Font.FontStyle FontStyle
_In_ size_t _In_ size_t size