using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; using System.Windows.Shapes; namespace Tango.Graphics2D.VisualBinders { public class PathBinder : IVisualBinder { public void DrawVisual(FrameworkElement element, Drawing2DHost host, DrawingContext context) { Path path = element as Path; var location = host.GetElementLocation(path); var size = host.GetElementSize(path); Pen pen = null; if (path.Stroke != null) { pen = new Pen(path.Stroke, path.StrokeThickness); pen.DashCap = path.StrokeDashCap; //TODO: add some stroke features... } var geo = path.Data.Clone(); if (path.Stretch == Stretch.Fill) { TransformGroup group = new TransformGroup(); TranslateTransform translateTransform = new TranslateTransform(); translateTransform.X = -geo.Bounds.Left; translateTransform.Y = -geo.Bounds.Top; ScaleTransform scaleTransform = new ScaleTransform(); scaleTransform.ScaleX = size.Width / geo.Bounds.Width; scaleTransform.ScaleY = size.Height / geo.Bounds.Height; group.Children.Add(translateTransform); group.Children.Add(scaleTransform); context.PushTransform(group); } context.DrawGeometry(path.Fill, pen, geo); } public List GetRenderProperties() { return new List() { Path.OpacityProperty, Path.VisibilityProperty, Path.FillProperty, Path.StrokeProperty, Path.StrokeThicknessProperty, Path.StretchProperty }; } } }