void InitGraphics() { //INIT ONCE if (_g != null) { return; } // _destImg = new MemBitmap(800, 600); _painter = AggPainter.Create(_destImg); _winBmp = new Bitmap(_destImg.Width, _destImg.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); _g = this.CreateGraphics(); _defaultReqFont = new PixelFarm.Drawing.RequestFont("Source Sans Pro", 10); _painter.CurrentFont = _defaultReqFont; _textService = new Typography.Text.OpenFontTextService(); _textService.LoadFontsFromFolder("../../../TestFonts"); _textService.UpdateUnicodeRanges(); _devVxsTextPrinter = new PixelFarm.Drawing.VxsTextSpanPrinter(_painter, _textService.CreateNewServiceClient()); _devVxsTextPrinter.SetSvgBmpBuilderFunc(PaintLab.SvgBuilderHelper.ParseAndRenderSvg); _devVxsTextPrinter.ScriptLang = new ScriptLang(ScriptTagDefs.Latin.Tag); _devVxsTextPrinter.PositionTechnique = Typography.TextLayout.PositionTechnique.OpenFont; //Alternative Typeface selector.. _myAlternativeTypefaceSelector = new Typography.Text.AlternativeTypefaceSelector(); { //------------ //TODO: review this again //load from config? //------------ //arabic //1. create prefer typeface list for arabic script var preferTypefaces = new Typography.FontCollections.PreferredTypefaceList(); preferTypefaces.AddTypefaceName("Noto Sans Arabic UI"); //2. set unicode ranges and prefered typeface list. _myAlternativeTypefaceSelector.SetPreferredTypefaces( new[] { Typography.TextBreak.Unicode13RangeInfoList.Arabic, Typography.TextBreak.Unicode13RangeInfoList.Arabic_Supplement, Typography.TextBreak.Unicode13RangeInfoList.Arabic_Extended_A }, preferTypefaces); } { //latin var preferTypefaces = new Typography.FontCollections.PreferredTypefaceList(); preferTypefaces.AddTypefaceName("Sarabun"); _myAlternativeTypefaceSelector.SetPreferredTypefaces( new[] { Typography.TextBreak.Unicode13RangeInfoList.C0_Controls_and_Basic_Latin, Typography.TextBreak.Unicode13RangeInfoList.C1_Controls_and_Latin_1_Supplement, Typography.TextBreak.Unicode13RangeInfoList.Latin_Extended_A, Typography.TextBreak.Unicode13RangeInfoList.Latin_Extended_B, }, preferTypefaces); } _devVxsTextPrinter.AlternativeTypefaceSelector = _myAlternativeTypefaceSelector; }
/// <summary> /// use vertex buffer object /// </summary> public GLBitmapGlyphTextPrinter(GLPainter painter, OpenFontTextService textServices) { //create text printer for use with canvas painter _painter = painter; _pcx = painter.Core; _txtClient = textServices.CreateNewServiceClient(); //_currentTextureKind = TextureKind.Msdf; //_currentTextureKind = TextureKind.StencilGreyScale; _myGLBitmapFontMx = new MySimpleGLBitmapFontManager(textServices); //-------- //load preview of pre-built texture font //temp fix, TODO: review this again string[] maybeTextureInfoFiles = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.tx_info"); if (maybeTextureInfoFiles.Length > 0) { for (int i = 0; i < maybeTextureInfoFiles.Length; ++i) { //try read using (FileStream fs = new FileStream(maybeTextureInfoFiles[i], FileMode.Open)) { try { _myGLBitmapFontMx.LoadBitmapAtlasPreview(fs); } catch (Exception ex) { } } } } //LoadFontAtlas("tahoma_set1.multisize_fontAtlas", "tahoma_set1.multisize_fontAtlas.png"); //test textures... //GlyphPosPixelSnapX = GlyphPosPixelSnapKind.Integer; //GlyphPosPixelSnapY = GlyphPosPixelSnapKind.Integer; //** //ChangeFont(painter.CurrentFont); // //TextDrawingTechnique = GlyphTexturePrinterDrawingTechnique.LcdSubPixelRendering; //default TextDrawingTechnique = GlyphTexturePrinterDrawingTechnique.Stencil; //default UseVBO = true; TextBaseline = PixelFarm.Drawing.TextBaseline.Top; //TextBaseline = TextBaseline.Alphabetic; //TextBaseline = TextBaseline.Bottom; //TODO: temp fix, //... var myAlternativeTypefaceSelector = new AlternativeTypefaceSelector(); { var preferTypefaces = new Typography.FontCollections.PreferredTypefaceList(); preferTypefaces.AddTypefaceName("Source Sans Pro"); preferTypefaces.AddTypefaceName("Sarabun"); myAlternativeTypefaceSelector.SetPreferredTypefaces( new[] { Typography.TextBreak.Unicode13RangeInfoList.C0_Controls_and_Basic_Latin, Typography.TextBreak.Unicode13RangeInfoList.C1_Controls_and_Latin_1_Supplement, Typography.TextBreak.Unicode13RangeInfoList.Latin_Extended_A, Typography.TextBreak.Unicode13RangeInfoList.Latin_Extended_B, }, preferTypefaces); } { var preferTypefaces = new Typography.FontCollections.PreferredTypefaceList(); preferTypefaces.AddTypefaceName("Twitter Color Emoji"); myAlternativeTypefaceSelector.SetPerferredEmoji(preferTypefaces); } AlternativeTypefaceSelector = myAlternativeTypefaceSelector; }