public static sw.TextLayout GetTextLayout(Font font, string text) { var fontHandler = (FontHandler)font.Handler; var textLayout = new sw.TextLayout(SDFactory.DirectWriteFactory, text, fontHandler.TextFormat, float.MaxValue, float.MaxValue); if (font.Strikethrough) { textLayout.SetStrikethrough(true, new sw.TextRange(0, text.Length)); } if (font.Underline) { textLayout.SetUnderline(true, new sw.TextRange(0, text.Length)); } return(textLayout); }
public DW.TextLayout GetTextLayout(Text.Font font, string text, float maxWidth) { var tl = new DW.TextLayout( _factory, text, GetTextFormat(font), maxWidth, 9999999 ); // ReSharper disable once SwitchStatementMissingSomeCases switch (font.TextDecoration) { case TextDecoration.LineThrough: tl.SetStrikethrough(true, new DW.TextRange(0, text.Length)); break; case TextDecoration.Underline: tl.SetUnderline(true, new DW.TextRange(0, text.Length)); break; } return(tl); }
static void Main(string[] args) { mainForm = new RenderForm("Advanced Text rendering demo"); d2dFactory = new D2DFactory(); dwFactory = new DWriteFactory(SharpDX.DirectWrite.FactoryType.Shared); textRenderer = new CustomColorRenderer(); CreateResources(); var bgcolor = new Color4(0.1f,0.1f,0.1f,1.0f); //This is the offset where we start our text layout Vector2 offset = new Vector2(202.0f,250.0f); textFormat = new TextFormat(dwFactory, "Arial", FontWeight.Regular, FontStyle.Normal, 16.0f); textLayout = new TextLayout(dwFactory, introText, textFormat, 300.0f, 200.0f); //Apply various modifications to text textLayout.SetUnderline(true, new TextRange(0, 5)); textLayout.SetDrawingEffect(greenBrush, new TextRange(10, 20)); textLayout.SetFontSize(24.0f, new TextRange(6, 4)); textLayout.SetFontFamilyName("Comic Sans MS", new TextRange(11,7)); //Measure full layout var textSize = textLayout.Metrics; fullTextBackground = new RectangleF(textSize.Left + offset.X, textSize.Top + offset.Y, textSize.Width, textSize.Height); //Measure text to apply background to var metrics = textLayout.HitTestTextRange(53, 4, 0.0f, 0.0f)[0]; textRegionRect = new RectangleF(metrics.Left + offset.X, metrics.Top + offset.Y, metrics.Width, metrics.Height); //Assign render target and brush to our custom renderer textRenderer.AssignResources(renderTarget, defaultBrush); RenderLoop.Run(mainForm, () => { renderTarget.BeginDraw(); renderTarget.Clear(bgcolor); renderTarget.FillRectangle(fullTextBackground, backgroundBrush); renderTarget.FillRectangle(textRegionRect, redBrush); textLayout.Draw(textRenderer, offset.X, offset.Y); try { renderTarget.EndDraw(); } catch { CreateResources(); } }); d2dFactory.Dispose(); dwFactory.Dispose(); renderTarget.Dispose(); }
/// <summary> /// Inits the font family names from DirectWrite /// </summary> private void InitTextFormatLayout() { FontFamilyName = "Gabriola"; FontSize = 72; FontText = "Client Drawing Effect Example!"; // Initialize a TextFormat CurrentTextFormat = new TextFormat(FactoryDWrite, FontFamilyName, FontSize) { TextAlignment = TextAlignment.Center, ParagraphAlignment = ParagraphAlignment.Center }; CurrentTextLayout = new TextLayout(FactoryDWrite, FontText, CurrentTextFormat, ClientRectangle.Width, ClientRectangle.Height); RedDrawingeffect = new ColorDrawingEffect(Color.Red); BlueDrawingEffect = new ColorDrawingEffect(Color.Blue); GreenDrawingEffect = new ColorDrawingEffect(Color.Green); CurrentTextLayout.SetDrawingEffect(RedDrawingeffect, new TextRange(0, 14)); CurrentTextLayout.SetDrawingEffect(BlueDrawingEffect, new TextRange(14, 7)); CurrentTextLayout.SetDrawingEffect(GreenDrawingEffect, new TextRange(21, 8)); CurrentTextLayout.SetUnderline(true, new TextRange(0, 20)); CurrentTextLayout.SetStrikethrough(true, new TextRange(22, 7)); // Set a stylistic typography using (var typo = new Typography(FactoryDWrite)) { typo.AddFontFeature(new FontFeature(FontFeatureTag.StylisticSet7, 1)); CurrentTextLayout.SetTypography(typo, CurrentTextRange); } }