Browse Source

Merge branch 'master' into controlcatalog_pcl

pull/518/head
Jason Jarvis 10 years ago
parent
commit
33dc98b882
  1. 36
      Perspex.sln
  2. 2
      src/Perspex.SceneGraph/Size.cs
  3. 5
      src/Skia/Perspex.Skia.Desktop/Perspex.Skia.Desktop.csproj
  4. 59
      src/Skia/Perspex.Skia/BitmapImpl.cs
  5. 127
      src/Skia/Perspex.Skia/DrawingContextImpl.cs
  6. 4
      src/Skia/Perspex.Skia/StreamGeometryImpl.cs
  7. BIN
      tests/Perspex.RenderTests/Controls/BorderTests.cs
  8. 10
      tests/Perspex.RenderTests/Media/ImageBrushTests.cs
  9. 4
      tests/Perspex.RenderTests/Media/LinearGradientBrushTests.cs
  10. 22
      tests/Perspex.RenderTests/Media/VisualBrushTests.cs
  11. 2
      tests/Perspex.RenderTests/Perspex.Skia.RenderTests.csproj
  12. 11
      tests/Perspex.RenderTests/Shapes/PathTests.cs
  13. 4
      tests/Perspex.RenderTests/Shapes/PolygonTests.cs
  14. 4
      tests/Perspex.RenderTests/Shapes/PolylineTests.cs

