Example #1
0
        public static void BuildFontAtlas(AtlasProject atlasProj)
        {
            foreach (AtlasItemSourceFile atlasSourceFile in atlasProj.Items)
            {
                if (atlasSourceFile.Kind == AtlasItemSourceKind.FontAtlasConfig &&
                    atlasSourceFile.FontBuilderConfig != null)
                {
                    FontBuilderConfig config = atlasSourceFile.FontBuilderConfig;
                    foreach (FontBuilderTask builderTask in config.BuilderTasks)
                    {
                        //1. create glyph-texture-bitmap generator
                        var glyphTextureGen = new GlyphTextureBitmapGenerator();
                        glyphTextureGen.SetSvgBmpBuilderFunc(SvgBuilderHelper.ParseAndRenderSvg);
                        //2. generate the glyphs
                        if (builderTask.TextureKind == TextureKind.Msdf)
                        {
                            glyphTextureGen.MsdfGenVersion = 3;
                        }

                        Typography.OpenFont.Typeface typeface = atlasProj.GetTypeface(config.FontFilename);

                        //TODO: add other font styles
                        RequestFont reqFont = new RequestFont(typeface.Name, builderTask.Size, FontStyle.Regular);


                        string textureName = typeface.Name.ToLower() + "_" + reqFont.FontKey;
                        string outputDir   = Path.GetDirectoryName(atlasProj.OutputFilename);
                        FontAtlasBuilderHelper builderHelper = new FontAtlasBuilderHelper();

                        builderHelper.TextureInfoFilename = outputDir + Path.DirectorySeparatorChar + textureName;
                        builderHelper.OutputImgFilename   = outputDir + Path.DirectorySeparatorChar + textureName + ".png";

                        builderHelper.Build(glyphTextureGen,
                                            typeface,
                                            builderTask.Size,
                                            builderTask.TextureKind,
                                            builderTask.TextureBuildDetails.ToArray(),
                                            reqFont.FontKey
                                            );
                    }
                }
            }
        }
Example #2
0
        static void ReadFontBuilderConfig(AtlasItemSourceFile atlasSrcItem, XmlElement docElem)
        {
            FontBuilderConfig fontBuilderConfig = new FontBuilderConfig();

            //cut 1 extension
            //if font filename=aaa.ttf
            //configure must be aaa.ttf.xml

            fontBuilderConfig.FontFilename = Path.GetFileNameWithoutExtension(atlasSrcItem.AbsoluteFilename);
            atlasSrcItem.FontBuilderConfig = fontBuilderConfig;

            foreach (XmlElement setElem in docElem.SelectNodes("set"))
            {
                //defail
                fontBuilderConfig.SetTextureKind(setElem.GetAttribute("texture_kind"));
                foreach (XmlNode cc in setElem.ChildNodes)
                {
                    if (cc is XmlElement childElem)
                    {
                        switch (childElem.Name)
                        {
                        case "script_lang":
                            fontBuilderConfig.AddScriptLangAndHint(
                                childElem.GetAttribute("lang"),
                                childElem.GetAttribute("hint"));
                            break;

                        case "size":
                            fontBuilderConfig.SetSizeList(childElem.InnerText);
                            break;
                        }
                    }
                }
            }
            fontBuilderConfig.BuildConfigDetail();
        }