What settings to use when building the font
Inheritance: QFontConfiguration
Esempio n. 1
0
        public IFont GetFont(string name, int size, Weight weight, bool italic)
        {
            var fontStyle = GetFontStyle(weight, italic);

            var fce = new FontCacheEntry
            {
                FontFace = name,
                FontSize = size,
                FontStyle = fontStyle
            };

            QFont font;

            var config = new QFontBuilderConfiguration(false)
            {
                TextGenerationRenderHint = GetFontFaceRenderHintingPreference(name),
                GlyphMargin = 2,
                TransformToCurrentOrthogProjection = true,
                KerningConfig =
                {
                    alphaEmptyPixelTolerance = 40,
                },
            };

            if (!_fontCache.TryGetValue(fce, out font))
            {
                var sysFont = GetFontBestSizeFit(name, size, fontStyle);

                font = new QFont(sysFont, config);

                _fontCache[fce] = font;
            }

            return new WrappedFont(font);
        }
		public void RegisterFont(EFonts _font, string _fileName, int _pointSize)
		{
            if(!File.Exists(_fileName))
            {
                throw new ApplicationException("Не найден файл " + Path.GetFullPath(_fileName));
            }
			var charSet = new List<char>();
			for (var c = ' '; c < '}'; ++c)
			{
				charSet.Add(c);
			}
			for (var c = 'А'; c <= 'я'; ++c)
			{
				charSet.Add(c);
			}
			var s = new string(charSet.ToArray());
			var qfc = new QFontBuilderConfiguration
			              {
			          		charSet = s,
                            TextGenerationRenderHint = TextGenerationRenderHint.SizeDependent | TextGenerationRenderHint.AntiAlias,
							SuperSampleLevels = 4,
			          	};
			var qFont = new QFont(_fileName, _pointSize, FontStyle.Bold, qfc);

			m_fonts[_font] = qFont;
		}
Esempio n. 3
0
 public Builder(Font font, QFontBuilderConfiguration config, QFontShadowConfiguration shadowConfig)
 {
     this.charSet = config.charSet;
     this.config = config;
     this.shadowConfig = shadowConfig;
     this.font = font;
 }
Esempio n. 4
0
        public QFont(string fileName, float size, FontStyle style, QFontBuilderConfiguration config)
        {
            PrivateFontCollection pfc = new PrivateFontCollection();
            pfc.AddFontFile(fileName);
            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
                throw new ArgumentException("Font file: " + fileName + " does not support style: " +  style );

            if (config == null)
                config = new QFontBuilderConfiguration();

            TransformViewport? transToVp = null;
            float fontScale = 1f;
            if (config.TransformToCurrentOrthogProjection)
                transToVp = OrthogonalTransform(out fontScale);

            using(var font = new Font(fontFamily, size * fontScale * config.SuperSampleLevels, style)){
                fontData = BuildFont(font, config, null);
            }

            if (config.ShadowConfig != null)
                Options.DropShadowActive = true;
            if (transToVp != null)
                Options.TransformToViewport = transToVp;

            if(config.UseVertexBuffer)
                InitVBOs();
        }
        public FontLoadDescription(String Path, float Size, FontStyle Style, QFontBuilderConfiguration BuilderConfig){
            Method = FontLoadMethod.FontFile;

            this.Path = Path;
            this.Size = Size;
            this.Style = Style;
            this.BuilderConfig = BuilderConfig;
        }
Esempio n. 6
0
        public QFont(Font font, QFontBuilderConfiguration config)
        {
            if (config == null)
                config = new QFontBuilderConfiguration();

            fontData = BuildFont(font, config, null);

            if (config.ShadowConfig != null)
                Options.DropShadowActive = true;
        }
Esempio n. 7
0
        public QFont(IFontRenderer renderer, Font font, QFontBuilderConfiguration config = null)
            : this(renderer)
        {
            if (config == null)
                config = new QFontBuilderConfiguration();

            fontData = BuildFont(font, config, null);
            LoadTextures(fontData);

            if (config.ShadowConfig != null)
                Options.DropShadowActive = true;
        }
Esempio n. 8
0
        public QFont(Font font, QFontBuilderConfiguration config)
        {
            optionsStack.Push(new QFontRenderOptions());

            if (config == null)
                config = new QFontBuilderConfiguration();

            fontData = BuildFont(font, config, null);

            if (config.ShadowConfig != null)
                Options.DropShadowActive = true;

            if (config.UseVertexBuffer)
                InitVBOs();
        }
