/// <summary> /// get typeface from wellknown style /// </summary> /// <param name="fontname"></param> /// <param name="style"></param> /// <returns></returns> public Typeface GetTypeface(string fontname, TypefaceStyle style) { InstalledTypeface installedFont = FontCollection.GetInstalledTypeface(fontname, style); if (installedFont == null) { return(null); } return(GetTypefaceOrCreateNew(installedFont)); }
public Typeface GetTypeface(string fontname, string fontSubFam) { InstalledTypeface installedFont = FontCollection.GetInstalledTypeface(fontname, fontSubFam); //convert from if (installedFont == null) { return(null); } return(GetTypefaceOrCreateNew(installedFont)); }
Typeface GetTypefaceOrCreateNew(InstalledTypeface installedFont) { //load //check if we have create this typeface or not if (!_loadedTypefaces.TryGetValue(installedFont, out Typeface typeface)) { //TODO: review how to load font here using (var fs = new FileStream(installedFont.FontPath, FileMode.Open, FileAccess.Read)) { var reader = new OpenFontReader(); typeface = reader.Read(fs, installedFont.ActualStreamOffset); } return(_loadedTypefaces[installedFont] = typeface); } return(typeface); }
bool Register(InstalledTypeface newTypeface) { InstalledTypefaceGroup selectedFontGroup = null; string fontSubFamUpperCaseName = newTypeface.TypographicFontSubFamily; bool use_typographicSubFam = true; if (fontSubFamUpperCaseName == null) { //switch to FontSubFamily, this should not be null! fontSubFamUpperCaseName = newTypeface.FontSubFamily; use_typographicSubFam = false; } fontSubFamUpperCaseName = fontSubFamUpperCaseName.ToUpper(); //-------------- switch (newTypeface.TypefaceStyle) { default: { if (!_subFamToFontGroup.TryGetValue(fontSubFamUpperCaseName, out selectedFontGroup)) { //create new group, we don't known this font group before //so we add to 'other group' list selectedFontGroup = new InstalledTypefaceGroup(); #if DEBUG selectedFontGroup.dbugGroupName = fontSubFamUpperCaseName; #endif _subFamToFontGroup.Add(fontSubFamUpperCaseName, selectedFontGroup); _allGroups.Add(selectedFontGroup); } } break; case TypefaceStyle.Bold: selectedFontGroup = _bold; break; case TypefaceStyle.Italic: selectedFontGroup = _italic; break; case TypefaceStyle.Regular: { selectedFontGroup = _regular; if (fontSubFamUpperCaseName != "REGULAR" && !_subFamToFontGroup.TryGetValue(fontSubFamUpperCaseName, out selectedFontGroup)) { //create new group, we don't known this font group before //so we add to 'other group' list selectedFontGroup = new InstalledTypefaceGroup(); #if DEBUG selectedFontGroup.dbugGroupName = fontSubFamUpperCaseName; #endif _subFamToFontGroup.Add(fontSubFamUpperCaseName, selectedFontGroup); _allGroups.Add(selectedFontGroup); } } break; case (TypefaceStyle.Bold | TypefaceStyle.Italic): selectedFontGroup = _bold_italic; break; } //------------------ //for font management //we use 'typographic family name' if avaliable, string register_name = newTypeface.TypographicFamilyName; bool use_typographicFontFam = true; if (register_name == null) { //switch to font name, this should not be null! register_name = newTypeface.FontName; use_typographicFontFam = false; } register_name = register_name.ToUpper(); //*** bool register_result = false; if (selectedFontGroup.TryGetValue(register_name, out InstalledTypeface found)) { //TODO: //we already have this font name //(but may be different file //we let user to handle it if (_fontNameDuplicatedHandler != null) { switch (_fontNameDuplicatedHandler(found, newTypeface)) { default: throw new NotSupportedException(); case FontNameDuplicatedDecision.Skip: break; case FontNameDuplicatedDecision.Replace: selectedFontGroup.Replace(register_name, newTypeface); register_result = true; break; } } } else { selectedFontGroup.AddFont(register_name, newTypeface); register_result = true; } if (use_typographicFontFam && newTypeface.FontName != newTypeface.TypographicFamilyName && newTypeface.TypefaceStyle == TypefaceStyle.Regular) { //in this case, the code above register the typeface with TypographicFamilyName //so we register this typeface with original name too _otherFontNames.Add(newTypeface.FontName.ToUpper(), newTypeface); } return(register_result); }
public void Replace(string registerName, InstalledTypeface newone) { _members[registerName] = newone; }
public bool TryGetValue(string registerName, out InstalledTypeface found) { return(_members.TryGetValue(registerName, out found)); }
public void AddFont(string registerName, InstalledTypeface installedFont) { _members.Add(registerName, installedFont); }
bool Register(InstalledTypeface newTypeface) { InstalledTypefaceGroup selectedFontGroup = null; switch (newTypeface.TypefaceStyle) { default: { string fontSubFamUpperCaseName = newTypeface.FontSubFamily.ToUpper(); if (!_subFamToFontGroup.TryGetValue(fontSubFamUpperCaseName, out selectedFontGroup)) { //create new group, we don't known this font group before //so we add to 'other group' list selectedFontGroup = new InstalledTypefaceGroup(); _subFamToFontGroup.Add(fontSubFamUpperCaseName, selectedFontGroup); _allGroups.Add(selectedFontGroup); } } break; case TypefaceStyle.Bold: selectedFontGroup = _bold; break; case TypefaceStyle.Italic: selectedFontGroup = _italic; break; case TypefaceStyle.Regular: selectedFontGroup = _regular; break; case (TypefaceStyle.Bold | TypefaceStyle.Italic): selectedFontGroup = _bold_italic; break; } // string fontNameUpper = newTypeface.FontName.ToUpper(); InstalledTypeface found; if (selectedFontGroup.TryGetValue(fontNameUpper, out found)) { //TODO: //we already have this font name //(but may be different file //we let user to handle it if (_fontNameDuplicatedHandler != null) { switch (_fontNameDuplicatedHandler(found, newTypeface)) { default: throw new NotSupportedException(); case FontNameDuplicatedDecision.Skip: return(false); case FontNameDuplicatedDecision.Replace: selectedFontGroup.Replace(newTypeface); return(true); } } else { return(false); } } else { selectedFontGroup.AddFont(newTypeface); return(true); } }
public void Replace(InstalledTypeface newone) { _members[newone.FontName.ToUpper()] = newone; }
public bool TryGetValue(string fontName, out InstalledTypeface found) { return(_members.TryGetValue(fontName, out found)); }
public void AddFont(InstalledTypeface installedFont) { _members.Add(installedFont.FontName.ToUpper(), installedFont); }
public Typeface GetTypeface(InstalledTypeface installedFont) { return(GetTypefaceOrCreateNew(installedFont)); }