/// <summary> /// /// </summary> internal static void RebuildFontAssetCache() { // Iterate over loaded font assets to update affected font assets foreach (var pair in s_FontAssetReferences) { FontAssetRef fontAssetRef = pair.Value; FontAsset fontAsset = fontAssetRef.fontAsset; if (fontAsset == null) { // Remove font asset from our lookup dictionaries s_FontAssetNameReferenceLookup.Remove(fontAssetRef.nameHashCode); s_FontAssetFamilyNameAndStyleReferenceLookup.Remove(fontAssetRef.familyNameAndStyleHashCode); // Add font asset to our removal list s_FontAssetRemovalList.Add(pair.Key); continue; } fontAsset.InitializeCharacterLookupDictionary(); fontAsset.AddSynthesizedCharactersAndFaceMetrics(); } // Remove font assets in our removal list from our font asset references for (int i = 0; i < s_FontAssetRemovalList.Count; i++) { s_FontAssetReferences.Remove(s_FontAssetRemovalList[i]); } s_FontAssetRemovalList.Clear(); TextEventManager.ON_FONT_PROPERTY_CHANGED(true, null); }
/// <summary> /// Add font asset to resource manager. /// </summary> /// <param name="fontAsset">The font asset to be added.</param> internal static void AddFontAsset(FontAsset fontAsset) { int instanceID = fontAsset.instanceID; if (!s_FontAssetReferences.ContainsKey(instanceID)) { FontAssetRef fontAssetRef = new FontAssetRef(fontAsset.hashCode, fontAsset.familyNameHashCode, fontAsset.styleNameHashCode, fontAsset); s_FontAssetReferences.Add(instanceID, fontAssetRef); // Add font asset to name reference lookup if (!s_FontAssetNameReferenceLookup.ContainsKey(fontAssetRef.nameHashCode)) { s_FontAssetNameReferenceLookup.Add(fontAssetRef.nameHashCode, fontAsset); } // Add font asset to family name and style lookup if (!s_FontAssetFamilyNameAndStyleReferenceLookup.ContainsKey(fontAssetRef.familyNameAndStyleHashCode)) { s_FontAssetFamilyNameAndStyleReferenceLookup.Add(fontAssetRef.familyNameAndStyleHashCode, fontAsset); } } else { FontAssetRef fontAssetRef = s_FontAssetReferences[instanceID]; // Return if font asset name, family and style name have not changed. if (fontAssetRef.nameHashCode == fontAsset.hashCode && fontAssetRef.familyNameHashCode == fontAsset.familyNameHashCode && fontAssetRef.styleNameHashCode == fontAsset.styleNameHashCode) { return; } // Check if font asset name has changed if (fontAssetRef.nameHashCode != fontAsset.hashCode) { s_FontAssetNameReferenceLookup.Remove(fontAssetRef.nameHashCode); fontAssetRef.nameHashCode = fontAsset.hashCode; if (!s_FontAssetNameReferenceLookup.ContainsKey(fontAssetRef.nameHashCode)) { s_FontAssetNameReferenceLookup.Add(fontAssetRef.nameHashCode, fontAsset); } } // Check if family or style name has changed if (fontAssetRef.familyNameHashCode != fontAsset.familyNameHashCode || fontAssetRef.styleNameHashCode != fontAsset.styleNameHashCode) { s_FontAssetFamilyNameAndStyleReferenceLookup.Remove(fontAssetRef.familyNameAndStyleHashCode); fontAssetRef.familyNameHashCode = fontAsset.familyNameHashCode; fontAssetRef.styleNameHashCode = fontAsset.styleNameHashCode; fontAssetRef.familyNameAndStyleHashCode = (long)fontAsset.styleNameHashCode << 32 | (uint)fontAsset.familyNameHashCode; if (!s_FontAssetFamilyNameAndStyleReferenceLookup.ContainsKey(fontAssetRef.familyNameAndStyleHashCode)) { s_FontAssetFamilyNameAndStyleReferenceLookup.Add(fontAssetRef.familyNameAndStyleHashCode, fontAsset); } } s_FontAssetReferences[instanceID] = fontAssetRef; } }