Esempio n. 9
0
        public QFont(string fileName, float size, FontStyle style, QFontBuilderConfiguration config, QFontShadowConfiguration shadowConfig)
        {
            PrivateFontCollection pfc = new PrivateFontCollection();
            pfc.AddFontFile(fileName);
            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
                throw new ArgumentException("Font file: " + fileName + " does not support style: " +  style );

            if (config == null)
                config = new QFontBuilderConfiguration();

            using (var font = new Font(fontFamily, size * config.SuperSampleLevels, style))
            {
                fontData = BuildFont(font, config, shadowConfig, null);
            }

            if (shadowConfig != null)
                options.DropShadowActive = true;
        }
Esempio n. 10
0
		public NxFont (string fileName, float size, float height, FontStyle style, NxFontBuilderConfiguration config)
		{
			optionsStack = new ConcurrentStack<QFontRenderOptions> ();
			PrivateFontCollection pfc = new PrivateFontCollection();
			pfc.AddFontFile(fileName);
			var fontFamily = pfc.Families[0];

			if (!fontFamily.IsStyleAvailable(style))
				throw new ArgumentException("Font file: " + fileName + " does not support style: " +  style );

			if (config == null)
			{
				throw new ArgumentNullException ("config");
			}

			float fontScale;
			var transToVp = SetupTransformViewport (height, config.TransformToCurrentOrthogProjection, config.Transform, out fontScale);

			var internalConfig = new QFontBuilderConfiguration (config.AddDropShadow);
			internalConfig.SuperSampleLevels = config.SuperSampleLevels;
			if (internalConfig.ShadowConfig != null)
			{
				internalConfig.ShadowConfig.blurRadius = config.BlurRadius;
			}
			using(var font = new Font(fontFamily, size * fontScale * config.SuperSampleLevels, style)){
				var builder = new Builder<NxFont>(font, internalConfig);
				NxFont dropShadowFont;
				fontData = builder.BuildFontData(null, out dropShadowFont);
				DropShadow = dropShadowFont;
			}

			if (internalConfig.ShadowConfig != null)
				Options.DropShadowActive = true;
			if (transToVp != null)
				Options.TransformToViewport = transToVp;

			InitialiseGlyphRenderer(config.CharacterOutput, config.FontGlyphRenderer, config.DropShadowRenderer);
		}
Esempio n. 11
0
 public QFont(string fontname, byte[] fontresource, float size, QFontBuilderConfiguration config, QFontShadowConfiguration shadowConfig) : this(fontname, fontresource, size, FontStyle.Regular, config, shadowConfig)
 {
 }
Esempio n. 12
0
        private void LoadQFontFromFontFile(FontLoadDescription loadDescription)
        {
            var config = loadDescription.BuilderConfig;
            var fileName = loadDescription.Path;
            var size = loadDescription.Size;
            var style = loadDescription.Style;

            if (config == null)
                config = new QFontBuilderConfiguration();

            TransformViewport? transToVp = null;
            float fontScale = 1f;
            if (config.TransformToCurrentOrthogProjection)
                transToVp = OrthogonalTransform(out fontScale);

            //dont move this into a separate method - it needs to stay in scope!
            PrivateFontCollection pfc = new PrivateFontCollection();
            pfc.AddFontFile(fileName);
            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
                throw new ArgumentException("Font file: " + fileName + " does not support style: " + style);


            var font = new Font(fontFamily, size * fontScale * config.SuperSampleLevels, style);
            //var font = ObtainFont(fileName, size * fontScale * config.SuperSampleLevels, style)
            fontData = BuildFont(font, config, null);
            fontData.scaleDueToTransformToViewport = fontScale;
            font.Dispose();



            if (config.ShadowConfig != null)
                Options.DropShadowActive = true;
            if (transToVp != null)
                Options.TransformToViewport = transToVp;
        }
Esempio n. 13
0
 public static void CreateTextureFontFiles(string fileName, float size, QFontBuilderConfiguration config, string newFontName)
 {
     CreateTextureFontFiles(fileName, size, FontStyle.Regular, config, newFontName);
 }
Esempio n. 14
0
 public QFont(Font font, QFontBuilderConfiguration config) : this(font, config, null)
 {
 }