36
Perspex.sln

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25123.0
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.Base", "src\Perspex.Base\Perspex.Base.csproj", "{B09B78D8-9B26-48B0-9149-D64A2F120F3F}"
EndProject
@ -153,6 +153,7 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.Desktop", "samples\ControlCatalog.Desktop\ControlCatalog.Desktop.csproj", "{2B888490-D14A-4BCA-AB4B-48676FA93C9B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCatalog.iOS", "samples\ControlCatalog.iOS\ControlCatalog.iOS.csproj", "{57E0455D-D565-44BB-B069-EE1AA20F8337}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perspex.Skia.RenderTests", "tests\Perspex.RenderTests\Perspex.Skia.RenderTests.csproj", "{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
@ -1805,6 +1806,38 @@ Global
{57E0455D-D565-44BB-B069-EE1AA20F8337}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
{57E0455D-D565-44BB-B069-EE1AA20F8337}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
{57E0455D-D565-44BB-B069-EE1AA20F8337}.Release|x86.ActiveCfg = Release|iPhone
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Ad-Hoc|x86.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.AppStore|Any CPU.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.AppStore|iPhone.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.AppStore|x86.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.AppStore|x86.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Debug|iPhone.Build.0 = Debug|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Debug|x86.ActiveCfg = Debug|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Debug|x86.Build.0 = Debug|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Release|Any CPU.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Release|iPhone.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Release|iPhone.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Release|x86.ActiveCfg = Release|Any CPU
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1852,5 +1885,6 @@ Global
{D0A739B9-3C68-4BA6-A328-41606954B6BD} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{2B888490-D14A-4BCA-AB4B-48676FA93C9B} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{57E0455D-D565-44BB-B069-EE1AA20F8337} = {9B9E3891-2366-4253-A952-D08BCEB71098}
{D35A9F3D-8BB0-496E-BF72-444038A7DEBB} = {C5A00AC3-B34C-4564-9BDD-2DA473EF4D8B}
EndGlobalSection
EndGlobal

2
src/Perspex.SceneGraph/Size.cs

@ -125,7 +125,7 @@ namespace Perspex
public static Size operator -(Size size, Size toSubstract)
{
return new Size(size._width + toSubstract._width, size._height + toSubstract._height);
return new Size(size._width - toSubstract._width, size._height - toSubstract._height);
}
/// <summary>

5
src/Skia/Perspex.Skia.Desktop/Perspex.Skia.Desktop.csproj

@ -38,7 +38,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;WIN32</DefineConstants>
<DefineConstants>TRACE;DEBUG;WIN32;DESKTOP</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
@ -47,7 +47,7 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE;WIN32</DefineConstants>
<DefineConstants>TRACE;WIN32;DESKTOP</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
@ -62,6 +62,7 @@
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />

59
src/Skia/Perspex.Skia/BitmapImpl.cs

@ -22,39 +22,62 @@ namespace Perspex.Skia
public BitmapImpl(int width, int height)
{
throw new NotImplementedException();
PixelHeight = height;
PixelWidth = width;
Bitmap = new SKBitmap(width, height, SKColorType.N_32, SKAlphaType.Premul);
}
public void Dispose()
{
Bitmap.Dispose();
}
public void Save(string fileName)
{
// TODO: Implement this for SkiaSharp
throw new NotImplementedException();
//var ext = Path.GetExtension(fileName)?.ToLower();
//var type = MethodTable.SkiaImageType.Png;
//if(ext=="gif")
// type = MethodTable.SkiaImageType.Gif;
//if(ext=="jpeg" || ext =="jpg")
// type = MethodTable.SkiaImageType.Jpeg;
//var skdata = MethodTable.Instance.SaveImage(Handle, type, 100);
//var size = MethodTable.Instance.GetSkDataSize(skdata);
//var buffer = new byte[size];
//MethodTable.Instance.ReadSkData(skdata, buffer, size);
//File.WriteAllBytes(fileName, buffer);
#if DESKTOP
IntPtr length;
using (var sdb = new System.Drawing.Bitmap(PixelWidth, PixelHeight, Bitmap.RowBytes,
System.Drawing.Imaging.PixelFormat.Format32bppArgb, Bitmap.GetPixels(out length)))
sdb.Save(fileName);
#else
//SkiaSharp doesn't expose image encoders yet
#endif
}
public int PixelWidth { get; private set; }
public int PixelHeight { get; private set; }
class BitmapDrawingContext : DrawingContextImpl
{
private readonly SKSurface _surface;
public BitmapDrawingContext(SKBitmap bitmap) : this(CreateSurface(bitmap))
{
}
private static SKSurface CreateSurface(SKBitmap bitmap)
{
IntPtr length;
return SKSurface.Create(bitmap.Info, bitmap.GetPixels(out length), bitmap.RowBytes);
}
public BitmapDrawingContext(SKSurface surface) : base(surface.Canvas)
{
_surface = surface;
}
public override void Dispose()
{
base.Dispose();
_surface.Dispose();
}
}
public DrawingContext CreateDrawingContext()
{
return
new DrawingContext(
new DrawingContextImpl(null)); // MethodTable.Instance.RenderTargetCreateRenderingContext(Handle)));
return new DrawingContext(new BitmapDrawingContext(Bitmap));
}
}

127
src/Skia/Perspex.Skia/DrawingContextImpl.cs

@ -4,6 +4,7 @@ using Perspex.Media;
using Perspex.Media.Imaging;
using SkiaSharp;
using System.Linq;
using Perspex.RenderHelpers;
namespace Perspex.Skia
{
@ -14,6 +15,7 @@ namespace Perspex.Skia
public DrawingContextImpl(SKCanvas canvas)
{
Canvas = canvas;
Canvas.Clear();
}
public void DrawImage(IBitmap source, double opacity, Rect sourceRect, Rect destRect)
@ -28,7 +30,7 @@ namespace Perspex.Skia
{
using (var paint = CreatePaint(pen, new Size(Math.Abs(p2.X - p1.X), Math.Abs(p2.Y - p1.Y))))
{
Canvas.DrawLine((float)p1.X, (float)p1.Y, (float)p2.X, (float)p2.Y, paint);
Canvas.DrawLine((float)p1.X, (float)p1.Y, (float)p2.X, (float)p2.Y, paint.Paint);
}
}
@ -37,37 +39,70 @@ namespace Perspex.Skia
var impl = ((StreamGeometryImpl)geometry.PlatformImpl);
var size = geometry.Bounds.Size;
using (var fill = brush != null ? CreatePaint(brush, size) : null)
using (var stroke = pen?.Brush != null ? CreatePaint(pen, size) : null)
using (var fill = brush != null ? CreatePaint(brush, size) : default(PaintWrapper))
using (var stroke = pen?.Brush != null ? CreatePaint(pen, size) : default(PaintWrapper))
{
if (fill != null)
if (fill.Paint != null)
{
Canvas.DrawPath(impl.EffectivePath, fill);
Canvas.DrawPath(impl.EffectivePath, fill.Paint);
}
if (stroke != null)
if (stroke.Paint != null)
{
Canvas.DrawPath(impl.EffectivePath, stroke);
Canvas.DrawPath(impl.EffectivePath, stroke.Paint);
}
}
}
private SKPaint CreatePaint(IBrush brush, Size targetSize)
struct PaintWrapper : IDisposable
{
SKPaint paint = new SKPaint();
//We are saving memory allocations there
//TODO: add more disposable fields if needed
public readonly SKPaint Paint;
private IDisposable _disposable1;
public void AddDisposable(IDisposable disposable)
{
if (_disposable1 == null)
_disposable1 = disposable;
else
throw new InvalidOperationException();
}
public PaintWrapper(SKPaint paint)
{
Paint = paint;
_disposable1 = null;
}
public void Dispose()
{
Paint?.Dispose();
_disposable1?.Dispose();
}
}
private PaintWrapper CreatePaint(IBrush brush, Size targetSize)
{
SKPaint paint = new SKPaint();
var rv = new PaintWrapper(paint);
paint.IsStroke = false;
// TODO: SkiaSharp does not contain alpha yet!
//double opacity = brush.Opacity * _currentOpacity;
double opacity = brush.Opacity * _currentOpacity;
//paint.SetAlpha(paint.GetAlpha() * opacity);
paint.IsAntialias = true;
SKColor color = new SKColor(255, 255, 255, 255);
var solid = brush as SolidColorBrush;
if (solid != null)
{
paint.Color = solid.Color.ToSKColor();
return paint;
}
color = solid.Color.ToSKColor();
paint.Color = (new SKColor(color.Red, color.Green, color.Blue, (byte) (color.Alpha*opacity)));
if (solid != null)
return rv;
var gradient = brush as GradientBrush;
if (gradient != null)
@ -85,6 +120,7 @@ namespace Perspex.Skia
// would be nice to cache these shaders possibly?
var shader = SKShader.CreateLinearGradient(start, end, stopColors, stopOffsets, tileMode);
paint.Shader = shader;
shader.Dispose();
}
else
{
@ -100,45 +136,46 @@ namespace Perspex.Skia
// would be nice to cache these shaders possibly?
var shader = SKShader.CreateRadialGradient(center, radius, stopColors, stopOffsets, tileMode);
paint.Shader = shader;
shader.Dispose();
}
}
return paint;
return rv;
}
var tileBrush = brush as TileBrush;
if (tileBrush != null)
{
// TODO: Get Tile Brushes working!!!
//
//throw new NotImplementedException();
// rv.Brush->Type = NativeBrushType.Image;
// var helper = new TileBrushImplHelper(tileBrush, targetSize);
// var bitmap = new BitmapImpl((int)helper.IntermediateSize.Width, (int)helper.IntermediateSize.Height);
// rv.AddDisposable(bitmap);
// using (var ctx = bitmap.CreateDrawingContext())
// helper.DrawIntermediate(ctx);
// rv.Brush->Bitmap = bitmap.Handle;
// rv.Brush->BitmapTileMode = tileBrush.TileMode;
// rv.Brush->BitmapTranslation = new SkiaPoint(-helper.DestinationRect.X, -helper.DestinationRect.Y);
// SkMatrix matrix;
// matrix.setTranslate(brush->BitmapTranslation);
// SkShader::TileMode tileX = brush->BitmapTileMode == ptmNone ? SkShader::kClamp_TileMode
// : (brush->BitmapTileMode == ptmFlipX || brush->BitmapTileMode == ptmFlipXY) ? SkShader::kMirror_TileMode : SkShader::kRepeat_TileMode;
// SkShader::TileMode tileY = brush->BitmapTileMode == ptmNone ? SkShader::kClamp_TileMode
// : (brush->BitmapTileMode == ptmFlipY || brush->BitmapTileMode == ptmFlipXY) ? SkShader::kMirror_TileMode : SkShader::kRepeat_TileMode;
// paint.setShader(SkShader::CreateBitmapShader(brush->Bitmap->Bitmap, tileX, tileY, &matrix))->unref();
var helper = new TileBrushImplHelper(tileBrush, targetSize);
var bitmap = new BitmapImpl((int)helper.IntermediateSize.Width, (int)helper.IntermediateSize.Height);
rv.AddDisposable(bitmap);
using (var ctx = bitmap.CreateDrawingContext())
helper.DrawIntermediate(ctx);
SKMatrix translation = SKMatrix.MakeTranslation(-(float)helper.DestinationRect.X, -(float)helper.DestinationRect.Y);
SKShaderTileMode tileX =
tileBrush.TileMode == TileMode.None
? SKShaderTileMode.Clamp
: tileBrush.TileMode == TileMode.FlipX || tileBrush.TileMode == TileMode.FlipXY
? SKShaderTileMode.Mirror
: SKShaderTileMode.Repeat;
SKShaderTileMode tileY =
tileBrush.TileMode == TileMode.None
? SKShaderTileMode.Clamp
: tileBrush.TileMode == TileMode.FlipY || tileBrush.TileMode == TileMode.FlipXY
? SKShaderTileMode.Mirror
: SKShaderTileMode.Repeat;
paint.Shader = SKShader.CreateBitmap(bitmap.Bitmap, tileX, tileY, translation);
paint.Shader.Dispose();
}
return paint;
return rv;
}
private SKPaint CreatePaint(Pen pen, Size targetSize)
private PaintWrapper CreatePaint(Pen pen, Size targetSize)
{
var paint = CreatePaint(pen.Brush, targetSize);
var rv = CreatePaint(pen.Brush, targetSize);
var paint = rv.Paint;
paint.IsStroke = true;
paint.StrokeWidth = (float)pen.Thickness;
@ -178,7 +215,7 @@ namespace Perspex.Skia
// paint.setPathEffect(SkDashPathEffect::Create(brush->StrokeDashes, brush->StrokeDashCount, brush->StrokeDashOffset))->unref();
//}
return paint;
return rv;
}
public void DrawRectangle(Pen pen, Rect rect, float cornerRadius = 0)
@ -188,13 +225,13 @@ namespace Perspex.Skia
var rc = rect.ToSKRect();
if (cornerRadius == 0)
{
Canvas.DrawRect(rc, paint);
Canvas.DrawRect(rc, paint.Paint);
}
else
{
// TODO: DrawRRect (ore DrawRoundedRect) is not accesible in SkiaSharp yet. We should add that
// to SkiaSharp and initiate a PR....
Canvas.DrawRect(rc, paint);
Canvas.DrawRect(rc, paint.Paint);
//Canvas.DrawRoundedRect(rc, cornerRadius, cornerRadius, paint);
}
}
@ -207,14 +244,14 @@ namespace Perspex.Skia
var rc = rect.ToSKRect();
if (cornerRadius == 0)
{
Canvas.DrawRect(rc, paint);
Canvas.DrawRect(rc, paint.Paint);
}
else
{
// TODO: this does not exist in SkiaSharp yet
//throw new NotImplementedException();
//Canvas.DrawRoundedRect(rc, cornerRadius, cornerRadius, paint);
Canvas.DrawRect(rc, paint);
Canvas.DrawRect(rc, paint.Paint);
}
}
}

