Exemple #1
0
        /// <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));
        }
Exemple #2
0
        public Typeface GetTypeface(string fontname, string fontSubFam)
        {
            InstalledTypeface installedFont = FontCollection.GetInstalledTypeface(fontname, fontSubFam);

            //convert from
            if (installedFont == null)
            {
                return(null);
            }
            return(GetTypefaceOrCreateNew(installedFont));
        }
Exemple #3
0
 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);
 }
Exemple #4
0
        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);
        }
Exemple #5
0
 public void Replace(string registerName, InstalledTypeface newone)
 {
     _members[registerName] = newone;
 }
Exemple #6
0
 public bool TryGetValue(string registerName, out InstalledTypeface found)
 {
     return(_members.TryGetValue(registerName, out found));
 }
Exemple #7
0
 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);
 }
Exemple #12
0
 public Typeface GetTypeface(InstalledTypeface installedFont)
 {
     return(GetTypefaceOrCreateNew(installedFont));
 }