Esempio n. 1
0
 public static void FillPath(this RenderContext context, ID2DBrush brush, D2DPathData path, float offsetX, float offsetY)
 {
     context.PushTransform2D();
     context.Translate2D(offsetX, offsetY);
     context.RenderTarget.DeviceContext2D.FillPath(brush, path);
     context.PopTransform2D();
 }
Esempio n. 2
0
 public static void DrawPath(this RenderContext context, ID2DPen pen, D2DPathData path, float offsetX, float offsetY)
 {
     context.PushTransform2D();
     context.Translate2D(offsetX, offsetY);
     context.RenderTarget.DeviceContext2D.DrawPath(pen, path);
     context.PopTransform2D();
 }
Esempio n. 3
0
        // Warning: this function seems to have serious memory leak...
        private static D2DPathData GetPathData(RenderContext context, string text, FontFace fontFace, float fontSizeInEm)
        {
            var pathData = new D2DPathData(context.RenderTarget.DeviceContext2D.Factory);

            pathData.BeginDraw();

            var codePoints = new int[text.Length];

            for (var i = 0; i < text.Length; ++i)
            {
                codePoints[i] = char.ConvertToUtf32(text, i);
            }

            var indices = fontFace.GetGlyphIndices(codePoints);

            fontFace.GetGlyphRunOutline(fontSizeInEm, indices, null, null, false, false, pathData.NativeSink);

            pathData.EndDraw();

            return(pathData);
        }
Esempio n. 4
0
        private void Initialize(RenderContext context, string text, D2DFont d2dFont, FontFace fontFace)
        {
            Text     = text;
            D2DFont  = d2dFont;
            FontFace = fontFace;

            var fontSizeInEm = DirectWriteHelper.PointToDip(d2dFont.Size);

            LineHeight = fontSizeInEm;

            if (text.IndexOf('\n') >= 0)
            {
                var processedText = text.Replace("\r", string.Empty);
                var lines         = processedText.Split('\n');

                _pathDataArray = new D2DPathData[lines.Length];
                _lineHeights   = new float[lines.Length];

                for (var i = 0; i < lines.Length; ++i)
                {
                    var line = lines[i];
                    if (!string.IsNullOrWhiteSpace(line))
                    {
                        var pathData = GetPathData(context, line, fontFace, fontSizeInEm);
                        _pathDataArray[i] = pathData;
                    }
                    _lineHeights[i] = fontSizeInEm;
                }
            }
            else
            {
                var pathData = GetPathData(context, text, fontFace, fontSizeInEm);
                _pathDataArray = new[] { pathData };
                _lineHeights   = new[] { fontSizeInEm };
            }
        }
Esempio n. 5
0
 public static void DrawPath(this RenderContext context, ID2DPen pen, D2DPathData path)
 {
     context.RenderTarget.DeviceContext2D.DrawPath(pen, path);
 }
Esempio n. 6
0
 public static void FillPath(this RenderContext context, ID2DBrush brush, D2DPathData path, PointF offset)
 {
     context.FillPath(brush, path, offset.X, offset.Y);
 }
Esempio n. 7
0
 public static void FillPath(this RenderContext context, ID2DBrush brush, D2DPathData path)
 {
     context.RenderTarget.DeviceContext2D.FillPath(brush, path);
 }
Esempio n. 8
0
 public static void DrawPath(this RenderContext context, ID2DPen pen, D2DPathData path, PointF offset)
 {
     context.DrawPath(pen, path, offset.X, offset.Y);
 }
Esempio n. 9
0
 public static void FillPath(this SharpDX.Direct2D1.RenderTarget target, ID2DBrush brush, D2DPathData path)
 {
     target.FillGeometry(path.NativeGeometry, brush.NativeBrush);
 }
Esempio n. 10
0
 public static void DrawPath(this SharpDX.Direct2D1.RenderTarget target, ID2DPen pen, D2DPathData path)
 {
     target.DrawGeometry(path.NativeGeometry, pen.Brush.NativeBrush, pen.StrokeWidth, pen.StrokeStyle);
 }