4
src/Skia/Perspex.Skia/StreamGeometryImpl.cs

@ -50,7 +50,7 @@ namespace Perspex.Skia
_transformedPath.Dispose();
_transformedPath = null;
}
// TODO: SkiaSharp does not expose Transform yet!!!
//if (!Transform.IsIdentity)
//{
@ -111,7 +111,7 @@ namespace Perspex.Skia
public void ArcTo(Point point, Size size, double rotationAngle, bool isLargeArc, SweepDirection sweepDirection)
{
throw new NotImplementedException();
ArcToHelper.ArcTo(this, _currentPoint, point, size, rotationAngle, isLargeArc, sweepDirection);
}
public void BeginFigure(Point startPoint, bool isFilled)

BIN
tests/Perspex.RenderTests/Controls/BorderTests.cs

Binary file not shown.

10
tests/Perspex.RenderTests/Media/ImageBrushTests.cs

@ -102,7 +102,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
RenderToFile(target);
CompareImages();
}
#if PERSPEX_SKIA
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -129,7 +129,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
CompareImages();
}
#if PERSPEX_SKIA
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -156,7 +156,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
CompareImages();
}
#if PERSPEX_SKIA
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -207,7 +207,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
CompareImages();
}
#if PERSPEX_SKIA
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -235,7 +235,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
CompareImages();
}
#if PERSPEX_SKIA
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]