Esempio n. 15
0
        public static void CreateTextureFontFiles(string fileName, float size, FontStyle style, QFontBuilderConfiguration config, string newFontName)
        {

            QFontData fontData = null;
            if (config == null)
                config = new QFontBuilderConfiguration();


            //dont move this into a separate method - it needs to stay in scope!
            PrivateFontCollection pfc = new PrivateFontCollection();
            pfc.AddFontFile(fileName);
            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
                throw new ArgumentException("Font file: " + fileName + " does not support style: " + style);

            var font = new Font(fontFamily, size * config.SuperSampleLevels, style);
            //var font = ObtainFont(fileName, size * config.SuperSampleLevels, style);
            try
            {
                fontData = BuildFont(font, config, newFontName);
            }
            finally
            {
                if (font != null)
                    font.Dispose();
            }

            Builder.SaveQFontDataToFile(fontData, newFontName);
            
        }
Esempio n. 16
0
        public static void CreateTextureFontFiles(string fileName, float size, FontStyle style, QFontBuilderConfiguration config, string newFontName)
        {
            PrivateFontCollection pfc = new PrivateFontCollection();

            pfc.AddFontFile(fileName);
            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
            {
                throw new ArgumentException("Font file: " + fileName + " does not support style: " + style);
            }

            QFontData fontData = null;

            if (config == null)
            {
                config = new QFontBuilderConfiguration();
            }


            using (var font = new Font(fontFamily, size * config.SuperSampleLevels, style)){
                fontData = BuildFont(font, config, newFontName);
            }

            Builder.SaveQFontDataToFile(fontData, newFontName);
        }
Esempio n. 17
0
 public QFont(IFontRenderer renderer, string fileName, float size, FontStyle style = FontStyle.Regular, QFontBuilderConfiguration config = null)
 {
     this.renderer = renderer;
     fontLoadDescription = new FontLoadDescription(fileName, size, style, config);
     LoadQFontFromFontFile(fontLoadDescription);
 }
Esempio n. 18
0
 public static void CreateTextureFontFiles(string fileName, float size, QFontBuilderConfiguration config, string newFontName)
 {
     CreateTextureFontFiles(fileName, size, FontStyle.Regular, config, newFontName);
 }
Esempio n. 19
0
        public static void CreateTextureFontFiles(string fileName, float size, FontStyle style, QFontBuilderConfiguration config, string newFontName)
        {
            QFontData fontData = null;

            if (config == null)
            {
                config = new QFontBuilderConfiguration();
            }


            //dont move this into a separate method - it needs to stay in scope!
            PrivateFontCollection pfc = new PrivateFontCollection();

            pfc.AddFontFile(fileName);
            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
            {
                throw new ArgumentException("Font file: " + fileName + " does not support style: " + style);
            }

            var font = new Font(fontFamily, size * config.SuperSampleLevels, style);

            //var font = ObtainFont(fileName, size * config.SuperSampleLevels, style);
            try
            {
                fontData = BuildFont(font, config, newFontName);
            }
            finally
            {
                if (font != null)
                {
                    font.Dispose();
                }
            }

            Builder.SaveQFontDataToFile(fontData, newFontName);
        }
Esempio n. 20
0
 public QFont(string fileName, float size, FontStyle style, QFontBuilderConfiguration config)
 {
     fontLoadDescription = new FontLoadDescription(fileName, size, style, config);
     LoadQFontFromFontFile(fontLoadDescription);
 }
Esempio n. 21
0
        public static void CreateTextureFontFiles(Font font, string newFontName, QFontBuilderConfiguration config)
        {
            var fontData = BuildFont(font, config, newFontName);

            Builder.SaveQFontDataToFile(fontData, newFontName);
        }
Esempio n. 22
0
 public QFont(string fileName, float size, QFontBuilderConfiguration config) : this(fileName, size, FontStyle.Regular, config)
 {
 }
Esempio n. 23
0
 public Builder(IFont font, QFontBuilderConfiguration config)
 {
     _charSet = config.CharSet;
     _config  = config;
     _font    = font;
 }
Esempio n. 24
0
 /// <summary>
 ///     Initialise QFont from a System.Drawing.Font object
 /// </summary>
 /// <param name="font"></param>
 /// <param name="config"></param>
 public QFont(Font font, QFontBuilderConfiguration config = null)
 {
     InitialiseGlFont(font, config);
 }
Esempio n. 25
0
 public QFont(string fileName, float size, QFontBuilderConfiguration config)
     : this(fileName, size, FontStyle.Regular, config)
 {
 }
