Browse Source

Merge pull request #393 from KvanTTT/master

Added Line and LineGeometry for line drawing.
pull/396/head
Nikita Tsukanov 11 years ago
parent
commit
a6c59ca35e
  1. 9
      samples/TestApplicationShared/MainWindow.cs
  2. 1
      src/Perspex.Controls/Perspex.Controls.csproj
  3. 36
      src/Perspex.Controls/Shapes/Line.cs
  4. 47
      src/Perspex.SceneGraph/Media/LineGeometry.cs
  5. 1
      src/Perspex.SceneGraph/Perspex.SceneGraph.csproj
  6. 1
      tests/Perspex.RenderTests/Perspex.Cairo.RenderTests.csproj
  7. 1
      tests/Perspex.RenderTests/Perspex.Direct2D1.RenderTests.csproj
  8. 1
      tests/Perspex.RenderTests/Perspex.Skia.RenderTests.csproj
  9. 43
      tests/Perspex.RenderTests/Shapes/LineTests.cs
  10. BIN
      tests/TestFiles/Cairo/Shapes/Line/Line_1px_Stroke.expected.png
  11. BIN
      tests/TestFiles/Direct2D1/Shapes/Line/Line_1px_Stroke.expected.png
  12. BIN
      tests/TestFiles/Skia/Shapes/Line/Line_1px_Stroke.expected.png

9
samples/TestApplicationShared/MainWindow.cs

@ -688,6 +688,15 @@ namespace TestApplication
[Canvas.LeftProperty] = 130,
[Canvas.TopProperty] = 79,
},
new Line
{
Width = 90,
Height = 70,
Stroke = Brushes.Red,
StrokeThickness = 2,
[Canvas.LeftProperty] = 30,
[Canvas.TopProperty] = 120
}
}
},
}

1
src/Perspex.Controls/Perspex.Controls.csproj

@ -67,6 +67,7 @@
<Compile Include="SelectionChangedEventArgs.cs" />
<Compile Include="SelectionMode.cs" />
<Compile Include="Separator.cs" />
<Compile Include="Shapes\Line.cs" />
<Compile Include="SystemDialog.cs" />
<Compile Include="Generators\ITreeItemContainerGenerator.cs" />
<Compile Include="Generators\ItemContainerEventArgs.cs" />

36
src/Perspex.Controls/Shapes/Line.cs

@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Perspex.Media;
namespace Perspex.Controls.Shapes
{
public class Line : Shape
{
private Geometry _geometry;
private Size _geometrySize;
public override Geometry DefiningGeometry
{
get
{
if (_geometry == null || _geometrySize != Bounds.Size)
{
var rect = new Rect(Bounds.Size).Deflate(StrokeThickness);
_geometry = new LineGeometry(rect.TopLeft, rect.BottomRight);
_geometrySize = Bounds.Size;
}
return _geometry;
}
}
protected override Size MeasureOverride(Size availableSize)
{
return new Size(StrokeThickness, StrokeThickness);
}
}
}

47
src/Perspex.SceneGraph/Media/LineGeometry.cs

@ -0,0 +1,47 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using Perspex.Platform;
namespace Perspex.Media
{
/// <summary>
/// Represents the geometry of a line.
/// </summary>
public class LineGeometry : Geometry
{
private Point _startPoint;
private Point _endPoint;
/// <summary>
/// Initializes a new instance of the <see cref="LineGeometry"/> class.
/// </summary>
/// <param name="startPoint">The start point.</param>
/// <param name="endPoint">The end point.</param>
public LineGeometry(Point startPoint, Point endPoint)
{
_startPoint = startPoint;
_endPoint = endPoint;
IPlatformRenderInterface factory = PerspexLocator.Current.GetService<IPlatformRenderInterface>();
IStreamGeometryImpl impl = factory.CreateStreamGeometry();
using (IStreamGeometryContextImpl context = impl.Open())
{
context.BeginFigure(startPoint, false);
context.LineTo(endPoint);
context.EndFigure(false);
}
PlatformImpl = impl;
}
/// <inheritdoc/>
public override Rect Bounds => new Rect(_startPoint, _endPoint);
/// <inheritdoc/>
public override Geometry Clone()
{
return new LineGeometry(Bounds.TopLeft, Bounds.BottomRight);
}
}
}

1
src/Perspex.SceneGraph/Perspex.SceneGraph.csproj

@ -70,6 +70,7 @@
<Compile Include="Media\GradientBrush.cs" />
<Compile Include="Media\GradientSpreadMethod.cs" />
<Compile Include="Media\GradientStop.cs" />
<Compile Include="Media\LineGeometry.cs" />
<Compile Include="Media\RadialGradientBrush.cs" />
<Compile Include="Media\LinearGradientBrush.cs" />
<Compile Include="Media\MediaExtensions.cs" />

1
tests/Perspex.RenderTests/Perspex.Cairo.RenderTests.csproj

@ -71,6 +71,7 @@
<Compile Include="Media\ImageBrushTests.cs" />
<Compile Include="Media\LinearGradientBrushTests.cs" />
<Compile Include="Media\VisualBrushTests.cs" />
<Compile Include="Shapes\LineTests.cs" />
<Compile Include="Shapes\PathTests.cs" />
<Compile Include="Shapes\EllipseTests.cs" />
<Compile Include="Shapes\RectangleTests.cs" />

1
tests/Perspex.RenderTests/Perspex.Direct2D1.RenderTests.csproj

@ -76,6 +76,7 @@
<Compile Include="Controls\ImageTests.cs" />
<Compile Include="Controls\BorderTests.cs" />
<Compile Include="Media\LinearGradientBrushTests.cs" />
<Compile Include="Shapes\LineTests.cs" />
<Compile Include="Shapes\PathTests.cs" />
<Compile Include="Shapes\EllipseTests.cs" />
<Compile Include="Shapes\RectangleTests.cs" />

1
tests/Perspex.RenderTests/Perspex.Skia.RenderTests.csproj

@ -68,6 +68,7 @@
<Compile Include="Media\LinearGradientBrushTests.cs" />
<Compile Include="Media\VisualBrushTests.cs" />
<Compile Include="Shapes\EllipseTests.cs" />
<Compile Include="Shapes\LineTests.cs" />
<Compile Include="Shapes\PathTests.cs" />
<Compile Include="Shapes\RectangleTests.cs" />
<Compile Include="TestBase.cs" />

43
tests/Perspex.RenderTests/Shapes/LineTests.cs

@ -0,0 +1,43 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using Perspex.Controls;
using Perspex.Controls.Shapes;
using Perspex.Media;
using Xunit;
#if PERSPEX_CAIRO
namespace Perspex.Cairo.RenderTests.Shapes
#elif PERSPEX_SKIA
namespace Perspex.Skia.RenderTests
#else
namespace Perspex.Direct2D1.RenderTests.Shapes
#endif
{
public class LineTests : TestBase
{
public LineTests()
: base(@"Shapes\Line")
{
}
[Fact]
public void Line_1px_Stroke()
{
Decorator target = new Decorator
{
Padding = new Thickness(8),
Width = 200,
Height = 200,
Child = new Line
{
Stroke = Brushes.Black,
StrokeThickness = 1,
}
};
RenderToFile(target);
CompareImages();
}
}
}

BIN
tests/TestFiles/Cairo/Shapes/Line/Line_1px_Stroke.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

BIN
tests/TestFiles/Direct2D1/Shapes/Line/Line_1px_Stroke.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

BIN
tests/TestFiles/Skia/Shapes/Line/Line_1px_Stroke.expected.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Loading…
Cancel
Save