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();
}