diff --git a/src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs b/src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
index 452ee67854..0b9183d928 100644
--- a/src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
+++ b/src/Gtk/Perspex.Cairo/Media/Imaging/RenderTargetBitmapImpl.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
+using Perspex.Media;
using Perspex.Platform;
using Perspex.Rendering;
@@ -11,10 +12,12 @@ namespace Perspex.Cairo.Media.Imaging
public class RenderTargetBitmapImpl : IRenderTargetBitmapImpl
{
+
+ private readonly RenderTarget _renderTarget;
public RenderTargetBitmapImpl(Cairo.ImageSurface surface)
{
Surface = surface;
- renderTarget = new RenderTarget(Surface);
+ _renderTarget = new RenderTarget(Surface);
}
public int PixelWidth => Surface.Width;
@@ -23,7 +26,7 @@ namespace Perspex.Cairo.Media.Imaging
public void Dispose()
{
- renderTarget.Dispose();
+ _renderTarget.Dispose();
}
public Cairo.ImageSurface Surface
@@ -31,15 +34,19 @@ namespace Perspex.Cairo.Media.Imaging
get;
}
- private RenderTarget renderTarget;
- public void Render(IVisual visual)
+ public void Save(string fileName)
{
- renderTarget.Render(visual, new PlatformHandle(IntPtr.Zero, "RTB"));
+ Surface.WriteToPng(fileName);
}
- public void Save(string fileName)
+ public IDrawingContext CreateDrawingContext()
{
- Surface.WriteToPng(fileName);
+ return _renderTarget.CreateDrawingContext();
+ }
+
+ void IRenderTarget.Resize(int width, int height)
+ {
+ throw new NotSupportedException();
}
}
}
\ No newline at end of file
diff --git a/src/Gtk/Perspex.Cairo/Media/TileBrushes.cs b/src/Gtk/Perspex.Cairo/Media/TileBrushes.cs
index 77710a3282..fd1f457a95 100644
--- a/src/Gtk/Perspex.Cairo/Media/TileBrushes.cs
+++ b/src/Gtk/Perspex.Cairo/Media/TileBrushes.cs
@@ -116,7 +116,7 @@ namespace Perspex.Cairo.Media
context.Rectangle(drawRect.ToCairo());
context.Clip();
context.Transform(transform.ToCairo());
- renderer.Render(visual, new PlatformHandle(IntPtr.Zero, "RTB"), transform, drawRect);
+ renderer.Render(visual, transform, drawRect);
var result = new SurfacePattern(intermediate);
diff --git a/src/Gtk/Perspex.Cairo/RenderTarget.cs b/src/Gtk/Perspex.Cairo/RenderTarget.cs
index 1b428e36f4..83edc10f31 100644
--- a/src/Gtk/Perspex.Cairo/RenderTarget.cs
+++ b/src/Gtk/Perspex.Cairo/RenderTarget.cs
@@ -17,6 +17,7 @@ namespace Perspex.Cairo
///
public class RenderTarget : IRenderTarget
{
+ private readonly IPlatformHandle _handle;
private readonly Surface _surface;
private Gdk.Window _window;
@@ -28,6 +29,7 @@ namespace Perspex.Cairo
/// The height of the window.
public RenderTarget(IPlatformHandle handle, double width, double height)
{
+ _handle = handle;
}
public RenderTarget(ImageSurface surface)
@@ -51,21 +53,22 @@ namespace Perspex.Cairo
///
/// The platform-specific handle.
/// A surface wrapped in an .
- public IDrawingContext CreateDrawingContext(IPlatformHandle handle)
+ public IDrawingContext CreateDrawingContext()
{
- switch (handle.HandleDescriptor)
+ if(_surface != null)
+ return new DrawingContext(_surface);
+
+ switch (_handle.HandleDescriptor)
{
- case "RTB":
- return new DrawingContext(_surface);
case "GdkWindow":
if (_window == null)
- _window = new Gdk.Window(handle.Handle);
+ _window = new Gdk.Window(_handle.Handle);
return new DrawingContext(_window);
default:
throw new NotSupportedException(string.Format(
"Don't know how to create a Cairo renderer from a '{0}' handle",
- handle.HandleDescriptor));
+ _handle.HandleDescriptor));
}
}
diff --git a/src/Gtk/Perspex.Gtk/WindowImpl.cs b/src/Gtk/Perspex.Gtk/WindowImpl.cs
index 1914207d08..c6076a85f8 100644
--- a/src/Gtk/Perspex.Gtk/WindowImpl.cs
+++ b/src/Gtk/Perspex.Gtk/WindowImpl.cs
@@ -83,7 +83,7 @@ namespace Perspex.Gtk
public Action Input { get; set; }
- public Action Paint { get; set; }
+ public Action Paint { get; set; }
public Action Resized { get; set; }
@@ -223,7 +223,7 @@ namespace Perspex.Gtk
protected override bool OnExposeEvent(EventExpose evnt)
{
- Paint(evnt.Area.ToPerspex(), GetHandle(evnt.Window));
+ Paint(evnt.Area.ToPerspex());
return true;
}
diff --git a/src/Perspex.Controls/Platform/ITopLevelImpl.cs b/src/Perspex.Controls/Platform/ITopLevelImpl.cs
index 1cbc5f7c60..053c340b27 100644
--- a/src/Perspex.Controls/Platform/ITopLevelImpl.cs
+++ b/src/Perspex.Controls/Platform/ITopLevelImpl.cs
@@ -22,7 +22,7 @@ namespace Perspex.Platform
Action Input { get; set; }
- Action Paint { get; set; }
+ Action Paint { get; set; }
Action Resized { get; set; }
diff --git a/src/Perspex.Controls/Platform/ITopLevelRenderer.cs b/src/Perspex.Controls/Platform/ITopLevelRenderer.cs
index 74afcceeb8..fa71860f7d 100644
--- a/src/Perspex.Controls/Platform/ITopLevelRenderer.cs
+++ b/src/Perspex.Controls/Platform/ITopLevelRenderer.cs
@@ -44,9 +44,9 @@ namespace Perspex.Controls.Platform
resources.Add(queueManager.RenderNeeded.Subscribe(_
=> topLevel.PlatformImpl.Invalidate(new Rect(topLevel.ClientSize))));
- topLevel.PlatformImpl.Paint = (rect, handle) =>
+ topLevel.PlatformImpl.Paint = rect =>
{
- viewport.Render(topLevel, handle);
+ viewport.Render(topLevel);
queueManager.RenderFinished();
};
diff --git a/src/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs b/src/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs
index 90b83dff6b..0d751d61c6 100644
--- a/src/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs
+++ b/src/Perspex.SceneGraph/Media/Imaging/RenderTargetBitmap.cs
@@ -3,6 +3,7 @@
using System;
using Perspex.Platform;
+using Perspex.Rendering;
namespace Perspex.Media.Imaging
{
diff --git a/src/Perspex.SceneGraph/Platform/IRenderTarget.cs b/src/Perspex.SceneGraph/Platform/IRenderTarget.cs
index 2ea2889348..5634d622cd 100644
--- a/src/Perspex.SceneGraph/Platform/IRenderTarget.cs
+++ b/src/Perspex.SceneGraph/Platform/IRenderTarget.cs
@@ -20,9 +20,7 @@ namespace Perspex.Platform
///
/// Creates an for a rendering session.
///
- /// The handle to use to create the context.
- /// An .
- IDrawingContext CreateDrawingContext(IPlatformHandle target);
+ IDrawingContext CreateDrawingContext();
///
/// Resizes the rendered viewport.
diff --git a/src/Perspex.SceneGraph/Platform/IRenderTargetBitmapImpl.cs b/src/Perspex.SceneGraph/Platform/IRenderTargetBitmapImpl.cs
index 9e1b0e6cdd..679e243664 100644
--- a/src/Perspex.SceneGraph/Platform/IRenderTargetBitmapImpl.cs
+++ b/src/Perspex.SceneGraph/Platform/IRenderTargetBitmapImpl.cs
@@ -9,15 +9,7 @@ namespace Perspex.Platform
/// Defines the platform-specific interface for a
/// .
///
- public interface IRenderTargetBitmapImpl : IBitmapImpl, IDisposable
+ public interface IRenderTargetBitmapImpl : IBitmapImpl, IRenderTarget
{
- ///
- /// Renders an into the bitmap.
- ///
- /// The visual to render.
- ///
- /// Before calling this method, ensure that has been measured.
- ///
- void Render(IVisual visual);
}
}
diff --git a/src/Perspex.SceneGraph/Rendering/RendererBase.cs b/src/Perspex.SceneGraph/Rendering/RendererBase.cs
index 3f254afe61..7281ac516b 100644
--- a/src/Perspex.SceneGraph/Rendering/RendererBase.cs
+++ b/src/Perspex.SceneGraph/Rendering/RendererBase.cs
@@ -21,10 +21,9 @@ namespace Perspex.Rendering
///
/// IRenderer instance
/// The visual to render.
- /// An optional platform-specific handle.
- public static void Render(this IRenderTarget renderTarget, IVisual visual, IPlatformHandle target)
+ public static void Render(this IRenderTarget renderTarget, IVisual visual)
{
- using (var ctx = renderTarget.CreateDrawingContext(target))
+ using (var ctx = renderTarget.CreateDrawingContext())
ctx.Render(visual);
}
@@ -32,13 +31,12 @@ namespace Perspex.Rendering
/// Renders the specified visual.
///
/// IRenderer instance
- /// An optional platform-specific handle.
/// The visual to render.
/// The current translation.
/// The current transform.
- public static void Render(this IRenderTarget renderTarget, IVisual visual, IPlatformHandle target, Matrix translation, Matrix transform)
+ public static void Render(this IRenderTarget renderTarget, IVisual visual, Matrix translation, Matrix transform)
{
- using (var ctx = renderTarget.CreateDrawingContext(target))
+ using (var ctx = renderTarget.CreateDrawingContext())
ctx.Render(visual, translation, transform);
}
@@ -46,13 +44,12 @@ namespace Perspex.Rendering
/// Renders the specified visual with the specified transform and clip.
///
/// IRenderer instance
- /// An optional platform-specific handle.
/// The visual to render.
/// The transform.
/// An optional clip rectangle.
- public static void Render(this IRenderTarget renderTarget, IVisual visual, IPlatformHandle target, Matrix transform, Rect? clip = null)
+ public static void Render(this IRenderTarget renderTarget, IVisual visual, Matrix transform, Rect? clip = null)
{
- using (var context = renderTarget.CreateDrawingContext(target))
+ using (var context = renderTarget.CreateDrawingContext())
context.Render(visual, transform, clip);
}
diff --git a/src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs b/src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
index c08d48e225..97efa00d47 100644
--- a/src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
+++ b/src/Windows/Perspex.Direct2D1/Media/Imaging/RenderTargetBitmapImpl.cs
@@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
+using Perspex.Media;
using Perspex.Platform;
using Perspex.Rendering;
using SharpDX.Direct2D1;
@@ -37,10 +38,11 @@ namespace Perspex.Direct2D1.Media
// TODO:
}
- public void Render(IVisual visual)
+ public IDrawingContext CreateDrawingContext() => new RenderTarget(_target).CreateDrawingContext();
+
+ void IRenderTarget.Resize(int width, int height)
{
- RenderTarget renderTarget = new RenderTarget(_target);
- renderTarget.Render(visual, null);
+ throw new NotSupportedException();
}
}
}
diff --git a/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs b/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs
index 5bb191a4bc..c57c2b1477 100644
--- a/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs
+++ b/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs
@@ -53,7 +53,7 @@ namespace Perspex.Direct2D1.Media
out drawRect);
var renderer = new RenderTarget(intermediate);
- renderer.Render(visual, null, transform, drawRect);
+ renderer.Render(visual, transform, drawRect);
this.PlatformBrush = new BitmapBrush(
target,
diff --git a/src/Windows/Perspex.Direct2D1/RenderTarget.cs b/src/Windows/Perspex.Direct2D1/RenderTarget.cs
index 95259f324b..ea6400be80 100644
--- a/src/Windows/Perspex.Direct2D1/RenderTarget.cs
+++ b/src/Windows/Perspex.Direct2D1/RenderTarget.cs
@@ -94,9 +94,8 @@ namespace Perspex.Direct2D1
///
/// Creates a drawing context for a rendering session.
///
- /// The platform handle. Unused.
/// An .
- public IDrawingContext CreateDrawingContext(IPlatformHandle handle)
+ public IDrawingContext CreateDrawingContext()
{
return new DrawingContext(_renderTarget, DirectWriteFactory);
}
diff --git a/src/Windows/Perspex.Win32/WindowImpl.cs b/src/Windows/Perspex.Win32/WindowImpl.cs
index fa3313c232..dda55f4757 100644
--- a/src/Windows/Perspex.Win32/WindowImpl.cs
+++ b/src/Windows/Perspex.Win32/WindowImpl.cs
@@ -51,7 +51,7 @@ namespace Perspex.Win32
public Action Input { get; set; }
- public Action Paint { get; set; }
+ public Action Paint { get; set; }
public Action Resized { get; set; }
@@ -405,7 +405,7 @@ namespace Perspex.Win32
{
UnmanagedMethods.RECT r;
UnmanagedMethods.GetUpdateRect(_hwnd, out r, false);
- Paint(new Rect(r.left, r.top, r.right - r.left, r.bottom - r.top), Handle);
+ Paint(new Rect(r.left, r.top, r.right - r.left, r.bottom - r.top));
UnmanagedMethods.EndPaint(_hwnd, ref ps);
}
}