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(); }
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(); }
// 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); }
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 }; } }
public static void DrawPath(this RenderContext context, ID2DPen pen, D2DPathData path) { context.RenderTarget.DeviceContext2D.DrawPath(pen, path); }
public static void FillPath(this RenderContext context, ID2DBrush brush, D2DPathData path, PointF offset) { context.FillPath(brush, path, offset.X, offset.Y); }
public static void FillPath(this RenderContext context, ID2DBrush brush, D2DPathData path) { context.RenderTarget.DeviceContext2D.FillPath(brush, path); }
public static void DrawPath(this RenderContext context, ID2DPen pen, D2DPathData path, PointF offset) { context.DrawPath(pen, path, offset.X, offset.Y); }
public static void FillPath(this SharpDX.Direct2D1.RenderTarget target, ID2DBrush brush, D2DPathData path) { target.FillGeometry(path.NativeGeometry, brush.NativeBrush); }
public static void DrawPath(this SharpDX.Direct2D1.RenderTarget target, ID2DPen pen, D2DPathData path) { target.DrawGeometry(path.NativeGeometry, pen.Brush.NativeBrush, pen.StrokeWidth, pen.StrokeStyle); }