Example #1
0
        public unsafe void DrawTextLayout(TextLayout layout, Color color, float x, float y)
        {
            layout.Run();
            layout.Font.ApplyToSKPaint(skPaint, PageUnit, DpiX);
            skPaint.Color        = new SKColor((uint)color.Value);
            skPaint.Style        = SKPaintStyle.Fill;
            skPaint.TextEncoding = SKTextEncoding.Utf16;
            skPaint.IsAntialias  = true;

            var cy = y + GraphicsUnitConverter.Convert(GraphicsUnit.Pixel, PageUnit, layout.OffsetY, DpiY);

            fixed(char *ptr = layout.Text)
            {
                for (int i = 0; i < layout.lines.Count; i++)
                {
                    cy += GraphicsUnitConverter.Convert(GraphicsUnit.Pixel, PageUnit, -layout.Font.FontMetrics.Ascent, DpiY);
                    var      length = layout.lines[i].widths.Length;
                    SKPoint *pos    = stackalloc SKPoint[length];
                    var      cx     = x + GraphicsUnitConverter.Convert(GraphicsUnit.Pixel, PageUnit, layout.lines[i].offsetX, DpiX);
                    for (int j = 0; j < length; j++)
                    {
                        pos[j].X = cx;
                        pos[j].Y = cy;
                        cx      += GraphicsUnitConverter.Convert(GraphicsUnit.Pixel, PageUnit, layout.lines[i].widths[j], DpiX);
                    }

                    SkiaApi.sk_canvas_draw_pos_text(skCanvas.Handle, ((byte *)ptr) + layout.lines[i].startByteIndex,
                                                    new IntPtr(layout.lines[i].byteLength), pos, skPaint.Handle);

                    cy += GraphicsUnitConverter.Convert(GraphicsUnit.Pixel, PageUnit,
                                                        layout.Font.FontMetrics.Descent + layout.Font.FontMetrics.Leading, DpiX);
                }
            }

            //System.Diagnostics.Debug.WriteLine("Graphics.DrawTextLayout at {0},{1} with: {2}",x,y,layout.Text);
        }
Example #2
0
 internal unsafe static extern void sk_canvas_draw_pos_text(IntPtr canvas,
                                                            /* char */ void *text, /* size_t */ IntPtr byteLength, SKPoint *param3, IntPtr paint);