Esempio n. 26
0
        private static QFontData BuildFont(Font font, QFontBuilderConfiguration config, string saveName)
        {
            Builder builder = new Builder(font, config);

            return(builder.BuildFontData(saveName));
        }
Esempio n. 27
0
 public static void CreateTextureFontFiles(string fileName, float size, string newFontName, QFontBuilderConfiguration config, FontStyle style = FontStyle.Regular)
 {
     using (Font font = GetFont(fileName, size, style, config == null ? 1 : config.SuperSampleLevels))
     {
         CreateTextureFontFiles(font, newFontName, config);
     }
 }
Esempio n. 28
0
        private void LoadQFontFromFontFile(FontLoadDescription loadDescription)
        {
            var config = loadDescription.BuilderConfig;
            var fileName = loadDescription.Path;
            var size = loadDescription.Size;
            var style = loadDescription.Style;

            if (config == null)
                config = new QFontBuilderConfiguration();

            TransformViewport? transToVp = null;

            float dpiX, dpiY;
            float fontScale = 1.0f;
            using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
            {
                dpiX = graphics.DpiX;
                dpiY = graphics.DpiY;
            }

            float distancefrom120 = 120 - dpiX;
            float percent = (120 - distancefrom120) / 120;

            if (dpiX != 120f)
                if (percent > 1)
                    fontScale = 1 - Math.Abs(percent - 1);
                else
                    fontScale = 1f + (1 - percent);

            fontScale = Math.Abs(fontScale);

            if (config.TransformToCurrentOrthogProjection)
                transToVp = OrthogonalTransform(out fontScale);

            //dont move this into a separate method - it needs to stay in scope!
            PrivateFontCollection pfc = new PrivateFontCollection();
            pfc.AddFontFile(fileName);
            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
                throw new ArgumentException("Font file: " + fileName + " does not support style: " + style);


            var font = new Font(fontFamily, size * fontScale * config.SuperSampleLevels, style);
            //var font = ObtainFont(fileName, size * fontScale * config.SuperSampleLevels, style)
            fontData = BuildFont(font, config, null);
            fontData.scaleDueToTransformToViewport = fontScale;
            font.Dispose();

            if (config.ShadowConfig != null)
                Options.DropShadowActive = true;
            if (transToVp != null)
                Options.TransformToViewport = transToVp;
        }
        /// <summary>
        /// Self explanatory, sets up the Qfont parameters
        /// </summary>
        private void setupFont()
        {
            var config = new QFontBuilderConfiguration()
            {
                UseVertexBuffer = true,
                TextGenerationRenderHint = TextGenerationRenderHint.SystemDefault
            };

            mFont = new QFont( "Core/times.ttf", 16, config );

            //mFont.PrintToVBO( "i love", new Vector3( 0, 0, 0 ), Color.Red );
            //mFont.PrintToVBO( "quickfont", new Vector3( 0, 10, 0 ), Color.Blue );
            mFont.LoadVBOs();
        }
Esempio n. 30
0
 public QFont(string fontname, byte[] fontresource, float size, QFontBuilderConfiguration config, QFontShadowConfiguration shadowConfig)
     : this(fontname, fontresource, size, FontStyle.Regular, config, shadowConfig)
 {
 }
Esempio n. 31
0
        public QFont GetQFont(Font font)
        {
            QFont qfont;
            if(FontMap.TryGetValue(font, out qfont))
                return qfont;

            var config = new QFontBuilderConfiguration()
            {
                UseVertexBuffer = true,
                TextGenerationRenderHint = TextGenerationRenderHint.AntiAliasGridFit
            };

            qfont = new QFont(font, config);
            qfont.Options.TransformToViewport = null;
            qfont.Options.WordWrap = false;

            FontMap[font] = qfont;
            return qfont;
        }
Esempio n. 32
0
 /// <summary>
 /// Initializes a new <see cref="FontConstructionConfig" /> with a builder configuration
 /// and optional loader configuration.
 /// </summary>
 /// <param name="buildConfig">The builder configuration to use.</param>
 /// <param name="loadConfig">Optional loader configuration to set.</param>
 public FontConstructionConfig(QFontBuilderConfiguration buildConfig, QFontLoaderConfiguration loadConfig = null)
 {
     BuildConfig = buildConfig;
     LoadConfig = loadConfig;
 }
Esempio n. 33
0
 public QFont(string fileName, float size, FontStyle style, QFontBuilderConfiguration config)
 {
     fontLoadDescription = new FontLoadDescription(fileName, size, style, config);
     LoadQFontFromFontFile(fontLoadDescription);
 }