4
tests/Perspex.RenderTests/Media/LinearGradientBrushTests.cs

@ -24,7 +24,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
{
}
#if PERSPEX_SKIA
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -55,7 +55,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
CompareImages();
}
#if PERSPEX_SKIA
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]

22
tests/Perspex.RenderTests/Media/VisualBrushTests.cs

@ -87,7 +87,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
#if PERSPEX_CAIRO
[Fact(Skip = "Font scaling currently broken on cairo")]
#elif PERSPEX_SKIA
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -143,7 +143,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
#if PERSPEX_CAIRO
[Fact(Skip = "Font scaling currently broken on cairo")]
#elif PERSPEX_SKIA
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -172,7 +172,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
#if PERSPEX_CAIRO
[Fact(Skip = "Font scaling currently broken on cairo")]
#elif PERSPEX_SKIA
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -201,7 +201,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
#if PERSPEX_CAIRO
[Fact(Skip = "Font scaling currently broken on cairo")]
#elif PERSPEX_SKIA
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -254,7 +254,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
#if PERSPEX_CAIRO
[Fact(Skip = "Font scaling currently broken on cairo")]
#elif PERSPEX_SKIA
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -282,7 +282,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
CompareImages();
}
#if PERSPEX_SKIA
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -311,11 +311,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
CompareImages();
}
#if PERSPEX_SKIA
[Fact(Skip = "FIXME")]
#else
[Fact]
#endif
public void VisualBrush_NoStretch_Tile_BottomRightQuarterSource_CenterQuarterDest()
{
Decorator target = new Decorator
@ -342,7 +338,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
#if PERSPEX_CAIRO
[Fact(Skip = "TileMode.FlipX not yet supported on cairo")]
#elif PERSPEX_SKIA
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -372,7 +368,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
#if PERSPEX_CAIRO
[Fact(Skip = "TileMode.FlipY not yet supported on cairo")]
#elif PERSPEX_SKIA
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]
@ -402,7 +398,7 @@ namespace Perspex.Direct2D1.RenderTests.Media
#if PERSPEX_CAIRO
[Fact(Skip = "Font scaling currently broken on cairo")]
#elif PERSPEX_SKIA
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]

