Browse Source

Merge pull request #352 from susloparovdenis/master

Added DashLineCap, StartLineCap, EndLineCap to the Shape, fixed bug.
pull/356/head
Steven Kirk 11 years ago
parent
commit
666f9ca9b9
  1. 9
      src/Perspex.Controls/Shapes/Shape.cs
  2. 2
      src/Perspex.SceneGraph/Media/Pen.cs
  3. 33
      src/Windows/Perspex.Direct2D1/PrimitiveExtensions.cs
  4. BIN
      tests/Perspex.RenderTests/Shapes/PathTests.cs
  5. BIN
      tests/TestFiles/Direct2D1/Shapes/Path/Path_With_PenLineCap.expected.png

9
src/Perspex.Controls/Shapes/Shape.cs

@ -90,13 +90,20 @@ namespace Perspex.Controls.Shapes
set { SetValue(StrokeThicknessProperty, value); } set { SetValue(StrokeThicknessProperty, value); }
} }
public PenLineCap StrokeDashCap { get; set; } = PenLineCap.Flat;
public PenLineCap StrokeStartLineCap { get; set; } = PenLineCap.Flat;
public PenLineCap StrokeEndLineCap { get; set; } = PenLineCap.Flat;
public override void Render(DrawingContext context) public override void Render(DrawingContext context)
{ {
var geometry = RenderedGeometry; var geometry = RenderedGeometry;
if (geometry != null) if (geometry != null)
{ {
var pen = new Pen(Stroke, StrokeThickness, new DashStyle(StrokeDashArray)); var pen = new Pen(Stroke, StrokeThickness, new DashStyle(StrokeDashArray),
StrokeDashCap, StrokeStartLineCap, StrokeEndLineCap);
context.DrawGeometry(Fill, pen, geometry); context.DrawGeometry(Fill, pen, geometry);
} }
} }

2
src/Perspex.SceneGraph/Media/Pen.cs

@ -31,12 +31,12 @@ namespace Perspex.Media
{ {
Brush = brush; Brush = brush;
Thickness = thickness; Thickness = thickness;
DashCap = dashCap;
StartLineCap = startLineCap; StartLineCap = startLineCap;
EndLineCap = endLineCap; EndLineCap = endLineCap;
LineJoin = lineJoin; LineJoin = lineJoin;
MiterLimit = miterLimit; MiterLimit = miterLimit;
DashStyle = dashStyle; DashStyle = dashStyle;
DashCap = dashCap;
} }
/// <summary> /// <summary>

33
src/Windows/Perspex.Direct2D1/PrimitiveExtensions.cs

@ -71,26 +71,23 @@ namespace Perspex.Direct2D1
/// <returns>The Direct2D brush.</returns> /// <returns>The Direct2D brush.</returns>
public static StrokeStyle ToDirect2DStrokeStyle(this Perspex.Media.Pen pen, SharpDX.Direct2D1.RenderTarget target) public static StrokeStyle ToDirect2DStrokeStyle(this Perspex.Media.Pen pen, SharpDX.Direct2D1.RenderTarget target)
{ {
if (pen.DashStyle != null) var properties = new StrokeStyleProperties
{ {
if (pen.DashStyle.Dashes != null && pen.DashStyle.Dashes.Count > 0) DashStyle = DashStyle.Solid,
{ MiterLimit = (float)pen.MiterLimit,
var properties = new StrokeStyleProperties LineJoin = pen.LineJoin.ToDirect2D(),
{ StartCap = pen.StartLineCap.ToDirect2D(),
DashStyle = DashStyle.Custom, EndCap = pen.EndLineCap.ToDirect2D(),
DashOffset = (float)pen.DashStyle.Offset, DashCap = pen.DashCap.ToDirect2D()
MiterLimit = (float)pen.MiterLimit, };
LineJoin = pen.LineJoin.ToDirect2D(), var dashes = new float[0];
StartCap = pen.StartLineCap.ToDirect2D(), if (pen.DashStyle?.Dashes != null && pen.DashStyle.Dashes.Count > 0)
EndCap = pen.EndLineCap.ToDirect2D(), {
DashCap = pen.DashCap.ToDirect2D() properties.DashStyle = DashStyle.Custom;
}; properties.DashOffset = (float)pen.DashStyle.Offset;
dashes = pen.DashStyle?.Dashes.Select(x => (float)x).ToArray();
return new StrokeStyle(target.Factory, properties, pen.DashStyle?.Dashes.Select(x => (float)x).ToArray());
}
} }
return new StrokeStyle(target.Factory, properties, dashes);
return null;
} }
/// <summary> /// <summary>

BIN
tests/Perspex.RenderTests/Shapes/PathTests.cs

Binary file not shown.

BIN
tests/TestFiles/Direct2D1/Shapes/Path/Path_With_PenLineCap.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Loading…
Cancel
Save