Esempio n. 34
0
 public QFont(Font font, QFontBuilderConfiguration config)
     : this(font, config, null)
 {
 }
Esempio n. 35
0
        public QFont(string fontname, byte[] fontresource, float size, FontStyle style, QFontBuilderConfiguration config, QFontShadowConfiguration shadowConfig)
        {
            // This should be probably a field of some class
            PrivateFontCollection pfc = new PrivateFontCollection();

            // allocate memory and copy byte[] to the location
            IntPtr data = Marshal.AllocCoTaskMem(fontresource.Length);

            Marshal.Copy(fontresource, 0, data, fontresource.Length);

            // pass the font to the font collection
            pfc.AddMemoryFont(data, fontresource.Length);

            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
            {
                throw new ArgumentException("Font Resource: " + fontname + " does not support style: " + style);
            }

            if (config == null)
            {
                config = new QFontBuilderConfiguration();
            }

            using (var font = new Font(fontFamily, size * config.SuperSampleLevels, style))
            {
                fontData = BuildFont(font, config, shadowConfig, null);
            }

            if (shadowConfig != null)
            {
                options.DropShadowActive = true;
            }

            // Free the unsafe memory
            Marshal.FreeCoTaskMem(data);
        }
Esempio n. 36
0
		private static QFontData BuildFont(Font font, QFontBuilderConfiguration config, string saveName, out QFont dropShadowFont){

			var builder = new Builder<QFont>(font, config);
			return builder.BuildFontData(saveName, out dropShadowFont);
        }
Esempio n. 37
0
 public static void CreateTextureFontFiles(Font font, string newFontName, QFontBuilderConfiguration config)
 {
     var fontData = BuildFont(font, config, newFontName);
     Builder.SaveQFontDataToFile(fontData, newFontName);
 }
Esempio n. 38
0
        public static void CreateTextureFontFiles(Font font, string newFontName, QFontBuilderConfiguration config)
        {
			QFont dropShadowFont;
			var fontData = BuildFont(font, config, newFontName, out dropShadowFont);

			Helper.SaveQFontDataToFile(fontData, newFontName);
        }
Esempio n. 39
0
        public static void CreateTextureFontFiles(string fileName, float size, FontStyle style, QFontBuilderConfiguration config, string newFontName)
        {
            PrivateFontCollection pfc = new PrivateFontCollection();
            pfc.AddFontFile(fileName);
            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
                throw new ArgumentException("Font file: " + fileName + " does not support style: " + style);

            QFontData fontData = null;
            if (config == null)
                config = new QFontBuilderConfiguration();

            using(var font = new Font(fontFamily, size * config.SuperSampleLevels, style)){
                fontData  = BuildFont(font, config, newFontName);
            }

            Builder.SaveQFontDataToFile(fontData, newFontName);
        }
 public FontLoadDescription(Font font, QFontBuilderConfiguration config){
     Method = FontLoadMethod.FontObject;
     //we don't reload fonts loaded direct from a font object...
 }
