diff --git a/Cairo/Perspex.Cairo/CairoPlatform.cs b/Cairo/Perspex.Cairo/CairoPlatform.cs
index 902a621cf4..f1841fe31a 100644
--- a/Cairo/Perspex.Cairo/CairoPlatform.cs
+++ b/Cairo/Perspex.Cairo/CairoPlatform.cs
@@ -27,8 +27,7 @@ namespace Perspex.Cairo
public IBitmapImpl CreateBitmap(int width, int height)
{
- throw new NotImplementedException();
- ////return new BitmapImpl(imagingFactory, width, height);
+ return new BitmapImpl(new ImageSurface(Format.Argb32, width, height));
}
public IFormattedTextImpl CreateFormattedText(
@@ -49,7 +48,7 @@ namespace Perspex.Cairo
public IRenderTargetBitmapImpl CreateRenderTargetBitmap(int width, int height)
{
- throw new NotImplementedException();
+ return new RenderTargetBitmapImpl(new ImageSurface(Format.Argb32, width, height));
}
public IStreamGeometryImpl CreateStreamGeometry()
diff --git a/Cairo/Perspex.Cairo/Media/DrawingContext.cs b/Cairo/Perspex.Cairo/Media/DrawingContext.cs
index 5b79613e21..1d6d2a146a 100644
--- a/Cairo/Perspex.Cairo/Media/DrawingContext.cs
+++ b/Cairo/Perspex.Cairo/Media/DrawingContext.cs
@@ -70,7 +70,7 @@ namespace Perspex.Cairo.Media
{
this.context.Dispose();
- if (this.surface != null)
+ if (this.surface is Cairo.Win32Surface)
{
this.surface.Dispose();
}
diff --git a/Cairo/Perspex.Cairo/Media/Imaging/BitmapImpl.cs b/Cairo/Perspex.Cairo/Media/Imaging/BitmapImpl.cs
index 457e7fc179..34961e7795 100644
--- a/Cairo/Perspex.Cairo/Media/Imaging/BitmapImpl.cs
+++ b/Cairo/Perspex.Cairo/Media/Imaging/BitmapImpl.cs
@@ -35,7 +35,7 @@ namespace Perspex.Cairo.Media.Imaging
public void Save(string fileName)
{
- throw new NotImplementedException();
+ this.Surface.WriteToPng(fileName);
}
}
}
diff --git a/Cairo/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs b/Cairo/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
new file mode 100644
index 0000000000..c0ccc372ab
--- /dev/null
+++ b/Cairo/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
@@ -0,0 +1,33 @@
+// -----------------------------------------------------------------------
+//
+// Copyright 2014 MIT Licence. See licence.md for more information.
+//
+// -----------------------------------------------------------------------
+
+namespace Perspex.Cairo.Media.Imaging
+{
+ using System;
+ using Perspex.Platform;
+ using Cairo = global::Cairo;
+
+ public class RenderTargetBitmapImpl : BitmapImpl, IRenderTargetBitmapImpl
+ {
+
+ public RenderTargetBitmapImpl(
+ Cairo.ImageSurface surface)
+ : base(surface)
+ {
+ }
+
+ public void Dispose()
+ {
+ this.Surface.Dispose();
+ }
+
+ public void Render(IVisual visual)
+ {
+ Renderer renderer = new Renderer(this.Surface);
+ renderer.Render(visual, new PlatformHandle(IntPtr.Zero, "RTB"));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Cairo/Perspex.Cairo/Perspex.Cairo.csproj b/Cairo/Perspex.Cairo/Perspex.Cairo.csproj
index 9a6ae92dee..eaad49e49d 100644
--- a/Cairo/Perspex.Cairo/Perspex.Cairo.csproj
+++ b/Cairo/Perspex.Cairo/Perspex.Cairo.csproj
@@ -70,6 +70,7 @@
+
diff --git a/Cairo/Perspex.Cairo/Renderer.cs b/Cairo/Perspex.Cairo/Renderer.cs
index dfce3c8c11..ad4b7aeee6 100644
--- a/Cairo/Perspex.Cairo/Renderer.cs
+++ b/Cairo/Perspex.Cairo/Renderer.cs
@@ -30,6 +30,12 @@ namespace Perspex.Cairo
{
}
+ private ImageSurface surface;
+ public Renderer(ImageSurface surface)
+ {
+ this.surface = surface;
+ }
+
///
/// Resizes the renderer.
///
@@ -51,6 +57,8 @@ namespace Perspex.Cairo
{
case "HWND":
return new DrawingContext(new Win32Surface(GetDC(handle.Handle)));
+ case "RTB":
+ return new DrawingContext(this.surface);
case "HDC":
return new DrawingContext(new Win32Surface(handle.Handle));
case "GdkWindow":
diff --git a/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs b/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs
index 3f436941da..15d8252b3b 100644
--- a/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs
+++ b/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs
@@ -8,8 +8,9 @@ namespace Perspex.Media.Imaging
{
using Perspex.Platform;
using Splat;
+ using System;
- public class RenderTargetBitmap : Bitmap
+ public class RenderTargetBitmap : Bitmap, IDisposable
{
public RenderTargetBitmap(int width, int height)
: base(CreateImpl(width, height))
@@ -31,5 +32,10 @@ namespace Perspex.Media.Imaging
IPlatformRenderInterface factory = Locator.Current.GetService();
return factory.CreateRenderTargetBitmap(width, height);
}
+
+ public void Dispose()
+ {
+ this.PlatformImpl.Dispose();
+ }
}
}
diff --git a/Perspex.SceneGraph/Platform/IRenderTargetBitmapImpl.cs b/Perspex.SceneGraph/Platform/IRenderTargetBitmapImpl.cs
index dc20a78304..c61bd549af 100644
--- a/Perspex.SceneGraph/Platform/IRenderTargetBitmapImpl.cs
+++ b/Perspex.SceneGraph/Platform/IRenderTargetBitmapImpl.cs
@@ -4,9 +4,11 @@
//
// -----------------------------------------------------------------------
+using System;
+
namespace Perspex.Platform
{
- public interface IRenderTargetBitmapImpl : IBitmapImpl
+ public interface IRenderTargetBitmapImpl : IBitmapImpl, IDisposable
{
void Render(IVisual visual);
}
diff --git a/TestFiles/Cairo/Controls/Border/Border_1px_Border.expected.png b/TestFiles/Cairo/Controls/Border/Border_1px_Border.expected.png
new file mode 100644
index 0000000000..24239d5799
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_1px_Border.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_2px_Border.expected.png b/TestFiles/Cairo/Controls/Border/Border_2px_Border.expected.png
new file mode 100644
index 0000000000..cebe42f3df
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_2px_Border.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Bottom_Aligns_Content.expected.png b/TestFiles/Cairo/Controls/Border/Border_Bottom_Aligns_Content.expected.png
new file mode 100644
index 0000000000..163e53293f
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Bottom_Aligns_Content.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Brush_Offsets_Content.expected.png b/TestFiles/Cairo/Controls/Border/Border_Brush_Offsets_Content.expected.png
new file mode 100644
index 0000000000..d1c13a9e57
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Brush_Offsets_Content.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Horizontally.expected.png b/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Horizontally.expected.png
new file mode 100644
index 0000000000..18ecd01c7a
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Horizontally.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Vertically.expected.png b/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Vertically.expected.png
new file mode 100644
index 0000000000..40d0de862e
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Centers_Content_Vertically.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Fill.expected.png b/TestFiles/Cairo/Controls/Border/Border_Fill.expected.png
new file mode 100644
index 0000000000..8e08d02f66
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Fill.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Left_Aligns_Content.expected.png b/TestFiles/Cairo/Controls/Border/Border_Left_Aligns_Content.expected.png
new file mode 100644
index 0000000000..73be4dcdc6
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Left_Aligns_Content.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Margin_Offsets_Content.expected.png b/TestFiles/Cairo/Controls/Border/Border_Margin_Offsets_Content.expected.png
new file mode 100644
index 0000000000..1fa36969e5
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Margin_Offsets_Content.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Nested_Rotate.expected.png b/TestFiles/Cairo/Controls/Border/Border_Nested_Rotate.expected.png
new file mode 100644
index 0000000000..54d3bb9cec
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Nested_Rotate.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Padding_Offsets_Content.expected.png b/TestFiles/Cairo/Controls/Border/Border_Padding_Offsets_Content.expected.png
new file mode 100644
index 0000000000..1fa36969e5
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Padding_Offsets_Content.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Right_Aligns_Content.expected.png b/TestFiles/Cairo/Controls/Border/Border_Right_Aligns_Content.expected.png
new file mode 100644
index 0000000000..3db06328cc
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Right_Aligns_Content.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Stretches_Content_Horizontally.expected.png b/TestFiles/Cairo/Controls/Border/Border_Stretches_Content_Horizontally.expected.png
new file mode 100644
index 0000000000..e255633894
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Stretches_Content_Horizontally.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Stretches_Content_Vertically.expected.png b/TestFiles/Cairo/Controls/Border/Border_Stretches_Content_Vertically.expected.png
new file mode 100644
index 0000000000..e255633894
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Stretches_Content_Vertically.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Border/Border_Top_Aligns_Content.expected.png b/TestFiles/Cairo/Controls/Border/Border_Top_Aligns_Content.expected.png
new file mode 100644
index 0000000000..1c48ec82c6
Binary files /dev/null and b/TestFiles/Cairo/Controls/Border/Border_Top_Aligns_Content.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Image/Image_Stretch_Fill.expected.png b/TestFiles/Cairo/Controls/Image/Image_Stretch_Fill.expected.png
new file mode 100644
index 0000000000..2980a94b70
Binary files /dev/null and b/TestFiles/Cairo/Controls/Image/Image_Stretch_Fill.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Image/Image_Stretch_None.expected.png b/TestFiles/Cairo/Controls/Image/Image_Stretch_None.expected.png
new file mode 100644
index 0000000000..58eebe2251
Binary files /dev/null and b/TestFiles/Cairo/Controls/Image/Image_Stretch_None.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Image/Image_Stretch_Uniform.expected.png b/TestFiles/Cairo/Controls/Image/Image_Stretch_Uniform.expected.png
new file mode 100644
index 0000000000..588c6515c5
Binary files /dev/null and b/TestFiles/Cairo/Controls/Image/Image_Stretch_Uniform.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Image/Image_Stretch_UniformToFill.expected.png b/TestFiles/Cairo/Controls/Image/Image_Stretch_UniformToFill.expected.png
new file mode 100644
index 0000000000..98d421f98c
Binary files /dev/null and b/TestFiles/Cairo/Controls/Image/Image_Stretch_UniformToFill.expected.png differ
diff --git a/TestFiles/Cairo/Controls/Image/test.png b/TestFiles/Cairo/Controls/Image/test.png
new file mode 100644
index 0000000000..ed4f82f847
Binary files /dev/null and b/TestFiles/Cairo/Controls/Image/test.png differ
diff --git a/TestFiles/Cairo/Shapes/Ellipse/Circle_1px_Stroke.expected.png b/TestFiles/Cairo/Shapes/Ellipse/Circle_1px_Stroke.expected.png
new file mode 100644
index 0000000000..e637006545
Binary files /dev/null and b/TestFiles/Cairo/Shapes/Ellipse/Circle_1px_Stroke.expected.png differ
diff --git a/TestFiles/Cairo/Shapes/Path/Path_100px_Triangle_Centered.expected.png b/TestFiles/Cairo/Shapes/Path/Path_100px_Triangle_Centered.expected.png
new file mode 100644
index 0000000000..dab965f988
Binary files /dev/null and b/TestFiles/Cairo/Shapes/Path/Path_100px_Triangle_Centered.expected.png differ
diff --git a/TestFiles/Cairo/Shapes/Path/Path_Expander_With_Border.expected.png b/TestFiles/Cairo/Shapes/Path/Path_Expander_With_Border.expected.png
new file mode 100644
index 0000000000..9c72e69ea9
Binary files /dev/null and b/TestFiles/Cairo/Shapes/Path/Path_Expander_With_Border.expected.png differ
diff --git a/TestFiles/Cairo/Shapes/Path/Path_Tick_Scaled.expected.png b/TestFiles/Cairo/Shapes/Path/Path_Tick_Scaled.expected.png
new file mode 100644
index 0000000000..cb4466a21f
Binary files /dev/null and b/TestFiles/Cairo/Shapes/Path/Path_Tick_Scaled.expected.png differ
diff --git a/TestFiles/Cairo/Shapes/Rectangle/Rectangle_1px_Stroke.expected.png b/TestFiles/Cairo/Shapes/Rectangle/Rectangle_1px_Stroke.expected.png
new file mode 100644
index 0000000000..6aa013a894
Binary files /dev/null and b/TestFiles/Cairo/Shapes/Rectangle/Rectangle_1px_Stroke.expected.png differ
diff --git a/TestFiles/Cairo/Shapes/Rectangle/Rectangle_2px_Stroke.expected.png b/TestFiles/Cairo/Shapes/Rectangle/Rectangle_2px_Stroke.expected.png
new file mode 100644
index 0000000000..c3ee9548b0
Binary files /dev/null and b/TestFiles/Cairo/Shapes/Rectangle/Rectangle_2px_Stroke.expected.png differ
diff --git a/TestFiles/Cairo/Shapes/Rectangle/Rectangle_Stroke_Fill.expected.png b/TestFiles/Cairo/Shapes/Rectangle/Rectangle_Stroke_Fill.expected.png
new file mode 100644
index 0000000000..2eb5c946ce
Binary files /dev/null and b/TestFiles/Cairo/Shapes/Rectangle/Rectangle_Stroke_Fill.expected.png differ
diff --git a/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs b/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
index 45c7c9ef86..16476a213c 100644
--- a/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
+++ b/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
@@ -11,7 +11,7 @@ namespace Perspex.Direct2D1.Media
using SharpDX.Direct2D1;
using SharpDX.WIC;
- public class RenderTargetBitmapImpl : BitmapImpl, IRenderTargetBitmapImpl
+ public class RenderTargetBitmapImpl : BitmapImpl, IRenderTargetBitmapImpl, IDisposable
{
private WicRenderTarget target;
@@ -32,6 +32,11 @@ namespace Perspex.Direct2D1.Media
});
}
+ public void Dispose()
+ {
+ // TODO:
+ }
+
public void Render(IVisual visual)
{
Renderer renderer = new Renderer(this.target);