2
tests/Perspex.RenderTests/Perspex.Skia.RenderTests.csproj

@ -20,7 +20,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;PERSPEX_SKIA</DefineConstants>
<DefineConstants>TRACE;DEBUG;PERSPEX_SKIA;PERSPEX_SKIA_SKIP_FAIL</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>

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

@ -45,8 +45,11 @@ namespace Perspex.Direct2D1.RenderTests.Shapes
RenderToFile(target);
CompareImages();
}
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")]
#else
[Fact]
#endif
public void Path_Tick_Scaled()
{
Decorator target = new Decorator
@ -69,7 +72,11 @@ namespace Perspex.Direct2D1.RenderTests.Shapes
CompareImages();
}
#if PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")]
#else
[Fact]
#endif
public void Path_Tick_Scaled_Stroke_8px()
{
Decorator target = new Decorator
@ -122,7 +129,7 @@ namespace Perspex.Direct2D1.RenderTests.Shapes
#if PERSPEX_CAIRO
[Fact(Skip = "Path with StrokeDashCap, StrokeStartLineCap, StrokeEndLineCap rendering is not implemented in Cairo yet")]
#elif PERSPEX_SKIA
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "FIXME")]
#else
[Fact]

4
tests/Perspex.RenderTests/Shapes/PolygonTests.cs

@ -23,6 +23,8 @@ namespace Perspex.Direct2D1.RenderTests.Shapes
#if PERSPEX_CAIRO
[Fact(Skip = "Caused by cairo bug")]
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")]
#else
[Fact]
#endif
@ -49,6 +51,8 @@ namespace Perspex.Direct2D1.RenderTests.Shapes
#if PERSPEX_CAIRO
[Fact(Skip = "Caused by cairo bug")]
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")]
#else
[Fact]
#endif

4
tests/Perspex.RenderTests/Shapes/PolylineTests.cs

@ -23,6 +23,8 @@ namespace Perspex.Direct2D1.RenderTests.Shapes
#if PERSPEX_CAIRO
[Fact(Skip = "Caused by cairo bug")]
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")]
#else
[Fact]
#endif
@ -51,6 +53,8 @@ namespace Perspex.Direct2D1.RenderTests.Shapes
#if PERSPEX_CAIRO
[Fact(Skip = "Caused by cairo bug")]
#elif PERSPEX_SKIA_SKIP_FAIL
[Fact(Skip = "Waiting for https://github.com/mono/SkiaSharp/pull/63")]
#else
[Fact]
#endif

Loading…
Cancel
Save