Esempio n. 41
0
 private static QFontData BuildFont(Font font, QFontBuilderConfiguration config, string saveName)
 {
     Builder builder = new Builder(font, config);
     return builder.BuildFontData(saveName);
 }
        /// <summary>Load resources here.</summary>
        /// <param name="e">Not used.</param>
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            this.Keyboard.KeyDown += KeyDown;


            /*
            QFontBuilderConfiguration config = new QFontBuilderConfiguration();
            config.PageWidth = 1024;
            config.PageHeight = 1024;
            config.GlyphMargin = 6;
            QFont.CreateTextureFontFiles("BURNSTOW.TTF", 120, config, "metalFont");
            */


            heading2 = QFont.FromQFontFile("woodenFont.qfont", 1.0f, new QFontLoaderConfiguration(true));

            var builderConfig = new QFontBuilderConfiguration(true);
            builderConfig.ShadowConfig.blurRadius = 1; //reduce blur radius because font is very small
            builderConfig.TextGenerationRenderHint = TextGenerationRenderHint.ClearTypeGridFit; //best render hint for this font
            mainText = new QFont("Fonts/times.ttf", 14, builderConfig);

          
            heading1 = new QFont("Fonts/HappySans.ttf", 72, new QFontBuilderConfiguration(true));
          

            controlsText = new QFont("Fonts/HappySans.ttf", 32, new QFontBuilderConfiguration(true));


            codeText = new QFont("Fonts/Comfortaa-Regular.ttf", 12,FontStyle.Regular);

            heading1.Options.Colour = new Color4(0.2f, 0.2f, 0.2f, 1.0f);
            mainText.Options.Colour = new Color4(0.1f, 0.1f, 0.1f, 1.0f);
            mainText.Options.DropShadowActive = false;
            codeText.Options.Colour = new Color4(0.0f, 0.0f, 0.4f, 1.0f);

            QFontBuilderConfiguration config2 = new QFontBuilderConfiguration();
            config2.SuperSampleLevels = 1;
         //   font = new QFont("Fonts/times.ttf", 16,config2);
         //   font.Options.Colour = new Color4(0.1f, 0.1f, 0.1f, 1.0f);
         //   font.Options.CharacterSpacing = 0.1f;


            monoSpaced = new QFont("Fonts/Anonymous.ttf", 10);
            monoSpaced.Options.Colour = new Color4(0.1f, 0.1f, 0.1f, 1.0f);

            Console.WriteLine(" Monospaced : " + monoSpaced.IsMonospacingActive);


            GL.ClearColor(1.0f, 1.0f, 1.0f, 0.0f);
            GL.Disable(EnableCap.DepthTest);

        }
Esempio n. 43
0
        public QFont(string fontname, byte[] fontresource, float size, FontStyle style, QFontBuilderConfiguration config, QFontShadowConfiguration shadowConfig)
        {
            // This should be probably a field of some class
            PrivateFontCollection pfc = new PrivateFontCollection();

            // allocate memory and copy byte[] to the location
            IntPtr data = Marshal.AllocCoTaskMem(fontresource.Length);
            Marshal.Copy(fontresource, 0, data, fontresource.Length);

            // pass the font to the font collection
            pfc.AddMemoryFont(data, fontresource.Length);

            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
                throw new ArgumentException("Font Resource: " + fontname + " does not support style: " + style);

            if (config == null)
                config = new QFontBuilderConfiguration();

            using (var font = new Font(fontFamily, size * config.SuperSampleLevels, style))
            {
                fontData = BuildFont(font, config, shadowConfig, null);
            }

            if (shadowConfig != null)
                options.DropShadowActive = true;

            // Free the unsafe memory
            Marshal.FreeCoTaskMem(data);
        }
Esempio n. 44
0
        private void LoadQFontFromFontFile(FontLoadDescription loadDescription)
        {
            var config   = loadDescription.BuilderConfig;
            var fileName = loadDescription.Path;
            var size     = loadDescription.Size;
            var style    = loadDescription.Style;

            if (config == null)
            {
                config = new QFontBuilderConfiguration();
            }

            TransformViewport?transToVp = null;

            float dpiX, dpiY;
            float fontScale = 1.0f;

            using (Graphics graphics = Graphics.FromHwnd(IntPtr.Zero))
            {
                dpiX = graphics.DpiX;
                dpiY = graphics.DpiY;
            }

            float distancefrom120 = 120 - dpiX;
            float percent         = (120 - distancefrom120) / 120;

            if (dpiX != 120f)
            {
                if (percent > 1)
                {
                    fontScale = 1 - Math.Abs(percent - 1);
                }
                else
                {
                    fontScale = 1f + (1 - percent);
                }
            }

            fontScale = Math.Abs(fontScale);

            if (config.TransformToCurrentOrthogProjection)
            {
                transToVp = OrthogonalTransform(out fontScale);
            }

            //dont move this into a separate method - it needs to stay in scope!
            PrivateFontCollection pfc = new PrivateFontCollection();

            pfc.AddFontFile(fileName);
            var fontFamily = pfc.Families[0];

            if (!fontFamily.IsStyleAvailable(style))
            {
                throw new ArgumentException("Font file: " + fileName + " does not support style: " + style);
            }


            var font = new Font(fontFamily, size * fontScale * config.SuperSampleLevels, style);

            //var font = ObtainFont(fileName, size * fontScale * config.SuperSampleLevels, style)
            fontData = BuildFont(font, config, null);
            fontData.scaleDueToTransformToViewport = fontScale;
            font.Dispose();

            if (config.ShadowConfig != null)
            {
                Options.DropShadowActive = true;
            }
            if (transToVp != null)
            {
                Options.TransformToViewport = transToVp;
            }
        }