private void Form1_Shown(object sender, EventArgs e) { Debug.WriteLine("Form1_Shown"); surface = new Win32Surface(this.CreateGraphics().GetHdc()); context = new Context(surface); textFormat = DWriteCairo.CreateTextFormat( "Consolas", FontWeight.Normal, FontStyle.Normal, FontStretch.Normal, 12); textFormat.TextAlignment = TextAlignment.Center; float left, top, width, height; // get actual size of the text var measureLayout = DWriteCairo.CreateTextLayout(s, textFormat, 4096, 4096); measureLayout.GetRect(out left, out top, out width, out height); measureLayout.Dispose(); // build text context against the size and format textLayout = DWriteCairo.CreateTextLayout(s, textFormat, (int)Math.Ceiling(width), (int)Math.Ceiling(height)); Debug.WriteLine("showing layout"); Path path = DWriteCairo.RenderLayoutToCairoPath(context, textLayout); context.AppendPath(path); context.Fill(); textLayout.GetRect(out left, out top, out width, out height); textRect = new System.Drawing.RectangleF(left, top, width, height); context.Rectangle(left, top, width, height); context.Stroke(); context.GetTarget().Flush(); }