diff --git a/Perspex.sln b/Perspex.sln index a6b3fc1e68..b9f83dea4a 100644 --- a/Perspex.sln +++ b/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 diff --git a/src/Perspex.SceneGraph/Size.cs b/src/Perspex.SceneGraph/Size.cs index 4370b14bda..1e7acc0096 100644 --- a/src/Perspex.SceneGraph/Size.cs +++ b/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); } /// diff --git a/src/Skia/Perspex.Skia.Desktop/Perspex.Skia.Desktop.csproj b/src/Skia/Perspex.Skia.Desktop/Perspex.Skia.Desktop.csproj index 6f5baf1afe..499963c1d2 100644 --- a/src/Skia/Perspex.Skia.Desktop/Perspex.Skia.Desktop.csproj +++ b/src/Skia/Perspex.Skia.Desktop/Perspex.Skia.Desktop.csproj @@ -38,7 +38,7 @@ true bin\x86\Debug\ - TRACE;DEBUG;WIN32 + TRACE;DEBUG;WIN32;DESKTOP true full x86 @@ -47,7 +47,7 @@ bin\x86\Release\ - TRACE;WIN32 + TRACE;WIN32;DESKTOP true true pdbonly @@ -62,6 +62,7 @@ + diff --git a/src/Skia/Perspex.Skia/BitmapImpl.cs b/src/Skia/Perspex.Skia/BitmapImpl.cs index f9b9ffa68a..3b108a8193 100644 --- a/src/Skia/Perspex.Skia/BitmapImpl.cs +++ b/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)); } } diff --git a/src/Skia/Perspex.Skia/DrawingContextImpl.cs b/src/Skia/Perspex.Skia/DrawingContextImpl.cs index 20f3ee2208..49d627442b 100644 --- a/src/Skia/Perspex.Skia/DrawingContextImpl.cs +++ b/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); } } } diff --git a/src/Skia/Perspex.Skia/StreamGeometryImpl.cs b/src/Skia/Perspex.Skia/StreamGeometryImpl.cs index 6b7cbb1edf..b5a7f9e3c9 100644 --- a/src/Skia/Perspex.Skia/StreamGeometryImpl.cs +++ b/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) diff --git a/tests/Perspex.RenderTests/Controls/BorderTests.cs b/tests/Perspex.RenderTests/Controls/BorderTests.cs index dbb2ada4b2..6c6c0d78d2 100644 Binary files a/tests/Perspex.RenderTests/Controls/BorderTests.cs and b/tests/Perspex.RenderTests/Controls/BorderTests.cs differ diff --git a/tests/Perspex.RenderTests/Media/ImageBrushTests.cs b/tests/Perspex.RenderTests/Media/ImageBrushTests.cs index aaf6592b88..cfebd90b62 100644 --- a/tests/Perspex.RenderTests/Media/ImageBrushTests.cs +++ b/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] diff --git a/tests/Perspex.RenderTests/Media/LinearGradientBrushTests.cs b/tests/Perspex.RenderTests/Media/LinearGradientBrushTests.cs index 14060ebcc2..1ad308f602 100644 --- a/tests/Perspex.RenderTests/Media/LinearGradientBrushTests.cs +++ b/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] diff --git a/tests/Perspex.RenderTests/Media/VisualBrushTests.cs b/tests/Perspex.RenderTests/Media/VisualBrushTests.cs index 63b7013c58..acbc42146c 100644 --- a/tests/Perspex.RenderTests/Media/VisualBrushTests.cs +++ b/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] diff --git a/tests/Perspex.RenderTests/Perspex.Skia.RenderTests.csproj b/tests/Perspex.RenderTests/Perspex.Skia.RenderTests.csproj index d358a6ccb5..1310c7daea 100644 --- a/tests/Perspex.RenderTests/Perspex.Skia.RenderTests.csproj +++ b/tests/Perspex.RenderTests/Perspex.Skia.RenderTests.csproj @@ -20,7 +20,7 @@ full false bin\Debug\ - TRACE;DEBUG;PERSPEX_SKIA + TRACE;DEBUG;PERSPEX_SKIA;PERSPEX_SKIA_SKIP_FAIL prompt 4 diff --git a/tests/Perspex.RenderTests/Shapes/PathTests.cs b/tests/Perspex.RenderTests/Shapes/PathTests.cs index 3d52b87ac2..045df0a1dd 100644 --- a/tests/Perspex.RenderTests/Shapes/PathTests.cs +++ b/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] diff --git a/tests/Perspex.RenderTests/Shapes/PolygonTests.cs b/tests/Perspex.RenderTests/Shapes/PolygonTests.cs index 94f6bf584a..712c7e91fa 100644 --- a/tests/Perspex.RenderTests/Shapes/PolygonTests.cs +++ b/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 diff --git a/tests/Perspex.RenderTests/Shapes/PolylineTests.cs b/tests/Perspex.RenderTests/Shapes/PolylineTests.cs index ca91be8e4b..bb21a3c7b7 100644 --- a/tests/Perspex.RenderTests/Shapes/PolylineTests.cs +++ b/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