public RadialGradientBrushImpl( Perspex.Media.RadialGradientBrush brush, SharpDX.Direct2D1.RenderTarget target, Size destinationSize) { var gradientStops = brush.GradientStops.Select(s => new SharpDX.Direct2D1.GradientStop { Color = s.Color.ToDirect2D(), Position = (float)s.Offset }).ToArray(); Point centerPoint = brush.Center.ToPixels(destinationSize); Point GradientOriginOffset = brush.GradientOrigin.ToPixels(destinationSize); // Note: Direct2D supports RadiusX and RadiusY but Cairo backend supports only Radius property double radiusX = brush.Radius; double radiusY = brush.Radius; PlatformBrush = new SharpDX.Direct2D1.RadialGradientBrush( target, new SharpDX.Direct2D1.RadialGradientBrushProperties { Center = centerPoint.ToSharpDX(), GradientOriginOffset = GradientOriginOffset.ToSharpDX(), RadiusX = (float)radiusX, RadiusY = (float)radiusY }, new SharpDX.Direct2D1.BrushProperties { Opacity = (float)brush.Opacity, Transform = target.Transform }, new SharpDX.Direct2D1.GradientStopCollection(target, gradientStops, brush.SpreadMethod.ToDirect2D()) ); }
public void QuadraticBezierTo(Point control, Point dest) { _sink.AddQuadraticBezier(new QuadraticBezierSegment { Point1 = control.ToSharpDX(), Point2 = dest.ToSharpDX() }); }
public override void BeginFigure(Point startPoint, bool isFilled, bool isClosed) { this.figureEnd = isClosed ? FigureEnd.Closed : FigureEnd.Open; this.sink.BeginFigure( startPoint.ToSharpDX(), isFilled ? FigureBegin.Filled : FigureBegin.Hollow); }
/// <summary> /// Draws a glyph run. /// </summary> /// <param name="foreground">The foreground.</param> /// <param name="glyphRun">The glyph run.</param> /// <param name="baselineOrigin"></param> public void DrawGlyphRun(IBrush foreground, GlyphRun glyphRun, Point baselineOrigin) { using (var brush = CreateBrush(foreground, glyphRun.Bounds.Size)) { var glyphRunImpl = (GlyphRunImpl)glyphRun.GlyphRunImpl; _renderTarget.DrawGlyphRun(baselineOrigin.ToSharpDX(), glyphRunImpl.GlyphRun, brush.PlatformBrush, MeasuringMode.Natural); } }
public void CubicBezierTo(Point point1, Point point2, Point point3) { _sink.AddBezier(new BezierSegment { Point1 = point1.ToSharpDX(), Point2 = point2.ToSharpDX(), Point3 = point3.ToSharpDX(), }); }
public override void BezierTo(Point point1, Point point2, Point point3, bool isStroked, bool isSmoothJoin) { this.sink.AddBezier(new BezierSegment { Point1 = point1.ToSharpDX(), Point2 = point2.ToSharpDX(), Point3 = point3.ToSharpDX(), }); }
/// <summary> /// Initializes a new instance of the <see cref="StreamGeometryImpl"/> class. /// </summary> public LineGeometryImpl(Point p1, Point p2) { using (var sink = ((PathGeometry)Geometry).Open()) { sink.BeginFigure(p1.ToSharpDX(), FigureBegin.Hollow); sink.AddLine(p2.ToSharpDX()); sink.EndFigure(FigureEnd.Open); sink.Close(); } }
public void ArcTo( Point point, Size size, double rotationAngle, bool isLargeArc, Perspex.Media.SweepDirection sweepDirection) { _sink.AddArc(new ArcSegment { Point = point.ToSharpDX(), Size = size.ToSharpDX(), RotationAngle = (float)rotationAngle, ArcSize = isLargeArc ? ArcSize.Large : ArcSize.Small, SweepDirection = (SweepDirection)sweepDirection, }); }
/// <summary> /// Draws a line. /// </summary> /// <param name="pen">The stroke pen.</param> /// <param name="p1">The first point of the line.</param> /// <param name="p2">The second point of the line.</param> public void DrawLine(Pen pen, Point p1, Point p2) { if (pen != null) { var size = new Rect(p1, p2).Size; using (var d2dBrush = CreateBrush(pen.Brush, size)) using (var d2dStroke = pen.ToDirect2DStrokeStyle(_renderTarget)) { _renderTarget.DrawLine( p1.ToSharpDX(), p2.ToSharpDX(), d2dBrush.PlatformBrush, (float)pen.Thickness, d2dStroke); } } }
/// <summary> /// Draws a line. /// </summary> /// <param name="pen">The stroke pen.</param> /// <param name="p1">The first point of the line.</param> /// <param name="p2">The second point of the line.</param> public void DrawLine(IPen pen, Point p1, Point p2) { if (pen != null) { using (var d2dBrush = CreateBrush(pen.Brush, new Rect(p1, p2).Normalize())) using (var d2dStroke = pen.ToDirect2DStrokeStyle(_deviceContext)) { if (d2dBrush.PlatformBrush != null) { _deviceContext.DrawLine( p1.ToSharpDX(), p2.ToSharpDX(), d2dBrush.PlatformBrush, (float)pen.Thickness, d2dStroke); } } } }
public LinearGradientBrushImpl( Perspex.Media.LinearGradientBrush brush, SharpDX.Direct2D1.RenderTarget target, Size destinationSize) { if (brush != null) { var gradientStops = brush.GradientStops.Select(s => new SharpDX.Direct2D1.GradientStop { Color = s.Color.ToDirect2D(), Position = (float)s.Offset }).ToArray(); Point startPoint = new Point(0, 0); Point endPoint = new Point(0, 0); switch (brush.MappingMode) { case Perspex.Media.BrushMappingMode.Absolute: // TODO: break; case Perspex.Media.BrushMappingMode.RelativeToBoundingBox: startPoint = new Point(brush.StartPoint.X * destinationSize.Width, brush.StartPoint.Y * destinationSize.Height); endPoint = new Point(brush.EndPoint.X * destinationSize.Width, brush.EndPoint.Y * destinationSize.Height); break; } PlatformBrush = new SharpDX.Direct2D1.LinearGradientBrush( target, new SharpDX.Direct2D1.LinearGradientBrushProperties { StartPoint = startPoint.ToSharpDX(), EndPoint = endPoint.ToSharpDX() }, new SharpDX.Direct2D1.BrushProperties { Opacity = (float)brush.Opacity, Transform = target.Transform }, new SharpDX.Direct2D1.GradientStopCollection(target, gradientStops, brush.SpreadMethod.ToDirect2D()) ); } }
public LinearGradientBrushImpl( Perspex.Media.LinearGradientBrush brush, SharpDX.Direct2D1.RenderTarget target, Size destinationSize) { var gradientStops = brush.GradientStops.Select(s => new SharpDX.Direct2D1.GradientStop { Color = s.Color.ToDirect2D(), Position = (float)s.Offset }).ToArray(); Point startPoint = brush.StartPoint.ToPixels(destinationSize); Point endPoint = brush.EndPoint.ToPixels(destinationSize); PlatformBrush = new SharpDX.Direct2D1.LinearGradientBrush( target, new SharpDX.Direct2D1.LinearGradientBrushProperties { StartPoint = startPoint.ToSharpDX(), EndPoint = endPoint.ToSharpDX() }, new SharpDX.Direct2D1.BrushProperties { Opacity = (float)brush.Opacity, Transform = target.Transform }, new SharpDX.Direct2D1.GradientStopCollection(target, gradientStops, brush.SpreadMethod.ToDirect2D()) ); }
/// <inheritdoc/> public bool StrokeContains(Avalonia.Media.IPen pen, Point point) { return(Geometry.StrokeContainsPoint(point.ToSharpDX(), (float)(pen?.Thickness ?? 0))); }
public void LineTo(Point point) { _sink.AddLine(point.ToSharpDX()); }
/// <inheritdoc/> public bool FillContains(Point point) { return(Geometry.FillContainsPoint(point.ToSharpDX())); }
public override void LineTo(Point point, bool isStroked, bool isSmoothJoin) { this.sink.AddLine(point.ToSharpDX()); }
public bool FillContains(Point point) { return Geometry.FillContainsPoint(point.ToSharpDX()); }
public void BeginFigure(Point startPoint, bool isFilled) { _sink.BeginFigure(startPoint.ToSharpDX(), isFilled ? FigureBegin.Filled : FigureBegin.Hollow); }